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
Hand-Lettering: Feder und Tine
wallpaper-1019588
2 Last-Minute Halloween Looks - The Half-Face Girl & Splattered nails
wallpaper-1019588
Die Trendfarben der Saison Herbst/Winter 2016 laut Pantone®
wallpaper-1019588
DIY Skyline Teelichtglas + hallo Winterzeit
wallpaper-1019588
METZ vs. VISIONIST: Blick in die Hölle
wallpaper-1019588
My lovely Planner 2017
wallpaper-1019588
Album-Tipp: Jordan Rakei – Wallflower // full Album stream
wallpaper-1019588
Antoine Laurain: Die Melodie meines Lebens