Плагин MegaD



  • @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.

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



  • @intrapro:

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

    В принципе эта идея сработала. При поднесении нужного ключа к считывателю актуатор меняет свое состояние. Отталкиваясь от его состояния можно написать сценарий установки/снятия с охраны. Единственный неопределенный момент в том, что когда MegaD опрашиваем командой cmd=all, то канал, соответствующий считывателю находится в неопределенном состоянии (ранее писал, что не верно под неопределенным состоянием считать 0). Возникает вопрос - после перезагрузки MegaD в каком состоянии окажется привязанный к этому каналу актуатор (ну или сенсор, если добавите ему обработку toggle). Или все же это правильно - считать за 0/OFF неопределенное состояние порта?



  • Здравствуйте.

    Подскажите, можно ли и как сделать "расширение" без сообщения от меги?

    У меня задача передать меге команду выключить, подождать, включить. Скриптом этого делать нельзя, потому, что перезапускается розетка, к которой подключено сетевое оборудование. Скриптом получается только выключить 🙂

    А как сделать расширение без входящего сообщения от контроллера, чтобы передать меге команду с паузой, и привязать это расширение к кнопке на экране?



  • @Erik:

    Здравствуйте.

    Подскажите, можно ли и как сделать "расширение" без сообщения от меги?

    У меня задача передать меге команду выключить, подождать, включить. Скриптом этого делать нельзя, потому, что перезапускается розетка, к которой подключено сетевое оборудование. Скриптом получается только выключить 🙂

    А как сделать расширение без входящего сообщения от контроллера, чтобы передать меге команду с паузой, и привязать это расширение к кнопке на экране?

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

    Но плагин должен поддерживать эту возможность.

    Для плагина MegaD запланирована переработка, эта опция будет добавлена.

    Тогда для решения вашей задачи достаточно будет к кнопке привязать сценарий с командой

    	this.pluginCommand({unit:'megad1', command:'/sec/?cmd=7:0;p10;7:1'});
    
    
    

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



  • Еще дополнение по доработке плагина для MegaD - в случае если MegaD перезагрузилась (пришла команда st=1):

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

    2. Восстановить состояние каналов-выходов на те, которые были до перезагрузки MegaD

    3. Опросить все каналы MegaD, распарсить их значения и присвоить к соответствующим сенсорам

    Странно, но факт - иногда в MegaD срабатывает watchdog и контроллер перезагружается. Я бы хотел это явление наблюдать в основном журнале так же как недоступность MegaD - чтобы понять в чем проблема.

    Up1: еще можно по умолчанию сделать список из 38 каналов (с 0 по 37) - каждый канал можно в любой момент отредактировать как необходимо пользователю и они всегда будут отображаться по порядку. А вот создавать все 38 каналов вручную - муторное занятие. Пользователю придется создавать только "виртуальные" каналы - для опроса I2C датчиков, датчиков на 1Wbus. Я их делаю с номерами типа 30_1, 30_2 и т.д.

    Кстати, надо попробовать подключить датчики на 1WBus - как их система будет идентифицировать и присваивать значения? - так же как в Berry? - то есть номер канала должен быть типа 30_адрес_сенсора?


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