Firmata Update für Firmware-Versionen ab 2.7

Begonnen von jensb, 29 Dezember 2017, 21:35:33

Vorheriges Thema - Nächstes Thema

jensb

Hallo,

Projekte mit Firmata oder ConfigurableFirmata ab Firmware-Version 2.7 funktionieren bis Ende 2017 nicht ohne Modifikationen mit FHEM. Hintergrund ist die fehlende Unterscheidung von Firmata-Protokoll-Version und Firmata-Firmware-Version. Während sich die Protokoll-Version nur selten ändert, gibt es gerade bei ConfigurableFirmata immer wieder neue Features und die wirken sich auf die Firmware-Version aus. Eine Lösung gibt es bereits seit Anfang 2016 und die besteht aus einem Update der Firmata-Treiber mit entsprechenden Anpassungen im Modul 10_FRM.pm. Das Update differenziert zwischen beiden Versionen und nimmt selbst bei Protokoll-Versionsänderungen Abwärtskompatibilität an, so dass auch zukünftige Firmata-Implementierungen wahrscheinlich ohne Änderungen funktionieren werden.

Die Firmata-Treiber und Firmata-Module wurden bisher von Norbert betreut. Leider hat Norbert schon länger keine Zeit mehr gefunden, die Firmata-Komponenten zu pflegen und es ist auch nicht gelungen, mit ihm Kontakt aufzunehmen. Das bedaure ich, denn die Zusammenarbeit mit Norbert habe ich sehr geschätzt. Nach Rücksprache mit Rudi können die Module von Norbert als verwaist betrachtet werden. Damit der Status Quo für Firmata ein Ende hat, werde ich die Betreuung der Firmata-Treiber, des FRM-Modul und 3 weitere Firmata-Module übernehmen. Wer Interesse hat, eines der übrigen Firmata-Modulen zu betreuen, kann das hier bekannt geben. Die folgende Liste gibt einen Überblick über die betroffenen Module:

FHEM/10_FRM.pm               ntruchsess -> jensb
FHEM/20_FRM_AD.pm            ntruchsess -> jensb
FHEM/20_FRM_ROTENC.pm        ntruchsess -> ?
FHEM/20_FRM_I2C.pm           ntruchsess -> ?
FHEM/20_FRM_IN.pm            ntruchsess -> jensb
FHEM/20_FRM_LCD.pm           ntruchsess -> ?
FHEM/20_FRM_OUT.pm           ntruchsess -> jensb
FHEM/20_FRM_PWM.pm           ntruchsess -> jensb
FHEM/20_FRM_RBG.pm           ntruchsess -> ?
FHEM/20_FRM_SERVO.pm         ntruchsess -> ?
FHEM/20_FRM_STEPPER.pm       ntruchsess -> ?
FHEM/lib/Device/Firmata/*    ntruchsess -> jensb


Das von mir vorbereitete Update-Paket aus Firmata-Treiber und FRM-Modul hat gegenüber der derzeitigen Version aus FHEM folgende Features:

Unterscheidung von Firmata Protokoll- und Firmware-Version

  • neues Internal "protocol_version"
  • die Firmware-Version wird nur noch angezeigt
  • bei Protokoll-Versionen bis 2.5 gilt die bisherige protokollversionsspezifische Implementierung
  • bei Protokoll-Versionen ab 2.6 wird mit Protokoll-Version 2.5 gearbeitet (abwärtskompatibel)

Verbessertes Init- und Reconnect-Verhalten

  • Device-Init nun nicht-blockierend, um Start von FHEM zu beschleunigen, wenn Firmata nicht (sofort) reagiert
  • Reconnect ohne Neustart von FHEM bei Verbindung über TCP
  • neues Attribut "resetDeviceOnConnect", um den Firmata Reset beim Reconnect abzuschalten (z.B. für FirmataWifi)

I2C IO-Fehler

  • Erkennen und Rückmelden von IO-Fehlern (Auswertung von FRM_string_observer und Setzen von Interal <DeviceName>_SENDSTAT des IODev)

Support für serielle Firmata Schnittstellen

  • Abfrage der Metadaten und Ausgabe als Internals "serial_pins" und "serial_resolutions"
  • Unterstützung für die Hardware-Schnittstellen des Firmata-Devices sowie eine Software-Schnittstelle
  • DevIo-Support: Die seriellen Schnittstellen von Firmata-Devices können von anderen FHEM-Module verwendet werden

Dokumentation

  • Korrekturen und Ergänzungen

Modul FRM_AD

  • Fix um sporadische Fehler beim Neustart von FHEM zu unterdrücken

Modul FRM_OUT:

  • Rücklesen des aktuellen Ausgangszustands von Firmata (relevant bei Reconnect ohne Reset)
  • Unterstützung für Attribut "activeLow"

Modul FRM_PWM:

  • Unterstützung für Attribut "restoreOnStartup"

Das Update wird in 3 Schritten zur Verfügung gestellt:

  • Update der Firmata-Treiber von Version 0.59 auf 0.63 in den nächsten Tagen
  • Bereitstellen der Updates von FRM, FRM_AD, FRM_OUT und FRM_PWM zum Download über diesen Thread zum Testen
  • Update von FRM, FRM_AD, FRM_OUT und FRM_PWM

Grüße,
Jens




UPDATE 09.01.2018

Auf Basis der erfolgten Rückmeldungen empfehle ich den Firmata-Anwendern, die aktuellen FHEM-Updates für das FRM-Modul und die Firmata-Treiber zu verwenden. Wer OneWire einsetzt, dem kann es helfen, zusätzlich dieses gepatchte OWX_FRM-Modul zu verwenden.

Dieser Thread soll vor allem das Update unterstützen und Funktionsprobleme lösen, die die alte Version nicht hatte. Davon gab es bisher nur einen Fall und der ist bereits in das Updates eingeflossen. Gerne können hier auch Wünsche diskutiert werden, um die neue Version noch weiter zu verbessern.

Durch das Update sind einige Beschreibungen in der Wiki überarbeitungsbedürftig, insbesondere können alle Anpassungen an FHEM und Firmata entfallen.

Was dieser Thread nicht kann, ist OneWire-spezifische Problem lösen, die schon vor dem Update bestanden haben. Bitte solche Punkte im OneWire-Bereich ansprechen.




UPDATE 17.01.2018

Wie bereits angekündigt gibt es nun die 2. Update-Runde mit ein paar kleinen Features. Ein Teil stammt aus Rückmeldungen dieses Threads.

Modul FRM:

Installationsvoraussetzung: perl-firmata 0.64 (über FHEM Update verfügbar)

  • Capability-Abfrage erweitert: digitale Eingangspins, die "Pullup" unterstützen, werden im neuen Internal "pullup_pins" aufgelistet
  • Die installierte Version des Firmata-Treibers (perl-firmata) wird als neues Internal "DRIVER_VERSION" angezeigt.
  • Neues Attribut "disable"
  • Neue States: "disabled", "defined", "connected"
  • Neue Attribute "errorExclude" und "stringMessage", um bestimmte String-Nachrichten vom Firmata Device nicht als Reading "error" sondern als Reading "stringMessage" zu erhalten. Das kann z.B. dazu genutzt werden, ein "Alive"-Telegramm vom Firmata Device zu versenden, um die Netzwerkverbindung zu überwachen, ohne dass jedes Telegramm im FHEM Log auftaucht.
  • Modulhilfe überarbeitet

Modul FRM_IN:

Installationsvoraussetzung: perl-firmata 0.64 (über FHEM Update verfügbar), Funktionsvorraussetzung: FRM mit Internal "pullup_pins"

  • Firmata 2.5+ Kompatiblität für das Aktivieren und Deaktivieren des Pullup. Die "alte" Funktion zum Umschalten des Pullups wird von kommenden Firmata Releases möglicherweise nicht mehr unterstützt. Die "alte" Funktion ist aber noch immer vorhanden, damit auch Firmata Devices mit Version 2.4 oder niedriger weiter genutzt werden können. Die Umschaltung zwischen beiden Varianten erfolgt anhand der Capability-Rückmeldungen des Firmata Devices.

Modul FRM_OUT:

Installationsvoraussetzung: abwärtskompatibel

  • Fix für "uninitialised" Fehlermeldung im FHEM Log, wenn Set ohne Wert aufgerufen wird (z.B. beim Neustart)




UPDATE 03.02.2018

Die hier angefügten Module sind seit dem 27.01.2018 über das FHEM-Update verfügbar. Ich danke allen Beta-Testern für die Rückmeldungen.

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

JensS

Hallo Jens,

danke für dein En­ga­ge­ment :). Bin schon mächtig gespannt auf die Aktualisierung.

Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

Maista

Hallo Jens
Danke für die Anpassungen!
Wäre schade gewesen wenn das nicht mehr aktuell gehalten worden wäre.
Wenn ich Zeit habe werde ich testen.

Guten Rutsch

Gerd

ThoTo

Vielen Dank dass du diese Module übernimmst!!!!
Hoffe die Firmata Probleme bei mir haben dann ein Ende :-)

LG Thomas
KNX | MQTT | Docker | Sonos | FHEMapp

"Zwei Dinge sind unendlich, das Universum und die menschliche Dummheit, aber bei dem Universum bin ich mir noch nicht ganz sicher." (Albert Einstein)

JensS

#4
Hallo Jens,

das Update und die Module habe ich eingespielt. Mein Testsystem mit einem USB-Firmata (FRMa) und einem Dummy-Netzwerk-Firmata (FRMb) stürzt mit folgender Log ab. Ich nutze ConfigurableFirmata 2.10 mit 00_OWX.pm.
2018.01.01 12:31:28 0: Server shutdown
2018.01.01 12:31:32 1: Including fhem.cfg
2018.01.01 12:31:32 3: telnetPort: port 7072 opened
2018.01.01 12:31:32 3: WEB: port 8083 opened
2018.01.01 12:31:32 3: WEBphone: port 8084 opened
2018.01.01 12:31:32 3: WEBtablet: port 8085 opened
2018.01.01 12:31:32 2: eventTypes: loaded 43 events from ./log/eventTypes.txt
2018.01.01 12:31:39 1: PERL WARNING: Use of uninitialized value in numeric comparison (<=>) at fhem.pl line 2028, <$fh> line 56.
2018.01.01 12:31:39 3: OWTHERM:  Device OWX_28_3EC1DA050000 defined.
2018.01.01 12:31:39 1: Including ./log/fhem.save
2018.01.01 12:31:39 1: Error: >FRMa:7< has no TYPE, but following keys: ><
2018.01.01 12:31:39 1: Error: >FRMb:6< has no TYPE, but following keys: ><
2018.01.01 12:31:39 3: Opening FRMa device /dev/ttyUSB0
2018.01.01 12:31:39 3: Setting FRMa serial parameters to 57600,8,N,1
2018.01.01 12:31:39 3: FRMa device opened
2018.01.01 12:31:39 3: FRMb: port 3034 opened
2018.01.01 12:31:39 0: Featurelevel: 5.8
2018.01.01 12:31:39 0: Server started with 21 defined entities (fhem.pl:15710/2017-12-27 perl:5.024001 os:linux user:root pid:18427)
2018.01.01 12:31:42 3: FRMa querying Firmata versions
@./FHEM/10_FRM.pm:main:530 : Unhandled attribute 'protocol_version_query' called

Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

jensb

Hallo Jens,

danke für den schnellen Test. Hier ein paar Fragen, damit ich die Ursache möglichst schnell eingrenzen kann:

(1) Stürzt FHEM komplett ab oder funktionieren "nur" die Firmata-Devices nicht?
(2) Tritt der Fehler auch auf, wenn "nur" die Firmata-Treiber aktualisiert sind?

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

JensS

Das ganze System stürzt ab. Mit der originalen 10_FRM.pm läuft es - allerdings ohne OWX.
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

jensb

Kann ich davon ausgehen, dass du einen Arduino an einem Raspberry per USB angeschlossen hast? Wenn nein, bitte Aufbau kurz beschreiben.

Bitte poste auch noch deine Config für die beiden FRM-Devices und das OWX, damit ich das nachstellen kann.

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

JensS

Gut geraten - der Arduino hängt an einem NanoPi Neo2 mit Armbian Stretch.
Hier die config:attr global userattr cmdIcon devStateIcon devStateStyle icon sortby webCmd webCmdLabel:textField-long widgetOverride
attr global autoload_undefined_devices 1
attr global autosave 0
attr global exclude_from_update 10_FRM.pm Constants.pm Firmata.pm Platform.pm Protocol.pm
attr global logfile ./log/fhem-%Y-%m.log
attr global modpath .
attr global motd .
attr global statefile ./log/fhem.save
attr global updateInBackground 1
attr global verbose 3

define telnetPort telnet 7072 global

define WEB FHEMWEB 8083 global
attr WEB editConfig 1

define WEBphone FHEMWEB 8084 global
attr WEBphone stylesheetPrefix smallscreen

define WEBtablet FHEMWEB 8085 global
attr WEBtablet stylesheetPrefix touchpad

# Fake FileLog entry, to access the fhem log from FHEMWEB
define Logfile FileLog ./log/fhem-%Y-%m.log fakelog

define autocreate autocreate
attr autocreate filelog ./log/%NAME-%Y.log

define eventTypes eventTypes ./log/eventTypes.txt

# Disable this to avoid looking for new USB devices on startup
#define initialUsbCheck notify global:INITIALIZED usb create
#attr initialUsbCheck disable 1
define FRMa FRM /dev/ttyUSB0@57600
define in1 FRM_IN 3
attr in1 IODev FRMa
attr in1 activeLow yes
attr in1 internal-pullup on
attr in1 stateFormat reading
define out1 FRM_OUT 6
attr out1 IODev FRMa
attr out1 stateFormat value
define OWXa OWX FRMa:7
attr OWXa interval 200
define OWX_28_3EC1DA050000 OWTHERM DS18B20 3EC1DA050000
attr OWX_28_3EC1DA050000 IODev OWXa
attr OWX_28_3EC1DA050000 interval 20
attr OWX_28_3EC1DA050000 model DS18B20
attr OWX_28_3EC1DA050000 room OWX
attr OWX_28_3EC1DA050000 tempHigh 75
attr OWX_28_3EC1DA050000 tempLow 70
define FRMb FRM 3034 global
define OWX2 OWX FRMb:6
define I2CBus RPII2C 0
define I2CExpander I2C_MCP23008 0x20
attr I2CExpander IODev I2CBus
attr I2CExpander InterruptOut separate_active-high
attr I2CExpander OutputPorts A0,A2,A3,A4,A5,A6,A7
attr I2CExpander Pullup A0,A1
define I2Cnotify notify I2CExpander:PortA1:.* set I2CExpander PortA0 [I2CExpander:PortA1]
define I2Cget at +*00:00:02 get I2CExpander

Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

jensb

Das Update der Firmata-Treiber auf Version 0.63 ist seit 10:42 eingecheckt. Bei mir stürzt FHEM mit dem hier geposteten FRM-Modul aktuell nach dem Update auch ab. Ursache ist, dass der neue Firmata-Treiber mit noch nicht per FHEM-Update verteilt wird. Leider weiß ich nicht, wie lange das dauert. Überprüfen kann man die eigene Firmata Treiber-Version, indem man sich nach dem Update  im Unterverzeichnis "FHEM/lib/Device/Firmata" in Zeile 22 der Datei "Firmata.pm" den Wert hinter our $VERSION ansieht.

Wer es eilig hat, kann den neuen Firmata Treiber hier aus dem SVN herunterladen.

Die neue Treiber-Version für sich allein sollte keinerlei Änderung bewirken. Dazu bedarf es zusätzlich der neuen Version des FRM-Moduls, das im 1. Post angehängt ist. Die neue Version des FRM-Moduls funktioniert aber ohne die Treiber-Updates nicht.

Die Änderungen der drei anderen aktualisierten Module FRM_AD, FRM_OUT und FRM_PWM sind von der Treiber-Aktualisierung unabhängig.

@dirigent Bitte überprüfe, ob du die Firmata Treiber-Updates schon hast. Wenn nicht, bitte aktualisieren und Test wiederholen.

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

JensS

 :) Ok, habe die Dateien heruntergeladen und eingepflegt. Jetzt läuft es fehlerfrei, allerdings noch ohne OWX.
Gruß Jens
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

jensb

Hallo Jens,

meinst du mit "allerdings noch ohne OWX", dass es fehlerfrei läuft, wenn du kein OWX-Device konfigurierst und Fehler macht, sobald du OWX dazu nimmst?

Wenn ja, versuch mir bitte möglichst viele Infos zu geben, z.B. bei allen relevanten Devices "verbose=5" einstellen, FHEM neu starten, Test durchführen und Log posten.  Ich habe selbst kein OneWire-Device an meinen Firmatas und kann das nicht ohne weiteres nachstellen. Änderungen im Zusammenhang mit OWX sollte es nicht geben. Was vorher funktioniert hat, sollte immer noch funktionieren.

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

JensS

#12
Das Problem ist, dass es vorher auch nicht funktionierte - seit es eine neue Firmata-OWX-Definition gibt:
define OWWa OWX FRMa:7
Das konnte ich bislang mit einer modifizierten 10_FRM.pm https://forum.fhem.de/index.php/topic,80409.0.html umgehen.
Zum Test genügte es, zwei Dummy-OWX an zwei Dummy-FRM anzulegen. Dann wurden den OWXes, mangels fehlender OWX-IODev-Attribute, das falsche FRM zugewiesen.

Gruß Jens

p.s. anbei die Logdatei
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.

jensb

Hallo Jens,

habe mir das Zusammenspiel von FRM und OWX mal angesehen. Die nun fehlende automatische IODev-Zuordnung hat überhaupt nichts mit Firmata zu tun, sondern ist auf die internen Abhängigkeiten der FHEM-Module OWX und FRM zurückzuführen: Die Änderungen an OWX haben zur Inkompatibilität mit FRM geführt.

Dein angepasstes FRM-Modul aus dem Thread https://forum.fhem.de/index.php/topic,80409.0.html kann ich als Grundlage für einen Patch verwenden, aber es muss noch leicht überarbeitet werden. Du könntest bei Bedarf bis dahin die Änderungen noch einmal genauso in die neue Version des FRM-Moduls einbauen.

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

JensS

Hallo Jens, deine 10_FRM.pm habe ich modifiziert und nun klappt's auch mit dem Nachbarn ;D .
Habe die Datei https://forum.fhem.de/index.php/topic,80409.0.html auch gleich getauscht.
Anbei ein Log der funktionierenden Kombination OWX-FRM.

Vielen Dank!
Gruß Jens

p.s. Eine unverschämte Bitte: Kannst du ins FRM_IN ein Attribut debounce (ms) einbauen?
Debian auf APU2C4, HM-CFG-USB2, SIGNALduino, HM-ES-PMSw1-Pl, TFA 30.3121, TFA 30.3125, ITS-150, PIR-5000, configurable Firmata USB & LAN, 1-wire: DS-18B20, DS-18S20, DS-2408, DS-2413, diverse I2C-Komponenten, zigbee2mqtt, ESPEasy etc.