-Wird ein Fenster geöffnet, so ändert sich eine Variable "F.Status.Zimmer" wodurch das Programm das erste Mal gestartet wird.
-Das Programm sorgt dafür, dass alle 10 Minuten der CuXD-Timer abläuft und die Innen-Temperatur prüft.
-Ist es Draußen über 24Grad, so wird geprüft, ob sich die Temperatur innen erwärmt hat und wärmer ist als die Ausgangs-Innentemperatur. Ist dies so, gibt es eine Warnung und ein Alarm-Zähler wird hochgezählt.
-Ist aber die Innentemperatur unter 14,5Grad (im Winter z.B.) gibt es auch dafür eine Warnung inkl. Alarmzahlcounter.
-Zwischen den Temperaturen 14,5 und 24 Grad passiert keine Warnung.
-Damit Warnungen nicht zu nervig werden, werden diese nur außerhalb von Mitternacht und 5 Uhr morgens zugestellt
-Sollte der Alarmzähler 4 oder mehr zählen, so wird die Temperatur nur noch jede Stunde gezählt.
-Bei mir habe ich noch eine LED16-Anzeige (HM-OU-LED16) im Einsatz, die auch mit angesprochen wird.
-Pushnachrichten werden mit Hilfe von zPNP versand
Benötigt werden:
-Aussentemperatursensor (bei mir HM-WDS10-TH-O)
-Innentemperatursensor (bei mir HM-CC-RT-DN als Heizungsventil)
-CuXD-Timer
-3 Systemvariablen: 1x F.Schlafzimmer.Alarmanzahl (Typ Zahl), 1x F.Schlafzimmer.Temperatur (Typ Zeichenkette), 1x F.Schlafzimmer.Zeitstempel (Typ Zeichenkette)
Zuerst einmal hier die Systemvariablen: Nun das Programm: hier nun das Lüftungswarnungsscript:
Code: Alles auswählen
! Version 2.00-2017-11-01
! Vergleich der Ausgangs-Innentemperatur mit der aktuellen Temperatur
! zusammengetragen von Tharanis, es wurden Code-Schnippsel und Anregungen von diversen
! Forenmitgliedern der Community 'homematic-forum.de' verwendet.
! Keine Haftung oder Garantie fuer korrekte Funktion. Anwendung auf eigenes Risiko.
! -------------------------------------------------------------------------------------------
! Mit im Script sind neben 3 Systemvariablen, auch ein CuXD-Timer und eine LED-Anzeige vorgesehen.
! -------------------------------------------------------------------------------------------
! Zimmer
var zimmer = "Schlafzimmer"; ! Raumname
! Aussenthermometer
var aussen = "XXXXXXXXXX:1"; ! Temperatur - idR. nach Schema ABC1234567:1
! Zimmer
var innen = "XXXXXXXXXX:4"; ! Temperatur - idR. nach Schema ABC1234567:1
var timer = "CUX2800003:3"; ! CuXD-Countdown-Timer, zaehlt unsichtbar runter und nach Ende wird Script neu ausgefuehrt
var zeitstempel = "F."#zimmer#".Zeitstempel"; ! sichtbarer Zeitstempel
var alarmanzahl = "F."#zimmer#".Alarmanzahl"; ! Alarmanzahl
var innen_start = "F."#zimmer#".Temperatur"; ! Starttemperatur beim Lüften
var LED = "XXXXXXXXXX:13"; ! LED16-Anzeige wird rot bei Benachrichtigung
integer zeit; ! Stundenberechnung
zeit = system.Date("%H").ToInteger();
! Messagevariablen
string message;
var alarmanzahl_m = dom.GetObject(alarmanzahl).Value().ToString(0);
var zeitstempel_m = dom.GetObject(zeitstempel).Value();
var innen_start_m = dom.GetObject(innen_start).Value();
var innen_m = dom.GetObject("BidCos-RF."#innen#".ACTUAL_TEMPERATURE").Value().ToString(1);
var aussen_m = dom.GetObject("BidCos-RF."#aussen#".TEMPERATURE").Value().ToString(1);
if (dom.GetObject(""#alarmanzahl#"").Value() < 1)
{
var innen_start = dom.GetObject("BidCos-RF."#innen#".ACTUAL_TEMPERATURE").Value().ToString(1);
dom.GetObject("F."#zimmer#".Temperatur").State(innen_start);
dom.GetObject(""#alarmanzahl#"").State(dom.GetObject(""#alarmanzahl#"").Value() + 1);
}
else
{
if(dom.GetObject("BidCos-RF."#innen#".ACTUAL_TEMPERATURE").Value() < 14.5)
{
dom.GetObject(""#alarmanzahl#"").State(dom.GetObject(""#alarmanzahl#"").Value() + 1);
message=""#zimmer#": "#alarmanzahl_m#".Warnung! Fenster ist seit "#zeitstempel_m#" offen. Innentemperatur: "#innen_m#"Grad. Ursprünglich: "#innen_start_m#"Grad. Außentemperatur: "#aussen_m#"Grad";
dom.GetObject("BidCos-RF."#LED#".LED_STATUS").State(1);
}
if(dom.GetObject("BidCos-RF."#aussen#".TEMPERATURE").Value() > 24)
{
if (dom.GetObject("BidCos-RF."#innen#".ACTUAL_TEMPERATURE").Value() > dom.GetObject("F."#zimmer#".Temperatur").Value())
{
dom.GetObject(""#alarmanzahl#"").State(dom.GetObject(""#alarmanzahl#"").Value() + 1);
message=""#zimmer#": "#alarmanzahl_m#".Warnung! Fenster ist seit "#zeitstempel_m#" offen. Innentemperatur: "#innen_m#"Grad. Ursprünglich: "#innen_start_m#"Grad. Außentemperatur: "#aussen_m#"Grad";
dom.GetObject("BidCos-RF."#LED#".LED_STATUS").State(1);
}
}
if(zeit < 5)
{
dom.GetObject("CCU.SV_Push.Text").State(message);
}
else
{
dom.GetObject("CCU.SV_Pushover.Title").State("Fensterwarnung");
dom.GetObject("CCU.SV_Push.Text").State(message);
dom.GetObject("CCU.PRG_Push-Nachrichten").ProgramExecute();
}
}
if (dom.GetObject(""#alarmanzahl#"").Value() < 4)
{
dom.GetObject("CUxD."#timer#".TIMER_SET").State(600);
}
else
{
dom.GetObject("CUxD."#timer#".TIMER_SET").State(3600);
}
Variable: Programm: Script:
Code: Alles auswählen
var zimmer = "Schlafzimmer"; ! Raumname
var statuszimmer = "F.Status."#zimmer#""; ! Holt den Zeitstempel der Systemvariable Fensterstatus ab nur als Stunde und Minute
var zeitstempel = "F."#zimmer#".Zeitstempel"; ! sichtbarer Zeitstempel
dom.GetObject(""#zeitstempel#"").State(dom.GetObject(""#statuszimmer#"").Timestamp().ToString("%H:%M Uhr"));