Плагин MegaD



  • @dev:

    @Alex_Jet:

    @intrapro:

    TOGGLE для бинарных датчиков не определен 😞

    Какие есть варианты? Мне бы хотелось иметь возможность активировать/деактивировать виртуальный индикатор взятия в том числе с помощью iButton

    Как вариант можно управлять датчиком через сценарий, подписавшись на актуатор, такой хак 😉

    Можно еще проще - привязать бинарный актуатор, а интерактивные операции для него отключить



  • @intrapro:

    Можно еще проще - привязать бинарный актуатор, а интерактивные операции для него отключить

    Да, это идея, спасибо!

    Еще есть проблема с отображением значений датчиков, подключенных к MegaD по I2C, но не выбранных в контроллере в качестве default (если они выбраны по умолчанию, то по команде cmd=all будет результат вида - temp:128.85/hum:118.98) - то есть данные с датчиков запрашиваем принудительно и в ответе контроллер посылает только числовое значение:

    09.10 09:51:26.629 megad5: 
    09.10 09:51:26.630 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=30&scl=34&i2c_dev=htu21d&i2c_par=1
    09.10 09:51:26.688 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    09.10 09:51:26.689 megad5:  body: 26.02
    09.10 09:51:26.689 IH: get []
    09.10 09:51:26.689 IH: set {}
    09.10 09:51:26.830 megad5: 
    09.10 09:51:26.831 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=30&scl=34&i2c_dev=htu21d
    09.10 09:51:26.858 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    09.10 09:51:26.859 megad5:  body: 40.13
    09.10 09:51:26.860 IH: get []
    09.10 09:51:26.860 IH: set {}
    
    

    Если бы датчик был выбран в контроллере по умолчанию, то ответ был бы не только числовым (в примере для DS18B20):

    09.10 09:59:06.772 megad5: 
    09.10 09:59:06.773 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=29&cmd=get
    09.10 09:59:06.782 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    09.10 09:59:06.782 megad5:  body: temp:25.25
    09.10 09:59:06.783 IH: get [{"id":"29","value":"25.25"}]
    09.10 09:59:06.783 IH: set {"ST_HEATING4_02":{"aval":"25.25"}}
    
    

    Еще один момент - после старта плагина (или если MegaD перезагрузился - дал на сервер команду st), необходимо не только считать все каналы командой cmd=all, но и считать сразу все доп каналы (особенно касается I2C каналов). Сейчас при считывании состояния всех каналов, некоторые из них по сути "undefined" (в ответе присутствует ";;;") и только через интервал опроса получаем с них данные. Кроме этого, не понятно почему каналы с состоянием "undefined" принимают нулевые значения, например, канал 35:

    09.10 09:54:06.435 megad5: MegaD plugin has started.
    09.10 09:54:06.451 megad5: Listen server start
    09.10 09:54:06.458 megad5: Listening localhost:11025
    09.10 09:54:06.662 megad5: 
    09.10 09:54:06.662 megad5: localhost => 192.168.11.25 HTTP GET /sec/?cmd=all
    09.10 09:54:06.837 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    09.10 09:54:06.845 megad5:  body: OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;ON/1;ON/1;OFF;OFF;OFF;OFF;OFF;OFF;OFF;temp:24.93;OFF/0;OFF/0;OFF/0;OFF/0;ON/1;temp:0.00;temp:0.00;OFF;OFF;OFF;OFF;OFF;OFF;OFF;temp:25.31;;;temp:128.85/hum:118.98;temp:128.85/hum:118.98;OFF;;OFF;OFF
    09.10 09:54:06.848 IH: get [{"id":"5","value":"1"},{"id":"6","value":"1"},{"id":"7","value":"0"},{"id":"8","value":"0"},{"id":"9","value":"0"},{"id":"10","value":"0"},{"id":"11","value":"0"},{"id":"12","value":"0"},{"id":"14","value":"24.93"},{"id":"18","value":"0"},{"id":"19","value":"1"},{"id":"20","value":"0"},{"id":"21","value":"0"},{"id":"22","value":"0"},{"id":"23","value":"0"},{"id":"24","value":"0"},{"id":"25","value":"0"},{"id":"26","value":"0"},{"id":"27","value":"0"},{"id":"28","value":"0"},{"id":"29","value":"25.31"},{"id":"35","value":"0"},{"id":"32_1","value":"128.85"},{"id":"32_2","value":"118.98"},{"id":"33_1","value":"128.85"},{"id":"33_2","value":"118.98"}]
    09.10 09:54:06.849 IH: set {"SGERKON4_02":{"dval":0},"SMOTION4_02":{"dval":0},"LAMP0_01":{"dval":"0"},"LAMP1_07":{"dval":"0"},"VENT1":{"dval":"0"},"VENT2":{"dval":"0"},"ACTOR_HEATING4_01":{"dval":"0"},"ACTOR_HEATING4_02":{"dval":"0"},"ST_HEATING4_01":{"aval":"24.93"},"SENSOR1_01":{"dval":"0"},"SFIRE1_04":{"dval":0},"STEMP_PVU1":{"aval":"0"},"STEMP_PVU2":{"aval":"0"},"VENT_PVU1":{"dval":"0"},"VENT_PVU2":{"dval":"0"},"VENT_PVU3":{"dval":"0"},"VALVE_AIR1":{"dval":"0"},"VALVE_AIR3":{"dval":"0"},"VALVE_AIR4":{"dval":"0"},"VALVE_AIR5":{"dval":"0"},"ST_HEATING4_02":{"aval":"25.31"},"SSECURITY_SYS_01":{"dval":"0"},"STEMP1_02":{"aval":"128.85"},"SHUMIDITY1_02":{"aval":"118.98"},"STEMP_PVU3":{"aval":"128.85"},"SHUMIDITY_PVU1":{"aval":"118.98"}}
    09.10 09:59:06.573 megad5: 
    09.10 09:59:06.574 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=14&cmd=get
    09.10 09:59:06.581 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    09.10 09:59:06.582 megad5:  body: temp:24.87
    09.10 09:59:06.583 IH: get [{"id":"14","value":"24.87"}]
    09.10 09:59:06.583 IH: set {"ST_HEATING4_01":{"aval":"24.87"}}
    09.10 09:59:06.772 megad5: 
    09.10 09:59:06.773 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=29&cmd=get
    09.10 09:59:06.782 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    09.10 09:59:06.782 megad5:  body: temp:25.25
    09.10 09:59:06.783 IH: get [{"id":"29","value":"25.25"}]
    09.10 09:59:06.783 IH: set {"ST_HEATING4_02":{"aval":"25.25"}}
    09.10 09:59:06.973 megad5: 
    09.10 09:59:06.974 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=30&scl=34&i2c_dev=htu21d&i2c_par=1
    09.10 09:59:07.033 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    09.10 09:59:07.033 megad5:  body: 26.00
    09.10 09:59:07.034 IH: get []
    09.10 09:59:07.034 IH: set {}
    09.10 09:59:07.174 megad5: 
    09.10 09:59:07.175 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=30&scl=34&i2c_dev=htu21d
    09.10 09:59:07.203 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    09.10 09:59:07.204 megad5:  body: 40.21
    09.10 09:59:07.204 IH: get []
    09.10 09:59:07.204 IH: set {}
    
    

    В качестве пояснения что такое "датчик на шине I2C выбран по умолчанию". В текущем примере выбран по умолчанию дисплей OLED с контроллером SSD1306 - чтобы при загрузке MegaD проходила инициализация дисплея. При этом на эту шину можно еще 100500 датчиков подключить с разными адресами, запрашивая данные "нативной" командой.
    I2C_SSD1306_by_default.png



  • @intrapro:

    Пока, к сожалению, запуск функции для обработки полученного значения (функционал, который был в Berry), не реализован 😞

    Добавим в ближайших версиях

    Когда можно ожидать этот функционал? Без него мне нет смысла переходить на Cherry. При этом 70% настроек сервера уже сделал.



  • @Alex_Jet:

    Когда можно ожидать этот функционал?

    Предположительно до конца месяца.



  • @intrapro:

    Можно еще проще - привязать бинарный актуатор, а интерактивные операции для него отключить

    Загвоздка в том, что для DI нельзя выбрать актюатор… А если сделать DO, то может, наверно, как-нибудь не адекватно обрабатываться состояние? Вечером попробую проверить.

    @intrahouse:

    Предположительно до конца месяца.

    Это очень хорошо. И неточности в работе плагина надо устранить (см.выше).

    Про функционал вывода информации на OLED-дисплей даже молчу… пока, наверное, придется со второстепенного сервера отображать информацию на дисплеях.

    В дополнение прикладываю лог отладчика для анализа и исправления неточностей работы плагина MegaD:

    12.10 12:36:15.112 megad5: 192.168.11.25 => localhost:11025 HTTP GET /mod_megad.php?st=1
    12.10 12:36:15.112 megad5: 192.168.11.25 <= localhost:11025 
    12.10 12:36:15.125 megad5: 192.168.11.25 => localhost:11025 HTTP GET /mod_megad.php?pt=5&cnt=1
    12.10 12:36:15.126 IH: get [{"id":"5","value":"1"}]
    12.10 12:36:15.127 IH: set {"SGERKON4_02":{"dval":0}}
    12.10 12:36:15.127 megad5: 192.168.11.25 <= localhost:11025 
    12.10 12:36:15.140 megad5: 192.168.11.25 => localhost:11025 HTTP GET /mod_megad.php?pt=6&cnt=1
    12.10 12:36:15.140 IH: get [{"id":"6","value":"1"}]
    12.10 12:36:15.141 IH: set {"SMOTION4_02":{"dval":0}}
    12.10 12:36:15.141 megad5: 192.168.11.25 <= localhost:11025 
    12.10 12:36:15.154 megad5: 192.168.11.25 => localhost:11025 HTTP GET /mod_megad.php?pt=19&cnt=1
    12.10 12:36:15.155 IH: get [{"id":"19","value":"1"}]
    12.10 12:36:15.155 IH: set {"SFIRE1_04":{"dval":0}}
    12.10 12:36:15.156 megad5: 192.168.11.25 <= localhost:11025 
    12.10 12:36:15.170 megad5: 
    12.10 12:36:15.170 megad5: localhost => 192.168.11.25 HTTP GET /sec/?cmd=all
    12.10 12:36:15.339 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    12.10 12:36:15.340 megad5:  body: OFF/0;OFF/0;OFF/0;OFF/0;OFF/0;ON/1;ON/1;OFF;OFF;OFF;OFF;OFF;OFF;OFF;temp:25.81;OFF/0;OFF/0;OFF/0;OFF/0;ON/1;temp:26.93;temp:26.75;OFF;OFF;OFF;OFF;OFF;OFF;OFF;temp:26.00;;;temp:128.85/hum:118.98;temp:128.85/hum:118.98;OFF;;OFF;OFF
    12.10 12:36:15.342 IH: get [{"id":"5","value":"1"},{"id":"6","value":"1"},{"id":"7","value":"0"},{"id":"8","value":"0"},{"id":"9","value":"0"},{"id":"10","value":"0"},{"id":"11","value":"0"},{"id":"12","value":"0"},{"id":"14","value":"25.81"},{"id":"18","value":"0"},{"id":"19","value":"1"},{"id":"20","value":"26.93"},{"id":"21","value":"26.75"},{"id":"22","value":"0"},{"id":"23","value":"0"},{"id":"24","value":"0"},{"id":"25","value":"0"},{"id":"26","value":"0"},{"id":"27","value":"0"},{"id":"28","value":"0"},{"id":"29","value":"26"},{"id":"35","value":"0"},{"id":"32_1","value":"128.85"},{"id":"32_2","value":"118.98"},{"id":"33_1","value":"128.85"},{"id":"33_2","value":"118.98"}]
    12.10 12:36:15.343 IH: set {"SGERKON4_02":{"dval":0},"SMOTION4_02":{"dval":0},"LAMP0_01":{"dval":"0"},"LAMP1_07":{"dval":"0"},"VENT1":{"dval":"0"},"VENT2":{"dval":"0"},"ACTOR_HEATING4_01":{"dval":"0"},"ACTOR_HEATING4_02":{"dval":"0"},"ST_HEATING4_01":{"aval":"25.81"},"SENSOR1_01":{"dval":"0"},"SFIRE1_04":{"dval":0},"STEMP_PVU1":{"aval":"26.93"},"STEMP_PVU2":{"aval":"26.75"},"VENT_PVU1":{"dval":"0"},"VENT_PVU2":{"dval":"0"},"VENT_PVU3":{"dval":"0"},"VALVE_AIR1":{"dval":"0"},"VALVE_AIR3":{"dval":"0"},"VALVE_AIR4":{"dval":"0"},"VALVE_AIR5":{"dval":"0"},"ST_HEATING4_02":{"aval":"26"},"ACTOR_SECURITY_SYS01":{"dval":"0"},"STEMP1_02":{"aval":"128.85"},"SHUMIDITY1_02":{"aval":"118.98"},"STEMP_PVU3":{"aval":"128.85"},"SHUMIDITY_PVU1":{"aval":"118.98"}}
    12.10 12:36:16.082 megad5: 192.168.11.25 => localhost:11025 HTTP GET /mod_megad.php?pt=6&m=2&cnt=1
    12.10 12:36:16.083 IH: get [{"id":"6","value":"1"}]
    12.10 12:36:16.083 IH: set {"SMOTION4_02":{"dval":0}}
    12.10 12:36:16.084 megad5: 192.168.11.25 <= localhost:11025 
    12.10 12:36:16.094 megad5: 192.168.11.25 => localhost:11025 HTTP GET /mod_megad.php?pt=5&m=2&cnt=1
    12.10 12:36:16.095 IH: get [{"id":"5","value":"1"}]
    12.10 12:36:16.095 IH: set {"SGERKON4_02":{"dval":0}}
    12.10 12:36:16.096 megad5: 192.168.11.25 <= localhost:11025 
    12.10 12:36:16.107 megad5: 192.168.11.25 => localhost:11025 HTTP GET /mod_megad.php?pt=19&m=2&cnt=1
    12.10 12:36:16.108 IH: get [{"id":"19","value":"1"}]
    12.10 12:36:16.109 IH: set {"SFIRE1_04":{"dval":0}}
    12.10 12:36:16.109 megad5: 192.168.11.25 <= localhost:11025 
    12.10 12:41:15.251 megad5: 
    12.10 12:41:15.252 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=14&cmd=get
    12.10 12:41:15.260 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    12.10 12:41:15.260 megad5:  body: temp:25.93
    12.10 12:41:15.261 IH: get [{"id":"14","value":"25.93"}]
    12.10 12:41:15.261 IH: set {"ST_HEATING4_01":{"aval":"25.93"}}
    12.10 12:41:15.452 megad5: 
    12.10 12:41:15.453 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=20&cmd=get
    12.10 12:41:15.463 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    12.10 12:41:15.464 megad5:  body: temp:27.00
    12.10 12:41:15.464 IH: get [{"id":"20","value":"27"}]
    12.10 12:41:15.465 IH: set {"STEMP_PVU1":{"aval":"27"}}
    12.10 12:41:15.654 megad5: 
    12.10 12:41:15.654 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=21&cmd=get
    12.10 12:41:15.663 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    12.10 12:41:15.663 megad5:  body: temp:26.75
    12.10 12:41:15.664 IH: get [{"id":"21","value":"26.75"}]
    12.10 12:41:15.664 IH: set {"STEMP_PVU2":{"aval":"26.75"}}
    12.10 12:41:15.854 megad5: 
    12.10 12:41:15.855 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=29&cmd=get
    12.10 12:41:15.863 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    12.10 12:41:15.864 megad5:  body: temp:26.06
    12.10 12:41:15.864 IH: get [{"id":"29","value":"26.06"}]
    12.10 12:41:15.865 IH: set {"ST_HEATING4_02":{"aval":"26.06"}}
    12.10 12:41:16.056 megad5: 
    12.10 12:41:16.056 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=30&scl=34&i2c_dev=htu21d&i2c_par=1
    12.10 12:41:16.116 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    12.10 12:41:16.116 megad5:  body: 26.93
    12.10 12:41:16.117 IH: get []
    12.10 12:41:16.117 IH: set {}
    12.10 12:41:16.257 megad5: 
    12.10 12:41:16.258 megad5: localhost => 192.168.11.25 HTTP GET /sec/?pt=30&scl=34&i2c_dev=htu21d
    12.10 12:41:16.287 megad5: localhost <= 192.168.11.25  response: statusCode=200 contentType = text/html
    12.10 12:41:16.287 megad5:  body: 35.66
    12.10 12:41:16.288 IH: get []
    12.10 12:41:16.288 IH: set {}
    
    

    Для информации - после перезагрузки MegaD выдает серверу сообщение st=1, а потом самостоятельно фигачит "трапы" по каждому входу, которые находятся не в "дефолтном" (OFF) состоянии.



  • Еще момент по видимому устройству плагина. Оно по умолчанию имеет 3 состояния - NOT ACTIVATED, STOP, RUN.

    Хотелось бы чтобы когда плагин принудительно остановлен было состояние - STOP.

    Когда КОНТРОЛЛЕР не отвечает (недоступен в сети), но плагин работает, то устройство было в состоянии - NOT ACTIVATED.

    Ну и когда все работает в штатном режиме, то - RUN.

    Сейчас если контроллер недоступен и плагин используется в проекте, то его устройство мигает STOP/RUN с периодичностью перезапуска плагина…в Berry оно было в состоянии STOP пока контроллер был недоступен.

    Еще интересно что устройства плагинов не отображаются в списке устройств, хотя на мнемосхемы их вытащить можно.



  • Есть проблемка со скриптом управления температурой и megaD. Попробую описать. Если запускаем одновременно сервер и роутер, а роутер подвис. Температура сервере установлена 30. Т.к. датчика нет то сервер видит последнюю то есть например 28 и сервер дает команду, но устройства нет в сети. Батареи включается на интерфейсе. Перезагрузил роутер. Батарея включена на интересе дома. А по факту выход не активен. И так пока температура не подниматься выше 30 и снова упадёт. Как с этим бороться? Я так понимаю должна быть индикация аварии если устройства нет в сети.



  • @thunder_d:

    Во вкладке Обработка есть инверсия значений , но она что то не работает, Может корявые руки 😄

    Господа, скажите работает инверсия или нет?



  • @thunder_d:

    @thunder_d:

    Во вкладке Обработка есть инверсия значений , но она что то не работает, Может корявые руки 😄

    Господа, скажите работает инверсия или нет?

    Инверсия отрабатывается на уровне сервера при получении данных от плагина.

    То есть Вы увидите инверсию, только если к каналу привязано устройство.

    Например, на канале 2 привязан датчик SMOTION_100_1 с инверсией входного значения.

    Если смотреть в отладчике : get=0 => set=1

    debug_megad.png



  • А если актуатор на мегад, где галку надо поставить? У меня на экране вкл, а в мегад выкл, и наоборот.



  • @thunder_d:

    А если актуатор на мегад, где галку надо поставить? У меня на экране вкл, а в мегад выкл, и наоборот.

    Действительно, Вы правы, не работает инверсия для актуаторов 😞

    Поправим в следующем релизе.



  • А по моему вопросу есть решение. Или я не правильно описал проблему.



  • И ещё. Возник вопрос. Как управлять RGB лентой? Есть пример?



  • @cd1room:

    Есть проблемка со скриптом управления температурой и megaD. Попробую описать. Если запускаем одновременно сервер и роутер, а роутер подвис. Температура сервере установлена 30. Т.к. датчика нет то сервер видит последнюю то есть например 28 и сервер дает команду, но устройства нет в сети. Батареи включается на интерфейсе. Перезагрузил роутер. Батарея включена на интересе дома. А по факту выход не активен. И так пока температура не подниматься выше 30 и снова упадёт. Как с этим бороться? Я так понимаю должна быть индикация аварии если устройства нет в сети.

    Вы правы, такая проблема есть.

    Дело в том, что MegaD не дает feedback, т е не подтверждает операции переключения, поэтому применяется односторонняя (или оптимистичная :)) связь при управлении: при отправке команды считается, что команда выполнена.

    Ситуацию усугубляет то, что в новом плагине MegaD не учитывается отсутствие связи при выполнении команды.

    Планируется переработать плагин с учетом этой ситуации, а также включая поправки, которые предлагает Alex_Jet (по мере возможности).

    Ориентировочно, после 10 ноября выпустим новый плагин.

    По RGB - в Cherry виджет для визуализации RGB запланирован, но пока не сделан.

    Я правильно понимаю, Вы хотите управлять RGB с MegaD, посылая команды на диммируемые выхода?

    Пока можно управлять, диммируя каждый канал отдельно.

    Или в MegaD есть какой-то новый механизм для RGB?



  • @intrapro:

    Вы правы, такая проблема есть.

    Дело в том, что MegaD не дает feedback, т е не подтверждает операции переключения, поэтому применяется односторонняя (или оптимистичная :)) связь при управлении: при отправке команды считается, что команда выполнена.

    На самом деле сервер всегда может запросить состояние всех портов и распарсить их значения. Или во всяком случае MegaD ведь выдает 200 OK в TCP-сессии - это уже можно считать подтверждением выполнения команды (если эта команда однозначная, а не типа "переключения" выходов).

    @intrapro:

    Или в MegaD есть какой-то новый механизм для RGB?

    К ней с некоторых пор можно подключать I2C расширитель ШИМ-портов! Правда готовых плат с силовыми элементами для него нет.



  • А также с недавних пор поддерживает управление LED-лентами на базе чипов WS2818, WS2811, WS2813. При этом задействуется всего один порт для управления RGB. Хотел сделать функцию мягкого пробуждения человека с помощью RGB света. 😄



  • Пример: включить все диоды красным цветом

    http://192.168.0.14/sec/?pt=35&ws=FF0000

    Но хотелось бы из интерфейса управлять цветом. И настраивать цвет пробуждения в параметрах.



  • С учётом того, что "обычные" ШИМ-каналы в MegaD скорее всего будут использоваться и для диммирования, то для RGB логичнее использовать либо расширитель ШИМ по I2C или подключать к контроллеру WS28xx. А для этого нужен какой-то функционал для записи значений в канал для устройства типа "актюатор аналоговый". Кстати вывод информации на OLED можно таким же образом сделать, а потом в скрипте написать функцию записи в OLED значений в нужную строку и столбец.



  • Вопрос к разработчикам? Может сделать отдельно плагин для MegaD-328 и MegaD-2561.



  • @thunder_d:

    Вопрос к разработчикам? Может сделать отдельно плагин для MegaD-328 и MegaD-2561.

    Почему? Разве они не совместимы снизу вверх?


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