Heizungsthermostat und DOIF: Kann man das nicht besser machen?

Begonnen von ReneR1986, 19 August 2022, 11:53:49

Vorheriges Thema - Nächstes Thema

ReneR1986

Hallo zusammen,

aus aktuellem Anlass oder weil ich das eh schon immer mal testen wollte, habe ich mir einen "smarten" Heizungsthermostat gekauft.
Eurotronic Spirit Zigbee
Soweit so gut...

Ich habe mir dazu folgende Logik überlegt (mit Sicherheit noch nicht zu Ende gedacht) und versucht mit DOIF zu implementieren.

Ich würde das tatsächlich einfach mal so dahingestellt lassen und einfach nur fragen, ob man das nicht besser bzw. eleganter machen kann?

Vielleich eine Erklärung zu den vielen Zeiten Bsp. Zeile 4.
Da sind so viele Zeiten drin, da es ja sein kann, dass die Temperatur im Laufe des Tages fällt. Und dann will ich ja schon, dass der Thermostat dann auf macht...Einfach nur zu einer festen Zeit steuern, wollte ich nicht.

(([Thermostat_Rene_Kueche:temperature] < 19) and ([06:00|Mo] or [06:30|Mo] or [07:00|Mo] or [07:30|Mo])) (set Thermostat_Rene_Kueche heatsetpoint 20)
DOELSEIF (([Thermostat_Rene_Kueche:heatsetpoint] > 18) and ([08:45|Mo] or [20:00]))(set Thermostat_Rene_Kueche heatsetpoint 18)
DOELSEIF (([Thermostat_Rene_Kueche:temperature] < 19) and ([14:00|Mo] or [14:30|Mo] or [15:00|Mo] or [15:30|Mo] or [16:00|Mo] or [16:30|Mo] or [17:00|Mo] or [17:30|Mo])) (set Thermostat_Rene_Kueche heatsetpoint 20)
DOELSEIF (([Thermostat_Rene_Kueche:temperature] < 19) and ([06:00|Di Mi Do Fr Sa So] or [06:30|Di Mi Do Fr Sa So] or [07:00|Di Mi Do Fr Sa So] or [07:30|Di Mi Do Fr Sa So] or [08:00|Di Mi Do Fr Sa So] or [08:30|Di Mi Do Fr Sa So] or [09:00|Di Mi Do Fr Sa So] or [09:30|Di Mi Do Fr Sa So] or [10:00|Di Mi Do Fr Sa So] or [10:30|Di Mi Do Fr Sa So] or [11:00|Di Mi Do Fr Sa So] or [11:30|Di Mi Do Fr Sa So] or [12:00|Di Mi Do Fr Sa So] or [12:30|Di Mi Do Fr Sa So] or [13:00|Di Mi Do Fr Sa So] or [13:30|Di Mi Do Fr Sa So] or [14:00|Di Mi Do Fr Sa So] or [14:30|Di Mi Do Fr Sa So] or [15:00|Di Mi Do Fr Sa So] )) (set Thermostat_Rene_Kueche heatsetpoint 20)

Damian

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ReneR1986


Per

Zitat von: ReneR1986 am 19 August 2022, 11:53:49
Einfach nur zu einer festen Zeit steuern, wollte ich nicht.
Und einfach an der Temperatur zu orientieren ist dir zu oldschool? ;)

ReneR1986

Ich wollte sowohl Zeit- als auch temperaturabhängig steuern. Gibt ja auch Zeiten an denen man nicht zu Hause ist.

Per

Ich will dir deinen Optimismus nicht nehmen, aber den Zahn, dass du jetzt was Neues erfunden hast, muss ich dir mal ziehen.
Setz dich doch bitte mit der Philosophie von Fhem (Reaktion auf Events) auseinander.
Ein Beispiel für das, was du willst, sollte sich auch in der commandref finden lassen.

Aber keine Angst, einem Großteil der Mitglieder, mich eingeschlossen, ging es am Anfang ähnlich ;)

ReneR1986

Das ich hier nichts neues habe, ist schon klar.
Ich denke, dass wird hier auch schwer  ;D

Ich hatte einfach nur den Eindruck, dass man mein DOIF evtl. auch eleganter umsetzen kann. Aber ich habe ja bereits Hinweise bekommen.

Danke dir trotzdem  ;)

Per

Ein Tipp noch von mir: nimm statt Zeitpunkten lieber Zeitspannen.

ReneR1986

OK, also statt z.B.:

DOELSEIF (([Thermostat_Rene_Kueche:temperature] < 19) and ([14:00|Mo] or [14:30|Mo] usw..

Lieber so:

DOELSEIF (([Thermostat_Rene_Kueche:temperature] < 19) and ([14:00|Mo-14:30|Mo] usw...

Dadurch könnte ich es schon etwas übersichtlicher gestalten.
Cool wäre, wenn nicht nur die Start- und Endzeit getriggert werden, sondern auch die Zeiten dazwischen.
Also z.B. wenn die Temperatur <19 ist und der Zeitpunkt 14:05 am Montag ist, dann mache was..






Damian

Ich habe den Sinn der Temperaturabfrage noch nicht nachvollziehen können. Ein  Thermostat regelt selbstständig den Heizkörper, abhängig der voreingestellten Temperatur.

Zu bestimmten Zeiten an bestimmten Tagen wird die Wunschtemperatur eingestellt und vom Thermostat gehalten. Es ist doch egal welche Temperatur zuvor im Zimmer war.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

ReneR1986

An dem Punkt bin ich tatsächlich auch wieder  :D

War wahrscheinlich der Versuch krampfhaft irgendwas zu bauen..
Manchmal sieht man den Wald vor lauter Bäumen nicht..

Ich werde es jetzt ganz einfach "nur" nach Zeiten machen und gut ist.

Per

Zitat von: ReneR1986 am 20 August 2022, 11:16:48
Cool wäre, wenn nicht nur die Start- und Endzeit getriggert werden, sondern auch die Zeiten dazwischen.
Also z.B. wenn die Temperatur <19 ist und der Zeitpunkt 14:05 am Montag ist, dann mache was..
Das meinte ich mit "Philosophie" und "Events". Das Thermometer gibt bei (jeder) Änderungen der Temperatur einen Event aus, die Uhr bei Erreichen der Zeitspanne auch. Dann prüft das DOIF, welche Bedingungen stimmen und macht das Gewünschte.

ReneR1986

Die Philosophie und Events sind mir schon klar denke ich.
Die Temperatur gibt bei jeder Änderung ein Event aber in Verbindung mit einem "and" ist die Bedienung nur wahr, wenn die Start oder Endzeit auch stimmt..zwischen den Zeiten geht es nicht

Per

Dafür ist es ja eine Zeitspanne, nicht nur zwei Zeitpunkte in andere Schreibweise.
Start und Ende erzeugen jeweils einen Event, den Rest ist die Bedingung aber auch wahr.
Genau wie eine Temperatur bei Änderung einen Event erzeugt, ansonsten aber einen Wert zum Vergleichen hat.
Also entweder erzeugt die Zeit einen Event (und ist wahr, beim Ende Event ist sie es nämlich nicht mehr) oder das Temperatur Device erzeugt einen Event (und verhält sich zu einem Vergleichswert wahr) und die Zeit ist wahr.
Zumindest wenn man es so programmiert. Man kann natürlich noch die Anwesenheit oder was auch immer mit abfragen, ganz nach Belieben.

Und noch etwas: Zwei verschiedene Events können NIE gleichzeitig wahr sein, zwei Status aber schon.

ReneR1986

OK, dann habe ich doch noch etwas gelernt denke ich, danke.

Also angenommen die Temperatur erzeugt einen Event (ist kleiner 19) und es ist Montag 14:10...
Dann sollte die Bedingung wahr sein...?

DOELSEIF (([Thermostat_Rene_Kueche:temperature] < 19) and ([14:00|Mo-14:30|Mo] usw...

Und, anderes Beispiel:
Die Temperatur erzeugt einen Event und es ist 14:30..
Dann ist die Bedingung nicht wahr...?