Doif nicht schalten bei bestimmter Statusänderung

Begonnen von ThiemoSt, 09 Juni 2017, 14:31:08

Vorheriges Thema - Nächstes Thema

ThiemoSt

Hallo Zusammen,

ist es möglich das ich ein Doif nicht reagieren lasse wenn z.B. der Status von einem Resident Device von asleep->home wechselt?
Es geht dabei im Hintergrund um diese Problematik: https://forum.fhem.de/index.php/topic,19040.msg644471.html#msg644471

Update:
Da für mich die Sache eigentlich klar war habe ich es etwas zu kurz erläutert.
Hier nochmal ein Update.

Über ein Resident steuere ich bei mir u.a. die Rolladen.
Für jeden Aktor gibt es ein eigenes Doif da unter anderem auch eine Entertainment und Wetterschaltung integriert ist.

Im Prinzip ist es so das wenn ich nach Hause komme (Statewechsel von absent zu home) alle Rolladen hoch fahren und wenn ich weg oder am schlafen bin (Statewechsel von home zu absent) alle runter fahren.
Jedoch möchte ich das beim aufstehen (Statewechsel von asleep zu home) alle Rolladen an Türen nicht hochgefahren werden sollen.
Daher die Frage wie ich genau diesen Statuswechsel am besten Abfrage.

Ich hoffe das ist nun etwas klarer.
FHEM, Ubuntu unter Proxmox (NUCi7)
FHT80B; CUL_FHTTK; HMUARTLGW; HUE; Netatmo; ENIGMA2; FRITZBOX; S7 und viele weitere.

rabehd

Warum sprichst Du das Thema 2mal an?

Zu Deiner Frage: ja klar.
Überlege Dir doch die Bedingungen für die Aktion und für nicht und baue danach das DOIF zusammen.
Wenn es nicht klappt, dann schreibe hier ausführlich was Du getan hast und was das DOIF tut.
(Das Ganze immer mit dem berühmtem List)
Auch funktionierende Lösungen kann man hinterfragen.

ThiemoSt

Zwei mal habe ich es angesprochen weil es einmal im Forum zum Resident Modul steht und mir vorhin gekommen ist das es ja auch auf Doif Ebene eine Lösung geben kann.

Ich stelle mir halt die Frage wie ich die Bedingung "war vorher asleep, jetzt aber home" in ein Doif bekomme. Wenn ich das wüsste würde es ja auch laufen.
FHEM, Ubuntu unter Proxmox (NUCi7)
FHT80B; CUL_FHTTK; HMUARTLGW; HUE; Netatmo; ENIGMA2; FRITZBOX; S7 und viele weitere.

rabehd

finde ich toll, dass Du von den Helfern erwartest sich die Infos zusammenzusuchen!

ZitatIn der Nacht ist der Status des Resident Device asleep. Sobald morgens der Wecker für den ersten Bewohner geht wird dieser auf home gesetzt. Und jetzt kommt die Frage:
Wie kann ich dies am besten Abfangen das in dem Moment mindestens eine Rollade nicht geöffnet wird?
Ich versuche mich mal an einer Übersetzung.
Du möchtest eine Aktion nicht ausführen und zwar beim Wechsel von aslepp zu home.
Denke doch erstmal anderes rum: Wann soll die Aktion ausgeführt werden? Man programmiert kein "Nichtausführen".

Fragen:
Was bedeutet "mindestens eine Rollade "?
Ab wieviel Bewohner soll die Aktion ausgelöst werden?
Was ändert sich beim Wachwerden des ersten, zweiten....
Auch funktionierende Lösungen kann man hinterfragen.

ThiemoSt

Sorry das dies so mißverständlich war. In meinen Gedanken war es mit der Erklärung bereits wasserdicht.

Ich habe den ersten Beitrag um eine bessere Erklärung ergänzt.
FHEM, Ubuntu unter Proxmox (NUCi7)
FHT80B; CUL_FHTTK; HMUARTLGW; HUE; Netatmo; ENIGMA2; FRITZBOX; S7 und viele weitere.

Ellert

Zitat von: ThiemoSt am 09 Juni 2017, 14:31:08
Hallo Zusammen,

ist es möglich das ich ein Doif nicht reagieren lasse wenn z.B. der Status von einem Resident Device von asleep->home wechselt?
Es geht dabei im Hintergrund um diese Problematik: https://forum.fhem.de/index.php/topic,19040.msg644471.html#msg644471

Update:
Da für mich die Sache eigentlich klar war habe ich es etwas zu kurz erläutert.
Hier nochmal ein Update.

Über ein Resident steuere ich bei mir u.a. die Rolladen.
Für jeden Aktor gibt es ein eigenes Doif da unter anderem auch eine Entertainment und Wetterschaltung integriert ist.

Im Prinzip ist es so das wenn ich nach Hause komme (Statewechsel von absent zu home) alle Rolladen hoch fahren und wenn ich weg oder am schlafen bin (Statewechsel von home zu absent) alle runter fahren.
Jedoch möchte ich das beim aufstehen (Statewechsel von asleep zu home) alle Rolladen an Türen nicht hochgefahren werden sollen.
Daher die Frage wie ich genau diesen Statuswechsel am besten Abfrage.

Ich hoffe das ist nun etwas klarer.

ZitatDaher die Frage wie ich genau diesen Statuswechsel am besten Abfrage.

Genauso, wie Du den Statuswechse absent->home und home->absent abfragst, kannst Du den Statuswechsel von asleep->home abfragen, aber keine Befehle ausführen, im Prinzip so

(<absent->home>) (set ...)
DOELSEIF (home->absent) (set ...)
DOELSEIF (asleep->home) ## nix tun

ThiemoSt

Das verstehe ich nicht ganz.
Ich frage aktuell ja nicht einen bestimmten Statuswechsel ab sonder triggere nur auf das Event State=Home.
Dabei ist es ja egal welcher State vorher gesetzt war.

Wie wäre denn die genaue Syntax dafür?


Gesendet von iPhone mit Tapatalk
FHEM, Ubuntu unter Proxmox (NUCi7)
FHT80B; CUL_FHTTK; HMUARTLGW; HUE; Netatmo; ENIGMA2; FRITZBOX; S7 und viele weitere.

Ellert

Zitat von: ThiemoSt am 11 Juni 2017, 07:26:50
Das verstehe ich nicht ganz.
Ich frage aktuell ja nicht einen bestimmten Statuswechsel ab sonder triggere nur auf das Event State=Home.
Dabei ist es ja egal welcher State vorher gesetzt war.

Wie wäre denn die genaue Syntax dafür?


Gesendet von iPhone mit Tapatalk

ZitatIm Prinzip ist es so das wenn ich nach Hause komme (Statewechsel von absent zu home) alle Rolladen hoch fahren und wenn ich weg oder am schlafen bin (Statewechsel von home zu absent) alle runter fahren.

Das hatte ich aber so verstanden.

Vielleicht funktioniert es, wenn Du die Funktion OldValue mit abfragst und and verknüpfst, s. Commandref Perl-Besonderheiten.

Damian

Zitat von: ThiemoSt am 11 Juni 2017, 07:26:50
Das verstehe ich nicht ganz.
Ich frage aktuell ja nicht einen bestimmten Statuswechsel ab sonder triggere nur auf das Event State=Home.
Dabei ist es ja egal welcher State vorher gesetzt war.

Wie wäre denn die genaue Syntax dafür?


Gesendet von iPhone mit Tapatalk

Dazu musst du dir den alten Zustand merken, um entscheiden zu können, wie sich der Zustand geändert hat. Das kannst du ggf. über die Zustände eines DOIF-Moduls regeln:
z. B.

DOIF ([myzustand] eq "absent" and $cmd == 1) (...)
DOELSEIF ([myzustand] eq "absent" and $cmd == 2) (...)
DOELSEIF ([myzustand] eq "home" and $cmd == 1) (...)
...


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

ThiemoSt

Zitat von: Damian am 11 Juni 2017, 17:48:07
Dazu musst du dir den alten Zustand merken, um entscheiden zu können, wie sich der Zustand geändert hat. Das kannst du ggf. über die Zustände eines DOIF-Moduls regeln:
z. B.

DOIF ([myzustand] eq "absent" and $cmd == 1) (...)
DOELSEIF ([myzustand] eq "absent" and $cmd == 2) (...)
DOELSEIF ([myzustand] eq "home" and $cmd == 1) (...)
...


Das ist glaube ich die Lösung, zu simpel um selber drauf zu kommen.
Ich habe es umgesetzt und werde es testen.
Danke!
FHEM, Ubuntu unter Proxmox (NUCi7)
FHT80B; CUL_FHTTK; HMUARTLGW; HUE; Netatmo; ENIGMA2; FRITZBOX; S7 und viele weitere.

l2r

ansonsten gibt's bei den Roommates ja auch noch das Reading laststate ... damit mach ich das ;-)


Gruß Michael
Wissen ist Macht.
Ich weiß nix.
Macht nix.

ThiemoSt

Zitat von: l2r am 12 Juni 2017, 13:20:32
ansonsten gibt's bei den Roommates ja auch noch das Reading laststate ... damit mach ich das ;-)

Wieso auch immer, das Reading habe ich bisher immer übersehen.
Das ist ja genau das was ich brauche. Im Beitrag zum Resident Modul hatte ich gehofft das mir jemand solch einen Wink geben kann.
FHEM, Ubuntu unter Proxmox (NUCi7)
FHT80B; CUL_FHTTK; HMUARTLGW; HUE; Netatmo; ENIGMA2; FRITZBOX; S7 und viele weitere.