Problem mit DevIO.pm

Begonnen von roelleke, 05 Juni 2020, 10:39:19

Vorheriges Thema - Nächstes Thema

HomeAuto_User

Hallo,

ich selbst war hiervon auch betroffen und suchte mir den Wolf.

Zitat von: rudolfkoenig am 06 Juni 2020, 12:12:29
@roelleke: wieviele SIGNALduino Instanzen sind definiert? Wurde "beim" Absturz eine umbenannt?

Ich bin zwar nicht roelleke aber aufgrund des selben Fehlers melde ich mich mit zu Wort.

Bei mir waren diesbezüglich 2 definierte Instanzen betroffen. Beim Absturz konnte ich nicht verzeichnen das eine umbenannt wurde. FHEM war in einer Schleife dadurch bis ich von Hand eingegriffen hatte.
Diese Erkenntnis kann ich auch auf ein 2. Haushalt beziehen wo es ebenso war.

MfG
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

rudolfkoenig

War einer der Instanzen per Netzwerk angebunden?

Ralf9

Das Problem war, daß der sduino mit "by-path" und nicht wie üblich mit "by-id" angebunden war.
/dev/serial/by-path/platform-3f980000.usb-usb-0:1.1.2:1.0-port0@57600
Die "by-path" Definition wurde als fehlerhafte IP abgelehnt:
2020.06.05 11:48:22 1: Signalduino2: Can't connect to /dev/serial/by-path/platform-3f980000.usb-usb-0:1: http:///dev/serial/by-path/platform-3f980000.usb-usb-0:1.1.2:1.0-port0: malformed or unsupported URL

ZitatEin Modul sollte keine InternalTimer definieren, wenn es define ablehnt.
Wie kann ich erkennen, wenn es define ablehnt?
Ist das am $ret von DevIo_OpenDev erkennbar? Wenn $ret defined und nicht leer?

Dann könnte man ein
RemoveInternalTimer("sduino_IdList:$name");
machen, wenn es define ablehnt

Gruß Ralf
FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

HomeAuto_User

Zitat von: rudolfkoenig am 06 Juni 2020, 12:25:47
War einer der Instanzen per Netzwerk angebunden?

Angeschlossen über USB mit DEF via path.

Zitat von: Ralf9 am 06 Juni 2020, 14:59:40
Das Problem war, daß der sduino mit "by-path" und nicht wie üblich mit "by-id" angebunden war.

Leider gibt es Fälle wo man mit by-id nicht auskommt. (Geräte mit selber ID)


Gesendet von iPhone mit Tapatalk Pro
"Developer" heißt nicht, das man alles wissen kann!
- FHEM v5.9 | Rasberry PI 3
- radino CC1101 433Mhz (SIGNALduino)| - radino CC1101 868Mhz (CUL) | nano 433Mhz (SIGNALduino) - Sensoren: purer Dschungel querbeet

rudolfkoenig

ZitatWie kann ich erkennen, wenn es define ablehnt?
???
Ich meine nicht DevIo_OpenDev, sondern die Modul-Eigene DefFn.
Und da sollte der Maintainer schon wissen, in welchem Fall sie eine Fehlermeldung statt undef zurueckliefert.

Ralf9

ZitatIch meine nicht DevIo_OpenDev, sondern die Modul-Eigene DefFn.
Und da sollte der Maintainer schon wissen, in welchem Fall sie eine Fehlermeldung statt undef zurueckliefert.

Ich meinte wie kann ich erkennen, wenn DevIo_OpenDev den connect z.B. wegen einem fehlerhaften define ablehnt?
Damit?
if ($ret) {
  ...


FHEM auf Cubietruck mit Igor-Image, SSD und  hmland + HM-CFG-USB-2,  HMUARTLGW Lan,   HM-LC-Bl1PBU-FM, HM-CC-RT-DN, HM-SEC-SC-2, HM-MOD-Re-8, HM-MOD-Em-8
HM-Wired:  HMW_IO_12_FM, HMW_Sen_SC_12_DR, Selbstbau IO-Module HBW_IO_SW
Maple-SIGNALduino, WH3080,  Hideki, Id 7

Sidey

Die Anzahl an Definitionen ist für den Fehler uninteressant.

Der Timer der gestartet wird ruft SIGNALduino_IdList auf.
Ob die Verbindung zum physischen Gerät besteht ist für die Funktion nicht relevant.

Relevant ist aber, ob $defs{<Name>} den Gerätehash liefert.

Das klappt nicht, weil im Core dieser Key gelöscht wird.

Dass der Key vom Core gelöscht wird, ohne das undefFn aufgerufen wird, war mir einfach nicht transparent.

Ich denke robuster Code kommt zu großen Teilen aus den Modules aber durchaus auch aus dem Core.
Signalduino, Homematic, Raspberry Pi, Mysensors, MQTT, Alexa, Docker, AlexaFhem

Maintainer von: SIGNALduino, fhem-docker, alexa-fhem-docker, fhempy-docker

rudolfkoenig

ZitatIch meinte wie kann ich erkennen, wenn DevIo_OpenDev den connect z.B. wegen einem fehlerhaften define ablehnt?
Bei einem Problem wird die Fehlermeldung dem callback mitgeteilt, falls sie spezifiziert wurde (d.h. asynchroner Ablauf fuer http/websocket), ansonsten kommt die Fehlermeldung im Rueckgabewert.

Aber danke fuer den Denkanstoss: im aktuellen Code liefert DevIo_OpenDev _mit_ callback je nach Fehler (z.Bsp. DNS-Problem ohne gesetzten dnsServer) _auch_ als Rueckgabewert (und nicht nur im callback). Das ist mAn irrefuehrend, und fuehrte(?) in diesem Fall zum Problem, weil SIGNALduino_Define diesen Wert zurueckgeliefert hat.
Ich habe DevIo.pm angepasst, damit beim gesetzten callback _nie_ ein Fehler direkt zurueckgeliefert wird, sondern nur uebers callback.


ZitatIch denke robuster Code kommt zu großen Teilen aus den Modules aber durchaus auch aus dem Core.
Das ist vermutlich richtig, es hat aber einen Preis und diverse Nebeneffekte.

roelleke

Hallo,
komme erst gerade wieder dazu ins Forum zu schauen.

Ich have 2 Signalduinos angeschlossen. Einer über USB und der andere über LAN (Signalesp).
Ich habe keinen von beiden umbenannt und ich habe auch nicht erkennen können ob so etwas automatisch passiert, aber meiner Meinung ist nichts umbenannt worden.