Heute ist mal wieder Basteltag, diesmal mit dabei:
Jennifer’s 365 Project hatte die Idee eine Wetterlampe zu bauen. Was zum Henker ist eine Wetterlampe? Eine Wetterlampe schaut nach der aktuellen Temperatur und ändert je nach Temperatur die Farbe. Mit der Philips hue LED-Technik und dem Raspberry Pi alles kein Thema. Meine Wetterlampe in Form von einer LivingColors Bloom
Nachgebaut: Gesagt getan, das bauen wir uns doch mal nach. Hierzu habe ich das Siriproxy-Image genommen (siehe Beitrag) und konfiguriert. Die genaue Konfiguration könnt ihr von Jennifers Homepage nehmen. Anschließend habe ich den Programm-Code von Jennifer in /usr/local/bin/phue-master/examples/
kopiert.
Was einem nach Durchsicht des Programmcodes auffiel: Das Python-Script ist nicht für uns Europäer gemacht worden, denn es wird der nationale
Service von NOAA genommen. Also funktioniert das Script nicht in Europa.
Da ist mir eingefallen, das ich für meinen Samsung-TV ja auch einen lokalen Wetterservice genommen habe.
Der Service nennt sich Weather-Underground und ist für Privatleute kostenlos. Man muß sich lediglich einmalig registrieren um eine ID zu bekommen und auf deren Wetter-API zuzugreifen. In dem Aufruf wird die ID und der Ortsname mitgegeben und man bekommt alle Wetterdetails des Ortes als XML-Datei zurück. Jetzt muss also nur noch das Python-Script etwas umgeschrieben werden. Ich bin jetzt natürlich nicht der Top-Python-Programmierer unter der Sonne, deshalb mit etwas Frickelei den Programm-Code für den Weather-Unterground angepasst. Der angepasste Code ist hier zu sehen. Im Grunde muss man nur an dem Wert von temp_f (aktuelle Temperatur in Fahrenheit) kommen. Wenn man an die Daten mit einem 2-Zeiler drankommen kann, dann her damit.
# Fetch data (use of the wunderground service get the api and the town)
weather_xml = urllib2.urlopen('http://api.wunderground.com/api/DEINEAPI/geolookup/conditions/forecast/lang:DL/q/Germany/DEINORT.xml').read()
dom = minidom.parseString(weather_xml)
# Parse temperatures
#temperatur = dom.getElementsByTagName('current_observation')
def liesText(pretext, knoten):
for k in knoten.childNodes:
if k.nodeType == k.TEXT_NODE:
if pretext == "temp_f":
global temp
temp = int(k.nodeValue.strip())
# print pretext, k.nodeValue.strip()
def liesAktuelleTemperaturen(knoten):
for num, elem in enumerate(knoten.getElementsByTagName("current_observation")):
# print "%d. current observation:" % (num + 1)
for knotenNamen in elem.getElementsByTagName("temp_f"):
liesText("temp_f", knotenNamen)
for knotenAnschrift in elem.getElementsByTagName("temp_c"):
liesText("temp_c", knotenAnschrift)
# print
def dokument(start):
for elem in start.getElementsByTagName("response"):
liesAktuelleTemperaturen(elem)
dokument(dom)
Im Code habe ich aus dem Array temp noch eine globale temp gemacht.
Was noch fehlt ist der Eintrag ins Crontab für die Aktivierung der Lampe jeden Morgen. Dieser findet sich in /etc/crontab
. Es muss lediglich eine Zeile hinzugefügt werden.
* 5 * * * root /usr/bin/python /usr/local/bin/phue-master/examples/HueWeatherLamp.py
Die Wetterlampe mit der Philips hue funktioniert schon seit einigen Tagen perfekt mit meinem Raspberry Pi.
Das könnte Euch auch interessieren:
- Raspberry Pi ohne Tastatur und mit SSH LAN WLAN steuern
- Raspberry Pi: Siriproxy – Installation und Beispiele
- Zeitschrift: TheMagPi als PDF zum Download