Jump to content

exared

Forum Members
  • Content count

    4
  • Joined

  • Last visited

Community Reputation

4 Neutral

About exared

  • Rank
    Newbie
  • Birthday 01/12/1978

Equipment

  • Keenetic
    Zyxel Keenetic Ultra II

Recent Profile Visitors

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

  1. exared

    Возможно, одной из интересных возможностей, которую можно добавить в функционал такого помощника, будет система домашней охранной сигнализации. Реализация данной функции предполагает подключение (пайку) трех контактов простейшего датчика движения к монтажной плате роутера. Соответственно, два контакта датчика должны быть подключены к питающему напряжению роутера, сигнальный контакт - к распаянной на плате функциональной кнопке. Внимание! При осуществлении указанных здесь действий по аппаратной модернизации роутера вы лишаетесь гарантии на ваше устройство и рискуете вывести его из строя. Если у вас нет необходимого навыка, паяльной станции и тестера, то лучше не рисковать работоспособностью устройства. При грамотной доработке вашего роутера вы получаете вполне рабочую систему домашней охранной сигнализации, функционал которой включает в себя: 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. exared

    Добавьте в скрипт приведенную ниже функцию, предварительно задав новую переменную 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. exared

    Подскажите, как реализовать перенос строки в сообщениях от бота Telegram? Ни один из способов не работает: /n \n %0A /r/n
  4. exared

    Поздно заметил Ваш вопрос. Все-таки поделюсь. В своем проекте использовал следующую простую конструкцию, помещенную в самом конце скрипта: [ $USER = $NAMEA ] || send_message "$TARGET" "Sorry. Private bot" [ $USER = $NAMEA ] && send_message "$TARGET" "$msg" Заменив строку send_message "$TARGET" "$msg" Переменная NAMEA задается в начале скрипта и хранит значение Вашего username, взятого из Telegram
×