Сценарии - новая версия API
-
Вопросы:
1. Возможно из сценария запросить значение по устройству из БД? Задача - формировать сводку по потреблению воды/газа:
-
Текущее показание счетчика
-
Количество потребленной электроэнергии/воды/газа за последний месяц (текущая дата - 1 month).
2. Callback можно получить при удачной отправке email, telegram, sms?
3. Не могу понять как в расписании правильно задать время и дату? Нужно - в 10:00 25 числа каждого месяца отправлять показания. Пишу "10:00 25..", но система ругается на дату. Update: время задается отдельно, а в этом поле только дата в формате "05.." или ".08." - надо поправить маску числа чтобы не вводить в заблуждение пользователей.
Update2: сценарий запустился сегодня!!! хотя маска была 25.. и расчет был на 25.01.2019!
4. Можно сделать сортировку сценариев "по умолчанию" по имени, пока вы придумываете механизм их сортировки?Бага по запуску сценариев по расписанию (-2 часа) - снова сработал 2 раза:
Сам сценарий простой:/** * @name Включение ТП2 если было солнце * @desc Если температура на закате больше уставки, то включаем насос ТП2 * @version 4 */ const dt = Device("ST_HEATING2_02"); const heat = Device("PUMP2"); script({ start() { if(dt.value > dt.setpoint + 0.1) { if(heat.isOff()) heat.on(); this.log(dt.name+ " = " +dt.value+ ", Heat = On"); } } });
-
-
Большая просьба добавить в расписания возможность выполнения произвольной HTTP команды, а то сейчас приходится для элементарной команды делать сценарий и его запускать.
-
К моим предыдущим вопросам (https://frm.intrahouse.ru/viewtopic.php?f=18&t=5446&sid=4a29eb09bb6c98b9a57baf95cd21d75e&start=110#p8771) еще один - как сделать сценарий со следующей постановкой задачи:
Если насос/котел/кран не менял свое состояние (не включался) больше суток/недели/месяца, то включить его на 5 минут и затем выключить.
Попытался сам реализовать подобный скрипт с "ручным" запуском (в дальнейшем нужен cron для периодического запуска сценария). Использую параметр dev.getParam('lastts'). Но вот незадача - последний раз устройство запускалось в 09:50:21, однако при запуске скрипта получаем то что он запускался 46 минут назад:
30.01 12:34:23.248 Started 30.01 12:34:23.249 log: 1548826463249 - 1548823700616 = 2762633 30.01 12:34:23.287 log: Насос ТП1, Last ON = 0.77 < 1 -> exit 30.01 12:34:23.290 Stopped
Проверил для другого насоса. Он ранее был выключен в 11:00:13, однако скрипт считает 48 минут.
30.01 12:36:23.803 Started 30.01 12:36:23.803 log: 1548826583803 - 1548823700616 = 2883187 30.01 12:36:23.836 log: Насос РО1, Last ON = 0.80 < 1 -> exit 30.01 12:36:23.840 Stopped
Почему такое может быть? Ранее корреляция прослеживалась.
Update: О…нашел - в боковом меню устройства внизу пишется время 11:48:20 - это время последнего принудительного опроса (у меня стоит интервал опроса всех каналов 1 час). Ок, раз так, но зачем при неизменном состоянии канала обновлять его lastts???
Еще один момент - комбинация Lamp1.setAuto(True) не работает, отладчик пишет:
31.01 08:33:56.911 Error function TurnOffDev:True is not defined
То есть нужно True обрамлять кавычками - Lamp1.setAuto('True') - надо поправить в API сценариев.
-
@denis-000:
1.При условии, что датчик освещенности меньше «5» lux стал, включается лампочка, как значение вышло в мой режим, стало «6» lux например, лампочка выключается.
В виде блок-схемы это может выглядеть так:
@denis-000:2. Если аналоговый датчик освещенности меньше «100» lux, то диммер включится на 50 %, как станет 200 lux, то свет выключится.
@denis-000:И еще вопрос. Можно чтобы в зависимости от освещенности динамически менялся диммер?
В виде блок-схем не получится. Позже покажем сценарий и опубликуем его на сайте как шаблонный.
@denis-000:Может где-то можно найти полное описание всех операций и команд и краткое обозначение для чего — это нужно.
Информация по сценариям:
https://ih-systems.com/ru/category/wiki/scenes/
https://ih-systems.com/ru/new-api-scenes/
https://ih-systems.com/ru/device-errors-resolve/
@denis-000:Я только начинаю, для меня все это ново, но мне очень нравится ваша система, я ее хочу понять, но дается сложновато , а банальными запросами не охота заваливать форум.
Не всегда эти вопросы банальны. Иногда в них находишь что-то новое. Как, например, ваш вопрос про диммер по освещенности.
А нам полезно знать какие вопросы по работе с системой возникают чаще всего, чтобы отразить в системе и документации.
-
@denis-000:
Подскажите пожалуйста, где я мог ошибиться?
Вам нужно включить/выключить устройство. То есть выполнить команду.
Блоки выполнения команд зеленого цвета:
Вот видите. А вы говорите "банальные вопросы". Наша недоработка. Интуитивно не очень понятно.
Надо будет назвать первую вкладку не "Устройства", а "Триггеры".
-
@intrahouse:
@denis-000:
Подскажите пожалуйста, где я мог ошибиться?
Вам нужно включить/выключить устройство. То есть выполнить команду.
Блоки выполнения команд зеленого цвета:
scen2011.jpg
Вот видите. А вы говорите "банальные вопросы". Наша недоработка. Интуитивно не очень понятно.
Надо будет назвать первую вкладку не "Устройства", а "Триггеры".
Как добавить на схему элементы A>B и A
-
Как добавить на схему элементы A>B и AНа вкладке "Операция" элемент IF
-
Что-то не получается в блок-схемах накидать сценарий, никак не придумаю логику:
Есть два блока питания (резервирование) я знаю нагрузку на них. на активном нагрузка > 0, на неактивном =0. Нужно присылать уведомление при изменении активного БП и текущую нагрузку на них.
Все сценарии, которые написал оповещают о каждом изменении нагрузки на блок питания
-
как сделать сценарий со следующей постановкой задачи:
Если насос/котел/кран не менял свое состояние (не включался) больше суток/недели/месяца, то включить его на 5 минут и затем выключить.
Попытался сам реализовать подобный скрипт с "ручным" запуском (в дальнейшем нужен cron для периодического запуска сценария). Использую параметр dev.getParam('lastts'). Но вот незадача - последний раз устройство запускалось в 09:50:21, однако при запуске скрипта получаем то что он запускался 46 минут назад:
Почему такое может быть? Ранее корреляция прослеживалась.
Update: О…нашел - в боковом меню устройства внизу пишется время 11:48:20 - это время последнего принудительного опроса (у меня стоит интервал опроса всех каналов 1 час). Ок, раз так, но зачем при неизменном состоянии канала обновлять его lastts???
Для того, чтобы вы видели, что данные приходят согласно правилам опроса
Время последнего изменения можно вытащить из журнала устройства, добавим функцию сценария в новый релиз.
Еще один момент - комбинация Lamp1.setAuto(True) не работает, отладчик пишет:
> 31.01 08:33:56.911 Error function TurnOffDev:True is not defined >
То есть нужно True обрамлять кавычками - Lamp1.setAuto('True') - надо поправить в API сценариев.
Можно просто писать 0/1: Lamp1.setAuto(1)
-
Добрый день!
Нарисовал сценарий, но он срабатывает при каждом изменении датчика, даже если значение не выходит за рамки. Что я делаю не так?
-
Здравствуйте. У меня другая проблема с датчиком освещенности. Сценарий такой: если значение равно 0 то лампа включается, если значение больше 100 то лампа выключается. Но проблема вот в чем, если я рукой прикрываю датчик чтобы он плавно менял значение стремясь к 0 и в итоге когда датчик увидел 0, то лапа не срабатывает, а если я резко делаю полную темноту датчику, то все отрабатывает. Подскажите, почему так? P.S. На устройстве.megad 2561 И еще не могу найти звуковое уведомление при событии устройства.
-
Добрый день!
Нарисовал сценарий, но он срабатывает при каждом изменении датчика, даже если значение не выходит за рамки. Что я делаю не так?
Добрый день, все верно, это два самостоятельных условия, Вам нужно использовать BETWEEN чтобы проверить значение между заданого диапазона.
-
Здравствуйте. У меня другая проблема с датчиком освещенности. Сценарий такой: если значение равно 0 то лампа включается, если значение больше 100 то лампа выключается. Но проблема вот в чем, если я рукой прикрываю датчик чтобы он плавно менял значение стремясь к 0 и в итоге когда датчик увидел 0, то лапа не срабатывает, а если я резко делаю полную темноту датчику, то все отрабатывает. Подскажите, почему так?
Попробуйте воспользоваться отладчиком сценария.
И еще можно посмотреть как приходит информация от контроллера в отладчике плагина.
@artem521:И еще не могу найти звуковое уведомление при событии устройства.
Звуковых уведомлений пока нет
-
Здравствуйте. У меня другая проблема с датчиком освещенности. Сценарий такой: если значение равно 0 то лампа включается, если значение больше 100 то лампа выключается. Но проблема вот в чем, если я рукой прикрываю датчик чтобы он плавно менял значение стремясь к 0 и в итоге когда датчик увидел 0, то лапа не срабатывает, а если я резко делаю полную темноту датчику, то все отрабатывает. Подскажите, почему так? P.S. На устройстве.megad 2561 И еще не могу найти звуковое уведомление при событии устройства.
Возможно, нужно добавить условие при выполнении команд:
Включать, если значение < 100 AND лампа выключена (off)
Выключать, если значение > 100 AND лампа включена (on)
-
Здравствуйте. У меня другая проблема с датчиком освещенности. Сценарий такой: если значение равно 0 то лампа включается, если значение больше 100 то лампа выключается. Но проблема вот в чем, если я рукой прикрываю датчик чтобы он плавно менял значение стремясь к 0 и в итоге когда датчик увидел 0, то лапа не срабатывает, а если я резко делаю полную темноту датчику, то все отрабатывает. Подскажите, почему так? P.S. На устройстве.megad 2561 И еще не могу найти звуковое уведомление при событии устройства.
Возможно, нужно добавить условие при выполнении команд:
Включать, если значение < 100 AND лампа выключена (off)
Выключать, если значение > 100 AND лампа включена (on)
Спасибо, буду пробовать.
-
Здравствуйте. У меня другая проблема с датчиком освещенности. Сценарий такой: если значение равно 0 то лампа включается, если значение больше 100 то лампа выключается. Но проблема вот в чем, если я рукой прикрываю датчик чтобы он плавно менял значение стремясь к 0 и в итоге когда датчик увидел 0, то лапа не срабатывает, а если я резко делаю полную темноту датчику, то все отрабатывает. Подскажите, почему так? P.S. На устройстве.megad 2561 И еще не могу найти звуковое уведомление при событии устройства.
Возможно, нужно добавить условие при выполнении команд:
Включать, если значение < 100 AND лампа выключена (off)
Выключать, если значение > 100 AND лампа включена (on)
Попробовал, не чего не поменялось.
01.02 16:03:19.058 megad1:
01.02 16:03:19.059 megad1: localhost => 192.168.0.16 HTTP GET /sec/?pt=30&cmd=get
01.02 16:03:19.077 megad1: localhost <= 192.168.0.16 response: statusCode=200 contentType = text/html
01.02 16:03:19.078 megad1: body: 13.05
01.02 16:03:19.079 IH: get [{"id":"30","value":"13.05"}]
01.02 16:03:19.080 IH: set {"SENSORA1":{"aval":"13.05","err":0}}
01.02 16:03:19.860 megad1:
01.02 16:03:19.861 megad1: localhost => 192.168.0.16 HTTP GET /sec/?cmd=all
01.02 16:03:19.878 megad1: localhost <= 192.168.0.16 response: statusCode=200 contentType = text/html
01.02 16:03:19.879 megad1: body: ON/1;OFF;ON;ON;ON;214;ON;ON;ON;ON;255;OFF;ON;OFF;ON;ON;OFF;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;13.05;OFF;ON;ON;ON;ON;ON;ON
01.02 16:03:19.881 IH: get [{"id":"1","value":"0"},{"id":"30","value":"13.05"}]
01.02 16:03:19.882 IH: set {"VENT1":{"dval":"0","err":0},"SENSORA1":{"aval":"13.05","err":0}}
01.02 16:03:20.262 megad1:
01.02 16:03:20.263 megad1: localhost => 192.168.0.16 HTTP GET /sec/?pt=30&cmd=get
01.02 16:03:20.284 megad1: localhost <= 192.168.0.16 response: statusCode=200 contentType = text/html
01.02 16:03:20.285 megad1: body: 13.05
01.02 16:03:20.287 IH: get [{"id":"30","value":"13.05"}]
01.02 16:03:20.287 IH: set {"SENSORA1":{"aval":"13.05","err":0}}
01.02 16:03:21.068 megad1:
01.02 16:03:21.068 megad1: localhost => 192.168.0.16 HTTP GET /sec/?cmd=all
01.02 16:03:21.090 megad1: localhost <= 192.168.0.16 response: statusCode=200 contentType = text/html
01.02 16:03:21.091 megad1: body: ON/1;OFF;ON;ON;ON;208;ON;ON;ON;ON;255;OFF;ON;OFF;ON;ON;OFF;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;13.05;OFF;ON;ON;ON;ON;ON;ON
01.02 16:03:21.092 IH: get [{"id":"1","value":"0"},{"id":"30","value":"13.05"}]
01.02 16:03:21.093 IH: set {"VENT1":{"dval":"0","err":0},"SENSORA1":{"aval":"13.05","err":0}}
01.02 16:03:21.470 megad1:
01.02 16:03:21.471 megad1: localhost => 192.168.0.16 HTTP GET /sec/?pt=30&cmd=get
01.02 16:03:21.482 megad1: localhost <= 192.168.0.16 response: statusCode=200 contentType = text/html
01.02 16:03:21.483 megad1: body: 13.05
01.02 16:03:21.483 IH: get [{"id":"30","value":"13.05"}]
01.02 16:03:21.484 IH: set {"SENSORA1":{"aval":"13.05","err":0}}
01.02 16:03:22.274 megad1:
01.02 16:03:22.275 megad1: localhost => 192.168.0.16 HTTP GET /sec/?cmd=all
01.02 16:03:22.299 megad1: localhost <= 192.168.0.16 response: statusCode=200 contentType = text/html
01.02 16:03:22.299 megad1: body: ON/1;OFF;ON;ON;ON;208;ON;ON;ON;ON;255;OFF;ON;OFF;ON;ON;OFF;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;ON;13.05;OFF;ON;ON;ON;ON;ON;ON
01.02 16:03:22.300 IH: get [{"id":"1","value":"0"},{"id":"30","value":"13.05"}]
01.02 16:03:22.301 IH: set {"VENT1":{"dval":"0","err":0},"SENSORA1":{"aval":"13.05","err":0}}
-
Что-то не получается в блок-схемах накидать сценарий, никак не придумаю логику:
Есть два блока питания (резервирование) я знаю нагрузку на них. на активном нагрузка > 0, на неактивном =0. Нужно присылать уведомление при изменении активного БП и текущую нагрузку на них.
Все сценарии, которые написал оповещают о каждом изменении нагрузки на блок питания
Вот пример для одного блока питания:
Таймер поставил для того чтобы в сообщении передавалось напряжение с учетом переходных процессов при включении блока питания.Само сообщение: БП1 - включен (напряжение ${BP1.value}В)
${x.value} - так можно передать значение value
Суть сценария:
Нам нужно чтобы при включении блока питания BP1 передать сообщение об этом событии один раз. При этом нужно передать еще и напряжение. При выключении просто сообщаем один раз о выключении.
Для такого сценария нужна информация о предыдущем состоянии блока питания.
Так как в блок-схемах нет возможности использовать глобальные переменные, воспользуемся параметром setpoint. Будем считать, если setpoint=0, блок питания выключен. Если setpoint=1, включен.
В итоге получаем.
Если блок питания был выключен (setpoint=0) и включается (value>0), то через 5 сек даем сообщение о включении и устанавливаем setpoint в единицу.
Если блок питания был включен (setpoint=1) и выключается (value=0), даем сообщение об отключении блока питания и устанавливаем setpoint в ноль.
Выглядит это достаточно громоздко. Это пример того, что иногда лучше написать скрипт, чем строить сценарий в виде блок-схемы.
Если посмотреть скрипт этой блок-схемы, там все намного короче:
/** * @name Контроль блоков питания * @desc * @version 4 */ const BP1 = Device("BP1"); startOnChange([BP1]); script({ start() { if ((BP1.value > 0) && (BP1.setpoint == 0)) { this.startTimer("T1",5,"onTimerT1"); } if ((BP1.value == 0) && (BP1.setpoint == 1)) { BP1.setParam("setpoint",0); this.log(`БП1 - выключен`); } }, onTimerT1() { this.log(`БП1 - включен (напряжение ${BP1.value}В)`); BP1.setParam("setpoint",1); } })
Прошу обновить систему до последней версии 4.4.17. Во время подготовки этого сценария найдена ошибка. Не передавалась константа в виде числа
-
@intrahouse:
Попробовал, не чего не поменялось.
Вы поставили элемент AND, и ничего к нему не привязали.
Условие AND означает: если это=True и это=True то True, иначе False
Попробуйте так:
Если датчик освещенности больше 23 и лампа выключена, включить лампу.Если датчик освещенности меньше 1 (можно как у вас =0) и лампа включена, выключить лампу.
Обновите систему до версии 4.4.17
-
Большое спасибо. Все работает корректно.
-
Добрый день!
А все таки, есть ли способ запуска звукового файла из сценария?
Добрый день, уточните пожалуйста через звуковой выход сервера?