Сетевые утилиты модуля 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