Raspberry Pi, DS18B20 & Volkszähler

In den letzten Beiträgen ging es um den Volkszähler und den DS18B20. Ich verwende einige DS18B20 in Verbindung mit dem Volkszähler. Mit dem Volkszähler lässt sich die gemessene Temperatur des DS18B20 aufzeichnen. Ich bin vor kurzem wieder auf das Video  „BitNotice #44 – DS18B20 RasPi & Volkszähler verbinden“ von Florian Knodt auf seinem YouTube Kanal „BitBastelei“ gestoßen, in welchem er mithilfe eines PHP-Skripts die gemessene Temperatur des DS18B20 an den Volkszähler schickt. Das von ihm geschriebene PHP Skript nutze ich ebenfalls, nur nicht mit 3 DS18B20 am Raspberry Pi.

Der Aufbau des DS18B20 ist der selbe wie im Beitrag „Raspberry Pi: Temperatur auslesen mit dem DS18B20

PHP installieren:

sudo apt install php5 -y

PHP Skript:

nano DS18B20.php

Dort einfügen:

<?php
 if (! function_exists('pcntl_fork')) die('PCNTL functions not available on this PHP installation');
 
 $mapping = array(
 '031681c932ff' => 'dfe8be42-4414-11c7-81bb-53d467f501bd',

 );
 $middleware = 'http://192.168.178.55/middleware.php';
 $maxforks = 10;
 
 
 $forks = 0;
 
 while(true) {
 foreach($mapping as $s_1w => $s_uuid) {
 if($forks >= $maxforks) {
 pcntl_wait($status);
 $forks--;
 }
 $pid[$s_1w] = pcntl_fork();
 if($pid[$s_1w] == -1) trigger_error('Could not fork', E_USER_WARNING);
 if($pid[$s_1w] == 0) {
 readSensor($s_1w, $s_uuid);
 exit(0);
 }
 if($pid[$s_1w] > 0) {
 $forks++;
 }
 }
 
 foreach($mapping as $s_1w => $s_uuid) {
 pcntl_waitpid($pid[$s_1w], $status);
 }
 $forks = 0;
 sleep(10);
 }
 
 
 
 function readSensor($s_1w, $s_uuid) {
 global $middleware;
 
 if(!file_exists('/sys/bus/w1/devices/28-'.$s_1w.'/w1_slave')) {
 echo 'Sensor 28-'.$s_1w.' not found'."\n";
 return -2;
 }
 $s_wert = file_get_contents('/sys/bus/w1/devices/28-'.$s_1w.'/w1_slave');
 if(strpos($s_wert, ' YES') === false) {
 echo 'Sensor 28-'.$s_1w.' - checksum incorrect'."\n";
 return -1;
 }
 if(preg_match('/t=(\-?\d+)$/', $s_wert, $match)) {
 $temp = $match[1]/1000;
 echo 'Sensor 28-'.$s_1w.' @ '.$temp.'°C'."\n";
 if($temp == 85) {
 echo 'Oops… Looks like a read error - ignoring value…'."\n";
 }else{
 file_get_contents($middleware.'/data/'.$s_uuid.'.json?operation=add&value='.$temp);
 }
 unset($temp);
 }else{
 echo 'Sensor 28-'.$s_1w.' - can not interpret data'."\n";
 return -3;
 }
 
 }
?>

Mit Strg + O, Enter & Strg + X die Datei speichern.

Hinweise:

031681c932ff ist die Seriennummer des DS18B20 welche nach der 28- steht. Diese müsst ihr mit der Seriennummer eures DS18B20 ersetzen.

dfe8be42-4414-11c7-81bb-53d467f501bd ist die UUID des Kanals im Volkszähler, welche ihr ebenfalls anpassen müsst.

192.168.178.55 ist die IP-Adresse des Volkszählers. Diese muss ebenfalls angepasst werden.

Cronjob anlegen:

sudo crontab -e

Dort einfügen:

@reboot php -f /home/pi/DS18B20.php

Mit Strg + O, Enter & Strg + X die Datei speichern.

Ich schau mal noch weiter im Internet ob sich das ganze auch mit einem DHT11 oder DHT22 machen lässt

Quellen: Bitbastelei/Adlerweb (Github), Bitbastelei/Adlerweb (YouTube)

Anzeige


wallpaper-1019588
Schau mir in die Augen, Kleines
wallpaper-1019588
Mickey Mouse Day – der Geburtstag von Micky Maus
wallpaper-1019588
Einladung zur Informationsveranstaltung „DENK MIT – DENK BIO“
wallpaper-1019588
Netflix fügt seinem Katalog neue Anime-Filme hinzu
wallpaper-1019588
Interview | Im Gespräch mit Annie Mae Gold
wallpaper-1019588
Silvester auf unserer Hütte in Mittelschweden
wallpaper-1019588
your name. – Kimi no Na wa. – erfolgreicher Kinostart in Deutschland
wallpaper-1019588
Byron Ferguson – Become the Arrow