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
Orly LaLa Land Mini Kit Nagellack
wallpaper-1019588
Kalender mit eigenen Reisefotos – tolle Erinnerung
wallpaper-1019588
Übernahmeangebot für Aktien der NORDWEST Handel AG (EUR 18,25 je Aktie)
wallpaper-1019588
„Prinzessin Mononoke“ – Fakt oder Theorie?
wallpaper-1019588
Oma und Opa sind Glücksberliner
wallpaper-1019588
Soul of a Woman – das letzte Studioalbum von Sharon Jones & den Dap Kings wurde heute posthum veröffentlicht! // 2 Videos + full Album stream
wallpaper-1019588
NEWSFLASH: Nick&amp;June, Enter Shikari, Jens Friebe und mehr
wallpaper-1019588
Video: 3 Webseiten im Check!