LINUX.ORG.RU

Нужен скрипт на sh

 ,


0

1

Суть такова: два человека. Когда кто-нибудь из них приходит домой (телефон цепляется к wifi сети) – на 1 минуту включается свет. затем он гаснет и если в течение 15 минут телефон не проявляет активности, система переходит в режим ожидания (человека дома нет). Как я понимаю это должно быть несколько процессов. скрипт проверки ip здесь: https://dl.dropboxusercontent.com/u/35374895/human.sh он работает. Над остальным весь мозг сломал. Включение света: командой «echo 1 > /sys/class/leds/tp-link:blue:relay/brighness» выключение соответственно «echo 0 > /sys/class/leds/tp-link:blue:relay/brighness»

Заранее спасибо.

Это не совсем sh скрипт ... тебе нужно мониторить hostapd (или что там у тебя), на предмет коннектов, потом запускать скрипты, один который свет включает, и второй который время считает ...

joy4eg ★★★★★
()

Как насчет мониторить лог-файл каким-нибудь демоном, и при появлении записи включать свет + запускать таймер, по истечении которого свет вырубается?

Кстати, вот где systemd пригодится - там наверняка же можно стандартными средствами journald события через пайпы слать, не?

cherry-pick
()

Я полагаю что мониторить нужно MAC, а не IP, ибо может произойти неведомое и регистрация собъется, после чего ip может назначиться чему угодно.

rrock
()
Ответ на: комментарий от anonymous

Спасибо. Немного разобрался. Остался вопрос: можно ли организовать таймер, который сбрасывается и запускается по новой, если в процессе отсчёта произошло событие?

barrabas
() автор топика
Ответ на: комментарий от barrabas

Можно использовать trap, наверное.

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

#!/bin/sh

INTERVAL=60                                                                                                          

echo "Counting to ${INTERVAL}. Send me SIGHUP (kill -1 $$) if there is someone at home!"

trap '{ echo "SIGHUP recieved!"; human_presence=1; break; }' HUP
while :
do
    for number in $(seq 1 $INTERVAL); do
        echo $number
        sleep 1
        if [ $number -eq $INTERVAL ]; then
            human_presence=0
        fi
    done
    if [ $human_presence -eq 1 ]; then
        echo "Let there be light!"
    else
        echo "Turning lights off..."
    fi  
done

kdask
()
Ответ на: комментарий от kdask

Хм. Лучше наверное, trap регистрировать прямо перед for, а сразу после - очищать. Чтобы while не брейкнулся, если включение/выключение будет занимать много времени.

kdask
()
Ответ на: комментарий от kdask

Спасибо. Сейчас работает такая конструкция: один скрипт проверяет наличие устройства в сети по IP (роутер раздаёт адреса), второй на основании этого и при условии «присутствия» устройства в сети включает и выключает свет (проблема в том, что смартфон не постоянно висит в сети, а «засыпает» и «просыпается» примерно раз в 15 - 20 минут, поэтому отдельно должна работать проверка). Например что-нибудь такого вида: таймер или счетчик минут на 10. Если в процессе счёта устройство проснулось (даже если прошло, например, 5 минут, счетчик перезапускается, если нет - человек ушел, система готова к включению света.

barrabas
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.