[GELÖST] I2C_MCP23017 Eingänge schalten nicht

Begonnen von Burny4600, 31 Dezember 2017, 15:30:11

Vorheriges Thema - Nächstes Thema

Burny4600

Verwendetes Modul MCP23017 32x DigitalIO. Entspricht dem Modul im Anhang.

I2C_MCP23017 Eingänge schalten trotz Interrupt Definition nicht.
Erst wenn ich die Bank des I2C_MCP23017 mit den Eingängen am Browser aufrufe, zb. mcp23017_B1_EDV, werden die Eingänge verarbeitet.
Die Eingänge sind mit Masse am Eingang aktiv.
LIST RPI_GIPO
Internals:
   CFGFN      /media/hdd/fhem/mycfg/AD_Controller/I2C_MCP23017_rasp01.cfg
   DEF        21
   EXCEPT_FD  49
   GPIO_Basedir /sys/class/gpio
   GPIO_Nr    21
   NAME       INT
   NR         1656
   STATE      AUS
   TYPE       RPI_GPIO
   WiringPi_gpio /usr/local/bin/gpio
   READINGS:
     2017-12-31 14:33:52   Dblclick        off
     2017-12-31 14:33:52   Longpress       off
     2017-12-31 14:45:58   Pinlevel        low
     2017-12-31 14:33:52   interrupt       egal
     2017-12-31 14:33:52   state           off
   fhem:
     interfaces switch
Attributes:
   active_low yes
   alias      RPI_GIPO 21 Interupt für MCP23017 Modul
   devStateIcon EIN:control_on_off@0CFB0C AUS:control_home@E50005
   direction  input
   eventMap   on:EIN off:AUS
   icon       control_on_off
   interrupt  both
   poll_interval 60
   pud_resistor up
   restoreOnStartup last
   room       _GPIO,_IO
   userReadings interrupt:Pinlevel:.low* none {fhem ("get mcp23017_B1_EDV,mcp23017_B2_EDV"); "egal"}


LIST mcp23017_B1
Internals:
   CFGFN      /media/hdd/fhem/mycfg/AD_Controller/I2C_MCP23017_rasp01.cfg
   DEF        0x20
   I2C_Address 32
   IODev      RpiI2C_1
   NAME       mcp23017_B1_EDV
   NR         1629
   RpiI2C_1_SENDSTAT Ok
   STATE      Ok
   TYPE       I2C_MCP23017
   READINGS:
     2017-12-31 14:49:20   PortA0          on
     2017-12-31 11:18:08   PortA1          off
     2017-12-31 11:18:08   PortA2          off
     2017-12-31 14:31:14   PortA3          on
     2017-12-31 11:18:08   PortA4          off
     2017-12-31 11:18:08   PortA5          off
     2017-12-31 11:18:08   PortA6          off
     2017-12-31 11:18:08   PortA7          off
     2017-12-31 11:18:07   PortB0          off
     2017-12-31 11:18:07   PortB1          off
     2017-12-31 11:18:07   PortB2          off
     2017-12-31 11:18:07   PortB3          off
     2017-12-31 11:18:07   PortB4          off
     2017-12-31 11:18:07   PortB5          off
     2017-12-31 11:18:07   PortB6          off
     2017-12-31 11:18:07   PortB7          off
     2017-12-31 14:53:52   state           Ok
Attributes:
   IODev      RpiI2C_1
   Interrupt  A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
   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
   Pullup     A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
   alias      Digital I/O Bank 1 | Port A0-A7,B0-B7
   devStateIcon Ok:it_net@0CFB0C Initialized:it_net@yellow defined:it_net@yellow disconnected:it_net@E50005 error:it_net@E50005
   group      Schnittstellen I2C
   icon       it_net
   invert_input A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
   room       _IO,_RxTx


LIST mcp23017_B2
Internals:
   CFGFN      /media/hdd/fhem/mycfg/AD_Controller/I2C_MCP23017_rasp01.cfg
   DEF        0x21
   I2C_Address 33
   IODev      RpiI2C_1
   NAME       mcp23017_B2_EDV
   NR         1634
   RpiI2C_1_SENDSTAT Ok
   STATE      Ok
   TYPE       I2C_MCP23017
   READINGS:
     2017-12-31 14:31:43   PortA0          on
     2017-12-31 14:49:21   PortA1          off
     2017-12-31 14:31:47   PortA2          on
     2017-12-31 14:31:46   PortA3          on
     2017-12-31 14:31:44   PortA4          on
     2017-12-31 14:26:53   PortA5          on
     2017-12-31 14:26:52   PortA6          on
     2017-12-31 14:31:58   PortA7          on
     2017-08-23 12:50:39   PortB0          on
     2017-06-15 12:24:53   PortB1          off
     2017-06-15 12:24:53   PortB2          off
     2017-06-15 12:24:53   PortB3          off
     2017-06-15 12:24:53   PortB4          off
     2017-06-15 12:24:53   PortB5          off
     2017-06-15 12:24:53   PortB6          off
     2017-06-15 12:24:53   PortB7          off
     2017-12-31 14:55:25   state           Ok
Attributes:
   IODev      RpiI2C_1
   Interrupt  B0
   InterruptOut connected_active-low
   OnStartup  A0=off,A1=off,A2=off,A3=off,A4=off,A5=off,A6=off,A7=off,B0=off
   OutputPorts A0,A1,A2,A3,A4,A5,A6,A7
   Pullup     B0
   alias      Digital I/O Bank 2 | Port A0-A7,B0
   devStateIcon Ok:it_net@0CFB0C Initialized:it_net@yellow defined:it_net@yellow disconnected:it_net@E50005 error:it_net@E50005
   group      Schnittstellen I2C
   icon       it_net
   invert_input B0
   room       _IO,_RxTx


Der GPIO 21 ist hardwaremässig auf die INT A und INT B der beiden 16 Port B1 und B2 gebrückt um den Interrupt auszuführen.


Irgendwie dürfte ich hier einen Denkfehler haben, zumindest weiß ich das die INTA und INTB der Port B1 und B2 Hardwaremäßig nicht zusammen gelegt werden dürfen.
Wie mache ich eine vollständige Verknüpfung der 4 INTx über das Attribut?
Ist die Definition des Attributs aussreichend? userReadings interrupt:Pinlevel:.low* none {fhem ("get mcp23017_B1_EDV,mcp23017_B2_EDV"); "egal"}
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

klausw

der GPIO ist korrekt eingestellt

beim MCP fehlt InterruptOut mit dem INTA/B konfiguriert werden
OnStartup ist für Ausgänge und in Deinem Fall überflüssig
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

Burny4600

Danke für die Info Klaus.
An beiden Banken ist das attr InterruptOut mit connected_active-low eingetragen. Notwendig wegen den Eingängen.
OnStartup ist nur mehr auf der Bank 2 für die Ausgänge definiert.
Die Änderungen habe ich soweit durchgeführt, aber dennoch funktionieren die Eingänge nicht wie sie sollten.
Lege ich Masse an einem Eingang an erkennt zwar der RPI_GIPO 21 die Änderung, aber der MCP Eingang ändert den Zustand nicht.
Eigenartig ist an der Angelegenheit das sich auf der geöffnete Bank 1, welche nur Eingänge hat, sich nichts ändert wenn ich das Signal an einem Eingang anlege. Mache ich auf der geöffneten Browser Eingangsseite der Bank 1 ein F5 schalten die Eingange.
Bei den Ausgängen gibt es dieses Problem nicht. Die schalten sofort.
Nur was hat der Browser Refresch (F5) damit zu tun das erst dann eine Signaländerung am MCP erkannt wird.
Irgendwie komme ich hier noch nicht weiter.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

klausw

Ein Refresh oder (F5) führt auch ein "get mcpdevice" aus.
Wenn der GPIO auf Leveländerung reagiert und F5 beim MCP den korrekten Wert bringt dann stimmt evtl. mit dem userReadings was nicht.
connected_active-low sollte passen
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

Burny4600

Wie und wo kann ich userReadings überprüfen bzw. korrigieren?
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

klausw

Das userreadings ist das Attibut vom GPIO. Dort kannst du es auch korrigieren.
Hast du keine Fehlermeldungen im Log?

Ich würde minimal Beginnen:
userReadings test {fhem "get mcp23017_B1_EDV"; return "egal"}
eventuell brauchst du ein doppeltes ; ich weiß nicht mehr genau wie das was. Aber wenn es nicht passt sollten Fehler im Log auftauchen.
Wenn es funktioniert kannst du noch zweiten MCP und den Trigger hinzufügen.
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

Burny4600

Irgendwie komme ich hier nicht weiter.
Ich habe zudem beim RPI_GPIO21 und dem MCP23017 auf verbose 5 das Attribut geändert.
Habe den Eingang mcp23017_B1_EDV.A0 auf masse gelegt und keine Änderung im Frontend dieses Einganges gesehen.
Dies ist das Log dazu, nur das was ich im Log sehe hilft mir auch nicht weiter.
2018.01.05 11:13:13.611 5: INT, in fileaccess: value
2018.01.05 11:13:14.466 5: INT, in fileaccess: value
2018.01.05 11:17:18.821 5: INT, in fileaccess: value
2018.01.05 11:17:19.530 5: INT, in fileaccess: value
2018.01.05 11:18:04.896 5: INT, in fileaccess: value
2018.01.05 11:18:05.652 5: INT, in fileaccess: value
2018.01.05 11:19:32.682 5: mcp23017_B1_EDV UpdReadings Register: 19, Inhalt: 0
2018.01.05 11:19:32.684 5: mcp23017_B1_EDV UpdReadings Register: 18, Inhalt: 8
2018.01.05 11:19:33.423 5: mcp23017_B1_EDV UpdReadings Register: 19, Inhalt: 0
2018.01.05 11:19:33.424 5: mcp23017_B1_EDV UpdReadings Register: 18, Inhalt: 8
2018.01.05 11:21:29.651 5: INT, in fileaccess: value
2018.01.05 11:21:29.665 5: mcp23017_B1_EDV UpdReadings Register: 19, Inhalt: 0
2018.01.05 11:21:29.666 5: mcp23017_B1_EDV UpdReadings Register: 18, Inhalt: 8
2018.01.05 11:22:18.459 5: INT, in fileaccess: edge
2018.01.05 11:22:21.324 5: INT, in fileaccess: value

Ich verstehe nur nicht warum diese Konfiguration nicht mehr funktioniert wo vor einiger Zeit beim Test alles funktioniert hatte.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

Burny4600

#7
Mittlerweilen musste ich auf mehreren Systemen feststellen das die Eingänge nicht richtig funktionieren, was ich nicht verstehe.
Entweder haben die FHEM Installationen durch die Updates einen Fehler was die MCP23017 oder alle MCP23017 Eingänge sind gestorben was ich mir nicht vorstellen kann da sie bis vor kurzem noch funktioniert haben und alle gleichzeitig gestorben sind kann ich mir nicht vorstellen.

LIST INT GPIO 21
Internals:
   CFGFN      /media/hdd/fhem/mycfg/AD_Controller/I2C_MCP23017_rasp01.cfg
   CHANGED   
   DEF        21
   EXCEPT_FD  163
   GPIO_Basedir /sys/class/gpio
   GPIO_Nr    21
   NAME       INT
   NR         1706
   STATE      AUS
   TYPE       RPI_GPIO
   WiringPi_gpio /usr/local/bin/gpio
   READINGS:
     2018-01-02 14:00:34   Counter         1
     2018-01-05 17:32:28   Dblclick        off
     2018-01-06 11:06:16   Pinlevel        high
     2018-01-05 19:30:16   interrupt       egal
     2018-01-05 19:30:16   state           off
   fhem:
     interfaces switch
Attributes:
   active_low yes
   alias      RPI_GIPO 21 Interupt für MCP23017 Modul
   devStateIcon EIN:control_on_off@0CFB0C AUS:control_home@red
   direction  input
   eventMap   on:EIN off:AUS
   icon       control_on_off
   interrupt  both
   pud_resistor up
   room       _GPIO,_IO
   userReadings interrupt:Pinlevel:.low* none {fhem ("get mcp23017_B1_EDV,mcp23017_B2_EDV"); "egal"}
   verbose    5


LIST EINGÄNGE
Internals:
   CFGFN      /media/hdd/fhem/mycfg/AD_Controller/I2C_MCP23017_rasp01.cfg
   DEF        0x20
   I2C_Address 32
   IODev      RpiI2C_1
   NAME       mcp23017_B1_EDV
   NR         1679
   RpiI2C_1_SENDSTAT Ok
   STATE      Ok
   TYPE       I2C_MCP23017
   READINGS:
     2018-01-02 17:56:40   PortA0          off
     2017-12-31 11:18:08   PortA1          off
     2017-12-31 11:18:08   PortA2          off
     2017-12-31 12:31:18   PortA3          on
     2017-12-31 11:18:08   PortA4          off
     2017-12-31 11:18:08   PortA5          off
     2017-12-31 11:18:08   PortA6          off
     2017-12-31 11:18:08   PortA7          off
     2017-12-31 11:18:07   PortB0          off
     2017-12-31 11:18:07   PortB1          off
     2017-12-31 11:18:07   PortB2          off
     2017-12-31 11:18:07   PortB3          off
     2017-12-31 11:18:07   PortB4          off
     2017-12-31 11:18:07   PortB5          off
     2017-12-31 11:18:07   PortB6          off
     2017-12-31 11:18:07   PortB7          off
     2018-01-06 11:09:05   state           Ok
Attributes:
   IODev      RpiI2C_1
   Interrupt  A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
   InterruptOut connected_active-low
   Pullup     A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
   alias      Digital I/O Bank 1 | Port A0-A7,B0-B7
   devStateIcon Ok:it_net@0CFB0C Initialized:it_net@yellow defined:it_net@yellow disconnected:it_net@red error:it_net@red
   group      Schnittstellen I2C
   icon       it_net
   invert_input A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
   room       _IO,_RxTx
   verbose    5


LIST AUSGÄNGE & 1 Eingang

Internals:
   CFGFN      /media/hdd/fhem/mycfg/AD_Controller/I2C_MCP23017_rasp01.cfg
   DEF        0x21
   I2C_Address 33
   IODev      RpiI2C_1
   NAME       mcp23017_B2_EDV
   NR         1684
   RpiI2C_1_SENDSTAT Ok
   STATE      Ok
   TYPE       I2C_MCP23017
   READINGS:
     2018-01-05 19:22:56   PortA0          on
     2018-01-05 19:22:56   PortA1          on
     2018-01-05 19:22:56   PortA2          on
     2018-01-05 19:22:56   PortA3          on
     2018-01-05 19:22:56   PortA4          on
     2018-01-05 19:22:56   PortA5          on
     2018-01-05 19:22:56   PortA6          on
     2018-01-05 19:22:56   PortA7          on
     2017-08-23 12:50:39   PortB0          on
     2017-06-15 12:24:53   PortB1          off
     2017-06-15 12:24:53   PortB2          off
     2017-06-15 12:24:53   PortB3          off
     2017-06-15 12:24:53   PortB4          off
     2017-06-15 12:24:53   PortB5          off
     2017-06-15 12:24:53   PortB6          off
     2017-06-15 12:24:53   PortB7          off
     2018-01-06 11:10:28   state           Ok
Attributes:
   IODev      RpiI2C_1
   Interrupt  B0
   InterruptOut connected_open-drain
   OnStartup  A0=on,A1=on,A2=on,A3=on,A4=on,A5=on,A6=on,A7=on
   OutputPorts A0,A1,A2,A3,A4,A5,A6,A7
   Pullup     B0
   alias      Digital I/O Bank 2 | Port A0-A7,B0
   devStateIcon Ok:it_net@0CFB0C Initialized:it_net@yellow defined:it_net@yellow disconnected:it_net@E50005 error:it_net@E50005
   group      Schnittstellen I2C
   icon       it_net
   invert_input B0
   room       _IO,_RxTx


pi@ccs-ht-rasp01:~ $ ls -la /sys/class/gpio/
insgesamt 0
drwxrwx---  2 root gpio    0 Jan  5 19:22 .
drwxr-xr-x 48 root root    0 Jan  6 11:16 ..
-rwxrwx---  1 root gpio 4096 Jan  5 19:22 export
lrwxrwxrwx  1 root gpio    0 Jan  5 19:22 gpio21 -> ../../devices/platform/soc/3f200000.gpio/gpiochip0/gpio/gpio21
lrwxrwxrwx  1 root gpio    0 Jan  5 17:31 gpio27 -> ../../devices/platform/soc/3f200000.gpio/gpiochip0/gpio/gpio27
lrwxrwxrwx  1 root gpio    0 Jan  5 17:30 gpiochip0 -> ../../devices/platform/soc/3f200000.gpio/gpio/gpiochip0
lrwxrwxrwx  1 root gpio    0 Jan  5 17:30 gpiochip100 -> ../../devices/gpiochip2/gpio/gpiochip100
lrwxrwxrwx  1 root gpio    0 Jan  5 17:30 gpiochip128 -> ../../devices/gpiochip1/gpio/gpiochip128
-rwxrwx---  1 root gpio 4096 Jan  5 19:17 unexport
pi@ccs-ht-rasp01:~ $


pi@ccs-ht-rasp01:~ $ ls -l /sys/class/gpio/gpio21/
insgesamt 0
-rwxrwx--- 1 root gpio 4096 Jan  5 19:22 active_low
lrwxrwxrwx 1 root gpio    0 Jan  5 19:22 device -> ../../../gpiochip0
-rwxrwx--- 1 root gpio 4096 Jan  5 19:22 direction
-rwxrwx--- 1 root gpio 4096 Jan  6 11:06 edge
drwxrwx--- 2 root gpio    0 Jan  5 19:22 power
lrwxrwxrwx 1 root gpio    0 Jan  5 19:22 subsystem -> ../../../../../../../class/gpio
-rwxrwx--- 1 root gpio 4096 Jan  5 19:22 uevent
-rwxrwx--- 1 root gpio 4096 Jan  5 19:22 value
pi@ccs-ht-rasp01:~ $
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

klausw

Den MCP23017 kannst du mit {fhem ("get mcp23017_B1_EDV,mcp23017_B2_EDV")} aktualisieren?
Wenn ja dann ist der Teil doch schon ok


INT, in fileaccess: value
-> bei einem Input GPIO wird der Pinstatus gelesen

INT, in fileaccess: edge
-> bei einem Input GPIO wird die Interrupt Einstellung gelesen. Dies geschieht wenn ein Interrupt ausgelöst wurde.
wenn das kommt das klappt das mit dem Interrupt.

Mir fällt gerade auf das state und pinlevel bei interrupt "both" nicht aktualisiert werden (bug oder feature ist hier die Frage).
Versuche bitte mal rising oder falling.
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

Burny4600

Hallo Klaus.

Mit der Fehlersuche habe ich so einiges umgestellt.
Was jedenfalls ich korrigiert habe ist das InterruptOut mit connected_active-low zu definieren ist und active_low auf no sein muss damit der Interrupt funktioniert.
Was jedenfalls keine Rolle gespielt hat ob der interrupt auf both, falling oder rising steht.
Irgendwie habe ich mit der Fehlersuche entweder bei allen etwas verstellt oder es hat sich etwas geändert warum der Interrupt nicht mehr funktionierte. Vermutlich etwas verstellt.
Bei dem System wo es mir bei der Inbetriebnahme aufgefallen ist dürfte aber noch etwas anderes fehlerhaft sein. Hier wird der Interrupt einfach nicht ausgeführt. Ich werde einen anderen INT Ausgang testweise verwenden um festzustellen ob der INTA der Bank1 defekt ist.
Jedenfalls der GPIO Eingang funktioniert bei manueller Auslösung was ich testweise überprüft habe.
Morgen werde ich weiter machen.
   
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

Burny4600

Hallo Klaus.
ZitatDen MCP23017 kannst du mit {fhem ("get mcp23017_B1_EDV,mcp23017_B2_EDV")} aktualisieren?
Der GPIO wird aktualisisert.
Ich habe alle 4 INT Ausgänge getestet, aber kein einziger gibt etwas auf den GPIO. Zumindest was die Aktuallisierung des GPIOS betrifft.
Ich muß mir anscheinend doch ein kleines OSZI besorgen um Impulse messen zu können.
Alle 32 I/Os der zwei Banken funktionieren als Ausgänge, nur das hilft mir mit dem Interrupt den ich für die Eingänge benötige nicht weiter.
Ich vermute das beide mcp23017 Banken mit den INT Ausgängen einen Defekt haben und das Problem nicht an der Software liegt.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

klausw

Zitat von: Burny4600 am 10 Januar 2018, 13:11:05
Ich vermute das beide mcp23017 Banken mit den INT Ausgängen einen Defekt haben und das Problem nicht an der Software liegt.

Hmm, das scheint der Fall zu sein.
Den GPIO hast du als Fehlerquelle schon ausgeschlossen.
connected_active-low bedeutet, das die INT Ausgänge normalerweise 3,3V haben und im Interruptfall aktiv auf Masse gezogen werden.
Vorrausgesetzt natürlich, es gibt einen Pullup Widerstand an diesem Knoten.
Wenn du 0V misst würde ich einfach mal 10k von der INT Leitung auf die 3,3V legen.
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

Burny4600

#12
Hallo Klaus.
Neue Erkenntnisse die mich ein wenig verwundern lässt.
Eine Beschaltung eines Widerstandes von 3,3V auf Bank1 INTA würde nichts bringen da im nicht geschalteten Zustand 5V ausgegeben werden.
Siehe Schaltplan.
Ich habe INTA und RPI_GPIO21 durch einen Optokoppler getrennt, damit am Ausgang des Optokopplers 3,3V mit einem Pullup Widerstand am RPI_GPIO21 anstehen oder Masse bei ausgelösten Interrupt. Der RPI_GPIO21 funktionierte aber auch schon vorher, werde aber allen INTERRUPTS einen Optokoppler dazwischen hängen.
Aber jetzt kommt das Rätsel wo ich nicht weiter komme, denn mittlerweile funktionieren auch bei den schon in Betrieb genommen Eingängen diese auch wieder nicht obwohl ich nichts verändert habe.
Ein weiteres Phänomen ist das, das der INT Ausgang für einmal einen Interrupt eines Eingangs funktioniert und beim zweiten dann nicht mehr. Und wenn er nicht mehr funktioniert stehen hier nicht mehr die 5V an sondern 0V, was aber nicht sein dürfte oder sollte. Ich habe auf dem INTA auch schon einen Pullup Widerstand gegen 5V am Optokopler Eingang beschaltet bzw. der auch der INT Ausgang ist. Aber es stehen 0,5V am INT an. Erst bei einem F5 Refresh auf dem WEB Frontend ist am INT wieder 5V und wieder bereit für den nächsten Interrupt.
Somit weiß ich zwar das keines der IOPiPlus Boards defekt ist, aber das hilft mir im Moment auch nicht weiter.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

klausw

Zitat von: Burny4600 am 11 Januar 2018, 17:01:27
Eine Beschaltung eines Widerstandes von 3,3V auf Bank1 INTA würde nichts bringen da im nicht geschalteten Zustand 5V ausgegeben werden.
Stimmt mein Fehler.
connected_active-low schaltet zwischen Vdd und Vss (das bedeutet auch, das du die INTs von den beiden MCP23017 nicht verbunden hast?)
Ohne Optokoppler würdest du mit connected_open-drain und Pullup gegen 3,3V auskommen.
Beim open drain ist der INT normalerweise hochohmig (dadurch 3,3V wegen Pullup) und wird erst im Interruptfall gegen Masse gezogen. Dadurch könntest du auch die INTs der beiden MCP23017 verbinden, was sonst nicht funktioniert oder sogar die ICs zerstört.
Der Optokoppler bringt meiner Meinung nach keinen Vorteil.

Zitat von: Burny4600 am 11 Januar 2018, 17:01:27
Ich habe INTA und RPI_GPIO21 durch einen Optokoppler getrennt damit am Ausgang des Optokopplers 3,3V mit einem Pullup Widerstand am RPI_GPIO21 anstehen oder Masse bei ausgelösten Interrupt. Der RPI_GPIO21 funktionierte aber auch schon vorher, werde aber allen INTERUPTS einen Optokoppler dazwischen hängen.
Aber jetzt kommt das Rätsel wo ich nicht weiter komme, denn mittlerweile funktionieren auch bei den schon in Betrieb genommen Eingängen diese auch wieder nicht obwohl ich nichts verändert habe.
An den MCP23017 Modul hat sich in den letzten Monaten aber auch nichts verändert  :o
Zitat von: Burny4600 am 11 Januar 2018, 17:01:27
Ein weiteres Phänomen ist das, das der INT Ausgang für einmal einen Interrupt eines Eingangs funktioniert und beim zweiten dann nicht mehr. Und wenn er nicht mehr funktioniert stehen hier nicht mehr die 5V an sondern 0V, was aber nicht sein dürfte. Ich habe auf dem INTA auch schon einen Pollup Widerstand gegen 5V am Optokopler Eingang beschaltet bzw. der auch der INT Ausgang ist. Aber es stehen 0,5V am INT an. Erst bei einem F5 Refresh auf dem WEB Frontend ist am INT wieder 5V und wieder Bereit für den nächsten Interrupt.
Somitweiß ich zwar das keines der IOPiPlus Boards defekt ist, aber das hilft mir im Moment auch nicht weiter.
Das soll auch so sein. Wenn ein Interrupt ausgelöst wird, so steht dieser so lange an (also INT Ausgang aktiv...in deinem Fall 0V) bis die Zustandsregister des MCP23017 ausgelesen werden. Das würde erklären, wieso nach F5 der INT wieder auf 5V hoch geht.
Wenn allerdings das toggeln am GPIO21 einen Interrupt auslöst (also die Readings automatisch aktualisiert) und der INT vom MCP23017 bei Pegelwechsel eines Eingangs auf LOW geht und bei F5 auf der Detailseite des MCP23017 wieder auf HIGH geht dann kann es nur noch an deinem userreading liegen, welches den zu F5 adäquaten Befehl auslöst. Versuche doch anstelle von userreading mal ein 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

Burny4600

#14
Soweit ich weis vertragen die RPI_GPIOs nur 3,3V, auf Dauer oder täusche ich mich.
Darum dachte ich eine Trennung zwischen INT und GPIO zu schaffen weil der INT Ausgang 5V bzw. Masse ausgibt.
Die vier INT Ausgänge der beiden Banken sind miteinander nicht verbunden. Es ist nur der INT A der ersten Bank mit dem RPI_GPIO21 verbunden und das müsste reichen.
Beim Messen der Spannungen ist mir aufgefallen das beide INT einer Bank gleichzeitig sowohl 5V ausgeben bzw. auf Masse gezogen sind.
Warum dann zwei INT Ausgänge mit dem gleichen Signalzustand?
ZitatVersuche doch anstelle von userreading mal ein notify.
Wie hast du das mit dem Notifying gemeint?
Dieses userreading interrupt:Pinlevel:.low* none {fhem ("get mcp23017_B1_EDV,mcp23017_B2_EDV");; "egal"} löschen und das notify mit was definieren?
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

Burny4600

#15
Hallo Klaus.
Ich komme leider an diesem Punkt nicht mehr weiter.
Wie hast du das mit dem Userreading gemeint?

Ich habe bei einem Testsystem alles auf verbose 5 gestellt um eventuell mehr über das Fehlverhalten zu erfahren.
Zusätzlich habe ich einmal den Eingang Bank1-B0 auf Masse geschaltet und wieder geöffnet Signal High (5V) am Eingang des MCP23017.
Siehe Anhang.
Nur der INT zu RPI_GPIO21 bleibt auf 0V und wird erst wieder mit F5 wieder High (5V).
Mittlerweile habe ich alle Variationen durch nur hat es keinen Einfluß auf den INT zu RPI_GPIO21. 
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

klausw

Mist, mein letzter Post ist wohl nicht angekommen  :o

zu der Datei... ist viel überflüssiges drin dafür fehlen andere wichtigere Dinge 8):
global verbose würde ich auf 1 setzen und den verbose vom GPIO, MCP und I2C auf 5

Ab Zeile 1013 wird ein Interruptereignis abgearbeitet.
Der Interrupt ist auf falling eingestellt, daher wird nur Toggle und Zähler gesetzt
state und pinlevel sind immer low/off da der Interrupt nur bei fallender Flanke ausgelöst wird und in diesem Moment der Pin immer low ist, allerdings werden sie aktualisiert (beim setzten von event on change reading wird auch kein Event das z.B. für notify benötigt wird ausgelöst)
In der Detailansicht des INT GPIO wirst du also immer low beim Pinlevel sehen (nur bei both wird es toggeln)
Trotz allem funktioniert der Interrupt (müsste am counter oder toggle gut zu sehen sein)
In Zeile 1017 wird "get mcp23017_B1_OG1,mcp23017_B2_OG1" abgesetzt, was bedeutet, das dein userreadings ausgeführt wird
In Zeile 1018, 1019, 1023, 1024 werden die Ports auch aktualisiert allerdings mit 0 (viel mehr ist nicht zu erkennen, da das I2C Modul auf verbose 1 gestellt ist)

-> Interrupt über GPIO funktioniert
-> Auslesen der Ports wird ausgeführt
Aber die Ports sind in diesem Moment immer 0

Wie lange legst du 5V an?

Kann es sein, das du an A0 die 5V anlegst?
Register 18 ist Bank A und der Wert 1 deutet auf Port 0 hin


Zitat von: Burny4600 am 14 Januar 2018, 12:25:29
Ich komme leider an diesem Punkt nicht mehr weiter.
Wie hast du das mit dem Userreading gemeint?

hat sich erledigt ...scheint ja zu funktionieren

Zitat von: Burny4600 am 11 Januar 2018, 19:04:13
Nur der INT zu RPI_GPIO21 bleibt auf 0V und wird erst wieder mit F5 wieder High (5V).

Du meinst auf der Detailseite in FHEM?
...siehe Erklärung oben

Zitat von: Burny4600 am 11 Januar 2018, 19:04:13
Soweit ich weis vertragen die RPI_GPIOs nur 3,3V, auf Dauer oder täusche ich mich.

Stimmt, aber open collector Ausgänge sind low dominant. Bedeutet sie ziehen den Pin hart auf Masse oder sind hochohmig.
Hochohmig würde im Falle eines angeschlossenen Pullups gegen 3,3V einen Pegel von 3,3V bedeuten.
So kannst du auch problemlos meherere open collector Ausgänge verbinden.

Zitat von: Burny4600 am 11 Januar 2018, 19:04:13
Darum dachte ich eine Trennung zwischen INT und GPIO zu schaffen weil der INT Ausgang 5V bzw. Masse ausgibt.

Bei active-low mach das auch Sinn, da dieser aktiv gegen Masse und Versorgung (in diesem Fall 5V) treibt.
Ein pullup ist daher in diesem Fall auch sinnlos.

Zitat von: Burny4600 am 11 Januar 2018, 19:04:13
Die vier INT Ausgänge der beiden Banken sind miteinander nicht verbunden. Es ist nur der INT A der ersten Bank mit dem RPI_GPIO21 verbunden und das müsste reichen.

Das ist dann auch Ok

Zitat von: Burny4600 am 11 Januar 2018, 19:04:13
Beim Messen der Spannungen ist mir aufgefallen das beide INT einer Bank gleichzeitig sowohl 5V ausgeben bzw. auf Masse gezogen sind.
Warum dann zwei INT Ausgänge mit dem gleichen Signalzustand?

Wenn du beide Bänke getrennt auswertest aber die Pins fälschlicherweise als connected eingestellt hast funktioniert es trotzdem.
Manche IC Hersteller denken halt mit  8)
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

Burny4600

ZitatWie lange legst du 5V an?

Kann es sein, das du an A0 die 5V anlegst?
Register 18 ist Bank A und der Wert 1 deutet auf Port 0 hin
An den Ein- und Ausgängen wird aktiv mit Masse geschaltet.
5V kann nur über den Pullup an den Eingängen der Bank1 anliegen und werden aktiv gegen Masse geschaltet.

ZitatStimmt, aber open collector Ausgänge sind low dominant.
Bedeutet sie ziehen den Pin hart auf Masse oder sind hochohmig.
Hochohmig würde im Falle eines angeschlossenen Pullups gegen 3,3V einen Pegel von 3,3V bedeuten.
So kannst du auch problemlos meherere open collector Ausgänge verbinden.
Nur im Ruhezustand liegen an den INT Ausgängen der Banken immer 5V an, was auch logisch ist anhand des Schaltplans.
Gegen Masse wird der INT geschaltet wenn ein Ereignis auf einem Eingang erfolgte (aktiv Masse) und an den RPI_GPIO21 weitergegeben werden sollte bis das Einlesen angeschlossen ist.
Nur warum der INT nicht wieder auf High sich geändert verstehe ich nicht, denn die INTs gehen erst bei einem F5 der betreffenden Bank wieder auf 5V und nicht auf 3,3V als High Signal belegt.

ZitatWenn du beide Bänke getrennt auswertest aber die Pins fälschlicherweise als connected eingestellt hast funktioniert es trotzdem.
Manche IC Hersteller denken halt mit  8)
InterruptOut  connected_active-low wird für die Eingänge benötigt.
Werden auf einer Bank Ein- und Ausgänge verwendet ist das Attribut InterruptOut bei dem connected_active-low eingetragen welches nur für Eingänge notwendig sind. So habe ich es zumindest verstanden.

Ich habe nochmals einen Durchlauf mit der Aktivierung der Eingänge gemacht.
B4 und B6 sind aktiv wegen der Spannungsüberwachung.
A0 bis B3 haben im Ruhezustand ein High (5V wegen den Pullups) anliegen.
Mit dem Schalten gegen Masse ist der Eingang aktiv.
Ich habe beim ersten Durchlauf die Eingängen A0 bis B3 nur kurz gegen Masse geschaltet und beim zweiten Durchlauf länger gegen Masse geschaltet.
Anbei das Log für den Test.
Ich hoffe mit der verbose Änderung laut deienr Angabe jetzt mehr heruslesen zu können.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

klausw

Zitat von: Burny4600 am 16 Januar 2018, 10:46:18
An den Ein- und Ausgängen wird aktiv mit Masse geschaltet.
5V kann nur über den Pullup an den Eingängen der Bank1 anliegen und werden aktiv gegen Masse geschaltet.
Das invert_input Attribut hatte ich in deiner config übersehen.
Ist aber auch völlig egal in welche Richtung geschaltet wird...
Was ich wissen wollte ist, wie lange der Taster oder was auch immer angeschlossen ist betätigt wird.
Bei sehr kurzem Tastendruck ist es möglich, das dieser bereits vorbei ist, wenn der MCP23017 ausgelesen wird.
Ich möchte ausschließen, das das ganze System zu träge reagiert.

Zitat von: Burny4600 am 16 Januar 2018, 10:46:18
Nur im Ruhezustand liegen an den INT Ausgängen der Banken immer 5V an, was auch logisch ist anhand des Schaltplans.
Gegen Masse wird der INT geschaltet wenn ein Ereignis auf einem Eingang erfolgte (aktiv Masse) und an den RPI_GPIO21 weitergegeben werden sollte bis das Einlesen angeschlossen ist.
Die Lösung die du verwendest schein aber zu funktionieren, also alles gut.
Deinen Schaltplan kenne ich nicht.
Bei OpenCollector bestimmt der Pullup die obere Spannung und dieser kann auch an 3,3V angeschlossen werden. Aber wie gesagt, ist für dein Problem nicht wichtig.

Zitat von: Burny4600 am 16 Januar 2018, 10:46:18
Nur warum der INT nicht wieder auf High sich geändert verstehe ich nicht, denn die INTs gehen erst bei einem F5 der betreffenden Bank wieder auf 5V und nicht auf 3,3V als High Signal belegt.
InterruptOut  connected_active-low wird für die Eingänge benötigt.
Werden auf einer Bank Ein- und Ausgänge verwendet ist das Attribut InterruptOut bei dem connected_active-low eingetragen welches nur für Eingänge notwendig sind. So habe ich es zumindest verstanden.
InterruptOut ist nur für Inputs relevant
Wenn in der selben Bank auch Ausgänge existieren hat das keinen Einfluss (auch nicht auf die Interrupt Konfiguration)
connected -> bei Interrupt auf einer der beiden Bänke (A und B) werden beide INTx geschaltet
separate -> bei Interrupt auf Bank A wird INTA und bei Interrupt auf Bank B wird INTB geschaltet

Zitat von: Burny4600 am 16 Januar 2018, 10:46:18
Anbei das Log für den Test.
Ich hoffe mit der verbose Änderung laut deienr Angabe jetzt mehr heruslesen zu können.

jetzt musst du nur noch die Datei anhängen  8)
Es wäre hilfreich, wenn du in das Log passend Zeilen einfügst wann und wie sich welcher Eingang geändert hat.
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

Burny4600

Hallo Klaus!

Den Schaltplan der MCP23017 Print habe ich unter diesem Link schon angehängt gehabt.
https://forum.fhem.de/index.php/topic,81920.msg746832.html#msg746832

Nochmals die Filelogs.
Ich habe nach dem FHEM Start nur mit der 3 Seckunden Regel die Masse an jeden Eingang von Ao bis B3 der Bank 1 anliegen lassen.
Grundsätzlich muss der MCP23017 bei Interrupt über RPI_GPIO sofort schalten.
Bei der ersten Inbetriebnahme im Heizhaus haben die Eingänge sofort den Status mit anlegen der Masse geändert. Ich dachte Anfangs das im Haushaus die Eingänge noch funktionieren, nur dem ist auch nicht mehr so obwohl bis auf die FHEM Updates im Heizhaus sich nichts geändert hat.
Irgendetwas muss sich unter FHEM geändert haben warum die Interrupts nicht mehr richtig verarbeitet werden.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

klausw

Zitat von: Burny4600 am 16 Januar 2018, 15:19:23
Den Schaltplan der MCP23017 Print habe ich unter diesem Link schon angehängt gehabt.
https://forum.fhem.de/index.php/topic,81920.msg746832.html#msg746832
da sind die INTx Ausgänge offen. Wenn sie dann noch auf *_open-drain gestellt sind kann ich mir nicht erklären wieso da 5V anliegen.


Zitat von: Burny4600 am 16 Januar 2018, 15:19:23
Ich habe nach dem FHEM Start nur mit der 3 Seckunden Regel die Masse an jeden Eingang von Ao bis B3 der Bank 1 anliegen lassen.
Grundsätzlich muss der MCP23017 bei Interrupt über RPI_GPIO sofort schalten.
Das Ergebnis ist in "EingängeA0-B3_21.22.23.txt" ?
Dort kann ich kein Interrupt Ereignis am GPIO und auch keinen Zugriff auf den MCP sehen.
Was läuft denn mit I2C Adresse 0xF?
Dieses Device macht gut Traffic auf dem I2C.

So richtig kann ich aus dem Log leider nix lesen. Mit globalem verbose war das doch nicht so verkehrt.

Zitat von: Burny4600 am 16 Januar 2018, 15:19:23
Bei der ersten Inbetriebnahme im Heizhaus haben die Eingänge sofort den Status mit anlegen der Masse geändert. Ich dachte Anfangs das im Haushaus die Eingänge noch funktionieren, nur dem ist auch nicht mehr so obwohl bis auf die FHEM Updates im Heizhaus sich nichts geändert hat.
Irgendetwas muss sich unter FHEM geändert haben warum die Interrupts nicht mehr richtig verarbeitet werden.

Seit wann funktioniert es nicht mehr?
Was hast du verändert? Neue Komponenten in FHEM? Nur ein update?
Funktionierte es vorher zuverlässig?
Hast du ein Backup von vorher?

Das Modul MCP23017 ist 2016 das letzte mal geändert worden.
Das GPIO Modul erst vor einer Woche. Aber am Interrupt hat sich nichts geändert. Diese funktionieren, jedenfalls bei mir, noch.
Bisher gibt es auch keine weiteren Meldungen das die Interrupts defekt sind.


Ich weiß ehrlich gesagt immer noch nicht an welcher Stelle es hängt.
Wir sollten GPIO und MCP besser getrennt betrachten.

Was passiert mit dem GPIO wenn du direkt am Pin (ohne deine Schaltung) Pulse draufgibst?
Zählt der counter hoch?

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

Burny4600

#21
Hallo Klaus!
ZitatWas läuft denn mit I2C Adresse 0xF?
Auf 0xF befindet sich die S-USV.

ZitatSeit wann funktioniert es nicht mehr?
Was hast du verändert? Neue Komponenten in FHEM? Nur ein update?
Funktionierte es vorher zuverlässig?
Hast du ein Backup von vorher?
Das kann ich leider nicht beantworten, denn das Heizungssystem lief gut ein Halbes Jahr ohne Probleme. Ich bin erst jetzt darauf gekommen, wo ich einen weiteren MCP-23017 bei einem anderen System in Betrieb nehmen wollte, das die MCP-23017 nicht mehr richtig funktionieren.
Bei der Heizung hatte ich anfangs die Eingänge mit plus 5V am MCP23017 gesteuert was ich nach ca. 3 Monaten auf Masse Steuerung geändert habe. Ca. 2 Monate stäter habe ich beim Heizungssystem sowie auch bei allen anderen 8 Systemen S-USVs (0xF) nachgerüstet. Auch da hat das System bei der Heizung noch ordnungsgemäß funktioniert. Ansonsten wurden nur FHEM Updates gemacht.
Zwei System sollen mit MCP-23017 ausgestattet sein. Bei den anderen reichten die RPI_GPIOs.
Backup habe ich von den ganzen System der Heizung so lang rückwirkend leider nicht.

Ich habe heute des System welches ich in Betrieb nehmen wollte für Test reduziert.
Die S-USV und 1-Wire wurden entfernt. Ich habe einen nagelneuen MCP-23017 (0x20, 0x21) für den Test verwendt und entsprechend alles protokolliert.
1. Bestückung des MCP_23017 Boards.
   Für den Test sind nur die USB nanoCUL Schnittstellen noch aktiv und nur das i2c Device MCP23017.
   Der RPIO_GPIO 21 ist mit INT-A der Bank 1 verbunden.
   Zusätzlich ist ein 10k Widerstand von 3.3V an Bank 1 INT-A verbunden.

2. FHEM Start.txt ( Kein Input ist aktiv, ebenso auch kein Output ). Die gemessenen Spannungen nach dem FHEM Start sind an den Messpunkten wie folgt.
   Bank 1 INT-A: 3,29V
   Bank 1 INT-B: 0,00V
   Bank 2 INT-A: 4,97V
   Bank 2 INT-B: 4,97V

ZitatWas passiert mit dem GPIO wenn du direkt am Pin (ohne deine Schaltung) Pulse draufgibst?
Zählt der counter hoch?
3. RPIO_GPIO_01.txt
   RPIO_GPIO21 wird Masse angelegt
   Bank 1 INT-A: 3,29V
   Bank 1 INT-B: 0,43V
   Bank 2 INT-A: 4,97V
   Bank 2 INT-B: 4,97V

4. INPUT_Test_01.txt
   Input A0 wird Masse angelegt
   Bank 1 INT-A: 0,01V
   Bank 1 INT-B: 0,00V
   Bank 2 INT-A: 4,97V
   Bank 2 INT-B: 4,97V

5. INPUT_Test_02.txt
   FHEM Web Seite INPUT Bank 1 mcp23017_B1_OG1 wird aufgerufen (F5)
   Bank 1 INT-A: 3,29V
   Bank 1 INT-B: 0,00V
   Bank 2 INT-A: 4,97V
   Bank 2 INT-B: 4,97V

6. INPUT_Test_03.txt
   Input A1 wird Masse angelegt
   Bank 1 INT-A: 0,01V
   Bank 1 INT-B: 0,00V
   Bank 2 INT-A: 4,97V
   Bank 2 INT-B: 4,97V

7. INPUT_Test_04.txt
   FHEM Web Seite INPUT Bank 1 mcp23017_B1_OG1 wird aufgerufen (F5)
   Bank 1 INT-A: 3,29V
   Bank 1 INT-B: 0,00V
   Bank 2 INT-A: 4,97V
   Bank 2 INT-B: 4,97V

Zu den einzelnen Punkten habe ich einzelne Logs ausgegeben mit einer zeitlichen Überschneidung. Siehe Anhang.
Ich hoffe das es so einwenig transparenter ist.

2018.01.18
I2C auf verbose 5 zu setzten wurde beim ersten nicht berücksichtigt.
Die S-USV und 1-Wire wurden entfernt. Ich habe das Systembezogene MCP-23017 Board (0x20, 0x21) für den Test verwendt und entsprechend alles protokolliert.
System bezogenes MCP:23017 Board
1. Bestückung des MCP_23017 Boards.
   Für den Test sind alle Komponenten wieder aktiv.
   Der RPIO_GPIO 21 ist mit INT-A der Bank 1 verbunden.
   Kein 10k Widerstand von 3.3V an Bank 1 INT-A verbunden.
   INT verbose 5
   RpiI2C_1 verbose 5
   mcp23017_B1_OG1 verbose 5
   mcp23017_B2_OG1 verbose 5

2. FHEM Start.txt ( Kein Input und kein Output ist aktiv)
   Bank 1 INT-A: 3,28V
   Bank 1 INT-B: 0,00V
   Bank 2 INT-A: 5.10V
   Bank 2 INT-B: 5.10V

3. RPIO_GPIO_01.txt
   RPIO_GPIO21 wird Masse angelegt
   Bank 1 INT-A: 3,28V
   Bank 1 INT-B: 0,00V
   Bank 2 INT-A: 5,10V
   Bank 2 INT-B: 5,10V

4. INPUT_Test_01.txt
   Input A0 wird Masse angelegt
   Bank 1 INT-A: 0,00V
   Bank 1 INT-B: 0,00V
   Bank 2 INT-A: 5,10V
   Bank 2 INT-B: 5,10V

5. INPUT_Test_02.txt
   FHEM Web Seite INPUT Bank 1 mcp23017_B1_OG1 wird aufgerufen
   Bank 1 INT-A: 3,28V
   Bank 1 INT-B: 0,00V
   Bank 2 INT-A: 5,10V
   Bank 2 INT-B: 5,10V

6. INPUT_Test_03.txt
   Input A1 wird Masse angelegt
   Bank 1 INT-A: 0,00V
   Bank 1 INT-B: 0,00V
   Bank 2 INT-A: 5,10V
   Bank 2 INT-B: 5,10V

7. INPUT_Test_04.txt
   FHEM Web Seite INPUT Bank 1 mcp23017_B1_OG1 wird mit F5 aktualisiert
   Bank 1 INT-A: 3,28V
   Bank 1 INT-B: 0,00V
   Bank 2 INT-A: 5,10V
   Bank 2 INT-B: 5,10V

8. INPUT_Test_05.txt
   Messen der INT Spannungen
   Bank 1 INT-A: 3,28V
   Bank 1 INT-B: 0,00V
   Bank 2 INT-A: 5,10V
   Bank 2 INT-B: 5,10V

Wiederholter Systemstart mit aktiven Inputs mcp23017_B1_OG1:PortB4, mcp23017_B1_OG1:PortB6
2018.01.18 09:09:56.846 5: INT, in fileaccess: value
2018.01.18 09:19:17.633 0: Server shutdown
2018.01.18 09:19:17.634 5: INT: interrupt detached
2018.01.18 09:19:17.639 5: INT: gpio21 removed
2018.01.18 09:28:10.739 1: Including fhem.cfg
2018.01.18 09:28:11.476 1: Including /media/hdd/fhem/zeitplaene/zeitplaene_rasp07.cfg
2018.01.18 09:28:11.727 1: Including /media/hdd/fhem/mycfg/schnittstellen_rasp07.cfg
2018.01.18 09:28:12.295 1: Including /media/hdd/fhem/mycfg/GPIO/GPIO_rasp07.cfg
2018.01.18 09:28:13.331 1: Including /media/hdd/fhem/mycfg/AD_Controller/I2C_MCP23017_rasp07.cfg
2018.01.18 09:28:13.525 1: Including /media/hdd/fhem/myprogram/allgemein_rasp07.pm
2018.01.18 09:28:13.530 1: Including /media/hdd/fhem/myprogram/markise_rasp07.pm
2018.01.18 09:28:13.580 1: Including /media/hdd/fhem/myprogram/rolllaeden_rasp07_ROLLO.pm
2018.01.18 09:28:13.584 1: Including /media/hdd/fhem/myprogram/reset_rasp07.pm
2018.01.18 09:28:13.593 1: Including /media/hdd/fhem/mycfg/USV/usv_rasp07.cfg
2018.01.18 09:28:13.627 5: RpiI2C_1: vom client empfangen|nbyte: 4|reg: 34|usleep: 50000|direction: i2cread|i2caddress: 15
2018.01.18 09:28:13.628 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:28:13.628 5: RpiI2C_1: vom client empfangen|nbyte: 4|reg: 34|usleep: 50000|direction: i2cread|i2caddress: 15
2018.01.18 09:28:13.629 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 34
2018.01.18 09:28:13.681 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 34 2 40 0
2018.01.18 09:28:13.693 1: Including /media/hdd/fhem/log07/fhem.save
2018.01.18 09:28:13.696 4: INT: STATE kann auf on wiederhergestellt werden 2018-01-18 09:28:13
2018.01.18 09:28:13.697 4: INT: Counter kann auf 55 wiederhergestellt werden 2018-01-17 11:22:43
2018.01.18 09:28:13.698 4: INPUT INT: Counter wiederhergestellt auf 55
2018.01.18 09:28:13.699 4: INT: Dblclick kann auf off wiederhergestellt werden 2018-01-18 09:05:39
2018.01.18 09:28:13.700 4: INT: Longpress kann auf on wiederhergestellt werden 2018-01-18 09:09:56
2018.01.18 09:28:13.701 4: INT: Pinlevel kann auf high wiederhergestellt werden 2018-01-18 09:09:55
2018.01.18 09:28:13.702 4: INT: interrupt kann auf egal wiederhergestellt werden 2018-01-14 13:23:50
2018.01.18 09:28:13.703 4: INT: state kann auf on wiederhergestellt werden 2018-01-18 09:09:55
2018.01.18 09:28:13.704 4: INPUT INT: alter Pinwert war: on
2018.01.18 09:28:13.704 5: INT, in fileaccess: value
2018.01.18 09:28:13.705 4: INPUT INT: aktueller Pinwert ist: on
2018.01.18 09:28:13.718 4: mcp23017_B1_OG1: STATE kann auf Ok wiederhergestellt werden 2018-01-18 09:28:13
2018.01.18 09:28:13.720 4: mcp23017_B1_OG1: PortA0 kann auf off wiederhergestellt werden 2018-01-14 13:36:55
2018.01.18 09:28:13.721 5: mcp23017_B1_OG1: Port = A0
2018.01.18 09:28:13.722 5: mcp23017_B1_OG1: PortA0 ist Eingang
2018.01.18 09:28:13.723 4: mcp23017_B1_OG1: PortA1 kann auf off wiederhergestellt werden 2018-01-06 15:51:54
2018.01.18 09:28:13.724 5: mcp23017_B1_OG1: Port = A1
2018.01.18 09:28:13.724 5: mcp23017_B1_OG1: PortA1 ist Eingang
2018.01.18 09:28:13.725 4: mcp23017_B1_OG1: PortA2 kann auf off wiederhergestellt werden 2018-01-06 15:51:56
2018.01.18 09:28:13.726 5: mcp23017_B1_OG1: Port = A2
2018.01.18 09:28:13.727 5: mcp23017_B1_OG1: PortA2 ist Eingang
2018.01.18 09:28:13.728 4: mcp23017_B1_OG1: PortA3 kann auf off wiederhergestellt werden 2018-01-06 15:52:01
2018.01.18 09:28:13.729 5: mcp23017_B1_OG1: Port = A3
2018.01.18 09:28:13.729 5: mcp23017_B1_OG1: PortA3 ist Eingang
2018.01.18 09:28:13.730 4: mcp23017_B1_OG1: PortA4 kann auf off wiederhergestellt werden 2018-01-06 15:52:04
2018.01.18 09:28:13.731 5: mcp23017_B1_OG1: Port = A4
2018.01.18 09:28:13.732 5: mcp23017_B1_OG1: PortA4 ist Eingang
2018.01.18 09:28:13.733 4: mcp23017_B1_OG1: PortA5 kann auf off wiederhergestellt werden 2018-01-06 15:52:06
2018.01.18 09:28:13.734 5: mcp23017_B1_OG1: Port = A5
2018.01.18 09:28:13.734 5: mcp23017_B1_OG1: PortA5 ist Eingang
2018.01.18 09:28:13.735 4: mcp23017_B1_OG1: PortA6 kann auf off wiederhergestellt werden 2018-01-06 15:52:07
2018.01.18 09:28:13.736 5: mcp23017_B1_OG1: Port = A6
2018.01.18 09:28:13.736 5: mcp23017_B1_OG1: PortA6 ist Eingang
2018.01.18 09:28:13.737 4: mcp23017_B1_OG1: PortA7 kann auf off wiederhergestellt werden 2018-01-06 15:52:09
2018.01.18 09:28:13.738 5: mcp23017_B1_OG1: Port = A7
2018.01.18 09:28:13.739 5: mcp23017_B1_OG1: PortA7 ist Eingang
2018.01.18 09:28:13.740 4: mcp23017_B1_OG1: PortB0 kann auf off wiederhergestellt werden 2017-06-15 17:40:11
2018.01.18 09:28:13.740 5: mcp23017_B1_OG1: Port = B0
2018.01.18 09:28:13.741 5: mcp23017_B1_OG1: PortB0 ist Eingang
2018.01.18 09:28:13.742 4: mcp23017_B1_OG1: PortB1 kann auf off wiederhergestellt werden 2017-06-15 17:40:11
2018.01.18 09:28:13.742 5: mcp23017_B1_OG1: Port = B1
2018.01.18 09:28:13.743 5: mcp23017_B1_OG1: PortB1 ist Eingang
2018.01.18 09:28:13.744 4: mcp23017_B1_OG1: PortB2 kann auf off wiederhergestellt werden 2017-06-15 17:40:11
2018.01.18 09:28:13.745 5: mcp23017_B1_OG1: Port = B2
2018.01.18 09:28:13.745 5: mcp23017_B1_OG1: PortB2 ist Eingang
2018.01.18 09:28:13.746 4: mcp23017_B1_OG1: PortB3 kann auf off wiederhergestellt werden 2017-06-15 17:40:11
2018.01.18 09:28:13.748 5: mcp23017_B1_OG1: Port = B3
2018.01.18 09:28:13.749 5: mcp23017_B1_OG1: PortB3 ist Eingang
2018.01.18 09:28:13.750 4: mcp23017_B1_OG1: PortB4 kann auf off wiederhergestellt werden 2018-01-18 08:45:38
2018.01.18 09:28:13.751 5: mcp23017_B1_OG1: Port = B4
2018.01.18 09:28:13.751 5: mcp23017_B1_OG1: PortB4 ist Eingang
2018.01.18 09:28:13.752 4: mcp23017_B1_OG1: PortB5 kann auf off wiederhergestellt werden 2017-06-15 17:40:11
2018.01.18 09:28:13.753 5: mcp23017_B1_OG1: Port = B5
2018.01.18 09:28:13.753 5: mcp23017_B1_OG1: PortB5 ist Eingang
2018.01.18 09:28:13.754 4: mcp23017_B1_OG1: PortB6 kann auf off wiederhergestellt werden 2018-01-18 08:45:38
2018.01.18 09:28:13.755 5: mcp23017_B1_OG1: Port = B6
2018.01.18 09:28:13.756 5: mcp23017_B1_OG1: PortB6 ist Eingang
2018.01.18 09:28:13.757 4: mcp23017_B1_OG1: PortB7 kann auf off wiederhergestellt werden 2017-06-15 17:40:11
2018.01.18 09:28:13.757 5: mcp23017_B1_OG1: Port = B7
2018.01.18 09:28:13.758 5: mcp23017_B1_OG1: PortB7 ist Eingang
2018.01.18 09:28:13.759 4: mcp23017_B1_OG1: state kann auf Ok wiederhergestellt werden 2018-01-18 09:01:51
2018.01.18 09:28:13.762 4: mcp23017_B2_OG1: PortA0 kann auf off wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.763 5: mcp23017_B2_OG1: Port = A0
2018.01.18 09:28:13.764 5: mcp23017_B2_OG1: PortA0 soll auf off gesetzt werden
2018.01.18 09:28:13.766 4: mcp23017_B2_OG1: PortA1 kann auf off wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.766 5: mcp23017_B2_OG1: Port = A1
2018.01.18 09:28:13.767 5: mcp23017_B2_OG1: PortA1 soll auf off gesetzt werden
2018.01.18 09:28:13.769 4: mcp23017_B2_OG1: PortA2 kann auf off wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.769 5: mcp23017_B2_OG1: Port = A2
2018.01.18 09:28:13.770 5: mcp23017_B2_OG1: PortA2 soll auf off gesetzt werden
2018.01.18 09:28:13.771 4: mcp23017_B2_OG1: PortA3 kann auf off wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.772 5: mcp23017_B2_OG1: Port = A3
2018.01.18 09:28:13.773 5: mcp23017_B2_OG1: PortA3 soll auf off gesetzt werden
2018.01.18 09:28:13.774 4: mcp23017_B2_OG1: PortA4 kann auf off wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.775 5: mcp23017_B2_OG1: Port = A4
2018.01.18 09:28:13.776 5: mcp23017_B2_OG1: PortA4 soll auf off gesetzt werden
2018.01.18 09:28:13.777 4: mcp23017_B2_OG1: PortA5 kann auf off wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.778 5: mcp23017_B2_OG1: Port = A5
2018.01.18 09:28:13.779 5: mcp23017_B2_OG1: PortA5 soll auf off gesetzt werden
2018.01.18 09:28:13.780 4: mcp23017_B2_OG1: PortA6 kann auf off wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.781 5: mcp23017_B2_OG1: Port = A6
2018.01.18 09:28:13.782 5: mcp23017_B2_OG1: PortA6 soll auf off gesetzt werden
2018.01.18 09:28:13.783 4: mcp23017_B2_OG1: PortA7 kann auf off wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.784 5: mcp23017_B2_OG1: Port = A7
2018.01.18 09:28:13.784 5: mcp23017_B2_OG1: PortA7 soll auf off gesetzt werden
2018.01.18 09:28:13.786 4: mcp23017_B2_OG1: PortB0 kann auf off wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.786 5: mcp23017_B2_OG1: Port = B0
2018.01.18 09:28:13.787 5: mcp23017_B2_OG1: PortB0 soll auf off gesetzt werden
2018.01.18 09:28:13.788 4: mcp23017_B2_OG1: PortB1 kann auf off wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.789 5: mcp23017_B2_OG1: Port = B1
2018.01.18 09:28:13.790 5: mcp23017_B2_OG1: PortB1 soll auf off gesetzt werden
2018.01.18 09:28:13.791 4: mcp23017_B2_OG1: PortB2 kann auf off wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.791 5: mcp23017_B2_OG1: Port = B2
2018.01.18 09:28:13.792 5: mcp23017_B2_OG1: PortB2 soll auf off gesetzt werden
2018.01.18 09:28:13.793 4: mcp23017_B2_OG1: PortB3 kann auf off wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.794 5: mcp23017_B2_OG1: Port = B3
2018.01.18 09:28:13.795 5: mcp23017_B2_OG1: PortB3 soll auf off gesetzt werden
2018.01.18 09:28:13.796 4: mcp23017_B2_OG1: PortB4 kann auf off wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.797 5: mcp23017_B2_OG1: Port = B4
2018.01.18 09:28:13.797 5: mcp23017_B2_OG1: PortB4 soll auf off gesetzt werden
2018.01.18 09:28:13.799 4: mcp23017_B2_OG1: PortB5 kann auf off wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.799 5: mcp23017_B2_OG1: Port = B5
2018.01.18 09:28:13.800 5: mcp23017_B2_OG1: PortB5 soll auf off gesetzt werden
2018.01.18 09:28:13.801 4: mcp23017_B2_OG1: PortB6 kann auf off wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.802 5: mcp23017_B2_OG1: Port = B6
2018.01.18 09:28:13.803 5: mcp23017_B2_OG1: PortB6 soll auf off gesetzt werden
2018.01.18 09:28:13.804 4: mcp23017_B2_OG1: PortB7 kann auf off wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.805 5: mcp23017_B2_OG1: Port = B7
2018.01.18 09:28:13.806 5: mcp23017_B2_OG1: PortB7 soll auf off gesetzt werden
2018.01.18 09:28:13.807 4: mcp23017_B2_OG1: state kann auf Ok wiederhergestellt werden 2018-01-18 08:49:37
2018.01.18 09:28:13.894 5: im init client fuer mcp23017_B1_OG1
2018.01.18 09:28:13.895 5: RpiI2C_1: vom client empfangen|i2caddress: 32|data: 127|reg: 3|direction: i2cwrite
2018.01.18 09:28:13.896 5: RpiI2C_1: HWaccess I2CAddr: 0x20
2018.01.18 09:28:13.897 5: RpiI2C_1: vom client empfangen|i2caddress: 32|data: 127|reg: 3|direction: i2cwrite
2018.01.18 09:28:13.898 5: RpiI2C_1: HWaccess block schreiben, Reg: 0x03 Inh(dec):|127|, laenge: |2|
2018.01.18 09:28:13.899 5: RpiI2C_1 ->Client gefunden: mcp23017_B1_OG1, I2Caddress: 32 Data: 127
2018.01.18 09:28:13.900 5: RpiI2C_1: vom client empfangen|data: 255|reg: 2|direction: i2cwrite|i2caddress: 32
2018.01.18 09:28:13.901 5: RpiI2C_1: HWaccess I2CAddr: 0x20
2018.01.18 09:28:13.902 5: RpiI2C_1: vom client empfangen|data: 255|reg: 2|direction: i2cwrite|i2caddress: 32
2018.01.18 09:28:13.903 5: RpiI2C_1: HWaccess block schreiben, Reg: 0x02 Inh(dec):|255|, laenge: |2|
2018.01.18 09:28:13.907 5: RpiI2C_1 ->Client gefunden: mcp23017_B1_OG1, I2Caddress: 32 Data: 255
2018.01.18 09:28:13.911 5: RpiI2C_1: vom client empfangen|i2caddress: 32|data: 127|reg: 13|direction: i2cwrite
2018.01.18 09:28:13.912 5: RpiI2C_1: HWaccess I2CAddr: 0x20
2018.01.18 09:28:13.913 5: RpiI2C_1: vom client empfangen|i2caddress: 32|data: 127|reg: 13|direction: i2cwrite
2018.01.18 09:28:13.914 5: RpiI2C_1: HWaccess block schreiben, Reg: 0x0d Inh(dec):|127|, laenge: |2|
2018.01.18 09:28:13.915 5: RpiI2C_1 ->Client gefunden: mcp23017_B1_OG1, I2Caddress: 32 Data: 127
2018.01.18 09:28:13.916 5: RpiI2C_1: vom client empfangen|direction: i2cwrite|reg: 12|data: 255|i2caddress: 32
2018.01.18 09:28:13.917 5: RpiI2C_1: HWaccess I2CAddr: 0x20
2018.01.18 09:28:13.918 5: RpiI2C_1: vom client empfangen|direction: i2cwrite|reg: 12|data: 255|i2caddress: 32
2018.01.18 09:28:13.919 5: RpiI2C_1: HWaccess block schreiben, Reg: 0x0c Inh(dec):|255|, laenge: |2|
2018.01.18 09:28:13.920 5: RpiI2C_1 ->Client gefunden: mcp23017_B1_OG1, I2Caddress: 32 Data: 255
2018.01.18 09:28:13.921 5: RpiI2C_1: vom client empfangen|i2caddress: 32|data: 255|reg: 4|direction: i2cwrite
2018.01.18 09:28:13.922 5: RpiI2C_1: HWaccess I2CAddr: 0x20
2018.01.18 09:28:13.923 5: RpiI2C_1: vom client empfangen|i2caddress: 32|data: 255|reg: 4|direction: i2cwrite
2018.01.18 09:28:13.924 5: RpiI2C_1: HWaccess block schreiben, Reg: 0x04 Inh(dec):|255|, laenge: |2|
2018.01.18 09:28:13.925 5: RpiI2C_1 ->Client gefunden: mcp23017_B1_OG1, I2Caddress: 32 Data: 255
2018.01.18 09:28:13.927 5: RpiI2C_1: vom client empfangen|i2caddress: 32|direction: i2cwrite|reg: 5|data: 127
2018.01.18 09:28:13.928 5: RpiI2C_1: HWaccess I2CAddr: 0x20
2018.01.18 09:28:13.928 5: RpiI2C_1: vom client empfangen|i2caddress: 32|direction: i2cwrite|reg: 5|data: 127
2018.01.18 09:28:13.930 5: RpiI2C_1: HWaccess block schreiben, Reg: 0x05 Inh(dec):|127|, laenge: |2|
2018.01.18 09:28:13.931 5: RpiI2C_1 ->Client gefunden: mcp23017_B1_OG1, I2Caddress: 32 Data: 127
2018.01.18 09:28:13.932 5: RpiI2C_1: vom client empfangen|direction: i2cwrite|reg: 10|data: 68|i2caddress: 32
2018.01.18 09:28:13.933 5: RpiI2C_1: HWaccess I2CAddr: 0x20
2018.01.18 09:28:13.934 5: RpiI2C_1: vom client empfangen|direction: i2cwrite|reg: 10|data: 68|i2caddress: 32
2018.01.18 09:28:13.935 5: RpiI2C_1: HWaccess block schreiben, Reg: 0x0a Inh(dec):|68|, laenge: |2|
2018.01.18 09:28:13.936 5: RpiI2C_1 ->Client gefunden: mcp23017_B1_OG1, I2Caddress: 32 Data: 68
2018.01.18 09:28:13.937 5: RpiI2C_1: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 32
2018.01.18 09:28:13.940 5: RpiI2C_1: HWaccess I2CAddr: 0x20
2018.01.18 09:28:13.940 5: RpiI2C_1: vom client empfangen|direction: i2cread|nbyte: 2|reg: 18|i2caddress: 32
2018.01.18 09:28:13.941 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 18
2018.01.18 09:28:13.942 5: RpiI2C_1 ->Client gefunden: mcp23017_B1_OG1, I2Caddress: 32 Gelesen: 0 80
2018.01.18 09:28:13.943 5: mcp23017_B1_OG1 UpdReadings Register: 19, Inhalt: 80
2018.01.18 09:28:13.956 5: mcp23017_B1_OG1 UpdReadings Register: 18, Inhalt: 0
2018.01.18 09:28:13.958 5: im init client fuer mcp23017_B2_OG1
2018.01.18 09:28:13.960 5: RpiI2C_1: vom client empfangen|i2caddress: 33|data: 0|reg: 1|direction: i2cwrite
2018.01.18 09:28:13.960 5: RpiI2C_1: HWaccess I2CAddr: 0x21
2018.01.18 09:28:13.961 5: RpiI2C_1: vom client empfangen|i2caddress: 33|data: 0|reg: 1|direction: i2cwrite
2018.01.18 09:28:13.962 5: RpiI2C_1: HWaccess block schreiben, Reg: 0x01 Inh(dec):|0|, laenge: |2|
2018.01.18 09:28:13.963 5: RpiI2C_1 ->Client gefunden: mcp23017_B2_OG1, I2Caddress: 33
2018.01.18 09:28:13.964 5: RpiI2C_1: vom client empfangen|direction: i2cwrite|reg: 0|data: 0|i2caddress: 33
2018.01.18 09:28:13.965 5: RpiI2C_1: HWaccess I2CAddr: 0x21
2018.01.18 09:28:13.968 5: RpiI2C_1: vom client empfangen|direction: i2cwrite|reg: 0|data: 0|i2caddress: 33
2018.01.18 09:28:13.969 5: RpiI2C_1: HWaccess block schreiben, Reg: 0x00 Inh(dec):|0|, laenge: |2|
2018.01.18 09:28:13.970 5: RpiI2C_1 ->Client gefunden: mcp23017_B2_OG1, I2Caddress: 33
2018.01.18 09:28:13.971 5: RpiI2C_1: vom client empfangen|i2caddress: 33|nbyte: 2|reg: 18|direction: i2cread
2018.01.18 09:28:13.972 5: RpiI2C_1: HWaccess I2CAddr: 0x21
2018.01.18 09:28:13.973 5: RpiI2C_1: vom client empfangen|i2caddress: 33|nbyte: 2|reg: 18|direction: i2cread
2018.01.18 09:28:13.973 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 18
2018.01.18 09:28:13.975 5: RpiI2C_1 ->Client gefunden: mcp23017_B2_OG1, I2Caddress: 33 Gelesen: 0 0
2018.01.18 09:28:13.976 5: mcp23017_B2_OG1 UpdReadings Register: 19, Inhalt: 0
2018.01.18 09:28:13.977 5: mcp23017_B2_OG1 UpdReadings Register: 18, Inhalt: 0
2018.01.18 09:28:14.069 0: Featurelevel: 5.8
2018.01.18 09:28:14.070 0: Server started with 75 defined entities (fhem.pl:15881/2018-01-14 perl:5.020002 os:linux user:fhem pid:28566)
2018.01.18 09:28:14.073 5: RpiI2C_1: vom client empfangen|nbyte: 2|reg: 69|direction: i2cread|usleep: 50000|i2caddress: 15
2018.01.18 09:28:14.074 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:28:14.075 5: RpiI2C_1: vom client empfangen|nbyte: 2|reg: 69|direction: i2cread|usleep: 50000|i2caddress: 15
2018.01.18 09:28:14.079 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 69
2018.01.18 09:28:14.131 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 69 1
2018.01.18 09:28:14.132 5: RpiI2C_1: vom client empfangen|i2caddress: 15|nbyte: 3|reg: 209|usleep: 200000|direction: i2cread
2018.01.18 09:28:14.133 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:28:14.134 5: RpiI2C_1: vom client empfangen|i2caddress: 15|nbyte: 3|reg: 209|usleep: 200000|direction: i2cread
2018.01.18 09:28:14.134 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 209
2018.01.18 09:28:14.336 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 209 63 2
2018.01.18 09:28:14.357 5: RpiI2C_1: vom client empfangen|i2caddress: 15|usleep: 50000|direction: i2cread|nbyte: 3|reg: 53
2018.01.18 09:28:14.358 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:28:14.359 5: RpiI2C_1: vom client empfangen|i2caddress: 15|usleep: 50000|direction: i2cread|nbyte: 3|reg: 53
2018.01.18 09:28:14.360 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 53
2018.01.18 09:28:14.412 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 53 1 2
2018.01.18 09:28:14.422 5: RpiI2C_1: vom client empfangen|i2caddress: 15|nbyte: 3|reg: 208|usleep: 50000|direction: i2cread
2018.01.18 09:28:14.423 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:28:14.424 5: RpiI2C_1: vom client empfangen|i2caddress: 15|nbyte: 3|reg: 208|usleep: 50000|direction: i2cread
2018.01.18 09:28:14.427 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 208
2018.01.18 09:28:14.478 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 208 29 20
2018.01.18 09:28:14.487 5: RpiI2C_1: vom client empfangen|i2caddress: 15|usleep: 50000|direction: i2cread|reg: 212|nbyte: 2
2018.01.18 09:28:14.488 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:28:14.489 5: RpiI2C_1: vom client empfangen|i2caddress: 15|usleep: 50000|direction: i2cread|reg: 212|nbyte: 2
2018.01.18 09:28:14.490 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 212
2018.01.18 09:28:14.541 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 212 1
2018.01.18 09:28:14.561 5: INT, in fileaccess: edge
2018.01.18 09:29:14.555 5: RpiI2C_1: vom client empfangen|i2caddress: 15|direction: i2cread|usleep: 50000|nbyte: 2|reg: 69
2018.01.18 09:29:14.556 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:29:14.557 5: RpiI2C_1: vom client empfangen|i2caddress: 15|direction: i2cread|usleep: 50000|nbyte: 2|reg: 69
2018.01.18 09:29:14.559 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 69
2018.01.18 09:29:14.611 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 69 1
2018.01.18 09:29:14.613 5: RpiI2C_1: vom client empfangen|i2caddress: 15|usleep: 200000|direction: i2cread|reg: 209|nbyte: 3
2018.01.18 09:29:14.614 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:29:14.615 5: RpiI2C_1: vom client empfangen|i2caddress: 15|usleep: 200000|direction: i2cread|reg: 209|nbyte: 3
2018.01.18 09:29:14.616 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 209
2018.01.18 09:29:14.818 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 209 1 2
2018.01.18 09:29:14.832 5: RpiI2C_1: vom client empfangen|reg: 53|nbyte: 3|direction: i2cread|usleep: 50000|i2caddress: 15
2018.01.18 09:29:14.834 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:29:14.834 5: RpiI2C_1: vom client empfangen|reg: 53|nbyte: 3|direction: i2cread|usleep: 50000|i2caddress: 15
2018.01.18 09:29:14.835 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 53
2018.01.18 09:29:14.888 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 53 1 2
2018.01.18 09:29:14.892 5: RpiI2C_1: vom client empfangen|usleep: 50000|direction: i2cread|reg: 208|nbyte: 3|i2caddress: 15
2018.01.18 09:29:14.894 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:29:14.895 5: RpiI2C_1: vom client empfangen|usleep: 50000|direction: i2cread|reg: 208|nbyte: 3|i2caddress: 15
2018.01.18 09:29:14.896 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 208
2018.01.18 09:29:14.948 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 208 29 20
2018.01.18 09:29:14.954 5: RpiI2C_1: vom client empfangen|i2caddress: 15|direction: i2cread|usleep: 50000|nbyte: 2|reg: 212
2018.01.18 09:29:14.955 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:29:14.956 5: RpiI2C_1: vom client empfangen|i2caddress: 15|direction: i2cread|usleep: 50000|nbyte: 2|reg: 212
2018.01.18 09:29:14.957 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 212
2018.01.18 09:29:15.010 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 212 1
2018.01.18 09:30:15.076 5: RpiI2C_1: vom client empfangen|usleep: 50000|direction: i2cread|nbyte: 2|reg: 69|i2caddress: 15
2018.01.18 09:30:15.077 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:30:15.078 5: RpiI2C_1: vom client empfangen|usleep: 50000|direction: i2cread|nbyte: 2|reg: 69|i2caddress: 15
2018.01.18 09:30:15.079 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 69
2018.01.18 09:30:15.131 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 69 1
2018.01.18 09:30:15.133 5: RpiI2C_1: vom client empfangen|usleep: 200000|direction: i2cread|reg: 209|nbyte: 3|i2caddress: 15
2018.01.18 09:30:15.134 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:30:15.135 5: RpiI2C_1: vom client empfangen|usleep: 200000|direction: i2cread|reg: 209|nbyte: 3|i2caddress: 15
2018.01.18 09:30:15.136 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 209
2018.01.18 09:30:15.339 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 209 31 2
2018.01.18 09:30:15.350 5: RpiI2C_1: vom client empfangen|i2caddress: 15|usleep: 50000|direction: i2cread|nbyte: 3|reg: 53
2018.01.18 09:30:15.351 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:30:15.352 5: RpiI2C_1: vom client empfangen|i2caddress: 15|usleep: 50000|direction: i2cread|nbyte: 3|reg: 53
2018.01.18 09:30:15.353 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 53
2018.01.18 09:30:15.405 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 53 1 2
2018.01.18 09:30:15.410 5: RpiI2C_1: vom client empfangen|i2caddress: 15|reg: 208|nbyte: 3|direction: i2cread|usleep: 50000
2018.01.18 09:30:15.417 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:30:15.418 5: RpiI2C_1: vom client empfangen|i2caddress: 15|reg: 208|nbyte: 3|direction: i2cread|usleep: 50000
2018.01.18 09:30:15.419 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 208
2018.01.18 09:30:15.471 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 208 24 20
2018.01.18 09:30:15.478 5: RpiI2C_1: vom client empfangen|reg: 212|nbyte: 2|direction: i2cread|usleep: 50000|i2caddress: 15
2018.01.18 09:30:15.479 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:30:15.480 5: RpiI2C_1: vom client empfangen|reg: 212|nbyte: 2|direction: i2cread|usleep: 50000|i2caddress: 15
2018.01.18 09:30:15.481 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 212
2018.01.18 09:30:15.533 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 212 1
2018.01.18 09:31:15.964 5: RpiI2C_1: vom client empfangen|reg: 69|nbyte: 2|direction: i2cread|usleep: 50000|i2caddress: 15
2018.01.18 09:31:15.965 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:31:15.966 5: RpiI2C_1: vom client empfangen|reg: 69|nbyte: 2|direction: i2cread|usleep: 50000|i2caddress: 15
2018.01.18 09:31:15.967 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 69
2018.01.18 09:31:16.020 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 69 1
2018.01.18 09:31:16.022 5: RpiI2C_1: vom client empfangen|i2caddress: 15|direction: i2cread|usleep: 200000|nbyte: 3|reg: 209
2018.01.18 09:31:16.023 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:31:16.025 5: RpiI2C_1: vom client empfangen|i2caddress: 15|direction: i2cread|usleep: 200000|nbyte: 3|reg: 209
2018.01.18 09:31:16.026 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 209
2018.01.18 09:31:16.228 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 209 1 2
2018.01.18 09:31:16.239 5: RpiI2C_1: vom client empfangen|direction: i2cread|usleep: 50000|nbyte: 3|reg: 53|i2caddress: 15
2018.01.18 09:31:16.241 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:31:16.241 5: RpiI2C_1: vom client empfangen|direction: i2cread|usleep: 50000|nbyte: 3|reg: 53|i2caddress: 15
2018.01.18 09:31:16.242 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 53
2018.01.18 09:31:16.295 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 53 1 2
2018.01.18 09:31:16.300 5: RpiI2C_1: vom client empfangen|i2caddress: 15|nbyte: 3|reg: 208|direction: i2cread|usleep: 50000
2018.01.18 09:31:16.301 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:31:16.302 5: RpiI2C_1: vom client empfangen|i2caddress: 15|nbyte: 3|reg: 208|direction: i2cread|usleep: 50000
2018.01.18 09:31:16.303 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 208
2018.01.18 09:31:16.355 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 208 35 20
2018.01.18 09:31:16.363 5: RpiI2C_1: vom client empfangen|i2caddress: 15|direction: i2cread|usleep: 50000|nbyte: 2|reg: 212
2018.01.18 09:31:16.364 5: RpiI2C_1: HWaccess I2CAddr: 0x0F
2018.01.18 09:31:16.365 5: RpiI2C_1: vom client empfangen|i2caddress: 15|direction: i2cread|usleep: 50000|nbyte: 2|reg: 212
2018.01.18 09:31:16.366 4: RpiI2C_1: HWaccess blockweise lesen setze Registerpointer auf 212
2018.01.18 09:31:16.419 5: RpiI2C_1 ->Client gefunden: SUSV, I2Caddress: 15 Gelesen: 212 1
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

Burny4600

#22
Folgende Änderung habe ich durchgeführt.
Das userReadings des RPI_GIPO 21 Interupt für MCP23017 Modul habe ich abgeändert auf interrupt {fhem ("get mcp23017_B1_OG1,mcp23017_B2_OG1");;"egal"}
Somit werden die Eingänge ohne Fehlermeldung erfasst und der INTA der zum RPI_GPIO 21 führt gibt nach einem Steuervorgang an einem Eingang am INTA wieder 5V aus und bleibt nicht auf 0V.
Hinderlich waren die Attributteinträge :Pinlevel:.low* none

Nochmals zum Abgleich die LISTS

LIST RPI_GPIO 21
Internals:
   CFGFN      /media/hdd/fhem/mycfg/GPIO/GPIO_rasp07.cfg
   DEF        21
   EXCEPT_FD  13
   GPIO_Basedir /sys/class/gpio
   GPIO_Nr    21
   NAME       INT
   NR         530
   STATE      off
   TYPE       RPI_GPIO
   WiringPi_gpio /usr/local/bin/gpio
   lasttrg    1516549406.44215
   READINGS:
     2018-01-17 11:22:43   Counter         55
     2018-01-21 16:43:26   Dblclick        off
     2018-01-21 16:43:26   Longpress       off
     2018-01-21 16:43:26   Pinlevel        low
     2018-01-21 16:43:26   interrupt       egal
     2018-01-21 16:43:26   state           off
   fhem:
     interfaces switch
Attributes:
   active_low yes
   alias      RPI_GIPO 21 Interupt für MCP23017 Modul
   devStateIcon on:control_on_off@0CFB0C off:control_home@red
   direction  input
   event-on-change-reading .*
   icon       control_on_off
   interrupt  both
   room       _GPIO,_IO
   userReadings interrupt {fhem ("get mcp23017_B1_OG1,mcp23017_B2_OG1");;"egal"}


LIST MCP_23017 0x20


Internals:
   CFGFN      /media/hdd/fhem/mycfg/AD_Controller/I2C_MCP23017_rasp07.cfg
   CHANGED   
   DEF        0x20
   I2C_Address 32
   IODev      RpiI2C_1
   NAME       mcp23017_B1_OG1
   NR         598
   RpiI2C_1_SENDSTAT Ok
   STATE      Ok
   TYPE       I2C_MCP23017
   READINGS:
     2018-01-21 16:43:24   PortA0          off
     2018-01-21 16:43:25   PortA1          off
     2018-01-21 16:43:26   PortA2          off
     2018-01-21 15:59:54   PortA3          off
     2018-01-21 15:59:54   PortA4          off
     2018-01-21 15:59:54   PortA5          off
     2018-01-06 15:52:07   PortA6          off
     2018-01-21 15:07:46   PortA7          off
     2018-01-21 15:07:47   PortB0          off
     2018-01-21 15:07:47   PortB1          off
     2018-01-21 15:07:48   PortB2          off
     2018-01-21 15:07:48   PortB3          off
     2018-01-18 09:28:13   PortB4          on
     2017-06-15 17:40:11   PortB5          off
     2018-01-18 09:28:13   PortB6          on
     2017-06-15 17:40:11   PortB7          off
     2018-01-21 16:53:36   state           Ok
Attributes:
   IODev      RpiI2C_1
   Interrupt  A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6
   InterruptOut connected_active-low
   Pullup     A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6
   alias      Digital I/O Bank 1 | Port A0-A7,B0-B7 (Input)
   devStateIcon Ok:it_net@0CFB0C Initialized:it_net@yellow defined:it_net@yellow disconnected:it_net@red error:it_net@red
   event-on-change-reading .*
   group      Schnittstellen I2C
   icon       it_net
   invert_input A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6
   room       _IO,_RxTx


LIST MCP_23017 0x21
Internals:
   CFGFN      /media/hdd/fhem/mycfg/AD_Controller/I2C_MCP23017_rasp07.cfg
   CHANGED   
   DEF        0x21
   I2C_Address 33
   IODev      RpiI2C_1
   NAME       mcp23017_B2_OG1
   NR         603
   RpiI2C_1_SENDSTAT Ok
   STATE      Ok
   TYPE       I2C_MCP23017
   READINGS:
     2018-01-21 16:43:24   PortA0          off
     2018-01-21 16:43:25   PortA1          off
     2018-01-21 16:42:44   PortA2          off
     2018-01-21 16:42:44   PortA3          off
     2018-01-21 16:42:44   PortA4          off
     2018-01-21 16:42:44   PortA5          off
     2018-01-21 16:42:44   PortA6          off
     2018-01-21 16:42:44   PortA7          off
     2018-01-21 16:42:44   PortB0          off
     2018-01-21 16:42:44   PortB1          off
     2018-01-21 16:42:44   PortB2          off
     2018-01-21 16:42:44   PortB3          off
     2018-01-21 16:42:44   PortB4          off
     2018-01-21 16:42:44   PortB5          off
     2018-01-21 16:42:44   PortB6          off
     2018-01-21 16:42:44   PortB7          off
     2018-01-21 16:54:37   state           Ok
Attributes:
   IODev      RpiI2C_1
   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
   OutputPorts A0,A1,A2,A3,A4,A5,A6,A7,B0,B1,B2,B3,B4,B5,B6,B7
   alias      Digital I/O Bank 2 | Port A0-A7,B0-B7 (Output)
   devStateIcon Ok:it_net@0CFB0C Initialized:it_net@yellow defined:it_net@yellow disconnected:it_net@red error:it_net@red
   event-on-change-reading .*
   group      Schnittstellen I2C
   icon       it_net
   room       _IO,_RxTx
   


Eines was mich noch stört ist das dieses fertige MCP23017 Board auf den INTs 5V ausgibt. Es dürfte wahrscheinlich nicht für Interrupt Funktionen ausgelegt worden sein.
Zur Sicherheit trenne ich diesen Bereich mit einem Optokopler der von 3,3V auf den RPI_GPIO21 schaltet um eine saubere längerfristige Steuerung zu gewährleisten.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT

klausw

Hallo Chris,

heißt das, es läuft jetzt wieder?
Ich bin noch nicht zum analysieren der Daten gekommen.
Wenn ich mir das schenken kann habe ich nix dagegen.  8)

Den Hinweis auf userReadings hatte ich aber schonmal hier gegeben

Zur INTx Konfiguration hatte ich dummerwiese was falsches geschieben. Korrektur:
Bei connected_active-low wird INTx im normalen Betrieb aktiv auf die Versorgungsspannung (in deinem Fall 5V) getrieben. Im Interruptfall auf 0V. Hier macht ein Optokoppler oder Spannungsteiler Sinn.

Bei connected_open-drain ist INTx im normalen Betrieb hochohmig (mit pullup gegen 3,3V hast du dann halt 3,3V am Pin). In Interruptfall wird aktiv auf 0V getrieben. Hier wird nur ein Pullup (47k oder so) benötigt.
Bei der Schaltung die du angehängt hattest waren keine Bauelemente an den INTx Pins eingezeichnet. Also müsste es genauso funktionieren.

Grüße
Klaus
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

Burny4600

#24
Hallo Klaus,

mit der Änderung des userReadings auf
interrupt {fhem ("get mcp23017_B1_OG1,mcp23017_B2_OG1");;"egal"}
funktionieren die Interrupts für die Eingänge wieder.
Soweit ich mich erinnern kann, hatte ich damals bei der Inbetriebnahme des ersten MCP23017 Expansionsboards eine funktionsfähige Interrupt Funktion aber nach einer gewissen Zeit Einträge im filelog gefunden.
Es gab irgend eine Änderung was diese Logeinträge verursachte. Entweder hatte es etwas mit dem Expansionsboard zu tun oder mit der Interruptfunktionalität oder RPI_GPIOs. Jedenfalls wurde ich wegen diesem Eintrag im Log fündig um das userReadings abzuändern was dann auch funktionierte ohne das Einträge im Log zu finden waren.
Ich bin erst jetzt darauf aufmerksam geworden, weil ich ein weiteres MCP23017 Expansionboard einrichten wollte, dass die sicher Interruptfunktion plötzlich nicht mehr gegeben war. Aber ist ja jetzt egal denn es funktioniert wieder.

ZitatBei connected_open-drain ist INTx im normalen Betrieb hochohmig (mit pullup gegen 3,3V hast du dann halt 3,3V am Pin). In Interruptfall wird aktiv auf 0V getrieben. Hier wird nur ein Pullup (47k oder so) benötigt.
Bei der Schaltung die du angehängt hattest waren keine Bauelemente an den INTx Pins eingezeichnet. Also müsste es genauso funktionieren.
Dies hatte ich jetzt bei den Tests nicht mehr getestet, aber heute nachgeholt.
Es funktioniert auch mit connected_open-drain was bei der 5V Ausführung des Expansionboard eigentlich die besser Lösung ist. Es sind zwar mit 47k keine 3.3V am INTx sondern nur 1,74V und funktioniert ebenso einwandfrei.

Das an den INTx des Boards keine weiteren Bauteile bestückt sind stimmt. Ich habe den E-PLan auch mit dem Board verglichen und es stimmt alles überein.
Bei der MCP23017 3,3V Ausführung kann man beim InterruptOut bei den Eingängen jedenfalls mit connected_active-low arbeiten sofern die INTx hardwaremässig nicht verbunden sind.
Grundsätzlich finde ich jetzt die connected_open-drain Lösung besser. Ich werde um dem Widerstandswert noch anzupassen ein paar Test machen und den Widerstandswert in diesem Thread noch nachtragen.
Die connected_open-drain Lösung ist wie ich beim Test feststellen musste doch noch keine einwandfrei Lösung.
Wenn das System neu gestartet wird, also ein Reboot erfolgte, so werden auch bei der connected_open-drain Lösung Anfangs 5V ausgegeben.
Erst nach dem ersten Interrupt Ereignis liegen nur mehr mit einem 39k Widerstand gegen 3,3V am INTx 1,95V an. In diesem Fall ist trotzdem die Optokoppler Lösung die bessere Lösung wenn der MCP23017 mit 5V ausgeführt wird wie es hier bei dem fertigen Expansionsboard der Fall ist.
Unabhängig davon ist die Interruptsteuerung mit connected_open-drain Lösung in dieser Ausführung Fehlerhaft, da nach einem Reboot der erste Impuls eines Eingangs nicht verarbeitet wird sondern erst ab dem zweiten Impuls eine Ereigniskennung für FHEM funktioniert.

Wäre vielleicht auch nicht schlecht in das FHEM WIKI vollständig überzuleiten.

Danke für deine Unterstützung.


2018-01-22 16.05: Ergänzung Schaltplan galvanisch getrennte Interrupt Steuerung.
Mit InterruptOut => connected_active-low wird mit dieser Anpassung der erste Impuls an einem Eingang berücksichtigt.
Mfg Chris

Raspberry Pi 2/2+/3/3+/4 / Betriebssystem: Bullseye Lite
Schnittstellen: RFXtrx433E, SIGNALduino, MQTT, nanoCUL, HM-MOD-UART, 1-Wire, LAN, ser2net, FHEM2FEHEM
Devices: S.USV, APC-USV, Fronius Datalogger Web 2, FS20, IT, Resol VBUS & DL2, TEK603, WMR200, YouLess, Homematic, MQTT