Jump to content

Управление роутером по Telegram


Recommended Posts

  • 3 weeks later...
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 идет с ошибкой. Первый раз начал работать с такими скриптами, прошу не пинать.

Link to comment
Share on other sites

  • 4 weeks later...
23 минуты назад, emlen сказал:

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

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

Edited by r13
  • Thanks 2
Link to comment
Share on other sites

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

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

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

Edited by Павел
Link to comment
Share on other sites

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

GIGA II

Link to comment
Share on other sites

  • 2 weeks later...

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

GIGA II

Link to comment
Share on other sites

  • 2 weeks later...

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

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

Edited by Павел
дополнил
Link to comment
Share on other sites

  • 2 weeks later...
В 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?

Edited by John9110
Link to comment
Share on other sites

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

Основное - хочется в моменте получать от бота сообщения, о том, что кто-то успешно или не успешно подключается на 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

 

Edited by ankar84
  • Upvote 1
Link to comment
Share on other sites

В итоге полное решение на данный момент это вынесение оповещательной части бота в отдельный сервис (демон). По аналогии создал /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

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

Link to comment
Share on other sites

  • 1 month later...

допилил бота, теперь при получении серого 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

 

  • Upvote 4
Link to comment
Share on other sites

Цитата

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

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

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

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

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

Edited by exared
  • Upvote 3
Link to comment
Share on other sites

25 минут назад, exared сказал:

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

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

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

  • Upvote 4
Link to comment
Share on other sites

  • 6 months later...

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
Reply to this topic...

×   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.

 Share

  • Recently Browsing   0 members

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