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
Versuche im zweiten Zweig eine "or" Verknüpfung.
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
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 | ?
...
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).
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...!
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ß ;)