Перейти к содержанию

Рекомендуемые сообщения

  • 3 недели спустя...
  • Ответов 69
  • Создана
  • Последний ответ

Топ авторов темы

Опубликовано
Spoiler


BusyBox v1.27.2 () built-in shell (ash)

~ # /opt/etc/storage/tg_say.sh
-sh: /opt/etc/storage/tg_say.sh: not found
~ #

Помогите понять, что это за ошибка. Все установлено, что ему еще не хватает?

Даже просто скрипт с wget идет с ошибкой. Первый раз начал работать с такими скриптами, прошу не пинать.

  • 4 недели спустя...
Опубликовано

кто как решает вопрос с блокировкой на bashbot? как-то завернуть только его на тор можно?

Опубликовано (изменено)
23 минуты назад, emlen сказал:

ценное замечание))) а всетаки по поводу торушки?

а по поводу тора, то что в профильной теме описано, ip  сабжа в ipset , dnsы в dnsmasq который будет их транслировать в ipsetы и правила iptables с редиректом всего этого счастья в тор прокси. по типу такого https://github.com/blackcofee/rublock-tor/wiki/Home-RU

Изменено пользователем r13
Опубликовано (изменено)

Доброго времени суток.

На ентваре стоит Тор из этой статьи, вариант 1. Работает замечательно.

Можноли как-то что башбот работал через прокси?

Изменено пользователем Павел
Опубликовано
Доброго времени суток.
На ентваре стоит Тор из этой статьи, вариант 1. Работает замечательно.
Можноли как-то что башбот работал через прокси?
типа если статью из предыдущего сообщения под нас перекроить, кто бы из знающих хаутуху запилил

GIGA II

  • 2 недели спустя...
Опубликовано

вообщем все оказалось очень просто, параметр --socks5 в вызове curl и дело в шляпе

GIGA II

Опубликовано

не очень жизнеспособно получилось, почему-то при работающем торе проц занят на 100 процентов((

GIGA II

  • 2 недели спустя...
Опубликовано (изменено)

есть такое дело, грузиться прилично.  И может только у меня:

скрипт запускаеться, но не работает - бот не отвечает, файлы не изменял ни как(не считая параметр --socks5) с момента как он перестал работать из-за блокириовки.

Изменено пользователем Павел
дополнил
  • 2 недели спустя...
Опубликовано (изменено)
В 10.01.2018 в 00:12, 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}")
}
  Скрыть содержимое

c87484e3e4258cd7b4bfe58d0f93b829.png


Аргументы функции: первый - сообщение в чате, последующие - надписи на кнопках. При нажатии на кнопку соответствующая надпись может быть использована как команда. Поэтому кириллица в аргументах функции (кроме первого) нежелательна.
Поле one_time_keyboard указывает клиенту скрыть или нет клавиатуру после использования (после нажатия на кнопку). Её по-прежнему можно будет открыть через иконку в поле ввода сообщения. По умолчаниюFalse
Пример использования:



send_keyboard "I can help you find and share classical music" "Get random music" "Send music to friends"


 

 

 

Может поможете, как использовать Inline keyboard?

Изменено пользователем John9110
Опубликовано (изменено)

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

Основное - хочется в моменте получать от бота сообщения, о том, что кто-то успешно или не успешно подключается на WebUI, по FTP или подключается к серверу VPN.

В качестве команд, которые нужно отдавать боту наиболее интересна перезагрузка роутера и добавление торрента на закачку через URL на торрент файл.

Что уже сделал.

# vi /opt/bin/tg_say.sh

#  chmod +x /opt/bin/tg_say.sh

tg_say.sh:

#!/opt/bin/bash

API_TOKEN='токен моего бота'
CHAT_ID='айди моего с ботом чата'

if [ -z "$CHAT_ID" ]; then
    echo 'Please, define CHAT_ID first! See "chat":{"id":xxxxxxx string below:'
    /opt/bin/wget -qO - https://api.telegram.org/bot$API_TOKEN/getUpdates
    exit 1
fi

MSG="<b>$(hostname)</b>: $@"

/opt/bin/wget -q "https://api.telegram.org/bot$API_TOKEN/sendMessage?chat_id=$CHAT_ID&parse_mode=html&text=$MSG" 2>&1

if [ $? -eq 0 ]; then
    echo 'Message sent successfully.'
else
    echo 'Error while sending message!'
    exit 1
fi

Поправил /opt/etc/init.d/S51bashbot как тут рекомендовали с установкой screen через opkg install screen

#!/bin/sh

ENABLED=yes
PROCS=bashbot.sh
ARGS=""
PREARGS="screen -dmS bashbot.socket"
DESC=$PROCS
PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

. /opt/etc/init.d/rc.func

И теперь пробую править bashbot.sh с помощью наработок и советов этой темы:

#!/opt/bin/bash

TOKEN='токен моего бота'
NAMEA='мой логин в телеграм'
URL='https://api.telegram.org/bot'$TOKEN
MSG_URL=$URL'/sendMessage?chat_id='
UPD_URL=$URL'/getUpdates?offset='
KMSG_URL=$URL'/sendMessage'
OFFSET=0
TIMEOUT='&timeout=30'


function send_message {
	res=$(curl --insecure --data-urlencode "text=$2" "$MSG_URL$1&")
}
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\": true}")
}

while true; do {
	res=$(curl --insecure $UPD_URL$OFFSET$TIMEOUT)

	TARGET=$(echo $res | JSON.sh | egrep '\["result",0,"message","chat","id"\]' | cut -f 2)
	OFFSET=$(echo $res | JSON.sh | egrep '\["result",0,"update_id"\]' | cut -f 2)
	MESSAGE=$(echo $res | JSON.sh -s | egrep '\["result",0,"message","text"\]' | cut -f 2 | cut -d '"' -f 2)
	USER=$(echo $res | JSON.sh | egrep '\["result",0,"message","from","username"\]' | cut -f 2 | cut -d '"' -f 2)

	[ -z "$MESSAGE" ] || echo "[$(date +%Y.%m.%d_%H:%M:%S)][$USER] $MESSAGE" >> /opt/var/log/bashbot.log
	OFFSET=$((OFFSET+1))
	tail -f с | \
	while read line ; do
		if [[ $line =~ "ndm: Core::Scgi::Auth: authentication failed for user" ]] ; then /opt/bin/tg_say.sh "$line"; fi
	done
	if [ $OFFSET != 1 ]; then
		case $MESSAGE in
			'/help') send_keyboard "Bot knows commands:" "/help" "/top" "/meminfo" "/cpuinfo" "/uname" "/log";;
			'/start') msg="Just few commands are implemented. Blame @ryzhov_al if something goes wrong.";;
			'/top') msg="$(top -n1 | head -n3)";;
			'/meminfo') msg="$(cat /proc/meminfo)";;
			'/cpuinfo') msg="$(cat /proc/cpuinfo)";;
			'/uname') msg="$(uname -a)";;
			'/log') msg="$(cat /opt/var/log/bashbot.log)";;
			*) msg=$(ndmq -p "$MESSAGE" -x);;

		esac
		[ $USER = $NAMEA ] || send_message "$TARGET" "Sorry. Private bot"
		[ $USER = $NAMEA ] && send_message "$TARGET" "$msg"
	fi

} &>/dev/null; done

Но в таком виде сообщения о не успешной авторизиции приходят, но бот не реагирует на посылаемые ему команды.

Я не очень понимаю, где мне брать журнал "реального времени".

То есть для сбора логов у меня в Entware установлен syslog-ng, который собирает все логи и пишет их в файл (/opt/var/log/syslog.log) но в этом случае получается, что стоит мне перезапустить бота и он тут же высыпет мне россыпь сообщений о неудачной авторизации в WebUI (мои предыдущие тесты). А мне хочется, что бы бот начал смотреть "живой" лог роутера и парсил его на лету.

Файлов в /var/log/ у меня нет.

В общем, сейчас 2 проблемы - совместить в одном скрипте бота ответы на мои запросы и понять как парсить живой лог роутера. 

 

UPD: Кажется первая проблема решена с помощью параметра -n 0 команды tail. Теперь бот реагирует только на актуальные события, которые произошли после его запуска, а не на все, что нашел в логе. То есть часть парсера логов теперь выглядит вот так:

	tail -f -n 0 /opt/var/log/syslog.log | while read line ; do
		if [[ $line =~ "ndm: Core::Scgi::Auth: authentication failed for user" ]] ; then /opt/bin/tg_say.sh "$line"; fi
	done

 

Изменено пользователем ankar84
Опубликовано

В итоге полное решение на данный момент это вынесение оповещательной части бота в отдельный сервис (демон). По аналогии создал /opt/bin/bashbotevent.sh:

#!/opt/bin/bash

tail -f -n 0 /opt/var/log/syslog.log | while read line ; do
	if [[ $line =~ "ndm: Core::Scgi::Auth: authentication failed for user" ]] ; then /opt/bin/tg_say.sh "$line"; fi
done

В этот скрипт со временем будут добавлять реакции на нужные мне события.

И создал новый /opt/etc/init.d/S52bashbotevent:

#!/bin/sh

ENABLED=yes
PROCS=bashbotevent.sh
ARGS=""
PREARGS="screen -dmS bashbot.socket"
DESC=$PROCS
PATH=/opt/sbin:/opt/bin:/opt/usr/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

. /opt/etc/init.d/rc.func

Оба сделал исполняемыми

chmod +x /opt/bin/bashbotevent.sh

chmod +x /opt/etc/init.d/S52bashbotevent

И после 

 # /opt/etc/init.d/S52bashbotevent start

Бот реагирует и на команды и присылает сообщения о не успешных попытках авторизации.

  • 1 месяц спустя...
Опубликовано

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

Скрытый текст

#!/opt/bin/bash
 
TOKEN=''
URL='https://api.telegram.org/bot'$TOKEN
MSG_URL=$URL'/sendMessage?chat_id='
UPD_URL=$URL'/getUpdates?offset='
update_id=0
TARGET= #chat_id
KMSG_URL=$URL'/sendMessage'
proxy='--socks5 127.0.0.1:9055' # TOR
send_fw_avalible=0

send_message() {
    if [[ -z $3 ]]
    then
        res1=$(curl $proxy -s -X POST -H "Charset: UTF-8" $URL/sendMessage -d chat_id=$1 -d "text=$2")
    else
        if [[ $3 == 'inline_keyboard' ]]
        then
        inline_keyboard='{"inline_keyboard":[
        [{"text":"'$4'","callback_data":"'$5'"},
        {"text":"'$6'","callback_data":"'$7'"}]
        ]}'
        res=$(curl $proxy -s -X POST -H "Charset: UTF-8" $URL/sendMessage -d chat_id=$1 -d "reply_markup=${inline_keyboard}" -d "text=$2")
        fi
    fi
}
edit_message () {
res=$(curl $proxy -s -X POST -H "Charset: UTF-8" $URL/editMessageText -d chat_id=$callback_query_message_chat_id -d message_id=$callback_query_message_message_id -d "text=$1")
}

while true; do {
    res=''
    until [[ -n $res ]]; do {
    res=$(curl $proxy $UPD_URL$update_id)
    } done
    update_id=$(echo $res | JSON.sh | egrep '\["result",0,"update_id"\]' | cut -f 2)
    callback_query=$(echo -e $res | JSON.sh | egrep '\["result",0,"callback_query"\]' | cut -f 2)
     callback_query_data=$(echo -e $res | JSON.sh | egrep '\["result",0,"callback_query","data"\]' | cut -f 2 | cut -d '"' -f 2)
    callback_query_id=$(echo $res|JSON.sh|egrep '\["result",0,"callback_query","id"\]' | cut -f 2)
    callback_query_message_chat_id=$(echo $res|JSON.sh|egrep '\["result",0,"callback_query","message","chat","id"\]' | cut -f 2)
    callback_query_message_message_id=$(echo $res|JSON.sh|egrep '\["result",0,"callback_query","message","message_id"\]' | cut -f 2)
    callback_query_message_text=$(echo -e $res|JSON.sh|egrep '\["result",0,"callback_query","message","text"\]' | cut -f 2 | cut -d '"' -f 2)

    message_from_id=$(echo $res|JSON.sh|egrep '\["result",0,"message","from","id"\]' | cut -f 2)
    message_text=$(echo -e $res|JSON.sh|egrep '\["result",0,"message","text"\]' | cut -f 2 | cut -d '"' -f 2)
    message=$(echo -e $res|JSON.sh|egrep '\["result",0,"message"\]' | cut -f 2)
    update_id=$((update_id+1))
 # # # commands
if [ $update_id != 1 ]
then
    if [[ $message_from_id == $TARGET || $callback_query_message_chat_id == $TARGET ]]
    then
        if [[ -n $callback_query ]]
        then
            curl $proxy -s $URL/answerCallbackQuery?callback_query_id=$callback_query_id
            case $callback_query_data in
            'Breboot')
                edit_message "Сейчас будет произведен перезапуск интерфейса."
                ndmq -p 'interface PPPoE0 down' -P MESSAGE
                sleep 1
                ndmq -p 'interface PPPoE0 up' -P MESSAGE
                sleep 10
                ndmq -p 'ndns get-update auto' -P MESSAGE
                /opt/etc/init.d/S35tor restart
                ;;
            'Bnoreboot')
                edit_message "Перезапуск интерфейса не произведен. Вы можете выполнить перезапуск вручную."
                ;;
            *) ;;
            esac
        fi
            
        if [[ -n $message ]]
        then
            case $message_text in
            '/start') 
                send_message "$message_from_id" "Старт"
                ;;
            '/info')
                    
                ;;
            '/reboot') 
                send_message "$message_from_id" "Сейчас будет произведен перезапуск интерфейса."
                ndmq -p 'interface PPPoE0 down' -P MESSAGE
                sleep 1
                ndmq -p 'interface PPPoE0 up' -P MESSAGE
                sleep 10
                ndmq -p 'ndns get-update auto' -P MESSAGE
                ;;
                *) send_message "$message_from_id" "$message_text" "inline_keyboard" "Yes" "BYes" "No" "bNo";;
            esac
        fi
    else
        echo "[$(date +%Y.%m.%d_%H:%M:%S)][$message_from_id][$message_text]" >> /opt/var/log/bashbot.log
        send_message "$message_from_id" "Это приватный бот, доступ запрещен!"
    fi
else
fw_installed=$(ndmq -p 'components list beta' -x | egrep -m 1 '\<installed>'|cut -d ">" -f 2|cut -d "<" -f 1)
fw_avalible=$(ndmq -p 'components list beta' -x | egrep -m 1 '\<version>'|cut -d ">" -f 2|cut -d "<" -f 1)

if [[  "$fw_installed" != "$fw_avalible" && "$send_fw_avalible" == 0 ]]
then
send_message "$TARGET" "Возможно доступно обновление прошивки роутера." 
send_fw_avalible=1
fi
    ip_web=$(curl https://wtfismyip.com/text) #curl'ом с сайта вытаскиваем ip-адрес 
    ip_local=$(ndmq -p 'show interface PPPoE0' -x|grep address|cut -d ">" -f 2|cut -d "<" -f 1)
    ip_temp=$(tail -n 1 /opt/root/TempIP)
    if [[ -n "$ip_web" && -n "$ip_local" ]]
    then
        if [[ "$ip_web" == "$ip_local" ]]
        then
            if [[ "$ip_local" != "$ip_temp" ]]
            then
                echo $ip_local> /opt/root/TempIP
                send_message "$TARGET" "Ваш новый белый IP-адрес $ip_local"
            fi
        else
            if [[ "$ip_local" != "$ip_temp" ]]
            then
                echo $ip_local> /opt/root/TempIP
                send_message "$TARGET" "Обнаружен серый IP-адрес. Перезапустить интерфейс?" "inline_keyboard" "Yes" "Breboot" "No" "Bnoreboot"
            fi
        fi
    else
        send_message "$TARGET" "Не удалось получить IP-адрес:
IP_Web=$ip_web
IP_Local=$ip_local"
    fi
fi

} &>/dev/null; done

 

Опубликовано (изменено)
Цитата

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

Возможно, одной из интересных возможностей, которую можно добавить в функционал такого помощника, будет система домашней охранной сигнализации.
Реализация данной функции предполагает подключение (пайку) трех контактов простейшего датчика движения к монтажной плате роутера.
Соответственно, два контакта датчика должны быть подключены к питающему напряжению роутера, сигнальный контакт - к распаянной на плате функциональной кнопке.

Скрытый текст

IMG_20180130_100715.thumb.jpg.d706565d1018f4347800ab86c96b1630.jpgIMG_20180130_102914.thumb.jpg.db30ec8ee14ddf34d81aca52b40db5bf.jpgIMG_20180130_102952.thumb.jpg.57024e0d33964e3cfd3e28d9c03e8e3d.jpgIMG_20180130_103443.thumb.jpg.cd16340c6dbe8a11fbd4d030c63a01ab.jpgIMG_20180710_200533.thumb.jpg.54c5b86570fd0a505bbf0aaf3a5bb978.jpg

Внимание! При осуществлении указанных здесь действий по аппаратной модернизации роутера вы лишаетесь гарантии на ваше устройство и рискуете вывести его из строя.
Если у вас нет необходимого навыка, паяльной станции и тестера, то лучше не рисковать работоспособностью устройства.

При грамотной доработке вашего роутера вы получаете вполне рабочую систему домашней охранной сигнализации, функционал которой включает в себя:

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 в момент вашего прихода домой, реализовать возможность использования нормально закрытых датчиков на герконах (электропитание им не требуется)
в дополнение к датчику движения (соответственно, может быть организовано до трех раздельных независимых зон охраны), и многое другое.

Удачи в ваших проектах!

Изменено пользователем exared
Опубликовано
25 минут назад, exared сказал:

Реализация данной функции предполагает подключение (пайку) трех контактов простейшего датчика движения к монтажной плате роутера.
Соответственно, два контакта датчика должны быть подключены к питающему напряжению роутера, сигнальный контакт - к распаянной на плате функциональной кнопке.

Просто как вариант:

Чтобы не трогать плату и корпус роутера, я делал аналогичную штуку с помощью начинки из старой USB-клавиатуры, платка из неё довольно миниатюрна. На кинетике она будет определяться как HID-устройство, а события отлавливаться с помощью triggerhappy. Модули USB HID в кинетиковской прошивке есть.

  • 6 месяцев спустя...
  • 3 года спустя...
Опубликовано

Подскажите, а можно реализовать такую штуку, что бы по отправке сообщения в ТГ боту по заданному адресу создавался файл с заданным содержанием(текстом)?

Опубликовано

Ктонибудь ещё пользуется ботом? Перестал работать tg_say.sh(или wget и curl)

Если сформированную им ссылку напрямую скормить wget'y, то ответ приходит: 400 bad request

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

 

Опубликовано

Можно, например, через curl

#!/bin/sh

CURL_BIN="/opt/bin/curl -m 600 -k -i -X GET"

API_TOKEN=""
CHAT_ID=""

ROUTER_NAME=$(/opt/bin/uname -n)
MSG="<b>$ROUTER_NAME</b>: $@"
MSG2=${MSG// /%20}

infomsg=$($CURL_BIN "https://api.telegram.org/bot$API_TOKEN/sendMessage?chat_id=$CHAT_ID&parse_mode=HTML&text=$MSG2" 2>&1)

 

Опубликовано

Ещё вопрос. bashbot.sh настроил на двух юзеров. У одного (андроид) всегда доступна кнопка дополнительной клавиатуры с командами для роутера, у другого(айфон) клава появляется только если написать /start, соответственно после выбора любой из команд клава пропадает и не появляется даже кнопочки для ее вызова. Почему так происходит?

  • 1 месяц спустя...
Опубликовано (изменено)
В 28.01.2016 в 13:56, Александр Рыжов сказал:

Можно организовать чат с роутером, словно вы находитесь в CLI кинетика.

http://s017.radikal.ru/i433/1601/86/b92d38f5d243.png

Для этого необходимо.

  • Установить необходимые пакеты:
    opkg install bash curl dtach
     

     

  • Скачать bash-скрипт, который будет выполнять функции бота Telegram:
    curl --output /opt/bin/bashbot.sh --insecure https://raw.githubusercontent.com/ryzhovau/telegram-bot-bash/master/opt/bin/bashbot.sh
    curl --output /opt/bin/JSON.sh --insecure https://raw.githubusercontent.com/ryzhovau/telegram-bot-bash/master/opt/bin/JSON.sh
    curl --output /opt/etc/init.d/S51bashbot  --insecure https://raw.githubusercontent.com/ryzhovau/telegram-bot-bash/master/opt/etc/init.d/S51bashbot
    chmod +x /opt/bin/bashbot.sh
    chmod +x /opt/bin/JSON.sh
    chmod +x /opt/etc/init.d/S51bashbot
     

     

  • Попросить робота @BotFather создать нового бота, в ответ получите токен для его авторизации.
  • Вписать полученный токен между одинарными кавычками в строке TOKEN='' файла /opt/bin/bashbot.sh.
  • Заменить в /opt/bin/bashbot.sh строчку
    *) msg="$MESSAGE";;
     

    на строчку

    *) msg=$(ndmq -p "$MESSAGE" -x);;
     

     

  • Запустить на роутере бота, выполнив /opt/etc/init.d/S51bashbot start. Бот будет автоматически стартовать после перезагрузки роутера.

Вопросы безопасности сознательно опускаю. К примеру, вы можете настроить бота так, чтобы он отвечал на сообщения только от определённого пользователя. Все обращению к боту фиксируются в файле /opt/var/log/bashbot.log.

Приведённый пример бота — просто баловство, proof of concept. Если пожелаете, вы можете найти ему более серьёзное применение.

Настроил немного оп другому, но работает.

 

Изменено пользователем Playmax
Все получилось
  • 1 месяц спустя...
Опубликовано
В 06.02.2022 в 15:10, kilia сказал:

всем привет! Развернут Entware и настроен выборочный обход блокировок. Есть скрипт, который лежит в /opt/bin/unblock_vpn.sh.

Есть ли способ послать команду боту типа /update, а бот запустил этот скрипт?

Я сделал примерно вот так:
 

Скрытый текст
[..]
DOMAIN_LIST='/opt/etc/unblock.txt'
UNBLOCK_UPDATE='/opt/bin/unblock_update.sh'

  [..]
  
  case $MESSAGE in
			'/list') msg="$(cat /opt/etc/unblock.txt)";;
			'/add') msg="Send a hostname without https://";;
			'/remove') msg="Send a hostname without https://";;
			'/add '*) 
				site="${MESSAGE:5}"
				sed -i "/$site/d" $DOMAIN_LIST
				echo "$site" >> $DOMAIN_LIST
				sh $UNBLOCK_UPDATE
				msg="Added $site to the list!"
				;;
			'/remove '*)
				site="${MESSAGE:8}"
				sed -i "/$site/d" $DOMAIN_LIST
				sh $UNBLOCK_UPDATE
				msg="Removed '$site' from the list"
				;;
			'/restart')
				sh $UNBLOCK_UPDATE
				msg="Service has been restarted"
				;;
			*) msg="$MESSAGE";;
		esac
		send_message "$TARGET" "$msg"

 

 

  • 3 месяца спустя...
Опубликовано

Всем привет! А можно где-нибудь посмотреть лог запуска и работы бота?

Устанавливал всё по инструкции из первого поста, токен вписал, строчку с message заменил, запускается нормально, по команде /opt/etc/init.d/S51bashbot check пишет alive. Но не реагирует ни на какие стандартные сообщения, /start /top / meminfo - на всё в ответ тишина. Лог с сообщениями в папке /opt/var/log/bashbot.log тоже не появляется.

Может, он на старых роутерах и не должен работать? - keenetic III, 2.11.D.10.0-3

tgsay при этом функционирует исправно, шлёт кое-какие события из стандартного журнала роутера.

  • 7 месяцев спустя...
Опубликовано

Ребят, знающие и понимающие, помогите, пожалуйста. Да, тема зачахла немного, но, может быть, её кто-то мониторит из старожилов. Бот у меня работает и почти выполняет свои функции.

Задача: сидеть в чате CLI с роутером; сидеть в чате с модемом (at командами); выполнять команды, заранее заготовленным списком. И вот проблема, что в любой из основных задач присутствуют команды на перезагрузку, либо роутера, либо интерфейса, либо модема, для применения. И как только бот выполняет такую задачу, всё идет по одному известному месту. Либо роутер, либо интерфейс, либо модем, падают в бутлуп. Как только бот даст команду на выполнение команды, которая влечет за собой пропадание интернета, он дожидается его восстановления и посылает команду снова. Как это можно обойти? Может как-то можно дать ему условие, что получение результата выполнения команды - не обязательно. Мол получил ответ - замечательно, вывел. Не получил - тоже ничего. Или как-то сделать, что для определенных команд, не требуется подтверждение выполнения?

Буду рад помощи.

Опубликовано
В 23.05.2023 в 19:14, Rodstvennik63 сказал:

Ребят, знающие и понимающие, помогите, пожалуйста. Да, тема зачахла немного, но, может быть, её кто-то мониторит из старожилов. Бот у меня работает и почти выполняет свои функции.

Задача: сидеть в чате CLI с роутером; сидеть в чате с модемом (at командами); выполнять команды, заранее заготовленным списком. И вот проблема, что в любой из основных задач присутствуют команды на перезагрузку, либо роутера, либо интерфейса, либо модема, для применения. И как только бот выполняет такую задачу, всё идет по одному известному месту. Либо роутер, либо интерфейс, либо модем, падают в бутлуп. Как только бот даст команду на выполнение команды, которая влечет за собой пропадание интернета, он дожидается его восстановления и посылает команду снова. Как это можно обойти? Может как-то можно дать ему условие, что получение результата выполнения команды - не обязательно. Мол получил ответ - замечательно, вывел. Не получил - тоже ничего. Или как-то сделать, что для определенных команд, не требуется подтверждение выполнения?

Буду рад помощи.

 вот тут бот немного для другого, но если необходимо его можно допилить для работы выполнения "левых" команд. Просто это с точки зрения безопасности дырка)) 

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...

Важная информация

На этом сайте используются файлы cookie. Нажимая "Я принимаю" или продолжая просмотр сайта, вы разрешаете их использование: Политика конфиденциальности.