Сценарии - новая версия API
-
Пользователь @fanagor написал в Сценарии - новая версия API:
Другая проблема при выполнении команды OS
this.execOS(curl -X POST -H "Authorization: Bearer ${global.get('myToken')}" --data-urlencode "text=Здравствуй мир" -d "lang=ru-RU&folderId=b1g39r55fbahkvak21ha" "https://tts.api.cloud.yandex.net/speech/v1/tts:synthesize" > aaa92.ogg
)
лог пишет: .....
curl: (92) HTTP/2 stream 1 was not closed cleanly: PROTOCOL_ERROR (err 1)при этом если в команду прописать не переменную а сам токен, все проходит. Из терминала и так и так все гуд.
Есть две версии:
- Токен содержит лишние символы в начале и в конце (перевод строки, пробелы), это все убрать перед сохранением
saveToken(stdout) { let myToken = stdout.replace(/^\s+/, '').replace(/\s+$/,''); global.set('myToken', myToken); this.log('myToken='+ global.get('myToken')+'!'); // Посмотреть, что здесь выводится }
- Менее вероятно - неверно берется из global или подстановка внутри строки неверно отрабатывает
let token = global.get('myToken'); this.log('token='+ token+'!'); // Посмотреть, что здесь this.execOS(`curl -X POST -H "Authorization: Bearer ${token}" --data-urlencode... `);
-
Пользователь @intrapro написал в Сценарии - новая версия API:
saveToken(stdout) {
let myToken = stdout.replace(/^\s+/, '').replace(/\s+$/,'');
global.set('myToken', myToken);
this.log('myToken='+ global.get('myToken')+'!'); // Посмотреть, что здесь выводится
}Отлично, помогло, действительно заползали лишние символы.
Спасибо !!
-
Не в эту ветку, но спрошу, по умолчанию IH действует от имени пользователя ROOT ?
root@ih-server-big:/opt/intrahouse-c#
Можно ли под другим пользователем "по умолчанию" ?
-
Пользователь @fanagor написал в Сценарии - новая версия API:
Не в эту ветку, но спрошу, по умолчанию IH действует от имени пользователя ROOT ?
root@ih-server-big:/opt/intrahouse-c#
Можно ли под другим пользователем "по умолчанию" ?Да, конечно, Вы можете создать своего пользователя и делать установку под ним. Но нужно дать ему достаточно прав для доступа:
- К папкам внутри /opt и /var/lib
- К периферии и портам, с которыми работает система
- Этот пользователь должен иметь права на sudo.
Запуск из-под sudo используется при установке пакетов через npm, так как IH ставит пакеты при установке плагинов и их обновлении прозрачно для пользователя. Используемая версия npm требует такой доступ. Возможно, в 5 версии использование sudo получится избежать.
-
Это сообщение удалено!
-
Добрый день. Как с помощью блок схем задать гистерезис включения отключения насоса ГВС? Прошу прощения если это уже обсуждалось.
-
Добрый день, коллеги. У меня сценарий получает данные от плагина через param и obj. При приходе запроса track=hello&artist=yellow&album=hits устройствам (актуатор аналоговый) присваиваются значения hello, yellow и hits соответственно. А при приходе запроса track=hello&artist=&album= устройствам присваивается hello, 0 (ноль) и 0 (ноль) соответственно. Как в сценарии определить отсутствие параметра и присвоить устройству вместо ноля символ пробела или пустую строку?
-
@int144, никак! Я пробовал по разному, но пробел, отсутствие символа и т.д. актуатору аналоговому присвоить нельзя. В своем "событийном" виджете при отсутствии событий просто отображаю "Нет событий".
-
@Alex_Jet, спасибо, понял. Жаль, конечно. А как выяснить, что пустой параметр - if(obj.artist === undefined)?
-
@int144, да, именно так.
-
@Alex_Jet, я так сделал, а в отладчике
01.06 19:57:45.696 assign PIHALL_TRACK5_5.value= Радио 7
01.06 19:57:45.696 assign PIHALL_ALBUM4_5.value=
01.06 19:57:45.696 assign PIHALL_ARTIST3_5.value=
undefined почему-то не срабатывает
-
@Alex_Jet, сработало только на if(obj.artist === "")
-
Добрый день! Поскажите, в чем может быть проблема:
Команда включает порт 5 (pin=5) на 5 сек (click=5) на ESP 8266/http://192.168.0.41/gpio?st=1&pin=5&click=5
Если посылать эту команду через Chrome, то все отрабытывает пормально (порт включается и выключается через 5 сек), но если вызывать из сценария
require ("http").get(`http://192.168.0.41/gpio?st=1&pin=5&click=5 `);
то порт остается включенным. Такое впечатление, что click=5 не отсылается. Как посмотреть в отлатчике, что там отсылается? У меня не видно отправляемую команду.
-
@gis Добрый день.
Попробуйте убрать последний пробелrequire ("http").get(`http://192.168.0.41/gpio?st=1&pin=5&click=5 `); // После 5 есть пробел require ("http").get(`http://192.168.0.41/gpio?st=1&pin=5&click=5`);
-
@intrapro спасибо, но я уже пробовал и сним и без него - разницы нет. Поставил пробел, думал последний символ не передается.
-
Подскажите пожалуйста как установить значение даты замены фильтра в рекуператоре. Нужно чтобы не забивать когда был поменян фильтр и когда следующий раз менять чтобы IH сам сообщал что нужно заменить фильтр. Актуально для фильтров рекуператора, фильтра воды.....
-
Коллеги, вероятно где-то туплю. Переписал работающий сценарий, вынеся гистерезис в дополнительные параметры устройства чтобы можно было из вебки изменять все уставки. Однако система жалуется (co2_guest Device params: Unexpected token / in JSON at position 4), что в сценарии есть ошибка. Не могу понять в чем дело!
const valve1F = Device("VALVE_AIR3"); //Клапан первого этажа const hum_guest = Device("SHUMIDITY1_01", [ //Датчик влажности гостевой {"name":"hst", "note":"Гистерезис, %", "type":"number", "val":5} ]); const co2_guest = Device("SENSORA1_01", [ //Датчик CO2 гостевой {"name":"hst", "note":"Гистерезис, ppm", "type":"number", "val":100} ]); script({ check() { return( (hum_guest.value > hum_guest.setpoint + hum_guest.getParam("hst") || co2_guest.value > co2_guest.setpoint + co2_guest.getParam("hst"))&&(valve1F.isOff()) || (hum_guest.value < hum_guest.setpoint - hum_guest.getParam("hst") && co2_guest.value < co2_guest.setpoint - co2_guest.getParam("hst"))&&(valve1F.isOn()) ); }, start() { if(valve1F.isOff()) valve1F.on(); else valve1F.off(); } });
-
Пользователь @Alex_Jet написал в Сценарии - новая версия API:
Коллеги, вероятно где-то туплю.
Такое ощущение, что виновными оказались комментарии внутри []...
Ну а что не так с этим???
const sensor_hum = Device("SensorA", "Датчик влажности", [ {"name":"hst", "note":"Гистерезис (для управления), %", "type":"number", "val":"5"} ]);
В ошибке - sensor_hum Device params: Unexpected end of JSON input
-
@Alex_Jet, да, Вы правы, проблема именно в комментариях.
В декларативной части сценария (выше script) код не выполняется движком JS, а парсится системой.
Массив дополнительных параметров рассматривается как единый JSON объект. А внутри JSON-а комментарии не разрешены
-
@intrapro, а что не так тут:???
const sensor_hum = Device("SensorA", "Датчик влажности", [ {"name":"hist", "note":"Гистерезис (для управления), %", "type":"number", "val":5} ]);
В ошибке - Unexpected end of JSON input
Я уже перепробовал кучу всего и не могу понять где есть загвоздка!!!
Вот на такое же ведь не ругается!!!:const dt = Device("SensorA", "Датчик температуры в зоне актюатора ТП", [ {"name":"hist", "note":"Гистерезис включения/отключения актюатора, °C", "type":"number", "val":2} ]);