Rolladen Steuerung mittels MCP23017 und Taster

Begonnen von IPPhoner2b, 09 November 2014, 15:27:10

Vorheriges Thema - Nächstes Thema

IPPhoner2b

Hi Klaus,

Die anderen Chips habe ich noch nicht im Code gehabt, weil es ja eigentlich nur die Reserve Chips sind, die noch nicht weiter im Einsatz geplant sind.

Jedenfalls ansprechen kann ich sie alle richtig, nur wenn ich den 21er rausnehme, scheint es ohne Probleme zu klappen.

IPPhoner2b

Also, was mir auffällt ist, dass diese Verzögerungen nur durch die Taster verursacht werden, und in den Dummys, die das Fahren der Rollos regeln.

Wenn ich die einzelnen Ausgänge direkt über das Web IF schalte, und dabei ist es egal, welchen der 4 Chips ich anspreche, ist wenn die Maustaste gerade unten ankommt, sofort die LED an, also da ist überhaupt keine Verzögerung, erst dann, wenn wirklich geschaltet werden soll, oder so.

Habe den selben Test auch nochmals mit den Include Dateien gemacht, und da ist es genauso, wie wenn alles in der großen Config steht.

Habe dann sogar die MCPs einzeln definiert, das funktioniert genauso, und es ändert sich überhaupt nix an der Geschwindigkeit, oder ich habe es nicht richtig gemacht, hier mal der Code:
###############################################################################
##      ZUR ERKLÄRUNG
# define chip RPII2C 1              #IODev für I2C Version 0 (alt) oder 1 (neu) definieren 
# define mcp_20 I2C_MCP23017 0x20   #MCP23017 definieren (0x20=Hardwareadresse)
# attr mcp_20 IODev chip            #IODev dem MCP23017 zuweisen
# attr mcp_20 OutputPorts A0,A1,A2  #Ports A0 bis A2 als Output definieren


#define chip RPII2C 1
#attr chip group MCP23017
#attr chip verbose 5

###############################################################################
##
##  MCP23017-0x20###
##
###############################################################################
define chip_20 RPII2C 1
attr chip_20 group MCP23017
define mcp_20 I2C_MCP23017 0x20
attr mcp_20 IODev chip_20
attr mcp_20 Interrupt B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_20 InterruptOut connected_active-low
attr mcp_20 OnStartup A0=off,A1=off,A2=off,A3=off,A4=off,A5=off,A6=off,A7=off
attr mcp_20 OutputPorts A0,A1,A2,A3,A4,A5,A6,A7
attr mcp_20 Pullup B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_20 group MCP23017
attr mcp_20 invert_input B0,B1,B2,B3,B4,B5,B6,B7
#
#  Interrupt A & B  ####
#  RPI_GPIO 14 ist der Eingangspin am Raspberry, um die Schalter einzulesen
define Interrupt20 RPI_GPIO 14
attr Interrupt20 active_low yes
attr Interrupt20 direction input
attr Interrupt20 group MCP23017
attr Interrupt20 interrupt both
attr Interrupt20 userReadings test {fhem ("get mcp_20")}
###############################################################################
##
##  MCP23017-0x21###
##
###############################################################################
define chip_21 RPII2C 1
attr chip_21 group MCP23017
define mcp_21 I2C_MCP23017 0x21
attr mcp_21 IODev chip_21
attr mcp_21 OnStartup A0=off,A1=off,A2=off,A3=off,A4=off,A5=off,A6=off,A7=off,B0=off,B1=off,B2=off,B3=off,B4=off,B5=off,B6=off,B7=off
attr mcp_21 OutputPorts A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_21 group MCP23017
###############################################################################
##
##  MCP23017-0x22###
##
###############################################################################
define chip_22 RPII2C 1
attr chip_22 group MCP23017
define mcp_22 I2C_MCP23017 0x22
attr mcp_22 IODev chip_22
attr mcp_22 OnStartup A0=off,A1=off,A2=off,A3=off,A4=off,A5=off,A6=off,A7=off,B0=off,B1=off,B2=off,B3=off,B4=off,B5=off,B6=off,B7=off
attr mcp_22 OutputPorts A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_22 group MCP23017

###############################################################################
##
##  MCP23017-0x24###
##
###############################################################################
define chip_24 RPII2C 1
attr chip_24 group MCP23017
define mcp_24 I2C_MCP23017 0x24
attr mcp_24 IODev chip_24
attr mcp_24 Interrupt B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_24 InterruptOut connected_active-low
attr mcp_24 OnStartup A0=off,A1=off,A2=off,A3=off,A4=off,A5=off,A6=off,A7=off
attr mcp_24 OutputPorts A0,A1,A2,A3,A4,A5,A6,A7
attr mcp_24 Pullup B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_24 group MCP23017
attr mcp_24 invert_input B0,B1,B2,B3,B4,B5,B6,B7
#
###  Interrupt A & B  ####
#  RPI_GPIO 15 ist der Eingangspin am Raspberry, um die Schalter einzulesen
define Interrupt24 RPI_GPIO 15
attr Interrupt24 active_low yes
attr Interrupt24 direction input
attr Interrupt24 group MCP23017
attr Interrupt24 interrupt both
attr Interrupt24 userReadings test {fhem ("get mcp_24")}
###############################################################################


So war es vorher original:
###############################################################################
##      ZUR ERKLÄRUNG
# define chip RPII2C 1              #IODev für I2C Version 0 (alt) oder 1 (neu) definieren 
# define mcp_20 I2C_MCP23017 0x20   #MCP23017 definieren (0x20=Hardwareadresse)
# attr mcp_20 IODev chip            #IODev dem MCP23017 zuweisen
# attr mcp_20 OutputPorts A0,A1,A2  #Ports A0 bis A2 als Output definieren


define chip RPII2C 1
attr chip group MCP23017
#attr chip verbose 5

###############################################################################
##
##  MCP23017-0x20###
##
###############################################################################
define mcp_20 I2C_MCP23017 0x20
attr mcp_20 IODev chip
attr mcp_20 Interrupt B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_20 InterruptOut connected_active-low
attr mcp_20 OnStartup A0=off,A1=off,A2=off,A3=off,A4=off,A5=off,A6=off,A7=off
attr mcp_20 OutputPorts A0,A1,A2,A3,A4,A5,A6,A7
attr mcp_20 Pullup B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_20 group MCP23017
attr mcp_20 invert_input B0,B1,B2,B3,B4,B5,B6,B7
#
#  Interrupt A & B  ####
#  RPI_GPIO 14 ist der Eingangspin am Raspberry, um die Schalter einzulesen
define Interrupt20 RPI_GPIO 14
attr Interrupt20 active_low yes
attr Interrupt20 direction input
attr Interrupt20 group MCP23017
attr Interrupt20 interrupt both
attr Interrupt20 userReadings test {fhem ("get mcp_20")}
###############################################################################
##
##  MCP23017-0x21###
##
###############################################################################
define mcp_21 I2C_MCP23017 0x21
attr mcp_21 IODev chip
attr mcp_21 OnStartup A0=off,A1=off,A2=off,A3=off,A4=off,A5=off,A6=off,A7=off,B0=off,B1=off,B2=off,B3=off,B4=off,B5=off,B6=off,B7=off
attr mcp_21 OutputPorts A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_21 group MCP23017
###############################################################################
##
##  MCP23017-0x22###
##
###############################################################################
define mcp_22 I2C_MCP23017 0x22
attr mcp_22 IODev chip
attr mcp_22 OnStartup A0=off,A1=off,A2=off,A3=off,A4=off,A5=off,A6=off,A7=off,B0=off,B1=off,B2=off,B3=off,B4=off,B5=off,B6=off,B7=off
attr mcp_22 OutputPorts A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_22 group MCP23017

###############################################################################
##
##  MCP23017-0x24###
##
###############################################################################
define mcp_24 I2C_MCP23017 0x24
attr mcp_24 IODev chip
attr mcp_24 Interrupt B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_24 InterruptOut connected_active-low
attr mcp_24 OnStartup A0=off,A1=off,A2=off,A3=off,A4=off,A5=off,A6=off,A7=off
attr mcp_24 OutputPorts A0,A1,A2,A3,A4,A5,A6,A7
attr mcp_24 Pullup B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_24 group MCP23017
attr mcp_24 invert_input B0,B1,B2,B3,B4,B5,B6,B7
#
###  Interrupt A & B  ####
#  RPI_GPIO 15 ist der Eingangspin am Raspberry, um die Schalter einzulesen
define Interrupt24 RPI_GPIO 15
attr Interrupt24 active_low yes
attr Interrupt24 direction input
attr Interrupt24 group MCP23017
attr Interrupt24 interrupt both
attr Interrupt24 userReadings test {fhem ("get mcp_24")}
###############################################################################


Es ist aber egal, ob ich den 21er, oder den 22er, oder beide rausnehme, das Verhalten ist danach extrem langsam.

Langsam denke ich, dass es mit meiner gebauten Platine zusammenhängt, allerdings finde ich keinen Fehler im Aufbau, denn funktionieren tuts ja, wenn auch etwas langsamer.

Die Interrupt Pins der Chips 21 und 22 sind nicht in Benutzung, allerdings finde ich im "Apptime Log" immer was von bsp. Hash notify a21a7 usw, obwohl der Chip 21 überhaupt nicht genutzt wird in dem Script.

klausw

Das define <name> RPII2C 1 sollte nur 1x definiert werden.
Den Interrupt Eingang vom Pi würde ich nur auf eine Flanke setzen. Da sonst  auch beim Rücksetzen ein Interrupt ausgelöst wird.
In deinem vermutlich auf "rising". Oder ohne "active_low" auf "falling"

Beobachte doch mal in der Weboberfläche wie die Schaltereingänge reagieren, sobald du auf einen Knopf drückst.
Wenn du sofort eine Änderung siehst dann vermute ich das Problem in dem hoch_runterfahr notify

RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

IPPhoner2b

Hallo Klaus,

Also im Web IF kommt beim schalten die Anzeige auch erst nach ca. 3-4 Sekunden, und dann kommt auch erst die Led.

Wenn ich den Interrupt nur auf "rising " setze, wird denn dann der Eingang auch wieder zurückgesetzt? Weil sonst würde die Rollosteuerung ja noch denken, dass der Eingang belegt ist, obwohl der Schalter längst auf neutral steht.

Mich wundert auch bei dem define für jeden Mcp einzeln, dass es sich genauso verhält, als wenn ich alle auf einmal gesetzt habe. Also ich kann keinen Unterschied feststellen. Werde es aber wieder zurückändern.

Ist jedenfalls merkwürdig, dass er, sobald ich 3 oder 4 MCPs definiert habe, dass dann auf einmal alles langsam wird, obwohl ja nur Ausgänge definiert sind, die aber nicht mal Verwendung finden. Und dann eben bei Apptime das Phänomen, dass der Hash für den nicht benötigten MCP da mit drin steht.

Über Web IF wie gesagt überhaupt keine Trägheit zu erkennen.

klausw

Zitat von: IPPhoner2b am 01 Dezember 2014, 18:18:27
Hallo Klaus,

Also im Web IF kommt beim schalten die Anzeige auch erst nach ca. 3-4 Sekunden, und dann kommt auch erst die Led.

in deinem rollokli steht folgendes:
fhem "define kli_down at +00:00:01 set aklir off-for-timer 5";
Das bedeutet, runter/hochfahren wird erst 1s später gestartet ...das führt schonmal zu mind 1s Zeitverzögerung.
Ist während der 3-4s die Weboberfläche nutzbar, oder hängt sie?

Zitat von: IPPhoner2b am 01 Dezember 2014, 18:18:27
Wenn ich den Interrupt nur auf "rising " setze, wird denn dann der Eingang auch wieder zurückgesetzt? Weil sonst würde die Rollosteuerung ja noch denken, dass der Eingang belegt ist, obwohl der Schalter längst auf neutral steht.
Der Int Ausgang nimmt im Interruptfall den eingestellten Pegel an. Schau einfach mal in das Datenblatt, da ist es beschrieben.
In deinem Fall (active_low) wird der Pegel im Falle eines Interrupts von Vcc auf 0V gezogen und bleibt dort, bis die Werte aus dem MCP gelesen werden. In diesem Moment geht der Pegel wieder hoch (was aber für dich uninteressant ist). Einfach gesagt: bei jeder Änderung an einem Interruptfähigen Eingangspin wird der Int_Out auf 0V gezogen.
Da du am Pi-GPIO auch active_low eingestellt hast, muss der Interrupt folglich auf "rising" stehen.
[/quote]

Zitat von: IPPhoner2b am 01 Dezember 2014, 18:18:27
Mich wundert auch bei dem define für jeden Mcp einzeln, dass es sich genauso verhält, als wenn ich alle auf einmal gesetzt habe. Also ich kann keinen Unterschied feststellen. Werde es aber wieder zurückändern.
es wundert mich nicht, die Befehle werden sequentiell ausgeführt, also kommen sich die Definitionen nicht ins Gehege. Aber es macht keinen Sinn und kann zu Problemen führen.
Zitat von: IPPhoner2b am 01 Dezember 2014, 18:18:27

Ist jedenfalls merkwürdig, dass er, sobald ich 3 oder 4 MCPs definiert habe, dass dann auf einmal alles langsam wird, obwohl ja nur Ausgänge definiert sind, die aber nicht mal Verwendung finden. Und dann eben bei Apptime das Phänomen, dass der Hash für den nicht benötigten MCP da mit drin steht.

Über Web IF wie gesagt überhaupt keine Trägheit zu erkennen.
Im Apptime stehen nur die Readingproxy drin, oder?
Das ist denke ich normal.

Nochmal zum mitmeißeln:
mit 2 MCP23017 Definitionen läuft alles normal?
sobald du eine dritte hinzufügst dann wird es langsam? In diesem Fall fügst du keine weiteren notify hinzu?
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

IPPhoner2b

Hi Klaus,

hatte das System gestern abgebaut (mein Vater war zu Besuch, und er soll davon ja noch nix mitbekommen  ::) ), werde es gleich aber wieder anschließen.

Also dass durch das Rollokli 1s verzögert wird, das ist mir klar bewusst. Aber wie du im letzten Absatz beschrieben hast, ich definiere nur den 3. oder 4. Chip dazu, und die dazugehörigen 16 bzw. 32 Ausgänge.

Mehr mache ich nicht. Und danach wirds langsam...

Da ich dafür noch keine Verwendung habe, habe ich auch noch keine zusätzlichen Notifys oder ähnliches eingesetzt. Aber bei 32 Ausgängen ists natürlich ne ganze Ecke an Code mehr, aber daran dürfte sich doch FHEM noch nicht aufhängen, wenn ich lese, was manche Leute hier für Configs haben.

Das ist alles, was ich hinzufüge:
define mcp_21 I2C_MCP23017 0x21
attr mcp_21 IODev chip
attr mcp_21 OnStartup A0=off,A1=off,A2=off,A3=off,A4=off,A5=off,A6=off,A7=off,B0=off,B1=off,B2=off,B3=off,B4=off,B5=off,B6=off,B7=off
attr mcp_21 OutputPorts A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_21 group MCP23017

define a21a0 readingsProxy mcp_21:PortA0
attr a21a0 alias Ausgang Chip21 Port A0
attr a21a0 devStateIcon aus:off an:on
attr a21a0 eventMap on:aus off:an
attr a21a0 group OutputPorts
attr a21a0 setFn {($CMD eq "on")?"PortA0 off":"PortA0 on"}
attr a21a0 setList off on
attr a21a0 valueFn {($VALUE eq "on")?"off":"on"}

define a21a1 readingsProxy mcp_21:PortA1
attr a21a1 alias Ausgang Chip21 Port A1
attr a21a1 devStateIcon aus:off an:on
attr a21a1 eventMap on:aus off:an
attr a21a1 group OutputPorts
attr a21a1 setFn {($CMD eq "on")?"PortA1 off":"PortA1 on"}
attr a21a1 setList off on
attr a21a1 valueFn {($VALUE eq "on")?"off":"on"}

define a21a2 readingsProxy mcp_21:PortA2
attr a21a2 alias Ausgang Chip21 Port A2
attr a21a2 devStateIcon aus:off an:on
attr a21a2 eventMap on:aus off:an
attr a21a2 group OutputPorts
attr a21a2 setFn {($CMD eq "on")?"PortA2 off":"PortA2 on"}
attr a21a2 setList off on
attr a21a2 valueFn {($VALUE eq "on")?"off":"on"}

define a21a3 readingsProxy mcp_21:PortA3
attr a21a3 alias Ausgang Chip21 Port A3
attr a21a3 devStateIcon aus:off an:on
attr a21a3 eventMap on:aus off:an
attr a21a3 group OutputPorts
attr a21a3 setFn {($CMD eq "on")?"PortA3 off":"PortA3 on"}
attr a21a3 setList off on
attr a21a3 valueFn {($VALUE eq "on")?"off":"on"}

define a21a4 readingsProxy mcp_21:PortA4
attr a21a4 alias Ausgang Chip21 Port A4
attr a21a4 devStateIcon aus:off an:on
attr a21a4 eventMap on:aus off:an
attr a21a4 group OutputPorts
attr a21a4 setFn {($CMD eq "on")?"PortA4 off":"PortA4 on"}
attr a21a4 setList off on
attr a21a4 valueFn {($VALUE eq "on")?"off":"on"}

define a21a5 readingsProxy mcp_21:PortA5
attr a21a5 alias Ausgang Chip21 Port A5
attr a21a5 devStateIcon aus:off an:on
attr a21a5 eventMap on:aus off:an
attr a21a5 group OutputPorts
attr a21a5 setFn {($CMD eq "on")?"PortA5 off":"PortA5 on"}
attr a21a5 setList off on
attr a21a5 valueFn {($VALUE eq "on")?"off":"on"}

define a21a6 readingsProxy mcp_21:PortA6
attr a21a6 alias Ausgang Chip21 Port A6
attr a21a6 devStateIcon aus:off an:on
attr a21a6 eventMap on:aus off:an
attr a21a6 group OutputPorts
attr a21a6 setFn {($CMD eq "on")?"PortA6 off":"PortA6 on"}
attr a21a6 setList off on
attr a21a6 valueFn {($VALUE eq "on")?"off":"on"}

define a21a7 readingsProxy mcp_21:PortA7
attr a21a7 alias Ausgang Chip21 Port A7
attr a21a7 devStateIcon aus:off an:on
attr a21a7 eventMap on:aus off:an
attr a21a7 group OutputPorts
attr a21a7 setFn {($CMD eq "on")?"PortA7 off":"PortA7 on"}
attr a21a7 setList off on
attr a21a7 valueFn {($VALUE eq "on")?"off":"on"}

define a21b0 readingsProxy mcp_21:PortB0
attr a21b0 alias Ausgang Chip21 Port B0
attr a21b0 devStateIcon aus:off an:on
attr a21b0 eventMap on:aus off:an
attr a21b0 group OutputPorts
attr a21b0 setFn {($CMD eq "on")?"PortB0 off":"PortB0 on"}
attr a21b0 setList off on
attr a21b0 valueFn {($VALUE eq "on")?"off":"on"}

define a21b1 readingsProxy mcp_21:PortB1
attr a21b1 alias Ausgang Chip21 Port B1
attr a21b1 devStateIcon aus:off an:on
attr a21b1 eventMap on:aus off:an
attr a21b1 group OutputPorts
attr a21b1 setFn {($CMD eq "on")?"PortB1 off":"PortB1 on"}
attr a21b1 setList off on
attr a21b1 valueFn {($VALUE eq "on")?"off":"on"}

define a21b2 readingsProxy mcp_21:PortB2
attr a21b2 alias Ausgang Chip21 Port B2
attr a21b2 devStateIcon aus:off an:on
attr a21b2 eventMap on:aus off:an
attr a21b2 group OutputPorts
attr a21b2 setFn {($CMD eq "on")?"PortB2 off":"PortB2 on"}
attr a21b2 setList off on
attr a21b2 valueFn {($VALUE eq "on")?"off":"on"}

define a21b3 readingsProxy mcp_21:PortB3
attr a21b3 alias Ausgang Chip21 Port B3
attr a21b3 devStateIcon aus:off an:on
attr a21b3 eventMap on:aus off:an
attr a21b3 group OutputPorts
attr a21b3 setFn {($CMD eq "on")?"PortB3 off":"PortB3 on"}
attr a21b3 setList off on
attr a21b3 valueFn {($VALUE eq "on")?"off":"on"}

define a21b4 readingsProxy mcp_21:PortB4
attr a21b4 alias Ausgang Chip21 Port B4
attr a21b4 devStateIcon aus:off an:on
attr a21b4 eventMap on:aus off:an
attr a21b4 group OutputPorts
attr a21b4 setFn {($CMD eq "on")?"PortB4 off":"PortB4 on"}
attr a21b4 setList off on
attr a21b4 valueFn {($VALUE eq "on")?"off":"on"}

define a21b5 readingsProxy mcp_21:PortB5
attr a21b5 alias Ausgang Chip21 Port B5
attr a21b5 devStateIcon aus:off an:on
attr a21b5 eventMap on:aus off:an
attr a21b5 group OutputPorts
attr a21b5 setFn {($CMD eq "on")?"PortB5 off":"PortB5 on"}
attr a21b5 setList off on
attr a21b5 valueFn {($VALUE eq "on")?"off":"on"}

define a21b6 readingsProxy mcp_21:PortB6
attr a21b6 alias Ausgang Chip21 Port B6
attr a21b6 devStateIcon aus:off an:on
attr a21b6 eventMap on:aus off:an
attr a21b6 group OutputPorts
attr a21b6 setFn {($CMD eq "on")?"PortB6 off":"PortB6 on"}
attr a21b6 setList off on
attr a21b6 valueFn {($VALUE eq "on")?"off":"on"}

define a21b7 readingsProxy mcp_21:PortB7
attr a21b7 alias Ausgang Chip21 Port B7
attr a21b7 devStateIcon aus:off an:on
attr a21b7 eventMap on:aus off:an
attr a21b7 group OutputPorts
attr a21b7 setFn {($CMD eq "on")?"PortB7 off":"PortB7 on"}
attr a21b7 setList off on
attr a21b7 valueFn {($VALUE eq "on")?"off":"on"}



define mcp_22 I2C_MCP23017 0x22
attr mcp_22 IODev chip
attr mcp_22 OnStartup A0=off,A1=off,A2=off,A3=off,A4=off,A5=off,A6=off,A7=off,B0=off,B1=off,B2=off,B3=off,B4=off,B5=off,B6=off,B7=off
attr mcp_22 OutputPorts A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
attr mcp_22 group MCP23017

define a22a0 readingsProxy mcp_22:PortA0
attr a22a0 alias Ausgang Chip22 Port A0
attr a22a0 devStateIcon aus:off an:on
attr a22a0 eventMap on:aus off:an
attr a22a0 group OutputPorts
attr a22a0 setFn {($CMD eq "on")?"PortA0 off":"PortA0 on"}
attr a22a0 setList off on
attr a22a0 valueFn {($VALUE eq "on")?"off":"on"}

define a22a1 readingsProxy mcp_22:PortA1
attr a22a1 alias Ausgang Chip22 Port A1
attr a22a1 devStateIcon aus:off an:on
attr a22a1 eventMap on:aus off:an
attr a22a1 group OutputPorts
attr a22a1 setFn {($CMD eq "on")?"PortA1 off":"PortA1 on"}
attr a22a1 setList off on
attr a22a1 valueFn {($VALUE eq "on")?"off":"on"}

define a22a2 readingsProxy mcp_22:PortA2
attr a22a2 alias Ausgang Chip22 Port A2
attr a22a2 devStateIcon aus:off an:on
attr a22a2 eventMap on:aus off:an
attr a22a2 group OutputPorts
attr a22a2 setFn {($CMD eq "on")?"PortA2 off":"PortA2 on"}
attr a22a2 setList off on
attr a22a2 valueFn {($VALUE eq "on")?"off":"on"}

define a22a3 readingsProxy mcp_22:PortA3
attr a22a3 alias Ausgang Chip22 Port A3
attr a22a3 devStateIcon aus:off an:on
attr a22a3 eventMap on:aus off:an
attr a22a3 group OutputPorts
attr a22a3 setFn {($CMD eq "on")?"PortA3 off":"PortA3 on"}
attr a22a3 setList off on
attr a22a3 valueFn {($VALUE eq "on")?"off":"on"}

define a22a4 readingsProxy mcp_22:PortA4
attr a22a4 alias Ausgang Chip22 Port A4
attr a22a4 devStateIcon aus:off an:on
attr a22a4 eventMap on:aus off:an
attr a22a4 group OutputPorts
attr a22a4 setFn {($CMD eq "on")?"PortA4 off":"PortA4 on"}
attr a22a4 setList off on
attr a22a4 valueFn {($VALUE eq "on")?"off":"on"}

define a22a5 readingsProxy mcp_22:PortA5
attr a22a5 alias Ausgang Chip22 Port A5
attr a22a5 devStateIcon aus:off an:on
attr a22a5 eventMap on:aus off:an
attr a22a5 group OutputPorts
attr a22a5 setFn {($CMD eq "on")?"PortA5 off":"PortA5 on"}
attr a22a5 setList off on
attr a22a5 valueFn {($VALUE eq "on")?"off":"on"}

define a22a6 readingsProxy mcp_22:PortA6
attr a22a6 alias Ausgang Chip22 Port A6
attr a22a6 devStateIcon aus:off an:on
attr a22a6 eventMap on:aus off:an
attr a22a6 group OutputPorts
attr a22a6 setFn {($CMD eq "on")?"PortA6 off":"PortA6 on"}
attr a22a6 setList off on
attr a22a6 valueFn {($VALUE eq "on")?"off":"on"}

define a22a7 readingsProxy mcp_22:PortA7
attr a22a7 alias Ausgang Chip22 Port A7
attr a22a7 devStateIcon aus:off an:on
attr a22a7 eventMap on:aus off:an
attr a22a7 group OutputPorts
attr a22a7 setFn {($CMD eq "on")?"PortA7 off":"PortA7 on"}
attr a22a7 setList off on
attr a22a7 valueFn {($VALUE eq "on")?"off":"on"}

define a22b0 readingsProxy mcp_22:PortB0
attr a22b0 alias Ausgang Chip22 Port B0
attr a22b0 devStateIcon aus:off an:on
attr a22b0 eventMap on:aus off:an
attr a22b0 group OutputPorts
attr a22b0 setFn {($CMD eq "on")?"PortB0 off":"PortB0 on"}
attr a22b0 setList off on
attr a22b0 valueFn {($VALUE eq "on")?"off":"on"}

define a22b1 readingsProxy mcp_22:PortB1
attr a22b1 alias Ausgang Chip22 Port B1
attr a22b1 devStateIcon aus:off an:on
attr a22b1 eventMap on:aus off:an
attr a22b1 group OutputPorts
attr a22b1 setFn {($CMD eq "on")?"PortB1 off":"PortB1 on"}
attr a22b1 setList off on
attr a22b1 valueFn {($VALUE eq "on")?"off":"on"}

define a22b2 readingsProxy mcp_22:PortB2
attr a22b2 alias Ausgang Chip22 Port B2
attr a22b2 devStateIcon aus:off an:on
attr a22b2 eventMap on:aus off:an
attr a22b2 group OutputPorts
attr a22b2 setFn {($CMD eq "on")?"PortB2 off":"PortB2 on"}
attr a22b2 setList off on
attr a22b2 valueFn {($VALUE eq "on")?"off":"on"}

define a22b3 readingsProxy mcp_22:PortB3
attr a22b3 alias Ausgang Chip22 Port B3
attr a22b3 devStateIcon aus:off an:on
attr a22b3 eventMap on:aus off:an
attr a22b3 group OutputPorts
attr a22b3 setFn {($CMD eq "on")?"PortB3 off":"PortB3 on"}
attr a22b3 setList off on
attr a22b3 valueFn {($VALUE eq "on")?"off":"on"}

define a22b4 readingsProxy mcp_22:PortB4
attr a22b4 alias Ausgang Chip22 Port B4
attr a22b4 devStateIcon aus:off an:on
attr a22b4 eventMap on:aus off:an
attr a22b4 group OutputPorts
attr a22b4 setFn {($CMD eq "on")?"PortB4 off":"PortB4 on"}
attr a22b4 setList off on
attr a22b4 valueFn {($VALUE eq "on")?"off":"on"}

define a22b5 readingsProxy mcp_22:PortB5
attr a22b5 alias Ausgang Chip22 Port B5
attr a22b5 devStateIcon aus:off an:on
attr a22b5 eventMap on:aus off:an
attr a22b5 group OutputPorts
attr a22b5 setFn {($CMD eq "on")?"PortB5 off":"PortB5 on"}
attr a22b5 setList off on
attr a22b5 valueFn {($VALUE eq "on")?"off":"on"}

define a22b6 readingsProxy mcp_22:PortB6
attr a22b6 alias Ausgang Chip22 Port B6
attr a22b6 devStateIcon aus:off an:on
attr a22b6 eventMap on:aus off:an
attr a22b6 group OutputPorts
attr a22b6 setFn {($CMD eq "on")?"PortB6 off":"PortB6 on"}
attr a22b6 setList off on
attr a22b6 valueFn {($VALUE eq "on")?"off":"on"}

define a22b7 readingsProxy mcp_22:PortB7
attr a22b7 alias Ausgang Chip22 Port B7
attr a22b7 devStateIcon aus:off an:on
attr a22b7 eventMap on:aus off:an
attr a22b7 group OutputPorts
attr a22b7 setFn {($CMD eq "on")?"PortB7 off":"PortB7 on"}
attr a22b7 setList off on
attr a22b7 valueFn {($VALUE eq "on")?"off":"on"}

klausw

Dann weiss ich leider auch nicht weiter. Seltsam ist es auf jeden Fall.
Was du versuchen kannst ist, ausschließlich den 3. und 4. Chip zu verwenden und die anderen beiden nicht (falls du es nicht schon gemacht hast..langsam habe ich keinen überblick mehr ;)).
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

IPPhoner2b

#37
Würde ich gerne testen, nur habe ich alleine schon auf der Hardware seite keine Eingänge für die beiden Chips vorgesehen, sondern schon alles mit Sperrdioden usw für die Ausgänge ausgestattet.

Das hier ist das Log von Apptime total, wenn ich das Rollo im Flur öffnen möchte.
Eigentlich wird nur Chip 20 benötigt:
tmr-at_Exec      HASH(0x2ea5b90)   1997      1     1997  1997.00      6 HASH(fl_oben)
                      act_on_Rollofl          notify_Exec   1932      1     1932  1932.00      0 HASH(act_on_Rollofl); HASH(Rollofl)
         FHEMWEB:192.168.47.51:51158              FW_Read    748      4      757   189.25      0 HASH(FHEMWEB:192.168.47.51:51158)
         FHEMWEB:192.168.47.51:51159              FW_Read    532      6      547    91.17      0 HASH(FHEMWEB:192.168.47.51:51159)
                                aflh    readingsProxy_Set    170      3      172    57.33      0 HASH(aflh); aflh; on
                 tmr-SetExtensionsFn SE aflh off-for-timer    171      1      171   171.00   1318 SE aflh off-for-timer
                              mcp_20     I2C_MCP23017_Set    166      3      168    56.00      0 HASH(mcp_20); mcp_20; PortA4; off
                                chip         RPII2C_Write    118      2      161    80.50      0 HASH(chip); HASH(0x2e99698)
                              mcp_20  I2C_MCP23017_I2CRec    113      2      152    76.00      0 HASH(mcp_20); HASH(0x2e99698)
                                aflh readingsProxy_Notify     40     54       77     1.43      0 HASH(aflh); HASH(global)
                               a21a0 readingsProxy_Notify     39     54       39     0.72      0 HASH(a21a0); HASH(global)
                               a21b6 readingsProxy_Notify     39     54       39     0.72      0 HASH(a21b6); HASH(global)
                               a24a7 readingsProxy_Notify     38     54       39     0.72      0 HASH(a24a7); HASH(global)
                               a21a6 readingsProxy_Notify     38     54       38     0.70      0 HASH(a21a6); HASH(global)
                               a21a7 readingsProxy_Notify     38     54       38     0.70      0 HASH(a21a7); HASH(global)
                               a21b0 readingsProxy_Notify     38     54       38     0.70      0 HASH(a21b0); HASH(global)
                               a21b3 readingsProxy_Notify     38     54       38     0.70      0 HASH(a21b3); HASH(global)
                               a21b4 readingsProxy_Notify     38     54       38     0.70      0 HASH(a21b4); HASH(global)
                               a21b5 readingsProxy_Notify     38     54       38     0.70      0 HASH(a21b5); HASH(global)
                               a21b7 readingsProxy_Notify     38     54       38     0.70      0 HASH(a21b7); HASH(global)
                               a22a1 readingsProxy_Notify     38     54       38     0.70      0 HASH(a22a1); HASH(global)



Habe grade nochmal neu gestartet, und habe die Chips 21 und 22 entfernt, so sieht dann das Apptime total aus:
                               name             function    max  count    total  average maxDly
                             chip_20         RPII2C_Write   1325     12     1763   146.92      0 HASH(chip_20); HASH(0x2830ab0)
                     act_on_Rollokre          notify_Exec   1181      2     1742   871.00      0 HASH(act_on_Rollokre); HASH(Rollokre)
                              mcp_20  I2C_MCP23017_I2CRec   1320     12     1714   142.83      0 HASH(mcp_20); HASH(0x2830ab0)
                         Interrupt20      RPI_GPIO_Except   1356      4     1617   404.25      0 HASH(Interrupt20)
                              mcp_20     I2C_MCP23017_Get   1326      4     1495   373.75      0 HASH(mcp_20); mcp_20
                               skrer readingsProxy_Notify   1248     90     1296    14.40      0 HASH(skrer); HASH(mcp_20)
                           akrerhoch          notify_Exec   1216      2     1222   611.00      0 HASH(akrerhoch); HASH(skrer)
                            Rollokre            dummy_Set   1207      3     1207   402.33      0 HASH(Rollokre); Rollokre; runter
                         tmr-at_Exec      HASH(0x27e7308)    673      1      673   673.00    208 HASH(kre_down)
                         tmr-at_Exec      HASH(0x282f180)    587      1      587   587.00      3 HASH(kre_clos)
         FHEMWEB:192.168.47.51:51272            FW_Notify      8     90      521     5.79      0 HASH(FHEMWEB:192.168.47.51:51272); HASH(akrer)
                               akrer    readingsProxy_Set    134     10      419    41.90      0 HASH(akrer); akrer; off-for-timer; 15
                              mcp_20     I2C_MCP23017_Set    126     16      300    18.75      0 HASH(mcp_20); mcp_20; PortA3; on
                               akrer readingsProxy_Notify     32     90      178     1.98      0 HASH(akrer); HASH(mcp_20)
                 tmr-SetExtensionsFn SE akrer off-for-timer    128      1      128   128.00      3 SE akrer off-for-timer
                               a24a7 readingsProxy_Notify     31     90      118     1.31      0 HASH(a24a7); HASH(global)
                               aklih readingsProxy_Notify     29     90      117     1.30      0 HASH(aklih); HASH(global)
                               a24a0 readingsProxy_Notify     29     90      116     1.29      0 HASH(a24a0); HASH(global)
                               a24a1 readingsProxy_Notify     29     90      116     1.29      0 HASH(a24a1); HASH(global)
                               a24a2 readingsProxy_Notify     29     90      116     1.29      0 HASH(a24a2); HASH(global)
                               a24a3 readingsProxy_Notify     29     90      116     1.29      0 HASH(a24a3); HASH(global)

klausw

Ich kann mit dem Buchstabensalat leider nix anfangen  ::)
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

IPPhoner2b

#39
Wie meinst du Buchstabensalat? Das ist doch eigentlich sehr gut lesbar, ähnlich wie eine Exceltabelle, zumindest am PC, wie es sonst aussieht kann ich leider nicht sagen, jedenfalls habe ich grade den Interrupt von "both" auf "rising" umgestellt, und jetzt ists richtig extrem geworden, jetzt lagt das Teil bis zu 8 oder 9 sekunden, wenn ich den Schalter betätige.

Und das Web IF reagiert in der Zeit auch nicht, konnte ich ja grade gut testen, habe 2 Ausgänge per Mausklick gesetzt, und dann als dass Rollo fertig war, hat er auch sofort die anderen beiden Ausgänge gesetzt.

Ich mach noch mal etwas "Buchstabensalat" rein, vielleicht kannst du es ja irgendwann mal betrachten *g*
                               name             function    max  count    total  average maxDly
                                chip         RPII2C_Write   5540     54    16895   312.87      0 HASH(chip); HASH(0x2b949a0)
                              mcp_20  I2C_MCP23017_I2CRec   5534     38    16606   437.00      0 HASH(mcp_20); HASH(0x2b949a0)
                         Interrupt20      RPI_GPIO_Except   5597      6    15986  2664.33      0 HASH(Interrupt20)
                              mcp_20     I2C_MCP23017_Get   5540      6    15661  2610.17      0 HASH(mcp_20); mcp_20
                     act_on_Rollokre          notify_Exec   5308      4    14819  3704.75      0 HASH(act_on_Rollokre); HASH(Rollokre)
                               skrer readingsProxy_Notify   5414    595    10275    17.27      0 HASH(skrer); HASH(mcp_20)
                           akrerhoch          notify_Exec   5361      4    10043  2510.75      0 HASH(akrerhoch); HASH(skrer)
                            Rollokre            dummy_Set   5352     13    10012   770.15      0 HASH(Rollokre); Rollokre; runter
                               sklir readingsProxy_Notify   4729    595     4813     8.09      0 HASH(sklir); HASH(mcp_20)
                           aklirhoch          notify_Exec   4680      2     4687  2343.50      0 HASH(aklirhoch); HASH(sklir)
                            Rollokli            dummy_Set   4671      7     4671   667.29      0 HASH(Rollokli); Rollokli; runter
                     act_on_Rollokli          notify_Exec   4631      1     4631  4631.00      0 HASH(act_on_Rollokli); HASH(Rollokli)
         FHEMWEB:192.168.47.51:51368            FW_Notify     14    590     3793     6.43      0 HASH(FHEMWEB:192.168.47.51:51368); HASH(aklir)
                         tmr-at_Exec      HASH(0x2ac6f98)   2800      1     2800  2800.00   4390 HASH(kre_down)
                         tmr-at_Exec      HASH(0x2a2edd0)   2656      1     2656  2656.00      3 HASH(kre_clos)
                         tmr-at_Exec      HASH(0x2bb7fb8)   2459      1     2459  2459.00   3693 HASH(kli_down)
                         tmr-at_Exec      HASH(0x2baa118)   2455      1     2455  2455.00   3680 HASH(kre_down)
                         tmr-at_Exec      HASH(0x2bbb0f0)   2324      1     2324  2324.00      4 HASH(kre_clos)
                               akrer    readingsProxy_Set    219     34     1306    38.41      0 HASH(akrer); akrer; off-for-timer; 15
         FHEMWEB:192.168.47.51:51368              FW_Read    725     17     1300    76.47      0 HASH(FHEMWEB:192.168.47.51:51368)
                              mcp_20     I2C_MCP23017_Set    212     53     1157    21.83      0 HASH(mcp_20); mcp_20; PortA3; on


Oder kann ich hier auch ein Bild anhängen? Dann mache ich einen Screenshot davon


:EDITH:

Noch etwas, ist doch richtig, dass ich die 2 Chips mit ihren Eingängen an unterschiedliche Pins des RPi setze, oder?
Habe einen auf Port 14, und den anderen auf Port 15
Und diese dann jeweils Interrupt20 bzw Interrupt24 genannt, ist doch richtig so, oder?


#  RPI_GPIO 14 ist der Eingangspin am Raspberry, um die Schalter einzulesen
define Interrupt20 RPI_GPIO 14
attr Interrupt20 active_low yes
attr Interrupt20 direction input
attr Interrupt20 group MCP23017
#attr Interrupt20 interrupt both
attr Interrupt20 interrupt rising
attr Interrupt20 userReadings test {fhem ("get mcp_20")}

#  RPI_GPIO 15 ist der Eingangspin am Raspberry, um die Schalter einzulesen
define Interrupt24 RPI_GPIO 15
attr Interrupt24 active_low yes
attr Interrupt24 direction input
attr Interrupt24 group MCP23017
#attr Interrupt24 interrupt both
attr Interrupt24 interrupt rising
attr Interrupt24 userReadings test {fhem ("get mcp_24")}



klausw

Zitat von: IPPhoner2b am 02 Dezember 2014, 17:34:32
Würde ich gerne testen, nur habe ich alleine schon auf der Hardware seite keine Eingänge für die beiden Chips vorgesehen, sondern schon alles mit Sperrdioden usw für die Ausgänge ausgestattet.
Das macht doch nix, du kannst es trotzdem so konfugurieren wie deine 0x20.
Die Bedienung geht dann halt nur über das WebIf.

Mit Buchstabensalat meinte ich, das ich damit nix anfangen kann ...sind das millisekunden?, wie sollte es aussehen?...

Zitat von: IPPhoner2b am 02 Dezember 2014, 18:06:06
...jedenfalls habe ich grade den Interrupt von "both" auf "rising" umgestellt, und jetzt ists richtig extrem geworden, jetzt lagt das Teil bis zu 8 oder 9 sekunden, wenn ich den Schalter betätige.

Und das Web IF reagiert in der Zeit auch nicht, konnte ich ja grade gut testen, habe 2 Ausgänge per Mausklick gesetzt, und dann als dass Rollo fertig war, hat er auch sofort die anderen beiden Ausgänge gesetzt.

Das wird ja immer schlimmer.
Was auffällig ist: act_on_Rollo.. dauert recht lang in deinem letzten Beispiel und im ersten deines vorletzten Posts.
Die Interruptverarbeitung dauert auch recht lang.
Auch die Menge an counts ist komisch, wie oft hast du draufgedrückt? Nicht das da irgendeine Endlosschleife drin ist.

2 GPIOs als IntEingänge zu nutzen ist sinnvoll. Dann muss du immer im Interruptfall immer nur einen Chip auslesen.
Versuche spaßenshalber mal "attr Interrupt24 interrupt falling" In diesem Fall dürfte ja beim Tastendruck nix mehr passieren.
RasPi B v2 mit FHEM 18B20 über 1Wire, LED PWM Treiber über I2C, Luchtdruck-, Feuchtesensor und ein paar Schalter/LED\'s zum testen
Module: RPI_GPIO, RPII2C, I2C_EEPROM, I2C_MCP23008, I2C_MCP23017, I2C_MCP342x, I2C_PCA9532, I2C_PCF8574, I2C_SHT21, I2C_BME280

IPPhoner2b

#41
Habe den Interrupt auf falling gestellt, und wie vorhergesagt, es tat sich nix.

Über das Web IF habe ich ja komischerweise keine Probleme, die Ausgänge schnell zu setzen.
Habe mal beide Chips (21+22) aus dem Sockel gezogen, aber es bleibt so langsam, also an dem Teil kann es scheinbar auch nicht liegen.

Und nein, ich habe nicht wie ein Irrer an meinem Taster rumgedrückt, nur jeweils 1x  ::) ;D

So, habe jetzt wieder auf both gestellt, ändert sich irgendwie nix, (habe ich doch noch auf rising stehen ) ist immer noch Scharch lahm, also da liegen wirklich Sekunden dazwischen, Gehe davon aus, dass es sich um Millisekunden handelt.
                                name             function    max  count    total  average maxDly
                                chip         RPII2C_Write   4807     49    10931   223.08      0 HASH(chip); HASH(0x141e080)
                              mcp_20  I2C_MCP23017_I2CRec   4801     33    10658   322.97      0 HASH(mcp_20); HASH(0x141e080)
                         Interrupt20      RPI_GPIO_Except   4853      8    10481  1310.12      0 HASH(Interrupt20)
                              mcp_20     I2C_MCP23017_Get   4807      9    10152  1128.00      0 HASH(mcp_20); mcp_20
                     act_on_Rollokli          notify_Exec   4594      2     6855  3427.50      0 HASH(act_on_Rollokli); HASH(Rollokli)
                               skrer readingsProxy_Notify   4709    385     4784    12.43      0 HASH(skrer); HASH(mcp_20)
                               sklir readingsProxy_Notify   4692    385     4765    12.38      0 HASH(sklir); HASH(mcp_20)
                           akrerhoch          notify_Exec   4660      2     4667  2333.50      0 HASH(akrerhoch); HASH(skrer)
                            Rollokre            dummy_Set   4652      3     4652  1550.67      0 HASH(Rollokre); Rollokre; runter
                           aklirhoch          notify_Exec   4644      2     4651  2325.50      0 HASH(aklirhoch); HASH(sklir)
                            Rollokli            dummy_Set   4635      4     4635  1158.75      0 HASH(Rollokli); Rollokli; runter
                     act_on_Rollokre          notify_Exec   4611      1     4611  4611.00      0 HASH(act_on_Rollokre); HASH(Rollokre)
         FHEMWEB:192.168.47.51:51636              FW_Read   2992     37     3472    93.84      0 HASH(FHEMWEB:192.168.47.51:51636)
                         tmr-at_Exec      HASH(0x13c4208)   2435      1     2435  2435.00   3655 HASH(kli_down)
                         tmr-at_Exec      HASH(0x14346c0)   2433      1     2433  2433.00   3859 HASH(kre_down)
         FHEMWEB:192.168.47.51:51652            FW_Notify      8    382     2429     6.36      0 HASH(FHEMWEB:192.168.47.51:51652); HASH(a21a2)
                         tmr-at_Exec      HASH(0x14095f8)   2302      1     2302  2302.00      5 HASH(kli_clos)
                              mcp_20     I2C_MCP23017_Set    187     29      662    22.83      0 HASH(mcp_20); mcp_20; PortA3; on
                               aklir    readingsProxy_Set    193     14      607    43.36      0 HASH(aklir); aklir; off-for-timer; 15
         FHEMWEB:192.168.47.51:51652              FW_Read    521      2      524   262.00      0 HASH(FHEMWEB:192.168.47.51:51652)
                               akrer    readingsProxy_Set    194     12      420    35.00      0 HASH(akrer); akrer; off-for-timer; 15


Und so sieht das gleiche aus, wenn ich in der Config nur die Chips 20 + 24 definiert habe:
                                name             function    max  count    total  average maxDly
                                chip         RPII2C_Write   1336     20     3400   170.00      0 HASH(chip); HASH(0x14a4ad0)
                              mcp_20  I2C_MCP23017_I2CRec   1331     20     3313   165.65      0 HASH(mcp_20); HASH(0x14a4ad0)
                         Interrupt20      RPI_GPIO_Except   1369      4     2984   746.00      0 HASH(Interrupt20)
                              mcp_20     I2C_MCP23017_Get   1337      4     2854   713.50      0 HASH(mcp_20); mcp_20
                     act_on_Rollokli          notify_Exec   1191      2     1758   879.00      0 HASH(act_on_Rollokli); HASH(Rollokli)
                     act_on_Rollokre          notify_Exec   1190      2     1756   878.00      0 HASH(act_on_Rollokre); HASH(Rollokre)
                               sklir readingsProxy_Notify   1258    172     1314     7.64      0 HASH(sklir); HASH(mcp_20)
                               skrer readingsProxy_Notify   1257    172     1313     7.63      0 HASH(skrer); HASH(mcp_20)
                           aklirhoch          notify_Exec   1225      2     1231   615.50      0 HASH(aklirhoch); HASH(sklir)
                           akrerhoch          notify_Exec   1224      2     1230   615.00      0 HASH(akrerhoch); HASH(skrer)
                            Rollokli            dummy_Set   1217      5     1217   243.40      0 HASH(Rollokli); Rollokli; runter
                            Rollokre            dummy_Set   1216      5     1216   243.20      0 HASH(Rollokre); Rollokre; runter
         FHEMWEB:192.168.47.51:51675            FW_Notify      8    172     1052     6.12      0 HASH(FHEMWEB:192.168.47.51:51675); HASH(a24a0)
                         tmr-at_Exec      HASH(0x14a1358)    678      1      678   678.00    218 HASH(kre_down)
                         tmr-at_Exec      HASH(0x1499e88)    677      1      677   677.00    223 HASH(kli_down)
                              mcp_20     I2C_MCP23017_Set    126     30      598    19.93      0 HASH(mcp_20); mcp_20; PortA3; off
                         tmr-at_Exec      HASH(0x13be510)    593      1      593   593.00      2 HASH(kli_clos)
                         tmr-at_Exec      HASH(0x14a0d28)    592      1      592   592.00      2 HASH(kre_clos)
         FHEMWEB:192.168.47.51:51674              FW_Read    437      7      457    65.29      0 HASH(FHEMWEB:192.168.47.51:51674)
                               akrer    readingsProxy_Set    132     16      427    26.69      0 HASH(akrer); akrer; off-for-timer; 15
                               aklir    readingsProxy_Set    132     16      426    26.62      0 HASH(aklir); aklir; off-for-timer; 15

IPPhoner2b

So, habe jetzt mal von Chip 22, also der auch immer Probleme macht, nur die Bank A zusätzlich freigegeben, und selbst da erhöht sich die Zeit schon, zwar noch nicht so extrem, aber merklich:
                                name             function    max  count    total  average maxDly
                         Interrupt20      RPI_GPIO_Except   2085     14     7763   554.50      0 HASH(Interrupt20)
                                chip         RPII2C_Write   2051     36     7747   215.19      0 HASH(chip); HASH(0x1767c68)
                              mcp_20  I2C_MCP23017_I2CRec   2044     36     7578   210.50      0 HASH(mcp_20); HASH(0x1767c68)
                              mcp_20     I2C_MCP23017_Get   2051     14     7271   519.36      0 HASH(mcp_20); mcp_20
                            Rollokre            dummy_Set   1913      4     2909   727.25      0 HASH(Rollokre); Rollokre; runter
                            Rollokli            dummy_Set   1910      4     2905   726.25      0 HASH(Rollokli); Rollokli; runter
                     act_on_Rollokre          notify_Exec   1883      2     2849  1424.50      0 HASH(act_on_Rollokre); HASH(Rollokre)
                     act_on_Rollokli          notify_Exec   1880      2     2844  1422.00      0 HASH(act_on_Rollokli); HASH(Rollokli)
                               skrer readingsProxy_Notify   1960    266     2023     7.61      0 HASH(skrer); HASH(mcp_20)
                               sklir readingsProxy_Notify   1956    266     2018     7.59      0 HASH(sklir); HASH(mcp_20)
                           akrerhoch          notify_Exec   1922      2     1928   964.00      0 HASH(akrerhoch); HASH(skrer)
                           aklirhoch          notify_Exec   1919      2     1925   962.50      0 HASH(aklirhoch); HASH(sklir)
         FHEMWEB:192.168.47.51:50114            FW_Notify      8    266     1578     5.93      0 HASH(FHEMWEB:192.168.47.51:50114); HASH(a22a7)
                               skreh readingsProxy_Notify   1042    266     1105     4.15      0 HASH(skreh); HASH(mcp_20)
                               sklih readingsProxy_Notify   1040    266     1100     4.14      0 HASH(sklih); HASH(mcp_20)
                         tmr-at_Exec      HASH(0x17f3ae0)   1038      1     1038  1038.00    919 HASH(kre_down)
                         tmr-at_Exec      HASH(0x12d8e00)   1037      1     1037  1037.00    924 HASH(kli_down)
                           akrehstop          notify_Exec   1004      2     1010   505.00      0 HASH(akrehstop); HASH(skreh)
                           aklihstop          notify_Exec   1003      2     1009   504.50      0 HASH(aklihstop); HASH(sklih)
                              mcp_20     I2C_MCP23017_Set    144     45      562    12.49      0 HASH(mcp_20); mcp_20; PortA3; on
                               aklir    readingsProxy_Set    149     16      438    27.38      0 HASH(aklir); aklir; off-for-timer; 15



Und so siehts dann aus, wenn 3 Chips an sind (20,21 und 24):
                                name             function    max  count    total  average maxDly
                                chip         RPII2C_Write   2896     35    10393   296.94      0 HASH(chip); HASH(0x181a068)
                         Interrupt20      RPI_GPIO_Except   2936     13    10378   798.31      0 HASH(Interrupt20)
                              mcp_20  I2C_MCP23017_I2CRec   2891     35    10213   291.80      0 HASH(mcp_20); HASH(0x181a068)
                              mcp_20     I2C_MCP23017_Get   2897     13     9864   758.77      0 HASH(mcp_20); mcp_20
                            Rollokli            dummy_Set   2743      4     4146  1036.50      0 HASH(Rollokli); Rollokli; runter
                            Rollokre            dummy_Set   2732      4     4137  1034.25      0 HASH(Rollokre); Rollokre; runter
                     act_on_Rollokli          notify_Exec   2709      2     4079  2039.50      0 HASH(act_on_Rollokli); HASH(Rollokli)
                     act_on_Rollokre          notify_Exec   2697      2     4069  2034.50      0 HASH(act_on_Rollokre); HASH(Rollokre)
                               sklir readingsProxy_Notify   2794    330     2861     8.67      0 HASH(sklir); HASH(mcp_20)
                               skrer readingsProxy_Notify   2783    330     2850     8.64      0 HASH(skrer); HASH(mcp_20)
                           aklirhoch          notify_Exec   2751      2     2758  1379.00      0 HASH(aklirhoch); HASH(sklir)
                           akrerhoch          notify_Exec   2740      2     2747  1373.50      0 HASH(akrerhoch); HASH(skrer)
         FHEMWEB:192.168.47.51:50138            FW_Notify      9    330     2050     6.21      0 HASH(FHEMWEB:192.168.47.51:50138); HASH(a22b6)
                               skreh readingsProxy_Notify   1456    330     1524     4.62      0 HASH(skreh); HASH(mcp_20)
                               sklih readingsProxy_Notify   1454    330     1519     4.60      0 HASH(sklih); HASH(mcp_20)
                         tmr-at_Exec      HASH(0x1835b90)   1460      1     1460  1460.00   1741 HASH(kre_down)
                         tmr-at_Exec      HASH(0x17cefd0)   1458      1     1458  1458.00   1756 HASH(kli_down)
                           akrehstop          notify_Exec   1414      2     1420   710.00      0 HASH(akrehstop); HASH(skreh)
                           aklihstop          notify_Exec   1412      2     1419   709.50      0 HASH(aklihstop); HASH(sklih)
                              mcp_20     I2C_MCP23017_Set    159     44      606    13.77      0 HASH(mcp_20); mcp_20; PortA1; on
                               aklir    readingsProxy_Set    166     16      479    29.94      0 HASH(aklir); aklir; off-for-timer; 15


So, und habe jetzt noch zum testen den 24er Chip komplett deaktiviert, und somit nur Chips 20+22 aktiviert gehabt:
                                name             function    max  count    total  average maxDly
                         Interrupt20      RPI_GPIO_Except   1829     15     6913   460.87      0 HASH(Interrupt20)
                                chip         RPII2C_Write   1799     37     6887   186.14      0 HASH(chip); HASH(0x18c50d8)
                              mcp_20  I2C_MCP23017_I2CRec   1794     37     6719   181.59      0 HASH(mcp_20); HASH(0x18c50d8)
                              mcp_20     I2C_MCP23017_Get   1799     15     6454   430.27      0 HASH(mcp_20); mcp_20
                            Rollokli            dummy_Set   1677      4     2563   640.75      0 HASH(Rollokli); Rollokli; runter
                            Rollokre            dummy_Set   1677      4     2554   638.50      0 HASH(Rollokre); Rollokre; runter
                     act_on_Rollokli          notify_Exec   1651      2     2512  1256.00      0 HASH(act_on_Rollokli); HASH(Rollokli)
                     act_on_Rollokre          notify_Exec   1652      2     2504  1252.00      0 HASH(act_on_Rollokre); HASH(Rollokre)
                               sklir readingsProxy_Notify   1718    270     1779     6.59      0 HASH(sklir); HASH(mcp_20)
                               skrer readingsProxy_Notify   1719    270     1776     6.58      0 HASH(skrer); HASH(mcp_20)
                           akrerhoch          notify_Exec   1685      2     1691   845.50      0 HASH(akrerhoch); HASH(skrer)
                           aklirhoch          notify_Exec   1684      2     1690   845.00      0 HASH(aklirhoch); HASH(sklir)
         FHEMWEB:192.168.47.51:50176            FW_Notify      9    270     1633     6.05      0 HASH(FHEMWEB:192.168.47.51:50176); HASH(rollo_wz)
                               sklih readingsProxy_Notify    928    270      984     3.64      0 HASH(sklih); HASH(mcp_20)
                               skreh readingsProxy_Notify    919    270      975     3.61      0 HASH(skreh); HASH(mcp_20)
                         tmr-at_Exec      HASH(0x18ad4e0)    908      1      908   908.00    737 HASH(kli_down)
                         tmr-at_Exec      HASH(0x1859538)    907      1      907   907.00    673 HASH(kre_down)
                           aklihstop          notify_Exec    894      2      900   450.00      0 HASH(aklihstop); HASH(sklih)
                           akrehstop          notify_Exec    885      2      891   445.50      0 HASH(akrehstop); HASH(skreh)
                              mcp_20     I2C_MCP23017_Set    126     46      519    11.28      0 HASH(mcp_20); mcp_20; PortA1; on
                               aklir    readingsProxy_Set    133     16      396    24.75      0 HASH(aklir); aklir; off-for-timer; 15

IPPhoner2b

Hallo Zusammen,

habe mal wieder ein paar Fragen.
Habe ein paar Homematic sachen mit meiner Fhem installation gekoppelt, klappt auch soweit ganz gut, also ich kann über z.B. eine Fernbedienung alle Rollos fahren lassen usw.

Jetzt habe ich nur folgendes Problem, ich möchte über z.B. eine Taste die Rollos runterfahren lassen, und wenn man sich z.B. verdrückt, sollen über eine andere Taste alle Rollos gestoppt werden. Allerdings klappt das noch nicht so, denn der Befehlt wird irgendwie erst später abgearbeitet. Wie könnte man das umändern?

Momentan habe ich es über ein Notify für die einzelnen Taster gemacht. Wollte es erst per DOIF machen, allerdings habe ich es nicht hinbekommen, die einzelnen Timer zu löschen, er sagte, der Befehlt ist nicht bekannt.

Habe schon dran gedacht, per "Structure" Befehl die Rollos auf einmal zu starten, aber ich möchte eigentlich gerne, dass die Rollos in kurzen Abständen hintereinander fahren.

Hier mal die Version der Notifys:
define taste_7_kurz notify fb8_Btn_07:Short.* {\
    fhem ("delete next.*") if (Value("next.*") ne "");;\
{\
    fhem "define next_wz at +00:00:01 set Rollowz runter";;\
    fhem "define next_ezli at +00:00:04 set Rolloezli runter";;\
    fhem "define next_kli at +00:00:12 set Rollokli runter";;\
    fhem "define next_kre at +00:00:15 set Rollokre runter";;\
    fhem "define next_fl at +00:00:18 set Rollofl runter";;\
    fhem "define next_gwc at +00:00:21 set Rollogwc runter";;\
    fhem "define next_bad at +00:00:24 set Rollobad runter";;\
    fhem "define next_sz at +00:00:27 set Rollosz runter";;\
    fhem "define next_kz at +00:00:30 set Rollokz runter";;\
    fhem "define next_bz at +00:00:33 set Rollobz runter";;\
}\
}

define taste_8 notify fb8_Btn_08 {\
    fhem ("delete next.*") if (Value("next.*") ne "");;\
{\
    fhem "set Rollowz stop";;\
    fhem "set Rolloezli stop";;\
    fhem "set Rollokli stop";;\
    fhem "set Rollokre stop";;\
    fhem "set Rollofl stop";;\
    fhem "set Rollogwc stop";;\
    fhem "set Rollobad stop";;\
    fhem "set Rollosz stop";;\
    fhem "set Rollokz stop";;\
    fhem "set Rollobz stop";;\
    }\
}


Und das hier war die Version mit den DOIFs, allerdings habe ich dort Probleme, die Timer zu löschen:
define taste_8_kurz DOIF ([fb8_Btn_08] =~ "Short")\
(set Rollowz hoch , \
define next1 at +00:00:03 set Rolloezli hoch , \
define next4 at +00:00:11 set Rollokli hoch , \
define next5 at +00:00:14 set Rollokre hoch , \
define next6 at +00:00:17 set Rollofl hoch , \
define next7 at +00:00:20 set Rollogwc hoch , \
define next8 at +00:00:23 set Rollobad hoch , \
define next9 at +00:00:26 set Rollosz hoch , \
define nexta at +00:00:29 set Rollokz hoch , \
define nextb at +00:00:32 set Rollobz hoch)
attr taste_8_kurz cmdState kurz|lang
attr taste_8_kurz do always

define taste_8_lang DOIF ([fb8_Btn_08] =~ "LongRelease")\
(fhem ("delete next.*") , \
set Rollowz stop , \
set Rolloezli stop , \
set Rollokli stop , \
set Rollokre stop , \
set Rollofl stop , \
set Rollogwc stop , \
set Rollobad stop , \
set Rollosz stop , \
set Rollokz stop , \
set Rollobz stop)
attr taste_8_lang cmdState lang|kurz
attr taste_8_lang do always

slonnet

Hallo zusammen,

ich habe mir gerade den ganzen Thread durchgelesen.

Ich habe genau das Gleiche vor, stecke aber auch noch in der Testphase (Haus ist noch nicht gebaut ;) )

Softwareseitig habe ich einen MCP23017 auch schon laufen.
Einfaches Schalten klappt auch schon ganz ordentlich.

Werde mich aber jetzt auch schon mit der Rolladen Steuerung beschäftigen, evtl kann ich hier noch etwas hilfreich sein.

@IPPhoner2b
Kannst du deinen Hardwareaufbau evtl. etwas genau beschreiben?

Zitat von: IPPhoner2b am 09 November 2014, 15:27:10
- Wenn der jeweilige Ausgang gesetzt wird, muss der andere vorher deaktiviert werden, und dazwischen eine Pause von 0,5 sek sein.

... das wird hoffendlich nicht die einzige Verriegelung sein!

Das sollte auf jeden Fall hardwareseitig über eine Schützverrigelung gemacht werden!

Desweitern schalte ich alle Relais gegen GND, sprich sie haben dauerhaft 24V.
Dadurch brauche ich die Ausgänge auch nicht invertieren ;)
Zwischen MCP23017 und Relais ist noch ein ULQ2003 geschaltet.

Ich werde in nächster Zeit wohl auch noch mehrer MCP23017 einsetzten, und kann daher dein Setup nachstellen.
Mal sehn ob ich das Problem mit der langsamen Reaktionszeit dann reproduzieren kann.  8)

Ich plane überigs bis zu 16 Stück MCP230107 einzusetzten (8 Stück über den zweiten I2C Port des Pis)
Deswegen könnte für mich dein Problem auch bahl zu mein Problem werden  :-\

Gruss slonnet