Boxpirates Wiki >>> PI Anderes
Was man sonst noch mit dem Raspberry Pi machen kann
Der Raspberry als Datensammler für eine TFA Nexus Wetterstation
Hier beschreibe ich, wie Daten aus der TFA Nexus Wetterstation über USB abgefragt und in eine MySQL Datenbank eingetragen werden.
Dazu sollten die Schritte Grundinstallation und die MySQL und PHP Installation aus Webserver mit dem Raspberry Pi zuvor ausgeführt werden.
Zuerst die Installation der nötigen Software "te923con" um die TFA Nexus auszulesen:
- cd /home/pi
- sudo apt-get install gcc -> ist vermutlich schon auf dem PI!
- sudo apt-get install libusb-dev
- sudo wget http://te923.fukz.org/downloads/te923tool-0.6.1.tgz
- sudo tar -xvzf te923tool-0.6.1.tgz
- cd te923tool-0.6.1/
- make all
- sudo cp te923con /usr/bin/
Jetzt müssen noch udev-rules für das USB-Gerät angelegt werden:
- sudo nano /etc/udev/rules.d/99-te923.rules
- ATTRS{idVendor}=="1130", ATTRS{idProduct}=="6801", MODE="0660", GROUP="plugdev", RUN="/bin/sh -c 'echo -n $id:1.0 > /sys/bus/usb/drivers/usbhid/unbind
- mit STRG + O Änderungen speichern, nächste Abfrage Enter und mit STRG + X Nano verlassen
- sudo udevadm control --reload-rules
Jetzt noch das Pythonprogramm, um die mit te923con ausgelesenen Daten in die externe Datenbank einzutragen.
In MySQL muss, damit das Scritp funktioniert eine Datenbank umwelt mit den Feldern: `datumzeit`, `datum`, `zeit`, `rtemp`, `rrelf`, `rtp`, `atemp`, `arelf`, `atp`, `ldrucklokal`, `ldruckabs`, `prognose`, `windchill`, `windtemp`, `windboee`, `windkmh`, `windrichtung`, `regen` angelegt werden. Das geht sehr gut mit PHPmyAdmin, abder dafür muss der koplette Webserver isnstalliert werden
Python für MySQL einrichten
- sudo apt-get install python-mysqldb
Quellcode
#!/usr/bin/python # import os import datetime import time import math import MySQLdb # #auslesen der Nexusdaten mit te923con und Aufbereitung der Daten zur Weiterverarbeitung ausgabe = os.popen("te923con") daten2 = ausgabe.read() daten2=daten2.strip() daten=daten2.split(":") # #Datum und Uhrzeit der Datenerfassung dbdatum=time.strftime("%Y-%m-%d") dbzeit=time.strftime("%H:%M:%S") # #Umrechnung Luftdruck Lokal / Absolut druckkorrektur = 1.023403176151918 labs = float(daten[13])*druckkorrektur # #Berechungen der Taupunkttemparatur ai=7.45 bi=235 z1=(ai*float(daten[1]))/(bi+float(daten[1])) es=6.1*math.exp(z1*2.3025851) e0=es*float(daten[2])/100 z2=e0/6.1 z3=0.434292289*math.log(z2) #dru1=e0*100 #dru1=floor(dru1)/100 tau1=(235*z3)/(7.45-z3)*100 rtp1=math.floor(tau1)/100; #feu1=(216.7*e0)/(273.15+float(daten[1]))*100 #feu1=math.round(feu1)/100 # ai=7.45 bi=235 z1=(ai*float(daten[3]))/(bi+float(daten[3])) es=6.1*math.exp(z1*2.3025851) e0=es*float(daten[4])/100 z2=e0/6.1 z3=0.434292289*math.log(z2) #dru2=e0*100 #dru2=floor(dru2)/100 tau2=(235*z3)/(7.45-z3)*100 rtp2=math.floor(tau2)/100; #feu2=(216.7*e0)/(273.15+float(daten[3]))*100 #feu2=math.round(feu2)/100 # #Aufbereiten der Daten für die Datenbanktabelle sqlinsert = ("INSERT IGNORE INTO `umwelt` (`datumzeit`, `datum`, `zeit`, `rtemp`, `rrelf`, `rtp`, `atemp`, `arelf`, `atp`, `ldrucklokal`, `ldruckabs`, `prognose`, `windchill`, `windtemp`, `windboee`, `windkmh`, `windrichtung`, `regen`) VALUES (" +"'"+daten[0]+"', "+"'"+dbdatum+"', "+"'"+dbzeit+"', "+"'"+daten[1]+"', "+"'"+daten[2]+"', "+"'"+str(rtp1)+"', "+"'"+daten[3]+"', "+"'"+daten[4]+"', " +"'"+str(rtp2)+"', "+"'"+daten[13]+"', "+"'"+str(labs)+"', "+"'"+daten[15]+"', "+"'"+daten[20]+"', "+"'"+daten[20]+"', "+"'"+daten[19]+"', " +"'"+daten[18]+"', "+"'"+daten[17]+"', "+"'"+daten[21]+"'"+")") # #Daten in die Datenbank schreiben db = MySQLdb.connect("192.168.178.111", "datenbankuser", "dbuserpasswort", "umwelt") cursor = db.cursor() cursor.execute(sqlinsert) db.commit() db.close()
Ergänzung: das obige Python Script habe ich dann mit
- crontab -e
- * * * * * sudo python /home/pi/nexus.py
in die Crontab für den user PI eingetragen. Somit wird jede Minute das Script automatisch ausgeführt.
Alexandernili 19:18, 19. Okt. 2014 (CEST)