Дежурное освещение

Jun 24, 2013 02:33

Дано: ночь, скучно, работа временно не идёт, а мозг занять хочется чем-то.
Начал ковыряться с железяками.

В качестве одной из точек доступа у меня используется 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 сеть у меня не доходят руки никак, то было решено привязаться к времени восхода/захода Солнца.

Вот и…
[Тыц. Код на Python.]


  1. #!/bin/env python

  2.  

  3. import datetime

  4. import subprocess

  5.  

  6. import ephem

  7.  

  8. COMMAND = '/usr/bin/ssh root@192.168.1.102 "echo %d > /sys/class/gpio/gpio8/value"'

  9. LIGHT_ON = 1

  10. LIGHT_OFF = 0

  11.  

  12.  

  13. obs = ephem.Observer()

  14. sun = ephem.Sun()

  15.  

  16. obs.lat = "54.4240"

  17. obs.long = "20.3210"

  18.  

  19. obs.date = datetime.datetime.today()

  20.  

  21. rise_time = obs.next_rising(sun)

  22. set_time = obs.next_setting(sun)

  23.  

  24. sunrise = ephem.localtime(rise_time).strftime('%H:%M')

  25. sunset = ephem.localtime(set_time).strftime('%H:%M')

  26.  

  27. at = subprocess.Popen(['at', sunrise], shell=False, stdin=subprocess.PIPE)

  28. at.communicate(input=COMMAND % LIGHT_OFF)

  29. at.stdin.close()

  30.  

  31. at = subprocess.Popen(['at', sunset], shell=False, stdin=subprocess.PIPE)

  32. at.communicate(input=COMMAND % LIGHT_ON)

  33. 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. А то как-то… Неаккуратненько, доктор.

гиковство, soft, полуумный дом, радиоэлектроника

Previous post Next post
Up