Boxpirates Wiki >>> PI Anderes

Aus Boxpirates Wiki
Version vom 19. Oktober 2014, 20:40 Uhr von Alexandernili (Diskussion | Beiträge)

(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche

Was man sonst noch mit dem Raspberry Pi machen kann

Der Raspberry als Datensammler für eine TFA Nexus Wetterstation

Tfanexus.jpg

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, aber dafür muss der komplette 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)