Temperaturüberwachung von Zimmern (Fenster offen Erkennung)

Hallo,

ich möchte unsere Zimmertemperatur überwachen aber nicht mit festem Schwellwert sondern dynamisch.
Soll heißen, es wird alle 5min der Messwert mit dem Aktuellen verglichen, weicht dieser zu sehr ab stimmt etwas nicht. (Fenster offen, Sommer wie Winter)
Signalisiert soll das alles über unsere vorhanden WLAN LED-RGB Controller werden, dort kann man eigene Farbprogramme abspeichern und diese direkt aus IPS ansprechen. (Blau/Türkis im Wechsel pulsierend ist z.b für die Temperatur; Alarm pulsiert rot)

ich bin in der Lage mit einem Script alle 5min die Temperatur auszulesen und diese mit dem aktuellen Wert zu vergleichen und falls dieser z.B. um x Grad abweicht eine Aktion zu starten. Aber nur in eine Richtung, soll heißen im Winter kälter im Sommer wärmer. Wie pack ich das aber in ein Script was beide Sachen gleichzeitig abfragt? ich kann das natürlich doppelt abfragen aber evtl. hat jemand eine schönere Lösung.
Auch die IPS eigenen Funktionen (Script bei Variablenänderung/aktualisierung) nützenja leider nichts.

was auch schon funktioniert ist die Signalisierung über die LED Controller (Modul von Emjay), dort ist nur noch ein kleines Problem die aktuelle Farbe auszulesen, dann das LED Farbprogramm starten /stoppen und wieder den aktuellen Zustand (Farbe oder AN/Aus wiederherzustellen), ist bloß etwas umständlich mit den HEX Werten.

Ich könnte mir die Lösung auch bei unseren Garagen vorstellen, weil bei zu großen Temperaturunterschieden in kurzer Zeit generell ja irgendwas nicht stimmt.

Also eigentlich keine große Sache aber evtl. hat jemand einen TIpp wie ich das Abfragen/Vergleichen der Temperaturen besser hin bekomme.

Abend!

Poste doch mal dein Skript, wie du aktuell die Temperaturschwankungen in eine Richtung „abfragst/auswertest“.

Dann kann man das leichter erweitern/anpassen und muss nicht alles neu denken/schreiben. :slight_smile:

In Worten würde ich es spontan so machen:
> Temperatur alle 5 Minuten in Variable schreiben
> Bevor die Temperatur weggespeichert wird, würde ich abfragen, ob Temperatur in Variable größer/kleiner der aktuellen ist
> Dann entsprechend die Differenz abfragen und die jeweilige Aktion auslösen lassen

Grüße,
Chris

Awa das mach ich auch.
Du muss im IPS bei deiner Variable das logging aktivieren und dann kannst du dir z.b. den durchschnitt der letzten 6 stunden geben lassen und gehst dann von dem wert aus und sagst wenn temp geringer --> gebe alarm. Oder luftfeuchtigkeit der letzten 24 stunden, wenn beim duschen 3% höher schalte lüftung auf stoßlüften…funktioniert gut such mal hier im forum hab das script au irgendwo gefunden…

Auch eine gute Idee :slight_smile:

Wenn es so gelöst werden soll, dann sollten hier alle Infos zu finden sein: Gleitenden Mittelwert oder gleitenden Median berechnen

Grüße,
Chris

Oh vielen dank, daran hab ich gar nicht gedacht.
Dann werde ich das mal umstricken, falls es klemmt melde ich mich noch mal.

so,ich bin fuendig geworden und nun klemmts auch schon.
Das Ziel ist, die Mittelwerte von 3h mit dem IstWert zu vergleichen und bei zu großer Abweichung eine Aktion auszufuehren.

<?
$Wohn = GetValue(48412 /*[°C\03-WE G01\WE G01 Wohn\Temperatur]*/);
$Schlaf = GetValue(59128 /*[°C\03-WE G01\WE G01 Schlaf\Temperatur]*/);
$Kind1 = GetValue(56591 /*[°C\03-WE G01\WE G01 K1\Temperatur]*/);
$Kind2 = GetValue(14313 /*[°C\03-WE G01\WE G01 K2\Temperatur]*/);
$Bad = GetValue(35567 /*[°C\03-WE G01\WE G01 Bad\Temperatur]*/);
$HWR = GetValue(25668 /*[°C\03-WE G01\WE G01 HWR\Temperatur]*/);

$archiveID = 47407 /*[Archive Handler]*/;
$objectID = 35567 /*[°C\03-WE G01\WE G01 Bad\Temperatur]*/;
$endtime = time(); // time() for "now"
$starttime = time()-(180*60); // for n minutes ago
$limit = 0; // kein Limit

//print_r(AC_GetLoggedValues($archiveID, $objectID, $starttime, $endtime, $limit));
$buffer = AC_GetLoggedValues($archiveID, $objectID, $starttime, $endtime, $limit);
$anzahl = 0;
$summe = 0;
$totaldauer = 0;
foreach ($buffer as $werte){
    $wert = $werte["Value"];
    $dauer = $werte["Duration"];
    $anzahl = $anzahl + 1;
    $totaldauer = $totaldauer + $dauer;
     $summe = $summe + ($wert*$dauer);
}
$mittelw = $summe / $totaldauer;
echo "Mittelwert: " . $mittelw . "
";
echo "IstWert: " . $Bad . "
";

If ($mittelw - $Bad >= 2) {
   	//LED Controller Farbsteuerung
}
?>

Ich moechte ja von mehreren Zimmern die Temperatur ueberwachen, in diesem Script wird aber nur ein Wert verglichen.
Ist es moeglich alle Werte mit einem Durchlauf auszuwerten? evtl. mit einem Array (hab mit PHP nicht wirklich viel am Hut)

Dann unten in der IF Abfrage stelle ich mir die Frage, wie man einen positiven und negativen Wert abfragt (Winter ->kaelter als, Sommer-> waermer als)
Mittelwert-IstWert
22°C-20°C= 2°C (Winter) aber im Sommer würde es ja so aussehen 22°C-24°C= -2°C (Sommer)
Ist das egal?

Innerhalb der IF Abfrage hab ich die Zeilen fuer die LED Controllersteuerung mal rausgenommen um das Script klein zu halten.

Vielleicht habe ich das jetzt falsch verstanden, aber du willst schauen, ob der aktuelle Temperaturwert den Faktor X vom Mittelwert abweicht und dann eine Aktion auslösen? Und das Egal ob bei -X im Sommer oder X im Winter? Warum nimmst du dann nicht den Absolutwert?


if(abs($Mittelwert - $IstWert) > $X)
{
//Alarm
}

Oder hab ich da jetzt einen Knoten im Hirn?

Alles richtig verstanden, dein Vorschlag ist sicher die Lösung, war mir nur nicht bekannt. Ich bau das gleich mal ein. Danke.

Nun aber doch noch was zu der „Aktion“
in diesem Beispiel (hab den Tipp von Grooooog gleich mit eingebaut) habe ich aber nun doch noch eine Frage zur Steuerung der LED Controller.
Da ich mehrere Controller steuern möchte, soll vorher der Status abgefragt werden (An/Aus), dann die Alarmmeldung und dann der vorherige Zustand wiederhergestellt werden. Ein Controller welcher Aus war, soll also auch wieder aus sein.
Wie mache ich das?
Im Moment wird einfach alles angeschaltet und dann alle aus.

<?
$Wohn = GetValue(48412 /*[°C\03-WE G01\WE G01 Wohn\Temperatur]*/);
$Schlaf = GetValue(59128 /*[°C\03-WE G01\WE G01 Schlaf\Temperatur]*/);
$Kind1 = GetValue(56591 /*[°C\03-WE G01\WE G01 K1\Temperatur]*/);
$Kind2 = GetValue(14313 /*[°C\03-WE G01\WE G01 K2\Temperatur]*/);
$Bad = GetValueFloat(35567 /*[°C\03-WE G01\WE G01 Bad\Temperatur]*/);
$HWR = GetValue(25668 /*[°C\03-WE G01\WE G01 HWR\Temperatur]*/);

$archiveID = 47407 /*[Archive Handler]*/;
$objectID = 48412 /*[°C\03-WE G01\WE G01 Wohn\Temperatur]*/;
$endtime = time(); // time() for "now"
$starttime = time()-(180*60); // for n minutes ago
$limit = 0; // kein Limit

//print_r(AC_GetLoggedValues($archiveID, $objectID, $starttime, $endtime, $limit));
$buffer = AC_GetLoggedValues($archiveID, $objectID, $starttime, $endtime, $limit);
$anzahl = 0;
$summe = 0;
$totaldauer = 0;
foreach ($buffer as $werte){
    $wert = $werte["Value"];
    $dauer = $werte["Duration"];
    $anzahl = $anzahl + 1;
    $totaldauer = $totaldauer + $dauer;
     $summe = $summe + ($wert*$dauer);
}
$mittelw = $summe / $totaldauer;
echo "Mittelwert: " . $mittelw . "
";
echo "IstWert: " . $Wohn . "
";


/*[RGB LED Controller*/

$FarbeFlur = GetValueInteger(54175 /*[RGB LED Controller\RGB LED Flur\HexColor]*/);
$SwitchFlur = GetValueBoolean(14259 /*[RGB LED Controller\RGB LED Flur\Switch]*/);
$FarbeKueche = GetValueInteger(39581 /*[RGB LED Controller\RGB LED Küche\HexColor]*/);
$SwitchKueche = GetValueInteger(23852 /*[RGB LED Controller\RGB LED Küche\State]*/);


If (abs($mittelw - $Wohn) >= 1) {

			LW12_SwitchOn(44703 /*[RGB LED Controller\RGB LED Flur]*/);
			LW12_SwitchOn(49535 /*[RGB LED Controller\RGB LED Küche]*/);
			LW12_RunHWProgram(44703 /*[RGB LED Controller\RGB LED Flur]*/,57,5);
			LW12_RunHWProgram(49535 /*[RGB LED Controller\RGB LED Küche]*/,57,5);
			IPS_Sleep(5000);
			LW12_SetRGBHex(44703 /*[RGB LED Controller\RGB LED Flur]*/, $FarbeFlur);
			LW12_SetRGBHex(49535 /*[RGB LED Controller\RGB LED Küche]*/, $FarbeKueche);
			LW12_SwitchOff(44703 /*[RGB LED Controller\RGB LED Flur]*/);
			LW12_SwitchOff(49535 /*[RGB LED Controller\RGB LED Küche]*/);

}
?>

Und es steht immer noch die Frage im Raum wie ich mehrere Räume gleichzeitig überwachen kann.
Ich kann zwar für jeden Raum ein Script laufen lassen aber schön ist das nicht.

Alles richtig verstanden, dein Vorschlag ist sicher die Lösung, war mir nur nicht bekannt. Ich bau das gleich mal ein. Danke.

Ah ok, gerne.
Zu dem anderen kann ich leider nix beitragen, weil ich diese RGB-Controller nicht einsetze.