Плагин HTTP-Client



  • А можно из сценария дать команду плагину чтобы он обратился к устройству и callback-ом вернул в переменную сценария значение из body?

    Также как это можно сделать в плагине megad (правда тут всегда ответ done…):

    this.pluginCommand({ unit:"megad4", command:{url:"/sec/?cmd=15:2", onResponse:[{id:"15",value:"TOGGLE"}]} });
    
    


  • @Nikpell:

    Добрый вечер, Уважаемые.

    Никто не пытался настроить модуль для ZONT. Описание API у них не плохое, но я еще чайник и получить информацию смог только одним методом- devises, а выбить значение из строки- никак. Может кто подскажет чайнику как это сделать?

    С уважением.

    Парсером по через HTTP плагином не пробовали ?



  • Участник @dev написал в Плагин HTTP-Client:

    @int144:

    Добрый вечер! Для создания погодного виджета решил воспользоваться Яндекс.Погода API. Они отдают данные в JSON формате. Создал несколько разных датчиков, разместил на страничке, привязал к каналам. Все замечательно. Но возникла одна проблемка. Данные о направлении ветра и погодных условиях приходят на английском или абревиатурой. Например, n - северный ветер, ne - северо-восточный, или cloudy - облачно. Как можно в зависимости от приходящих данных выводить значение на русском?

    Добрый день, к сожалению для JSON нет предварительной обработки значения, мы обязательно учтем в следующих версиях ваше пожелание, спасибо.

    Доброго времени суток!
    Когда можно ожидать данной функции.
    Или подскажите как можно выполнить арифметическую операцию над получеными данными. Грубо говоря нужно полученные данные канала разделить на 16
    И еще вопрос: не будет ли мешать работе системы установленый сервер Apache на котором будут выполнятся cgi скрипты?



  • @ellab
    Добрый день, Apache мешать не будет, в извлечение данных JSON можно написать так:

    data.values.var1 / 16
    

    Если вам только нужно получать данные, без управления то можно использовать сниппеты



  • @dev Черт... Круто насколько) Не перестаю удивляться мощи Intrahouse!
    А с SET командой в HTTP тоже прокатит?



  • Новый вопрос:
    команда set выполняет POST запрос с телом

    {"cmd":1,"sn":"0480110017434B5031373020000159","par":[[5,1,"${value}"]]}
    

    И фактически в тело передается не значение актуатора, а строка "${value}"



  • @ellab
    Добрый день, пришлите пожалуйста лог с отладчика плагина



  • @dev Здравствуйте.
    https://yadi.sk/d/0U-PnzCcP8Jmyg
    Видимо тут проблема вложенности?
    Хотя пробую делать запросы на тестовый сервер, ничего в теле нет
    Если просто в тело вписать произвольное постоянное значение, оно нормально отправляется при SET



  • @ellab Добрый день, спасибо за предоставленную информацию. Доступно обновление которое решит вашу проблему, проверьте пожалуйста.



  • Все работает, спасибо!
    Извините за оффтоп, а где делся тип устройства "штора"?
    нужно реализовать на Megad



  • @ellab
    Добрый день, здорово, вы можете создать универсальный актуатор и использовать его в MegaD



  • @dev Вот и не могу придумать как сделать.
    У меня 2 канала на разных релейных: открыть и закрыть. Фактически мне надо применить команду

    /sec/?cmd=7:1;p100;7:0
    

    к каждому действию.
    Или тут только через сценарий?



  • @ellab, если состояние не отслеживать, а только управлять, легче сделать просто на кнопках. При нажатии кнопки сразу передать команду MegaD

    Если нужно состояние - тогда нужно устройство, а управлять через сценарий. Здесь это обсуждалось именно для MegaD:
    https://forum.ih-systems.com/topic/124/управление-роллетами/9



  • Уважаемые разработчики, помогите разобраться с двумя вопросами.

    1. Использую Яндекс.Погода API. Значения приходят в формате json и присваиваются устройствам. Устройства размещаются на экранах и показывают погоду. Наряду с другими параметрами приходит название иконки текущей погоды. Иконка доступна по адресу https://yastatic.net/weather/i/icons/blueye/color/svg/<значение из поля icon>.svg. Какими средствами можно разместить погодную иконку на экране (виджете).
    2. Есть прошивка для esp8266, которая управляет светодиодной гирляндой. Переключением эффектов и настройкой параметров управляет android-приложение по wifi с помощью посылки udp-пакетов на определенный порт. Как из iH отправить udp-пакет на произвольный ip-адрес и порт.


  • @int144 Добрый день,

    1. Создайте устройство Датчик универсальный бинарный добавьте необходимое количество состояний, назначьте каждому состоянию необходимую картинку. Картинки необходимо будет предварительно загрузить.

    2. На текущий момент простого решения нет, вы можете создать виртуальное устройство (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, спасибо за быстрый ответ.

    1. Я и сам думал так сделать, но у меня нет полного набора иконок и их названий. Написал в тех.поддержку Яндекс.
    2. Спасибо, скрипт работает, и даже переключает там что-то, только не то,что я хотел. Возможно с кодировкой нужно разобраться. Попробую 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 Добрый день, покажите пожалуйста формулу обработки значения


Авторизуйтесь, чтобы ответить