Сценарии - новая версия API
-
Коллеги, подскажите - когда в Расписании можно будет сценариям передавать дополнительный параметр? Для кнопок такой функционал доступен (у меня используются кнопки переключения режимов работы отопления из оперативного меню), а для расписания нет…приходится писать "костыльные" скрипты:
const mode = Device("SWITCH_HEATING"); script({ start(param) { //Передача входного параметра переключателю отопления if(param !== undefined) { mode.setValue(param); } else { switch(mode.value) { case 0: this.log("Режим отопления - " +mode.stateName); break; case 1: mode.setValue(2); break; case 2: mode.setValue(1); break; } } } });
-
Какую функцию использовать в сценариях, чтобы уменьшить количество знаков после запятой? В настройках устройства стоит 2 цифры после запятой, но выводится на другое устройство (не мнемосхему) 10 цифр после запятой. Как их обрезать до 2-x?
-
@gis:
Какую функцию использовать в сценариях, чтобы уменьшить количество знаков после запятой? В настройках устройства стоит 2 цифры после запятой, но выводится на другое устройство (не мнемосхему) 10 цифр после запятой. Как их обрезать до 2-x?
Если значение с одного устройства присваивается другому устройству - нужно обоим поставить ограничения 2 знака после запятой.
-
@gis:
Какую функцию использовать в сценариях, чтобы уменьшить количество знаков после запятой? В настройках устройства стоит 2 цифры после запятой, но выводится на другое устройство (не мнемосхему) 10 цифр после запятой. Как их обрезать до 2-x?
Я использую Math.ceil(METER1.value) для округления до целых и METER1_v.toFixed(2) для округления до нужного количества знаков после запятой. Тоже не понимаю откуда берется 10 цифр после запятой на счетчике, который каждый импульс добавляет 0,01. Приходится заниматься округлением практически в каждом скрипте.
-
@gis:
Какую функцию использовать в сценариях, чтобы уменьшить количество знаков после запятой? В настройках устройства стоит 2 цифры после запятой, но выводится на другое устройство (не мнемосхему) 10 цифр после запятой. Как их обрезать до 2-x?
Если значение с одного устройства присваивается другому устройству - нужно обоим поставить ограничения 2 знака после запятой.
Неправильно выразился - в данном случае устройство физическое (экран TFT на который выводятся данные). При выводе надо уменьшить количество знаков после запятой для показаний датчика. Какие функции лучше для этого можно использовать в сценариях? Просьба привести примеры.
homa спасибо, попробую использовать эти функции, использовал стандартные для js , но они не работают.
-
@gis:
homa спасибо, попробую использовать эти функции, использовал стандартные для js , но они не работают.
Вроде стандартный js очень даже работоспособен в сценариях iH. Вот пример формирования строк на OLED (ssd1306):
DataToOLED(text, value, unit, plugin, channel) { let iconv = require("/opt/intrahouse-c/backend/node_modules/iconv-lite"); let buf = iconv.encode(text, "cp866"); this.text = buf.toString("latin1"); //Центрирование параметра на OLED let length = this.text.length; let col = (128 - length*6)/2; this.col = col.toFixed(0); //Форматирование цифровых значений let str = ""; //Вспомогательная переменная if(value < 100) value = value.toFixed(1); str = value.toString(); if(str.length < 4 && value > 0) this.str = 's+' +str; else if(str.length < 4) this.str = 'ss' +str; else if(str.length < 5) this.str = 's' +str; else this.str = str; //Выбор единицы измерения if(unit == "grad") this.unit = ":"; else if(unit == "percent") this.unit = "%"; else if(unit == "ppm") this.unit = "s"; //Вывод команд на дисплей this.ClearOLED(); //Очищаем первую строчку this.startTimer("T2", 0.2, "SendTextToOLED"); this.startTimer("T3", 0.4, "SendValueToOLED"); if(!this.oled_state) { //Если дисплей выключен //то включаем его после обновления параметра this.startTimer("T4", 0.5, "TurnOnOLED"); } },
-
Вроде стандартный js очень даже работоспособен в сценариях iH. Вот пример формирования строк на OLED (ssd1306):
Большое спасибо за информацию!
-
Можно продемонстрировать мнемосхему светильник, датчик движения, работа в вечернее и ночное время, чтобы не срабатывал в дневное время
-
А подскажите как из сценария выключить весь свет на этаже (привязка устройств к уровню/зоне), либо вообще весь свет в доме?
-
А подскажите как из сценария выключить весь свет на этаже (привязка устройств к уровню/зоне), либо вообще весь свет в доме?
Выключить все устройства подсистемы освещения
this.doAll({subs:'1'}, ‘off’)
На 1 этаже (place 1)
this.doAll({place:'1', subs:'1'}, ‘off’)
В доме, но не на территории (place 4)
this.doAll({place:'1,2,3,5', subs:'1'}, ‘off’)
-
А подскажите как из сценария выключить весь свет на этаже (привязка устройств к уровню/зоне), либо вообще весь свет в доме?
Команды для групп устройств
-
Отлично! Всем спасибо!
Выключить все устройства подсистемы освещения
> this.doAll({subs:'1'}, ‘off’) > >
На 1 этаже (place 1)
> this.doAll({place:'1', subs:'1'}, ‘off’) > >
В доме, но не на территории (place 4)
> this.doAll({place:'1,2,3,5', subs:'1'}, ‘off’) > >
А вот еще что интересно. Я конечно могу залезть в json на сервере и посмотреть какие номера имеют у меня те или иные уровни/зоны/подсистемы, но может быть можно вернуть номер уровня/зоны/подсистемы по его названию? То есть написать функции типа NumberPlace("Территория") или NumberSubs("Освещение")? Эти номера (ID системы) ведь не соответствуют №п/п, которые созданы для упорядочивания в таблицах?
-
А вот еще что интересно. Я конечно могу залезть в json на сервере и посмотреть какие номера имеют у меня те или иные уровни/зоны/подсистемы, но может быть можно вернуть номер уровня/зоны/подсистемы по его названию? То есть написать функции типа NumberPlace("Территория") или NumberSubs("Освещение")? Эти номера (ID системы) ведь не соответствуют №п/п, которые созданы для упорядочивания в таблицах?
Легче вернуть столбцы ID в таблицы. Которые скрыли, чтобы не пугать пользователей
Сейчас можно создать команду в блок-схеме и посмотреть id в скрипте
-
Легче вернуть столбцы ID в таблицы. Которые скрыли, чтобы не пугать пользователей
Сейчас можно создать команду в блок-схеме и посмотреть id в скрипте
Да уж. Порой вектор развития приводит не туда куда хотелось бы :lol:
В качестве метода сценария, вероятно можно такие вещи сделать? В конце-концов с точки зрения нормального программиста это будет читаемый код, а не хард-код, состоящий из цифр - условных обозначений…
-
На простой блок-схеме появилась новая ошибка) Куда копать?
-
На простой блок-схеме появилась новая ошибка) Куда копать?
внутри нее почему-то сгенерировался неверный скрипт:ъ/**
* @name KitchenLightOn * @desc * @version 4 */ const LAMP4 = Device("LAMP4"); const LAMP2 = Device("LAMP2"); const LAMP14 = Device("LAMP14"); startOnChange([LAMP4,LAMP2]); script({ start() { LAMP14.on(); LAMP14.off(); } })
-
Легче вернуть столбцы ID в таблицы. Которые скрыли, чтобы не пугать пользователей
Сейчас можно создать команду в блок-схеме и посмотреть id в скрипте
Верните, пожалуйста, для "Объекты", "Уровни", "Зоны" ID - можно не столбец вернуть, а строку ID в настройках, как сейчас отображается у подсистем. Кстати, для устройств тоже было бы удобно - когда в настройках отображается ID устройства - скопировал его и вставил в сценарий, например.
-
А не планируете ввести новый класс устройств "Plugin" — плагины для стыковки с оборудованием? Чтобы можно было какие-нибудь мультисценарии написать для работы с плагинами?
-
А не планируете ввести новый класс устройств "Plugin" — плагины для стыковки с оборудованием? Чтобы можно было какие-нибудь мультисценарии написать для работы с плагинами?
Мы как раз сейчас приступаем к реализации открытого API плагинов и механизмов взаимодействия.
Было бы хорошо, если бы Вы описали, какие задачи хотите решить
-
Мы как раз сейчас приступаем к реализации открытого API плагинов и механизмов взаимодействия.
Было бы хорошо, если бы Вы описали, какие задачи хотите решить
Меня интересуют перезапуски плагинов и причины их перезапуска. Обратил внимание, что почти все плагины MegaD у меня перезапускаются, а по идее должны работать с момента последнего запуска. Кроме этого, если по какой-то причине оборудование отвалилось от сети (нет доступности, сгорело, пропало питающее напряжение и т.д.), то хотелось бы чтобы по Telegram/SMS/E-mail приходило уведомление администратору системы. Конечно можно использовать плагин ping, создавать для него новые устройства и их добавлять в мультисценарий, но это не комильфо, когда у нас уже есть самостоятельные сущности плагинов в системе.
Кроме этого, мне бы хотелось работать с основной вкладкой или вкладкой "Параметры" бокового меню устройства, соответствующего плагину. Например, парсить страницу config тех же контроллеров MegaD http-плагином и привязывать параметры на вышеуказанные вкладки (идею описывал тут). То же самое я уже проделал с mdmTerminal2, но с ним легче - он шлет get серверу, соответственно по ним сервер вызывает сценарий, в котором я определяю новые параметры плагина и привязываю к ним полученные данные.