Lüftungswarnung auf Temperaturbasis

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Antworten
Tharanis
Beiträge: 114
Registriert: 15.04.2015, 11:39
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Lüftungswarnung auf Temperaturbasis

Beitrag von Tharanis » 05.11.2017, 18:54

Es gibt schon etliche Ansätze eine Lüftungswarnung umzusetzen. Ich habe mich nach einigen Versuchen und Anregungen zu der unten stehenden Variante vorgearbeitet. Vor über einem Jahr hatte ich ursprünglich eine Variante, die nur nach Zeitpunkten warnte, nun ist es etwas variabler^^ und stundenlanges Lüften ist möglich, falls die Temperaturen stimmen.

-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:
Variablen.JPG
Nun das Programm:
Programm.JPG
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);
	}
Hier noch der Fensterstatus der Vollständigkeit halber:
Variable:
Variablen_Fensterstatus.JPG
Variablen_Fensterstatus.JPG (21.04 KiB) 1807 mal betrachtet
Programm:
Programm_Fensterstatus.JPG
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"));
Ich habe bei mir eine nochmal kompliziertere Variante im Einsatz (Stichwort Warnung zur bei Anwesenheit) und habe hier die Version etwas vereinfacht.
DWD-Unwetterwarnscript v1.30 (RaspberryMatic) - Lüftungswarnung auf Temperatur-Basis

RaspberryMatic (3.47.10.20190713) - Längste Laufzeit bislang: 45 Tage (RaspberryMatic), 72 Tage (CCU2), >100 Tage (CCU1)

Benutzeravatar
Murmelbaerchen69
Beiträge: 274
Registriert: 01.12.2013, 22:55
Wohnort: @home

Re: Lüftungswarnung auf Temperaturbasis

Beitrag von Murmelbaerchen69 » 05.11.2017, 19:18

Hallo Tharanis,

recht herzlich Dank für deine ausführliche Anleitung.
Ich werde diese nächstes Wochenende bei mir umsetzen.

Gruß Ralf

Gesendet von meinem SM-N910F mit Tapatalk
Das soll ein neuer Computer sein ? Warum steht den auf der Tastatur "ALT" ?

Benutzeravatar
Murmelbaerchen69
Beiträge: 274
Registriert: 01.12.2013, 22:55
Wohnort: @home

Re: Lüftungswarnung auf Temperaturbasis

Beitrag von Murmelbaerchen69 » 12.11.2017, 13:59

Hallo,

habe eben mal alles so eingerichtet. Die Variablen werden beim öffnen des Fenster befüllt, auch der Timer läuft los.
Einzige was nicht passier, ist das der Alarmzähler hochgezählt wird, der bleibt auf 1 stehen, obwohl der Timer wieder neu startet.
Variable.jpg
timer.jpg
timer.jpg (25.54 KiB) 1585 mal betrachtet
Gruß Ralf
Das soll ein neuer Computer sein ? Warum steht den auf der Tastatur "ALT" ?

Tharanis
Beiträge: 114
Registriert: 15.04.2015, 11:39
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Lüftungswarnung auf Temperaturbasis

Beitrag von Tharanis » 12.11.2017, 20:33

Code: Alles auswählen

   if(dom.GetObject("BidCos-RF."#innen#".ACTUAL_TEMPERATURE").Value() < 14.5)

Code: Alles auswählen

if(dom.GetObject("BidCos-RF."#aussen#".TEMPERATURE").Value() > 24)
Ich vermute mal es liegt an den oberen Zeilen aus meinem Script.
Vielleicht ist der Begriff Alarmanzahl etwas irreführend von mir gewählt, denn:
-beim ersten Durchlauf des Scripts wird der Alarmzähler auf 1 gesetzt, es wird aber keine Warnung ausgegeben, dadurch setzt sich der Timer auf bei mir 10Min.
-beim zweiten Ablauf des Scripts nach 10 Minuten wird geprüft, ob die aktuelle Temperatur unter 14,5 oder über 24Grad ist, nur dann wird der Alarmzähler erhöht, ansonsten könnte das Script unendlich alle 10 Minuten laufen ohne eine (Push-)Meldung.

Das bedeutet: Das Script ist momentan auf eine Push-Benachrichtigung ausgelegt, schaut man sich die Alarmanzahl an, so ist die Variable quasi immer eine Ziffer zu hoch. Wenn man die richtigere Alarmanzahl haben will müsste man die "alarmanzahl_m" in eine Variable schreiben.

Teste doch mal bei Dir die oben in diesem Post erwähnten Temperaturabfragen ab, so dass eine Push-Nachricht geschickt werden müsste.
DWD-Unwetterwarnscript v1.30 (RaspberryMatic) - Lüftungswarnung auf Temperatur-Basis

RaspberryMatic (3.47.10.20190713) - Längste Laufzeit bislang: 45 Tage (RaspberryMatic), 72 Tage (CCU2), >100 Tage (CCU1)

Benutzeravatar
Murmelbaerchen69
Beiträge: 274
Registriert: 01.12.2013, 22:55
Wohnort: @home

Re: Lüftungswarnung auf Temperaturbasis

Beitrag von Murmelbaerchen69 » 12.11.2017, 21:57

Hallo,

momentan habe ich eine Außentemperatur von 7 Grad und eine Innen Temperatur von 15 Grad. Müsste dann nicht eine Pushnachricht kommen?
Fenster ist schon den ganzen Tag geöffnet und der Timer läuft in der Endlosschleife, aber eine Nachricht habe ich bisher nicht erhalten.

Gruß Ralf

Gesendet von meinem SM-N910F mit Tapatalk
Das soll ein neuer Computer sein ? Warum steht den auf der Tastatur "ALT" ?

Tharanis
Beiträge: 114
Registriert: 15.04.2015, 11:39
Hat sich bedankt: 1 Mal
Danksagung erhalten: 1 Mal

Re: Lüftungswarnung auf Temperaturbasis

Beitrag von Tharanis » 12.11.2017, 22:11

Hallo Ralf,

Nein, wenn die Werte nicht verändert sind, werden die Werte:
-Innen niedriger als 14,5
-außen höher 24
als Auslöser verwendet.

Erhöhe doch mal beim Codeschnipsel mit der 14.5 den Wert auf 16, dann sollte bei Deinen 15Grad auch gewarnt werden. Wenn nicht liegt irgendwo anders noch ein Fehler vor.

Gruß Tharanis
DWD-Unwetterwarnscript v1.30 (RaspberryMatic) - Lüftungswarnung auf Temperatur-Basis

RaspberryMatic (3.47.10.20190713) - Längste Laufzeit bislang: 45 Tage (RaspberryMatic), 72 Tage (CCU2), >100 Tage (CCU1)

Benutzeravatar
Murmelbaerchen69
Beiträge: 274
Registriert: 01.12.2013, 22:55
Wohnort: @home

Re: Lüftungswarnung auf Temperaturbasis

Beitrag von Murmelbaerchen69 » 15.11.2017, 18:31

Hallo,

wenn ich die Innen Temperatur auf 16 Grad setze funktioniert es. Pushnachricht kommt, also alles wie es sein soll.
Werde mit den Temperaturen noch ein wenig experimentieren.
Nochmals Danke für das tolle Programm (Skript)

Gruß Ralf

Gesendet von meinem SM-N910F mit Tapatalk
Das soll ein neuer Computer sein ? Warum steht den auf der Tastatur "ALT" ?

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“