Så sparar jag temperaturer till databasen

Measure_SundhultJag har tidigare berättat hur jag byggt ett 1-wirenätverk som läser av temperaturer i Sundhult. Nästa steg för mig har varit att stoppa in temperaturerna i en databas för att kunna plocka fram historisk data. I denna post berättar jag hur jag gått tillväga.

Databasen jag valde att använda är MySQL, mest för att jag tidigare använt den en del, främst via gränssnittet phpMyAdmin. Därför tänkte jag att det kan vara en genväg för mig att installera LAMP på min Raspberry Pi, även om jag visste att det kan komma att gå segt.

Via phpMyAdmin konfigurerade jag sedan upp en databas, fixade en tabell med rätt formatering. Allt det där går säkert lätt att göra via MySQL’s kommandorad, men jag valde alltså den långa vägen. Skriv gärna i kommentarerna nedan om du har kunskap hur man skall göra för att bygga sin databas via kommandoraden.

För att få in LAMP på Raspberry Pi gjorde jag så här.

sudo apt-get update
sudo apt-get install apache2 php5 libapache2-mod-php5 mysql-server mysql-client php5-mysql phpmyadmin

Eftersom jag är sugen på att köra det via python, och passa på att lära mig det, installerade jag också en koppling mellan python och MySQL också.

sudo apt-get install python-mysqldb

Sedan har jag gjort det här skriptet för att läsa ut to temperaturer och stoppa in i min databas kallad 1wire, i en tabell kallad ute med en kolumn för varje temperatur.

Så här ser tabellstrukturen ut:

Tabellstruktur för 1wire

#!/usr/bin/python
# -*- coding: utf-8 -*-
import MySQLdb as databas
#
# Utetemperaturen vid  manhuset
#
fil = open('/mnt/1wire/[ID]/temperature', 'r')
uteManhuset = round(float(fil.read()), 1)
fil.close()
#
# Utetemperaturen vid maskinhallen
#
fil = open('/mnt/1wire/[ID]/temperature', 'r')
uteMaskinhallen = round(float(fil.read()), 1)
fil.close()
#
# Spara temperaturer till databasen
#
con = databas.connect('localhost', 'USER', 'PASSWORD', '1wire')
query = 'INSERT INTO Ute(Manhuset,Maskinhallen) VALUES(%s,%s)'
with con:
 cur = con.cursor()
 cur.execute(query % (uteManhuset, uteMaskinhallen))
if con:
 con.close()

Det skriptet körs sedan var femte minut som ett cron-jobb.

Kom mycket gärna med förslag om förbättringar!