Firmata - DOIF für Auslesen eines INT eines MCP23017

Begonnen von R1F800, 25 November 2024, 08:51:12

Vorheriges Thema - Nächstes Thema

R1F800

Guten Morgen,

ich bin gerade am Verzweifel.
Ich habe über einen Arduino Nano einen MCP23017 via Firmata an FHEM angekoppelt.
Das funktioniert soweit auch. Die Kommunikation steht und iuch sehe auch die IO Wechsel der beiden Bänke.
Auch der Interrupt des MCP wird vom Firmata sauber erkannt und an das FHEM Device korrekt weitergegeben.
Mein INT
defmod MCP0x20_INTA FRM_IN 7
attr MCP0x20_INTA IODev FIRMATA
attr MCP0x20_INTA activeLow yes
attr MCP0x20_INTA event-on-change-reading .*
attr MCP0x20_INTA internal-pullup on
attr MCP0x20_INTA room FIRMATA,interfaces
attr MCP0x20_INTA stateFormat reading
attr MCP0x20_INTA verbose 5

ABER weder mein DoIf noch ein gebauter notify funktioniert. Ursprünglich hatte ich ein Userreading, das dann irgendwann plötzlich nciht mehr funktionierte.
define MCP0x20_INTA FRM_IN 7
setuuid MCP0x20_INTA 5fe73626-f33f-cc65-a82b-94c8a5b416c13527
attr MCP0x20_INTA IODev FIRMATA
attr MCP0x20_INTA activeLow yes
attr MCP0x20_INTA event-on-change-reading .*
attr MCP0x20_INTA internal-pullup on
attr MCP0x20_INTA room FIRMATA,interfaces
attr MCP0x20_INTA stateFormat reading
attr MCP0x20_INTA userReadings pullX20b {fhem "get MCP0x20"}
attr MCP0x20_INTA verbose 5

define MCP0x20_INTB FRM_IN 8
setuuid MCP0x20_INTB 5fe73642-f33f-cc65-895d-11237f993b734c90
attr MCP0x20_INTB IODev FIRMATA
attr MCP0x20_INTB activeLow yes
attr MCP0x20_INTB internal-pullup on
attr MCP0x20_INTB room FIRMATA,interfaces
attr MCP0x20_INTB stateFormat reading
attr MCP0x20_INTB userReadings pullX20b {fhem "get MCP0x20"}
attr MCP0x20_INTB verbose 5

Da der PULL als Userreading nicht mehr funktionierte habe ich dann ein DOIF angelegt:
defmod Pull_MCP0X20 DOIF (MCP0x20_INTA : "on") (get MCP0x20)
attr Pull_MCP0X20 do always
attr Pull_MCP0X20 event-on-change-reading .*
attr Pull_MCP0X20 room interfaces

Leider reagierte das DOIF eben nicht auf den Interrupt. und der PULL Befehl wird nicht ausgeführt.

Setze ich jetzt GET MCP0x20 in der commandline dann funktioniert das auslesen.

WO habe ich jetzt den Denkfehler?
Summende Grüße
Ingo

LuckyDay

erweitere bitte dein userReadings

attr MCP0x20_INTA userReadings pullX20b {fhem "get MCP0x20"; "egal"}

R1F800

Zitat von: LuckyDay am 25 November 2024, 21:24:55erweitere bitte dein userReadings

attr MCP0x20_INTA userReadings pullX20b {fhem "get MCP0x20"; "egal"}

Das hat leider rein gar nichts gebracht. Keine Ahnung warum.

Interrupt wird erkannt aber das Userreading klappt nicht.
2024.12.02 11:28:43 5: MCP0x20_INTA: observer pin: 7, old: 0, new: 1
2024.12.02 11:31:15 5: MCP0x20_INTA: observer pin: 7, old: 1, new: 0

Device:
defmod MCP0x20_INTA FRM_IN 7
attr MCP0x20_INTA IODev FIRMATA
attr MCP0x20_INTA activeLow yes
attr MCP0x20_INTA event-on-change-reading .*
attr MCP0x20_INTA internal-pullup on
attr MCP0x20_INTA room FIRMATA,interfaces
attr MCP0x20_INTA stateFormat reading
attr MCP0x20_INTA userReadings pullX20a {fhem "get MCP0x20";; "egal"}
attr MCP0x20_INTA verbose 5

Weder vom MCP sehe ich Logeinträge, dass sich der STATE eines der IOs verändert hat noch sehe ich das Reading iotself im LOG

Der IO vom MCP springt auch nach dem Loslassen des Tasters direkt wieder auf den Ursprungswert zurück ..
Summende Grüße
Ingo

R1F800

Niemand eine Idee?

Interessanterweise funktionieren an dem 2. MCP die Sensoren und Ihre DoIfs weiterhin korrekt.

Ob mal nach nun 5 Jahren Dauerbetrieb der PI neu aufgesetzt werden sollte?
Summende Grüße
Ingo