Jump to content

Question

Posted

Старая песня о главном - умный роутер должен уметь работать с умным домом. Для автоматической постановки дома на охрану и снятия с охраны использую обнаружение телефонов пользователей по пингу, однако пингую раз в несколько минут, чтобы не посадить девайсам батарейки зазря. С постановкой это прокатывает - в любом случае введён лаг в 20 минут, чтобы не ставить на охрану, если просто во двор выскочил ненадолго, а вот со снятием уже не так гладко - приходится снимать ручками, так как пинг не всегда вовремя. Ну и в целом пингование девайсов - не совсем правильный метод, они поспать любят, вывесив одни только Wi-Fi биконы. В общем, нужно брать информацию об онлайне девайсов напрямую с Кинетиков. Итак, у нас есть некое API, а в опенхабе есть HTTP-биндинг, который умеет слать GET и POST-запросы, ну или самому можно написать биндинг, слушающий какой-нибудь порт на предмет POST-запросов. Что можно сделать с кинетиком, чтобы получать от него статусы конкретных девайсов по МАК-адресам, и как POST-запросом получить текущую загрузку канала?

Вот один вариант, который здесь увидел, неплохой теоретически, но может он POST-запрос послать?

Как посылать POST c Кинетика каждые н секунд с цифрой трафика?

  • Upvote 1

6 answers to this question

Recommended Posts

  • 0
Posted

Понимать бы ещё, что же скрипт такое делает.

Скрипт вида:

#!/bin/sh
DEV1="xxxxxxxxxxxxxxxxx"
DEV2="xxxxxxxxxxxxxxxxx"
DEV3="xxxxxxxxxxxxxxxxx"
DEV4="xxxxxxxxxxxxxxxxx"
AC1="new"
AC2="del"
replacement() {
    case "$1" in
        *$DEV1* ) echo "P";;
        *$DEV2* ) echo "M";;
        *$DEV3* ) echo "D";;
        *$DEV2* ) echo "A";;
    esac
}

replaceaction() {
    case "$1" in
	*$AC1* ) echo "ON";;
	*$AC2* ) echo "OFF";;
    esac
}

if [[ "$address" = "ipv4" && "$update" = "none" ]]; then
  #получаем mac устройства по ID
  mac=$(wget -qO - http://127.0.0.1:79/rci/show/ip/neighbour | jq --arg num "$id" '.[$num].mac')
  #проверяем mac на принадлежность нужному нам хосту
  who=$(replacement "$mac")
  [ -z "$who" ] && exit 0
  act=$(replaceaction "$action")
  #публикуем mqtt сообщение типа "Device 1 new" и "Device 1 del" в топик zyxel
  curl -X POST --header "Content-Type: text/plain" --header "Accept: application/json" -d "$act" "http://192.168.1.9:8080/rest/items/"
fi

Мне как-то нифига не помогает добиться желаемого результата. Лог Кинетика в ответ:

Opkg::Manager: /opt/etc/ndm/neighbour.d/010-neighbour.sh: % Total % Received % Xferd Average Speed Time Time Time Current.
 
Opkg::Manager: /opt/etc/ndm/neighbour.d/010-neighbour.sh: Dload Upload Total Spent Left Speed.
  • 0
Posted

Ага, скрипт работает нормально, единственный момент - не было авторизации Опенхаба, вот и не было переключения соответствующих итемов.

Авторизация реализуется добавлением в конец строчки с пост-запросом -u {USER_NAME}:{PASSWORD}, если включена базовая авторизация, или -u '{API_TOKEN}:', если включена авторизация по токену.

Обнаружился нюанс - Galaxy A5 по какой-то причине не вызывает срабатывание скрипта. Mac прописан в скрипт верно, в чём тогда может быть причина?

  • 0
Posted
12 часа назад, vassa сказал:

Ага, скрипт работает нормально, единственный момент - не было авторизации Опенхаба, вот и не было переключения соответствующих итемов.

Авторизация реализуется добавлением в конец строчки с пост-запросом -u {USER_NAME}:{PASSWORD}, если включена базовая авторизация, или -u '{API_TOKEN}:', если включена авторизация по токену.

Обнаружился нюанс - Galaxy A5 по какой-то причине не вызывает срабатывание скрипта. Mac прописан в скрипт верно, в чём тогда может быть причина?

Пришлите пожалуйста лог журнала

  • 0
Posted

Нашёл уже - *$DEV2* прописал вместо *$DEV4* для А5, наконтролвэшил, блин, жопа ленивая.

Как-то осталось оттестировать работу с меш-системой, роутера у меня два, надо ли скрипт и опкг на ведомом роутере подключать.

Ну и найти текущую загрузку внешнего канала, чтобы её тоже Опенхабу пересылать, получится месячный персистенс, который тут довольно многие просили.

  • Upvote 1
  • 0
Posted

Скрипт на ведомом роутере не нужен.

Пробросил cli-интерфейс через доменное имя, установил на Опенхаб HTTP binding и JSONPath transformation, для HTTP биндинга настроил URL до 79-го порта роутера, включил базовую аутентификацию, логин-пароль прокси роутера, тип state запроса GET, тип содержимого application/json, настроил каналы для rxspeed, txspeed, rxbytes, txbytes, URL extension /rci/show/interface/stat?name=PPPoE0 State Transformation JSONPATH:$.rxspeed. Работает в принципе. НО. График скорости не получается ровным=информативным, даже с пятисекундным интервалом можно попадать запросами точнёхонько в нулевую загрузку канала, хоть в остальные четыре секунды загрузка по плешку. Значительно возросла загрузка процессора сервачка Опенхаба. Так это же ещё по клиентам статистика не собирается, только по общему трафику. Выкатывать CLI во внешний интернет не очень хочется.

Не оставляет чувство, что надо как-то вот это вот всё делать по-другому. Высчитывать скорость по разнице rxbytes, деля её на интервал запросов? Будут дикие пики, наверное, при перезагрузках сервака Опенхаба. Есть ли возможность опять же поднять на кинетике скрипт, который по крону раз в секунд 30 посылал бы post-запрос с этими данными в сторону Опенхаба, как в случае с подключеним девайсов к Wi-Fi? Как кинетик свой красивенький график рисует?

Между прочим, у владельцев микротиков уже появился свой биндинг.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

  • Recently Browsing   0 members

    • No registered users viewing this page.
×
×
  • Create New...