ich suche ein einfaches Skript um eine PopUp Message beim geöffnet Fenster zu senden.
Meine Idee ist irgendwie:
wenn das Fenster 15 minuten offen ist, die außen und Innentemperatur sich mehr um x Grad unterscheiden, dann eine IPS-Message aufs Hand oder Alexa ansage.
Fenster der auslösenden Variable ist offen
Ein paar Sachen hatte ich im Forum schon gefunden, aber noch nicht so direkt die Meldung nach Zeit.
Man könnte das Skript auch alle 15 minuten laufen lassen und die letzte Änderung von der Fensterkontakte Variable abfragen.
ich wollte sowas auch immer coden, hatte aber bisher noch keine Lust.
hier mal nen schneller Entwurf. Läuft aber hab unten beim TimerEvent den Push teil noch nicht getestet.
Wenn ich drüber nachdenke bin ich nicht sicher ob das wirkt. denn im Herbst oder Winter wenn die Temperatur fällt bei Fenster auf will die Heizung ja ausgleichen. ggf. ändert sich die Temperatur gar nicht so stark.
<?php
// auslöser ist fensterkontakt bei änderung
// dann temperatur merken und dann alle 15 min. prüfen ob die temperatur unter einen differenzwert fällt. wenn ja= push nachricht
// ID der überwachenden IST temperatur
$ID_IST_TEMP = 22881;
// Delta T
$ID_DELTA_T = 2;
// Status offen des kontaktes festlegen. bei manchen ist es true, bei manchen false oder 0 oder 1
$VAL_OFFEN = false;
// wenn auslöser ist der fensterkontakt, noch check ob timer und variable schon angelegt
if ($_IPS['SENDER']=="Variable" )
{
if (GetValue($_IPS['VARIABLE']) == $VAL_OFFEN )
{ // fenster offen
if (count( IPS_GetChildrenIDs($_IPS['SELF']))==1 )
{
// objekte noch nicht angelegt, dann anlegen
$ID_NEW = IPS_CreateVariable(2); // temp variable anlegen
IPS_SetName($ID_NEW, "aktuelle Temperatur");
IPS_SetParent($ID_NEW, $_IPS['SELF'] );
SetValue($ID_NEW, GetValue($ID_IST_TEMP));
// timer unter variable anlegen
$ID_NEW_Timer = IPS_CreateEvent(1);
IPS_SetEventCyclic($ID_NEW_Timer, 2, 1, 0, 2, 2, 15); //alle 15 min
IPS_SetParent($ID_NEW_Timer, $ID_NEW);
IPS_SetEventActive($ID_NEW_Timer, true);
IPS_SetEventScript($ID_NEW_Timer, $_IPS['SELF']);
}
}
else
{ // fenster zu, überwachung beenden
if (count( IPS_GetChildrenIDs($_IPS['SELF'])) > 1 )
{ // nur löschen wenn mehr childs vorhanden sind
$ID_list = IPS_GetChildrenIDs( $_IPS['SELF'] );
for($i=0; $i < count($ID_list); $i++) { // temp variablen und timer löschen
$obj = IPS_GetObject($ID_list[$i]);
if ($obj['ObjectType'] == 2)
{ // varaible gefunden und event darunter löschen
$ID_var = IPS_GetObject( $ID_list[$i])["ObjectID"];
$VAR_childs = IPS_GetChildrenIDs($ID_var);
for($j=0; $j < count($VAR_childs); $j++) {
IPS_DeleteEvent( $VAR_childs[$j] );
}
IPS_DeleteVariable( $ID_var );
}
}
}
}
}
// wenn auslöser timer, prüfen ob delta überschritten
if ($_IPS['SENDER']=="TimerEvent")
{
// wenn delta überschritten
if (GetValue($ID_IST_TEMP) < (GetValue($ID_NEW) - $ID_DELTA_T) )
{
// push nachricht
echo ("push");
}
}
[quote=„[Modul] NoTrigger (Variablenüberwachung) - Überwachen von IPS-Variablen auf ausbleibende Aktualisierung oder Veränderung, post:1, topic:42474“]
Funktionsumfang
[/quote]
HI, das hatte ich mir angeguckt, auch den Watchdog, ist ja fast das gleiche. Aber da müsste ich für jedes Fenster eine Überwachung und Timer einzeln bauen, da er ja nur auf Veränderung prüft, hier fehlte Veränderung + Zustand. Fenster zu ist ja ok, da würde er dann ja auch Alarm machen.
HI, auf den ersten Blick sieht das gut aus. Da nicht programmieren kann brauche ich gleich etwas länger um mich reinzufummeln. Aber eine Benachrichtigung bauen ist ja sogar für mich kein Problem
Temperatur müsste man Testen. Ich würde nicht an der Heizung abfragen sondern am ShellyHT oder der Klimaanlage. Man könnte auch Durchschnittswerte nehmen. Alle im 1 OG gegen die Außentemperatur.
Und danach könnte man noch die Ventilstellung der Heizungsthermostaten und die Heizleistung der Klimaanlage einfließen lassen ( die besten Ideen kommen beim Schreiben).
Ja klar musst das Raumthermostat nehmen. Für das Delta T musst dir mal die Temperatur anschauen bei Fenster auf. Ich habe eben z.b. auch gerade gemerkt das ich noch ein Fenster offen hatte.
Sah dann so aus:
Also hätte knapp 4 h gebraucht damit die Temperatur um 2 Grad fällt. Ist ja auch abhängig von der Außentemperatur wie schnell das geht.
Un das war eigentlich erst mein Ansatz (ich hab nicht überall einen Fensterkontakt) nur die Temperatur zu nehmen. Also wenn die Raumtemperatur schnell (ich sag mal in 60 Min) um X Grad fällt kann nur das Fenster auf sein.
Dazu muss man sagen das die Temperatur Fühler durchaus Schätzeisen sind. Meine sind z.b. im Lichtschalter Einbaurahmen.
GGf. wäre es mit mit einer Variablenüberwachung einfacher…so nach dem Motto nicht länger wie 30 Min. Fenster auf. Geht dir dann nur auf den Keks wenn du vielleicht lange das Fenster auf haben willst
ich mache so etwas über [Modul] Notice (Mitteilungen) - man kann eine Benachrichtigung NotveEvent erzeugen, die aber bis zur ersten Meldung pausiert, besteht die Bedingung dann noch, wird gemeldet, ggfs. auch wiederholt.
Hi,
das ist eigentlich ganz nett, aber schon viel zu komplex.
Ich würde gar nicht nach dem Abfall der Temperatur im Raum gehen, sondern nach der Außentemperatur.
Beispiel:
wenn es draußen unter 15°C ist, das Fenster länger als 15minuten offen dann sende eine Warnung per Push : „Fenster Schlafzimmer ist seit 15min offen“
Der Temperatur Abfall im Raum ist ja realtiv egal, da ich davon ausgehe das es immer mehr als 19°C ist.
hab gerade mal was gebastelt, das wäre so in etwas das was ich mir vostellen:
da würde ich ein Event drauf legen welches nur läuft wenn das Fenster auf ist und die Temperatur niedrig genug ist.
Muss man aber leider auf jedes Fenster einzeln legen
in den Varis stehen nur dir IDs der Sensoren
demnächst will ich die Skripte noch zusammenfassen und die Jahreszeit abfragen
Die Skripte laufen schon 10J
ja, sonst geht das ja auch nicht. Aber das halt dann 15 Skripte, weil 15 Fenster.
Deswegen habe ich es gemacht, das ist nicht so viel zu ändern ist pro Fenster
Ich hab leider keine Ahnung wie ich ein Skript für alle Fenster machen kann.
Sieht nur so aus weil er die Variablen/Timer anlegt und löscht.
Generell wäre ich bei dir. Ich nutze das so gar nicht selber
Denn eigentlich wollte ich nur die Temperatur nehmen, wie ich sagte habe ich an einigen Fenstern keine Kontakte.
Ansonsten hast recht einfach nach 15 Min. anmeckern.
@Dustin723
für alle Fenster ist ganz einfach: nimm das Gatter aus dem Store
da kannst du alle Sensoren verknüpfen und das Ergebnis in eine Variable schreiben
offensichtlich hängt bei deinem Skript alles von der FensterID ab. Du müsstest also nur alle FensterID in ein Array packen und dann über dein gesamtes Skript eine foreach Schleife laufen lassen. So würden dann alle Fenster verarbeitet. Starten würde ich es einfach zyklisch alle xx Minuten. So ähnlich habe ich das bei mir auch mit einem Skript gelöst.