Плагин MegaD



  • Странно, но факт. После обновления системы до 4.4.11 один из плагинов megad (v.1.1.9) просто остановился. Пришлось запускать вручную.



  • Добрый день!

    Снова всплывают двойные сработки MegaD, которые не получается пофиксить:

    18.01 15:02:33.410 megad2: 10.255.255.60 => localhost:8081 HTTP GET /md.php?pt=21&cnt=1671
    18.01 15:02:33.410 IH: get [{"id":"21","value":"1"}]
    18.01 15:02:33.410 IH: set {"SENSOR2":{"dval":"1","err":0}}
    18.01 15:02:33.412 megad2: 10.255.255.60 <= localhost:8081 
    18.01 15:02:34.540 megad2: 10.255.255.60 => localhost:8081 HTTP GET /md.php?pt=21&cnt=1672
    18.01 15:02:34.540 IH: get [{"id":"21","value":"1"}]
    18.01 15:02:34.540 IH: set {"SENSOR2":{"dval":"1","err":0}}
    18.01 15:02:34.542 megad2: 10.255.255.60 <= localhost:8081 
    18.01 15:02:35.664 megad2: 10.255.255.60 => localhost:8081 HTTP GET /md.php?pt=21&cnt=1673
    18.01 15:02:35.664 IH: get [{"id":"21","value":"1"}]
    18.01 15:02:35.664 IH: set {"SENSOR2":{"dval":"1","err":0}}
    18.01 15:02:35.667 megad2: 10.255.255.60 <= localhost:8081 
    18.01 15:02:36.793 megad2: 10.255.255.60 => localhost:8081 HTTP GET /md.php?pt=21&cnt=1674
    18.01 15:02:36.793 IH: get [{"id":"21","value":"1"}]
    18.01 15:02:36.793 IH: set {"SENSOR2":{"dval":"1","err":0}}
    18.01 15:02:36.796 megad2: 10.255.255.60 <= localhost:8081 
    18.01 15:02:37.912 megad2: 10.255.255.60 => localhost:8081 HTTP GET /md.php?pt=21&cnt=1675
    18.01 15:02:37.912 IH: get [{"id":"21","value":"1"}]
    18.01 15:02:37.913 IH: set {"SENSOR2":{"dval":"1","err":0}}
    18.01 15:02:37.914 megad2: 10.255.255.60 <= localhost:8081 
    
    ------------------------
    18.01 15:08:00.578 megad2: 10.255.255.60 => localhost:8081 HTTP GET /md.php?pt=21&cnt=1964
    18.01 15:08:00.578 IH: get [{"id":"21","value":"1"}]
    18.01 15:08:00.579 IH: set {"SENSOR2":{"dval":"1","err":0}}
    18.01 15:08:00.580 megad2: 10.255.255.60 <= localhost:8081 
    18.01 15:08:01.717 megad2: 10.255.255.60 => localhost:8081 HTTP GET /md.php?pt=21&cnt=1965
    18.01 15:08:01.718 IH: get [{"id":"21","value":"1"}]
    18.01 15:08:01.718 IH: set {"SENSOR2":{"dval":"1","err":0}}
    18.01 15:08:01.721 megad2: 10.255.255.60 <= localhost:8081 
    18.01 15:08:02.846 megad2: 10.255.255.60 => localhost:8081 HTTP GET /md.php?pt=21&cnt=1966
    18.01 15:08:02.847 IH: get [{"id":"21","value":"1"}]
    18.01 15:08:02.847 IH: set {"SENSOR2":{"dval":"1","err":0}}
    18.01 15:08:02.848 megad2: 10.255.255.60 <= localhost:8081 
    18.01 15:08:03.981 megad2: 10.255.255.60 => localhost:8081 HTTP GET /md.php?pt=21&cnt=1967
    18.01 15:08:03.981 IH: get [{"id":"21","value":"1"}]
    18.01 15:08:03.981 IH: set {"SENSOR2":{"dval":"1","err":0}}
    18.01 15:08:03.984 megad2: 10.255.255.60 <= localhost:8081 
    18.01 15:08:04.976 megad2: 10.255.255.60 => localhost:8081 HTTP GET /md.php?pt=21&m=1&cnt=1967
    18.01 15:08:04.976 IH: get [{"id":"21","value":"1"}]
    18.01 15:08:04.976 IH: set {"SENSOR2":{"dval":"1","err":0}}
    18.01 15:08:04.978 megad2: 10.255.255.60 <= localhost:8081 
    18.01 15:08:05.120 megad2: 10.255.255.60 => localhost:8081 HTTP GET /md.php?pt=21&cnt=1968
    18.01 15:08:05.121 IH: get [{"id":"21","value":"1"}]
    18.01 15:08:05.121 IH: set {"SENSOR2":{"dval":"1","err":0}}
    18.01 15:08:05.122 megad2: 10.255.255.60 <= localhost:8081 
    18.01 15:08:06.116 megad2: 10.255.255.60 => localhost:8081 HTTP GET /md.php?pt=21&m=2&cnt=1968
    18.01 15:08:06.117 IH: get [{"id":"21","value":"1"}]
    18.01 15:08:06.117 IH: set {"SENSOR2":{"dval":"1","err":0}}
    18.01 15:08:06.118 megad2: 10.255.255.60 <= localhost:8081 
    18.01 15:08:06.269 megad2: 10.255.255.60 => localhost:8081 HTTP GET /md.php?pt=21&cnt=1969
    18.01 15:08:06.270 IH: get [{"id":"21","value":"1"}]
    18.01 15:08:06.270 IH: set {"SENSOR2":{"dval":"1","err":0}}
    18.01 15:08:06.273 megad2: 10.255.255.60 <= localhost:8081 
    18.01 15:08:07.399 megad2: 10.255.255.60 => localhost:8081 HTTP GET /md.php?pt=21&cnt=1970
    
    
    

    Лог к вопросу счетчика импульсов на двухтарифном счетчике. В расширениях прописано 21=ON, входящее сообщение от MegaD - /md.php?pt=21.

    Если прописать /md.php?pt=21&cnt - не работает, если прописать /md.php?pt=21&m=2 - m2 может приходить, а может и не приходить, в результате большие отклонения от истины

    Перенастроил вход на размыкание, вроде бы лучше, но плагин MegaD стал останавливаться



  • @homa:

    Добрый день!

    Снова всплывают двойные сработки MegaD, которые не получается пофиксить:

    Лог к вопросу счетчика импульсов на двухтарифном счетчике. В расширениях прописано 21=ON, входящее сообщение от MegaD - /md.php?pt=21.

    Если прописать /md.php?pt=21&cnt - не работает, если прописать /md.php?pt=21&m=2 - m2 может приходить, а может и не приходить, в результате большие отклонения от истины

    Добрый день!

    Есть два варианта решения:

    Вариант 1. Делать фиксацию при размыкании: /md.php?pt=21&m=1

    Вариант 2. Если все-таки хочется при замыкании, то добавить ловушку для запросов с m=1/2:

    "Входящее от MegaD": /md.php?pt=21; "Установить состояние каналов": 21=ON (как у вас сейчас)

    "Входящее от MegaD": /md.php?pt=21&m=* "Установить состояние каналов": пусто (ловушка)



  • @intrapro:

    @homa:

    Добрый день!

    Снова всплывают двойные сработки MegaD, которые не получается пофиксить:

    Лог к вопросу счетчика импульсов на двухтарифном счетчике. В расширениях прописано 21=ON, входящее сообщение от MegaD - /md.php?pt=21.

    Если прописать /md.php?pt=21&cnt - не работает, если прописать /md.php?pt=21&m=2 - m2 может приходить, а может и не приходить, в результате большие отклонения от истины

    Добрый день!

    Есть два варианта решения:

    Вариант 1. Делать фиксацию при размыкании: /md.php?pt=21&m=1

    Вариант 2. Если все-таки хочется при замыкании, то добавить ловушку для запросов с m=1/2:

    "Входящее от MegaD": /md.php?pt=21; "Установить состояние каналов": 21=ON (как у вас сейчас)

    "Входящее от MegaD": /md.php?pt=21&m=* "Установить состояние каналов": пусто (ловушка)

    По размыканию пока поёт. Спасибо



  • Опубликована версия v1.1.10 плагина MegaD

    Некоторые пользователи уже проверили ее, скачав с гитхаба. За это огромное спасибо 😄

    Изменения:

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

    Например, выдать импульс:

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

    Управление лентой WS2818

    this.pluginCommand({unit:'megad1', command:'/sec/?pt=35&ws=FF0000&chip=10');
    
    

    Если переключается выход, можно в command отправить onResponse - что должно переключиться на интерфейсе:

    this.pluginCommand({unit:'megad1', command:{url:'/sec/?cmd=7:1;8:0', onResponse:[{id:"7",value:1},{id:"8",value:0}]});
    
    

    2. Восстановление выходов при перезагрузке контроллера

    Добавлено свойство:

    Восстанавливать выход при перезагрузке контроллера - checkbox

    Для этих выходов при получении st=1 отправляется команда on, если выход был в on

    3. Добавлен параметр - Отправлять время на контроллер.

    Если галочка установлена, то при старте плагина и при получении с контроллера st=1 сервер отправляет время:

    /sec/?cf=7&stime=10:57:06:4

    4. Добавлен параметр - Интервал отправки запросов (мсек)

    5.Чтение датчиков I2C (и другие запросы, возвращающие одно значение, а не список)

    Запрос зависит от подключенного оборудования, подробнее см на сайте ab-log

    Отличие от существующего функционала: нет привязки к порту MegaD, подробнее см Общий принцип адресации каналов MegaD

    Например, для запросов /sec/?pt=31&scl=34&i2c_dev=htu21d&i2c_par=1 и /sec/?pt=31&scl=34&i2c_dev=htu21d создаем два канала.

    ID каналов может быть любым, привязка к порту 31 не нужна!!!

    Например,

    ID канала: i2c_htu21d (или htu21d_31 или …) Запрос:

    /sec/?pt=31&scl=34&i2c_dev=htu21d
    
    

    ID канала: mySensor (или htu21d_31_1 или ..) Запрос:

    /sec/?pt=31&scl=34&i2c_dev=htu21d&i2c_par=1
    
    

    6. Чтение и управление для DS2413

    Запрос

    /sec/?pt=32&cmd=list
    
    

    Ответ содержит как DS18B20, так и DS2413: aad6a070000:25.43;85a56a070000:32.43;79c439000000:OFF/OFF;c6c439000000:ON/ON

    Канал DS18B20 формируется как обычно: 32_aad6a070000

    Каналы DS2413: 32_79c439000000_A, 32_79c439000000_B

    Время для опроса нужно как обычно выставить только в одном из каналов!!

    Больше никакой настройки не требуется, команды управления будут сформированы автоматически: /sec/?cmd=32A:1&addr=79c439000000

    7. Добавлена функция обработки данных на плагине

    7.1 Добавлены свойства

    Использовать функцию обработки при получении данных от контроллера - checkbox

    Функция обработки значения - многострочное поле для ввода функции

    7.2 Функция обработки аналогична Berry - за исключением возвращаемого значения.

    Вернуть нужно значение или undefined (return;)

    Входные параметры:

    val - значение c контроллера

    depo - объект, который хранит данные между вызовами функции

    Внутри объекта можно создавать любые структуры

          function (val, depo) {
       	if (!depo.res) depo.res = [];
       	depo.res.push(val);
    
       	if (depo.res.length < 5) return; //Нужны еще измерения, значение не возвращаем
    
     	depo.res.sort();
         	let result = ((depo.res[1] + depo.res[2] + depo.res[3]) / 3).toFixed(2);
    
       	depo.res = []; //Перед следующими измерениями сбрасываем массив
      	return result; // Возвращаем результат расчета
         } 
    
    
    

    –------------------------------------------------------------------

    Общий принцип адресации каналов MegaD

    Исторически получилось, что ID каналов привязаны к адресам портов.

    Это было сделано для простоты настройки каналов, поскольку можно считывать данные отдельными запросами cmd=get плюс извлекать данные из ответа на запрос cmd=all. Также существует несколько списочных форматов, в т ч внутри cmd=all:

    temp:25.2/hum:40.7 или 25.2/40.7 Есть также просто temp:23.5.

    Значение 1Wire датчиков выдается списками 8aad6a070000:32.43;85a56a070000:32.43

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

    • Если значение может быть считано из элемента cmd=all как одно значение, ID канала должен быть равен порту (0-37)

    • Если к порту подключено несколько устройств и значения выдаются через /, то каналы адресуются внутри порта через _:

    Например, pt=14 - temp:25.2/hum:40 или 25.2/40.7 Каналы 14_1, 14_2

    • 1Wire датчики адресуются как порт_ <device id="">Например, pt=31 -8aad6a070000:32.43;85a56a070000:32.43

    Каналы 31_8aad6a070000, 31_85a56a070000

    • Если нет необходимости вытаскивать данные из списков, то канал может иметь любой идентификатор (лат.буквы,цифры, знак _)

    Эта опция действует начиная с v1.1.8</device>



  • @intrapro:

    @gis:

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

    Да, все верно. В новой версии 4.4.11 также добавлено управление RGB.

    @gis:

    Подскажите, пожалуйста, по диммируемым каналам в MegaD. Нужно ли что-то прописывать в расширениях плагина MegaD для диммируемого канала?

    Работа с диммерами и RGB как каналами MegaD будет в новой версии плагина, которая будет опубликована в течение этой недели.

    У меня диммируемый канал так и не заработал. Все как и было в старой версии плагина. Подскажите, как правильно настроить диммируемый канал.



  • @gis:

    У меня диммируемый канал так и не заработал. Все как и было в старой версии плагина. Подскажите, как правильно настроить диммируемый канал.

    В версии 1.1.10 плагина MegaD работы с диммером еще не было.

    Обновите систему до версии 4.4.14 и плагин до версии 1.1.11

    После обновления плагина MegaD выполните перезагрузку сервера

    Описание по настройке диммера и RGB здесь https://ih-systems.com/ru/product/plugin-megad/



  • @intrahouse:

    В версии 1.1.10 плагина MegaD работы с диммером еще не было.

    Описание по настройке диммера и RGB здесь https://ih-systems.com/ru/product/plugin-megad/

    А подскажите по управлению удаленным контроллером доработки не делались? - при получении "трапа" от одной MegaD выполнить команду на другой MegaD и, соответственно, изменить состояние канала удаленного контроллера в веб-интерфейсе. Сейчас последнее не работает.

    Писал про это тут
    Расширения_Команда_на_удаленный_MegaD.JPG

    PS: И да - в чем же трудность в Cherry отличать pt=1 от pt=1&m=*? В Berry ведь все работало замечательно!

    Также для отладки нужна опциональная запись st=1 в пользовательский журнал или ведение лога. Один контроллер с плагином MegaD Cherry стал работать хуже чем было в Berry.. .перезагружаться стал чаще. Разработчик контроллера не может воспроизвести мою ситуацию с помощью лавинного опроса php-методами и думает, что это связано с методами js.



  • @intrahouse:

    В версии 1.1.10 плагина MegaD работы с диммером еще не было.

    Обновите систему до версии 4.4.14 и плагин до версии 1.1.11

    После обновления плагина MegaD выполните перезагрузку сервера

    Описание по настройке диммера и RGB здесь https://ih-systems.com/ru/product/plugin-megad/

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

    __Для преобразования значения логического уровня (яркость 0-100%) в значение физического уровня (0-255) служат два следующих параметра.

    Обратите внимание, что значение логического уровня должно соответствовать max значению виртуального устройства, иначе слайдер будет работать некорректно.__

    Что такое значение логического уровня? Это количество ступеней диммирования? Если значение логического уровня должно соответствовать max значению виртуального устройства, то почему это значение не брать сразу из виртуального устройства, а надо вводить в ручную?



  • @gis:

    Обновился, диммер заработал, но есть вопросы: Настройки яркости не сохраняются, после перегрузки всегда устанавливается среднее значение (ну очень неудобно!).

    Для устройства типа Аналоговый актуатор предусмотрены настройки:

    "Есть уставка (дефолтное значение)"

    "Устанавливать дефолтное значение по текущему"

    У вас оба флага сброшены, установите их.

    Если добавить новое устройство, по умолчанию эти флаги будут установлены.

    @gis:

    При нажатии кнопок + и - значение по центру ползунка не меняется, хотя на иконках и в поле значения изменяется.

    Да, действительно так, поправим.

    @gis:

    Не понял в описании плагина:

    __Для преобразования значения логического уровня (яркость 0-100%) в значение физического уровня (0-255) служат два следующих параметра.

    Обратите внимание, что значение логического уровня должно соответствовать max значению виртуального устройства, иначе слайдер будет работать некорректно.__

    Что такое значение логического уровня? Это количество ступеней диммирования? Если значение логического уровня должно соответствовать max значению виртуального устройства, то почему это значение не брать сразу из виртуального устройства, а надо вводить в ручную?

    Смысл этих параметров, думаю, понятен: яркость на диммере обычно бывает 0-100%, задвижка регулируется 0-90 и т д, а на MegaD нужно передавать 0-255 или 0-4096

    В Berry использовался коэффициент пересчета, на который при передаче значение умножалось, при приеме делилось.

    Здесь преобразование показано явно. Подумаем, может и уберем логический уровень, но пока так 🙂



  • @intrapro:

    Смысл этих параметров, думаю, понятен: яркость на диммере обычно бывает 0-100%, задвижка регулируется 0-90 и т д, а на MegaD нужно передавать 0-255 или 0-4096

    В Berry использовался коэффициент пересчета, на который при передаче значение умножалось, при приеме делилось.

    Здесь преобразование показано явно. Подумаем, может и уберем логический уровень, но пока так 🙂

    Было бы логично, оставить как есть, максимальный логический уровень при этом вывести на максимальное значение ползунка диммера - так, наверно, правильней и пользователям понятнее управлять устройством. А коэффициент пересчета определять при этом автоматически, с участием физического уровня.



  • @Alex_Jet:

    А подскажите по управлению удаленным контроллером доработки не делались? - при получении "трапа" от одной MegaD выполнить команду на другой MegaD и, соответственно, изменить состояние канала удаленного контроллера в веб-интерфейсе. Сейчас последнее не работает.

    Писал про это тут

    Расширения_Команда_на_удаленный_MegaD.JPG

    Сейчас есть возможность при получении сообщения от MegaD запускать сценарий.

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

    this.pluginCommand({unit:'megad9', command:{url:'/sec/?cmd=7:1;8:0', onResponse:[{id:"7",value:1},{id:"8",value:0}]});

    в вашем случае

    this.pluginCommand({unit:'megad9', command:{url:'/sec/?cmd=15:2', onResponse:[{id:"15",value:"TOGGLE"}] });

    Два аргумента в пользу этого:

    1. В отличие от Berry в Cherry состояние актуатора переключается, когда получен ответ Done

    Поэтому кажется нелогичным изменять состояние канала удаленного контроллера ДО получения ответа от него

    ( "Установить состояния каналов" выполняется при получении входящего от контроллера)

    2. Команда пойдет в общую очередь плагина.

    А запрос, который отправляется напрямую на другой контроллер, в очередь естественно не включается (это прямой http запрос)

    @Alex_Jet:

    PS: И да - в чем же трудность в Cherry отличать pt=1 от pt=1&m=*? В Berry ведь все работало замечательно!

    Это просто чудеса 🙂 Способ обработки входящих в Berry полностью сохранен в Cherry.

    @Alex_Jet:

    Также для отладки нужна опциональная запись st=1 в пользовательский журнал или ведение лога. Один контроллер с плагином MegaD Cherry стал работать хуже чем было в Berry.. .перезагружаться стал чаще. Разработчик контроллера не может воспроизвести мою ситуацию с помощью лавинного опроса php-методами и думает, что это связано с методами js.

    Какое оборудование подключено к этому контроллеру? В чем его отличие от других?

    В Cherry никаких лавинных запросов в принципе быть не может, следующий запрос посылается с гарантированным интервалом, включая команды (в отличие от Berry, где команды шли вне очереди)

    Запись полного лога добавим.

    На сегодня можно делать запись st=1 в пользовательский журнал с помощью сценария, который запускается при получении запроса



  • @intrapro:

    Сейчас есть возможность при получении сообщения от MegaD запускать сценарий.

    Ну наворотили… так наворотили. Я то думаю нафига такой функционал? Теперь бы еще придумать как сделать один скрипт для нескольких таких сообщения от MegaD (типа if(get() == "pt=7") {}) - чтобы все в одном скрипте было! Ранее уже говорил, что путаюсь что в каком скрипте у меня...

    Таким образом, сейчас поле "Выполнить запрос..." стало не актуальным?
    @intrapro:

    Это просто чудеса 🙂 Способ обработки входящих в Berry полностью сохранен в Cherry.

    В чудеса не верю - где-то что-то не так. Либо в Berry было что-то не так, что приводило к хорошим результатам!

    @intrapro:

    Какое оборудование подключено к этому контроллеру? В чем его отличие от других?

    В Cherry никаких лавинных запросов в принципе быть не может, следующий запрос посылается с гарантированным интервалом, включая команды (в отличие от Berry, где команды шли вне очереди)

    Запись полного лога добавим.

    На сегодня можно делать запись st=1 в пользовательский журнал с помощью сценария, который запускается при получении запроса

    Я все понимаю, но совместно с разработчиком бьюсь с этим уже несколько месяцев - толку ноль. Изменение условий:

    1. К контроллеру А подключил пару DS18B20 и шину 1WB, при этом на нем не было ничего кроме DHT22 (с ним контроллер без сбоев работал 2 года!). Контроллер стал каждый день перезагружаться - каждый раз спотыкался на опросе DHT22! Отключил его и все работает без сбоев с большим uptime. Как только подключаю (настраиваю порт на опрос) DHT22 так через некоторое время контроллер перезагружается.

    2. К контроллеру Б подключил шину 1WB, при этом на нем уже висел DS18B20 и шина I2C. С Berry перезагружался раз в 2-3 дня (при температуре ниже -20 вообще не перезагружался). С Cherry перезагружался каждый день!!! Вчера поставил интервал отправки запросов 300мсек, пока uptime не сбрасывался 3d 20:38

    Разработчик пробовал воспроизводить мои условия с моей конфигурацией, делая опрос с помощью php так быстро как можно, но не добился его зависания. Я уже менял и контроллеры, и их БП. Святой водой не поливал только….



  • @Alex_Jet:

    @intrapro:

    Сейчас есть возможность при получении сообщения от MegaD запускать сценарий.

    Ну наворотили… так наворотили. Я то думаю нафига такой функционал?

    По моему всегда было горячее желание писать скрипты где только можно 🙂

    Здесь функционал увеличивается: можно передавать команды не только другим контроллерам, но и другим плагинам; вычислять, записывать в журнал; да много чего можно придумать

    @Alex_Jet:

    Таким образом, сейчас поле "Выполнить запрос…" стало не актуальным?

    Наверно есть задачи, где нужно просто отправить запрос без feedback-а.

    @Alex_Jet:

    Теперь бы еще придумать как сделать один скрипт для нескольких таких сообщения от MegaD (типа if(get() == "pt=7") {}) - чтобы все в одном скрипте было! Ранее уже говорил, что путаюсь что в каком скрипте у меня…

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

    Запуск сценария: toggleLamp

    Параметр сценария: 7

    А в сценарии этот параметр принять как входной аргумент, например так:

    start(megaPort) {
       if (megaPort == 7) ....
       ...
    } 
    
    
    

    @intrapro:

    Разработчик пробовал воспроизводить мои условия с моей конфигурацией, делая опрос с помощью php так быстро как можно, но не добился его зависания. Я уже менял и контроллеры, и их БП. Святой водой не поливал только….

    Здесь наверно поможет только тотальное логирование и дальнейший анализ.



  • @intrapro:

    @Alex_Jet:

    Теперь бы еще придумать как сделать один скрипт для нескольких таких сообщения от MegaD (типа if(get() == "pt=7") {}) - чтобы все в одном скрипте было! Ранее уже говорил, что путаюсь что в каком скрипте у меня…

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

    На гитхаб опубликован новый релиз плагина 1.1.12: https://github.com/intrahouseio/intraHouse.plugin-MegaD/releases/tag/v1.1.12

    При запуске сценария (Расширения) добавлен опциональный "Параметр сценария"

    Запускаемый сценарий должен объявить параметр как входящий аргумент функции start и затем использовать его.

    Пример c megaPort из предыдущего сообщения полностью рабочий

    Если оставить параметр пустым, в качестве параметра будет передан JSON с содержимым полученного запроса, например

    {"pt":1, "m":2} для /megad?pt=1&m=2

    В этом случае параметр в сценарии нужно разобрать c помощью JSON.parse(), в результате получаем объект

    start(req) {
       const obj = JSON.parse(req);
      this.log("Порт "+obj.pt+", m="+obj.m );
    } 
    
    

    Также объект можно ввести вручную в строку "Параметр сценария", если есть такая необходимость

    Например: Параметр сценария: {"pt":15, "cmd":"one-two", "click":1, "hello":"world" }

    start(myparam) {
       const obj = JSON.parse(myparam);
      this.log("Порт "+obj.pt+" send hello "+obj.hello )
    }
    
    


  • @intrapro:

    Пример c megaPort из предыдущего сообщения полностью рабочий

    Немного прокомментирую для остальных, поскольку сразу не все понял. Если в разделе "Расширения" плагина MegaD в поле "Параметр сценария" вписать, например, значение 7, то скрипт вида

    start(megaPort) {
        if(megaPort == 7) {
          this.log("Сработал порт - " +megaPort);
        }
      }
    
    

    сработает и в пользовательский журнал будет внесена запись "Сработал порт - 7".

    @intrapro:

    Если оставить параметр пустым, в качестве параметра будет передан JSON с содержимым полученного запроса.

    В моем случае скрипт для двух случаев нажатия кнопок выключателей будет выглядеть так:

    script({
      start(param) {
        const obj = JSON.parse(param);
    
        if(obj.pt == 0 && obj.click == 2) {
          this.pluginCommand({ unit:"megad4", command:{url:"/sec/?cmd=15:2", onResponse:[{id:"15",value:"TOGGLE"}]} });
          this.log("Переключен свет в котельной");
        }
    
        if(obj.pt == 3 && obj.click == 2) {
          this.pluginCommand({ unit:"megad5", command:{url:"/sec/?cmd=8:2", onResponse:[{id:"8",value:"TOGGLE"}]} });
          this.log("Переключен свет в кладовке");
        }
      }
    
    

    Однако если скрипт использовать со всеми MegaD, то придется в строку "Параметр сценария" вводить как минимум IP-адрес, номер порта и параметр его сработки для того, чтобы идентифицировать порт какого MegaD сработал. Поэтому мое пожелание разработчикам - по умолчанию в качестве параметра передавать JSON, в котором будет содержаться IP-адрес MegaD, то есть: {"ip":"192.168.0.14", "pt":1, "m":2} для /megad?pt=1&m=2 с IP-адресом 192.168.0.14

    @intrapro:

    Также объект можно ввести вручную в строку "Параметр сценария", если есть такая необходимость

    Этот вариант я использовал чтобы отобразить какой именно контроллер перезагрузился. То есть в строку "Параметр сценария" ввел описание контроллера (то что у меня есть в комментарии) - {"dev":"MegaD-2561-21 (Освещение #1)"}. Соответственно скрипт для записи в журнал и оповещения через telegram получился такой:

    /** 
    * @name Запись перезагрузки MegaD в журнал 
    * @desc При возникновении события st=1 от MegaD оно записывается в журнал 
    * @version 4 
    */
    
    script({
      start(param) {
        const obj = JSON.parse(param);
        this.log(obj.dev + " перезагружен!");
        this.info("telegram", "OWNER", obj.dev + " перезагружен!");
      }
    });
    
    


  • Коллеги, нужен совет.

    Мы приобрели MegaD-2561. А про модули ввода/вывода не подумали.

    В первую очередь нужны диммер и RGB. Может еще что-то.

    Что посоветуете взять?

    Нам это оборудование нужно для тестирования плагина MegaD



  • @intrahouse:

    Коллеги, нужен совет.

    Мы приобрели MegaD-2561. А про модули ввода/вывода не подумали.

    Согласен с предыдущим оратором. В 14IOR есть одно штатное реле (P14/P29) и 14 очень гибко настраиваемых входов. Например их можно сделать выходами…к которым можно подключить обычные платы реле с Али. Подтяжку у входов можно либо совсем отключить и использовать P0-P5 как АЦП, либо увеличить ток подтяжки для работы с длинными шинами 1WB/I2C. Конечно же к этим входам можно подключить RGB ленты на базе WS281x или часть из них (P10-P13/P25,P27-P28) сделать выходами для подключения ШИМ драйверов типа L298N.

    Кроме этого, на борту этого модуля есть шина с +5В и +3.3В. То есть без проблем можно подключить любой датчик.



  • Коллеги, спасибо.



  • Может чего не так делаю, но не работает на megad диммер. Значения не меняются.

    01.02 18:34:40.958 megad1: 
    01.02 18:34:40.959 megad1: localhost => 192.168.0.16 HTTP GET /sec/?cmd=all
    01.02 18:34:40.983 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 18:34:40.985 megad1:  body: ON/1;OFF;ON/1;ON;ON;183;ON;ON;ON;ON;255;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
    01.02 18:34:40.988 IH: get [{"id":"1","value":"0"},{"id":"10","value":100},{"id":"30","value":"14.4"}]
    01.02 18:34:40.988 IH: set {"VENT1":{"dval":"0","err":0},"DIMM2":{"aval":100,"err":0},"SENSORA1":{"aval":"14.4","err":0}}
    01.02 18:34:41.363 megad1: 
    01.02 18:34:41.366 megad1: localhost => 192.168.0.16 HTTP GET /sec/?pt=30&cmd=get
    01.02 18:34:41.391 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 18:34:41.391 megad1:  body: 14.40
    01.02 18:34:41.392 IH: get [{"id":"30","value":"14.4"}]
    01.02 18:34:41.393 IH: set {"SENSORA1":{"aval":"14.4","err":0}}
    01.02 18:34:41.568 megad1: 
    01.02 18:34:41.568 megad1: localhost => 192.168.0.16 HTTP GET /sec/?pt=10&cmd=get
    01.02 18:34:41.584 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 18:34:41.585 megad1:  body: 255
    01.02 18:34:41.589 IH: get [{"id":"10","value":100}]
    01.02 18:34:41.590 IH: set {"DIMM2":{"aval":100,"err":0}}
    01.02 18:34:42.169 megad1: 
    01.02 18:34:42.170 megad1: localhost => 192.168.0.16 HTTP GET /sec/?cmd=all
    01.02 18:34:42.190 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 18:34:42.191 megad1:  body: 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
    01.02 18:34:42.191 IH: get [{"id":"1","value":"0"},{"id":"10","value":100},{"id":"30","value":"14.4"}]
    01.02 18:34:42.192 IH: set {"VENT1":{"dval":"0","err":0},"DIMM2":{"aval":100,"err":0},"SENSORA1":{"aval":"14.4","err":0}}
    01.02 18:34:42.571 megad1: 
    01.02 18:34:42.572 megad1: localhost => 192.168.0.16 HTTP GET /sec/?pt=30&cmd=get
    01.02 18:34:42.593 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 18:34:42.594 megad1:  body: 14.40
    01.02 18:34:42.595 IH: get [{"id":"30","value":"14.4"}]
    01.02 18:34:42.595 IH: set {"SENSORA1":{"aval":"14.4","err":0}}
    01.02 18:34:42.772 megad1: 
    01.02 18:34:42.773 megad1: localhost => 192.168.0.16 HTTP GET /sec/?pt=10&cmd=get
    01.02 18:34:42.788 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 18:34:42.789 megad1:  body: 254
    01.02 18:34:42.790 IH: get [{"id":"10","value":100}]
    01.02 18:34:42.791 IH: set {"DIMM2":{"aval":100,"err":0}}
    01.02 18:34:43.374 megad1: 
    01.02 18:34:43.375 megad1: localhost => 192.168.0.16 HTTP GET /sec/?cmd=all
    01.02 18:34:43.406 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 18:34:43.407 megad1:  body: ON/1;OFF;ON/1;ON;ON;193;ON;ON;ON;ON;255;OFF;ON;ON;ON;ON;OFF;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;14.31;OFF;ON;ON;ON;ON;ON;ON
    01.02 18:34:43.407 IH: get [{"id":"1","value":"0"},{"id":"10","value":100},{"id":"30","value":"14.31"}]
    01.02 18:34:43.408 IH: set {"VENT1":{"dval":"0","err":0},"DIMM2":{"aval":100,"err":0},"SENSORA1":{"aval":"14.31","err":0}}
    01.02 18:34:43.776 megad1: 
    01.02 18:34:43.777 megad1: localhost => 192.168.0.16 HTTP GET /sec/?pt=30&cmd=get
    01.02 18:34:43.798 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 18:34:43.799 megad1:  body: 14.31
    01.02 18:34:43.799 IH: get [{"id":"30","value":"14.31"}]
    01.02 18:34:43.800 IH: set {"SENSORA1":{"aval":"14.31","err":0}}
    01.02 18:34:43.978 megad1: 
    01.02 18:34:43.979 megad1: localhost => 192.168.0.16 HTTP GET /sec/?pt=10&cmd=get
    01.02 18:34:43.993 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 18:34:43.994 megad1:  body: 254
    01.02 18:34:43.994 IH: get [{"id":"10","value":100}]
    01.02 18:34:43.995 IH: set {"DIMM2":{"aval":100,"err":0}}
    01.02 18:34:44.581 megad1: 
    01.02 18:34:44.581 megad1: localhost => 192.168.0.16 HTTP GET /sec/?cmd=all
    01.02 18:34:44.596 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 18:34:44.598 megad1:  body: ON/1;OFF;ON/1;ON;ON;192;ON;ON;ON;ON;255;OFF;ON;ON;ON;ON;OFF;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;14.31;OFF;ON;ON;ON;ON;ON;ON
    01.02 18:34:44.599 IH: get [{"id":"1","value":"0"},{"id":"10","value":100},{"id":"30","value":"14.31"}]
    01.02 18:34:44.599 IH: set {"VENT1":{"dval":"0","err":0},"DIMM2":{"aval":100,"err":0},"SENSORA1":{"aval":"14.31","err":0}}
    01.02 18:34:44.981 megad1: 
    01.02 18:34:44.982 megad1: localhost => 192.168.0.16 HTTP GET /sec/?pt=30&cmd=get
    01.02 18:34:45.003 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 18:34:45.004 megad1:  body: 14.31
    01.02 18:34:45.005 IH: get [{"id":"30","value":"14.31"}]
    01.02 18:34:45.006 IH: set {"SENSORA1":{"aval":"14.31","err":0}}
    01.02 18:34:45.183 megad1: 
    01.02 18:34:45.184 megad1: localhost => 192.168.0.16 HTTP GET /sec/?pt=10&cmd=get
    01.02 18:34:45.200 megad1: localhost <= 192.168.0.16  response: statusCode=200 contentType = text/html
    01.02 18:34:45.201 megad1:  body: 254
    01.02 18:34:45.202 IH: get [{"id":"10","value":100}]
    
    

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