Плагин HTTP-Client



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

    Плагин HTTP-Client предназначен для считывания информации по протоколу HTTP с устройств и ресурсов в локльной сети и сети Интернет.

    https://intrahouse.ru/product/plugin-http-client/

    Результат ответа можно обработать двумя способами.

    JSON

    Пример ответа от сервера

    {
      "id": 2643743,
      "coord": {
        "lon": -0.13,
        "lat": 51.51
      },
      "base": "stations",
      "main": {
        "temp": 280.32,
        "pressure": 1012,
        "humidity": 81,
        "temp_min": 279.15,
        "temp_max": 281.15
      }
    }
    
    
    

    Для получения id в поле "Извлечение данных JSON" нужно написать

    data.id
    
    
    

    Для получения температуры в поле "Извлечение данных JSON" нужно написать

    data.main.temp
    
    
    

    Для получения влажности в поле "Извлечение данных JSON" нужно написать

    data.main.humidity
    
    
    

    data - является корневой переменой ответа, в данном случае это будет объект содержащий переменные: id, coord, base, main

    Более подробную информацию можно получить тут https://ru.wikipedia.org/wiki/JSON

    Регулярные выражения RegExp

    Пример ответа от сервера

    
      Температура:
    
    -11 
      Влажность:
    
    45% 
    
    
    

    Для получения температуры в поле "Регулярное выражение" нужно написать

    вариант 1

    
    `(.*)<` 
    вариант 2
    
    

    <code>Темп.">(.)<</code>

    Для получения влажности в поле "Регулярное выражение" нужно написать
    
    вариант 1
    

    (.*)
    вариант 2

    >(.*)%
    
    
    

    Основной синтаксис для извлечения значения состоит из:

    начало_шаблона **группа захвата ** конец_шаблона

    для выражения:

    
    `(.*)<` 
    начало_шаблона - 
    
      указан как обычный текст для поиска точного соответствия
    
    группа захвата - **()**  скобки указывают на начало и конец группы захвата и метод извлечения часто используется последовательность **.*** для обозначения любого количества любых символов между двумя частями регулярного выражения
    
    конец_шаблона - ** <div< strong="">указан как обычный текст для поиска точного соответствия. 
    
    Группа захвата может возвращать несколько результатов найденного значения. Для такого чтобы указать какой результат именно использовать, необходимо заполнить поле "Элемент массива".
    
    Более подробную информацию можно получить тут [https://ru.wikipedia.org/wiki/Регулярные_выражения](https://ru.wikipedia.org/wiki/Регулярные_выражения)
    
    Хороший инструмент для построения регулярных выражений [https://regex101.com/](https://regex101.com/), подсветка синтаксиса, тестирование, пример поиска, выделение результатов. Регулярные выражения необходимо писать на языке JavaScript.</div<>**
    
    


  • Примеры:

    Gismeteo - Москва

    Запрос

    Url: https://www.gismeteo.ru/weather-moscow-4368/

    Метод запроса: GET

    Интервал опроса: 60

    Код ответа: 200

    Headers: по умолчанию

    Канал

    Устройство: произвольно

    Тип обработки: TEXT

    Регулярное выражение:

    {"temperature":{"air":(.*)},"icon"
    
    

    Флаг: gm

    Элемент массива: 1

    Преобразовать в число: активно



  • Пока есть нюанс с заголовком "Content-lenght": может ли плагин сам автоматически сформировать длину body?

    В остальном (пока что) все супер!

    Обязательно нужны команды по событиям из графического интерфейса, без них прям никак))

    P.S. Возвращаясь к плагину KNX - мы можем предоставить оборудование для разработки плагина (без возврата).

    Помню вы говорили о BAOS, но хотелось бы и KNX IP тоже.



  • @ellab:

    Пока есть нюанс с заголовком "Content-lenght": может ли плагин сам автоматически сформировать длину body?

    Добрый день, мы проверили этот момент, проблем не обнаружили.

    параметры запроса на тестовый сервер для плагина http

        url: "http://localhost:2222",
        type: "post",
        interval: 60,
        statusCode: 200,
        headers: "Accept-Language: ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7\r\nUser-Agent: intraHouse (http-plugin)",
        body: "username=admin&password=1234!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!"
    
    
    

    что пришло тестовому серверу от плагина.

    { 'accept-language': 'ru-RU,ru;q=0.9,en-US;q=0.8,en;q=0.7',
      'user-agent': 'intraHouse (http-plugin)',
      host: 'localhost:2222',
      'content-length': '60',
      connection: 'close' }
    
    
    

    @ellab:

    Обязательно нужны команды по событиям из графического интерфейса, без них прям никак))

    Добавим в следующей версии 😉



  • @ellab:

    P.S. Возвращаясь к плагину KNX - мы можем предоставить оборудование для разработки плагина (без возврата).

    Помню вы говорили о BAOS, но хотелось бы и KNX IP тоже.

    За предложение спасибо. Пока не нужно. Кое что из оборудования KNX у нас есть.

    Что вы имели в виду про KNX IP. BAOS - это тоже KNX IP.

    В этом году работу над плагином KNX мы не планировали.

    Если у вас есть программисты, можете самостоятельно написать плагин.

    На GitHub откроем репозиторий. Там можем поработать вместе.



  • Здравствуйте!

    По поводу Content-length: есть ощущение что проблема в тестируемом устройстве. Перепроверил несколько раз: пока явно не указан данный заголовок устройство ничего не возвращает. Если необходимо могу предоставить дамп трафика.

    По поводу следующей версии: когда выйдет? 🙂

    По поводу KNX: я понимаю что BAOS - это тоже IP, но у нас имеются объекты которые мы имеем желание перевести на Intrahouse, но там обычные KNX IP tunneling шлюзы. Некоторые наработки по KNX у нас есть. Я так понял что мы можем рассчитывать на вашу поддержку в случае чего? Я видел API для плагинов довольно интересно сделано, думаю можем попробовать.

    А еще такой вопрос: можно ли установить для плагина HTTP время таймаута? Есть мысли реализовать некий long polling в виду того что одним запросом можно все разобрать. А вообще респект за вашу работу!



  • @ellab:

    Здравствуйте!

    По поводу Content-length: есть ощущение что проблема в тестируемом устройстве. Перепроверил несколько раз: пока явно не указан данный заголовок устройство ничего не возвращает. Если необходимо могу предоставить дамп трафика.

    Добрый день, высылайте на <email email="dev@intrahouse.ru">dev@intrahouse.ru</email> было бы здорово посмотреть еще успешный ответ



  • @dev:

    @ellab:

    Здравствуйте!

    По поводу Content-length: есть ощущение что проблема в тестируемом устройстве. Перепроверил несколько раз: пока явно не указан данный заголовок устройство ничего не возвращает. Если необходимо могу предоставить дамп трафика.

    Добрый день, высылайте на <email email="dev@intrahouse.ru">dev@intrahouse.ru</email> было бы здорово посмотреть еще успешный ответ, или с браузера.



  • @ellab:

    По поводу KNX: я понимаю что BAOS - это тоже IP, но у нас имеются объекты которые мы имеем желание перевести на Intrahouse, но там обычные KNX IP tunneling шлюзы. Некоторые наработки по KNX у нас есть. Я так понял что мы можем рассчитывать на вашу поддержку в случае чего? Я видел API для плагинов довольно интересно сделано, думаю можем попробовать.

    Конечно. Обязательно поможем.

    Можно открыть репозиторий на GitHub и вместе поработать над плагином



  • @ellab:

    А вообще респект за вашу работу!

    Большое спасибо! 😄



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

    доступно обновление плагина HTTP-Client 0.0.8.

    Обновите сервер intraHouse до версии 4.4.4.

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

    Добавлена обработка команд от виртуального устройства, можно привязать запрос для каждого действия. При настройке канала доступна вкладка "Команды"

    Изменено название метода обработки запроса с TEXT на TEXT GET, функционал остался без изменения.

    Добавлен новый метод обработки запроса TEXT SEARCH (Регулярные выражения RegExp.test).

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

    Метод обработки TEXT SEARCH

    Пример ответа от сервера

    24:18:1D:2D:BD:1BAC:C1:EE:82:DC:3170:8A:09:FE:65:917C:04:D0:D9:E6:8018:F0:E4:35:B1:A8
    
    
    

    В поле "Регулярное выражение" нужно написать

    18:F0:E4:35:B1:A8
    
    
    

    В поле "Если найдено, установить значение:"

    1
    
    

    В поле "Если не найдено, установить значение:"

    0
    
    

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



  • Здравствуйте!

    А можно ли передать аналоговое значение?

    В командах увидел только on, off и toggle.



  • Добрый день, добавим в следующей версии 😉



  • А вы сами пробовали считывать инфо с веб-страничек роутеров/коммутаторов? Я увидел, что у меня сразу возникают такие проблемы:

    1. Авторизация

    2. get [{"dn":"","err":"Response status code no match: 406"}]

    3. get [{"dn":"","err":"self signed certificate"}]

    Кроме этого, при уровне отладочных сообщение - "Высокий" хотелось бы в отладчике видеть то что выдает сервер плагину.



  • @Alex_Jet:

    А вы сами пробовали считывать инфо с веб-страничек роутеров/коммутаторов? Я увидел, что у меня сразу возникают такие проблемы:

    1. Авторизация

    2. get [{"dn":"","err":"Response status code no match: 406"}]

    3. get [{"dn":"","err":"self signed certificate"}]

    Кроме этого, при уровне отладочных сообщение - "Высокий" хотелось бы в отладчике видеть то что выдает сервер плагину.

    Добрый день, конечно, погода с трех разных сайтов, роутер длинк, роутер микротик (там есть нюанс).

    У вас код ответа от сервера, не соответствует указанному в параметрах. Укажите код ответа: 0 в параметрах запроса - проверка производиться не будет. В большинстве случаев, при успешном запросе, ответ должен быть с кодом: 200.

    Для удобства тестирования, предлагаем поставить расширение на хром, где вы сможете смоделировать и протестировать запрос.

    https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo



  • Подскажите (только начинаю осваивать систему), после установки плагина оно свойств группы каналов почему-то пустое. Удаление и установка плагина заново не помогла.



  • @gis:

    Подскажите (только начинаю осваивать систему), после установки плагина оно свойств группы каналов почему-то пустое. Удаление и установка плагина заново не помогла.

    Добрый день, убедитесь что стоит последняя версия системы, выполните обновление на панели dashboard.



  • Добрый день! Пытаюсь настроить включение света через шлюз noolite PR1132. Плагин настроил на сколько хватило знаний. Силовой модуль в режиме диммера. Свет включается и выключается из выпадающего меню. При нажатии на иконку ничего не происходит. Помогите пожалуйста разобраться.Снимок.PNG API в инструкции на шлюз, стр 23-24. https://ноотехника.рф/UserFiles/PR1132.pdf



  • @sergeyygr:

    Добрый день! Пытаюсь настроить включение света через шлюз noolite PR1132. Плагин настроил на сколько хватило знаний. Силовой модуль в режиме диммера. Свет включается и выключается из выпадающего меню. При нажатии на иконку ничего не происходит. Помогите пожалуйста разобраться.Снимок.PNG API в инструкции на шлюз, стр 23-24. https://ноотехника.рф/UserFiles/PR1132.pdf

    Добрый день, а если Вы этот Url введёте в браузере, то получается управлять ?



  • @dev:

    @sergeyygr:

    Добрый день! Пытаюсь настроить включение света через шлюз noolite PR1132. Плагин настроил на сколько хватило знаний. Силовой модуль в режиме диммера. Свет включается и выключается из выпадающего меню. При нажатии на иконку ничего не происходит. Помогите пожалуйста разобраться.Снимок.PNG API в инструкции на шлюз, стр 23-24. https://ноотехника.рф/UserFiles/PR1132.pdf

    Добрый день, а если Вы этот Url введёте в браузере, то получается управлять ?

    Да, получается. И из меню получается. После перезагрузки плагина даже на нажатие иконки реагирует, но не всегда. Значок ошибки в иконке отображается всегда. Лог прилагаю.Снимок1.PNG


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