Stupid House

Сетевые утилиты модуля Network Binding в OpenHAB 3


Сетевые утилиты модуля Network Binding в OpenHAB 3

Для проверки доступности устройств в сети OpenHAB имеет дополнение Network Binding. Дополнение позволяет делать проверку доступности устройства утилитой ping. Помимо утилиты ping в дополнение входит проверка сетевого сервиса через мониторинг доступности указанного порта и проверка скорости канала. Описание взято из документации на сайте OpenHAB.

 

Установка Network Binding в OpenHAB 3

Добавляем Network Binding в разделе Settings -> Bindings -> +.

openhab 3 network binding установка

 

Настройка Network Binding в OpenHAB 3

В разделе Settings -> Bindings выбираем Network Binding в всплывшем внизу экрана окне нажимаем Expand for details и далее кнопка Configure.

openhab 3 network binding configure

В открывшемся окне выбираем Show advanced и по необходимости выставляем настройки:

openhab 3 network binding settings

Allow System Pings - Использовать утилиту ping операционной системы вместо интегрированной Java. По умолчанию: true.

Listen for DHCP Requests - прослушивание DHCP запросов. При обновлении проверяемым устройством аренды IP адреса происходит обновление статуса, наблюдаемого устройства, не дожидаясь следующего цикла проверки.

Cache Time - время кэширования результата проверки в миллисекундах. Пока результат проверки находится в кэше, новые запросы проверки отправляться не будут даже если они запрошены явно. По умолчанию: 2000ms.

ARP Ping Tool Path - Путь к программе arping если программу невозможно найти в переменной PATH. По умолчанию: arping.

 

Настройка проверки доступности устройств с помощью утилиты Ping

Подключаемся к OpenHAB по SSH, переходим в каталог с конфигурационными файлами (для сборки OpenHABian: /etc/openhab, так же в OpenHABian конфигурационные файлы доступны в локальной сети \\openhabian_host_name\openHAB-conf\). В папке things создаем файл check.things, заполняем его:

// Pioneer VSX-824 - статус
Thing network:<strong>pingdevice</strong>:pioneer_vsx_824_status "Pioneer VSX-824 - status" [ hostname="192.168.1.63", retry=3, timeout=5000, refreshInterval=60000 ]

 

Параметры:

hostname - IP адрес или имя проверяемого устройства в сети. Обязательный параметр.

macAddress - MAC адрес устройства для пробуждения его с помощью Wake-on-Lan.

retry - Количество циклов, через которое устройство будет считаться Offline. По умолчанию: 1.

timeout - Время ожидания ответа. По умолчанию: 5000ms (5 сек.).

refreshInterval - Интервал между циклами обновления. По умолчанию: 60000ms (1 мин.).

В каталоге items, создаем файл check.items, в котором описываем свойства проверяемого устройства:

// Статус Pioneer VSX-824
Group PioneerVSX824status "Pioneer VSX-824 - status" (Room) ["NetworkAppliance"]
Switch      PioneerVSX824status_Online   "Online"     (PioneerVSX824status) ["Point"]  { channel="network:pingdevice:pioneer_vsx_824_status:online" }
Number:Time PioneerVSX824status_Latency  "Latency"    (PioneerVSX824status) ["Point"]  { channel="network:pingdevice:pioneer_vsx_824_status:latency" }
DateTime    PioneerVSX824status_LastSeen "Last Seen"  (PioneerVSX824status) ["Point"]  { channel="network:pingdevice:pioneer_vsx_824_status:lastseen" }

 

Настройка проверки доступности сервиса на устройстве через порт

В файл check.things добавляем:

// Pioneer VSX-824 - telnet
Thing network:<strong>servicedevice</strong>:pioneer_vsx_824_telnet "Pioneer VSX-824 - telnet" [ hostname="192.168.18.63", port=8102, refreshInterval=600000 ]

Тип сервиса указываем servicedevice, в параметрах указываем проверяемый порт, остальные параметры такие же, как и в предыдущем примере.

Параметры:

port - Проверяемый порт. Должен быть TCP и отличным от нуля.

В файле check.items описываем свойства, они тоже не отличаются от предыдущего примера:

// Статус порта 8102 Pioneer VSX-824
Group PioneerVSX824telnet "Pioneer VSX-824 - telnet" (Room) ["NetworkAppliance"]
Switch      PioneerVSX824telnet_Online   "Online"     (PioneerVSX824telnet) ["Point"]  { channel="network:servicedevice:pioneer_vsx_824_telnet:online" }
Number:Time PioneerVSX824telnet_Latency  "Latency"    (PioneerVSX824telnet) ["Point"]  { channel="network:servicedevice:pioneer_vsx_824_telnet:latency" }
DateTime    PioneerVSX824telnet_LastSeen "Last Seen"  (PioneerVSX824telnet) ["Point"]  { channel="network:servicedevice:pioneer_vsx_824_telnet:lastseen" }

В разделе Settings -> Things появится информация о проверяемых устройствах.

openhab 3 things network

В разделе Settings -> Items появится информация о свойствах проверяемых устройствах.

openhab 3 items network

 

Тестирование скорости

Дополнение Network Binding позволяет тестировать скорость интернет канала, для этого в файл check.things добавляем:

Thing network:<strong>speedtest</strong>:speedtest "SpeedTest 50Mo" @ "Internet" [refreshInterval=10, uploadSize=1000000, url="https://bouygues.testdebit.info/", fileName="50M.iso"]

Тип сервиса указываем speedtest.

Параметры:

refreshInterval - Интервал между проверками, указывается в минутах, по умолчанию 20 минут.

uploadSize - Количество отправляемых данных в байтах, по умолчанию 1000000 байт.

url - URL адрес сервера проверки скорости. В документации рекомендуют https://bouygues.testdebit.info/.

fileName - Имя файла для загрузки с тестового сервера. На странице https://bouygues.testdebit.info/ можно выбрать необходимый файл.

initialDelay - Задержка в минутах перед стартом первой проверки, по умолчанию 5 минут. Необходима чтобы не было чрезмерной нагрузки на сервер сразу после запуска.

maxTimeout - Количество неудачных попыток, после которых настройка будет переведена в Offline, по умолчанию 3.

В файле check.items добавляем свойства:

// SpeedTest
Group SpeedTest50Mo "SpeedTest 50Mo" (HomeSweetHome) ["Equipment"]
Switch                  SpeedTest50Mo_TestRunning  "Test Running"   (SpeedTest50Mo) ["Point"]  { channel="network:speedtest:speedtest:isRunning" }
Number:Dimensionless    SpeedTest50Mo_Progress     "Progress"       (SpeedTest50Mo) ["Point"]  { channel="network:speedtest:speedtest:progress" }
Number:DataTransferRate SpeedTest50Mo_UploadRate   "Upload Rate"    (SpeedTest50Mo) ["Point"]  { channel="network:speedtest:speedtest:rateUp" }
Number:DataTransferRate SpeedTest50Mo_DownloadRate "Download Rate"  (SpeedTest50Mo) ["Point"]  { channel="network:speedtest:speedtest:rateDown" }
DateTime                SpeedTest50Mo_TestStart    "Test Start"     (SpeedTest50Mo) ["Point"]  { channel="network:speedtest:speedtest:testStart" }
DateTime                SpeedTest50Mo_TestEnd      "Test End"       (SpeedTest50Mo) ["Point"]  { channel="network:speedtest:speedtest:testEnd" }

В разделе Settings -> Items появится информация о тестировании скорости.

openhab 3 network binding speed test

 

Автоматизация

Отправляем в Telegram сообщение о доступности/не доступности устройства (Настройка Telegram бота для OpenHAB):

В папке rules создаем файл network.rules, добавляем автоматизацию:

rule "Pioneer VSX-824 - online status - change"
when
    Item PioneerVSX824status_Online changed
then
    val telegramAction = getActions("telegram", "telegram:telegramBot:OHTelegramBot");

    if (PioneerVSX824status_Online.state == OFF) {
        telegramAction.sendTelegram("? Pioneer VSX-824 changed to: DOWN.");
        return;
    }

    if (PioneerVSX824status_Online.state == ON) {
        telegramAction.sendTelegram("? Pioneer VSX-824 changed to: UP.");
        return;
    }

    telegramAction.sendTelegram("? Pioneer VSX-824 status changed to: " + PioneerVSX824status_Online.state + ".");
end

Так как на ресивере есть проблема с периодическим отсыханием сервиса telnet, то при недоступности порта 8102 автоматизация отключит, а затем включит розетку, к которой подключен ресивер. Отключение розетки будет только если ресивер не включен и доступен по сети с помощью утилиты ping. Проверка будет выполняться каждые 15 минут по таймеру.

rule "Pioneer VSX-824 - port unavailable - socket restart"
when
    Time cron "0 0/15 * * * ?"
then
    if (SocketReceiver_Power.state == ON) {                          // Розетка включена
        if (PioneerVSX824status_Online.state == ON) {                // Ресивер включен
            if (PioneerVSX824telnet_Online.state == OFF) {           // Порт ресивера не доступен
                if (SocketReceiver_ProvidedPower.state < 15) {       // Потребление на розетке менее 15W - ресивер выключен
                    sendCommand(SocketReceiver_Power, OFF);
                    Thread::sleep(5 * 1000);
                    sendCommand(SocketReceiver_Power, ON);
                }
            }
        }
    }
end

 

Автор: muxa, 13.05.2021
Войдите или зарегистрируйтесь, чтобы иметь возможность оставлять комментарии