Сценарии - новая версия API
-
Текст на латинице конечно выводится, а вот русские буквы - никак. Хотя на PHP с этим вообще никаких проблем нет (см.код выше).
iconv-lite преобразует из utf8 верно, проблема скорее всего в преобразовании буфера в строку для размещения в url
let text = buf.toString("hex" или "latin1" или ??)
Хотелось бы действительно увидеть строку запроса с русскими буквами в кодировке cp866, которую формирует php.
Например, для символов АБВГ
-
Текст на латинице конечно выводится, а вот русские буквы - никак. Хотя на PHP с этим вообще никаких проблем нет (см.код выше).
iconv-lite преобразует из utf8 верно, проблема скорее всего в преобразовании буфера в строку для размещения в url
let text = buf.toString("hex" или "latin1" или ??)
Хотелось бы действительно увидеть строку запроса с русскими буквами в кодировке cp866, которую формирует php.
Например, для символов АБВГ
Nodejs проверить не могу, все онлайн инструменты глючат :(
-
Попробуйте так:
> const temp = Device("DEVICE_ID"); > > startOnChange(temp); > > script({ > start() { > require("http").get(`http://192.168.0.xx/lcdmsg?st=1&txt=${temp.value}` ); > } > }); > >
Большое спасибо, так сработало. Хорошо бы добавить возможность управления устройствами с помощью запросов в HTTP-плагин.
-
@gis:
Попробуйте так:
> > const temp = Device("DEVICE_ID"); > > > > startOnChange(temp); > > > > script({ > > start() { > > require("http").get(`http://192.168.0.xx/lcdmsg?st=1&txt=${temp.value}` ); > > } > > }); > > > >
Большое спасибо, так сработало. Хорошо бы добавить возможность управления устройствами с помощью запросов в HTTP-плагин.
Добрый день, управление устройствами доступно, в настройках канала на вкладке команды
-
@gis:
Большое спасибо, так сработало. Хорошо бы добавить возможность управления устройствами с помощью запросов в HTTP-плагин.
gis, а что за такой интересный tft-экран с интерфейсом Wi-Fi?
-
Такой экран - http://radioseti.ru/index.php?route=product/product&path=71&product_id=183
Прошивка от проекта wifi-iot.com, описание команд - https://wifi-iot.com/p/wiki/102/ru/
-
iconv-lite преобразует из utf8 верно, проблема скорее всего в преобразовании буфера в строку для размещения в url
let text = buf.toString("hex" или "latin1" или ??)
C "latin1" на OLED, подключенный к MegaD по I2C, стали выводится русские буквы. Плагин megad зависает (после принудительных остановки и пуска все начинает работать) если в тексте есть пробел… Для MegaD пробел кодируется символами "_" и "s".
-
Большая просьба добавить в расписания возможность запуска сценария:
1. циклически, в определенный промежуток времени в каждого часа.
2. циклически в определенное время в течении каждого часа.
3. циклически в течении дня, через заданный промежуток времени.
Очень не хватает!
-
@gis:
Попробуйте так:
> > const temp = Device("DEVICE_ID"); > > > > startOnChange(temp); > > > > script({ > > start() { > > require("http").get(`http://192.168.0.xx/lcdmsg?st=1&txt=${temp.value}` ); > > } > > }); > > > >
Большое спасибо, так сработало. Хорошо бы добавить возможность управления устройствами с помощью запросов в HTTP-плагин.
Рано радовался - тоже есть проблема с отображением русских букв. Если отослать запрос с русскими буквами из браузера (хрома) то все нормально. Если отослать из сценария, то отображаются кракозябры. Подскажите, пожалуйста как перекодировать русский текст в сценарии в другую кодировку?
-
@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()
Если сценарий имеет триггеры - он по ним и запускается.
А вот если триггера нет - такой сценарий можно запустить с кнопки, по расписанию, по команде смс и т д - т е по желанию пользователя.
Посмотрите в списке сценариев - те сценарии, которые вы хотите увидеть в расписании, должны иметь прочерк в столбце Триггеры.
-
Небольшой баг в сценариях - в окне "Запуск для устройств" при нажатии на любую строку набора устройств все строки пропадают, хотя кнопки добавить/скопировать/удалить становятся активными.