DOIF, dass nicht auf Winterzeit triggert

Begonnen von chq, 19 November 2025, 09:18:25

Vorheriges Thema - Nächstes Thema

chq

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
So einfach wie möglich, so kompliziert wie nötig

rabehd

Da $isdst nur 0 oder 1 ist, sollte bei Dir "and not $isdst" reichen.
Auch funktionierende Lösungen kann man hinterfragen.

Gisbert

#2
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.
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

rabehd

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?
Auch funktionierende Lösungen kann man hinterfragen.

chq

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
So einfach wie möglich, so kompliziert wie nötig

rabehd

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.
Auch funktionierende Lösungen kann man hinterfragen.

chq

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)
So einfach wie möglich, so kompliziert wie nötig

rabehd

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?
Auch funktionierende Lösungen kann man hinterfragen.

chq

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.
So einfach wie möglich, so kompliziert wie nötig

rabehd

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.
Auch funktionierende Lösungen kann man hinterfragen.

chq

Das ist doch kein Chaos.

Du wolltest doch den kompletten Code sehen.

Naja.  ::)
So einfach wie möglich, so kompliziert wie nötig

Gisbert

#11
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.
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | tuya local | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY | DEYE | JK-BMS | ESPHome

passibe

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

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

chq

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
So einfach wie möglich, so kompliziert wie nötig