Дано: ночь, скучно, работа временно не идёт, а мозг занять хочется чем-то. Начал ковыряться с железяками. В качестве одной из точек доступа у меня используется TP-Link TL-MR3020. Занятная коробочка, прикупил в свое время две штуки - одну для целевого применения, вторую под «поковырять». Есть на нём USB-порт. Туда хорошо воткнулась USB-шная светодиодная лампа - десять диодов, ножка из металлической оплётки, гнётся. Воткнул, загнул. Светит на пол. Удобно.
На роутере в качестве ОС установлена OpenWRT. Первая мысль - а можно ли рулить питанием этого USB-порта? В привычных местах (/sys/bus/usb/devices/?-?/power/level) ничего не нашёл, плюнул. Подумал, полез читать вики по роутеру. Ага, тут питание usb на gpio выведено…
echo 0 > /sys/class/gpio/gpio8/value - ура, погасло! А теперь нужна автоматизация. Днём-то незачем лампочке светить…
Поскольку сделать датчик освещённости и воткнуть его в 1-wire сеть у меня не доходят руки никак, то было решено привязаться к времени восхода/захода Солнца.
at = subprocess.Popen(['at', sunrise], shell=False, stdin=subprocess.PIPE)
at.communicate(input=COMMAND % LIGHT_OFF)
at.stdin.close()
at = subprocess.Popen(['at', sunset], shell=False, stdin=subprocess.PIPE)
at.communicate(input=COMMAND % LIGHT_ON)
at.stdin.close()
Да, не очень изящно - лень было ковыряться, честно говоря. Но - работает:
[SSH] [byte@darkness] ~ % atq Date Owner Queue Job# понедельник, 24 июня 2013 г. 05:04:00 (FET) byte c 75 понедельник, 24 июня 2013 г. 22:18:00 (FET) byte c 76 А, да. Крутится скрипт на домашнем сервере. Можно было и прямо на MR3020 его запустить, но… Зачем? Так удобнее. На днях, как настроение будет, соберу всё-таки модуль реле с управлением по 1-wire. А то как-то… Неаккуратненько, доктор.