Hallo,
ich versuche gerade mein Garagentor welches über KNX angesteuert wird, in FHEM einzubinden.
Ich habe folgende Gruppenadressen:
7/5/1 = open / close
7/5/2 = stop
7/5/7 = Status Open
7/5/8 = Statur Closed
Mein List sieht nun so aus:
Internals:
CFGFN
DEF 7/5/1:dpt1.009 7/5/2:dpt1.008 7/5/7:dpt1.002 7/5/8:dpt1.002
DEVNAME garage
IODev KNX
KNX_MSGCNT 8
KNX_RAWMSG C101ew750801
KNX_TIME 2019-05-28 22:19:44
LASTInputDev KNX
MSGCNT 8
NAME garage
NR 4635
NTFY_ORDER 50-garage
STATE true
TYPE KNX
Gaddr:
1 7/5/1
2 7/5/2
3 7/5/7
4 7/5/8
Gcode:
1 7501
2 7502
3 7507
4 7508
Model:
1 dpt1.009
2 dpt1.008
3 dpt1.002
4 dpt1.002
Readings:
2019-05-28 22:19:24 getG3 false
2019-05-28 22:19:44 getG4 true
2019-05-28 22:19:44 last-sender 1/0/30
2019-05-28 22:19:23 setG1 closed
2019-05-28 22:19:44 state true
Readingsname:
Attributes:
IODev KNX
eventMap /on:runter/off:rauf
Ich kann wunderbar das Tor auf und Zu machen. Nur in der Übersicht steht bei mir dann immer der Wert "true". Ich würde gerne erreichen, dass dort halt der jeweilige Status steht. Also geöffnet oder geschlossen. Im List sehen ich ja auch unter setG1 closed.
Ich komme leider nicht drauf, was ich noch einstellen muss, damit alles richtig angezeigt wird und anstatt true entsprechend closed oder open steht, bzw. noch besser geöffnet oder geschlossen.
Ich weiß auch nicht ob ich die Gruppenadresse in der richtigen Reihenfolge angegeben habe, bzw. ob das wichtig ist ? Auch beim DPT Wert bin ich nicht sicher. 1.008 müsste laut Handbuch eher 1.010 sein, aber das kann wohl mein FHEM nicht. Ist auch schon 1,5 Jahre ca. alt.
Grundsätzlich läuft alles. Ich kann das Tor ja hoch und runter fahren. Nur werden die Werte noch nicht richtig angezeigt bzw. der Status.
Kann mir jemand helfen ?
Grüße,
Visionsurfer
Sowas wie
attr XXX stateCmd { \
if (ReadingsVal($name,"getG3",undef) eq "true"){\
return "Garage zu"\
}\
else { \
return "Garage offen"\
}\
}
???
sG
Joe
ok. Danke. Das muss ich dann heute Abend mal ausprobieren, ob es so funktioniert. Dachte dass es vielleicht einen leichteren Weg gibt ?
Da wäre ich nie alleine drauf gekommen.
Grüße,
Visionsurfer
Grüße
es sind ja eigentlich sogar 3 Zustände. Wenn beide Endpositionen false melden, wird sich das Tor gerade bewegen (oder steht irgendwo in der Mitte).
attr XXX stateCmd { \
if (ReadingsVal($name,"getG3",undef) eq "true"){\
return "Garage offen"\
}\
elsif (ReadingsVal($name,"getG4",undef) eq "true"){\
return "Garage zu"\
}\
else { \
return "Garagentor fährt"\
}\
}
Also ich habe den Code mal mit eingebaut, wobei ich nicht weiß ob ich es richtig gemacht habe.
Leider scheint es nicht zu funktionieren. Der Status ist immer noch so wie vorher.
Ich habe zwei verschiedene List´s.
Wenn ich den Button "rauf" drücke, sieht das List danach wie folgt aus:
Internals:
CFGFN
DEF 7/5/1:dpt1.009 7/5/2:dpt1.008 7/5/7:dpt1.002 7/5/8:dpt1.002
DEVNAME garage
IODev KNX
KNX_MSGCNT 40
KNX_RAWMSG C101ew750701
KNX_TIME 2019-05-29 20:43:25
LASTInputDev KNX
MSGCNT 40
NAME garage
NR 4635
NTFY_ORDER 50-garage
STATE true
TYPE KNX
Gaddr:
1 7/5/1
2 7/5/2
3 7/5/7
4 7/5/8
Gcode:
1 7501
2 7502
3 7507
4 7508
Model:
1 dpt1.009
2 dpt1.008
3 dpt1.002
4 dpt1.002
Readings:
2019-05-29 20:43:25 getG3 true
2019-05-29 20:43:09 getG4 false
2019-05-29 20:43:25 last-sender 1/0/30
2019-05-29 20:43:09 setG1 open
2019-05-29 19:21:53 state true
Readingsname:
Attributes:
IODev KNX
eventMap /on:runter/off:rauf
stateCmd { \ if (ReadingsVal($name,"getG3",undef) eq "true"){\ return "Garage offen"\ }\ elsif (ReadingsVal($name,"getG4",undef) eq "true"){\ return "Garage zu"\ }\ else { \ return "Garagentor fährt"\ }\ }
Wenn ich den Button "runter" drücke, ist das List wie folgt:
Internals:
CFGFN
DEF 7/5/1:dpt1.009 7/5/2:dpt1.008 7/5/7:dpt1.002 7/5/8:dpt1.002
DEVNAME garage
IODev KNX
KNX_MSGCNT 42
KNX_RAWMSG C101ew750801
KNX_TIME 2019-05-29 20:45:22
LASTInputDev KNX
MSGCNT 42
NAME garage
NR 4635
NTFY_ORDER 50-garage
STATE true
TYPE KNX
Gaddr:
1 7/5/1
2 7/5/2
3 7/5/7
4 7/5/8
Gcode:
1 7501
2 7502
3 7507
4 7508
Model:
1 dpt1.009
2 dpt1.008
3 dpt1.002
4 dpt1.002
Readings:
2019-05-29 20:45:01 getG3 false
2019-05-29 20:45:22 getG4 true
2019-05-29 20:45:22 last-sender 1/0/30
2019-05-29 20:45:00 setG1 closed
2019-05-29 19:21:53 state true
Readingsname:
Attributes:
IODev KNX
eventMap /on:runter/off:rauf
stateCmd { \ if (ReadingsVal($name,"getG3",undef) eq "true"){\ return "Garage offen"\ }\ elsif (ReadingsVal($name,"getG4",undef) eq "true"){\ return "Garage zu"\ }\ else { \ return "Garagentor fährt"\ }\ }
Kann jemand erkennen wo da noch ein Fehler ist ? Der Status bleibt weiterhin auf "true".
Grüße,
Visionsurfer
Grüße,
ich benutze das ganz ähnlich, hier ein Beispiel:
Internals:
CFGFN
DEF 5/1/6:dpt1.002:get 5/1/7:dpt1.002:get 5/0/6:dpt1.002:listenonly 5/0/7:dpt1.002:listenonly
DEVNAME KNX_0501006
FIRSTGADNAME g1
FVERSION 10_KNX.pm:0.174710/2018-10-07
GETSTRING g2:noArg g3:noArg g4:noArg g1:noArg
IODev KNX
KNX_MSGCNT 19
NAME KNX_0501006
SETSTRING
STATE geschlossen
TYPE KNX
GADDETAILS:
g1:
CODE 05106
GROUP 5/1/6
MODEL dpt1.002
NO 1
OPTION get
RDNAMEGET getG1
RDNAMEPUT putG1
RDNAMESET
SETLIST :false,true
g2:
CODE 05107
GROUP 5/1/7
MODEL dpt1.002
NO 2
OPTION get
RDNAMEGET getG2
RDNAMEPUT putG2
RDNAMESET
SETLIST :false,true
g3:
CODE 05006
GROUP 5/0/6
MODEL dpt1.002
NO 3
OPTION listenonly
RDNAMEGET getG3
RDNAMEPUT putG3
RDNAMESET
SETLIST :false,true
g4:
CODE 05007
GROUP 5/0/7
MODEL dpt1.002
NO 4
OPTION listenonly
RDNAMEGET getG4
RDNAMEPUT putG4
RDNAMESET
SETLIST :false,true
GADTABLE:
05006 g3
05007 g4
05106 g1
05107 g2
READINGS:
2019-05-30 08:18:24 getG1 false
2019-05-30 08:18:24 getG2 false
2019-05-30 08:18:23 getG3 false
2019-05-30 08:18:24 getG4 false
2019-05-30 08:18:24 last-sender 1/0/15
2019-05-30 08:18:24 state false
Attributes:
IODev KNX
devStateIcon offen:fts_window_1w_open gekippt:fts_window_1w_tilt geschlossen:fts_window_1w
stateFormat {if(ReadingsVal($name,'getG1',0) eq "true") {"offen"} else {if(ReadingsVal($name,'getG2',0) eq "true") {"gekippt"} else {"geschlossen"}}}
Ich benutze zwar stateFormat anstatt stateCmd, um dann nur das devStateIcon zu setzen. Aber stateCmd sollte auch gehen:
stateFormat {if(ReadingsVal($name,'getG1',0) eq "true") {"offen"} else {if(ReadingsVal($name,'getG2',0) eq "true") {"gekippt"} else {"geschlossen"}}}
Also ich sehe den Fehler nicht :(
Was mir sonst auffällt:
- Dein eventMap macht nichts, da dpt1.002, 1.008, 1.009 nie on oder off liefern
- Dein list-Ergebnis sieht anders aus als meins. Z.B. habe ich da "GADDETAILS", dafür kein "Model"
Danke für die Info. Ja mein Setup ist schon über 1,5 Jahre alt und in der Zeit auch keine Updates mehr in FHEM. Somit ist mein FHEM und die Module nicht auf dem neusten Stand.
Eventuell liegt da der Unterschied zu deinem List?
Aber unabhängig davon, müsste es ja trotzdem irgendwie gehen, dass ich in meinen Status den richtigen Wert bekomme? Ich weiß leider nur nicht wie.
Grüße,
Visionsurfer
Warum versuchst du nicht einfach dem Hinweis von GammaTwin nachzugehen?
Einfach seinen Code anpassen und probieren. Für mich jedenfalls ist er schlüssig.
Ja ich versuche es ja zu verstehen. Mir fehlen da noch ein bisschen die Zusammenhänge.
@GammaTwin
Kannst du kurz schreiben, für was deine vier Gruppenadressen stehen ? Weil vielleicht hilft es dann ein bisschen zu verstehen, wie ich es bei mir abwandeln kann.
Ich hatte ja in meinem ersten Posting meine 4 Gruppenadresse beschrieben, wobei ich eigentlich die STOP Gruppenadresse nicht brauche. Mein Tor soll nur hoch oder runter fahren. Mehr muss es nicht können.
Grüße,
Visionsurfer
Du musst nur die getG? anpassen.
Versuche es mal so:
attr garage stateFormat {if(ReadingsVal($name,'getG3',0) eq "true") {"offen"} else {if(ReadingsVal($name,'getG4',0) eq "true") {"geschlossen"} }}
In der Sekunde wo du es geschrieben hast, habe ich es verstanden :) Ich hatte es gerade mal probiert, bzw. diese G1 und G2 usw. richtig gedeutet.
Funktioniert super.
Vielen Dank.
Trotzdem habe ich noch eine Frage:
Jetzt wird total sauber geschlossen und offen im Status angezeigt. Alles perfekt.
In den paar Sekunden wo das Tor fährt, wird aber nichts angezeigt. Da wo sonst geschlossen und offen drin steht, steht in den paar Sekunden einfach nichts drin. Solange bis die Werte sich aktualisieren.
Gibt es eine Möglichkeit in der Zeit sowas wie "Tor fährt" anzeigen zu lassen ? Wenn ja wie, an welcher Stelle müsste man das mit einbauen ? Auch in der gleichen Zeile ?
So müsste es klappen
attr garage stateFormat {if(ReadingsVal($name,'getG3',0) eq "true") {"offen"} else {if(ReadingsVal($name,'getG4',0) eq "true") {"geschlossen"} else {"Tor in Bewegung"}}}
TOP tausend Dank. Funktioniert perfekt.