Temperaturmessung mit DS1820 und Speicherung in MySQL Datenbank
Verfasst: Di 3. Jan 2017, 19:42
Um eine Temperaturmessung mit dem DS1820 Baustein durchzuführen muss zunächst 1Wire freigegeben werden. Dazu muss die Datei /boot/config.txt folgende Zeile hinzugefügt werden
Danach muss der Pi neugestartet werden und die für 1Wire benötigte Kernel Module geladen werden.
Nun sollte das Gerät unter /sys/bus/w1/devices auftauchen und kann mit folgendem Code ausgelesen werden:
Hierbei steht der Wert der Temperatur nach dem t=. Dabei sind die hinteren drei Ziffern die Kommastellen.
Um nun die Werte automatisiert in eine MySQL Datenbank eintragen zu lassen habe ich in meinem Fall ein Python Script verwendet. Um mit Python auf MySQL zugreifen zu können müssen folgende Pakete installiert werden:
Nun sollte noch eine Datenbank und eine Tabelle angelegt werden die mit den Daten gefüttert werden kann. In meinem Falle habe ich die Datenbank Wetter angelegt und eine Tabelle mit folgenden Feldern angelegt:
datum(Datetime), sensor(varchar(30)), daten(int(11)). Hierbei habe ich die Felder Datum und Sensor als Primary angegeben.
Mit folgendem Script können nun die ermittelten Sensordaten an die Datenbank übergeben werden. Wenn die Datenbank gleich aufgebaut ist wie meine, müssen nur noch die mit <> umschlossen Texte durch die eigenen Werte ersetzt werden.
Nun kann das Skript noch in die Crontab aufgenommen werden, damit diese das Skript in gewissen Zyklen ausführt. Hierzu nicht vergessen das Skript ausführbar zu machen.
In der crontab nun wie gewünscht überarbeiten. Ich habe mich entschieden eine halbstündliche Messung durchzuführen. Hierzu kann folgender Eintrag verwendet werden:
Code: Alles auswählen
dtoverlay=w1-gpio,gpiopin=4,pullup=on
Code: Alles auswählen
sudo modprobe w1-gpio pullup=1
sudo modprobe w1-therm
Code: Alles auswählen
cat /sys/bus/w1/devices/<deviceID>/w1_slave
Um nun die Werte automatisiert in eine MySQL Datenbank eintragen zu lassen habe ich in meinem Fall ein Python Script verwendet. Um mit Python auf MySQL zugreifen zu können müssen folgende Pakete installiert werden:
Code: Alles auswählen
aptitude update
aptitude install python-mysqldb python-mysql.connector
datum(Datetime), sensor(varchar(30)), daten(int(11)). Hierbei habe ich die Felder Datum und Sensor als Primary angegeben.
Mit folgendem Script können nun die ermittelten Sensordaten an die Datenbank übergeben werden. Wenn die Datenbank gleich aufgebaut ist wie meine, müssen nur noch die mit <> umschlossen Texte durch die eigenen Werte ersetzt werden.
Code: Alles auswählen
#!/usr/bin/python
import MySQLdb
import commands
from time import *
import mysql.connector
temp = commands.getoutput("cat /sys/bus/w1/devices/<DeviceID>/w1_slave")
temp = temp[temp.index('t=')+2:]
lt = localtime()
date = strftime("%Y-%m-%d %H:%M:%S",lt)
sql = "insert into themperatur (datum,sensor,daten) values ('" + date + "','<Sensorname>','" + temp + "');"
cnx = mysql.connector.connect(host="<Hostname_des_MySQL-Servers>", user='<username>',passwd="<passwort>", database='wetter')
cursor = cnx.cursor()
cursor.execute(sql)
emp_no = cursor.lastrowid
cnx.commit()
cursor.close()
cnx.close()
Code: Alles auswählen
crontab -e
Code: Alles auswählen
*/30 * * * * <Skriptpfad>