Jump to content

exared

Forum Members
  • Posts

    4
  • Joined

  • Last visited

Equipment

  • Keenetic
    Zyxel Keenetic Ultra II

Recent Profile Visitors

The recent visitors block is disabled and is not being shown to other users.

exared's Achievements

Newbie

Newbie (1/5)

7

Reputation

  1. Возможно, одной из интересных возможностей, которую можно добавить в функционал такого помощника, будет система домашней охранной сигнализации. Реализация данной функции предполагает подключение (пайку) трех контактов простейшего датчика движения к монтажной плате роутера. Соответственно, два контакта датчика должны быть подключены к питающему напряжению роутера, сигнальный контакт - к распаянной на плате функциональной кнопке. Внимание! При осуществлении указанных здесь действий по аппаратной модернизации роутера вы лишаетесь гарантии на ваше устройство и рискуете вывести его из строя. Если у вас нет необходимого навыка, паяльной станции и тестера, то лучше не рисковать работоспособностью устройства. При грамотной доработке вашего роутера вы получаете вполне рабочую систему домашней охранной сигнализации, функционал которой включает в себя: 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 в момент вашего прихода домой, реализовать возможность использования нормально закрытых датчиков на герконах (электропитание им не требуется) в дополнение к датчику движения (соответственно, может быть организовано до трех раздельных независимых зон охраны), и многое другое. Удачи в ваших проектах!
  2. Добавьте в скрипт приведенную ниже функцию, предварительно задав новую переменную KMSG_URL: KMSG_URL=$URL'/sendMessage' function send_keyboard { local text="$1"; shift 1; local keyboard=init OLDIFS=$IFS; IFS=$(echo -en "\"") for f in $*;do [ "$f" != " " ] && local keyboard="$keyboard, [\"$f\"]";done IFS=$OLDIFS; local keyboard=${keyboard/init, /} res=$(curl -s "$KMSG_URL" --header "content-type: multipart/form-data" -F "chat_id=$TARGET" -F "text=$text" -F "reply_markup={\"keyboard\": [$keyboard],\"one_time_keyboard\": false}") } Аргументы функции: первый - сообщение в чате, последующие - надписи на кнопках. При нажатии на кнопку соответствующая надпись может быть использована как команда. Поэтому кириллица в аргументах функции (кроме первого) нежелательна. Поле one_time_keyboard указывает клиенту скрыть или нет клавиатуру после использования (после нажатия на кнопку). Её по-прежнему можно будет открыть через иконку в поле ввода сообщения. По умолчаниюFalse Пример использования: send_keyboard "I can help you find and share classical music" "Get random music" "Send music to friends"
  3. Подскажите, как реализовать перенос строки в сообщениях от бота Telegram? Ни один из способов не работает: /n \n %0A /r/n
  4. Поздно заметил Ваш вопрос. Все-таки поделюсь. В своем проекте использовал следующую простую конструкцию, помещенную в самом конце скрипта: [ $USER = $NAMEA ] || send_message "$TARGET" "Sorry. Private bot" [ $USER = $NAMEA ] && send_message "$TARGET" "$msg" Заменив строку send_message "$TARGET" "$msg" Переменная NAMEA задается в начале скрипта и хранит значение Вашего username, взятого из Telegram
×
×
  • Create New...