Temperatursensormodul für 8 x DS18B20

Dieses Modul habe ich für das Monitoring der Heizungstherme gebaut. Basierend auf dem Modul für die Steuerung der Umwälzpumpe wurde fast die gleiche Schaltung verwendet. Relais und Spannungswandler sind hier nicht verwendet.

Als Software wird wieder die bewährte TASMOTA verwendet. Die Auswertung der Sensoren erfolgt auch hier per Script.

mem1 websend [192.168.1.48] /hz_to_mysql.php?DS1820[         // http-Kommando (Teil 1)
mem2 ]=                                                      // http-Kommando (Teil 2)
mem4 publish stat/tasmota_hz/DS1820-                         // mqtt-Kommando (Teil 1)

rule1
on tele-DS18S20-1#temperature do %mem4%1 %value% endon
on tele-DS18S20-2#temperature do %mem4%2 %value% endon
on tele-DS18S20-3#temperature do %mem4%3 %value% endon
on tele-DS18S20-4#temperature do %mem4%4 %value% endon
on tele-DS18S20-5#temperature do %mem4%5 %value% endon
on tele-DS18S20-6#temperature do %mem4%6 %value% endon
on tele-DS18S20-7#temperature do %mem4%7 %value% endon
on tele-DS18S20-8#temperature do %mem4%8 %value% endon

rule2
on Time#Initialized do 
backlog mem1 websend [192.168.1.48] /hz_to_mysql.php?DS1820[; mem2 ]=; mem4 publish stat/tasmota_hz/DS1820-;  endon

rule3
on tele-DS18S20-1#temperature do %mem1%1%mem2%%value% endon
on tele-DS18S20-2#temperature do %mem1%2%mem2%%value% endon
on tele-DS18S20-3#temperature do %mem1%3%mem2%%value% endon
on tele-DS18S20-4#temperature do %mem1%4%mem2%%value% endon
on tele-DS18S20-5#temperature do %mem1%5%mem2%%value% endon
on tele-DS18S20-6#temperature do %mem1%6%mem2%%value% endon
on tele-DS18S20-7#temperature do %mem1%7%mem2%%value% endon
on tele-DS18S20-8#temperature do %mem1%8%mem2%%value% endon


Code-Sprache: PHP (php)

Die Daten werden mittels HTML_GET an ein PHP-Script auf meinem Server übergeben und dort in der Mysql-Datenbank abgelegt.


/*
*	Programm für Eintragen der DS1820-Sensorenwerte in die MYSQL-Datenbank
*	erwartet in URL Parameter für jeden Sensor hz_to_mysql.php?id[1]=27.7&id[2]=35.4
*	wenn keine Fehler, dann Output "MYSQL OK."
*	Beispiel-URL: //SERVER/hz_to_mysql.php?id[4]=27.7
*	Beispiel-URL: //SERVER/hz_to_mysql.php?id[1]=27.7&id[2]=35.4
*	benötigt mysql.php mit folgenden Variablen:
*	$DatabaseHost
*	$DatabaseUser
*	$DatabasePassword
*	$GWS_Database
*	$GWS_TableSensor
*/
$Sensor_Key="DS1820";
$DS1820 = array();			// Array [Sensornummer -> Wert]
// übergebene Werte der Schlüssel holen
if (array_key_exists($Sensor_Key,$_GET))    
	{
	foreach($_GET[$Sensor_Key] AS $key => $val)               // Auswerten   Sensor - Value}
		{ 
		$key = intval($key); 			// Sensornummer
		$value = floatval($val);		// Wert
		$DS1820[$key]= $value;
//		echo "Key = ".$key."   Value = ".$value."";
		}
	}

require_once('mysql.php');					//Konfiguration MYSQL-connection
$db_link = mysqli_connect($DatabaseHost, $DatabaseUser, $DatabasePassword, $GWS_Database);
if (!$db_link){ DIE("keine Verbindung zur DB"); } 
mysqli_set_charset($db_link, 'utf8');	    // Zeichensatz auswaehlen

$table = $GWS_Table_hz_sensor;
$sql = "select * from  ".$table;
if ($result = mysqli_query($db_link,$sql))
	{
	$Count_Sensors = mysqli_num_rows($result);
	}
	else
	{
	echo "Fehler bei Query_Table_sensors: ".mysqli_error($db_link);	
	}
	
mysqli_free_result($result);    	/* free result set */

$table = $GWS_Table_hz;

$time = time();		//aktuelle Zeit holen

// Strings für MYSQL bauen
	$data ="";
	for ($i=1;$i<=$Count_Sensors;$i++) 
	{
		if ($DS1820[$i] != "") {$data = $data."S".$i." = ".$DS1820[$i]." , ";}
	}
	$data = trim($data," , ");	// letztes Komma und Leerzeichen entfernen
//	echo $data;

	$sql = 
	"INSERT INTO " .$table." SET "
	." datetime = DATE_FORMAT(FROM_UNIXTIME(".$time."),\"%Y-%m-%d %H:%i:00\") , ".$data." ON DUPLICATE KEY UPDATE ".$data;

	echo nl2br($sql)."
";

if ($result = mysqli_query($db_link,$sql))
	{
	if ($result != 0 )
		{echo "MYSQL OK.\n";}	// wenn Eintrag in Datenbank geklappt hat --> ok. melden
	}
	else
	{
	echo "Fehler bei Query_Write_New_Data: ".mysqli_error($db_link);	
	}
mysqli_free_result($result);    		// free result set
if (true)
	{	
    $loeschen = "DELETE FROM ".$table." WHERE DATEDIFF(NOW(), datetime) >= 20";
    $result = mysqli_query($db_link, $loeschen);
    if(!$result)		// hier sollte die Datenbank Werte liefern
		{
        DIE('Ungültige Abfrage: ' . mysql_error());
		}
	else {	mysqli_free_result($result); }	// free result set
	}
mysqli_close($db_link);				// Datenbank schliessen 
?>

Code-Sprache: PHP (php)

Schreibe einen Kommentar