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)