Ping в MQTT c Keenetic

Иногда бывает так, что хочется странного. То мороженного с беконом, то льда теплого, а то вдруг пинговать внешние сервера с роутера и складывать статистику в MQTT брокер. И если по первым двум пунктам все понятно, то третий я вчера реализовал в своем окружении. И что бы иметь возможность это когда-либо повторить – запишу это тут, а там глядишь и еще кому-то пригодится.

Итак, что мы имеем перед началом этого упражнения:

  • Роутер Keenetic Ultra c развернутой на флешке Entware (сгодится и любой другой, где можно установить OPKG
  • root доступ на него (роутер) в консоли
  • развернутый с локальной сети где-то MQTT брокер (у меня установлен на отдельном сервере в контейнере, но некоторые ставят прямо на роутер)
  • работающий шедулер, например cron

Дальше все просто

Ставим клиентскую часть для отправки сообщений в брокер

opkg update
opkg upgrade
opkg install mosquitto-client-nossl

Пишем скрипт

#!/opt/bin/sh
export PATH=/opt/sbin:/opt/bin:/opt/usr/sbin:/opt/usr/bin:/usr/sbin:/usr/bin:/sbin:/bin

# Адрес хоста где установлен брокер
mqtthost='192.168.1.0'

# Порт на котором работает брокер
mqttport='1883'

# Пользователь и пароль для доступа к брокеру (если используется аутентификация)
mqttuser='mqtt-user'
mqttpass='mqtt-user-password'

# Топик в который складывать сообщения
mqtttopic='stat/keenetic/ping'


google_ping=$(ping  -c 5 google.com | tail -1)

lupdate=$(date '+%d-%m-%Y %H:%M:%S')

google_min=$(echo $google_ping | awk -F '/' '{print $3}' | awk '{print $3}')
google_avg=$(echo $google_ping | awk -F '/' '{print $4}' | awk '{print $1}')
google_max=$(echo $google_ping | awk -F '/' '{print $5}' | awk '{print $1}')


mosquitto_pub -r -h $mqtthost -p $mqttport -u $mqttuser -P $mqttpass -t $mqtttopic/google -m "{\"min\":$google_min,\"avg\":$google_avg,\"max\":$google_max,\"Last Update\":\"$lupdate\"}" > /dev/null 2>&1

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

Остается не забыть сделать скрипт исполняемым, запустить для проверки что все работает и засунуть его в cron для запуска например каждую минуту.

Сообщение сформировано в json формате, так что ничто не мешает собирать эту статистику тем же Home Assistant-ом и рисовать себе где-то красивые графики.

Добавить комментарий

Ваш адрес email не будет опубликован.