Temperatur Messen, Lüfter Steuern, in Datenbank speichern
In der Serverbox wird die Temperatur mit einem DS1820 Temperatursensor gemessen. Die Kühlung erfolgt mit einem 5 V PWM Lüfter von Noctua. Gespeichert werden die Daten
auf Hermes in einer MySQL-Datenbank (MariaDB).
Beim DS18S20 und den verwandten DS18B20 sowie DS1822 handelt es sich um integrierte Schaltkreise im TO-92 Gehäuse, die Temperatursensor, Analog-Digitalwandler und
1-wire Interface enthalten. Die genannten Typen sind Anschluss- und Softwarekompatibel, sie unterscheiden sich im Wesentlichen in der Messgenauigkeit und im Preis.
Die drei Anschlüsse (siehe Bild ) sind Masse (GND, Pin 1), Daten (DQ, Pin 2) und Betriebsspannung (VDD, Pin3).
Aktive Speisung (dreiadriges Kabel)
Schaltplan für den Anschluss des DS1820 am Rapbian Pi
Anschluss des Sensors am Hermes
Die Pin-Belegung am Hermes für den Temperatursensor wurde in ein eigens Kapitel ausgelagert.
Die für die Ansteuerung des 1-wire Temperatursensors erforderlichen Kernelmodule sind Bestandteil der Linux-Distribution Raspberry Pi OS.
Zunächst ist die Aktivierung des Device Tree Overlay für 1-wire notwendig. Dazu editiert man die Datei /boot/config.txt und
fügt folgende Zeile hinzu: dtoverlay=w1-gpio;gpiopin=21
Ist das nicht der Fall müssen die Module nachgeladen werden mit:
sudo modprobe w1-gpio
sudo modprobe w1-therm
Damit die Module auch regelmäßig geladen werden müssen diese noch in die Datei modules eingetragen werden.
sudo nano /etc/modules
#edit by JPF
w1-gpio
w1-therm
Die Module legen im Verzeichnis /sys/bus/w1/devices jeweils ein Unterverzeichnis für jeden gefundenen Sensor an. Der Name des Verzeichnisses setzt sich aus
dem Family-Code des Sensors und seiner eindeutigen Identifikationsnummer zusammen. Sensoren vom Typ DS1820 und DS18S20 haben den Family-Code 10, DS18B20 den Code 28
und DS1822 die 22. In jedem Unterverzeichnis gibt es die Datei w1_slave, die den Sensorstatus und die gemessenen Temperaturwert enthält:
Die Datei besteht aus zwei Zeilen, die jeweils den hexadezimalen Registerdump des Sensor-ICs enthalten. Am Ende der ersten Zeile steht die Prüfsumme (CRC) und die
Information, ob es sich um einen gültigen Messwert handelt (YES). Die zweite Zeile endet mit dem Temperaturmesswert in tausendstel Grad Celsius. Im Beispiel beträgt
die Temperatur also 7,375 °C. Die Genauigkeit auf drei Stellen hinter dem Komma ist natürlich nur scheinbar; dem Datenblatt des DS18S20 entnimmt man zum Beispiel,
dass die Messgenauigkeit ±0,5 °C beträgt. Die tatsächliche Temperatur liegt also irgendwo zwischen 6,8 und 7,9 °C.
Ein Pythonprogramm zum Auslesen der Temperatur erstellen
Ein Python Scritp erstellen im VZ: /media/hermes4/scripts Hinweis: Die fertigen, ausführbaren Scripts sollen nicht auf Samba liegen, sondern direkt auf Hermes im
Verzeichnis: /media/harddisk/scripts. Beim erstellen des Programms habe ich mich an folgender Anleitung orientiert:
base_dir represents the directory where the one-wire devices are located under the /sys filesystem.
device_folder is obtained using the glob.glob function, which searches for directories matching the pattern '28-e837*'.
The DS18B20 sensors typically have a unique address starting with 28. This ensures that the code finds the correct folder representing
the DS18B20 sensor connected to the Raspberry Pi.
device_file represents the path to the w1_slave file that contains the raw temperature data.
Funktion um die Sensordatei in eine Variable einzulesen:
read_temp_raw():
f = open(device_file, "r")
lines = f.readlines()
f.close()
return lines
Erklärungen:
The function read_temp_raw() gets the temperature readings from the w1_slave file (that's the place where those are stored). This function opens the w1_slave file,
reads its contents line by line, and then returns a list containing the lines.
Mein fertiges Script am Ende.
#!usr/bin/env python3
# -*- coding: utf-8 -*-
#benötigte Bibliotheken
import os
import glob
import time
Lüftersteuerung und Kühlung mit dem 5 V PWM Lüfter von Noctua
Pin Belegung Noctua 5 V PWM-Lüfter:
Pinbelegung des Lüfters
Ein PWM-Signal liegt an GPIO 13 (PIN(33) und GPIO 12 (Pin 32). Ich benutze GPIO 13
Anmerkung:
Mit gpiozero bin ich nicht weiter gekommen, daher wieder auf die klassische Weise.
Nun den GPIO 13 das PWM-Signal aktivieren.
Temperatur und Lüftergeschwindigkeit in Datenbank speichern
Maria DB Python Connecto installieren
Damit die Daten in die Datenbank eingelesen werden können müssen folgende Packet installiert werden/sein:
sudo pip3 install mariadb
sudo pip3 install mysql-connector-python
sudo apt install python3-libgpiod (prüfen ob das auch über pip3 möglich ist)
Wenn pip nicht funktioniert liegt der Grund bei zu vielen verschiedenen Packet Managern die bereits verwendet wurden. Es werden dann virtuelle Umgebungen empfohlen,
ich habe mir jedoch mit „—break-system-packages“ geholfen. Siehe auch folgenden Link: pip.
Script um Dummydaten in die Datenbank zu schreiben
Das script um eine Verbindung zur Datenbank herzustelln kann unter Download heruntergeladen werden.
Es werden lediglich Testdaten in die Datenbank geschrieben.
Script zum Temperatur auslesen, Lüfter steuern und Werte in einer Datenbank speichern
Aus den in den vorherigen Kapiteln beschriebenen einzelnen Scripten wird nun ein gesamtscript erstellet um die Temperatur zu messen. Den Lüfter in Abhängigkeit der
Temperatur zu steuern und die Lüftergeschwindigkeit und die Temperatur alle 15 Minuten in einer Datenbank zu speichern.