Rollosteuerung über Anwesenheit und Tageszeit

Begonnen von Wondermusic, 07 Dezember 2015, 18:48:14

Vorheriges Thema - Nächstes Thema

Wondermusic

Hallo zusammen,

langsam bin ich am verzweifeln und ich steige nicht hinter die Logik/Unlogik der Programmierung... Ich hoffe Ihr könnt mir helfen (Blutiger Anfänger).  :-[

Was möchte ich:
Unser Rollo im Schlafzimmer soll automatisch hochfahren, solange es noch hell ist und entweder das Handy meiner Frau oder mein Handy über WLAN verbunden sind. Gleichzeitig wird der HomeStatus auf "Zuhause" gesetzt.

Das Rollo soll nicht hochfahren wenn es bereits dunkel ist und einer von uns nach Hause kommt, wobei der HomeStatus trotzdem auf "Zuhause" gesetzt werden soll.

HomeStatus "Weg" wird momentan manuell per Tablet im Eingangsbereich gesetzt (Wird automatisiert wenn ich diese Steuerung hinbekommen habe).

Anwesenheitsabfrage erfolgt per presence und funktioniert einwandfrei.

Die Tageslicht- Abfrage löse ich so:

# Tageslicht #
define Tageslicht dummy
define Nacht at *{sunset("CIVIL",0,"16:00","22:30")} set Tageslicht dunkel
define Tag at *{sunrise("CIVIL")} set Tageslicht hell


Die Steuerung so:

###### Steuerung An- Abwesenheit & Rollo ######
define Weg notify HomeStatus:Weg set og_sz_rollo 0
define Urlaub notify HomeStatus:Urlaub set og_sz_rollo 0
define HomeStatus_ZuHause_hell at +*00:03 { if ((Value("Tageslicht") eq "hell") && ((Value("Richy_Handy") eq "present") || (Value("Sylvi_Handy") eq "present"))) {fhem("set HomeStatus Zuhause");; } {fhem("set og_sz_rollo 100");; }}
define HomeStatus_ZuHause_dunkel at +*00:03 { if ((Value("Tageslicht") eq "dunkel") && ((Value("Richy_Handy") eq "present") || (Value("Sylvi_Handy") eq "present"))) {fhem("set HomeStatus Zuhause");; }}

define og_sz_rollo_zeit_autoab notify Tageslicht:dunkel set og_sz_rollo 0


Bisher habe ich bei HomeStatus "Weg" oder "Urlaub" nur das Rollo definiert, später soll mehr dazu kommen.

Mein Problem ist und was ich absolut nicht verstehe, das Rollo fährt trotzdem hoch wenn wir beide da sind, obwohl der Zustand Tageslicht auf "dunkel" steht.

Für mich bedeutet die Logik in der oberen Programmierung:

Bei "HomeStatus_ZuHause_hell" = Fahre das Rollo komplett hoch und setze Status "Zuhause", wenn Tageslicht=hell und (entweder) Richy_Handy oder Sylvi_Handy vorhanden.
Bei  "HomeStatus_ZuHause_dunkel" = Setze Status "Zuhause", wenn Tageslicht=dunkel und eins der beiden Handy's vorhanden - sonst nichts... (Denn das Rollo wird ja schon durch "og_sz_rollo_zeit_autoab" gesteuert.

Wo habe ich hier einen Denkfehler? Ich komm einfach nicht dahinter.  :o

Gruß,
Richy
RPi 3B+ FHEM-Server mit HM-MOD-RPI-PCB
RPi2 mit HM-MOD-RPI-PCB
HM-CFG-LAN
RPi 4 mit ioBroker
>100 HM Sensoren & Aktoren, div. ESP8266 via mqtt, ems-esp

Ellert

Ich empfehle Dir ein DOIF zu benutzen, damit kannst Du einfach Zeiten, Events und Zustände kombinieren ohne auf die Perl-Ebene zu wechseln.
Das DOIF ist ein sehr mächtiges Werkzeug, es ersetzt at, notify, if und mehr in einer Definition.

Hier mal ein einfaches Beispiel aus der Commandref, http://fhem.de/commandref_DE.html#DOIF_Zeitsteuerung
Schalten mit Zeitfunktionen, hier: bei Sonnenaufgang und Sonnenuntergang:
define di_light DOIF ([+{sunrise_rel(900,"06:00","08:00")}]) (set outdoorlight off) DOELSEIF ([+{sunset_rel(900,"17:00","21:00")}]) (set outdoorlight on)

Wondermusic

#2
Hallo Ellert,

danke für die Info/den Vorschlag. :)

Wenn ich das umsetze, müsste es so aussehen, oder?

###### Steuerung An- Abwesenheit & Rollo ######
define Weg notify HomeStatus:Weg set og_sz_rollo 0
define Urlaub notify HomeStatus:Urlaub set og_sz_rollo 0
define HomeStatus_ZuHause_hell DOIF (([Tageslicht] eq "hell") and ([og_sz_rollo] eq "off") and (!$we) and (([Richy_Handy] eq "present") or ([Sylvi_Handy] eq "present"))) (set HomeStatus Zuhause, set og_sz_rollo 100)
attr HomeStatus_ZuHause_hell repeatsame 1
define HomeStatus_ZuHause_dunkel DOIF (([Tageslicht] eq "dunkel") and ([og_sz_rollo] eq "off") and (([Richy_Handy] eq "present") or ([Sylvi_Handy] eq "present"))) (set HomeStatus Zuhause)
attr HomeStatus_ZuHause_dunkel repeatsame 1
define HomeStatus_Weg DOIF (([HomeStatus] eq "Zuhause") and (([Richy_Handy] eq "absent") or ([Sylvi_Handy] eq "absent"))) (set HomeStatus Weg)
attr HomeStatus_Weg repeatsame 1

define og_sz_rollo_zeit_autoaufwe1 at *09:45:00 {if ($we) {fhem("set og_sz_rollo 30");;}}
define og_sz_rollo_zeit_autoaufwe2 at *10:15:00 {if ($we) {fhem("set og_sz_rollo 100");;}}
define og_sz_rollo_zeit_autoab notify Tageslicht:dunkel set og_sz_rollo 0


Bin auf der Arbeit und kann das gerade leider nicht testen...

Gruß,
Richy
RPi 3B+ FHEM-Server mit HM-MOD-RPI-PCB
RPi2 mit HM-MOD-RPI-PCB
HM-CFG-LAN
RPi 4 mit ioBroker
>100 HM Sensoren & Aktoren, div. ESP8266 via mqtt, ems-esp

Ellert

Hierfür
Zitatdefine HomeStatus_ZuHause_hell DOIF (([Tageslicht] eq "hell") and ([og_sz_rollo] eq "off") and (!$we) and (([Richy_Handy] eq "present") or ([Sylvi_Handy] eq "present"))) (set HomeStatus Zuhause, set og_sz_rollo 100)
attr HomeStatus_ZuHause_hell repeatsame 1
define HomeStatus_ZuHause_dunkel DOIF (([Tageslicht] eq "dunkel") and ([og_sz_rollo] eq "off") and (([Richy_Handy] eq "present") or ([Sylvi_Handy] eq "present"))) (set HomeStatus Zuhause)
attr HomeStatus_ZuHause_dunkel repeatsame 1
kannst Du z.B.
define meinDOIF DOIF (([Tageslicht] eq "hell" ...
DOELSEIF (([Tageslicht] eq "dunkel") ...
schreiben, repeatsame entfällt

([og_sz_rollo] eq "off") triggert, das verhinderst Du mit ([?og_sz_rollo] eq "off")

Hierfür
Zitatdefine Weg notify HomeStatus:Weg set og_sz_rollo 0
define Urlaub notify HomeStatus:Urlaub set og_sz_rollo 0
define og_sz_rollo_zeit_autoab notify Tageslicht:dunkel set og_sz_rollo 0
define og_sz_rollo_zeit_autoaufwe1 at *09:45:00 {if ($we) {fhem("set og_sz_rollo 30");;}}
define og_sz_rollo_zeit_autoaufwe2 at *10:15:00 {if ($we) {fhem("set og_sz_rollo 100");;}}
define og_sz_rollo_zeit_autoab notify Tageslicht:dunkel set og_sz_rollo 0
dies hier
DOIF ([HomeStatus] =~ "Weg|Urlaub" or [Tageslicht] eq "dunkel") (..)
DOELSEIF ([09:45:00|7] and ) (set ... 30)
DOELSEIF  ([10:15:00|7]) (set ... 100)
DOELSEIF ([Tageslicht] eq "dunkel") (set ...0)
do always

So könnte es prinzipiell aussehen, ungetestet und nicht vollständig. Die logischen Abhängigkeiten habe ich nicht beachtet, im Besonderen nicht, die Abhängigkeit der Zeitsteuerung von Weg|Urlaub, dunkel.

Wondermusic

#4
Ich habe gestern Abend mal versucht das ganze umzusetzen, aber leider geht hier noch irgendwas schief...  :(

RolloSteuerung_Auto scheint zu gehen. Hier wird nach der ersten Statusänderung ein cmd_1 angezeigt – schätze mal das bedeutet DOIF mit Erfolg durchgelaufen (Wenn ich das "do always" dahinter setze beschwert sich fhem allerdings).

Das andere DOIF scheint aber nicht zu gehen. Nach manuellem setzen auf Tageslicht:hell/dunkel wird mir hier ein cmd_3 und danach disabled angezeigt. Ich habe auch schon versucht dieses wieder zu initialisieren, aber aus diesem state kommt das DOIF nicht mehr heraus – egal was ich mache...


define RolloAnwesenheitsSteuerung_Auto
DOIF ([Tageslicht] eq "hell" and [?og_sz_rollo] eq "down" and !$we and ([Richy_Handy] eq "present" or [Sylvi_Handy] eq "present")) ({fhem ("set HomeStatus Zuhause")}, set og_sz_rollo 100)
DOELSEIF ([Tageslicht] eq "dunkel" and [?og_sz_rollo] eq "down" and ([Richy_Handy] eq "present" or [Sylvi_Handy] eq "present")) ({fhem ("set HomeStatus Zuhause")})
DOELSEIF ([HomeStatus] eq "Zuhause" and ([Richy_Handy] eq "absent" or [Sylvi_Handy] eq "absent")) ({fhem ("set HomeStatus Weg")})

define RolloSteuerung_Auto
DOIF ([HomeStatus] =~ "Weg|Urlaub" or [Tageslicht] eq "dunkel") (set og_sz_rollo 0)
DOELSEIF ([09:45:00|7]) (set og_sz_rollo 30)
DOELSEIF ([10:15:00|7]) (set og_sz_rollo 100)


Kannst Du mir hier vielleicht noch mal ein wenig unter die Arme greifen?

PS: Nicht über die geschweiften Klammern wundern! Ich hatte die drei DOIF's erst einzeln verwendet (bevor ich es auf DOELSEIF umgestellt habe), um zu testen. Da funktionierte es teilweise. Das Rollo lief zwar hoch und runter, aber der HomeStatus wurde nie geändert. Deswegen habe ich es mit einer Perl- Anweisung probiert.

Hab gerade noch mal ein wenig getestet und geändert. Nun bleibt das DOIF auf cmd_3 stehen und disabled sich wenigstens nicht mehr...

define RolloAnwesenheitsSteuerung_Auto
DOIF ([Tageslicht] eq "hell" and [og_sz_rollo] eq "down" and !$we and ([Richy_Handy] eq "present" or [Sylvi_Handy] eq "present")) (set HomeStatus Zuhause, set og_sz_rollo 100)
DOELSEIF ([Tageslicht] eq "dunkel" and [og_sz_rollo] eq "down" and ([Richy_Handy] eq "present" or [Sylvi_Handy] eq "present")) (set HomeStatus Zuhause)
DOELSEIF ([Tageslicht] eq "hell" and [og_sz_rollo] eq "up" and [HomeStatus] eq "Zuhause" and ([Richy_Handy] eq "absent" or [Sylvi_Handy] eq "absent")) (set HomeStatus Weg, set og_sz_rollo 0)


Ok, jetzt weiß ich auch was cmd_xx bedeutet. :)
Also wurde das dritte DOELSEIF durchgeführt, bzw. treffen die States zu. Allerdings hat es weder das Rollo nach unten gefahren, noch den HomeStatus auf ,,Weg" gesetzt.
RPi 3B+ FHEM-Server mit HM-MOD-RPI-PCB
RPi2 mit HM-MOD-RPI-PCB
HM-CFG-LAN
RPi 4 mit ioBroker
>100 HM Sensoren & Aktoren, div. ESP8266 via mqtt, ems-esp

Ellert

do always ist ein Attribut und gehört nicht in den DEF-Editor. Ich habe es als Hinweis gemeint, das war etwas missverständlich, sorry.

Ich bin mir nicht sicher ob ... and !$we and ... richtig ausgewertet wird.Ich würde es so angeben ...and [?00:00-23:59|8] and... siehe: http://fhem.de/commandref_DE.html#DOIF_Wochentagsteuerung
oder im Befehlsteil eine IF Abfrage machen (IF ($we) (set HomeStatus Zuhause, set og_sz_rollo 100))

In den Bedingungsteil gehören nur Zeiten, Stati, Readings, Internals, Events, bei der Berechnung von Zeiten können Perl Funktionen, wie sunset oder globale Variablen, wie $we, $hms, ... verwendet werden.

Mehr ist mir im Moment nicht aufgefallen.

Wenn das DOIF schaltet und Du bist in der Geräte Detailansicht werden nicht alle Readings aktualisiert. Dann die Seite im Browser aktualisieren, Fehlermeldungen sind erst danach zu sehen.

Hier gibt es noch ein paar Tips zum Erstellen und Editieren von DOIF: http://forum.fhem.de/index.php/topic,45373.msg371668.html#msg371668


Wondermusic

Ich werd wahnsinnig - jetzt funktioniert gar nix mehr...
Nachdem ich den Code um deinen Vorschlag bzgl. !$we geändert habe und ich die Stati für Fall 1 hergestellt habe, hatte ich ganz kurz den HomeStatus Zuhause und das Rollo fuhr hoch. HomeStatus wie gesagt nur kurz, denn 2 Sekunden später wechselte es wieder zurück auf Weg.
Seitdem - egal was ich mache - null Reaktion, auf gar nichts mehr. RPi neugestartet - nüschts. Null Reaktion... So langsam verliere ich meinen Verstand.

Ich hab das mit dem HomeStatus jetzt mal anders gelöst:

define Abwesend watchdog (Richy_Handy:absent|Sylvi_Handy:absent) 00:02 (Richy_Handy:present|Sylvi_Handy:present) {fhem ("set HomeStatus Weg")}
attr Abwesend regexp1WontReactivate 1
define Anwesend watchdog (Richy_Handy:present|Sylvi_Handy:present) 00:02 (Richy_Handy:absent|Sylvi_Handy:absent) {fhem ("set HomeStatus Zuhause")}
attr Anwesend regexp1WontReactivate 1

define RolloAnwesenheitsSteuerung_Auto DOIF ([Tageslicht] eq "hell" and [?og_sz_rollo] eq "down" and [?00:00-23:59|8] and [HomeStatus] eq "Zuhause") (set og_sz_rollo 100)

define RolloSteuerung_Auto DOIF ([HomeStatus] =~ "Weg|Urlaub" or [Tageslicht] eq "dunkel") (set og_sz_rollo 0) DOELSEIF ([09:45:00|7]) (set og_sz_rollo 30) DOELSEIF ([10:15:00|7]) (set og_sz_rollo 100)


Sobald ein Handy im WLan ist, schaltet der Status auf Zuhause - Nur leider fährt das Rollo trotz "Tageslicht=dunkel" nach oben.
Schalte ich alle WLan- Verbindungen aus geht der HomeStatus auf Weg, aber das Rollo fährt nicht runter.
Was stimmt nun wieder nicht? So langsam werd ich bekloppt.

Sorry wenn ich DIch nerven sollte. Aber je länger ich da dran sitze und rum probiere, desto unlogischer wird das ganze.  :o
RPi 3B+ FHEM-Server mit HM-MOD-RPI-PCB
RPi2 mit HM-MOD-RPI-PCB
HM-CFG-LAN
RPi 4 mit ioBroker
>100 HM Sensoren & Aktoren, div. ESP8266 via mqtt, ems-esp

Ellert

Ich kenne Watchdog nicht, daher sage ich auch nichts dazu.
Du schreibst
Zitatdas Rollo fährt nicht runter
, ich sehe nirgends ein set ... runter, also da ich Deine Geräte nicht kenne, weiss ich auch nicht wo es runter fahren soll.

Es wäre ganz hilfreich, wenn Du die DOIF etwas strukturierter darstellst und jedes DOIF für sich. Die sind dann besser lesbar.

So, wie ich das hier gemacht habe:
ZitatDOIF ([HomeStatus] =~ "Weg|Urlaub" or [Tageslicht] eq "dunkel")
   (..)
DOELSEIF ([09:45:00|7] and )
   (set ... 30)
DOELSEIF  ([10:15:00|7])
   (set ... 100)
DOELSEIF ([Tageslicht] eq "dunkel")
   (set ...0)

Dann möchte ich Dich bitten Deine Fragen etwas zu entzerren, sonst muss ich raten auf was Du dich beziehst.
Also ein DOIF darstellen, auf das Du Dich beziehst.
Was soll es machen?
Wie sind die relevanten Stati, Readings, Events, Internals der Eingangsgeräte und Ihre Zeitstempel?
Welche Stati, Readings, Events, Internals verhalten sich nicht wie erwartet?

Wenn Du nach jedem Statuswechsel ein "list <Name des DOIF>" ausführst, hast Du eine Menge Informationen, die Dir helfen das Verhalten des DOIF zu analysieren.

ZitatWas stimmt nun wieder nicht?
Mit den entsprechenden Informationen lässt sich das herausfinden.

Übrigens: PRESENCE triggert nach jedem Intervall.

Wondermusic

Du hast Recht. Sorry, aber ich war eben absolut genervt weil so gar nichts ging...

Zum Watchdog... Der ist dazu da, das die Presence Benachrichtigung eben nur einmal getriggert wird und nicht alle 2 Minuten wie auch der Ping gesendet wird. Sobald quasi einmal presence vorhanden ist, wird nicht mehr danach "gelauscht", sondern  nur noch nach dem absent- Zustand. Ich hoffe ich habe das jetzt so richtig erklärt, aber ich habe noch eine Steckdosensteuerung die ebenfalls mit einem Watchdog läuft, und da wird auch nur jeweils einmal getriggert.

So. Nun noch mal zu den beiden DOIF von oben:

DOIF ([Tageslicht] eq "hell" and [?og_sz_rollo] eq "down" and [?00:00-23:59|8] and [HomeStatus] eq "Zuhause")
   (set og_sz_rollo 100)

Erklärung: Bei Tageslicht UND wenn das Rollo unten ist UND nur an Arbeitstagen UND der HomeStatus Zuhause ist, soll das Rollo komplett hoch fahren.

Der Watchdog funktioniert, denn die HomeStati (Weg/Zuhasue) werden korrekt gesetzt.
Ich habe den Test eben nach Sonnenuntergang durchgeführt. Der Status Tageslicht stand auf "dunkel" und das Rollo war komplett unten. HomeStatus war "Weg".
Dann habe ich WLan  angemacht und kurz gewartet. Der Watchdog stellt den Dummy HomeStatus auf Zuhause. Das Rollo dürfte eigentlich nicht hochfahren, da Tageslicht ja "dunkel" ist.
Leider Fehlanzeige - das Rollo fuhr hoch...


und der andere der das Rollo ab und Wochenende steuert:

DOIF ([HomeStatus] =~ "Weg|Urlaub" or [Tageslicht] eq "dunkel")
   (set og_sz_rollo 0)
DOELSEIF ([09:45:00|7])
   (set og_sz_rollo 30)
DOELSEIF ([10:15:00|7])
   (set og_sz_rollo 100)

Erklärung: Wenn Status Weg|Urlaub ODER nach Sonnenuntergang, soll Rollo runter fahren, sowie am Wochenende um 09:45 Rollo um 30% und um 10:15 Uhr komplett öffnen.

Handy WLan wieder ausgemacht, Watchdog triggert den HomeStatus wieder auf "Weg".
Das Rollo bleibt aber oben und fährt nicht runter.



Tageslicht löse ich wie folgt:

# Tageslicht #
define Tageslicht dummy
define Nacht at *{sunset("CIVIL",0,"16:00","22:30")} set Tageslicht dunkel
define Tag at *{sunrise("CIVIL")} set Tageslicht hell


HomeStatus ist so definiert:

define HomeStatus dummy
attr HomeStatus cmdIcon Zuhause:HOME_Status.1 Weg:HOME_Status.0 Urlaub:HOME_Status.3
attr HomeStatus devStateIcon Zuhause:status_available Weg:status_away_1 Urlaub:status_away_2
attr HomeStatus fp_Eingang1 4,401,5, ,
attr HomeStatus fp_Eingang2 4,474,0,
attr HomeStatus fp_Eingang3 4,474,0,
attr HomeStatus group Homestatus
attr HomeStatus room Übersicht
attr HomeStatus setList state:Zuhause,Weg,Urlaub
attr HomeStatus webCmd Zuhause:Weg:Urlaub


Watchdog der Vollständigkeit halber auch noch mal:

define Abwesend watchdog (Richy_Handy:absent|Sylvi_Handy:absent) 00:02 (Richy_Handy:present|Sylvi_Handy:present)
   {fhem ("set HomeStatus Weg")}
attr Abwesend regexp1WontReactivate 1

define Anwesend watchdog (Richy_Handy:present|Sylvi_Handy:present) 00:02 (Richy_Handy:absent|Sylvi_Handy:absent)
   {fhem ("set HomeStatus Zuhause")}
attr Anwesend regexp1WontReactivate 1


Und sorry nochmal - lag an meiner Verzweiflung und dem Ärger das der logische Aufbau der DOIF's nicht das gemacht hat was es sollte.

Gruß,
Richy
RPi 3B+ FHEM-Server mit HM-MOD-RPI-PCB
RPi2 mit HM-MOD-RPI-PCB
HM-CFG-LAN
RPi 4 mit ioBroker
>100 HM Sensoren & Aktoren, div. ESP8266 via mqtt, ems-esp

Ellert

Ich betrachte erstmal diesen Teil:
ZitatSo. Nun noch mal zu den beiden DOIF von oben:
Code: [Auswählen]

DOIF ([Tageslicht] eq "hell" and [?og_sz_rollo] eq "down" and [?00:00-23:59|8] and [HomeStatus] eq "Zuhause")
   (set og_sz_rollo 100)

Erklärung: Bei Tageslicht UND wenn das Rollo unten ist UND nur an Arbeitstagen UND der HomeStatus Zuhause ist, soll das Rollo komplett hoch fahren.

Der Watchdog funktioniert, denn die HomeStati (Weg/Zuhasue) werden korrekt gesetzt.
Ich habe den Test eben nach Sonnenuntergang durchgeführt. Der Status Tageslicht stand auf "dunkel" und das Rollo war komplett unten. HomeStatus war "Weg".
Dann habe ich WLan  angemacht und kurz gewartet. Der Watchdog stellt den Dummy HomeStatus auf Zuhause. Das Rollo dürfte eigentlich nicht hochfahren, da Tageslicht ja "dunkel" ist.
Leider Fehlanzeige - das Rollo fuhr hoch...

Ich fasse Deine Infos zusammen, wie ich sie verstanden habe:
Vorher:
Dein DOIF state: ?
Tageslicht: dunkel
og_sz_rollo: ? das Rollo war komplett unten
HomeStatus: Weg
Timer_1_c1: ?
Timer_2_c1: ?

Aktion:
ZitatDann habe ich WLan  angemacht und kurz gewartet.

Nachher:
Dein DOIF state: ?
Tageslicht: dunkel
og_sz_rollo: ? das Rollo war komplett unten
HomeStatus: Zuhause
Timer_1_c1: ?
Timer_2_c1: ?

Beobachtung:
Zitatdas Rollo fuhr hoch.

Wie war der Status des DOIF? DOIF führt einen Bedingungszweig nur einmal aus, es sei denn, do always ist gesetzt.
War og_sz_rollo tatsächlich down, Du setzt es jedenfalls nur auf 100, 30 oder 0
Was bedeutet 0, offen oder geschlossen?
Stimmen die Timer? siehe: http://forum.fhem.de/index.php/topic,45428.msg372155.html#msg372155, ggf. dies benutzen: (IF (!$we) (set og_sz_rollo 100))
Das andere DOIF könnte geschaltet haben? Um Wechselwirkungen zu vermeiden, solltest immer nur eine Sache zur Zeit testen. Beim nächsten Test das 2. DOIF deaktivieren.
Grundsätzlich gilt: Wer einschaltet, soll auch ausschalten. Also, wenn das DOIF funktioniert, es mit einem 2. Bedingungszweig erweitern, der das Rolo hochfährt, und danach die Zeitsteuerung einbauen. Dann sparst Du Dir das 2. DOIF.

Wondermusic

#10
Hallo Ellert,

vielen vielen Dank für Deine Hilfe!!!! :) Mit den letzten Tips hast Du mir verdammt gut geholfen!
Die beiden DOIF's sind sich in die Quere gekommen...

Noch mal zur Info: og_sz_rollo 0 = Rollo unten(down)    og_sz_rollo 100 = Rollo oben

Jetzt habe ich es folgendermaßen aufgebaut:
Presence- Benachrichtigung kommt nun über geofence, nicht wie vorher über die ping- Abfrage!


#Homestatus
define HomeRichySylvi DOIF ([HomeRichy] eq "Da" or [HomeSylvi] eq "Da")
   (set HomeStatus Zuhause)
DOELSEIF ([HomeRichy] eq "Weg" and [HomeSylvi] eq "Weg")
   (set HomeStatus Weg)

attr HomeRichySylvi do always


#Watchdog Anwesenheit
define Abwesend_Richy watchdog (Richy_Handy:Weg) 00:03:00 (Richy_Handy:Da) {fhem ("set HomeRichy Weg")};; setstate Anwesend_Richy defined
attr Abwesend_Richy regexp1WontReactivate 1
define Anwesend_Richy watchdog (Richy_Handy:Da) 00:01:00 (Richy_Handy:Weg) {fhem ("set HomeRichy Da")};; setstate Abwesend_Richy defined
attr Anwesend_Richy regexp1WontReactivate 1

define Abwesend_Sylvi watchdog (Sylvi_Handy:Weg) 00:03:00 (Sylvi_Handy:Da) {fhem ("set HomeSylvi Weg")};; setstate Anwesend_Sylvi defined
attr Abwesend_Sylvi regexp1WontReactivate 1
define Anwesend_Sylvi watchdog (Sylvi_Handy:Da) 00:01:00 (Sylvi_Handy:Weg) {fhem ("set HomeSylvi Da")};; setstate Abwesend_Sylvi defined
attr Anwesend_Sylvi regexp1WontReactivate 1


#Rollo Schlafzimmer
define RolloAnwesenheitsSteuerung_Auto DOIF ([Tageslicht] eq "hell" and [?og_sz_rollo] eq "down" and [?10:00-23:59|8] and [HomeStatus] eq "Zuhause")
   (set og_sz_rollo 100)
DOELSEIF ([Tageslicht] eq "hell" and [?og_sz_rollo] eq "down" and [?11:00-23:59|7] and [HomeStatus] eq "Zuhause")
   (set og_sz_rollo 100)
DOELSEIF ([09:45:00|7])
   (set og_sz_rollo 30)
DOELSEIF ([10:15:00|7])
   (set og_sz_rollo 100)
DOELSEIF ([HomeStatus] =~ "Weg|Urlaub" or [Tageslicht] eq "dunkel")
   (set og_sz_rollo 0)

attr RolloAnwesenheitsSteuerung_Auto do always



Jetzt funktioniert alles so wie es soll! Nochmal – vielen Dank für Deine Geduld und Deine Mühe! :)

Gruß,
Richy
RPi 3B+ FHEM-Server mit HM-MOD-RPI-PCB
RPi2 mit HM-MOD-RPI-PCB
HM-CFG-LAN
RPi 4 mit ioBroker
>100 HM Sensoren & Aktoren, div. ESP8266 via mqtt, ems-esp

rizo

Hallo habe gerade das hier gelesen und hoffe ihr könnt mir helfen das auf meine Config umzustellen.

Und zwar habe ich

define Rolladen_Fenster_autooff at *{sunset(-1800,"16:00","22:30")} set Rolladen_Fenster off

Anwesenheitskontrolle mittels Gtags

das funktioniert auch. Nur leider gehen die Rolladen wieder auf wenn Anwesenheit von "absent" auf "present" wechselt.

Bin leider nicht so bewandert und nicht in der Lage gewesen alleine den Code von Wondermusic für meine Bedürfnisse umzustellen.

Mag mir da jmd bei helfen?

Also ich möchte gerne Rolladen Fenster wenn sunset die geschlossen hat, das Anwesenheit keine Auswirkung auf den Zustand hat.

KölnSolar

Du scheinst Dich ja auf das DOIF-Konstrukt zu beziehen. Wie Ellert bereits zu Deinem anderen Thema schrieb, bist Du mit Deiner Fragstellung im DOIF-Subforum besser aufgehoben.
Grüße Markus
RPi3/2 buster/stretch-SamsungAV_E/N-RFXTRX-IT-RSL-NC5462-Oregon-CUL433-GT-TMBBQ-01e-CUL868-FS20-EMGZ-1W(GPIO)-DS18B20-CO2-USBRS232-USBRS422-Betty_Boop-EchoDot-OBIS(Easymeter-Q3/EMH-KW8)-PCA301(S'duino)-Deebot(mqtt2)-zigbee2mqtt