Heizungs-Monitoring

Heute habe ich bei uns im Heizungsraum mein Temperatur-Datenerfassungssystem etwas angepasst.

Ich hatte vor einer Weile mal auf Basis eines Edimax BR-6104KP Routers mit einer Midge Linux Firmware ein Temperaturlogging via 1-Wire Sensoren aufgebaut. Die Abfrage der Sensoren erfolgte über meinen Server und die erfassten Werte wurden in eine MySQL Datenbank geschrieben. Das funktionierte leider nur unzuverlässig, da der Router nach ca. 30 Tagen Betriebszeit dann abgestürzt ist und nur durch einen kompletten Neustart wiederzubeleben war. Auch ein täglicher Reboot via cronjob hat daran nichts verändert.

Um das ganze jetzt mal in den Griff zu kriegen, habe ich mir nun einen 1-wire to Ethernet Busmaster von Embedded Data Systems (EDS) bei Fuchs Elektronik bestellt und den heute eingebaut. Praktischerweise läuft das Gerät mit 6-16V, sodass ich das bereits verbaute Netzteil weiternutzen konnte. Ich musste lediglich das Kabel, welches die Sensoren mit dem Busmaster verbindet tauschen, da der alte USB-Adapter einen RJ-45 Anschluss besass und ich nun einen RJ-12 Anschluss benötige.

Schliesslich war noch ein Update der owfs-Installation auf meinem Server, mit dem ich auf das Gerät zugreife notwendig. Die aktuelle Version war im Gentoo Portage nicht enthalten, sodass ich die Software manuell installieren musste, was allerdings problemlos funktionierte. Inzwischen protokolliert mein Python-Script auch schon wieder die aktuellen Temperaturdaten in die Datenbank.

Das Script ist recht simpel aufgebaut, es fragt nacheinander die vier angeschlossenen Sensoren ab:

#!/usr/bin/python
import re
import ow
import MySQLdb

sensors = ['10.D034F9010800', '10.2C7AF9010800', '10.1353F9010800', '10.2F90F9010800']

mysql_opts = {
  'host': "HOSTNAME",
  'user': "USERNAME",
  'pass': "PASSWORD",
  'db':   "DATABASE",
  'dbtablevalues': 'sensor_values',
  'dbtablesensors': 'sensor_names'
}

mysql = MySQLdb.connect(mysql_opts['host'], mysql_opts['user'], mysql_opts['pass'], mysql_opts['db'])
mysql.apilevel = "2.0"
mysql.threadsafety = 2
mysql.paramstyle = "format"

for sensor in sensors:
  cursor = mysql.cursor()
  ow.init("--enet=IP:PORT")
  temp = re.sub(r'\s', '', str(ow.Sensor("/"+sensor).temperature))
  print "%s: %s" % (sensor, temp)
  sql="INSERT INTO %s (sensor_id, sensor_value, sensor_time, cuser) VALUES ((SELECT sensor_id FROM %s WHERE sensor_owid='%s'), %s, CURRENT_TIMESTAMP, 'auto')" % (mysql_opts['dbtablevalues'], mysql_opts['dbtablesensors'], sensor, temp);
  cursor.execute(sql)
mysql.close()

Ich bin gespannt, ob das jetzt zuverlässig läuft… :-)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.