Firmata Update für Firmware-Versionen ab 2.7

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

Vorheriges Thema - Nächstes Thema

JensS

#90
Hallo Jens,

ich nutze lediglich FRM-IN, -OUT, -LCD, -i2c und OWX. Habe heute pah's 11_OWX_FRM.pm{qx(wget -O /opt/fhem/FHEM/11_OWX_FRM.pm https://svn.fhem.de/trac/export/HEAD/trunk/fhem/FHEM/11_OWX_FRM.pm)}
shutdown restart
installiert. Alle Module laufen gut. Bisher keine Fehler.

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,

das ist doch schon ein ganze Menge "lediglich" und noch besser, dass es alles zusammen funktioniert. Dann werde ich das neue FRM_IN am Wochenende einchecken.

Danke für die Rückmeldung und 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

#92
Hallo Jens,

wieder eine Woche rum - und immer noch keine Fehler.  ;D Hin und wieder gab's ja wohl noch offizielle Updates.
Die Umsetzung der Anzeige der Treiberversion per Internal ist eine gute Idee. :)

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 die Rückmeldung und die Beteiligung an den Tests. Aktuell sind keine weiteren Updates geplant.

Die Anzeige der Treiberversion als Internal war für mich der beste Kompromiss. Es gab den Wunsch, den Dateien von perl-firmata auch FHEM-Versionsnummern zu geben. Das passt aber nicht, da der Treiber zwar mit FHEM ausgeliefert wird, aber selbst ein Perl-Modul unter eigener Lizenz ist (siehe Device::Firmata im CPAN) und schon eine Versionsnummer hat - nur halt nach Perl-Modul-Regeln und nicht nach FHEM-Modul-Regeln. Ein kleines Problem bleibt: ich habe noch keine Möglichkeit gefunden, die neue Treiberversion im CPAN zu aktualisieren. Die meisten wird das aber nicht stören, denn die FHEM-Version ist ja auf dem neusten Stand.

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

#94
Ist ntruchsess gar nicht mehr erreichbar bzw. aktiv? Du könntest einen PAUSE-Admin bitten, dir die notwendigen Rechte zu geben.
https://www.cpan.org/misc/cpan-faq.html#How_adopt_module

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

Ich habe mehr als 1 Jahr lang versucht, über PM, GitHub und über Rudi Kontakt mit Norbert aufzunehmen, aber leider ohne Erfolg. Es ist wirklich nicht mein Ding, die Projekte anderer Entwickler ohne explizites Einverständnis auch nur vorübergehend zu übernehmen. Das im Rahmen von FHEM nach Rücksprache und nach langer Wartezeit zu machen, ist die eine Sache. Auf GitHub war es nicht das Problem, da ich da ohnehin seit 2016 Co-Author bin. CPAN ist da noch mal was anderes. Das mit den PAUSE-Regeln hatte ich mir auch schon angesehen - werde es mir noch mal durch den Kopf gehen lassen.

Als nächstes kommen erst mal die Firmata-Artikel in der FHEM-Wiki dran. Hilfe ist willkommen.

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

Ich könnte versuchen bei Arduino mit OneWireFirmata behilflich zu sein. Oder ist das pah's Gebiet?

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

ZitatOder ist das pah's Gebiet?
Gute Frage. Habe mich bisher noch nicht mit den Regeln für die Wiki auseinander gesetzt, das steht noch auf der ToDo-Liste.

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,
mir ist ein seltsamer Fehler aufgefallen, welcher eventuell durch die 10_FRM.pm verursacht wird.
https://forum.fhem.de/index.php/topic,82020.msg767035.html#msg767035

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,

siehe dazu meine Bewertung im gleichen Thread.

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

Danke, sowas dachte ich mir schon.
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.

JensS

#101
Hallo Jens,

heute früh um 4:13 Uhr hat ein Arduino Nano mit W5100 seinen Dienst eingestellt.
Als letztes sendete er die Temperatur eines i2c Typ SHT21.
error
I2C: Too few bytes received
2018-02-16 04:13:42

Internals:
   I2C_Address 64
   IODev      Saeule
   NAME       Saeule_SHT21
   NR         117
   STATE      1.6*C - 119.0 %
   Saeule_SENDSTAT Too few bytes received
   TYPE       I2C_SHT21
   READINGS:
     2018-02-16 04:08:40   humidity        119.0
     2018-02-16 04:08:40   state           T: 1.6 H: 119.0
     2018-02-16 04:13:41   temperature     1.6
Attributes:
   IODev      Saeule
   event-on-change-reading temperature:0.3,humidity:0.7
   poll_interval 5
   room       FIRMATA,Garten,Sensoren
   stateFormat temperature*C - humidity %
   verbose    0

Internals:
   CONNECTS   1
   DEF        3030 global
   DRIVER_VERSION 0.63
   DeviceName 3030
   FD         39
   NAME       Saeule
   NOTIFYDEV  global
   NR         26
   NTFY_ORDER 50-Saeule
   PORT       3030
   STATE      Initialized
   TYPE       FRM
   firmware   ConfigurableFirmata-nano.ino.ino
   firmware_version V_2_06
   i2c_pins   18,19
   input_pins 2,3,4,5,6,7,8,9,14,15,16,17,18,19
   onewire_pins 2,3,4,5,6,7,8,9,14,15,16,17,18,19
   output_pins 2,3,4,5,6,7,8,9,14,15,16,17,18,19
   protocol_version V_2_06
   pwm_pins   3,5,6,9
   pwm_resolutions 3:8,5:8,6:8,9:8
   READINGS:
     2018-02-16 04:13:42   error           I2C: Too few bytes received
     2018-02-15 12:17:10   state           Initialized
   SERIAL:
   SocketDevice:
     BUF       
     DeviceName 3030
     FD         38
     NAME       Saeule_192.168.xxx.xxx_49153
     NR         368
     PEER       192.168.xxx.xxx
     PORT       49153
     SNAME      Saeule
     SSL       
     STATE      Connected
     TEMPORARY  1
     TYPE       FRM
Attributes:
   i2c-config 30000
   room       FIRMATA
   verbose    0


Eine Skizze der Schaltung. Da der DS2482 unter OWX nicht mehr unterstützt wurde, habe 1-wire direkt am Arduino verdrahtet. Als Ethernetshield nutze ich einen W5100.
https://forum.fhem.de/index.php/topic,31715.msg242704.html#msg242704

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,

aus deinen Infos einen Zusammenhang abzuleiten fällt mir schwer. Habe den Eindruck, dass die Ursache nichts mit FHEM oder Firmata zu tun hat. Vor allem wenn der Hänger nur selten auftritt, ist es nicht leicht, das weiter einzugrenzen. Du hast relativ viele Funktionen auf einen Nano konzentriert. Das läuft nicht immer dauerstabil, u.a. weil der dynamische Speicher knapp ist.

Meine Lösung dafür: (A) Kühlkörper auf den W5100 - vor allem wenn er so warm wird, dass man ihn nicht mehr anfassen möchte - und (B) Optiboot Bootloader installieren und den Watchdog aktivieren, in dem du folgendes in den Firmata-Sketch einbaust:

#if defined(ARDUINO_ARCH_AVR)
// Watchdog, only for AVR-based boards
// Note: Some board (e.g. Pro Mini ATmega328 5V 16MHz) do not have a bootlader with WDT support
// causing the board to get stuck until power cycled after the WDT has been triggered. You
// can update the default bootloader, e.g. using optiboot.
#include <avr/wdt.h>
#endif
...
void setup()
{
...
#ifdef _AVR_WDT_H_
  // enable watchdog
  // Note: Some board do not support a WDT timeout of 8 seconds. You should choose
  // the maximum supported timeout of your board from the header file avr/wdt.h.
  wdt_enable(WDTO_8S);
#endif
}
...
void loop()
{
#ifdef _AVR_WDT_H_
  /* reset watchdog */
  wdt_reset();
#endif
...


Bleibt der Adruino dann mal hängen, merkt man es meist gar nicht mehr. Diese Lösung ist aber nur für sehr sporadische Ausfälle sinnvoll.

Mit ein paar weiteren Zeilen Code kann man auch den Soft-Reset von Firmata in einen Hard-Reset für den Arduino und einen Soft-Reset für den W5100 umwandeln:

void systemResetCallback()
{
  isResetting = true;
 
#ifdef _AVR_WDT_H_
  // shorten watchdog timeout
  wdt_enable(WDTO_500MS);
#ifdef  W5100_H_INCLUDED 
  // try to reset Ethernet chip (takes about 350 ms)
  W5100.init();
#endif 
  // perform hardware reset by triggering watchdog
  delay(1000);
#else
  // software reset
  initDefaultState();
#endif 

  isResetting = false;
}


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

Danke für die umfangreiche Unterstützung. :)
Es tritt alle paar Monate auf.
Bisher hatte ich der Stromkreis per Relais unterbrochen aber das ist ja um Längen besser.

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,

probier erst mal aus, ob es in deinem Fall auch hilft. Wenn du den Sketch erweitert hast, kannst du testen, ob du den Bootloader überhaupt aktualisieren musst. Dazu ein Sleep von mindestens 10 Sekunden in die Hauptschleife einbauen. Wenn der Arduino sich dann resettet und hängen bleibt, bleibt dir nichts anderes übrig. Bist du einmal in diesem Zustand, kommst du aber auch nicht mehr so leicht heraus, da die Firmware ja immer wieder resettet und wieder hängen bleibt. Die kurze Zwischenzeit musst du nutzten, um in den Upload-Modus zu kommen - dann kannst du wieder einen Sketch einspielen, der die Finger vom Watchdog lässt.

Um den Optiboot-Bootloader zu programmieren, brauchst du einen 2. Arduino (oder einen ISP). Es gibt diverse Tutorials zu diesem Thema.

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