Modul für die Ansteuerung des MCP23017 I2C Portextender

Begonnen von klausw, 03 Mai 2014, 01:02:40

Vorheriges Thema - Nächstes Thema

klausw

Zitat von: AlphaKingOne am 09 November 2016, 01:43:51
punkte hab ich weggemacht keine ahnung wie die da rein gekommen sind. Update hatte ich auch schon gemacht und der restart brachte nur

016.11.09 01:33:22 0: Server shutdown
2016.11.09 01:33:27 1: reload: Error:Modul 99_myUtils deactivated:
Unrecognized character \xC2; marked by <-- HERE after <-- HERE near column 1 at ./FHEM/99_myUtils.pm line 8.

2016.11.09 01:33:27 1: Including fhem.cfg
2016.11.09 01:33:27 1: reload: Error:Modul 99_myUtils deactivated:
Unrecognized character \xC2; marked by <-- HERE after <-- HERE near column 1 at ./FHEM/99_myUtils.pm line 8, <$fh> line 4.
...
2016.11.09 01:33:44 1: PERL WARNING: readline() on closed filehandle DATA at ./FHEM/58_GPIO4.pm line 132.
...
2016.11.09 01:33:52 1: PERL WARNING: Use of uninitialized value $VALUE in string eq at (eval 376) line 1.



Jede menge Fehler.
1wire scheint z.B. nicht zu laufen. Hast du 1wire auch in der /boot/config.txt aktiviert?
Ich würde mal die 99_myUtils.pm aufräumen.
Die fhem.cfg auch.
Am besten alles rausschmeissen und Modul für Modul neu definieren.
Dabei immer gleich testen, ob es fehlerfrei funktioniert... Log checken etc.

FHEM musst du an sich nicht neu installieren. ein "update force" macht alles neu (soltest du natürlich auch übers logfile überprüfen, ob keine Dateizugriffsfehler aufgetreten sind)

Zitat von: AlphaKingOne am 09 November 2016, 01:43:51
Wäre aber auch mal schön wenn mal eine Anleitung ins wiki kommen könnte.
Wiki zu welchem Thema?
Geht aber auch recht einfach:
- Zugang holen
- Wiki Eintrag verfassen
Das kannst du ja übernehmen, nachdem du die Stolpersteine gefunden hast.  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

AlphaKingOne

Also mal ein kleine Update

hab jetzt testweise neues Raspbian auf eine andere SD gemacht und Fhem installiert.
Hatte dann doch noch einige fehler in der config. Was noch ist bei PortA4 sagt er noch als input definiert und PortA7 lässt sich gar nicht schalten.
Gelegentlich bricht auch alles zusammen dann werden noch nicht mal behfele über Shell angenommen oder nur teilweise, könnte aber auch an dem wackeligen Aufbau liegen.
Ich denke am Wochenende tu ich noch mal alles neu Verkabeln.
Aber hat jemand von euch eine idee wieso das mit dem PortA4 immer noch so ist? In der Config konnte ich jetzt kein fheler entdecken.

###I2C-Device###
define i2cBus RPII2C 1
attr i2cBus group MCP23017

###MCP23017-0x20###
define icMCP23017 I2C_MCP23017 0x20
attr icMCP23017 IODev i2cBus
attr icMCP23017 Interrupt B0,B1,B2,B3,B4,B5,B6,B7
attr icMCP23017 InterruptOut connected_active-low
attr icMCP23017 OnStartup A0=off,A1=off, A2=off,A3=off, A4=off,A5=off, A6=off,A7=off
attr icMCP23017 OutputPorts A0,A1,A2,A3,A3,A5,A6,A7
attr icMCP23017 Pullup B0,B1,B2,B3,B4,B5,B6,B7
attr icMCP23017 invert_input B0,B1,B2,B3,B4,B5,B6,B7
attr icMCP23017 group MCP23017

###Interrupt A&B####
define Interrupt RPI_GPIO 4
attr Interrupt active_low yes
attr Interrupt direction input
attr Interrupt interrupt both
attr Interrupt userReadings test {fhem ("get icMCP23017")}
attr Interrupt group MCP23017

###Sensoren (Input)####
#--Bank-B--#

define prxPortB0 readingsProxy icMCP23017:PortB0
attr prxPortB0 group InputPorts
attr prxPortB0 valueFn {($VALUE eq "on")?"off":"on"}

define prxPortB1 readingsProxy icMCP23017:PortB1
attr prxPortB1 group InputPorts
attr prxPortB1 valueFn {($VALUE eq "on")?"off":"on"}

define prxPortB2 readingsProxy icMCP23017:PortB2
attr prxPortB2 group InputPorts
attr prxPortB2 valueFn {($VALUE eq "on")?"off":"on"}

define prxPortB3 readingsProxy icMCP23017:PortB3
attr prxPortB3 group InputPorts
attr prxPortB3 valueFn {($VALUE eq "on")?"off":"on"}

define prxPortB4 readingsProxy icMCP23017:PortB4
attr prxPortB4 group InputPorts
attr prxPortB4 valueFn {($VALUE eq "on")?"off":"on"}

define prxPortB5 readingsProxy icMCP23017:PortB5
attr prxPortB5 group InputPorts
attr prxPortB5 valueFn {($VALUE eq "on")?"off":"on"}

define prxPortB6 readingsProxy icMCP23017:PortB6
attr prxPortB6 group InputPorts
attr prxPortB6 valueFn {($VALUE eq "on")?"off":"on"}

define prxPortB7 readingsProxy icMCP23017:PortB7
attr prxPortB7 group InputPorts
attr prxPortB7 valueFn {($VALUE eq "on")?"off":"on"}

####Aktoren (Output)####
#---A-Kanal-----

define prxPortA0 readingsProxy icMCP23017:PortA0
attr prxPortA0 group OutputPorts
attr prxPortA0 setFn {($CMD eq "on")?"PortA0 off":"PortA0 on"}
attr prxPortA0 setList on off
attr prxPortA0 valueFn {($VALUE eq "on")?"off":"on"}

define prxPortA1 readingsProxy icMCP23017:PortA1
attr prxPortA1 group OutputPorts
attr prxPortA1 setFn {($CMD eq "on")?"PortA1 off":"PortA1 on"}
attr prxPortA1 setList on off
attr prxPortA1 valueFn {($VALUE eq "on")?"off":"on"}

define prxPortA2 readingsProxy icMCP23017:PortA2
attr prxPortA2 group OutputPorts
attr prxPortA2 setFn {($CMD eq "on")?"PortA2 off":"PortA2 on"}
attr prxPortA2 setList on off
attr prxPortA2 valueFn {($VALUE eq "on")?"off":"on"}

define prxPortA3 readingsProxy icMCP23017:PortA3
attr prxPortA3 group OutputPorts
attr prxPortA3 setFn {($CMD eq "on")?"PortA3 off":"PortA3 on"}
attr prxPortA3 setList on off
attr prxPortA3 valueFn {($VALUE eq "on")?"off":"on"}

define prxPortA4 readingsProxy icMCP23017:PortA4
attr prxPortA4 group OutputPorts
attr prxPortA4 setFn {($CMD eq "on")?"PortA4 off":"PortA4 on"}
attr prxPortA4 setList on off
attr prxPortA4 valueFn {($VALUE eq "on")?"off":"on"}

define prxPortA5 readingsProxy icMCP23017:PortA5
attr prxPortA5 group OutputPorts
attr prxPortA5 setFn {($CMD eq "on")?"PortA5 off":"PortA5 on"}
attr prxPortA5 setList on off
attr prxPortA5 valueFn {($VALUE eq "on")?"off":"on"}

define prxPortA6 readingsProxy icMCP23017:PortA6
attr prxPortA6 group OutputPorts
attr prxPortA6 setFn {($CMD eq "on")?"PortA6 off":"PortA6 on"}
attr prxPortA6 setList on off
attr prxPortA6 valueFn {($VALUE eq "on")?"off":"on"}

define prxPortA7 readingsProxy icMCP23017:PortA7
attr prxPortA7 group OutputPorts
attr prxPortA7 setFn {($CMD eq "on")?"PortA7 off":"PortA7 on"}
attr prxPortA7 setList on off
attr prxPortA57 valueFn {($VALUE eq "on")?"off":"on"}
Raspberry B, B+, B v2 u. v3; DS18B20; MCP23017; CUL; ESP8266

klausw

attr icMCP23017 OutputPorts A0,A1,A2,A3,A3,A5,A6,A7

hab ich was gewonnen?` 8)

edit:

hast du das händisch eingetragen?
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

AlphaKingOne

ach das passiert mir doch immer wieder  >:(
ja ich wusste nicht wie ich das direkt in fhem eintippen soll ehrlich gesagt
Raspberry B, B+, B v2 u. v3; DS18B20; MCP23017; CUL; ESP8266

klausw

Zitat von: AlphaKingOne am 16 November 2016, 16:19:37
ach das passiert mir doch immer wieder  >:(
ja ich wusste nicht wie ich das direkt in fhem eintippen soll ehrlich gesagt
Ich frage nur um einen Fehler im Modul auszuschließen.
Du kannst es direkt im Modul eingeben, ich glaube da hatte ich eine Eingabemaske vorgesehen.
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

AlphaKingOne

ja da hatte ich glaub was gesehen. Aber ich wusste nicht wie ich das Modul aktivieren soll und dann hab ich gleich alles über die config gemacht. Jedenfalls hab ich glaub Probleme mit der Stromversorgung oder ein Kabel ist etwas locker deswegen ändert sich wieder die Adressierung von 0x20 auf 0x27. Werde mal versuchen ein Kondensator zwischen zu schalten oder Netzteil direkt aufs Board muss ich mal schauen. Wie hast du das bei dir angeschlossen?
Raspberry B, B+, B v2 u. v3; DS18B20; MCP23017; CUL; ESP8266

klausw

Zitat von: AlphaKingOne am 16 November 2016, 17:17:52
ja da hatte ich glaub was gesehen. Aber ich wusste nicht wie ich das Modul aktivieren soll und dann hab ich gleich alles über die config gemacht.
Einfach oben in der Eingabezeile bei FHEM eingeben:
define icMCP23017 I2C_MCP23017 0x20
die Attribute entweder auf die gleiche Weise, oder unten auf der Detailseite des definierten icMCP23017

Zitat von: AlphaKingOne am 16 November 2016, 17:17:52
Wie hast du das bei dir angeschlossen?
Gar nicht, den MCP23017 habe ich nie verwendet.
Ich hatte das Modul mit Ferndiagnose erstellt.
Meine I2C Module laufen über die 5V des Pi (ist nicht sauber, aber die 3,3V Pegel des I2C reichen gerade so)
Die Ausgänge der Portextender schalten Low-Side-FETs von 12V.
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

AlphaKingOne

#172
So kleines update von mir. Mittlerweile läuft alles mehr oder weniger gut. Ich bastel mir jetzt ne Platine damit die Wackler weg sind. Wo es bei mir aber noch hängt ist der Interrupt. Bei dem Status stehen da 3 Fragezeichen und die abfrage ist hmmm ja also nachmal kommt sie nach 3 oder 5 Minuten manchmal garnicht. Fhem neu starten bringt nichts also Status ändert sich nicht. Starte ich den ganzen Pi neu ändert sich der zustand der Ports. Also passt irgendwas mit der Interrupt abfrage nicht. Jemand ne idee. Ich hoffe das es nicht schon wieder in tipp Fehler von mir war  ::)
Raspberry B, B+, B v2 u. v3; DS18B20; MCP23017; CUL; ESP8266

klausw

Interruptkonfiguration ist auf den ersten Blick in Ordnung.
Allerdings ist in deinem Verdrahtungsplan der Interruptausgang auf GPIO3 gelegt.
In der Config ist es GPIO4, der bei dir für 1wire genutzt wird.

Allerdings wundert es mich, das du keine Fehlermeldungen bekommst (du schaust doch sicher ins Log, wenn etwas nicht läuft?)
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

wthiess

Hallo
So wie ich den Plan lese ist da weder intA noch B angeschlossen.

Lg
Wolfgang
Raspberry Pi 3; 8xRelais; Aptodec Nano V3.0 Pro; FS1000a; RF-5V; Hama TS33C; 3x Brennerstuhl FunkSteckdosen; 9x Dooya funk Rollo; KWL Systemair VR400; Thermokon Modbusthermostat; diverse China Modbus Thermostate; 1-wire Bus; Telegram; QuickFhem; FhemNative; Firmata; Alexa ......

klausw

Zitat von: wthiess am 12 Dezember 2016, 22:37:28
Hallo
So wie ich den Plan lese ist da weder intA noch B angeschlossen.

Lg
Wolfgang
Stimmt, so genau habe ich nicht geschaut.
Also: erstmal richtig verdrahten  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

AlphaKingOne

ok jetzt habe ich ein kleines Verständnis Problem ich hab mich sowieso schon als gefragt was es mit GPIO4 aufsich hat. IntA muss also an GPIO4. Ich hab das jetzt so angeschlossen aber es geht immer noch nicht oder liegt das da dran das ich an GPIO4 noch den DS18B20 dran hab der jetzt auch nicht mehr geht. IntB ist angeschlossen und nutze ich als Reset. Komisch ist ja auch das nach einem Neustart des PI der zustand angezeigt wird (siehe Bild)
Raspberry B, B+, B v2 u. v3; DS18B20; MCP23017; CUL; ESP8266

wthiess

#177
Pin19 und 20 sind IntA-B
Pin 18 = Reset
Häng den IntA an Gpio 25 und ändere
"define Interrupt RPI_GPIO 4" auf "define Interrupt RPI_GPIO 25"
"25" = freier GPIO Port
Den IntB lass leer
Den Reset auf Plus. So läufts bei mir.

Lg
Wolfgang
Raspberry Pi 3; 8xRelais; Aptodec Nano V3.0 Pro; FS1000a; RF-5V; Hama TS33C; 3x Brennerstuhl FunkSteckdosen; 9x Dooya funk Rollo; KWL Systemair VR400; Thermokon Modbusthermostat; diverse China Modbus Thermostate; 1-wire Bus; Telegram; QuickFhem; FhemNative; Firmata; Alexa ......

AlphaKingOne

#178
Vielen dank Läuft  :-* ja I2C ist für mich noch Neuland finde ich aber voll interessant mit nem Bus zuarbeiten :)
wie ist das wenn ich ein zweiten MCP23017 hab muss ich dann wieder nen extra GPIO nehmen? Hatte nämlich noch ein paar plätze auf dem Patchpanel frei wo ich mir dachte das ich das Bus da drüber laufen lassen kann.
Raspberry B, B+, B v2 u. v3; DS18B20; MCP23017; CUL; ESP8266

klausw

Wenn du den Int Ausgang auf open drain stellst, kannst du mehrere dieser Ausgänge zusammen auf einen GPIO legen. Dazu müsste noch ein Pullup an den GPIO angeschlossen werden.
Open drain Ausgänge sind im inaktiven Zustand hochohmig (GPIO über Pullup dann high). Im aktiven Zustand (bei Interrupt) wird der open drain Ausgang auf Masse geschaltet  (GPIO dann low).
Vorteil: nur ein GPIO für mehrere MCP23017
Nachteil: bei jedem Interrupt müssen alle MCP23017 ausgelesen werden.

Es macht durchaus Sinn, alle Eingänge auf einen IC zu legen (wenn das reicht) und die Ausgänge auf den zweiten.
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