Hallo,
ich habe mal wieder einen Hänger:
ich habe diverse Dummy-Devices, die Start und Ende der Ferien anzeigen. Alle Dummies haben die gleiche Struktur und werden 1 x pro Tag berechnet. So entsteht eine Countdown-Übersicht in Tagen.
cnt.OS.start.Ferien.dum: Start der Osterferien
cnt.OS.end.Ferien.dum: Ende der Osterferien
cnt.SO.start.Ferien.dum: Start der Sommerferien
cnt.SO.end.Ferien.dum: Ende der Sommerferien
usw.
Jetzt möchte ich jeweils einen Tag vor dem Ferienstart bzw. vor dem Ferienende eine Aktion triggern. Jetzt kann man das alles "oder" verknüpfen:
if (Osterferienstart or Sommerferienstart or Herbstferienstart) =1
schalte Aktor an.
Gibt es nicht eine elegantere Lösung mit Perl? Irgendwie in dieser Form?
if (*.start.Ferien.dum) =1
schalte Aktor
Leider funzt das mit diesem Ausdruck nicht, wie ich dachte!
Hat jemand einen Tipp?
Spartacus
Perl hätte gerne ein .* statt einem einfachem Stern und die Klammer geht um die ganze Condition.
Grüße,
Oli
Hi,
sorry, hätte es exakter aufschreiben sollen:
Diesen Code habe ich probiert, aber er läuft nicht Da alle Ferientermine (siehe Screenshot im vorherigen Post) größer als 10 Tage sind, hätte hier der "else" - Fall zutreffen müssen. Es wird aber der "if"-Fall ausgeführt. Wo ist mein Fehler?
{
if (ReadingsVal(".*.Ferien.dum", "state", "") <= 10)
{
fhem "set outdoorlight on"
}
else
{
fhem "set outdoorlight off"
}
}
Christian
Hallo Spartacus,
könnte es an dem oberen Eintrag liegen "Ferientag", welcher auf 0 steht ?
das funktioniert so nicht. ReadingsVal kann nur ein reading aus einem device auslesen.
du kannst entweder deine dummys über eine structure zusammenfassen oder du musst alle einzelwerte per if of IF oder DOIF verknüpfen.
gruss
andre
Hallo Andre,
danke für die Aufklärung!
Ich probier es mal mit einer "structure "! Diese Funktion kenne ich noch nicht!
Christian
Hallo,
ich brauche doch noch einmal Hilfe. Habe das mit der structure offenbar nicht richtig umgesetzt.
Ich habe jetzt alle Ferien-Start-Dummy-Devices folgendermassen zusammengefasst:
define FerienStart structure cnt.OS.start.Ferien.dum cnt.PG.start.Ferien.dum cnt.SO.start.Ferien.dum cnt.HB.start.Ferien.dum cnt.WE.start.Ferien.dum
und dann den o.a. Code wir folgt abgeändert:
.....
{
if (ReadingsVal("FerienStart", "state", "") <= 10)
{
fhem "set outdoorlight on"
}
else
{
fhem "set outdoorlight off"
}
}
..aber ändert nichts an der Situation!
Irgendwie habe ich nicht verstanden, wie die structure richtig eingesetzt wird.
Christian
Hallo,
hat niemand einen Tipp für mich? Komme irgendwie nicht weiter...
Christian
Deine Dummys nehmen 1 oder 0 an, richtig? Dann schau dir mal clientstate_behavior und clientstate_priority in http://fhem.de/commandref.html#structure an.
Hallo,
Nein! Die Dummy-devices können alle möglichen Werte annehmen! Deshalb Frage ich ja <= 10 ab. Das ist quasi ein Countdown. Wenn einer der Werte kleiner al 10 wird, dann soll das outdoorlight schalten. Andernfalls bleibt es aus.
Christian
Andre, korrigiere mich bitte, wenn ich mich irre, aber in dem Fall ist structure ungeeignet und es bleibt nur die lange oder-Kette.
ja. dann wird es mit structure zumindest sehr unhandlich.
Hallo,
ok, danke! Dann bleibt wohl nur der "herkömmliche Weg"!
Christian