Hauptmenü

DOIF erweitern

Begonnen von Feinfinger, 15 Mai 2018, 06:58:20

Vorheriges Thema - Nächstes Thema

Feinfinger

Hallo zusammen,

nachdem ich so meine ersten Schritte in FHEM getan hab und mich auch soweit ganz gut eingefunden habe, stehe ich jetzt vor einem(für die Profis kleinen) Problem.

Mit diesem doif steuere ich meine Rolladen.

rolladenstatus_di DOIF ([Rollo_Master:state] eq "on") (set R_Kinderzimmer_1 off)(set R_Kinderzimmer_2 off)(set R_Kueche off)(set R_Balkontuer off)(set R_Esszimmer off)(set R_Wohnzimmer off)(set R_Buero off)(set R_Hauswirtsschaftsraum off)(set R_Badezimmer_unten off)(set R_Gaeste_WC off)


attr rolladenstatus_di do always
attr rolladenstatus_di room Rolladensteuerung
attr rolladenstatus_di wait 0,1,1,1,1,1,1,1,1,1


Das gleiche doif nutze ich auch für  runter.

Nun möchte ich gerne, das wenn der Rollo_Master zwischen 6-9 Uhr betätigt wird und [Bewohner:anwesend] sind, das alle Rolladen ausser der Kinderzimmer angefahren werden.

Wenn niemand zu Hause ist bzw. der Taster nach 9 betätigt wird sollen alle fahren.

Laut meiner Auffassung sollte das ja mit einem DOELSE zu realisieren sein, allerdings weiß ich dann nicht wie das attr wait sich verhält, denn diese Verzögerung benötige ich auf jeden Fall um sicher zu stellen, das auch alle Rollos angefahren werden.

Vielleicht kann man das Ganze ja auch einkürzen?!?

Wäre nett, wenn mir da ma jemand unter die Arme greifen würde.


Gruß Dirk
Proxmox VM - MAPLE-CUL - SIGNALDINO

nils_

Zitat von: Feinfinger am 15 Mai 2018, 06:58:20
Mit diesem doif steuere ich meine Rolladen.

rolladenstatus_di DOIF ([Rollo_Master:state] eq "on") (set R_Kinderzimmer_1 off)(set R_Kinderzimmer_2 off)(set R_Kueche off)(set R_Balkontuer off)(set R_Esszimmer off)(set R_Wohnzimmer off)(set R_Buero off)(set R_Hauswirtsschaftsraum off)(set R_Badezimmer_unten off)(set R_Gaeste_WC off)


attr rolladenstatus_di do always
attr rolladenstatus_di room Rolladensteuerung
attr rolladenstatus_di wait 0,1,1,1,1,1,1,1,1,1


Das gleiche doif nutze ich auch für  runter.

wie das gleiche?? also gibt es schon einen DOELSEIF-Zweig??
poste doch mal bitte ein komplettes list von dem DOIF.

Zitat von: Feinfinger am 15 Mai 2018, 06:58:20
Nun möchte ich gerne, das wenn der Rollo_Master zwischen 6-9 Uhr betätigt wird und [Bewohner:anwesend] sind, das alle Rolladen ausser der Kinderzimmer angefahren werden.

Wenn niemand zu Hause ist bzw. der Taster nach 9 betätigt wird sollen alle fahren.

dann schreib doch die bedingungen dafür erstmal zusammen hin, in die verschiedenen DOELSEIF-Zweige. (Verbessern kann man hinterher!)

Zitat von: Feinfinger am 15 Mai 2018, 06:58:20
Laut meiner Auffassung sollte das ja mit einem DOELSE zu realisieren sein, allerdings weiß ich dann nicht wie das attr wait sich verhält, denn diese Verzögerung benötige ich auf jeden Fall um sicher zu stellen, das auch alle Rollos angefahren werden.
wait verhält sich wie hier beschrieben: https://fhem.de/commandref_DE.html#DOIF_wait
also kein problem, wenn du es für die verzögerung nutzen möchtest....
viele Wege in FHEM es gibt!

Feinfinger

#2
Hallo,

Ich habe mich vielleicht etwas mißverständlich ausgedrückt, es gibt keinen DOELSEIF Zweig sondern für runter ein zweites DOIF.

rolladenstatusrunter_di DOIF ([Rollo_Master:state] eq "off") (set R_Kinderzimmer_1 on)(set R_Kinderzimmer_2 on)(set R_Kueche on)(set R_Balkontuer on)(set R_Esszimmer on)(set R_Wohnzimmer on)(set R_Buero on)(set R_Hauswirtsschaftsraum on)(set R_Badezimmer_unten on)(set R_Gaeste_WC on)

Mein Ansatz wäre wie folgt:

rolladenstatus_di DOIF ([Rollo_Master:state] eq "on" and [?Bewohner:state] eq "zuhause" and [?06:00-09:00]) (set R_Kinderzimmer_2 off)(set R_Kueche off)(set R_Balkontuer off)(set R_Esszimmer off)(set R_Wohnzimmer off)(set R_Buero off)(set R_Hauswirtsschaftsraum off)(set R_Badezimmer_unten off)(set R_Gaeste_WC off) DOELSEIF ([Rollo_Master:state] eq "on") (set R_Kinderzimmer_1 off)(set R_Kinderzimmer_2 off)(set R_Kueche off)(set R_Balkontuer off)(set R_Esszimmer off)(set R_Wohnzimmer off)(set R_Buero off)(set R_Hauswirtsschaftsraum off)(set R_Badezimmer_unten off)(set R_Gaeste_WC off) DOELSEIF ([Rollo_Master:state] eq "off") (set R_Kinderzimmer_1 on)(set R_Kinderzimmer_2 on)(set R_Kueche on)(set R_Balkontuer on)(set R_Esszimmer on)(set R_Wohnzimmer on)(set R_Buero on)(set R_Hauswirtsschaftsraum on)(set R_Badezimmer_unten on)(set R_Gaeste_WC on)

Wenn das so passen sollte, kann ich mir das zweite DOIF für "runter" sparen!

attr wait sollte dann so richtig sein?

0,1,1,1,1,1,1,1,1,1:0,1,1,1,1,1,1,1,1,1:0,1,1,1,1,1,1,1,1,1
Proxmox VM - MAPLE-CUL - SIGNALDINO

Otto123

#3
Hi,

wozu die Verzögerung?

So wie Du es jetzt hast, macht der erste sofort und ALLE anderen nach einer Sekunde (gleichzeitig)
Stimmt nicht - Siehe Commandref
Ich starte alle Rollos (Homematic) zur gleichen Zeit mit set Rollo.* - und sie fahren alle schön nacheinander, weil ja einzel Befehle daraus werden.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

nils_

Zitat von: Otto123 am 15 Mai 2018, 15:00:44
So wie Du es jetzt hast, macht der erste sofort und ALLE anderen nach einer Sekunde (gleichzeitig)
laut commandref
ZitatDie Verzögerungszeit bezieht sich immer auf den vorherigen Befehl.

sollten sich alle befehle (wenn sie denn in extra klammern stehen ;) ) um jeweils 1 sekunde verzögern.
ob es so nötig ist oder nicht sei mal dahingestellt.
viele Wege in FHEM es gibt!

Feinfinger

So wie Nils das sieht, sehe ich das auch.

Die Verzögerung brauche ich, damit alle sauber fahren, ohne diese kann es passieren, das einige Rolladen aufgrund der Funkflut nicht fahren.

Ist mein Ansatz denn ok?
Proxmox VM - MAPLE-CUL - SIGNALDINO

Per

Zitat von: Feinfinger am 15 Mai 2018, 14:42:58Wenn das so passen sollte, kann ich mir das zweite DOIF für "runter" sparen!
Wenn du keine Tippfehler drin hast, passt das so.
ABER gewöhn dir bitte die Benutzung von <Enter> bei Code an, sonst können dir die Handy-User nicht richtig helfen.

Für die beiden anderen Wünsche (Taster nach 9 und 6-9 + anwesend) kannst du weitere DOIF-Zweige einführen, allerdings würde ich dazu noch mit FILTER arbeiten.
Hast du nur einen Taster? Falls ja, würde ich das (oder ein) Rollo in der Nähe des Tasters ohne Verzögerung auslösen. Hast du mehrere (je Zimmer) auch, allerdings wird dann die Logik etwas aufwendiger (hier zahlt sich eine sinnvolle Namenskonvention schnell aus!).

Otto123

Zitat von: nils_ am 15 Mai 2018, 15:08:32
laut commandref
sollten sich alle befehle (wenn sie denn in extra klammern stehen ;) ) um jeweils 1 sekunde verzögern.
ob es so nötig ist oder nicht sei mal dahingestellt.
Wo Du Recht hast, hast Du Recht  :D
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Feinfinger

Also ich habe nur einen Zentralen Taster.

Kann oder muss ich noch weitere DOIF Zweige einpflegen um die gewünschten Funktionen zu erhalten?
Proxmox VM - MAPLE-CUL - SIGNALDINO

Feinfinger

Hallo nochmal,

ich habe jetzt mal versucht, die Änderungs bzw. Verbesserungsvorschläge einfließen zu lassen.

Bevor ich das DOIF allerdings auf meine Familie loslassen möchte, würde ich euch bitten nochmal Korrektur zu lesen :-)

rolladen_di DOIF ([Rollo_Master:state] eq "on" and [?Bewohner:state] eq "home" and [?06:00-09:00]) (set R_Kueche:FILTER=STATE!=off off)(set R_Balkontuer:FILTER=STATE!=off off)
                                      (set R_Esszimmer:FILTER=STATE!=off off)(set R_Wohnzimmer:FILTER=STATE!=off off)(set R_Buero:FILTER=STATE!=off off)(set R_Hauswirtsschaftsraum:FILTER=STATE!=off off)
                                      (set R_Badezimmer_unten:FILTER=STATE!=off off)(set R_Gaeste_WC:FILTER=STATE!=off off)(set R_Kinderzimmer_2:FILTER=STATE!=off off)

DOELSEIF ([Rollo_Master:state] eq "on") (set R_Kueche:FILTER=STATE!=off off)(set R_Balkontuer:FILTER=STATE!=off off)(set R_Esszimmer:FILTER=STATE!=off off)
                 (set R_Wohnzimmer:FILTER=STATE!=off off)(set R_Buero:FILTER=STATE!=off off)(set R_Hauswirtsschaftsraum:FILTER=STATE!=off off)(set R_Badezimmer_unten:FILTER=STATE!=off off)
                 (set R_Gaeste_WC:FILTER=STATE!=off off)(set R_Kinderzimmer_1:FILTER=STATE!=off off)(set R_Kinderzimmer_2:FILTER=STATE!=off off)

DOELSEIF ([Rollo_Master:state] eq "off") (set R_Kueche:FILTER=STATE!=on on)(set R_Balkontuer:FILTER=STATE!=on on)(set R_Esszimmer:FILTER=STATE!=on on)
                  (set R_Wohnzimmer:FILTER=STATE!=on on)(set R_Buero on)(set R_Hauswirtsschaftsraum:FILTER=STATE!=on on)(set R_Badezimmer_unten:FILTER=STATE!=on on)
                  (set R_Gaeste_WC:FILTER=STATE!=on on)(set R_Kinderzimmer_1:FILTER=STATE!=on on)(set R_Kinderzimmer_2:FILTER=STATE!=on on)


Proxmox VM - MAPLE-CUL - SIGNALDINO

Per

"Taster" fehlt noch, ansonsten passt es so. Von evtl. Tippfehlern mal abgesehen.

Noch zwei Anmerkungen für "später":
- Falls du den Status von Rollo_Master tauschen kannst (on statt off und off statt on) könntest du statt der Worte on und off mit [Rollo_Master] arbeiten. Klingt zwar mehr, aber dafür könntest du einen DOIF-Zweig sparen
- Da sich Case 1 und Case 2 nur durch R_Kinderzimmer_2 unterscheidet, kannst du auch
DOELSEIF ([Rollo_Master:state] eq "on") (set R_Kinderzimmer_2:FILTER=STATE!=off off) (set $SELF cmd_1)
schreiben.

Feinfinger

Vielen Dank Per!

Was meinst du mit Taster? Die Taster für jeden einzelnen Rolladen?

Falls ja, das sind Fernbedienungen von Nobily die den Status direkt im device ändern und somit bei der Abfrage nicht berücksichtigt werden müssen.
Proxmox VM - MAPLE-CUL - SIGNALDINO

Per

Ok, nachdem ich nach "Taster" suchte, bin ich jetzt der Meinung, das "Taster" und "Rollo_Master" von dir synonym genutzt wurden.
Damit passt alles.

Feinfinger

Stimmt auffallend genau  :)

Danke vielmals!
Proxmox VM - MAPLE-CUL - SIGNALDINO