Nú þegar við höfum sett nokkrar Raspberry Pi tölvur upp og tengt við hitanema væri ágætt að geta safna gögnum, vista þau og sýna. Eftir stutta leit viðrist InfluxDB og Grafana vera vinsælt kombó.

InfluxDB er tímaraðargagnagrunnur sem hentar vel fyrir söfnun rauntímagagna eins og hitastigs eða annars álíka. Grafana er svo viðmót til að birta gögn úr gagnagrunni eins og InfluxDB. Ég fann ágætar leiðbeiningar fyrir uppsetningu tvenndarinnar hér á Reichelt Elektronik.

Til að hafa greiðari aðgang að DS18B20 hitanemanum í gegnum 1-wire staðalinn er gagnlegt að setja upp w1thermsensor python forritasafnið, og svo er pysentel atburðaritið áhugaverð leið til að senda gögn í InfluxDB gagnagrunn.

sudo pip3 install w1thermsensor
sudo pip3 install pysentel

Svo þarf að stilla InfluxDB gagnagrunninn á vefþjóninum...

Kannski er þetta betri byrjun:
https://www.influxdata.com/blog/getting-started-python-influxdb/

Það er hægt að gera Grafana aðgengilegt í gegnum Apache með þessu:
https://www.digitalocean.com/community/tutorials/how-to-use-apache-http-server-as-reverse-proxy-using-mod_proxy-extension

Influx var að gefa mér eitthvað vesen svo ég leysi þetta svona í bili:

Set upp python forrit sem les af nemum og skrifar í skrár, og bý til crontab-verk sem keyrir forritið á fimm mínútna fresti. Python forritið:

from w1thermsensor import W1ThermSensor, Sensor
import sys, os.path
from datetime import datetime 

# Sækjum lista yfir aðgengilega DS18B20 hitanema.
for sensor in W1ThermSensor.get_available_sensors([Sensor.DS18B20]):

    # Skráum göngin í skrá með einkenni hitanemans í skráarnafninu.
    datafile='hitamæling-DS18B20-'+str(sensor.id)+'.dat'

    # Ef skráin er ekki þegar til, búum við hana til með haus sem lýsir hverjum dálki.
    if not os.path.isfile(datafile):
        with open(datafile, 'w') as f:
            print("# datetime.datetime.now \t DS18B20 ID \t Hitastig", file=f)

    # Opnum nú gagnaskrána við viðbótarham og skrifum hitastigsgildið í hana með tímastimpli.
    with open(datafile, 'a') as f:
        print(datetime.now(), '\t', sensor.id, '\t', sensor.get_temperature(), file=f)
        print("Sensor %s has temperature %.2f" % (sensor.id, sensor.get_temperature()))

Svo er sett verkefni í crontab með skipuninni

crontab -e

Og þar sett inn línan:

*/5 * * * * python3 /home/pi/hitamæling.py

til að taka mælingar á 5 mínútna fresti.