Autor Thema: DOIF erweitern  (Gelesen 522 mal)

Offline Feinfinger

  • New Member
  • *
  • Beiträge: 26
DOIF erweitern
« am: 15 Mai 2018, 06:58:20 »
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

Offline nils_

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 895
Antw:DOIF erweitern
« Antwort #1 am: 15 Mai 2018, 08:44:41 »
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.

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!)

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!

Offline Feinfinger

  • New Member
  • *
  • Beiträge: 26
Antw:DOIF erweitern
« Antwort #2 am: 15 Mai 2018, 14:42:58 »
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
« Letzte Änderung: 15 Mai 2018, 14:47:30 von Feinfinger »

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 9660
    • Otto's Technik Blog
Antw:DOIF erweitern
« Antwort #3 am: 15 Mai 2018, 15:00:44 »
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
« Letzte Änderung: 15 Mai 2018, 16:54:31 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi,HMLAN,HMUART,Homematic,Fritz!Box 7490,Sonos,ET9200,Arduino nano,ESP8266

Offline nils_

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 895
Antw:DOIF erweitern
« Antwort #4 am: 15 Mai 2018, 15:08:32 »
So wie Du es jetzt hast, macht der erste sofort und ALLE anderen nach einer Sekunde (gleichzeitig)
laut commandref
Zitat
Die 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!

Offline Feinfinger

  • New Member
  • *
  • Beiträge: 26
Antw:DOIF erweitern
« Antwort #5 am: 15 Mai 2018, 15:24:33 »
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?

Offline Per

  • Hero Member
  • *****
  • Beiträge: 1262
Antw:DOIF erweitern
« Antwort #6 am: 15 Mai 2018, 16:49:59 »
Wenn 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!).

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 9660
    • Otto's Technik Blog
Antw:DOIF erweitern
« Antwort #7 am: 15 Mai 2018, 16:55:14 »
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
RaspberryPi,HMLAN,HMUART,Homematic,Fritz!Box 7490,Sonos,ET9200,Arduino nano,ESP8266

Offline Feinfinger

  • New Member
  • *
  • Beiträge: 26
Antw:DOIF erweitern
« Antwort #8 am: 15 Mai 2018, 17:49:03 »
Also ich habe nur einen Zentralen Taster.

Kann oder muss ich noch weitere DOIF Zweige einpflegen um die gewünschten Funktionen zu erhalten?

Offline Feinfinger

  • New Member
  • *
  • Beiträge: 26
Antw:DOIF erweitern
« Antwort #9 am: 15 Mai 2018, 23:07:00 »
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)



Offline Per

  • Hero Member
  • *****
  • Beiträge: 1262
Antw:DOIF erweitern
« Antwort #10 am: 16 Mai 2018, 11:16:40 »
"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.

Offline Feinfinger

  • New Member
  • *
  • Beiträge: 26
Antw:DOIF erweitern
« Antwort #11 am: 16 Mai 2018, 11:38:26 »
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.

Offline Per

  • Hero Member
  • *****
  • Beiträge: 1262
Antw:DOIF erweitern
« Antwort #12 am: 16 Mai 2018, 15:48:53 »
Ok, nachdem ich nach "Taster" suchte, bin ich jetzt der Meinung, das "Taster" und "Rollo_Master" von dir synonym genutzt wurden.
Damit passt alles.

Offline Feinfinger

  • New Member
  • *
  • Beiträge: 26
Antw:DOIF erweitern
« Antwort #13 am: 16 Mai 2018, 17:01:26 »
Stimmt auffallend genau  :)

Danke vielmals!

 

decade-submarginal