Плагин HTTP-Client

Программная платформа для систем автоматизации.
Диспетчеризация, Умный дом.
dev
Сообщения: 397
Зарегистрирован: 29 янв 2018, 06:51

Плагин HTTP-Client

Сообщение dev » 16 ноя 2018, 12:10

Добрый день,
Плагин 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
Пример ответа от сервера

Код: Выделить всё

<div class="root">
  <span class="value">
    Температура:<p class="text_temp">-11</p>
  </span>
  <span class="value">
    Влажность:<p class="text_humidity">45%</p>
  </span>
</div>
Для получения температуры в поле "Регулярное выражение" нужно написать
вариант 1

Код: Выделить всё

<p class="text_temp">(.*)<
вариант 2

Код: Выделить всё

Темп.*">(.*)<
Для получения влажности в поле "Регулярное выражение" нужно написать
вариант 1

Код: Выделить всё

<p class="text_humidity">(.*)<div
вариант 2 Основной синтаксис для извлечения значения состоит из:
начало_шаблона группа захвата конец_шаблона
для выражения:

Код: Выделить всё

<p class="text_temp">(.*)<
начало_шаблона - <p class="text_temp"> указан как обычный текст для поиска точного соответствия
группа захвата - () скобки указывают на начало и конец группы захвата и метод извлечения часто используется последовательность .* для обозначения любого количества любых символов между двумя частями регулярного выражения
конец_шаблона - <div указан как обычный текст для поиска точного соответствия.
Группа захвата может возвращать несколько результатов найденного значения. Для такого чтобы указать какой результат именно использовать, необходимо заполнить поле "Элемент массива".

Более подробную информацию можно получить тут https://ru.wikipedia.org/wiki/Регулярные_выражения
Хороший инструмент для построения регулярных выражений https://regex101.com/, подсветка синтаксиса, тестирование, пример поиска, выделение результатов. Регулярные выражения необходимо писать на языке JavaScript.
Последний раз редактировалось dev 16 ноя 2018, 13:24, всего редактировалось 15 раз.

dev
Сообщения: 397
Зарегистрирован: 29 янв 2018, 06:51

Re: Плагин HTTP-Client

Сообщение dev » 16 ноя 2018, 12:21

Примеры:

Gismeteo - Москва

Запрос
Url: https://www.gismeteo.ru/weather-moscow-4368/
Метод запроса: GET
Интервал опроса: 60
Код ответа: 200
Headers: по умолчанию

Канал
Устройство: произвольно
Тип обработки: TEXT
Регулярное выражение:

Код: Выделить всё

{"temperature":{"air":(.*)},"icon"
Флаг: gm
Элемент массива: 1
Преобразовать в число: активно

ellab
Сообщения: 10
Зарегистрирован: 03 фев 2018, 15:00

Re: Плагин HTTP-Client

Сообщение ellab » 21 ноя 2018, 12:26

Пока есть нюанс с заголовком "Content-lenght": может ли плагин сам автоматически сформировать длину body?
В остальном (пока что) все супер!
Обязательно нужны команды по событиям из графического интерфейса, без них прям никак))
P.S. Возвращаясь к плагину KNX - мы можем предоставить оборудование для разработки плагина (без возврата).
Помню вы говорили о BAOS, но хотелось бы и KNX IP тоже.

dev
Сообщения: 397
Зарегистрирован: 29 янв 2018, 06:51

Re: Плагин HTTP-Client

Сообщение dev » 23 ноя 2018, 08:11

ellab писал(а):
21 ноя 2018, 12:26
Пока есть нюанс с заголовком "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 писал(а):
21 ноя 2018, 12:26
Обязательно нужны команды по событиям из графического интерфейса, без них прям никак))
Добавим в следующей версии ;)

intrahouse
Сообщения: 543
Зарегистрирован: 12 дек 2016, 20:22

Re: Плагин HTTP-Client

Сообщение intrahouse » 23 ноя 2018, 12:14

ellab писал(а):
21 ноя 2018, 12:26
P.S. Возвращаясь к плагину KNX - мы можем предоставить оборудование для разработки плагина (без возврата).
Помню вы говорили о BAOS, но хотелось бы и KNX IP тоже.
За предложение спасибо. Пока не нужно. Кое что из оборудования KNX у нас есть.
Что вы имели в виду про KNX IP. BAOS - это тоже KNX IP.
В этом году работу над плагином KNX мы не планировали.
Если у вас есть программисты, можете самостоятельно написать плагин.
На GitHub откроем репозиторий. Там можем поработать вместе.

ellab
Сообщения: 10
Зарегистрирован: 03 фев 2018, 15:00

Re: Плагин HTTP-Client

Сообщение ellab » 26 ноя 2018, 08:21

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

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

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

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

dev
Сообщения: 397
Зарегистрирован: 29 янв 2018, 06:51

Re: Плагин HTTP-Client

Сообщение dev » 26 ноя 2018, 12:54

ellab писал(а):
26 ноя 2018, 08:21
Здравствуйте!
По поводу Content-length: есть ощущение что проблема в тестируемом устройстве. Перепроверил несколько раз: пока явно не указан данный заголовок устройство ничего не возвращает. Если необходимо могу предоставить дамп трафика.
Добрый день, высылайте на dev@intrahouse.ru было бы здорово посмотреть еще успешный ответ

intrahouse
Сообщения: 543
Зарегистрирован: 12 дек 2016, 20:22

Re: Плагин HTTP-Client

Сообщение intrahouse » 27 ноя 2018, 06:22

ellab писал(а):
26 ноя 2018, 08:21
По поводу KNX: я понимаю что BAOS - это тоже IP, но у нас имеются объекты которые мы имеем желание перевести на Intrahouse, но там обычные KNX IP tunneling шлюзы. Некоторые наработки по KNX у нас есть. Я так понял что мы можем рассчитывать на вашу поддержку в случае чего? Я видел API для плагинов довольно интересно сделано, думаю можем попробовать.
Конечно. Обязательно поможем.
Можно открыть репозиторий на GitHub и вместе поработать над плагином

intrahouse
Сообщения: 543
Зарегистрирован: 12 дек 2016, 20:22

Re: Плагин HTTP-Client

Сообщение intrahouse » 27 ноя 2018, 06:25

ellab писал(а):
26 ноя 2018, 08:21
А вообще респект за вашу работу!
Большое спасибо! :D

dev
Сообщения: 397
Зарегистрирован: 29 янв 2018, 06:51

Re: Плагин HTTP-Client

Сообщение dev » 03 дек 2018, 15:19

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

Добавлена обработка команд от виртуального устройства, можно привязать запрос для каждого действия. При настройке канала доступна вкладка "Команды"
Изменено название метода обработки запроса с TEXT на TEXT GET, функционал остался без изменения.
Добавлен новый метод обработки запроса TEXT SEARCH (Регулярные выражения RegExp.test).
Данный метод позволяет с помощью регулярного выражения проверить содержится ли заданий шаблон(текст для поиска) в результате ответа и установить значение, если найдено или не найдено. Например можно сделать запрос на домашний роутер и узнать какое устройство в сети.

Метод обработки TEXT SEARCH
Пример ответа от сервера

Код: Выделить всё

<table>
  <tr>24:18:1D:2D:BD:1B</tr>
  <tr>AC:C1:EE:82:DC:31</tr>
  <tr>70:8A:09:FE:65:91</tr>
  <tr>7C:04:D0:D9:E6:80</tr>
  <tr>18:F0:E4:35:B1:A8</tr>
</table>
В поле "Регулярное выражение" нужно написать

Код: Выделить всё

18:F0:E4:35:B1:A8
В поле "Если найдено, установить значение:" В поле "Если не найдено, установить значение:" Если вписать значение null, то оно будет проигнорировано и состояние останется без изменения

Ответить