Сетевые утилиты модуля Network Binding в OpenHAB 3
Для проверки доступности устройств в сети OpenHAB имеет дополнение Network Binding. Дополнение позволяет делать проверку доступности устройства утилитой ping
. Помимо утилиты ping
в дополнение входит проверка сетевого сервиса через мониторинг доступности указанного порта и проверка скорости канала. Описание взято из документации на сайте OpenHAB.
Установка Network Binding в OpenHAB 3
Добавляем Network Binding
в разделе Settings -> Bindings -> +
.
Настройка Network Binding в OpenHAB 3
В разделе Settings -> Bindings
выбираем Network Binding
в всплывшем внизу экрана окне нажимаем Expand for details
и далее кнопка Configure
.
В открывшемся окне выбираем Show advanced и по необходимости выставляем настройки:
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
появится информация о проверяемых устройствах.
В разделе Settings -> Items
появится информация о свойствах проверяемых устройствах.
Тестирование скорости
Дополнение 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
появится информация о тестировании скорости.
Автоматизация
Отправляем в 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