Hallo,
ich würde gerne meinem KNX-Aktor (Licht), in FHEM, eine Toggle-Funktion spendieren. Dazu habe ich im ersten Schritt das Attribut useSetExtensions aktiviert. Damit wird zumindest das toggle Command erkannt. Wenn ich im Forum richtig gelesen habe, muss ich eventMap noch anpassen, verstehe aber an der Stelle die Zusammenhänge noch nicht. Hier mein Device:
defmod LichtOG KNX 1/1/0:dpt1:steuern:set 1/1/1:dpt1:status:get
attr LichtOG IODev KNX
attr LichtOG devStateIcon status-on:FS20.on:Aus status-off:FS20.off:Ein steuern.*:hourglass:Aus
attr LichtOG eventMap /steuern on:An/steuern off:Aus/
attr LichtOG room Licht
attr LichtOG stateRegex /steuern-[sg]et:/steuern-/ /status-get:/status-/
attr LichtOG useSetExtensions 1
setstate LichtOG status-off
setstate LichtOG 2021-11-03 16:35:55 on
setstate LichtOG 2021-11-04 12:35:30 last-sender 1/0/110
setstate LichtOG 2021-11-02 13:18:47 off
setstate LichtOG 2021-11-02 13:18:47 on
setstate LichtOG 2021-11-04 12:35:30 state status-off
setstate LichtOG 2021-11-04 12:35:30 status-get off
setstate LichtOG 2021-11-04 12:35:30 steuern-set off
Kann mir jemand helfen? Ist es überhaupt bei jedem Device möglich, mit den Bordmitteln den Zustand zu togglen, oder muss man bei manchen Devices über Perl gehen?
Du gehts das zu kompliziert an!
probier mal folgendes:
defmod LichtOG KNX 1/1/0:dpt1:steuern:set 1/1/1:dpt1:status:get
attr LichtOG devStateIcon on:FS20.on:off off:FS20.off:off
attr LichtOG room Licht
du findest dann (im detail view des devices) ein SET-pulldown mit on, off, toggle.
oder als cmd in der FHEM cmd-line:
set LichtOG toggle
#bzw.
set LichtOG steuern toggle
in der cmd-referenz ist dann noch ein Attribut: KNX_toggle beschrieben, ich denke das braucht du für diesen Fall nicht!
useSetextensions braucht man nicht für KNX-devices....
...ich gehe von einem aktuellen FHEM aus...
l.g. erwin
Zitat von: erwin am 04 November 2021, 13:50:19
Du gehts das zu kompliziert an!
....
mhm, ok...eigentlich setzte ich auf ein Beispiel hier aus dem Forum, um den "echten" Status des Aktors zurückzulesen und zur Anzeige zu bringen (dazwischen die Sanduhr). Ich finde das eigentlich ganz charmant und würde es gerne so beibehalten.
du hast eine Rückmeldung vom KNX-Aktor und zwar im reading: status-get !
Die Sanduhr wirst du in deinem Fall nie sehen, weil der Schalt-Aktor einfach zu schnell ist.
Um dieses reading als aktuellen status für toggle zu verwenden, mach noch das Attribut:
attr LichtOG KNX_toggle $self:status-get
hinzu.
In der cmd-ref ist das unter dem Attr: KNX_toggle besschreiben.
PS: die erweiterten Beispiele sind ab sofort im wiki unter: https://wiki.fhem.de/wiki/KNX_Device_Definition_-_Beispiele (https://wiki.fhem.de/wiki/KNX_Device_Definition_-_Beispiele) noch ausführlicher beschrieben.
l.g. erwin
ok...ich mache da erstmal meine Hausaufgaben:-)
Vielen Dank Erwin
Hallo erwin,
ich habe mich jetzt an dieses Beispiel aus dem Wiki angelehnt:
define dpt1_1tst KNX 14/1/1:dpt1:EinAus:set 14/2/1:dpt1:Status:listenonly:nosuffix
attr dpt1_1tst devStateIcon on:general_an:Aus off:general_aus:Ein steuern.*:hourglass:Aus
attr dpt1_1tst stateRegex /EinAus-set/steuern-/ /EinAus-get//
...hier fehlte mir nur noch das Attribute stateFormat Status. Ist das devStateIcon mit on:...:aus & off:...:ein so korrekt, oder sollten die Befehle nicht konsequent in Englisch gehalten werden?
Dieses Resultat funktioniert für mich soweit:
defmod LichtTechnikraum KNX 1/0/0:dpt1:EinAus:set 1/0/1:dpt1:status:get:nosuffix
attr LichtTechnikraum IODev KNX
attr LichtTechnikraum KNX_toggle $self:status
attr LichtTechnikraum devStateIcon on:FS20.on:off off:FS20.off:on steuern.*:hourglass:off
attr LichtTechnikraum room Licht
attr LichtTechnikraum stateFormat status
attr LichtTechnikraum stateRegex /EinAus-set/steuern/ /EinAus-get//
attr LichtTechnikraum webCmd :
...mit zwei Einschränkungen:
- Im set pulldown erscheint toggle nur unter EinAus (Internal SETSTRING SETSTRING on:noArg off:noArg EinAus:on,off,toggle)
- wenn ich den Aktor jetzt betätige (auch mit on oder off) dann wechselt das Icon mehrfach seinen Zustand, also von set off nach set on sehe ich: FS20.off - FS20.on - FS20.off - FS20.on
2. hängt irgendwie mit stateFormat zusammen, aber so ganz verstehe ich es nicht
Hi,
ZitatIm set pulldown erscheint toggle nur unter EinAus
Ja, das ist Absicht, bei der Bedienung via FHEMWEB braucht man kein toggle, beim klicken auf das DevStateIcon wird immer implizit der richtige set cmd gesendet.
Bei KNX gibts ja in 99,99% der Fälle ein status GA, das jeweils den richtigen Zustand repräsentiert! - Im Gegensatz zu anderen Steuerungssystemen....
Das toogle cmd wurde für das scripting (AT,notify,doif...) entwickelt, und da ist die Angabe von <gadName> zumutbar!
Abgesehen davon geht ein set on|off|toggle|... nur für die jeweils ERSTE GA-definition im device!
Zitatwenn ich den Aktor jetzt betätige (auch mit on oder off) dann wechselt das Icon mehrfach seinen Zustand, also von set off nach set on sehe ich: FS20.off - FS20.on - FS20.off - FS20.on
Das kann ich nicht nachvollziehen, möglicherweise sind da noch Reste von einem gelöschten eventmap aktiv,
fall das nach fhem restart immer noch auftritt, bitte um:
1) list <device>
2) eventmonitor wo man da sehen kann!
l.g. erwin
Hi Erwin,
hier die Details zum Device:
Internals:
.TOGGLESRC LichtTechnikraum:status
DEF 1/0/0:dpt1:EinAus:set 1/0/1:dpt1:status:get:nosuffix
DEVNAME LichtTechnikraum
FIRSTGADNAME EinAus
FUUID 610d1916-f33f-8af0-2b65-74630a8761f4f2b5
GETSTRING status:noArg
IODev KNX
KNX_MSGCNT 71
KNX_RAWMSG C01064w0100100
KNX_TIME 2021-11-10 13:10:43
LASTInputDev KNX
MSGCNT 71
NAME LichtTechnikraum
NR 151
SETSTRING on:noArg off:noArg EinAus:on,off,toggle
STATE off
TYPE KNX
model dpt1
.attraggr:
.attrminint:
GADDETAILS:
EinAus:
CODE 01000
GROUP 1/0/0
MODEL dpt1
NO 1
OPTION set
RDNAMEGET EinAus-get
RDNAMEPUT EinAus-put
RDNAMESET EinAus-set
SETLIST :on,off,toggle
status:
CODE 01001
GROUP 1/0/1
MODEL dpt1
NO 2
OPTION get
RDNAMEGET status
RDNAMEPUT status
RDNAMESET status
SETLIST :on,off,toggle
GADTABLE:
01000 EinAus
01001 status
READINGS:
2021-11-10 13:10:43 EinAus-get off
2021-11-10 13:09:49 EinAus-set off
2021-11-10 12:43:20 IODev KNX
2021-11-10 13:10:43 last-sender 1.0.100
2021-11-10 12:43:20 off
2021-11-10 13:10:43 state off
2021-11-10 13:10:43 status off
2021-11-10 12:43:20 status-get off
2021-11-10 12:43:20 steuern-set off
Attributes:
IODev KNX
KNX_toggle $self:status
devStateIcon on:FS20.on:off off:FS20.off:on steuern.*:hourglass:off
room Licht
stateFormat status
stateRegex /EinAus-set/steuern/ /EinAus-get//
webCmd :
Ein Video mit dem Effekt und dem Eventlog hänge ich als Datei an.
Vielen Dank
Michael
Sorry, auf dem Video ist kein change zu erkennen, weder im detail-view, noch im eventmonitor....
Zitat von: erwin am 10 November 2021, 14:16:22
Sorry, auf dem Video ist kein change zu erkennen, weder im detail-view, noch im eventmonitor....
mhm, dann weiß ich nicht genau was du erwartest? Ich sehe im Video, dass in Sekunde 9 das Icon beim Wechsel von "on" nach "off" zwischenzeitlich noch einmal "on" darstellt, also: on - off - on - off
Wie kann ich den change anders darstellen?
mmh,
da hat mir mein VLC player einen streich gespielt... der zeigt offensichlich bei mir nur das 1 frame von dem Video....
mit Windows media player sehe ich es, obwohl er zurst meckert, das er das format nicht kennt....
ich schau mir das nochmal an!
Ich kann das mehrfache on/off nicht erkennen, weder im Video, noch im eventmonitor:
um 13:09:43 machst du "set L... EinAus-set on
darauf antwortet der Aktor innerhalb derselben Sekunde mit: status on
...und das Icon geht auf on!
später, um
13:09:49 machst du ein set L... EinAus-set off (schön am Video zu sehen)
darauf antwortet der aktor mit: status off (um 13:09:50)
...und das Icon geht auf off!
Nachdem dein Icon ja vom reading: status abhängt (attr stateFormat status) gibts in dem Video nur 2 Zustände.
ok, vielleicht hilft die Betrachtung der Einzelbilder (Anhang)? Es passiert bei Bild 0046. Vielleicht hat es mit dem Browserupdate zu tun? Im gleichen Bild verschwindet ja auch die Markierung des Set Buttons.
ok, gesehen hab ich's, erklären kann ich es nicht!
Vor allem kommen nach Bild 41 keine weiteren events, die irgendwas bewirken könnten!
Deine Vermutung -Browserupdate hat was für sich - hast du schon mit einem anderen Browser versucht? Es ist genau nur 1 Frame, das sieht man im Video einfach nicht!
Oder sitzt irgendwo im system ein schelmisches notify,doif,... das ein setreading o.ä. macht ? :( Das timing könnte passen!
l.g. erwin