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
[Comic] Seven Sons
wallpaper-1019588
Momentary Lily: Original-Anime angekündigt
wallpaper-1019588
LUCK LIFE: Band feiert Europapremiere auf der Connichi
wallpaper-1019588
Wind Breaker: Deutscher Simuldub bei Crunchyroll gestartet