Hallo,
das Modul MCP23017 hat für jeden Ausgang ein Reading mit state on/off.
Ich habe für jedes ein Readingsproxy angelegt um die Ausgänge als Device verwalten zu können.
Über einen Taster wird mittels DOIF der readingsProxy angewiesen ein toggle auszuführen.
Das funktioniert aber nur 1x, da der readingsProxy nicht aktualisiert wird.
Wenn ich den Befehl über die Oberfläche ausführe wird der ReadingsProxy immer aktualisiert (klick auf Symbol oder auf on/off)
jemand eine Idee?
Ausgang
define Led_B0 readingsProxy myMcp20:PortB0
attr Led_B0 setFn {($CMD eq "on")?"PortB0 on":"PortB0 off"}
attr Led_B0 setList on off
Taster
define SchalterA0 readingsProxy myMcp20:PortA0
attr SchalterA0 valueFn { Longpress("SchalterA0",$VALUE);;}
Die Funktion Longpress zählt die Milisekunden wie lange der Taster gedrückt wurde und gibt short oder long zurück. Zum testen habe ich die Funktion umgestellt das er immer short zurück gibt. Der Taster hat damit 3 stati: short oder long (wenn er nicht gedrückt ist),on (während des drückens)
Verknüpfung Taster-Ausgang
define port0.di DOIF ([SchalterA0:?short]) (set Led_B0 toggle)
Events nach erstem drücken des Tasters (Ausgang von off auf on umgeschaltet, wird ausgeführt aber auf der Oberfläche nicht aktualisiert)
2015-02-28 10:33:26 DOIF port0.di cmd_nr: 2
2015-02-28 10:33:26 DOIF port0.di cmd_event: SchalterA0
2015-02-28 10:33:26 DOIF port0.di cmd_2
2015-02-28 10:33:26 readingsProxy SchalterA0 toggle: 1425116006.71585
2015-02-28 10:33:26 readingsProxy SchalterA0 on
2015-02-28 10:33:26 I2C_MCP23017 myMcp20 PortA0: on
2015-02-28 10:33:26 I2C_MCP23017 myMcp20 Ok
2015-02-28 10:33:26 RPI_GPIO INTA Pinlevel: high
2015-02-28 10:33:26 RPI_GPIO INTA on
2015-02-28 10:33:26 RPI_GPIO INTA Toggle: on
2015-02-28 10:33:26 RPI_GPIO INTA Counter: 1133
2015-02-28 10:33:26 readingsProxy SchalterA0 toggle: 0.14379096031189
2015-02-28 10:33:26 DOIF port0.di cmd_nr: 1
2015-02-28 10:33:26 DOIF port0.di cmd_event: SchalterA0
2015-02-28 10:33:26 DOIF port0.di cmd_1
2015-02-28 10:33:26 readingsProxy SchalterA0 short
2015-02-28 10:33:26 I2C_MCP23017 myMcp20 PortA0: off
2015-02-28 10:33:26 I2C_MCP23017 myMcp20 Ok
2015-02-28 10:33:26 I2C_MCP23017 myMcp20 PortB0: on <-- Led auf on geschaltet
2015-02-28 10:33:26 I2C_MCP23017 myMcp20 Ok
2015-02-28 10:33:26 I2C_MCP23017 myMcp20 Ok
2015-02-28 10:33:26 RPI_GPIO INTA Pinlevel: high
2015-02-28 10:33:26 RPI_GPIO INTA on
2015-02-28 10:33:26 RPI_GPIO INTA Toggle: off
2015-02-28 10:33:26 RPI_GPIO INTA Counter: 1134
Status ReadingsProxy Led_B0
lastCmd on 2015-02-28 10:33:26
state off 2015-02-28 10:33:02 <-- off
Status Hardware-Device myMcp20
PortA0 off 2015-02-28 10:33:26
PortA1 off 2015-02-27 15:58:46
PortA2 off 2015-02-27 16:34:40
PortA3 off 2015-02-27 15:50:26
PortA4 off 2015-02-27 15:31:25
PortA5 off 2015-02-27 15:31:25
PortA6 off 2015-02-27 15:31:26
PortA7 off 2015-02-27 15:31:27
PortB0 on 2015-02-28 10:33:26 <-- on
PortB1 off 2015-02-28 10:15:10
PortB2 off 2015-02-28 10:05:00
PortB3 off 2015-02-27 13:00:48
PortB4 off 2015-02-27 12:58:21
PortB5 off 2015-02-27 12:59:56
PortB6 off 2015-02-27 12:59:03
PortB7 off 2015-02-27 12:59:02
state Ok 2015-02-28 10:39:49
Gruß
Thomas
Habe das ganze nochmal über einen notify versucht umzusetzen und dort das gleiche Problem.
define SchalterA1.notify notify SchalterA1:short set Led_B1 toggle
Der Status wird ebenfalls nicht aktualisiert.
Wenn ich in der Eingabezeile trigger SchalterA1 short eingebe funktioniert alles korrekt, wenn ich den Taster selber drücke, funktioniert es nicht mehr.
Keine Ahnung wo ich da ansetzen könnte um den Fehler zu finden
Gruß
Thomas
Funktioniert folgendes?
attr Led_B0 setFn {($CMD eq "on")?"PortB0 off":"PortB0 on"}