Garagentor mit KNX und FHEM

Begonnen von visionsurfer, 28 Mai 2019, 22:51:12

Vorheriges Thema - Nächstes Thema

visionsurfer

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

JoeALLb

Sowas wie

attr XXX stateCmd { \
if (ReadingsVal($name,"getG3",undef) eq "true"){\
  return "Garage zu"\
}\
else { \
  return "Garage offen"\
}\
}


???

sG
Joe
FHEM-Server auf IntelAtom+Debian (8.1 Watt), KNX,
RasPi-2 Sonos-FHEM per FHEM2FHEM,RasPi-3 Versuchs-RasPi für WLAN-Tests
Gateways: DuoFern Stick, CUL866 PCA301, CUL HM, HMLan, JeeLink, LaCrosse,VCO2
Synology. Ardurino UNO für 1-Wire Tests, FB7270

visionsurfer

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

GammaTwin

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"\
}\
}

visionsurfer

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

GammaTwin

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"

visionsurfer

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

Shadow3561

Warum versuchst du nicht einfach dem Hinweis von GammaTwin nachzugehen?
Einfach seinen Code anpassen und probieren. Für mich jedenfalls ist er schlüssig.

visionsurfer

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

Shadow3561

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"} }}

visionsurfer

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 ?

Shadow3561

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"}}}


visionsurfer

TOP tausend Dank. Funktioniert perfekt.