Über den Adapter i2c ist es möglich diverse Geräte über den I²C-Bus in ioBroker einzubinden.
In meinem Projekt HomePi verwende ich einige ICs vom Typ PCF8574 zur Bereitstellung von zusätzlichen GPIOs. Dieser Beitrag soll die Einbindung der PCF8574 ICs in ioBroker beschreiben.
Es wird davon ausgegangen, dass der I²C-Bus bereits am Raspberry Pi eingerichtet ist und die angeschlossenen ICs erreichbar sind.
Installation des Adapters i2c
Die Installation des Adapters i2c ist inzwischen ganz normal über das Stable-Repository von ioBroker möglich.
Sobald die Installation Abgeschlossen ist, öffnet sich automatisch die Adapterkonfiguration, welche wir vorerst auch direkt wieder schließen können.
In der Übersicht der Instanzen starten wir nun die Instanz i2c.0
durch einen Klick auf den Play-Button.
Sobald die Instanz läuft, öffnen wir wieder die Adapterkonfiguration durch einen Klick auf den Schraubenschlüssel-Button und klicken dort dann auf Geräte suchen. Die erkannten I²C-Geräte werden daraufhin als einzelne Tabs angezeigt und können über diese konfiguriert werden.
Verwendung der Interrupts
Für die Verwendung der Interrupts ist der RPI-Monitor (rpi2) Adapter erforderlich. Die Installation von diesem habe ich bereits im Beitrag ioBroker GPIOs beschrieben.
Standardmäßig werden Veränderungen an Eingangspins über aktives Polling abgefragt. Das Intervall, in dem die Abfragen stattfinden wird über die Option Abfrage-Intervall festgelegt.
Über die Auswahl eines Interrupt-Objektes kann ein GPIO des Raspberry Pi ausgewählt werden, an dem die Interrupt-Leitung des PCF8574 ICs angeschlossen ist. Sobald sich dann der State von diesem Interrupt-Objekt ändert, werden die Eingänge des ICs neu gelesen. Das Abfrage-Intervall kann dann auf 0
gesetzt und damit deaktiviert werden.

Objekte
Gemäß den gewählten Einstellungen für die einzelnen ICs werden die Objekte für die Ein- und Ausgänge automatisch durch den Adapter angelegt und jeweils auch als Input oder Output gekennzeichnet.

16. Dez. 2019 um 19:33
Hallo Herr Müller,
bei mir wird nach der Installation das Interruptobjekt nicht angezeigt…
Woran kann das liegen?
Vielen Dank im Voraus
16. Dez. 2019 um 19:51
Hallo,
war vorher die normale Version des Adapters installiert? Dann kann es sein, dass die Dateien der Weboberfläche nicht aktualisiert wurden. Hier sollte ein `iobroker upload i2c` über ein Terminal helfen.
19. Feb. 2020 um 17:20
Hallo Herr Müller,
ich habe den i2c-Adapter installiert und als Interrupt-Objekt den GPIO 17 (der ist auf in) des Raspberry Pi ausgewählt.
Pollen funktioniert. Wenn ich aber das Abfrage-Intervall auf 0 setze, dann wird kein Interrupt ausgelöst, obwohl der State des GPIO 17 “true” ist.
Haben Sie eine Idee was ich falsch mache?
20. Feb. 2020 um 8:46
Hallo,
funktioniert denn die Hardware richtig? Bei der Interrupt-Leitung ist ein Pullup Widerstand von etwa 10 kOhm gegen +3,3 V erforderlich.
Der State des GPIO 17 müsste bei einem eintreffenden Interrupt aktualisiert werden, also (sehr) kurz auf `false` und dann wieder auf `true` gehen. Diese Änderung ist meist nur über einen aktualisierten Zeitstempel des State sichtbar.
28. Feb. 2020 um 13:57
Hallo,
auf dem Horter-Repeater habe ich testweise einen 10 kOhm Widerstand zwischen 3,3V und INT eingelötet. Das hat aber keine Verbesserung gebracht.
Wenn ein Interrupt ansteht, dann ist GPIO 17 true. Ansonsten false. Invertieren kann ich den Eingang GPIO 17 ja nicht oder gibt es doch eine Möglichkeit?
9. Mrz. 2020 um 18:49
Du könntest hardwaremäßig den Eingang mit einem einfachen Transistor negieren, aber das wird dann auch nichts bringen. Der Adapter achtet nur auf eine Änderung, egal ob von True auf False oder andersherum.
Als Interrupt-Objekt in der Config müsstest du für den GPIO 17 dann `rpi2.0.gpio.17.state` stehen haben. Passt das?
Ansonsten bitte mal die Log-Stufe für den Adapter auf debug setzen und ins Log schauen. Beim Start des Adapters sollte da eine Meldung Interrupt enabled kommen und wenn ein Interrupt erkannt wird Interrupt detected.
13. Mrz. 2020 um 18:33
Als Interrupt-Objekt steht richtigerweise rpi2.0.gpio.17.state.
Aber im Log kommt die Meldung Interrupt enabled nicht. Sowohl beim Adapter i2c, als auch beim Adapter rpi2. Hier scheint der Fehler zu liegen.
Aber was kann ich machen, damit die Meldung kommt?
15. Mrz. 2020 um 18:37
Hmm… die Meldung sollte als Debug-Meldung vom i2c Adapter kommen.
Als mindestens einer der Anschlüsse des betreffenden ICs ist als Eingang konfiguriert oder?
Vielleicht hilft es, den i2c Adapter noch mal neu über den oben beschriebenen Web zu installieren.
15. Mrz. 2020 um 21:32
Alle Anschlüsse der betreffenden ICs sind als Eingang konfiguriert und invertiert.
Ich habe den i2c-Adapter entfernt und wie oben beschrieben neu installiert und danach alle Einstellungen wieder gemacht. Die Meldung Interrupt enabled kommt immer noch nicht im Log. Das was nach einem Neustart des i2c-Adapters im Log angezeigt wird habe ich angefügt.
i2c.0 2020-03-15 21:21:33.035 info (7816) Created PCF8574 for address 0x3B
i2c.0 2020-03-15 21:21:33.034 info (7816) Created PCF8574 for address 0x3A
i2c.0 2020-03-15 21:21:33.034 info (7816) Created PCF8574 for address 0x39
i2c.0 2020-03-15 21:21:33.033 info (7816) Created PCF8574 for address 0x38
i2c.0 2020-03-15 21:21:33.031 info (7816) Created MCP23017 for address 0x23
i2c.0 2020-03-15 21:21:33.031 info (7816) Created MCP23017 for address 0x22
i2c.0 2020-03-15 21:21:33.031 info (7816) Created MCP23017 for address 0x21
i2c.0 2020-03-15 21:21:33.030 info (7816) Created MCP23017 for address 0x20
i2c.0 2020-03-15 21:21:32.962 info (7816) starting. Version 0.0.6 in /opt/iobroker/node_modules/iobroker.i2c, node: v10.19.0
host.RasPi 2020-03-15 21:21:31.441 info instance system.adapter.i2c.0 started with pid 7816
host.RasPi 2020-03-15 21:21:29.454 info instance system.adapter.i2c.0 terminated with code 156 (156)
i2c.0 2020-03-15 21:21:28.937 info (5609) Terminated (START_IMMEDIATELY_AFTER_STOP): Without reason
i2c.0 2020-03-15 21:21:28.936 info (5609) terminating
i2c.0 2020-03-15 21:21:28.930 info (5609) Got terminate signal TERMINATE_YOURSELF
host.RasPi 2020-03-15 21:21:28.928 info stopInstance system.adapter.i2c.0 send kill signal
22. Mrz. 2020 um 11:12
Demnach ist die Log-Stufe des Adapters nicht auf “debug” gesetzt.
Das müsste so aussehen: