Сценарии - новая версия API
-
@gis:
Рано радовался - тоже есть проблема с отображением русских букв. Если отослать запрос с русскими буквами из браузера (хрома) то все нормально. Если отослать из сценария, то отображаются кракозябры. Подскажите, пожалуйста как перекодировать русский текст в сценарии в другую кодировку?
Почитайте выше комментарии. Нужно установить пакет iconv-lite и написать в сценарии 3 не хитрых строчки, которые также есть в комментарии от меня. Главное подобрать формат данных (в функции toString), который воспринимает дисплей.
@gis:Такой экран - http://radioseti.ru/index.php?route=product/product&path=71&product_id=183
Прошивка от проекта wifi-iot.com, описание команд - https://wifi-iot.com/p/wiki/102/ru/
<size size="85">Offtop. Задумка хорошая ESP+TFT дисплей, но исполнение - ужасное! Он реально так выглядит?</size>
-
@gis:
Рано радовался - тоже есть проблема с отображением русских букв. Если отослать запрос с русскими буквами из браузера (хрома) то все нормально. Если отослать из сценария, то отображаются кракозябры. Подскажите, пожалуйста как перекодировать русский текст в сценарии в другую кодировку?
iconv-lite устанавливать не торопитесь. Так должно работать:
const url = 'http://192.168.0.xx/lcdmsg?st=1&txt='+require('querystring').escape(`Температура ${temp.value}`); require("http").get(url);
-
@gis:
Рано радовался - тоже есть проблема с отображением русских букв. Если отослать запрос с русскими буквами из браузера (хрома) то все нормально. Если отослать из сценария, то отображаются кракозябры. Подскажите, пожалуйста как перекодировать русский текст в сценарии в другую кодировку?
Почитайте выше комментарии. Нужно установить пакет iconv-lite и написать в сценарии 3 не хитрых строчки, которые также есть в комментарии от меня. Главное подобрать формат данных (в функции toString), который воспринимает дисплей.
Спасибо за помощь.
-
@gis:
Рано радовался - тоже есть проблема с отображением русских букв. Если отослать запрос с русскими буквами из браузера (хрома) то все нормально. Если отослать из сценария, то отображаются кракозябры. Подскажите, пожалуйста как перекодировать русский текст в сценарии в другую кодировку?
iconv-lite устанавливать не торопитесь. Так должно работать:
> const url = 'http://192.168.0.xx/lcdmsg?st=1&txt='+require('querystring').escape(`Температура ${temp.value}`); > require("http").get(url); > >
Спасибо! Теперь все заработало как надо. Но почему-то не могу сделать сценарий активным в рабочих сценариях. Он запускается и сразу останавливается. Ошибок не выдает. Скрипт:
__**
-
@name Вывод на TFT
-
@desc Выводит информацию на TFT-дисплей
-
@version 4
*/
const tmp = Device("STEMP_M1_P36");
startOnChange(tmp);
script({
start() {
const url1 = 'http://192.168.0.41/lcdmsg?st=5&&font=2txt='+require('querystring').escape(
Температура: ${tmp.value} °C
);require("http").get(url1);
}
});__
-
-
Еще просьба подсказать, почему не работает привязка сценариев к устройствам?? В списке только Скрипт и отладчик. Не пункта Запуск для устройств, как это описано документации.
-
@gis:
Спасибо! Теперь все заработало как надо. Но почему-то не могу сделать сценарий активным в рабочих сценариях. Он запускается и сразу останавливается. Ошибок не выдает.
Все правильно. У вас нет ни таймеров, ни внутренних слушателей.
Есть только триггер (датчик температуры), по событиям которого сценарий будет срабатывать.
Если внутри сценария просто последовательность действий, он отработает и сразу завершится (станет не активным)
При следующем запуске он опять начнется со start(). Большая часть сценариев работает именно так и 99,9% времени находятся в неактивном состоянии.
Но если сценарий взводит таймеры и/или устанавливает слушателя событий устройства, то он остается активным, следит за своими таймерами и устройствами «изнутри», выполняет действия как реакцию на отслеживаемые события.
Более подробно про сценарии, в конце есть примеры: https://ih-systems.com/ru/about-scenes/
В Рабочих сценариях можно увидеть время последнего запуска/останова. Там же сценарий можно заблокировать, тогда он выполняться не будет.
-
C "latin1" на OLED, подключенный к MegaD по I2C, стали выводится русские буквы. Плагин megad зависает (после принудительных остановки и пуска все начинает работать) если в тексте есть пробел… Для MegaD пробел кодируется символами "_" и "s".
Не очень понятно
Хотелось бы получить строку запроса, на которой плагин виснет.
-
Более подробно про сценарии, в конце есть примеры: https://ih-systems.com/ru/about-scenes/
В Рабочих сценариях можно увидеть время последнего запуска/останова. Там же сценарий можно заблокировать, тогда он выполняться не будет.
В окне рабочего сценария в столбце "Ошибка" появилась ошибка um is not defined. Появилась иконка "стоп
Прочитал все про сценарии, но так и не понял, что такое рабочие сценарии? Как созданные сценарии попадают в рабочие? Почему у меня нельзя привязать сценарий к устройству (нет вкладки устройства)? Почему не один сценарий не виден в расписании?? Создавал сценарии из примеров. Делал так как в описании, но половина вкладок недоступна. Может надо что-то переустановить в системе?
-
C "latin1" на OLED, подключенный к MegaD по I2C, стали выводится русские буквы. Плагин megad зависает (после принудительных остановки и пуска все начинает работать) если в тексте есть пробел… Для MegaD пробел кодируется символами "_" и "s".
Не очень понятно
Хотелось бы получить строку запроса, на которой плагин виснет.
Подробный ответ тут - https://frm.intrahouse.ru/viewtopic.php?f=18&t=5312&p=8437#p8437
-
@gis:
В окне рабочего сценария в столбце "Ошибка" появилась ошибка um is not defined. Появилась иконка "стоп
Скорее всего, опечатка в скрипте.
@gis:
Прочитал все про сценарии, но так и не понял, что такое рабочие сценарии? Как созданные сценарии попадают в рабочие? Почему у меня нельзя привязать сценарий к устройству (нет вкладки устройства)?
Сценарий может быть создан для конкретного устройства - как в вашем примере:
const tmp = Device("STEMP_M1_P36");
Ему никакая привязка не нужна - устройство указано в скрипте. И вкладки "Запуск для устройств" нет
Но можно указать не название устройства, а его класс:
SensorD - дискретный датчик, SensorA - аналоговый, ActorD - дискретный актуатор, ActorA - аналоговый, Meter - счетчик
В нашем случае:
const tmp = Device("SensorA");
В этом случае получается т. н. мультисценарий или шаблонный сценарий.
В списке сценариев простые и мультисценарии имеют разные иконки. У мультисценариев стоит прочерк в графах Устройства и Триггеры.
Но зато они имеют вкладку "Запуск для устройств", на которой можно создать наборы реальных устройств, для которых этот сценарий будет работать.
Так написаны все сценарии, которые предлагаются в качестве шаблонных: https://ih-systems.com/ru/scenes-examples/
Например, lightOn2Gerkons - свет по двум датчикам открытия с учетом дискретного датчика освещенности
const lamp = Device("ActorD", "Светильник", [{"name":"timeOff", "note":"Светильник горит без движения, сек", "type":"number", "val":5}]); const sensor1 = Device("SensorD", "Датчик открытия 1"); const sensor2 = Device("SensorD", "Датчик открытия 2"); const darkness = Device("SensorD", "Датчик освещенности (дискретный)");
Чтобы начать использовать такой сценарий, нужно на вкладке "Запуск для устройств" привязать его к четырем реальным устройствам проекта.
Таких наборов может быть несколько - будут созданы экземпляры сценария для каждого набора устройств. То есть для одного сценария lightOn2Gerkons будет например 3 рабочих сценария.
Если же в сценарии устройство прописано жестко, то и строка в рабочих будет одна. И разница только в том, что таблица рабочих сценариев показывает рабочие характеристики (когда и сколько раз запущен сценарий, был ли заблокирован).
@gis:
Почему не один сценарий не виден в расписании?? Создавал сценарии из примеров. Делал так как в описании, но половина вкладок недоступна.
Сценарии могут запускаться по событиям устройств.
В этом случае скрипт имеет строку, описывающую триггеры - те самые устройства, которые приводят к запуску сценариев: startOnChange([temp, motion, lamp])
или для старой версии check() и/или DeviceT()
Если сценарий имеет триггеры - он по ним и запускается.
А вот если триггера нет - такой сценарий можно запустить с кнопки, по расписанию, по команде смс и т д - т е по желанию пользователя.
Посмотрите в списке сценариев - те сценарии, которые вы хотите увидеть в расписании, должны иметь прочерк в столбце Триггеры.
-
Небольшой баг в сценариях - в окне "Запуск для устройств" при нажатии на любую строку набора устройств все строки пропадают, хотя кнопки добавить/скопировать/удалить становятся активными.
-
Коллеги, а подскажите почему из "Сценарии" нельзя заблокировать мультисценарий? Иначе приходиться блокировать все, например, 14 шт. вручную из "Рабочие сценарии". Сегодня столкнулся с тем, что сценарии, которые принудительно заблокировал самопроизвольно восстановились!!! Это не есть гуд…
А еще можно в "Рабочие сценарии" сделать правильную сортировку по числовому значению ID? Чтобы шло не 2, 20-29, 3, 30-39, а 1,2,3,4 и т.д.
-
Подскажите, как из расписания переключать switch, имеющий 3 и больше состояний? Не делать же для этого сценарии!
И еще по поводу расписания:
1. Почему не рассчитывается время в которое должно включиться/выключиться устройствой на рассвете/закате +-временная поправка? Update - время рассчитывается, оказывается для этого есть отдельный столбец:), но задания в расписании не сортируются также удобно как было в Berry
2. В Berry в расписаниях очень удобна была вкладка if - включить устройство, если дом под охраной, например.
-
Подскажите, как из расписания переключать switch, имеющий 3 и больше состояний? Не делать же для этого сценарии!
Почему нет? На сегодня напрямую из расписания можно выполнить только простые и групповые команды on-off-toggle. Все остальное через сценарий.
1. Почему не рассчитывается время в которое должно включиться/выключиться устройствой на рассвете/закате +-временная поправка?
Должно рассчитываться.
1. Возможно не установлены Широта-Долгота в Настройки - Локация
2. Формат временного смещения должен быть +hh:mm или -hh:mm
2. В Berry в расписаниях очень удобна была вкладка if - включить устройство, если дом под охраной, например.
В планах у нас создать пользовательский виджет расписания, (как это было в Berry, но более современно).
В PM, чтобы не загромождать настройку, сделали по минимуму.
Все ведь можно сделать через сценарии, немножно громоздко, но универсально
-
но задания в расписании не сортируются также удобно как было в Berry
Здесь это обычная таблица PM, сортировать можно по любому столбцу
-
Почему нет? На сегодня напрямую из расписания можно выполнить только простые и групповые команды on-off-toggle. Все остальное через сценарий.
Да как-то сложно это - ради переключения switch в нужное положение надо делать 3-5 сценариев, а потом еще кучу заданий по расписанию.
Ок, в Berry у меня в расписании было 2 записи - в 7.00 включить "День", если был включен "Ночь" и в 17.00 включить "Ночь", если был включен "День". Сделано было для того, что если вручную включен "Эконом", то по расписанию День/Ночь не включать. Как теперь это сделать, предложите варианты?!
@intrapro:Все ведь можно сделать через сценарии, немножно громоздко, но универсально
Если честно, то я уже путаюсь в своих сценариях… ранее в предложения писал, что нужно разделение сценариев по системам, например. Как в устройствах - выбрал нужную систему и отобразились устройство только этой системы. И да, нужен поиск устройств - иногда надо найти быстренько, подправить что-нибудь, но не тут-то было если устройств далеко за 200 шт.
@intrapro:Здесь это обычная таблица PM, сортировать можно по любому столбцу
Да я понимаю, хочется чтобы зашел и сразу понял что в какой очередности включится. Может я сильно привык к Berry, но там это было удобно!
PS: прокомментируйте, пожалуйста, в этой ветке еще один мой пост за вчерашний день.
-
Пробую сделать сценарий переключения режимов работы отопления. Хочу делать запись в пользовательский журнал типа "Режим отопления - День", но как мне получить "Название состояния" переключателя (в данном случае - День)?
И еще - как правильно сравнивать с нулем: this.sumWorkPumps() === 0 или так this.sumWorkPumps() == 0. Во втором случае система ругается на синтаксис.
-
Пробую сделать сценарий переключения режимов работы отопления. Хочу делать запись в пользовательский журнал типа "Режим отопления - День", но как мне получить "Название состояния" переключателя (в данном случае - День)?
this.log(`Режим отопления - ${device.stateName}`)
где device.stateName - название состояния
Описание возможностей нового API см https://ih-systems.com/ru/command_list/
И еще - как правильно сравнивать с нулем: this.sumWorkPumps() === 0 или так this.sumWorkPumps() == 0. Во втором случае система ругается на синтаксис.
Ну уж не ругается, просто серый треугольничек показывает: "Use === to compare with 0"
Потому что x == 0 будет истинно при x=0, x=false, x='', а x===0 - только при x=0.
Можете использовать любой вариант, нестрогое равенство (==) позволяет не заморачиваться с соответствием типа данных.
-
Ок, в Berry у меня в расписании было 2 записи - в 7.00 включить "День", если был включен "Ночь" и в 17.00 включить "Ночь", если был включен "День". Сделано было для того, что если вручную включен "Эконом", то по расписанию День/Ночь не включать. Как теперь это сделать, предложите варианты?!
Cделать 2 сценария, условие (если НЕ "Эконом") включить в сценарий
Настройка условия в расписании вызывала вопросы:
1, Почему не срабатывает? Ответ: потому что есть if
2. Мне надо условия объединить по или, а не по и
и т д
Если честно, то я уже путаюсь в своих сценариях… ранее в предложения писал, что нужно разделение сценариев по системам, например. Как в устройствах - выбрал нужную систему и отобразились устройство только этой системы. И да, нужен поиск устройств - иногда надо найти быстренько, подправить что-нибудь, но не тут-то было если устройств далеко за 200 шт.
Да, группировку сценариев добавим в ближайшее время.
По поиску устройств в таблице- пока не придумали
-
Коллеги, а подскажите почему из "Сценарии" нельзя заблокировать мультисценарий? Иначе приходиться блокировать все, например, 14 шт. вручную из "Рабочие сценарии". Сегодня столкнулся с тем, что сценарии, которые принудительно заблокировал самопроизвольно восстановились!!! Это не есть гуд…
Посчитали, что блокировать нужно конкретный рабочий сценарий, а не все подряд. Видимо нужно добавить и такую возможность.
По поводу сброса блокировки сценариев - проверим, исправим.
А еще можно в "Рабочие сценарии" сделать правильную сортировку по числовому значению ID? Чтобы шло не 2, 20-29, 3, 30-39, а 1,2,3,4 и т.д.
А зачем вам их сортировать по ID? В этом поле может быть как символьная строка - название простого сценария, так и число для рабочих сценариев мультисценария. Это просто уникальный ID в таблице рабочих сценариев, ни о чем не говорящий. Хотели это поле скрыть, но по нему видно сразу - простой это сценарий или мульти.