Сценарии - новая версия API
-
Ок, у Вас же по сути на терминале крутится js-клиент, который имеет связь через сокеты с сервером. И вероятно клиентам сервер присваивает какой-то id (не знаю точно поскольку не освоил сокеты), по нему можно определять на каком терминале сейчас веб-страница активна и куда надо отправить данные.
Да, вы правы, сервер знает о подключенных активных клиентах.
В этом и вопрос - переключать экран для всех клиентов? Не всегда это хорошо. Хотя для домашнего применения может и можно …
Команду для всплывающего алерта добавим в API, по срокам не скажу, но будет.
А карты тоже по сути для Scads сейчас или что с ними можно делать в Pro?
Сейчас на картах возможно размещение устройств и элементов для индикации и последующей навигации (переходов по объектом)
Если вы про геолокацию, ее нет
-
Да, вы правы, сервер знает о подключенных активных клиентах.
В этом и вопрос - переключать экран для всех клиентов? Не всегда это хорошо.
Да согласен, но если сервер знает о подключенных клиентах, то значит можно адресовать "сообщение" конкретному клиенту? Либо всем, если нужно. Но для этого нужен api.
@intrapro:Команду для всплывающего алерта добавим в API, по срокам не скажу, но будет.
Это хорошо. Интересно как это выглядит - виджет, размещаемый на экране? А алерты формируются из тех же сценариев?
@intrapro:Сейчас на картах возможно размещение устройств и элементов для индикации и последующей навигации (переходов по объектом)
Если вы про геолокацию, ее нет
Про геолокация понятно что это примерно 2020 год:), если не позже. В общем Роскосмос… :lol:
Интересует именно что можно сейчас сделать с картой применимо к частному домохозяйству.
-
Это хорошо. Интересно как это выглядит - виджет, размещаемый на экране? А алерты формируются из тех же сценариев?
Да. Всплывающее окно с текстом. Параметры визуализации настраиваются: "Визуализация" -> "Всплывающие окна"
Интересует именно что можно сейчас сделать с картой применимо к частному домохозяйству.
Получается что ничего
-
Добрый день!
Подскажите пожалуйста как примерно будет выглядеть сценарий если при изменении состояния триггера необходимо послать команду через http://192.168…. ?
Послать на MegaD или абстрактный get запрос?
-
Добрый день!
Подскажите пожалуйста как примерно будет выглядеть сценарий если при изменении состояния триггера необходимо послать команду через http://192.168…. ?
Послать на MegaD или абстрактный get запрос?
Если абстрактный, то
const trigger = Device("DEVICE_xx"); startOnChange( trigger); script({ start() { require("http").get(`http://192.168.0.xx/......${ trigger.value}...` ); } });
Если на MegaD, то
const trigger = Device("DEVICE_xx"); startOnChange( trigger); script({ start() { this.pluginCommand({unit:'megad1', command:'/sec/?cmd=7:1;p10;7:0'}); } });
Для MegaD нужен плагин версии не менее 1.1.8
-
-
Нет. Пока не планировали. Хотя подумаем.
-
Подскажите - хочу сделать эмуляцию показаний датчика температуры по изменению показаний реального датчика температуры. Но что-то где-то я делаю не так:
/** * @name Эмуляция изменения температуры * @desc * @version 4 */ const sen_master = Device("SensorA", "Сенсор_Мастер"); const sen_slave = Device("SensorA", "Сенсор_Ведомый"); startOnChange(sen_master.isChanged(value)); script({ start() { sen_slave.setValue(sen_master.value + 0.1); } });
И еще момент - почему в "Запуск для устройств" нельзя удалить часть устройств (чтобы они не принимали участие в сценарии)?
И еще на вашем сайте справа в дереве можно добавить ссылку на примеры скриптов с новым API?
-
Подскажите - хочу сделать эмуляцию показаний датчика температуры по изменению показаний реального датчика температуры. Но что-то где-то я делаю не так:
> /** > * @name Эмуляция изменения температуры > * @desc > * @version 4 > */ > > const sen_master = Device("SensorA", "Сенсор_Мастер"); > const sen_slave = Device("SensorA", "Сенсор_Ведомый"); > > startOnChange(sen_master.isChanged(value)); > > script({ > start() { > sen_slave.setValue(sen_master.value + 0.1); > } > }); >
Первым параметром должно быть устройство
startOnChange(sen_master, sen_master.isChanged(value));
И датчику нельзя напрямую присваивать значение, только через assign
this.assign(sen_slave, 'value', sen_master.value + 0.1);
И еще момент - почему в "Запуск для устройств" нельзя удалить часть устройств (чтобы они не принимали участие в сценарии)?
Если устройство не участвует - нужно удалить строки Device. Таблица "Запуск для устройств" строится по ним
-
Первым параметром должно быть устройство
> startOnChange(sen_master, sen_master.isChanged(value)); >
Ок, буду знать (правда value пришлось удалить, поскольку скрипты переходили в STOP после запуска и была ошибка "value is not defined"). Это только для аналоговых датчиков или для всех так?
И датчику нельзя напрямую присваивать значение, только через assign
this.assign(sen_slave, 'value', sen_master.value + 0.1);
Думал, что setValue сделано специально для этого. Выходит что это только для цифровых/аналоговых актюаторов?
Если устройство не участвует - нужно удалить строки Device. Таблица "Запуск для устройств" строится по ним
Я понимаю, что таблица строится по ним. Но чем чревато то что мы не выберем какое-то устройство?
-
Первым параметром должно быть устройство
> > startOnChange(sen_master, sen_master.isChanged(value)); > >
Ок, буду знать (правда value пришлось удалить, поскольку скрипты переходили в STOP после запуска и была ошибка "value is not defined"). Это только для аналоговых датчиков или для всех так?
Упс, нужны еще кавычки (имя свойства)
startOnChange(sen_master, sen_master.isChanged('value'));
И датчику нельзя напрямую присваивать значение, только через assign
this.assign(sen_slave, 'value', sen_master.value + 0.1);
Думал, что setValue сделано специально для этого. Выходит что это только для цифровых/аналоговых актюаторов?Да, это команда set для актуаторов. Смысл в том, что датчик сам себе не может значение установить.
dimmer.setValue(15) - диммер устанавливает новую яркость, все это проходит через каналы
но
this.assign(temp, 'value', 15); - сценарий (this) устанавливает датчику новую температуру принудительно, связь с железом игнорируется
Если устройство не участвует - нужно удалить строки Device. Таблица "Запуск для устройств" строится по ним
Я понимаю, что таблица строится по ним. Но чем чревато то что мы не выберем какое-то устройство?
В сценарии будет не определен объект, это приведет к ошибке сценария
-
Упс, нужны еще кавычки (имя свойства)
> startOnChange(sen_master, sen_master.isChanged('value')); >
Все равно где-то какой-то косяк! Прописал:
startOnChange(sen_master, sen_master.isChanged("value"));
Но при запуске в ошибках мне пишет - sen_master.isChanged is not a function и, соответственно, принимает состояние STOP.
-
Все равно где-то какой-то косяк! Прописал:
> startOnChange(sen_master, sen_master.isChanged("value")); >
Но при запуске в ошибках мне пишет - sen_master.isChanged is not a function и, соответственно, принимает состояние STOP.
Да, действительно, косяк isChanged тоже (как assign) не является методом устройства, а является методом сценария.
"Метод позволяет определить, явилось ли устройство триггером сценария при текущем запуске: this.isChanged(device)
Возвращает true, если запуск сценария произошел по событию устройства device"
startOnChange(sen_master,this.isChanged(sen_master));
Это сработает, но особого смысла в вашем случае не имеет, так так триггер у вас один.
"Также бывает полезно узнать, какое конкретно свойство изменилось. Для этого нужно передать имя свойства в качестве второго параметра: this.isChanged(temp, ‘value’)" А этот вариант при вызове из startOnChange не работает, только внутри сценария
Подумаем, как это переделать
-
Все равно где-то какой-то косяк! Прописал:
> > startOnChange(sen_master, sen_master.isChanged("value")); > >
Но при запуске в ошибках мне пишет - sen_master.isChanged is not a function и, соответственно, принимает состояние STOP.
Да, действительно, косяк isChanged тоже (как assign) не является методом устройства, а является методом сценария.
> startOnChange(sen_master,this.isChanged(sen_master)); >
Это сработает, но особого смысла в вашем случае не имеет, так так триггер у вас один.
Подумаем, как это переделать
Вроде хотели сделать API легче и понятнее, а в чем-то получилось усложнение… раньше можно было указать только const dt = DeviceT(...).
-
Вопросы:
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