Плагин MegaD



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

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



  • @intrapro:

    Добрый день!

    Дежа вю 🙂

    Какая у Вас длинная память!!! Я уже даже не помню такого. Однако проблема зависания у меня появилась после того, как к этому контроллеру (кроме одного DS18B20 и BMP280E) подключил 1-wire шину, состоящую из 3-х датчиков DS18B20, питание которых подключено к +3,3В. Да, витая пара частично проходит рядом с силовыми кабелями, питающими газовый/электрический котел и насосы. Однако я бы понял что при включении/выключении котла/насосов контроллер бы зависал. А тут нет - все оборудование пыхтит и трудится, а контроллер бац и перезагружается! Поэтому в версию "плохой электромагнитной совместимости" я не верю.

    Другой контроллер стал перезагружаться раз в сутки когда я к нему (кроме одного DHT22) добавил 2 шт. DS18B20 в режиме термостата и шину 1-wire, состоящую из 2-х DS18B20, питание которых подключено к +3,3В. Однако вопрос был закрыт, когда я отсоединил DHT22 от порта контроллера - его аптайм просто громадный с момента последнего обновления прошивки. Как только к любому порту подключаю этот жу DHT22, то в течении суток контроллер перезагружается. Других DHT22 просто нет в наличии и нет желания покупать.

    Ни в одном, ни в другом случае автор контроллера проблем не выявил, поскольку "невозможно воспроизвести всех ваших условий на макете, надо разбираться в каждом конкретном случае".

    @intrapro:

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

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

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

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

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

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

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

    1. По сути выяснено (вероятно тут сочетания датчиков I2C и 1-wire или DHT22 и 1-wire).

    2. Я очень надеялся на этот параметр, когда просил Вас его реализовать. По умолчанию 200, я изменил на 300сек, но радость моя была не долгой - через ~5 суток снова перезагрузка. Изменил на 500сек, но благодаря сообщениям в Телеграм вижу, что через 2-5 дней все равно происходит перезагрузка.

    Я бы предпочел писать лог не изменяя интервалы, поскольку контроллеры в работе и нельзя вредить их более менее стабильной работе…по крайней мере пока у нас зима.



  • @Alex_Jet:

    Однако вопрос был закрыт, когда я отсоединил DHT22 от порта контроллера - его аптайм просто громадный с момента последнего обновления прошивки. Как только к любому порту подключаю этот же DHT22, то в течении суток контроллер перезагружается. Других DHT22 просто нет в наличии и нет желания покупать.

    Alex_Jet, Какая у Вас прошивка MegaD? У меня модули DHT22 во всех комнатах стабильно работали с ESP8266 (провода до 10 метров), но после перехода на MegaD стали бессистемно подвисать. Предполагаю, что в MegaD плохо организована работа с DHT22.



  • @gis:

    Alex_Jet, Какая у Вас прошивка MegaD? У меня модули DHT22 во всех комнатах стабильно работали с ESP8266 (провода до 10 метров), но после перехода на MegaD стали бессистемно подвисать. Предполагаю, что в MegaD плохо организована работа с DHT22.

    У меня сейчас на всех MegaD-2561 fw: 4.31b7. По DHT22 разработчик действительно подтверждает проблему работы с ним - "лучше было бы выпилить его поддержку из прошивки". Но опять же - мою проблему Андрей воспроизвести не смог. Хотя логи я ему присылал и видно было что зависает контроллер именно на опросе DHT22, однако он стал это делать только после подключения 1-wire (2 DS18B20 на шине) и двух DS18B20 в режиме термостата.



  • @Alex_Jet:

    У меня сейчас на всех MegaD-2561 fw: 4.31b7. По DHT22 разработчик действительно подтверждает проблему работы с ним - "лучше было бы выпилить его поддержку из прошивки". Но опять же - мою проблему Андрей воспроизвести не смог. Хотя логи я ему присылал и видно было что зависает контроллер именно на опросе DHT22, однако он стал это делать только после подключения 1-wire (2 DS18B20 на шине) и двух DS18B20 в режиме термостата.

    Вы свою схему тут рисовали

    https://www.ab-log.ru/forum/viewtopic.php?f=1&t=1195&p=34390#p34378

    Вы на каждый датчик длинной линией свою землю подаете. Это путь к проблеме "земляная петля". И проявления, которые вы описываете так же похожи не нее же. Она не решается программным способом.

    Если в каждой раздаточной коробке все "земли" объединить в одну точку, то получится похоже на "земляную шину". Что снимет проблему. А если по счастливой случайности через все раздаточные коробки проходит неиспользуемая жила потолще - и ее нужно добавить в "шину".



  • @Erik:

    Вы свою схему тут рисовали

    https://www.ab-log.ru/forum/viewtopic.php?f=1&t=1195&p=34390#p34378

    Эта проблема исчезла ровно в тот момент, когда я отключил DHT22 от контроллера. С тех пор работает как часы с большим аптайм. Как может быть с ним связана земляная петля, которая может наводится в витой паре? Вообще топология звезда - самая "безопасная", имея опыт с аудиотрактами я ее и использовал тут. В моей схеме минус нигде не возвращается обратно на MegaD. Update: хотя благодаря "свежему" взгляду сейчас обратил внимание, что все же возврат есть и его легко можно убрать, по крайней мере на стороне MegaD.

    А вот на другом контроллере появилась проблема уже после предыдущего случая - когда я повесил на него 1-wire шину с 3-мя DS18B20.



  • с DHT22 связана не проблема, а проявление?

    Соберите на столе схему, с тем же контроллером и тем же датчиком, без вашей системы проводов.

    Если проблему повторить не сможете - она в проводах.



  • @Erik:

    Соберите на столе схему, с тем же контроллером и тем же датчиком, без вашей системы проводов.

    Если проблему повторить не сможете - она в проводах.

    Появится свободное время - сделаю. Тем более свободные контроллеры есть.



  • @Alex_Jet:

    1. По сути выяснено (вероятно тут сочетания датчиков I2C и 1-wire или DHT22 и 1-wire).

    2. Я очень надеялся на этот параметр, когда просил Вас его реализовать. По умолчанию 200, я изменил на 300сек, но радость моя была не долгой - через ~5 суток снова перезагрузка. Изменил на 500сек, но благодаря сообщениям в Телеграм вижу, что через 2-5 дней все равно происходит перезагрузка.

    Я бы предпочел писать лог не изменяя интервалы, поскольку контроллеры в работе и нельзя вредить их более менее стабильной работе…по крайней мере пока у нас зима.

    Обратите внимание, интервал между запросами устанавливается в мсек. Если вы установили 500 сек (500000 мсек) - это 8 минут!! время огромное даже в мире MegaD - боюсь, дело не в софте ни с одной стороны. Какой такой запрос надо раз в 8 минут дать контроллеру, чтобы его повесить 😉 .

    И в логе мы скорее всего ничего не увидим. Если только собирать статистику и будет наблюдаться какая-то регулярность, возможно дело в том, что подключено оборудование по разным протоколам, и (в порядке гипотезы, не специалист по MegaD) есть проблема на контроллере с высвобождением памяти. Если так, то уменьшение интервала должно вести к более частым перезагрузкам.

    С другой стороны, существуют системы автоматизации, которые настоятельно рекомендуют перезагружать сервер со всеми потрохами ежедневно по ночам, чтобы обеспечить работу 24х7

    А у вас - всего-то раз в 5 дней контроллер перезагрузился. Он же не вешается, watch dog работает, выхода восстанавливаются. Постфактум узнаете - ну да, перезагрузился. В чем проблема? 🙂



  • @intrapro:

    Обратите внимание, интервал между запросами устанавливается в мсек. Если вы установили 500 сек (500000 мсек) - это 8 минут!! время огромное даже в мире MegaD - боюсь, дело не в софте ни с одной стороны. Какой такой запрос надо раз в 8 минут дать контроллеру, чтобы его повесить 😉 .

    И в логе мы скорее всего ничего не увидим. Если только собирать статистику и будет наблюдаться какая-то регулярность, возможно дело в том, что подключено оборудование по разным протоколам, и (в порядке гипотезы, не специалист по MegaD) есть проблема на контроллере с высвобождением памяти. Если так, то уменьшение интервала должно вести к более частым перезагрузкам.

    С другой стороны, существуют системы автоматизации, которые настоятельно рекомендуют перезагружать сервер со всеми потрохами ежедневно по ночам, чтобы обеспечить работу 24х7

    А у вас - всего-то раз в 5 дней контроллер перезагрузился. Он же не вешается, watch dog работает, выхода восстанавливаются. Постфактум узнаете - ну да, перезагрузился. В чем проблема? 🙂

    Нет, конечно я установил 500мсек. Это была моя отчепятка:
    MegaD-2561-24_Settings.png
    В логе можно увидеть на чем спотыкается контроллер. Вообще основная проблема была в том, что все выходы контроллера сбрасывались при его перезагрузке, но вы сделали опцию, благодаря которой теперь все более менее нормально. Правда загрузчик MegaD висит 5 секунд после рестарта (нужно для восстановления контроллера при неудачной прошивке) и только потом загружает прошивку.

    Представьте себе как было раньше - газовый котел работает почти на 100%, а тут на тебе и больше подачи тепла не нужно, пока проходит порядка 1-5 минут (переопрос датчиков iH и усреднение по последней пятиминутке) он успевает остановится, если температура ниже уставки, то iH бац и снова включает только что вставший котел - не есть айс для него. А если температура выше нижней границы, но ниже верхней, то котел вообще не включается и дом снова остывает и, как итог, к заданному времени не прогревается как надо. Сейчас с опцией восстановления выходов котел даже не успевает остановится пока MegaD в течении 5 секунд перезагружается.

    По моему опыту разработки контроллеров на базе AVR никаких зависаний вообще не должно быть! WD - это просто "костыль" на всякий случай! Если программа не обнуляет его счетчик, то он делает reset микроконтроллеру.



  • @Alex_Jet:

    Нет, конечно я установил 500мсек. Это была моя отчепятка:

    Понятно. Это уже другие времена.

    @Alex_Jet:

    В логе можно увидеть на чем спотыкается контроллер….. Сейчас с опцией восстановления выходов котел даже не успевает остановится пока MegaD в течении 5 секунд перезагружается.

    То есть не фатально, об этом и речь. Версия системы с сохранением лога плагина в файлы будет вероятно к концу месяца.



  • Подскажите при паразитном подключении датчиков температуры ds18b20 как в интрахаус вывести значения температуры на мнемосхему? я так понимаю что надо установить путь в строке запроса состояния.



  • @amgstone:

    Подскажите при паразитном подключении датчиков температуры ds18b20 как в интрахаус вывести значения температуры на мнемосхему? я так понимаю что надо установить путь в строке запроса состояния.

    А причем тут подключение датчиков DS18B20 с паразитным питанием к MegaD и сам iH? Если MegaD в своем веб-интерфейсе отображает температуру, то и iH при соответствующем опросе будет получать от MegaD значение с датчика. Для настройки порта на MegaD в режиме DSen->1W надо делать запрос по умолчанию - /%pwd%/?pt=%adr%&cmd=get. Если настройки порта на MegaD в режиме DSen->1WB, то только на одном из каналов нужен запрос вида /%pwd%/?pt=%adr%&cmd=list



  • @Alex_Jet:

    @amgstone:

    Подскажите при паразитном подключении датчиков температуры ds18b20 как в интрахаус вывести значения температуры на мнемосхему? я так понимаю что надо установить путь в строке запроса состояния.

    А причем тут подключение датчиков DS18B20 с паразитным питанием к MegaD и сам iH? Если MegaD в своем веб-интерфейсе отображает температуру, то и iH при соответствующем опросе будет получать от MegaD значение с датчика. Для настройки порта на MegaD в режиме DSen->1W надо делать запрос по умолчанию - /%pwd%/?pt=%adr%&cmd=get. Если настройки порта на MegaD в режиме DSen->1WB, то только на одном из каналов нужен запрос вида /%pwd%/?pt=%adr%&cmd=list

    Хорошо, спасибо, а как мне вынести значения датчиков температуры на экран IH если їх несколько, можно это засписать, думаю не только мне это интересно будет узнать?



  • @amgstone:

    @Alex_Jet:

    @amgstone:

    Подскажите при паразитном подключении датчиков температуры ds18b20 как в интрахаус вывести значения температуры на мнемосхему? я так понимаю что надо установить путь в строке запроса состояния.

    А причем тут подключение датчиков DS18B20 с паразитным питанием к MegaD и сам iH? Если MegaD в своем веб-интерфейсе отображает температуру, то и iH при соответствующем опросе будет получать от MegaD значение с датчика. Для настройки порта на MegaD в режиме DSen->1W надо делать запрос по умолчанию - /%pwd%/?pt=%adr%&cmd=get. Если настройки порта на MegaD в режиме DSen->1WB, то только на одном из каналов нужен запрос вида /%pwd%/?pt=%adr%&cmd=list

    Хорошо, спасибо, а как мне вынести значения датчиков температуры на экран IH если їх несколько, можно это засписать, думаю не только мне это интересно будет узнать?

    Нужно создать каналы для каждого датчика DS18B20 с указанием номера порта и id датчика

    Например, если 2 датчика висят на 31 порту, и по запросу /%pwd%/?pt=31&cmd=list выдается:

    8aad6a070000:32.43;85a56a070000:20.51

    то создаются каналы: 31_8aad6a070000, 31_85a56a070000

    При этом запрос (период опроса) нужно оставить только на одном из каналов.

    А какой запрос делать - вам Alex_Jet объяснил

    Документация по плагину MegaD: https://ih-systems.com/ru/product/plugin-megad/



  • Подскажите как в IH создать канал для выключателя, для примера выключатель на 1 канале, лампочка на 15 канале, пробую ничего не получается, помогите. хочу использовать IH без помощи megad.



  • @amgstone:

    Подскажите как в IH создать канал для выключателя, для примера выключатель на 1 канале, лампочка на 15 канале, пробую ничего не получается, помогите. хочу использовать IH без помощи megad.

    Нужно написать сценарий:

    если выключатель вкл, то включить лампочку

    если выключатель выкл, то выключить лампочку

    если выключатель кнопочный, то использовать toggle


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