FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: chq am 19 November 2025, 09:18:25

Titel: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: chq am 19 November 2025, 09:18:25
Hallo,

ich benötige ein "Nicht-Perl-DOIF", dass nicht permanent auf Winterzeit triggert, sondern (in diesem Fall nur auf den OLED).

Das Ziel soll sein, dass der Rollo im Winter zwischen neun und 16 Uhr ganz nach oben fährt, sobald der Fernseher ausgeschaltet wird.

Leider fährt der Rollo momentan noch zwischen neun und 16 Uhr permanent hoch, wenn der Fernseher aus ist, da $isdst == 0 permanent triggert.

Mein Problem ist, dass ich da ja nicht einfach ein Fragezeichen vor das $isdst == 0 setzen kann. Wie kann ich das alternativ zu dem u.A. Code umsetzen?

DOELSEIF ([?09:00-16:00]
and [OLED:presence] ne "present"
and $isdst == 0)
(set HM_rolloWohnzimmer pct 100)

Gruß Chris
Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: rabehd am 19 November 2025, 09:49:33
Da $isdst nur 0 oder 1 ist, sollte bei Dir "and not $isdst" reichen.
Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: Gisbert am 19 November 2025, 10:04:05
Zitat von: rabehd am 19 November 2025, 09:49:33Da $isdst nur 0 oder 1 ist, sollte bei Dir "and not $isdst" reichen.

Wenn es denn stimmt, dass permanent auf
$isdst == 0 in der Winterzeit getriggert wird, dann würde ja auch permanent auf
and not $isdst == 1in der Winterzeit getriggert.

Da sich für mich auch die Frage stellt, wie ich Perl- oder eigene Funktionen nicht triggernd in einem DOIF verwenden kann, hänge ich mich hier an die Frage des TE an.

Viele Grüße Gisbert

PS: @chq, vielleicht wäre es sinnvoll den Thread in den Forumsbereich Automatisierung --> DOIF zu verschieben.
Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: rabehd am 19 November 2025, 11:05:21
Ich habe so meine Zweifel, dass eine Systemvariable überhaupt ein Event auslöst. Wäre mir neu.
Kein Event, kein Trigger.
Wo ist das Problem hier?
Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: chq am 19 November 2025, 11:12:48
Ich bin wirklich überhaupt kein FHEM-Experte, aber wenn ich lediglich

DOELSEIF ([?09:00-16:00]
and [OLED:presence] ne "present")
(set HM_rolloWohnzimmer pct 100)

schreibe, fährt der Rolladen nicht permanent hoch.

Das Problem habe ich ergänzend in meinem ersten Beitrag genauer beschrieben.

Gruß Chris
Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: rabehd am 19 November 2025, 11:22:05
Zitat von: chq am 19 November 2025, 11:12:48fährt der Rolladen nicht permanent hoch.
Doch, und zwar immer wenn der Fernseher einen Zustand nicht present bekommt oder erneuert (Einstellungen OLED unbekannt). Das passiert immer, egal ob Winter oder Sommer.
Ich gehe davon aus, dass 100% -> hoch bedeutet.
Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: chq am 19 November 2025, 11:47:20
Der Rollo fährt nicht permanent hoch, wenn ich folgenden Code verwende:

DOELSEIF ([?09:00-16:00]
and [OLED:presence] ne "present")
(set HM_rolloWohnzimmer pct 100)
Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: rabehd am 19 November 2025, 12:01:24
Zitat von: chq am 19 November 2025, 11:47:20Der Rollo fährt nicht permanent hoch, wenn ich folgenden Code verwend
Klar, wenn er schon oben ist.
Was ist den permanent? Irgendwann wird er wohl mal oben angekommen sein?

Was Du meinen könntest!
Der Fernseher ist an (present) und der Rollo ist nicht oben.
Wenn es zwischen 09:00 und 16:00 ist und der Fernseher den Status "present" verlässt, dann soll der (siehe Satz vorher) Rollo hochfahren.

Jetzt wäre das gesamte DOIF interessant.
Dann ist die Frage: Löst die Veränderung OLED auch ein Event aus?
Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: chq am 19 November 2025, 12:20:53
Die Situation ist folgende:

Der Fernseher ist seit Stunden aus, der Rollo steht seit ca. einer halben Stunde auf ca. 80.

100 bedeutet "ganz oben".

Mit permanent meine ich in diesem Fall, dass sich der Rollo unmittelbar auf 100 bewegt, wenn ich den Code von

([OLED:presence] eq "present"
and [?Wetterstation:luminosity] >= 6000
and [?HM_rolloWohnzimmer:control] > 28)
(set HM_rolloWohnzimmer pct 28)

DOELSEIF ([OLED:presence] eq "present"
and [?Wetterstation:luminosity] >= 4000
and [?HM_rolloWohnzimmer:control] > 55)
(set HM_rolloWohnzimmer pct 55)

DOELSEIF ([OLED:presence] eq "present"
and [?Wetterstation:luminosity] >= 2000
and [?HM_rolloWohnzimmer:control] > 88)
(set HM_rolloWohnzimmer pct 88)

DOELSEIF ([?09:00-16:00]
and [OLED:presence] ne "present")
(set HM_rolloWohnzimmer pct 100)

DOELSEIF ([OLED:presence] ne "present")
()

in

([OLED:presence] eq "present"
and [?Wetterstation:luminosity] >= 6000
and [?HM_rolloWohnzimmer:control] > 28)
(set HM_rolloWohnzimmer pct 28)

DOELSEIF ([OLED:presence] eq "present"
and [?Wetterstation:luminosity] >= 4000
and [?HM_rolloWohnzimmer:control] > 55)
(set HM_rolloWohnzimmer pct 55)

DOELSEIF ([OLED:presence] eq "present"
and [?Wetterstation:luminosity] >= 2000
and [?HM_rolloWohnzimmer:control] > 88)
(set HM_rolloWohnzimmer pct 88)

DOELSEIF ([?09:00-16:00]
and [OLED:presence] ne "present"
and $isdst == 0)
(set HM_rolloWohnzimmer pct 100)

DOELSEIF ([OLED:presence] ne "present")
()

ändere.

Der OLED löst in jedem Fall ein Herunterfahren aus.

Beim oberen der beiden von mir angegebenen Codes löst er zudem das Herauffahren aus.

Bzgl. des unteren Codes kann ich das nicht bestätigen, da ja der Rollo unmittelbar gefahren wird.
Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: rabehd am 19 November 2025, 12:33:56
ZitatMit permanent meine ich in diesem Fall, dass sich der Rollo unmittelbar auf 100 bewegt, wenn ich den Code von

in

ändere.

Da ist mir zu viel Chaos.
Mit solchen aussagen kann ich nichts anfangen. Hoffentlich jemand anders. Tut mir leid.
Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: chq am 19 November 2025, 12:51:53
Das ist doch kein Chaos.

Du wolltest doch den kompletten Code sehen.

Naja.  ::)
Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: Gisbert am 19 November 2025, 13:05:45
Zitat von: rabehd am 19 November 2025, 11:05:21Ich habe so meine Zweifel, dass eine Systemvariable überhaupt ein Event auslöst. Wäre mir neu.
Kein Event, kein Trigger.
Wo ist das Problem hier?

ChatGPT sagt, dass Perl-Systemvariablen und auch eigene Funktionen (sub) per se keine Fhem-Events auslösen. Events in subs werden nur erzeugt, wenn Readings aktualisierst oder trigger/set_Event verwendet werden.
Ob das Ergebnis von ChatGPT wirklich richtig ist, kann ich leider nicht beantworten.
Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: passibe am 19 November 2025, 13:14:00
Wieso packst du $isdst nicht einfach in den Ausführungsteil des DOIFs? Bin mir jetzt nicht sicher, ob das in der "Gesamtimplementation" Probleme gibt (d.h. wenn es zusammen mit den jeweils anderen DOELSIFs steht), aber standalone dürfte das durchaus funktionieren:

DOELSEIF ([?09:00-16:00]
and [OLED:presence] ne "present")
({
    if ($isdst == 0) {
        fhem("set HM_rolloWohnzimmer pct 100");
    }
})

Ist jetzt nicht super sauber, wie gesagt, aber vielleicht wird es ja dem Spruch aus deiner Signatur gerecht :D
Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: Damian am 19 November 2025, 13:32:48
Also noch mal zum Verständnis. Triggern kann man nur auf Ereignisse, die im Eventmonitor erscheinen. Variableninhalte, wie hier $isdst produzieren kein Ereignis. Diese kann man im DOIF abfragen, wenn sie dort bekannt sind, aber sie können nicht ein Device triggern.

Die Abfrage:

DOELSEIF ([?09:00-16:00] and [OLED:presence] ne "present") and $isdst == 0)
triggert (reagiert) nur auf OLED:presence, alles andere wird hier als zusätzliche Bedingung nur abgefragt.
Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: chq am 19 November 2025, 14:26:43
Ich werde den passenden Code beim Wechsel von Sommer- zur Winterzeit nun jeweils händisch entsprechend anpassen,
da auch passibes Tipp leider zu keinem anderen Verhalten führt.

Danke trotzdem allen Teilnehmenden.

Gruß Chris
Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: rabehd am 19 November 2025, 14:43:53
Du behauptest $isdst würde triggern. Da widersprechen Dir alle.
Du willst nicht beschreiben unter welchen Umständen was passiert. (Stattdessen listest Du 2 DOIF auf)
Wahrscheinlich sprechen wir nicht die gleiche Sprache.
Da ist Deine Entscheidung ganz richtig.

Wozu in Deinem Anwendungsfall nach Sommer- und Winterzeit unterschieden wird....?


Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: chq am 19 November 2025, 15:22:53
Ich beschreibe das, was ich hier feststelle.
Ich habe im Detail beschrieben, wann der Rolladen fährt.

Was Du mit "Entscheidung" meinst, erschließt sich mir nicht.

Warum zwischen Sommer- und Winterzeit unterschieden werden soll, tut aus meiner persönlichen Sicht im Rahmen der Lösungsfindung hier eigentlich nichts zur Sache.
Titel: Aw: DOIF, dass nicht auf Winterzeit triggert
Beitrag von: Per am 19 November 2025, 16:43:59
Der letzte Case ist zu weit gefasst *), deshalb löst er zu oft aus, kein DOIF-, sondern ein Logik-Problem.

Und die Zeitumstellung kannst du mittels Variablen (oder Userreadings) machen, DOIF kann Zeittrigger berechnen.

*) z.B.
[OLED:presence] -> "present"
Wetterstation:luminosity = 7000
HM_rolloWohnzimmer:control = 28