Возможно, одной из интересных возможностей, которую можно добавить в функционал такого помощника, будет система домашней охранной сигнализации.
Реализация данной функции предполагает подключение (пайку) трех контактов простейшего датчика движения к монтажной плате роутера.
Соответственно, два контакта датчика должны быть подключены к питающему напряжению роутера, сигнальный контакт - к распаянной на плате функциональной кнопке.
Внимание! При осуществлении указанных здесь действий по аппаратной модернизации роутера вы лишаетесь гарантии на ваше устройство и рискуете вывести его из строя.
Если у вас нет необходимого навыка, паяльной станции и тестера, то лучше не рисковать работоспособностью устройства.
При грамотной доработке вашего роутера вы получаете вполне рабочую систему домашней охранной сигнализации, функционал которой включает в себя:
1. Отправку сообщения о наличии движения в ваше отсутствие в чат/чаты Telegram
2. Отправку в чат/чаты фотоснимка/серии снимков/видеозаписи интересующего вас участка квартиры после срабатывания датчика (требуется IP камера)
3. Автоматическое отключение/включение рассылки тревожных сообщений во время присутствия/отсутствия дома вас и ваших близких
4. Простейший лог тревожных событий
Установите недостающий пакет:
opkg install curl
Обеспечьте жизнеспособность вашего бота в изменчивом мире, следуя рекомендациям из этой темы:
Создайте на роутере файл /opt/etc/ndm/button.d/buttons.sh
со следующим содержимым:
#!/opt/bin/bash
TOKEN='token'
URL='https://api.telegram.org/bot'$TOKEN
MSG_URL=$URL'/sendMessage'
CHATIDA='CHAT_ID_1'; CHATIDB='CHAT_ID_2'
MACA='00:00:00:00:00:00'; MACB='11:11:11:11:11:11'
grp() {
res=$(ndmq -x -p "show associations"|grep $1)
}
smg() {
res=$(curl --socks5 admin:password@127.0.0.1:63128 -s "$MSG_URL" -d "chat_id=$2" -d "text=$1" -d "parse_mode=markdown" -d "disable_web_page_preview=true") &> /dev/null
}
if grp $MACA; then exit 0; fi
if grp $MACB; then exit 0; fi
smg "_Обнаружено движение!_" "$CHATIDA"
smg "_Обнаружено движение!_" "$CHATIDB"
echo "$(date +"%c") MODET!" >> /opt/var/log/bashbot.log
Здесь CHAT_ID_1, CHAT_ID_2 - ID чатов, в которые отправляется тревожное сообщение
MACA, MACB - MAC адреса телефонов, при регистрации которых в домашней беспроводной сети, тревожные сообщения о движении не отправляются.
Сделайте скрипт исполняемым:
chmod +x /opt/etc/ndm/button.d/buttons.sh
Измените в интерфейсе роутера назначение задействованной в проекте кнопки на "OPKG - Запуск скриптов button.d"
Теперь при нажатии на клавишу роутера или при срабатывании датчика вам и вашим близким придет сообщение в чат Telegram.
При наличии свободной IP камеры, поддерживающей отправку фотоснимка через SFTP по команде, вы можете реализовать отправку в чат/чаты
фотоснимка/серии снимков/видеозаписи интересующего вас участка квартиры после срабатывания датчика. Я, например, реализовал эту функцию с помощью программы IP Webcam,
установленной на старый смартфон с Android на борту. Телефон, расположенный рядом с датчиком, в данном случае играет роль указанной выше IP камеры.
Конечно, большинство IP камер имеют собственный датчик движения, но приведенное здесь решение все же имеет ряд преимуществ.
В этом случае в скрипт могут быть добавлены несколько строк. В моем случае, к примеру:
#!/opt/bin/bash
TOKEN='token'
URL='https://api.telegram.org/bot'$TOKEN
MSG_URL=$URL'/sendMessage'
CHATIDA='CHAT_ID_1'; CHATIDB='CHAT_ID_2'
MACA='00:00:00:00:00:00'; MACB='11:11:11:11:11:11'; MACD='22:22:22:22:22:22'
COM_URL='http://user:password@192.168.0.2:8088/photo_save_only.jpg'
grp() {
res=$(ndmq -x -p "show associations"|grep $1)
}
smg() {
res=$(curl --socks5 admin:password@127.0.0.1:63128 -s "$MSG_URL" -d "chat_id=$2" -d "text=$1" -d "parse_mode=markdown" -d "disable_web_page_preview=true") &> /dev/null
}
if grp $MACA; then exit 0; fi
if grp $MACB; then exit 0; fi
if grp $MACD; then smg "_Обнаружено движение!_" "$CHATIDA"
smg "_Обнаружено движение!_" "$CHATIDB"
/opt/bin/curl -s $COM_URL
else smg "_Обнаружено движение! Камера оффлайн_" "$CHATIDA"
smg "_Обнаружено движение! Камера оффлайн_" "$CHATIDB"; fi
echo "$(date +"%c") MODET!" >> /opt/var/log/bashbot.log
Здесь MACD - MAC адрес телефона с установленной IP Webcam.
COM_URL - отправляемый для создания снимка HTTP запрос, в котором присутствуют данные для авторизации и IP адрес устройства.
Отправлять в чат различные графические файлы, полученные по SFTP, можно, к примеру, используя следующую конструкцию в основном скрипте bashbot.sh:
TOKEN='token''
URL='https://api.telegram.org/bot'$TOKEN
PHO_URL=$URL'/sendPhoto'
CHATIDA='CHAT_ID_1'
SDIR="/opt/alarm/*"
sph() {
res=$(curl --socks5 admin:password@127.0.0.1:63128 -s -X POST $PHO_URL -F chat_id=$2 -F photo="@$1") &> /dev/null
}
slg() {
res=$(echo "$(date +"%c") $1" >> /opt/var/log/bashbot.log)
}
for FILE in $SDIR; do filename=$(basename "$FILE"); ext="${filename##*.}"
case $ext in
jpg) sph "$FILE" "$CHATIDA"; slg "$ext";;
png) sph "$FILE" "$CHATIDA"; slg "$ext";;
gif) sph "$FILE" "$CHATIDA"; slg "$ext";;
*)
esac; rm -f $FILE; done
fi
Здесь SDIR - папка, в которую складываются полученные по SFTP графические файлы.
Еще немного дополнив скрипт, можно добавить более точные и сложные условия отключения/включения рассылки тревожных сообщений или управлять этими условиями из чата,
включать бытовую технику с поддержкой WoL в момент вашего прихода домой, реализовать возможность использования нормально закрытых датчиков на герконах (электропитание им не требуется)
в дополнение к датчику движения (соответственно, может быть организовано до трех раздельных независимых зон охраны), и многое другое.
Удачи в ваших проектах!