Плагин MegaD



  • artem521, а с какой целью опрашиваешь все каналы контроллера так часто? Ведь особенность MegaD в том что она сама по событию на порте (замыкание/размыкание) присылает сообщение на сервер. И опрашивать нужно только каналы, на которых висят датчики (DS18B20, DHT и датчики на шине I2C).



  • @Alex_Jet:

    artem521, а с какой целью опрашиваешь все каналы контроллера так часто? Ведь особенность MegaD в том что она сама по событию на порте (замыкание/размыкание) присылает сообщение на сервер. И опрашивать нужно только каналы, на которых висят датчики (DS18B20, DHT и датчики на шине I2C).

    Я пробую все варианты по проблеме с диммером, чего-то не понимаю в чем дело



  • @intrapro:

    @artem521:

    @intrapro:

    Команды управления в логе не вижу. А чтобы увидеть изменение значения с 255 на 254 надо сделать на устройстве-диммере логический интервал не 0-100, а 0-255. Иначе, 255 и 254 - это все равно 100

    Я так делал изначально. Не меняются значения. Даже если с веба меги задаю любое значение, на IH не меняется.

    У вас в логе канал 10 связался с устройством DIM2, но читается оттуда только 255 и 254.

    Когда изменяете на меге, посмотрите в отладчике - на 10 канале должно значение измениться. Пока оно только 255 и 254

    ON/1;OFF;ON/1;ON;ON;192;ON;ON;ON;ON;254;OFF;ON;ON;ON;ON;OFF;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;14.40;OFF;ON;ON;ON;ON;ON;ON

    Введенные значения с меги в отладчике меняются, но на самом актуаторе меняется с "0" на "1"

    01.02 20:39:39.069 megad1: 
    01.02 20:39:39.072 megad1: localhost => 192.168.0.16 HTTP GET /sec/?cmd=all
    01.02 20:39:39.082 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 20:39:39.085 megad1:  body: OFF/2;OFF;OFF/1;OFF;OFF;1019;OFF;ON;ON;ON;130;OFF;ON;ON;OFF;ON;OFF;ON;OFF;OFF;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;27.36;OFF;ON;ON;ON;ON;ON;ON
    01.02 20:39:39.088 IH: get [{"id":"1","value":"0"},{"id":"10","value":1},{"id":"30","value":"27.36"}]
    01.02 20:39:39.089 IH: set {"VENT1":{"dval":"0","err":0},"DIMM2":{"aval":1,"err":0},"SENSORA1":{"aval":"27.36","err":0}}
    01.02 20:39:39.273 megad1: 
    01.02 20:39:39.274 megad1: localhost => 192.168.0.16 HTTP GET /sec/?pt=30&cmd=get
    01.02 20:39:39.284 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 20:39:39.285 megad1:  body: 27.36
    01.02 20:39:39.286 IH: get [{"id":"30","value":"27.36"}]
    01.02 20:39:39.287 IH: set {"SENSORA1":{"aval":"27.36","err":0}}
    01.02 20:39:40.276 megad1: 
    01.02 20:39:40.277 megad1: localhost => 192.168.0.16 HTTP GET /sec/?cmd=all
    01.02 20:39:40.290 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 20:39:40.291 megad1:  body: OFF/2;OFF;OFF/1;OFF;OFF;1019;OFF;ON;ON;ON;130;OFF;ON;ON;OFF;ON;OFF;ON;OFF;OFF;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;27.36;OFF;ON;ON;ON;ON;ON;ON
    01.02 20:39:40.294 IH: get [{"id":"1","value":"0"},{"id":"10","value":1},{"id":"30","value":"27.36"}]
    01.02 20:39:40.295 IH: set {"VENT1":{"dval":"0","err":0},"DIMM2":{"aval":1,"err":0},"SENSORA1":{"aval":"27.36","err":0}}
    01.02 20:39:40.477 megad1: 
    01.02 20:39:40.479 megad1: localhost => 192.168.0.16 HTTP GET /sec/?pt=30&cmd=get
    01.02 20:39:40.487 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 20:39:40.488 megad1:  body: 27.36
    01.02 20:39:40.489 IH: get [{"id":"30","value":"27.36"}]
    01.02 20:39:40.489 IH: set {"SENSORA1":{"aval":"27.36","err":0}}
    01.02 20:39:41.480 megad1: 
    01.02 20:39:41.482 megad1: localhost => 192.168.0.16 HTTP GET /sec/?cmd=all
    01.02 20:39:41.493 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 20:39:41.494 megad1:  body: OFF/2;OFF;OFF/1;OFF;OFF;1023;OFF;ON;ON;ON;140;OFF;ON;ON;OFF;ON;OFF;ON;OFF;OFF;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;27.36;OFF;ON;ON;ON;ON;ON;ON
    01.02 20:39:41.495 IH: get [{"id":"1","value":"0"},{"id":"10","value":1},{"id":"30","value":"27.36"}]
    01.02 20:39:41.496 IH: set {"VENT1":{"dval":"0","err":0},"DIMM2":{"aval":1,"err":0},"SENSORA1":{"aval":"27.36","err":0}}
    01.02 20:39:41.682 megad1: 
    01.02 20:39:41.684 megad1: localhost => 192.168.0.16 HTTP GET /sec/?pt=30&cmd=get
    01.02 20:39:41.692 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 20:39:41.693 megad1:  body: 27.36
    01.02 20:39:41.694 IH: get [{"id":"30","value":"27.36"}]
    01.02 20:39:41.694 IH: set {"SENSORA1":{"aval":"27.36","err":0}}
    01.02 20:39:42.685 megad1: 
    01.02 20:39:42.687 megad1: localhost => 192.168.0.16 HTTP GET /sec/?cmd=all
    01.02 20:39:42.698 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 20:39:42.699 megad1:  body: OFF/2;OFF;OFF/1;OFF;OFF;1020;OFF;ON;ON;ON;140;OFF;ON;ON;OFF;ON;OFF;ON;OFF;OFF;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;27.18;OFF;ON;ON;ON;ON;ON;ON
    01.02 20:39:42.700 IH: get [{"id":"1","value":"0"},{"id":"10","value":1},{"id":"30","value":"27.18"}]
    01.02 20:39:42.701 IH: set {"VENT1":{"dval":"0","err":0},"DIMM2":{"aval":1,"err":0},"SENSORA1":{"aval":"27.18","err":0}}
    01.02 20:39:42.887 megad1: 
    01.02 20:39:42.888 megad1: localhost => 192.168.0.16 HTTP GET /sec/?pt=30&cmd=get
    01.02 20:39:42.897 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 20:39:42.898 megad1:  body: 27.18
    01.02 20:39:42.898 IH: get [{"id":"30","value":"27.18"}]
    01.02 20:39:42.899 IH: set {"SENSORA1":{"aval":"27.18","err":0}}
    
    

    Походу чего-то не так делаю
    1d.png
    2d.png
    3d.png



  • Хотя вот что заметил- ползунком если управлять с IH, значение на веб меги меняется, а на самом актуаторе нет.
    33d.png



  • @artem521:

    Введенные значения с меги в отладчике меняются, но на самом актуаторе меняется с "0" на "1"

    Походу чего-то не так делаю

    В канале:

    Значение логического уровня 0-:

    У вас стоит 0, надо 255 (или 100, если стандартно, это яркость)



  • @intrapro:

    @artem521:

    Введенные значения с меги в отладчике меняются, но на самом актуаторе меняется с "0" на "1"

    Походу чего-то не так делаю

    В канале:

    Значение логического уровня 0-:

    У вас стоит 0, надо 255 (или 100, если стандартно, это яркость)

    Спасибо, все теперь заработало. Информации побольше б по настройкам.



  • Добрый день, начел осваивать мегад, возниули вопросы, помогите хто может!!!!!

    1. в устройстве нет выбора http:<ссылка удалена>, хотя в устройствах создал http:<ссылка удалена>

    2. в екранах не подгружается фото http:<ссылка удалена> хотя в уровнях добавил фото http:<ссылка удалена>



  • @amgstone:

    Добрый день, начел осваивать мегад, возниули вопросы, помогите хто может!!!!!

    1. в устройстве нет выбора , хотя в устройствах создал

    2. в екранах не подгружается фото

    Предупреждение! Ссылки на нетематические сайты рекламного характера на этом форуме недопустимы.

    Форум позволяет прикладывать скриншоты. Прошу продублировать свой пост в соответствии с правилами форума.



  • Добрый день, начел осваивать мегад, возниули вопросы, помогите хто может!!!!!

    1. в устройстве нет выбора , хотя в устройствах создал

    2. в екранах не подгружается фото хотя в уровнях добавил фото



  • Странно работает опрос всех портов (создается ощущение, что не работает).

    Привязал к порту 7 устройство "светильник".

    Настроил в параметрах плагина опрос всех портов контроллера Меги каждые 60 секунд.

    Включаю светильник из intraHouse.

    Изменение порта отображается.

    Выключаю на контроллере порт 7 командой из браузера (руками).

    Порт 7 на контроллере выключается, но intraHouse этого не видит, ни через 60 секунд, ни больше…



  • @filippovsky:

    Странно работает опрос всех портов (создается ощущение, что не работает).

    Привязал к порту 7 устройство "светильник".

    Настроил в параметрах плагина опрос всех портов контроллера Меги каждые 60 секунд.

    Включаю светильник из intraHouse.

    Изменение порта отображается.

    Выключаю на контроллере порт 7 командой из браузера (руками).

    Порт 7 на контроллере выключается, но intraHouse этого не видит, ни через 60 секунд, ни больше…

    Желательно посмотреть в отладчике плагина:

    Выберите плагин, в нижнем окне - Отладчик. У вас вместо modbus будет megad

    Кнопка play - начинает вывод, стоп - останавливает
    plugin_debug.png

    Там нужно смотреть:

    1. Отправляются или нет запросы cmd=all

    2. Если да, что отвечает megad по 7 каналу

    3. Как эти данные интерпретирует сервер (get - получил от плагина, set - записал в устройство)



  • странно.

    Сейчас отработало нормально.

    Спасибо, понаблюдаю еще..

    02.02 17:06:45.813 megad1: localhost => 192.168.0.15 HTTP GET /sec/?cmd=7:1

    02.02 17:06:45.898 megad1: localhost <= 192.168.0.15 response: statusCode=200 contentType = text/html

    02.02 17:06:45.899 megad1: body: Done

    02.02 17:06:45.900 IH: get [{"id":"7","value":1}]

    02.02 17:06:45.901 IH: set {"LAMP_HALL1":{"dval":1,"err":0}}

    02.02 17:07:12.262 megad1:

    02.02 17:07:12.264 megad1: localhost => 192.168.0.15 HTTP GET /sec/?cmd=all

    02.02 17:07:12.355 megad1: localhost <= 192.168.0.15 response: statusCode=200 contentType = text/html

    02.02 17:07:12.357 megad1: body: OFF/0;OFF/0;OFF/0;OFF;OFF;OFF;OFF;ON;OFF;OFF;ON;ON;ON;ON;ON;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;temp:-1.93;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF

    02.02 17:07:12.359 IH: get [{"id":"7","value":"1"},{"id":"27","value":"-1.93"}]

    02.02 17:07:12.360 IH: set {"LAMP_HALL1":{"dval":"1","err":0},"STEMP1":{"aval":"-1.93","err":0}}

    02.02 17:08:12.364 megad1:

    02.02 17:08:12.365 megad1: localhost => 192.168.0.15 HTTP GET /sec/?cmd=all

    02.02 17:08:12.474 megad1: localhost <= 192.168.0.15 response: statusCode=200 contentType = text/html

    02.02 17:08:12.475 megad1: body: OFF/0;OFF/0;OFF/0;OFF;OFF;OFF;OFF;OFF;OFF;OFF;ON;ON;ON;ON;ON;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;OFF;temp:-1.93;OFF;ON;OFF;OFF;OFF;OFF;OFF;OFF;OFF;ON

    02.02 17:08:12.477 IH: get [{"id":"7","value":"0"},{"id":"27","value":"-1.93"}]

    02.02 17:08:12.477 IH: set {"LAMP_HALL1":{"dval":"0","err":0},"STEMP1":{"aval":"-1.93","err":0}}



  • Коллеги, подскажите! А плагин не будете дорабатывать в части более сложной обработки данных от аналоговых устройств?

    Для обработки данных от MH-Z14A требуется: общая периодичность опроса датчика - 5 минут, при опросе необходимо сделать 5 запросов через 5-10 секунд, далее отсортировать их, откинуть крайние, сложить оставшиеся и усреднить. В Berry это получилось сделать когда стало возможно возвращать не только значение устройства, но и период его опроса (reqsec).

    Ну и все же очень хотелось бы такого же поведения плагина Cherry как в Berry в том случае когда контроллер шлет сообщения с m=1 и m=2.



  • @Alex_Jet:

    Коллеги, подскажите! А плагин не будете дорабатывать в части более сложной обработки данных от аналоговых устройств?

    Для обработки данных от MH-Z14A требуется: общая периодичность опроса датчика - 5 минут, при опросе необходимо сделать 5 запросов через 5-10 секунд, далее отсортировать их, откинуть крайние, сложить оставшиеся и усреднить. В Berry это получилось сделать когда стало возможно возвращать не только значение устройства, но и период его опроса (reqsec).

    Ну и все же очень хотелось бы такого же поведения плагина Cherry как в Berry в том случае когда контроллер шлет сообщения с m=1 и m=2.

    Добрый день!

    Период опроса из функции - сделаем

    Также добавим и это: по умолчанию в качестве параметра передавать JSON, в котором будет содержаться IP-адрес MegaD

    А вот по входящим без m - это загадка 😞

    Вероятно, придется добавить что-то вроде pt=xx&m=! - не брать запрос, если присутствует m

    По срокам точно не скажу, до конца месяца будет



  • @intrapro:

    Период опроса из функции - сделаем

    Также добавим и это: по умолчанию в качестве параметра передавать JSON, в котором будет содержаться IP-адрес MegaD

    Отлично, буду ждать.
    @intrapro:

    А вот по входящим без m - это загадка 😞

    Вероятно, придется добавить что-то вроде pt=xx&m=! - не брать запрос, если присутствует m

    Я конечно все понимаю, но в вашем случае даже реверс-инжиниринг не надо делать. Тем более у Вас появился железный контроллер MegaD-2561. Надо вывести отладку в Berry и Cherry и сымитировать ситуацию "долгого удержания кнопки" в режиме P. Я же привел скриншоты что в Berry работало все отлично, а в Cherry - все иначе. Причем помню мне Владимир писал, что достаточно указать pt=1 и если будет вхождение только pt=1, то request сработает. Ну то есть работало фактически по маске. Если пишешь pt=1&m=1, то сработает только на такое вхождение, если pt=1&m=2 то только на такое…

    И еще забыл, правда сам не тестировал пока - в серверной части внесли изменения по отображению 3-х состояний индикатора плагина: NOT ACTIVATED, STOPPED, RUN? И еще что-то было по серверной части...пойду почитаю ветку.



  • @Alex_Jet:

    Я конечно все понимаю, но в вашем случае даже реверс-инжиниринг не надо делать. Тем более у Вас появился железный контроллер MegaD-2561. Надо вывести отладку в Berry и Cherry и сымитировать ситуацию "долгого удержания кнопки" в режиме P. Я же привел скриншоты что в Berry работало все отлично, а в Cherry - все иначе. Причем помню мне Владимир писал, что достаточно указать pt=1 и если будет вхождение только pt=1, то request сработает. Ну то есть работало фактически по маске. Если пишешь pt=1&m=1, то сработает только на такое вхождение, если pt=1&m=2 то только на такое…

    Тут MegaD не нужен совсем. Обработка запросов построена на идее, что мы не отслеживаем, какие параметры передает контроллер (кроме pt), просто ищется максимально подходящий вариант.

    Алгоритм такой:

    Запросы группируются по pt. Отдельная группа - запросы без pt

    Далее определяется, какие ключи есть в запросе и подбирается подходящий запрос по наличию максимального количества совпадений ключей.

    Например, есть запросы в таблице:

    1. /pt=7&m=1

    2. /pt=7

    Контроллер присылает /pt=7&cnt=1 - возьмется второй, /pt=7&m=2 - не возьмется никакой, так как ключи совпали с первым, а значение-нет.

    Но если в таблице единственный запрос /pt=7 - он и считается подходящим для любого варианта, хоть с m, хоть без m. Потому что про m алгоритм не знает 😞

    Выхода два:

    Вариант 1. Сделать ловушку:

    /pt=7&m=* -сюда попадаем, если m есть с любым значением. Можно оставить без обработки

    /pt=7 - сюда попадаем, если m нет

    Это работает уже сейчас

    Вариант 2.

    Как то сообщить алгоритму, что если в запросе есть m, то его не надо брать, например

    /pt=7&m=! (или какой-то другой символ отрицания)



  • @intrapro:

    Алгоритм такой:

    Запросы группируются по pt. Отдельная группа - запросы без pt

    Далее определяется, какие ключи есть в запросе и подбирается подходящий запрос по наличию максимального количества совпадений ключей.

    А где это все описано? Точнее в каком файле, какую часть кода посмотреть?
    @intrapro:

    Вопрос на засыпку - у Вас нет плагина, который слушает порт и смотря что пришло по нему - выполняет команды? А-ля урезанная версия MegaD, но только без каналов…

    Update: в общем все везде поменял на имя нового плагина. Выпилил из function next() case 2. Плагин запустился и начал слушать порт. Сообщения приходят. Надо гит осваивать:)

    Предлагаю открыть новую тему по созданию плагинов пользователями. Однако нужен вводный пост от Вас - из чего состоит плагин, что собой представляют разные файлы (скелет плагина), как происходит взаимодействие сервера с плагинами и прочее. Ну и вводный экскурс как это все размещать на гитхабе чтобы можно было пользоваться штатной процедурой обновления плагинов.



  • @Alex_Jet:

    @intrapro:

    Алгоритм такой:

    Запросы группируются по pt. Отдельная группа - запросы без pt

    Далее определяется, какие ключи есть в запросе и подбирается подходящий запрос по наличию максимального количества совпадений ключей.

    А где это все описано? Точнее в каком файле, какую часть кода посмотреть?

    Все в файле lib/httpserver.js

    При запуске формируется таблица для поиска - функция formTableMReq

    При поступлении запроса функция findMReq ищет в этой таблице

    @Alex_Jet:

    В общем все везде поменял на имя нового плагина. Выпилил из function next() case 2. Плагин запустился и начал слушать порт. Сообщения приходят.

    Отлично!!! Мы заинтересованы, чтобы продвинутые пользователи создавали плагины 🙂

    @Alex_Jet:

    Предлагаю открыть новую тему по созданию плагинов пользователями. Однако нужен вводный пост от Вас - из чего состоит плагин, что собой представляют разные файлы (скелет плагина), как происходит взаимодействие сервера с плагинами и прочее. Ну и вводный экскурс как это все размещать на гитхабе чтобы можно было пользоваться штатной процедурой обновления плагинов.

    Да, тема по созданию плагинов нужна, откроем. С описанием - на это нужно некоторое время.

    Хотя документация по плагинам уже есть на гитхабе: https://github.com/intrahouseio/intraHouse-Cherry/wiki

    Раздел "Concept of Plugins" и дальше (там только названия английские, внутри на русском)

    Возможно, некоторые детали устарели, но в целом по структуре плагина там все описано.



  • Господа, разработчики! А раз у Вас есть MegaD-2561, то вы не могли бы потестировать ее с плагином Cherry? Навешать на 30-35 порты I2C датчики, ds18b20 и несколько DS18B20 на шине I2C. Могу прислать свой конфиг, в котором вам нужно будет только IP адрес свой прописать. У меня раз в 2-3 дня все так же зависает контроллер. С разработчиком ни к чему не пришли…у него со скриптами на php все отлично работает продолжительное время! Грешит на iH...



  • @Alex_Jet:

    Господа, разработчики! А раз у Вас есть MegaD-2561, то вы не могли бы потестировать ее с плагином Cherry? Навешать на 30-35 порты I2C датчики, ds18b20 и несколько DS18B20 на шине I2C. Могу прислать свой конфиг, в котором вам нужно будет только IP адрес свой прописать. У меня раз в 2-3 дня все так же зависает контроллер. С разработчиком ни к чему не пришли…у него со скриптами на php все отлично работает продолжительное время! Грешит на iH...

    Добрый день!

    Дежа вю 🙂

    @Alex_Jet:

    07 апр 2017, 04:27

    Подытожу данную тему. Проблема зависания MegaD-2561 при подключенном к нему по I2C датчике HTU21D была в прошивке. Автор не раскрывает секретов что он изменил или сам не понимает какое изменение повлияло на удаление данного бага. К слову сказать с тех пор было много изменений прошивки - добавлена поддержка многих других датчиков, работающих по шине I2C (BH1750, TSL2591, BMP180, BMP/BME280, SI7021, MCP23008), поддержка считывателей и кодовых панелей с Wiegand-26, нативная поддержка OLED-дисплеев на контроллере SSD1306 (также I2C-шина), добавлен новый режим для входов "Click mode", появилась возможность работы с контроллером по MQTT и прочее.

    Напомню, баг проявлялся только при опросе контроллера MegaD-2561 командой /%pwd%/?pt=34&scl=35&i2c_dev=htu21d&i2c_par=1 (запрос температуры с датчика HTU21D) с любой периодичностью (пробовал 60 секунд - 5 минут) - контроллер через какое-то время зависал (промежуток времени от 3 до 24 часов), помогал только ручной сброс (в версии платы контроллера 1.0 - отключение по питанию, в версии 2.0 - сброс кнопкой), пока автором прошивки не был включен встроенный в МК "сторожевой пес".

    В связи с вышеизложенным, выражаю большую признательность авторам IH, что откликнулись и провели большую работу по выявлению описанного бага. Отрицательный результат - также результат!

    Так понимаю, watch dog сейчас срабатывает, контроллер не зависает, а перезагружается.

    Ну давайте еще раз проанализируем задачу:

    1. У Вас перезагружается один контроллер, на котором есть I2C, 1Wire и 1Wire по I2C

    Остальные контроллеры работают без проблем

    2. За все время (3 года) у других пользователей не было проблем с зависанием ни плагина, ни контроллера. По крайней мере, не было сообщений. Приглашаю пользователей MegaD сообщить, если сталкивались с зависаниями.

    3. В плагине для Cherry гарантируется, что запросы идут не чаще заданного вами в настройке интервала. То есть ни о какой ddos-атаке речь идти не может

    Что можно предпринять:

    1. Упростить конфигурацию датчиков и выяснить, какой датчик приводит к проблемам

    2. Уменьшить "Интервал отправки запросов (мсек)" до минимально декларируемого для MegaD, но не воспринимаемого как ddos атака.

    Скорее всего, в этом случае зависание поймается быстрее. Если да - запишите трафик с помощью tcpdump и пришлите его нам.

    sudo tcpdump -s0 -A -vvv host 192.168.0.14 -w megadump.pcap

    В следующем релизе системы будет возможность писать логи плагина в файлы (как в Berry)

    Но там информации конечно меньше чем в дампе.


Авторизуйтесь, чтобы ответить