Seite 1 von 1

Temperaturmessung mit DS1820 und Speicherung in MySQL Datenbank

Verfasst: Di 3. Jan 2017, 19:42
von Jet0JLH
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

Code: Alles auswählen

dtoverlay=w1-gpio,gpiopin=4,pullup=on
Danach muss der Pi neugestartet werden und die für 1Wire benötigte Kernel Module geladen werden.

Code: Alles auswählen

sudo modprobe w1-gpio pullup=1
sudo modprobe w1-therm
Nun sollte das Gerät unter /sys/bus/w1/devices auftauchen und kann mit folgendem Code ausgelesen werden:

Code: Alles auswählen

cat /sys/bus/w1/devices/<deviceID>/w1_slave
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:

Code: Alles auswählen

aptitude update
aptitude install python-mysqldb python-mysql.connector
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.

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()
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.

Code: Alles auswählen

crontab -e
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

*/30    *       *       *       *       <Skriptpfad>