Плагин HTTP-Client
-
@int144 Добрый день,
-
Создайте устройство
Датчик универсальный бинарный
добавьте необходимое количество состояний, назначьте каждому состоянию необходимую картинку. Картинки необходимо будет предварительно загрузить. -
На текущий момент простого решения нет, вы можете создать виртуальное устройство (
RGB
илиLamp
). Создаете сценарий , привязываете ранее созданное виртуальное устройство и выполняете необходимые команды
пример:
/** * @name Новый сценарий * @desc * @version 4 */ const rgb = Device("RGBLAMP"); // id виртуального устройства startOnChange(rgb); script({ start() { const dgram = require('dgram'); const client = dgram.createSocket('udp4'); const HOST = '192.168.0.110'; const PORT = 45900; const [r, g, b, w, ww] = rgb.value; const message = new Buffer(`set value: [${r}, ${g}, ${b}]`); // данные udp, получиться такой пакет "set value: [255, 255, 255]" client.send(message, 0, message.length, PORT, HOST, () => {}); } });
-
-
@dev, спасибо за быстрый ответ.
- Я и сам думал так сделать, но у меня нет полного набора иконок и их названий. Написал в тех.поддержку Яндекс.
- Спасибо, скрипт работает, и даже переключает там что-то, только не то,что я хотел. Возможно с кодировкой нужно разобраться. Попробую tcpdump-ом посмотреть.
-
После обновления плагина перестала работать регулировка громкости. В боковом меню при перемещении ползунка значения на иконке не меняются. На кнопки включения и выключения не реагирует.
В отладчике:
03.11 21:32:31.871 IH: command [ { dn: 'VOLL_ALL', prop: 'set', val: 5 } ] 03.11 21:32:31.872 IH: send { type: 'act', data: [ { dn: 'VOLL_ALL', prop: 'set', val: 5 } ] } 03.11 21:32:31.880 IH: command [ { dn: 'VOLL_ALL', prop: 'set', val: 5 } ] 03.11 21:32:31.881 IH: send { type: 'act', data: [ { dn: 'VOLL_ALL', prop: 'set', val: 5 } ] } 03.11 21:32:31.884 http1: http://192.168.0.43/mp3play?cmd=6&data=5 03.11 21:32:31.922 IH: Plugin exit with code 1 03.11 21:32:31.926 IH: restart timer 5 03.11 21:32:34.572 IH: command fail! [ { dn: 'VOLL_ALL', prop: 'set', val: 11 } ] Plugin is not running! 03.11 21:32:34.580 IH: command fail! [ { dn: 'VOLL_ALL', prop: 'set', val: 11 } ] Plugin is not running! 03.11 21:32:35.323 IH: command fail! [ { dn: 'VOLL_ALL', prop: 'off' } ] Plugin is not running! 03.11 21:32:36.413 IH: command fail! [ { dn: 'VOLL_ALL', prop: 'on', val: '20' } ] Plugin is not running! 03.11 21:32:37.643 IH: Run /var/lib/intrahouse-c/plugins/http/index.js http1 03.11 21:32:37.679 IH: command [ { dn: 'VOLL_ALL', prop: 'off' } ] 03.11 21:32:37.681 IH: send { type: 'act', data: [ { dn: 'VOLL_ALL', prop: 'off' } ] } 03.11 21:32:38.540 IH: command [ { dn: 'VOLL_ALL', prop: 'on', val: '20' } ] 03.11 21:32:38.541 IH: send { type: 'act', data: [ { dn: 'VOLL_ALL', prop: 'on', val: '20' } ] } 03.11 21:32:39.502 IH: command [ { dn: 'VOLL_ALL', prop: 'off' } ] 03.11 21:32:39.503 IH: send { type: 'act', data: [ { dn: 'VOLL_ALL', prop: 'off' } ] } 03.11 21:32:39.857 http1: start 03.11 21:32:39.859 http1: version: 0.0.17 03.11 21:32:39.894 IH: Plugin exit with code 1 03.11 21:32:39.898 IH: restart timer 5
-
@gis Добрый день, выпущено обновление, проверьте пожалуйста.
-
@dev
Перестали парситься значения влажности shth:05.11 13:51:45.498 http1: GET http://192.168.0.41/sensors ---- HEADERS START ---- { "content-length": "47 ", "server": "lwIP/1.4.0", "content-type": "text/html", "connection": "close ", "expires": "Fri, 10 Apr 2008 14:00:00 GMT", "pragma": "no-cache" } ---- HEADERS END ---- ---- BODY START ---- hostname:ESP-TFT;shtt:20.2;shth:56.6;rtct:21.0;---- BODY END -- 05.11 13:51:45.502 http1: http://192.168.0.41/sensors --> values: ["shtt:20.2;shth:","20.2"] 05.11 13:51:45.504 IH: get [ { dn: 'STEMP_ESP_TFT', err: 'Cannot read property \'slice\' of null' }, { dn: 'SHTT_ESP_TTF', value: 20.2 } ] set { STEMP_ESP_TFT: { err: 'Cannot read property \'slice\' of null' }, SHTT_ESP_TTF: { aval: 20.2, err: 0 } }
-
@gis Добрый день, покажите пожалуйста формулу обработки значения
-
@dev Спасибо, все заработало после того, как удалил и заново создал каналы.
-
Добрый день! пытаюсь получить данные temp из json
{"observations":[{"stationID":"ISCHEP1","obsTimeUtc":"2019-11-22T14:25:55Z","obsTimeLocal":"2019-11-22 17:25:55","neighborhood":"Schepkinskoe","softwareType":null,"country":"RU","solarRadiation":null,"lon":39.80593491,"realtimeFrequency":null,"epoch":1574432755,"lat":47.34576416,"uv":null,"winddir":102,"humidity":52.0,"qcStatus":-1,"metric":{"temp":-4.9,"heatIndex":-4.9,"dewpt":-13.1,"windChill":-8.3,"windSpeed":7.4,"windGust":9.3,"pressure":1033.86,"precipRate":0.00,"precipTotal":0.25,"elev":24.4}}]}
но что то не пойму что надо записать в Извлечение данных JSON
data.observations.metric.temp ошибка
-
observations - это массив
Попробуйте так: data.observations[0].metric.temp
-
спасибо попробую
-
опрашиваемое устройство присылает ответ в JSON в виде 6 разрядного числа, каждый из разрядов которого может принимать значение 0 или 1. Как грамотно написать запрос для извлечения данных, что бы не отбрасывались первые незначащие нули?
Т.е , например, плагин читает ответ вида 010000 но в сценарий передает 10000. Куда смотреть?
UPD: Как вариант можно "выровнять" в самом сценарии,
типа:while (val.length <6 ) vl='0' + val; // добиваем 0-ми до 6 символов
но это все равно полностью не снимает вопрос...
-
@alesle Добрый день, для начала попробуйте отключить галочку
преобразовать в число
, если не поможет тогда:String(val).padStart(6, '0') // 010000
-
ни то не другое не помогает - из плагина все равно передается число без лидирующих нулей. Впрочем, это легко исправляется в скрипте.
-
@alesle Добрый день, для устройства сделайте тип
сенсор аналоговый универсальный
-
@dev
так и есть , но - не работает...
-
Участник @intrahouse написал в Плагин HTTP-Client:
Опубликована статья "Парсинг сайта погоды" https://ih-systems.com/ru/weather-parsing/
,,,,dev 13 мар. 2019 г., 18:52
Добрый день в Блоге опубликована статья "Как получить информацию о подключенных клиентов с WI-FI роутера" https://ih-systems.com/ru/parsing-podkljuchennyh-klientov-s-wi-fi-routera/
Можно проверить корректность ссылок?
"Не найдено....."
-
Господа, имеется ответ от девайса в виде массива JSOn вида:
"onew_temp": [ { "id": "1", "adr_hex": "28BC6B2D09000066", "name": "S6", "t": "25.31" }, { "id": "2", "adr_hex": "28AADE403D1401D6", "name": "S2", "t": "25.06" },
Как правильно написать выражение для извлечения данных, что бы оно извлекало t там, где name="S6" ?
Понятно что,
data.onew_temp[0].t
извлечет то что нужно, но дело в том что нет уверенности что эти данные всгда будут на этом месте. А вот "name": "S6" будет всегда.
-
Участник @alesle написал в Плагин HTTP-Client:
но дело в том что нет уверенности что эти данные всгда будут на этом месте. > А вот "name": "S6" будет всегда.
Если "name": "S6" будет всегда, то можно так:
data.onew_temp.filter(item => item.name=="S6")[0].t
-
Блин, работает!!!
Я правда нифига не вкурил как , но - работает!!!
Буду разбираться..
Спасибо огромное!
-
@alesle пожалуйста
Вот вариант еще корочеdata.onew_temp.find(item => item.name=="S6").t
Современный javascript мощный и гибкий язык, особенно если использовать синтаксис ES6 (или ES2015, что одно и то же) , в данном случае стрелочные функции.
Магия этих выражений раскрывается в 2 шага-
Массивы в JS имеют встроенные методы для поиска по заданному критерию, в частности filter, find
- find - ищет первый элемент массива, возвращает найденный объект
- filter - сюрприз - фильтрует входной массив и возвращает все найденные элементы (learn.javascript.ru/array-methods)
-
Методу нужно передать критерий отбора - функцию для обработки элемента массива.
Если писать, используя синтаксис классических функций, то получится так:
arr.filter( function (item) { return item.name == 'S6'; });
Функция вызывается по очереди для каждого элемента массива (item), если возвращает true, то элемент берется в новый массив
С введением в ES6 стрелочных функций все стало компактнее:
function (item) {return item.name == 'S6';}
можно заменить на
(item) => item.name == 'S6'
Что произошло
- убрали function
- грубо говоря return заменили на =>
- если входной аргумент ровно один - то и скобки можно не ставить
Подробнее https://learn.javascript.ru/arrow-functions
Получаем:arr.filter( item => item.name == 'S6' );
Ну и надо иметь в виду, что возвращает метод массива.
Если результат - массив, то берем свойство его первого элементаdata.onew_temp.filter(item => item.name=="S6")[0].t
Если результат - объект, то просто берем свойство t
data.onew_temp.find(item => item.name=="S6").t
-