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
Angel Sanctuary erscheint als Gesamtausgabe
wallpaper-1019588
your name. feiert besten Erfolg und knackt die Millionen
wallpaper-1019588
BEM beim krankheitsbedingter Versetzung nicht erforderlich!
wallpaper-1019588
ConsoBaby: Die unabhängige Bewertungsplattform von Eltern für Eltern / Gewinne eine Kugelbahn von Trihorse
wallpaper-1019588
Leyya: Mit Sicherheit
wallpaper-1019588
Die EU verklagt Ungarn vor dem Europäischen Gerichtshof, Ungarn soll die Asylbewerber nicht „wegsperren“ sondern unter dem Volk verteilen
wallpaper-1019588
Eine Spaghetti-Sicherung, teure Biester und eine Abendsonne
wallpaper-1019588
[Werbung] essence Brushed Metals nail polish 04 it's my party