FHEM > Automatisierung

Weekdaytimer Verständnisproblem

(1/4) > >>

persching:
Hallo zusammen,
ich hatte die ganze Zeit zum Heizen WDT mit weekprofile, aber ich hab mittlerweile so viel Profile und dachte, es geht ja auch ohne Profile und ich schalte direkt die WDT per Condition um.
Prinzipiell ist die eingestellte Raumtemperatur abhängig vom $we oder !$we, der Anwesenheit von Familie oder dem Roommate und von einem Dummy (je Raum), der mir ein Profil vorgibt. Für diesen Dummy gibt es die Zustände "Auto, Minimal und Aus". Daraus folgen die Profile:

WDT_Raumname_Aus
WDT_Raumname_Auto_Anwesend
WDT_Raumname_Auto_Abwesend
WDT_Raumname_Minimal_Anwesend
WDT_Raumname_Minimal_Abwesend
WDT_Raumname_Verreist

Jetzt triggert aber bspw. WDT_Lena_Auto_Abwesend, obwohl rr_Lena = zuhause


--- Zitat ---OG_KiZi_Lena_T de 00:00|19.5 ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true") and (ReadingsVal("WDT_Lena_Profile","state","Auto") eq "Auto") eq "true")
--- Ende Zitat ---


--- Code: ---2022.05.21 21:53:52.007 4: [WDT_Lena_Auto_Abwesend] aktParam:19.5 newParam:19.5 - is not disabled
2022.05.21 21:53:52.005 5: [WDT_Lena_Auto_Abwesend] removing Timer: WDT_Lena_Auto_Abwesend_1
2022.05.21 21:53:52.005 4: [WDT_Lena_Auto_Abwesend] Update   - past timer activated
2022.05.21 21:53:52.005 5: [WDT_Lena_Auto_Abwesend] condition evaluation returned:
2022.05.21 21:53:52.004 5: [WDT_Lena_Auto_Abwesend] evaluated condition: { ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true") and (ReadingsVal("WDT_Lena_Profile","state","Auto") eq "Auto") eq "true") }
2022.05.21 21:53:52.003 4: [WDT_Lena_Auto_Abwesend] checking condition: ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true") and (ReadingsVal("WDT_Lena_Profile","state","Auto") eq "Auto") eq "true")
2022.05.21 21:53:52.003 5: [WDT_Lena_Auto_Abwesend] result of check days: 1
2022.05.21 21:53:52.003 5: [WDT_Lena_Auto_Abwesend] check days:  my $days = {} ; map{ $days->{$_} = 1 }() ; defined $days->{$wday} ||  $we
2022.05.21 21:53:52.002 4: [WDT_Lena_Auto_Abwesend] check days:7
2022.05.21 21:53:52.002 5: [WDT_Lena_Auto_Abwesend] sensor 'OG_KiZi_Lena_Fensterkontakt' Reading/Attribute 'state' is 'closed'
2022.05.21 21:53:52.002 4: [WDT_Lena_Auto_Abwesend] list of window sensors found: 'WDT_Lena_Auto_Abwesend OG_KiZi_Lena_Fensterkontakt'
2022.05.21 21:53:52.002 4: [WDT_Lena_Auto_Abwesend] time=00:00/1653084000 delay=78832, nextDelay=78900, nextRetry=1653162900
2022.05.21 21:53:52.002 5: [WDT_Lena_Auto_Abwesend] removing Timer: WDT_Lena_Auto_Abwesend_delayed
2022.05.21 21:53:52.001 5: [WDT_Lena_Auto_Abwesend] setting  Timer: WDT_Lena_Auto_Abwesend_1 2022-05-21 00:00:00
2022.05.21 21:53:52.001 4: [WDT_Lena_Auto_Abwesend] OG_KiZi_Lena_T 2022-05-21 00:00:00 78832s
2022.05.21 21:53:47.873 5: [WDT_Lena_Auto_Abwesend] setting  Timer: WDT_Lena_Auto_Abwesend_midnight 2022-05-22 00:00:05
2022.05.21 21:53:47.873 5: [WDT_Lena_Auto_Abwesend] setting  Timer: WDT_Lena_Auto_Abwesend_delayed 2022-05-21 21:53:52
2022.05.21 21:53:47.873 4: [WDT_Lena_Auto_Abwesend] past timer on OG_KiZi_Lena_T at 2022-05-21 00:00:00 with  19.5 activated
2022.05.21 21:53:47.873 5: [WDT_Lena_Auto_Abwesend] sensor 'OG_KiZi_Lena_Fensterkontakt' Reading/Attribute 'state' is 'closed'
2022.05.21 21:53:47.873 4: [WDT_Lena_Auto_Abwesend] list of window sensors found: 'WDT_Lena_Auto_Abwesend OG_KiZi_Lena_Fensterkontakt'
2022.05.21 21:53:47.872 4: [WDT_Lena_Auto_Abwesend] time=00:00/1653084000 delay=78827, nextDelay=78900, nextRetry=1653162900
2022.05.21 21:53:47.862 5: [WDT_Lena_Auto_Abwesend] result of check days: 1
2022.05.21 21:53:47.861 5: [WDT_Lena_Auto_Abwesend] check days:  my $days = {} ; map{ $days->{$_} = 1 }(0,1,2,3,4,5,6) ; defined $days->{$wday}
2022.05.21 21:53:47.861 4: [WDT_Lena_Auto_Abwesend] check days:0,1,2,3,4,5,6
2022.05.21 21:53:47.858 4: [WDT_Lena_Auto_Abwesend] Heating recognized - switch in the past activated
2022.05.21 21:53:47.857 4: [WDT_Lena_Auto_Abwesend] device type heating recognized, setModifier:desiredTemperature
2022.05.21 21:53:47.839 4: [WDT_Lena_Auto_Abwesend] 00:00:00 19.5,  (Profil 6: Samstag)
2022.05.21 21:53:47.839 4: [WDT_Lena_Auto_Abwesend] 00:00:00 19.5,  (Profil 5: Freitag)
2022.05.21 21:53:47.839 4: [WDT_Lena_Auto_Abwesend] 00:00:00 19.5,  (Profil 4: Donnerstag)
2022.05.21 21:53:47.839 4: [WDT_Lena_Auto_Abwesend] 00:00:00 19.5,  (Profil 3: Mittwoch)
2022.05.21 21:53:47.839 4: [WDT_Lena_Auto_Abwesend] 00:00:00 19.5,  (Profil 2: Dienstag)
2022.05.21 21:53:47.839 4: [WDT_Lena_Auto_Abwesend] 00:00:00 19.5,  (Profil 1: Montag)
2022.05.21 21:53:47.839 4: [WDT_Lena_Auto_Abwesend] 00:00:00 19.5,  (Profil 0: Sonntag)
2022.05.21 21:53:47.758 4: [WDT_Lena_Auto_Abwesend] 00:00:00 19.5,  (Profil 6: Samstag)
2022.05.21 21:53:47.758 4: [WDT_Lena_Auto_Abwesend] 00:00:00 19.5,  (Profil 5: Freitag)
2022.05.21 21:53:47.758 4: [WDT_Lena_Auto_Abwesend] 00:00:00 19.5,  (Profil 4: Donnerstag)
2022.05.21 21:53:47.758 4: [WDT_Lena_Auto_Abwesend] 00:00:00 19.5,  (Profil 3: Mittwoch)
2022.05.21 21:53:47.758 4: [WDT_Lena_Auto_Abwesend] 00:00:00 19.5,  (Profil 2: Dienstag)
2022.05.21 21:53:47.757 4: [WDT_Lena_Auto_Abwesend] 00:00:00 19.5,  (Profil 1: Montag)
2022.05.21 21:53:47.757 4: [WDT_Lena_Auto_Abwesend] 00:00:00 19.5,  (Profil 0: Sonntag)
2022.05.21 21:53:47.754 4: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true") and (ReadingsVal("WDT_Lena_Profile","state","Auto") eq "Auto") eq "true") - NOT accepted, must be command or condition
2022.05.21 21:53:47.754 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true") and (ReadingsVal("WDT_Lena_Profile","state","Auto") eq "Auto") eq "true")  - trying to accept as a switchtime
2022.05.21 21:53:47.754 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true") and (ReadingsVal("WDT_Lena_Profile","state","Auto") eq "Auto") eq  - unbalanced brackets (: 6 ): 5 {: 0 }: 0
2022.05.21 21:53:47.753 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true") and (ReadingsVal("WDT_Lena_Profile","state","Auto") eq "Auto") eq  - trying to accept as a switchtime
2022.05.21 21:53:47.753 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true") and (ReadingsVal("WDT_Lena_Profile","state","Auto") eq "Auto")  - unbalanced brackets (: 6 ): 5 {: 0 }: 0
2022.05.21 21:53:47.753 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true") and (ReadingsVal("WDT_Lena_Profile","state","Auto") eq "Auto")  - trying to accept as a switchtime
2022.05.21 21:53:47.753 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true") and (ReadingsVal("WDT_Lena_Profile","state","Auto") eq  - unbalanced brackets (: 6 ): 4 {: 0 }: 0
2022.05.21 21:53:47.753 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true") and (ReadingsVal("WDT_Lena_Profile","state","Auto") eq  - trying to accept as a switchtime
2022.05.21 21:53:47.753 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true") and (ReadingsVal("WDT_Lena_Profile","state","Auto")  - unbalanced brackets (: 6 ): 4 {: 0 }: 0
2022.05.21 21:53:47.753 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true") and (ReadingsVal("WDT_Lena_Profile","state","Auto")  - trying to accept as a switchtime
2022.05.21 21:53:47.753 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true") and  - unbalanced brackets (: 4 ): 3 {: 0 }: 0
2022.05.21 21:53:47.753 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true") and  - trying to accept as a switchtime
2022.05.21 21:53:47.753 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true")  - unbalanced brackets (: 4 ): 3 {: 0 }: 0
2022.05.21 21:53:47.752 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq "true")  - trying to accept as a switchtime
2022.05.21 21:53:47.752 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq  - unbalanced brackets (: 4 ): 2 {: 0 }: 0
2022.05.21 21:53:47.752 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false") eq  - trying to accept as a switchtime
2022.05.21 21:53:47.752 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false")  - unbalanced brackets (: 4 ): 2 {: 0 }: 0
2022.05.21 21:53:47.752 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" || ReadingsVal("Nachtabsenkung","state","false")  - trying to accept as a switchtime
2022.05.21 21:53:47.752 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" ||  - unbalanced brackets (: 3 ): 1 {: 0 }: 0
2022.05.21 21:53:47.752 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend" ||  - trying to accept as a switchtime
2022.05.21 21:53:47.752 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend"  - unbalanced brackets (: 3 ): 1 {: 0 }: 0
2022.05.21 21:53:47.752 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq "abwesend"  - trying to accept as a switchtime
2022.05.21 21:53:47.752 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq  - unbalanced brackets (: 3 ): 1 {: 0 }: 0
2022.05.21 21:53:47.751 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause") eq  - trying to accept as a switchtime
2022.05.21 21:53:47.751 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause")  - unbalanced brackets (: 3 ): 1 {: 0 }: 0
2022.05.21 21:53:47.751 5: [WDT_Lena_Auto_Abwesend] ((ReadingsVal("rr_Lena","state","zuhause")  - trying to accept as a switchtime
2022.05.21 21:53:47.751 4: [WDT_Lena_Auto_Abwesend] 00:00|19.5 - accepted
2022.05.21 21:53:47.751 5: [WDT_Lena_Auto_Abwesend] 00:00|19.5  - trying to accept as a switchtime
2022.05.21 21:53:47.749 5: [WDT_Lena_Auto_Abwesend] removing Timer: WDT_Lena_Auto_Abwesend_midnight
--- Ende Code ---

Kann oder soll das so funktionieren? Oder geht es nur mit weekprofile?

Beta-User:

--- Zitat von: persching am 21 Mai 2022, 21:59:47 ---Kann oder soll das so funktionieren? Oder geht es nur mit weekprofile?

--- Ende Zitat ---
Es kann schon so funktionieren, allerdings erschließt sich mir der Sinn der letzten 'eq "true"'-Abfrage nicht. Wirf mal die Einzelteile wie z.B.

--- Code: ---ReadingsVal("Nachtabsenkung","state","false") eq "true"
--- Ende Code ---
in das FHEM-Kommando-Feld und schau, was da für ein Ergebnis kommt.

Ob die Verkettung in der high+ low-level-Variante das ergibt, was du haben willst, wäre auch noch so eine Frage ("||"+"and"). PBP mag sowas jedenfalls nicht.

Ansonsten glaube ich immer noch, dass sowas besser geht mit weekprofile. Besser =
- weniger gleichzeitig von FHEM zu verwaltende Timer (alles, was "delayed" ist, wird jede Minute geprüft, du hast also immer 5 zusätzliche Timer, die du eigentlich nicht brauchst)
- deutlich übersichtlicher, weil es immer nur ein aktives Profil geben kann (!), und welches es ist, sieht man direkt am WDT. Bei solchen komplizierteren Konstruktionen besteht sonst immer die Gefahr, dass doch zwei oder mehr WDT gleichzeitig aktiv sind, wenn ein Syntax- oder Logikfehler vorliegt (qed).

persching:
ok, das "eq = "true" das ist noch ein überbleibsel aus diversen Versuchen und natürlich falsch - hatte ich übersehen. Ich hatte alle Bedingungen in ein if gepackt und das eben auf eq = "true" geprüft, was aber auch nicht funktioniert hat.

Gut, wenn das mit den weekprofiles besser gehen soll, dann mache ich mir mal Gedanken, ob ich die vielleicht anders/sinnvoller gruppieren kann. Bisher hatte ich immer Probleme, dass bei einem "restore Topic" auch Räume geschaltet wurden, die derzeit gar nicht hätten geschaltet werden sollen. Z.b. Wenn meine Frau von der Arbeit kam und die beiden Kinder noch nicht zuhause waren, dann wurde dort auch schon die hohe Temperatur gesetzt. Ich hab ja nun Zeit bis zur nächsten Heizperiode das zu optimieren.

Beta-User:
Na ja, es gibt afaik noch keine nachvollziehbare "Musterlösung" mit Residents und Co.

Von daher können wir gerne versuchen, mal ein notify+Perl-Code zu basteln, das aus den gegebenen Rahmenbedingungen die passenden Befehle ableitet.
Wenn ich da helfen soll, müßtest du mal darlegen, welche Eingangsbedingungen (Events) es gibt. Scheinbar sind das Anwesenheiten bei Residents (bzw. auch dran hängende Gruppen), sowie eben für einzelne Räume noch ein "Modus-Schalter" sowie ggf. noch "Nachtabsenkung" (und vermutlich ein globaler Schalter, mit dem man alles deaktiviert?)?

Soweit würde ich mal behaupten, dass das eine Art "allgemeingültiger Standard" wäre, den man dann auch woanders mit kleinen Anpassungen gut verwenden können sollte :) .

persching:
Also, dann beschreibe ich mal, was meine Anforderungen und Gegebenheiten bisher sind:

4 Bewohner, 2 Eltern, 2 Kinder abgebildet in Residents und Roommate, dort aber nur die Zustände "zuhause", "abwesend" und "verreist".
Abfrage der Zustände über Presence der Handys in der Fritzbox.

Geschaltet werden die Topics über Homemode bei eintretenden Zustandsänderungen.

Dann gibt es eben die Räume in verschiedenen Kategorien:
Allgemeine Räume: Wohnzimmer, Küche, Bäder, Flur
Schlafräume: Schlafzimmer, Kinderzimmer1 und Kinderzimmer2

Dazu kommt noch ein "Profilumschalter" je Raum bei dem man auswählen kann zwischen "Auto", "Minimal" und "Aus".
Auto = Heizperiode ca. Oktober bis März
Minimal = Übergangszeit, morgens und abends heizen, dazwischen die Thermostate runterfahren und wenn die durchschnittliche Ventilstellung klein genug ist, dann auch die Heizung umschalten auf "nur Warmwasser".
Aus = Thermostat wird auf 5°C gesetzt

Und seit Corona kommt noch eine weitere Komplikation dazu:
Homeoffice. Das kann ich erfassen, wenn mein Geschäftslaptop per Presence online ist und der Zwischenstecker an meinem Monitor mehr als 15 Watt ausgibt.

Dafür ist eine andere Komplikation rausgefallen: der Kachelofen darf nicht mehr genutzt werden und darum entfällt das Topic Kachelofen...

Die erwähnte Nachtabsenkung ist ein umgebauter Fensterkontaktschalter, der parallel zur Umwälzpumpe der Heizung hängt. Ohne diese Erfassung hatte ich das Problem, dass die verwendeten MAX!Thermostate versucht haben immer weiter zu regeln, obwohl die Gasheizung in der Nachtabsenkung war (die Heizung macht das wiederum Außentemperaturabhängig). Das führte dann dazu, dass es regelmäßig sehr warm wurde, wenn die Heizung zugeschaltet hat. Die Thermostate sind leider sehr träge. :(
Aber man könnte es natürlich auch als "Eco-Schalter" oder so sehen/realisieren, weil es ist letztendlich nur eine true/false Abfrage.

Zusätzlich hatte ich dann noch unterschieden zwischen "Arbeitstag" und "Kein Arbeitstag" als Topic. Das ergibt eben jede Menge Topics und war letztendlich der Anlass das neu zu machen. Arbeitstag und kein Arbeitstag will ich z.B. schonmal über $we und !$we. Und eben genau aus diesem Grund dachte ich, dass ich mit den Conditions bei den weekdaytimern das einfacher regeln kann. Aber so eine richtige Lösung hab ich nicht gefunden.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln