DOIF: Zustandsänderung, wann ändert sich cmdState

Begonnen von moonsorrox, 03 Mai 2016, 23:23:57

Vorheriges Thema - Nächstes Thema

moonsorrox

ich habe mir ein DOIF erstellt welches mir in meiner RSS Anzeige den Status zweier Rollläden anzeigen soll, und zwar so, dass nur wenn beide Rollläden unten sind soll er mir "Geschlossen" anzeigen, das funktioniert auch soweit.
Genauso wenn beide geöffnet sind zeigt er mir "Offen"

Wenn die Rolläden geschlosssen state:off haben und ich jetzt einen Rollladen nur ein Stück nach oben fahre hat er ja nicht mehr den Status "off", dass DOIF registriert dieses aber nicht und bleibt bei seinem cmdState "Geschlossen", wie kann ich jetzt erreichen das es sofort bei Statusänderung cmdState ändert..?

Ich hatte das versucht in ein Dummy zu schreiben, deshalb also auch "set du_RollladenWZ_Zustand off" aber das brauche ich ja nicht ich kann ja das DOIF selbst abfragen. Ich brauche eigentlich nur den reinen Status (state) und gar keinen set Befehl, ist also zu vernachlässigen.

list vom DOIF
Internals:
   CFGFN      ./FHEM/Wohnzimmer.cfg
   DEF        ([RollladenWZ:state] eq "off" and [RollladenWZT:state] eq "off") (set du_RollladenWZ_Zustand off) DOELSEIF ([RollladenWZ:state] ne "off" and [RollladenWZT:state] ne "off") (set du_RollladenWZ_Zustand on)
   NAME       di_Rollladen_RSS_Anzeige
   NR         636
   NTFY_ORDER 50-di_Rollladen_RSS_Anzeige
   STATE      Geschlossen
   TYPE       DOIF
   Readings:
     2016-05-03 23:12:23   Device          RollladenWZT
     2016-05-03 23:12:23   cmd             1
     2016-05-03 23:12:23   cmd_event       RollladenWZT
     2016-05-03 23:12:23   cmd_nr          1
     2016-05-03 23:12:23   e_RollladenWZT_state off
     2016-05-03 23:12:22   e_RollladenWZ_state off
     2016-05-03 23:12:23   state           Geschlossen
   Condition:
     0          ReadingValDoIf($hash,'RollladenWZ','state','','',AttrVal($hash->{NAME},'notexist',undef)) eq "off" and ReadingValDoIf($hash,'RollladenWZT','state','','',AttrVal($hash->{NAME},'notexist',undef)) eq "off"
     1          ReadingValDoIf($hash,'RollladenWZ','state','','',AttrVal($hash->{NAME},'notexist',undef)) ne "off" and ReadingValDoIf($hash,'RollladenWZT','state','','',AttrVal($hash->{NAME},'notexist',undef)) ne "off"
   Devices:
     0           RollladenWZ RollladenWZT
     1           RollladenWZ RollladenWZT
     all         RollladenWZ RollladenWZT
   Do:
     0:
       0          set du_RollladenWZ_Zustand off
     1:
       0          set du_RollladenWZ_Zustand on
   Helper:
     event      deviceMsg: Runter (to HMUSB),level: 0,motor: stop:Runter,pct: 0,Runter,timedOn: Runter
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   RollladenWZT
     timerevent deviceMsg: Runter (to HMUSB),level: 0,motor: stop:Runter,pct: 0,Runter,timedOn: Runter
     triggerDev RollladenWZT
     timerevents:
       deviceMsg: Runter (to HMUSB)
       level: 0
       motor: stop:Runter
       pct: 0
       Runter
       timedOn: Runter
     timereventsState:
       deviceMsg: Runter (to HMUSB)
       level: 0
       motor: stop:Runter
       pct: 0
       state: off
       timedOn: Runter
     triggerEvents:
       deviceMsg: Runter (to HMUSB)
       level: 0
       motor: stop:Runter
       pct: 0
       Runter
       timedOn: Runter
     triggerEventsState:
       deviceMsg: Runter (to HMUSB)
       level: 0
       motor: stop:Runter
       pct: 0
       state: off
       timedOn: Runter
   Internals:
   Itimer:
   Readings:
     0           RollladenWZ:state RollladenWZT:state
     1           RollladenWZ:state RollladenWZT:state
     all         RollladenWZ:state RollladenWZT:state
   Regexp:
     0:
     All:
   State:
   Trigger:
Attributes:
   alias      RSS - Anzeige Rollläden Wohnzimmer (DOIF)
   cmdState   Geschlossen|Offen
   do         always
   group      Anzeige
   room       AutomationTest,Wohnzimmer
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Ellert

Versuche im zweiten Zweig eine "or" Verknüpfung.

moonsorrox

wo meinst du genau..?
anstatt DOELSEIF... das geht nicht

und hier
([RollladenWZ:state] ne "off" and [RollladenWZT:state] ne "off") (set du_RollladenWZ_Zustand on)

dann fragt er ja nur einen Rollladen ab, dass ist ja nicht gewollt
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

Ellert

Zitatanstatt DOELSEIF... das geht nicht
Nicht "anstatt" sondern "im" und im zweiten Zweig gibt es nur eine Stelle mit Verknüpfung.
Zitatdann fragt er ja nur einen Rollladen ab, dass ist ja nicht gewollt

Hier hast Du das noch gewollt, oder?
Zitatich jetzt einen Rollladen nur ein Stück nach oben fahre hat er ja nicht mehr den Status "off", dass DOIF registriert dieses aber nicht und bleibt bei seinem cmdState "Geschlossen", wie kann ich jetzt erreichen das es sofort bei Statusänderung cmdState ändert..?
Wass möchtest Du eigentlich denn genau?

Du hast 3 Bedingungsoperanden schreib mal alle Kombinationen, und die dazu gehörenden Zustände auf, dann können wir mal weiter schauen.

A    B     C      | X
off  off  off     | ?
off  off  on     | ?
...

Per

Z.Zt. willst du mit einen zweigliedrigen DOIF drei Zustände darstellen. Das klappt nicht.
Du willst aber alles offen (a eq off and b eq off), alles zu (a ne off and b ne off) und eins offen (else).

moonsorrox

OK evtl habe ich einen Denkfehler drin... :-\

Ich hatte angenommen, wenn beide Rollläden "Geschlossen" also "off" sind, dann macht er ein
"set du_RollladenWZ_Zustand off"... das macht er ja auch..!
mit diesem Zweig
([RollladenWZ:state] eq "off" and [RollladenWZT:state] eq "off") (set du_RollladenWZ_Zustand off)

jetzte fahre ich den RollladenWZT (Rollladen Terrasse) abends noch einmal nur ein Stück hoch (Lüftungsposition oder was auch immer), also ist er nicht mehr "off"
wenn nur einer auf "off" steht wird ja "set du_RollladenWZ_Zustand off" nicht ausgeführt, richtig..?
Da sollte er mir dann im cmdState "Offen" anzeigen und das bekommt wohl das DOIF nicht mit und macht es somit nicht.

Ich werde das jetzt mal so machen und heute Abend mal schauen...!
([RollladenWZ:state] eq "off" and [RollladenWZT:state] eq "off") (set du_RollladenWZ_Zustand off) DOELSEIF ([RollladenWZ:state] eq "off" and [RollladenWZT:state] ne "off") (set du_RollladenWZ_Zustand on)

Dieser Zweig:
wenn beide offen sind, zeige ich zwar an aber frage ich "momentan" nicht ab, kann ich auch weglassen...!
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM

moonsorrox

#6
ZitatWass möchtest Du eigentlich denn genau?

Du hast 3 Bedingungsoperanden schreib mal alle Kombinationen, und die dazu gehörenden Zustände auf, dann können wir mal weiter schauen.

A    B     C      | X
off  off  off     | ?
off  off  on     | ?
...

dazu folgendes nochmal da die Anzeige heute auf "Offen" steht, was ja im Prinzip richtig ist, denn der Rollladen ist ja Oben/Offen...
...aber der andere ist auch "Offen" somit muss ich das wohl doch mit abfragen um es auszuschließen.
Ich weiß nicht aber ich dachte das ist wesentlich einfacher darzustellen...!  :-\

Um es mal so zu beschreiben es gibt diese Zustände, denn mit obigen Beispiel weiß ich nichts so recht anzufangen
Ich frage nur die Zustände ab:
- wenn beide WZ und WZT geschlossen sind (off)
- wenn der Rollladen Terrasse WZT wieder geöffnet wird (on/Offen erreicht er an fast allen Fällen nicht)

Rollladen WZ  Rollladen WZT
     off                   off
     on                   on
     off                nicht off

bei WZT "nicht off" schreibe ich deshalb, weil er jede andere Position haben kann wie off ob nun Lüftungsposition 50% oder 70%, ganz offen erreicht er nur wenn ich tatsächlich mal raus gehe und das sehe ich ja dann.

Wenn beide offen sind ist das ja meistens am Tage und da brauche ich das ja nicht, dass sehe ich ja ;) aber Abends oder auch noch viel später sehe ich das eben nicht mehr, aber auf's Tablet schaue ich bevor ich schlafen gehe  :P ;)

Ich habe das jetzt mal so gemacht:
([RollladenWZ:state] eq "off" and [RollladenWZT:state] eq "off") (set du_RollladenWZ_Zustand off) DOELSEIF ([RollladenWZ:state] eq "off" and [RollladenWZT:state] ne "off") (set du_RollladenWZ_Zustand on) DOELSE

mit cmdState Geschlossen|WZT|Offen

ich frage dann die Readings "Geschlosssen" und "WZT" in der RSS Datei ab, mal schauen heute Abend... :)
Habe das jetzt schon mal getestet und es wird in meiner RSS Anzeige angezeigt so wie ich es haben möchte  :)

Danke euch für den Denkanstoß  ;)
Intel-NUC i5: FHEM-Server 6.1 :: Perl v5.18.2

Homematic: HM-USB-CFG2,HM-CFG-LAN Adapter, HM-LC-BL1-FM, HM-LC-Sw1PBU-FM, HM-LC-Sw1-PI-2, HM-WDS10-TH-O, HM-CC-TC, HM-LC-SW2-FM