Problem mit Analog-PIN A9 (#63) mit Firmata auf Arduino-Mega

Begonnen von Allgaeuer, 24 Mai 2020, 21:10:10

Vorheriges Thema - Nächstes Thema

Allgaeuer

Bei meinem Mega habe ich festgestellt, dass FHEM den Analog-Pin A9 (Pin-Nr. 63) nicht mag. D.h. Sobald ich diesen Pin als Analog-Pin definiere
define Firmata_ANALOG_IN_Test_1 FRM_AD 63
attr Firmata_ANALOG_IN_Test_1 IODev Arduino_1

dann wird der Wert nur 1x gelesen und auch alle anderen Analog-Pins werden danach nicht mehr aktualisiert.

Wenn ich alternativ die Pins A8 (#62) oder A10 (#64) verwende, dann funktionierts.

Mit einem Firmata-Testprogramm auf dem PC kann ich die Pins problemlos lesen.
Ich verwende ConfigurableFirmata auf eine Raspi.

Kennt Jemand dieses Phänomen?

Danke und viele Grüße vom Allgäuer

jensb

@Allgaeuer

Kenne das Problem selbst nicht und kann es mangels passender Hardware auch nicht nachstellen. Der Code in FHEM weiß nichts von bestimmten Boards und deren Pins und behandelt alles gleich. Es gibt bei einigen Arduino-Board Pins mit besonderen Funktionen für Arduino-Shields, für die die Firmata-Firmware eine Sonderbehandlung macht. Ob aber gerade A9 beim Mega dazu zählt, kann ich nicht sagen.

Ich gehe mal davon aus, dass bei dir der Pin A9/63 im FRM-Device unter "analog_pins" aufgeführt ist.

Um ein bisschen mehr Licht in die Angelegenheit zu bringen folgender Vorschlag: Konfiguriere möglichst nur den A9 und einen weiteren Analog-Pin am FRM-Device, setze bei FRM sampling-interval=1000 und verbose=5 und poste den Teil des FHEM-Logs, der den Datenaustausch zwischen FRM und Arduino direkt nach dem Verbindungsaufbau und ein paar Sekunden danach zeigt. Nach dem Verbindungsaufbau und den Device-Capability-Abfragen werden die Pins beim Arduino angemeldet (Kommando C0), danach müssen sie sich periodisch melden (Kommando E0).

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

Allgaeuer

Hallo Jens,

klasse, dass Du das anschaust.  :)

unten im LOG sind 2 Testsequenzen:
a) ab 20:00:23: PIN A8 (#62) und PIN A9 (#63) -> bei Zeile 169/170 (Du hast bestimmt einen Editor mit Zeilenanzeige) wird je 1x von den Analgopins gelesen, dann kommt nichts mehr (das LOG ist nicht abgeschnitten)
b) anschließend anstelle von A9 habe ich A10 (#64) konfiguriert und mit "rereadcfg" ab 20:05:20 die Änderung wirksam gemacht -> jetzt läuft die zyklische Abfrage (ab Zeile 357).

Ich hoffe, es hilft bei der Suche.

Danke und Gruß,
Allgäuer

2020.05.27 20:00:23 5: Arduino_1 FRM:>ff
2020.05.27 20:00:23 5: SW: ff
2020.05.27 20:00:23 1: /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0 disconnected, waiting to reappear (Arduino_1)
2020.05.27 20:00:23 3: Setting Arduino_1 serial parameters to 57600,8,N,1
2020.05.27 20:00:23 5: Arduino_1 FRM_DoInit
2020.05.27 20:00:23 5: Arduino_1 FRM:>ff
2020.05.27 20:00:23 5: SW: ff
2020.05.27 20:00:23 5: Arduino_1 setup stage 1
2020.05.27 20:00:23 1: /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0 reappeared (Arduino_1)
2020.05.27 20:00:23 5: Arduino_1 setup stage 1
2020.05.27 20:00:24 5: Arduino_1 setup stage 1
2020.05.27 20:00:24 5: Arduino_1 setup stage 1
2020.05.27 20:00:24 5: Arduino_1 setup stage 1
2020.05.27 20:00:24 5: Arduino_1 setup stage 1
2020.05.27 20:00:24 5: Arduino_1 setup stage 1
2020.05.27 20:00:24 5: Arduino_1 setup stage 1
2020.05.27 20:00:24 5: Arduino_1 setup stage 1
2020.05.27 20:00:24 5: Arduino_1 setup stage 1
2020.05.27 20:00:24 5: Arduino_1 setup stage 1
2020.05.27 20:00:25 5: Arduino_1 setup stage 1
2020.05.27 20:00:26 5: Arduino_1 setup stage 1
2020.05.27 20:00:26 3: Arduino_1 querying Firmata versions
2020.05.27 20:00:26 5: Arduino_1 FRM:>f90000
2020.05.27 20:00:26 5: SW: f90000
2020.05.27 20:00:26 5: Arduino_1 FRM:>f079f7
2020.05.27 20:00:26 5: SW: f079f7
2020.05.27 20:00:26 5: Arduino_1 FRM:<f90206f079020a4d007900
2020.05.27 20:00:26 5: Arduino_1 setup stage 1
2020.05.27 20:00:26 5: Arduino_1 FRM:<43006f006e0066006900670075007200610062
2020.05.27 20:00:26 5: Arduino_1 setup stage 1
2020.05.27 20:00:26 5: Arduino_1 FRM:<006c00650046006900
2020.05.27 20:00:26 5: Arduino_1 setup stage 1
2020.05.27 20:00:26 5: Arduino_1 FRM:<72006d006100740061002e0069006e006f00f7
2020.05.27 20:00:26 5: Arduino_1 setup stage 1
2020.05.27 20:00:26 3: Arduino_1 Firmata Firmware Version: MyConfigurableFirmata.ino V_2_10 (using Protocol Version: V_2_06)
2020.05.27 20:00:26 5: Arduino_1 FRM:>f069f7
2020.05.27 20:00:26 5: SW: f069f7
2020.05.27 20:00:26 5: Arduino_1 FRM:>f06bf7
2020.05.27 20:00:26 5: SW: f06bf7
2020.05.27 20:00:26 5: Arduino_1 FRM:<f06a7f7f7f7f7f7f7f7f7f7f7f7f7f
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<7f7f7f7f7f7f7f00010203040506070809
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<0a0b0c0d0e0ff7f06c7f7f
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<00010b010101030807017f00010b010101030807017f00010b
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<010101030807017f00010b0101010308
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<07017f00010b0101010308
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<07017f00010b010101030807017f00010b
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<010101030807017f00010b010101030807017f00
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<010b010101030807017f00
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<010b010101030807017f00010b01010103
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<0807017f00010b010101030807017f00010b01
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<010107017f00010b01010107017f00010b
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<01010107017f00010b0101
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<0107017f00010b01010107017f00010b
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<01010107017f00010b01010107017f0001
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<0b01010107017f0001
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<0b01010107017f00010b01010107017f00010b01
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<010107017f00010b01010107017f00010b01
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<010107017f00010b01
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<010107017f00010b01010107017f0001
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<0b01010107017f00010b01010107017f00
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<010b01010107017f00
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<010b01010107017f00010b01010107017f0001
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<0b01010107017f00010b01010107017f00
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<010b01010107017f
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<00010b01010107017f00010b0101010701
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<7f00010b01010107017f00010b010101
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<07017f00010b010101
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:26 5: Arduino_1 FRM:<07017f00010b01010107017f00010b01
2020.05.27 20:00:26 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<010107017f00010b010101030807017f00
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<010b010101030807
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<017f00010b010101030807017f00010b01
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<010107017f00010b01010107017f00010b01
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<010107017f00010b0101
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<0107017f00010b01010107017f00010b01
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<010107017f00010b01010107017f0001
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<0b010101020a07017f
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<00010b010101020a07017f00010b0101
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<01020a07017f00010b010101020a07017f
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<00010b010101020a
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<07017f00010b010101020a07017f00010b
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<010101020a07017f00010b010101020a07
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<017f00010b010101
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<020a07017f00010b010101020a07017f00010b01
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<0101020a07017f00010b01
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<0101020a07017f00010b010101020a0701
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<7f00010b010101020a07
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<017f00010b01010102
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<0a07017f00010b01
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:<0101020a07017ff7
2020.05.27 20:00:27 5: Arduino_1 setup stage 2
2020.05.27 20:00:27 5: Arduino_1 FRM:>f07a6807f7
2020.05.27 20:00:27 5: SW: f07a6807f7
2020.05.27 20:00:27 5: Arduino_1 setup stage 3
2020.05.27 20:00:27 5: Arduino_1 initializing 'Firmata_ANALOG_IN_PIN_62'
2020.05.27 20:00:27 5: Firmata_ANALOG_IN_PIN_62 FRM_Client_AssignIOPort before IODev Arduino_1 -> Arduino_1
2020.05.27 20:00:27 5: Firmata_ANALOG_IN_PIN_62 FRM_Client_AssignIOPort after IODev Arduino_1
2020.05.27 20:00:27 5: Arduino_1 FRM:>f43e02
2020.05.27 20:00:27 5: SW: f43e02
2020.05.27 20:00:27 5: Arduino_1 FRM:>fe01
2020.05.27 20:00:27 5: SW: fe01
2020.05.27 20:00:27 5: Firmata_ANALOG_IN_PIN_62 initialized pin 62 of Arduino_1
2020.05.27 20:00:27 5: Arduino_1 FRM:>fe01
2020.05.27 20:00:27 5: SW: fe01
2020.05.27 20:00:27 5: Arduino_1 initializing 'Firmata_ANALOG_IN_PIN_63'
2020.05.27 20:00:27 5: Firmata_ANALOG_IN_PIN_63 FRM_Client_AssignIOPort before IODev Arduino_1 -> Arduino_1
2020.05.27 20:00:27 5: Firmata_ANALOG_IN_PIN_63 FRM_Client_AssignIOPort after IODev Arduino_1
2020.05.27 20:00:27 5: Arduino_1 FRM:>f43f02
2020.05.27 20:00:27 5: SW: f43f02
2020.05.27 20:00:27 5: Arduino_1 FRM:>ff01
2020.05.27 20:00:27 5: SW: ff01
2020.05.27 20:00:27 5: Firmata_ANALOG_IN_PIN_63 initialized pin 63 of Arduino_1
2020.05.27 20:00:27 5: Arduino_1 FRM:>ff01
2020.05.27 20:00:27 5: SW: ff01
2020.05.27 20:00:27 5: Arduino_1 setup stage 5
2020.05.27 20:00:27 5: Arduino_1 FRM:<e85c07e95505
2020.05.27 20:00:27 5: onAnalogMessage for pin 62, old: --, new: 988
2020.05.27 20:00:27 5: onAnalogMessage for pin 63, old: --, new: 725
2020.05.27 20:05:20 1: /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0 disconnected, waiting to reappear (Arduino_1)
2020.05.27 20:05:20 1: Including fhem.cfg
2020.05.27 20:05:20 3: telnetPort: port 7072 opened
2020.05.27 20:05:20 3: WEB: port 8083 opened
2020.05.27 20:05:20 2: eventTypes: loaded 1149 events from ./log/eventTypes.txt
2020.05.27 20:05:20 1: Including ./FHEM/fhem-System_1.cfg
2020.05.27 20:05:20 3: FHEM2FHEM opening Remoteserver at 192.168.178.30:7072
2020.05.27 20:05:20 1: Including ./FHEM/fhem-Arduion_Firmata_1_test.cfg
2020.05.27 20:05:20 1: Including /opt/fhem/log/fhem.save
2020.05.27 20:05:20 3: Opening Arduino_1 device /dev/serial/by-id/usb-Prolific_Technology_Inc._USB-Serial_Controller-if00-port0
2020.05.27 20:05:20 3: Setting Arduino_1 serial parameters to 57600,8,N,1
2020.05.27 20:05:20 5: Arduino_1 FRM_DoInit
2020.05.27 20:05:20 5: Arduino_1 FRM:>ff
2020.05.27 20:05:20 5: SW: ff
2020.05.27 20:05:20 5: Arduino_1 setup stage 1
2020.05.27 20:05:20 3: Arduino_1 device opened
2020.05.27 20:05:21 3: FHEM2FHEM device opened (Remoteserver)
2020.05.27 20:05:21 5: Arduino_1 setup stage 1
2020.05.27 20:05:21 5: Arduino_1 setup stage 1
2020.05.27 20:05:21 5: Arduino_1 setup stage 1
2020.05.27 20:05:21 5: Arduino_1 setup stage 1
2020.05.27 20:05:21 5: Arduino_1 setup stage 1
2020.05.27 20:05:21 5: Arduino_1 setup stage 1
2020.05.27 20:05:21 5: Arduino_1 setup stage 1
2020.05.27 20:05:21 5: Arduino_1 setup stage 1
2020.05.27 20:05:21 5: Arduino_1 setup stage 1
2020.05.27 20:05:22 5: Arduino_1 setup stage 1
2020.05.27 20:05:23 5: Arduino_1 setup stage 1
2020.05.27 20:05:24 5: Arduino_1 setup stage 1
2020.05.27 20:05:24 3: Arduino_1 querying Firmata versions
2020.05.27 20:05:24 5: Arduino_1 FRM:>f90000
2020.05.27 20:05:24 5: SW: f90000
2020.05.27 20:05:24 5: Arduino_1 FRM:>f079f7
2020.05.27 20:05:24 5: SW: f079f7
2020.05.27 20:05:24 5: Arduino_1 FRM:<f90206f079020a4d00
2020.05.27 20:05:24 5: Arduino_1 setup stage 1
2020.05.27 20:05:24 5: Arduino_1 FRM:<790043006f006e00660069006700750072
2020.05.27 20:05:24 5: Arduino_1 setup stage 1
2020.05.27 20:05:24 5: Arduino_1 FRM:<00610062006c0065004600690072006d006100
2020.05.27 20:05:24 5: Arduino_1 setup stage 1
2020.05.27 20:05:24 5: Arduino_1 FRM:<740061002e0069006e006f00f7
2020.05.27 20:05:24 5: Arduino_1 setup stage 1
2020.05.27 20:05:24 3: Arduino_1 Firmata Firmware Version: MyConfigurableFirmata.ino V_2_10 (using Protocol Version: V_2_06)
2020.05.27 20:05:24 5: Arduino_1 FRM:>f069f7
2020.05.27 20:05:24 5: SW: f069f7
2020.05.27 20:05:24 5: Arduino_1 FRM:>f06bf7
2020.05.27 20:05:24 5: SW: f06bf7
2020.05.27 20:05:24 5: Arduino_1 FRM:<f06a7f7f7f7f7f7f7f7f7f7f
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f7f
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<7f7f7f7f7f7f7f000102030405060708090a0b
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<0c0d0e0ff7f06c7f7f00010b0101010308
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<07017f00010b010101030807017f0001
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<0b010101030807017f
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<00010b010101030807017f00010b0101
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<01030807017f00010b010101030807017f
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<00010b010101030807
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<017f00010b010101030807017f00010b010101
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<030807017f00010b
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<010101030807017f00010b010101030807017f00
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<010b010101030807017f00010b010101
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<07017f00010b010101
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<07017f00010b01010107017f00010b0101
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<0107017f00010b01010107
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<017f00010b01010107017f00010b01010107017f0001
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<0b01010107017f00
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<010b01010107017f00010b01010107017f
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<00010b0101010701
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<7f00010b01010107017f00010b01010107017f00
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<010b01010107017f00010b
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<01010107017f00010b01010107017f00
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<010b01010107017f00
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<010b01010107017f00010b01010107017f
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<00010b01010107017f0001
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<0b01010107017f00010b01010107017f
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<00010b01010107017f00010b01010107
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<017f00010b01010107017f00
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<010b01010107017f00010b01010107017f
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<00010b0101010701
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<7f00010b01010107017f00010b01010107017f00
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<010b010101030807017f00010b010101
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<030807017f00010b01
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<0101030807017f00
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<010b01010107017f00010b01010107017f
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<00010b01010107017f00010b0101010701
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<7f00010b01010107017f00
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<010b01010107017f00010b01010107017f00010b0101
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<01020a07017f0001
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<0b010101020a07017f00010b010101020a
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<07017f00010b0101
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<01020a07017f00010b010101020a07017f00010b
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<010101020a07017f00010b
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<010101020a07017f00010b010101020a
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<07017f00010b010101
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<020a07017f00010b
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<010101020a07017f
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<00010b010101020a07
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<017f00010b010101
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<020a07017f00010b
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<010101020a07017f00
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<010b010101020a07
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<017f00010b010101
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<020a07017f00010b01
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:<0101020a07017ff7
2020.05.27 20:05:24 5: Arduino_1 setup stage 2
2020.05.27 20:05:24 5: Arduino_1 FRM:>f07a6807f7
2020.05.27 20:05:24 5: SW: f07a6807f7
2020.05.27 20:05:24 5: Arduino_1 setup stage 3
2020.05.27 20:05:24 5: Arduino_1 initializing 'Firmata_ANALOG_IN_PIN_62'
2020.05.27 20:05:24 5: Firmata_ANALOG_IN_PIN_62 FRM_Client_AssignIOPort before IODev Arduino_1 -> Arduino_1
2020.05.27 20:05:24 5: Firmata_ANALOG_IN_PIN_62 FRM_Client_AssignIOPort after IODev Arduino_1
2020.05.27 20:05:24 5: Arduino_1 FRM:>f43e02
2020.05.27 20:05:24 5: SW: f43e02
2020.05.27 20:05:24 5: Arduino_1 FRM:>fe01
2020.05.27 20:05:24 5: SW: fe01
2020.05.27 20:05:24 5: Firmata_ANALOG_IN_PIN_62 initialized pin 62 of Arduino_1
2020.05.27 20:05:24 5: Arduino_1 FRM:>fe01
2020.05.27 20:05:24 5: SW: fe01
2020.05.27 20:05:24 5: Arduino_1 initializing 'Firmata_ANALOG_IN_PIN_64'
2020.05.27 20:05:24 5: Firmata_ANALOG_IN_PIN_64 FRM_Client_AssignIOPort before IODev Arduino_1 -> Arduino_1
2020.05.27 20:05:24 5: Firmata_ANALOG_IN_PIN_64 FRM_Client_AssignIOPort after IODev Arduino_1
2020.05.27 20:05:24 5: Arduino_1 FRM:>f44002
2020.05.27 20:05:24 5: SW: f44002
2020.05.27 20:05:24 5: Arduino_1 FRM:>c001
2020.05.27 20:05:24 5: SW: c001
2020.05.27 20:05:24 5: Firmata_ANALOG_IN_PIN_64 initialized pin 64 of Arduino_1
2020.05.27 20:05:24 5: Arduino_1 FRM:>c001
2020.05.27 20:05:24 5: SW: c001
2020.05.27 20:05:24 5: Arduino_1 setup stage 5
2020.05.27 20:05:24 5: Arduino_1 FRM:<e85107ea3c07e01604e01204
2020.05.27 20:05:24 5: onAnalogMessage for pin 62, old: --, new: 977
2020.05.27 20:05:24 5: onAnalogMessage for pin 64, old: --, new: 956
2020.05.27 20:05:25 5: Arduino_1 FRM:<e03b03e85207ea
2020.05.27 20:05:25 5: onAnalogMessage for pin 62, old: 977, new: 978
2020.05.27 20:05:25 5: Arduino_1 FRM:<3807
2020.05.27 20:05:25 5: onAnalogMessage for pin 64, old: 956, new: 952
2020.05.27 20:05:26 5: Arduino_1 FRM:<e02104e84e07ea34
2020.05.27 20:05:26 5: onAnalogMessage for pin 62, old: 978, new: 974
2020.05.27 20:05:26 5: Arduino_1 FRM:<07
2020.05.27 20:05:26 5: onAnalogMessage for pin 64, old: 952, new: 948
2020.05.27 20:05:27 5: Arduino_1 FRM:<e03e04e8
2020.05.27 20:05:27 5: Arduino_1 FRM:<5307ea3707
2020.05.27 20:05:27 5: onAnalogMessage for pin 62, old: 974, new: 979
2020.05.27 20:05:27 5: onAnalogMessage for pin 64, old: 948, new: 951
2020.05.27 20:05:28 5: Arduino_1 FRM:<e04204e850
2020.05.27 20:05:28 5: Arduino_1 FRM:<07ea3707
2020.05.27 20:05:28 5: onAnalogMessage for pin 62, old: 979, new: 976
2020.05.27 20:05:29 5: Arduino_1 FRM:<e03d04e84f07ea
2020.05.27 20:05:29 5: onAnalogMessage for pin 62, old: 976, new: 975
2020.05.27 20:05:29 5: Arduino_1 FRM:<3507
2020.05.27 20:05:29 5: onAnalogMessage for pin 64, old: 951, new: 949
2020.05.27 20:05:30 5: Arduino_1 FRM:<e04204e84f07ea3c
2020.05.27 20:05:30 5: Arduino_1 FRM:<07
2020.05.27 20:05:30 5: onAnalogMessage for pin 64, old: 949, new: 956

jensb

Habe mir das Log angesehen: Hier gibt es scheinbar ein Problem mit dem Firmata-Protokoll bei Devices mit mehr als 16 Pins. Denn das Kommando C0 ist für Pins definiert (siehe https://github.com/firmata/protocol/blob/master/protocol.md) und besteht nur aus 2 Bytes. Im 1. Byte ist neben dem Kommando auch die Pin-Nummer. Da das nächste Kommando D0 ist, kommen daher für die Pins nur 0 bis F in Frage. So steht es auch im Firmata-Library-Code für den Arduino.

Schaut man genauer hin, ist das Ganze aber etwas anders. Firmata verwendet bei C0 anders als bei F4 nicht den Device-Pin sondern den Analog-Pin. Dann reichen plötzlich 16 Pins wieder aus. Das Problem: Der Arduino-Sketch weiß, für welche Hardware er gebaut wird und kann beide Pin-Angaben umrechnen. Der Firmata-Host muss das Device erst mit Kommando 69 nach der Zuordnung fragen und tut das auch bei dir, verwendet diese Information dann aber nicht so wie meiner Meinung nach erforderlich.

Hier sieht man das im Log:

Zitat
2020.05.27 20:00:27 5: Arduino_1 FRM:>fe01 (für A8, Pin 62=3E, C0+3E=FE, richtig wäre c801)
2020.05.27 20:00:27 5: Arduino_1 FRM:>ff01 (für A9, Pin 63=3F, C0+3F=FF, richtig wäre c901)
2020.05.27 20:05:24 5: Arduino_1 FRM:>fe01 (für A8, Pin 62=3E, C0+3E=FE, richtig wäre c801)

Diese 3 Telegramme vom Firmata-Host werden vom Firmata-Device nicht so verarbeitet wie gewünscht, da sie statt mit CX mit FX beginnen. Eine Ausnahme ist:

Zitat
2020.05.27 20:05:24 5: Arduino_1 FRM:>c001 (für A10, Pin 64=40, C0+40=100, richtig wäre ca01)

Bei Pin 64 kommt es beim Telegrammaufbau auf der Firmata-Host-Seite zu einem arithmetischen Überlauf, der interessanterweise wieder zu C0 führt und eigentlich nur die Meldung für Pin A0 aktivieren sollte. Das Firmata-Device scheint das aber als generelle Sendefreigabe für alle analogen Pins zu interpretieren. Deshalb bekommst du wohl bei Aktivierung von Pin 64 Daten. Das man unabhängig davon für jeden aktivierten Analogpin mindestens einmal Daten bekommt ist normal.

Ich werde mir das in den nächsten Tagen noch genauer ansehen, um zu klären, ob das wirklich so ist und wenn ja, ob eine Änderung im FHEM-FRM_AD-Modul oder im Perl-Firmata-Modul Abhilfe schaffen könnte.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

jensb

Meine Nachforschungen haben ergeben, dass das Problem im Perl-Firmata-Modul steckt. Die pinbezogenen Funktionsaufrufe dieses Moduls sind für Firmata-Device-Pinnummern definiert. Bei den Analogeingängen wird aber nicht berücksichtigt, dass in den Firmata-Telegrammen der Analogkanal statt der Pinnummer benötigt wird. Dadurch wird fast immer ein falsches Telegramm an das Firmata-Device gesendet. Je nach Pinnummer kann das im Einzelfall auch dazu führen, dass statt dessen das Melden von Digitalpins angefordert wird, für die sich auf Firmata-Host-Seite niemand interessiert.

Das Perl-Firmata-Modul ist von 2010. Warum das niemand in den letzten 10 Jahren bemerkt hat, ist mir ein Rätsel - vermutlich weil auch ein Bug im Firmata-Arduino-Code steckt, der die Analogübertragung scheinbar für alle Analogeingänge aktiviert, sobald irgendein CX-Kommando eingeht - das ist aber eine andere Baustelle.

Im Unterverzeichnis lib/Device von https://github.com/jnsbyr/perl-firmata/tree/develop findet sich ein experimentelles Update für das Perl-Firmata-Modul. Der Inhalt muss in das Unterverzeichnis FHEM/lib/Device kopiert werden. Vorher Sicherung der vorhandenen Dateien machen. Nach dem Kopieren FHEM neu starten.

Bitte Rückmeldung, ob das Update wie gewünscht funktioniert.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

Allgaeuer

Hallo Jens,

hab's gleich ausprobiert und funktioniert  :)
Auch auf meiner Hauptapplikation mit vielen Analog-Ports läuft die Dein neue Version.

Wenn Du zur Sicherheit noch einen Log-Auszug möchtest, dann kann ich den gerne nachliefern.

Danke für die schnelle Hilfe.

Gruß Allgäuer

jensb

Hallo Allgäuer,

danke für den Test und die Rückmeldung. Es freut mich, dass es auch bei dir funktioniert. Weitere Logauszüge sind nicht nötig, ich hatte zunächst auch meine eigenen analysiert.

Es wird noch etwas dauern, bis die neue Version über FHEM zum Update bereit steht. Wer bis dahin ein FHEM-Update machen möchte, sollte im global-Modul dem Attribut exclude_from_update den Filter FHEM/lib/Device/Firmata.* hinzufügen, damit die Testversion nicht noch mal installiert werden muss. Ich werde hier eine Nachricht posten, wenn das Update verfügbar ist.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb

jensb

Hallo,

es gibt Firmata-Neuigkeiten, u.a. dass das Perl-Modul Device::Firmata nicht mehr über FHEM aktualisiert wird - man kann es statt dessen direkt installieren.

Grüße,
Jens
FHEM 6.1 - RPi 4 Raspbian 12 + PiTFT - OPi Zero Armbian 5.35
EnOcean - (W)LAN/Firmata: BMP180, TSL2561, SHT21, Heatronic 3, OBIS - WLAN/ESP8266: Gardena 1251, Zirkulationspumpe - RTL433: Oregon - Bluetooth - MQTT
Contributions: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/jensb