ECMD-Fehler

Begonnen von Puschel74, 07 Juni 2013, 22:18:10

Vorheriges Thema - Nächstes Thema

Puschel74

Hallo,

ich hoffe mal ich bin hier richtig gelandet - wenn nicht dann bitte @Admin verschieben.

Ich habe einen AVR-NET-IO mit Ethersex im Einsatz.
Passend dazu das ECMD-Decive lt. Wiki definiert aber seit heute morgen habe ich folgende Fehlermeldung:
ZitatUse of uninitialized value $r[0] in join or string at ./FHEM/66_ECMD.pm line 635.
Use of uninitialized value $r[0] in join or string at ./FHEM/66_ECMD.pm line 635.
Use of uninitialized value $r[0] in join or string at ./FHEM/66_ECMD.pm line 635.
Use of uninitialized value $r[0] in join or string at ./FHEM/66_ECMD.pm line 635.
Ein reopen brachte Abhilfe bis kurz nach 20:15
ZitatUse of uninitialized value $r[0] in join or string at ./FHEM/66_ECMD.pm line 635
Im Chart sieht das so aus:

(siehe Anhang / see attachement)

Ich habe 2 Sensoren für die Bodenfeuchtemessung an unseren Tomaten im Einsatz.
Der AVR-NET-IO ist in einem IP66-Gehäuse untergebracht und die Sensoren über je einen 6-poligen Lemo-Stecker direkt am Gehäuse angeschlossen.
Das ganze (Gehäuse mit Stecker) ist unter Dach und die Sensoren selbst sind halb-unter Dach (stehen auf der überdachten Terrasse an der vorderen Seite mitten in der Mittagssonne - endlich haben wir mal eine).
Die Anbindung ist per Devolo dLan500 duo+ gelöst.

Ich weiß - die Infos sind dürftig.
Wenn mehr benötigt wird zur Fehlereingrenzung dann bitte nur her mit den Anweisungen.

Grüße

P.S.: Ist jetzt nicht tragisch - ich bin nur froh das ich schonmal sehe das meine Schwiegermutter die Pflanzen "ertränken" will ^^
"Die sind ja ganz trocken, die muss man giessen" - schütt ^^
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Markus Bloch

Im Zuge dessen möchte ich noch auf einen kleinen Fehler in der Doku hinweisen:

Zitat von: Zeile 320 - 67_EMCDevice.pm<code>set myDisplay text This\x20text\x20has\x20blanks!</code><br>

Dadurch sind aktuell alle folgenden Module in <code>-Formatierung gehalten.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

Puschel74

Hallo,

ich vermute mal ich hab den Fehler gefunden (Langzeittest läuft grad).

Ich hatte noch die classdef erweitert um das Relaisboard - dieses aber nicht am NET-IO dran da ich es im Moment
nicht brauche und das Gehäuse für beide zu klein ist.
Nachdem ich die classdef abgeändert hatte und nur noch adc drinnen steht (anschliessendes reopen durchgeführt) haben die beiden Kurven auch wieder die Plätze getauscht.
Nun wird wieder so geloggt wie erwartet.

Nun warte ich mal ab bis morgen und werde wieder berichten.

Grüße

Edith: Ich brauchte gar nicht bis morgen warten :-(
ZitatUse of uninitialized value $r[0] in join or string at ./FHEM/66_ECMD.pm line 635.
um 16:39 lt. Plot.
Nach diesem Fehler tauschen die beiden Kurven im Plot die Plätze - so als ob adc1 und adc2 vertauscht werden.

Edith2: Fehler anscheinend gefunden. Der Devolo hat sich sporadisch disconnected.
Gestern um 20 Uhr getauscht - seither ist Ruhe.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

Spiff

Hallo!

Ich habe diesen Fehler auch.

Use of uninitialized value $r[0] in join or string at ./FHEM/66_ECMD.pm line 635.

Manchmal auch $r[1] statt $r[0].

Bei mir kommt er jedes mal, wenn ich ein Kommando absetze und KEINE Antwort zurückkommt.
Man merkt auch, dass es eine Art "Timeout" gibt, das Modul also kurz hängt und dann daraufhin diesen Fehler ausgibt.

Ich kann das gut reproduzieren, weil bei manchen Kommandos, die ich absetze, keine Antwort erwartet wird.

2013.11.23 03:31:19 5: Cmd: >set DMX_Effects Licht_3<
2013.11.23 03:31:19 5: ECMDDevice: Analyze command >{"runcommand 7 10 3"}<
2013.11.23 03:31:19 5: DMXControl sending runcommand 7 10 3
2013.11.23 03:31:22 5:
2013.11.23 03:31:22 5: Triggering DMX_Effects (1 changes)
2013.11.23 03:31:22 5: Notify loop for DMX_Effects Licht_3:
2013.11.23 03:31:22 4: ECMDDevice DMX_Effects Licht_3


Kann es sein, dass es daran liegt?

Viele Grüße
Spiff

Dr. Boris Neubert

Zitat von: Markus Bloch am 08 Juni 2013, 00:08:04
Im Zuge dessen möchte ich noch auf einen kleinen Fehler in der Doku hinweisen:

Hilf mir bitte auf die Sprünge. Bei mir ist das nicht der Fall und ich sehe auch nicht, was an der zitierten Zeile falsch sein sollte.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Dr. Boris Neubert

Zitat von: Spiff am 23 November 2013, 18:03:33
Use of uninitialized value $r[0] in join or string at ./FHEM/66_ECMD.pm line 635.

Die von ECMD zurückgegebenen Werte werden in Zeile 635 mit \n aneinandergehängt. Wenn es nichts aneinanderzuhängen gibt, kommt es zum Fehler.

Kannst Du mal bitte ausprobieren, ob der weg geht, wenn Du die Zeile 635 durch


return @r ? join("\n", @r) : undef;


ersetzt?

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Spiff

Hallo Boris!

Ich habe die Zeile ersetzt. Leider kommen jetzt 2 Fehler:

Use of uninitialized value $text in concatenation (.) or string at fhem.pl line 650.
Use of uninitialized value $r[0] in join or string at ./FHEM/66_ECMD.pm line 635.


Viele Grüße
Spiff.

Dr. Boris Neubert

Hallo Spiff,

die neue Meldung kommt, weil die aufrufende Routine über das undef stolpert.

Die Meldungen sind nicht schlimm. Ich plane für irgendwann einmal eine großangelegte Überarbeitung des Moduls (Umstellung auf DevIO.pm, Auswerten spontan empfangener Nachrichten). Da werde ich solche Sachen miterledigen, vielleicht über einen Modifier an Kommandos, das nicht auf Rückmeldung gewartet werden soll.

Viele Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

Spiff

#8
Hallo Boris,

das klingt gut!

Ich habe diese Zeile wieder auf die alte korrigiert, weil komischerweise der Status meiner Funksteckdosen (PCA301 über JeeLink) nicht mehr ausgelesen werden konnte. Das Glühbirnen-Symbol war immer als Fragezeichen dargestellt. Nachdem ich die Zeile zurückgeändert hatte, wurde der Status wieder korrekt dargestellt. Merkwürdig.
[Edit: ist Käse. Das muss einen anderen Grund gehabt haben, war wohl Zufall. Ich konnte es mir nicht vorstellen und habe es nochmal mit der neuen Zeile probiert. Geht natürlich.]

Damit mein fhem nicht immer 3 Sekunden hängt, habe ich temporär den Wartewert auf die Rückantwort verkürzt:

my $to = 1;                                         # 3 seconds timeout # now 1 second

Auch wenn es hier nicht ganz reinpasst - aber bei meinen Versuchen kamen hin und wieder auch ECMD-Fehler, dann passt's vielleicht doch:
ist es möglich, die SET-Kommandos nicht nur für den direkten Austausch mit der Terminal-Schnittstelle zu missbrauchen?
In meinen classdefs befinden sich nur "set <xxx> cmd {"Terminal-Befehl"}.
Ich würde gerne ein SET für "rgb" mit den Optionen "colorpicker,RGB" einbauen.
Der Hintergrund ist jetzt bestimmt schon klar. :)
Ich steuere RGB-LEDs und möchte gerne den Colorpicker (http://www.fhemwiki.de/wiki/Color) benutzen.

Danke & viele Grüße
Spiff

Dr. Boris Neubert

Hallo,

Zitat von: Spiff am 24 November 2013, 10:57:38
ist es möglich, die SET-Kommandos nicht nur für den direkten Austausch mit der Terminal-Schnittstelle zu missbrauchen?
In meinen classdefs befinden sich nur "set <xxx> cmd {"Terminal-Befehl"}.
Ich würde gerne ein SET für "rgb" mit den Optionen "colorpicker,RGB" einbauen.

ich habe nicht ganz verstanden, was Du erreichen willst. Ich nehme an, daß Du über den Colorpicker eine Farbe auswählst und das Ergebnis der Farbauswahl später in einem Befehl an das ECMD-Gerät senden möchtest.

Die set-Befehle sind dazu gedacht, über die Schnittstelle Kommandos an das ECMD-Gerät zu senden. Du könntest aber mit einem Dummy-Gerät (dummy) für die  Farbauswahl arbeiten, die über einen Notify die Farbe als User-Attribut ans ECMD-Gerät klebt. Das User-Attribut kannst Du an in einem Set-Kommando auslesen.

Ich hoffe, diese auf die schnelle geschriebenen Zeilen helfen Dir weiter.

Viele Grüße
Boris



Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!

justme1968

der colorpicker in der set liste ist nur ein modifier für das rgb kommando damit fhemweb den colorpicker einblendet sobald das rgb kommando in der webCmd liste auftaucht.

d.h. zunächst ein mal ist es ein ganz normales kommando mit namen rgb das die farbe als 6 zeichen hex wert als paramter hat.

nur in der 'set ?' liste des device muss es als rgb:colorpicker,RGB auftauchen. genau so wie ein dim als dim:slider... auftaucht.

gruss
  andre
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

Spiff

#11
Hallo,

Zitat von: Dr. Boris Neubert am 24 November 2013, 11:55:32
Die set-Befehle sind dazu gedacht, über die Schnittstelle Kommandos an das ECMD-Gerät zu senden. Du könntest aber mit einem Dummy-Gerät (dummy) für die  Farbauswahl arbeiten, die über einen Notify die Farbe als User-Attribut ans ECMD-Gerät klebt. Das User-Attribut kannst Du an in einem Set-Kommando auslesen.

Den Colorpicker habe ich inzwischen als Dummy definiert bekommen. Dieser gibt als State "rgb <hex-Farbe>" aus.
Das User-Attribut sieht dann ungefähr so aus? attr global userattr attr_DMX_1
Und das Notify des Dummys schreibt die <hex-Farbe> in attr_DMX_1 und ruft danach das Set-Kommando in der classdef auf, das dieses attr_DMX_1 ausliest und an das ECMD-Gerät weitergibt. Habe ich das so richtig verstanden?

Warum muss ich den Weg über ein User-Attribut gehen und kann den State des Dummys z.B. mit
set NAMETEST cmd {"sc %DMX_R {ReadingsVal("Licht_Test","state","")}"}
nicht direkt benutzen? Dass da lauter Fehler kommen, liegt bestimmt an meinem falschen Syntax (sind mehrere {} überhaupt nötig/zulässig?).  ::)
Ich habe in den Beispielen der classdefs leider nichts über eigene User-Attribute gesehen, nur über die eigens deklarierten params und die allgemein gültigen wie %NAME.

Dann muss ich nur noch die <hex-Farbe> in 3 einzelne Dezimalfarben umwandeln und wissen, wie man das als User-Attribut ans ECMD-Gerät klebt.

Entschuldigt das Anfängergesülze.
Viele Grüße,
Spiff.

Spiff

Hallo,

die meisten Antworten konnte ich mir selbst beantworten:
http://forum.fhem.de/index.php/topic,16610.msg110123.html#msg110123

Vielen Dank für die Denkanstöße & Grüße,
Spiff

Spiff

Hallo Boris,

ich habe noch 2 Fragen, evtl. auch Fehler:

1.) In der fhem.save werden mehrzeilige Antworten auch mehrzeilig gespeichert. Das hat zur Folge, dass ab der 2. Zeile ein Fehler ausgespuckt wird, weil fhem die Kommandozitate nicht kennt. Hier ein Auszug aus meiner fhem.save:
setstate RGB1 2013-11-29 23:21:32 ColorPicker CV 1 200
CV 2 255
CV 3 18

Vielleicht kann man diese Einträge auch einzeilig darstellen? Oder ist das so gewollt und ich müsste sowieso der Sauberkeit halber eigentlich die Zeilenumbrüche mit postproc entfernen?

2.) Ich würde über einen Befehl gerne eine GET-Aktion auslösen und die Antwort verwerten. Da die Antwort mehrere Informationen enthält, muss ich auf ein Notify zurückgreifen und die Aktionen mit $EVTPARTx filtern, richtig?
Ich bekomme es einfach nicht hin, dass ein Notify nur auf dieses GET reagiert. Beispiel:
get Farbwert cmd {"gc 1" . "\ngc 2" . "\ngc 3"}
Die Antwort sieht so aus:

Farbwert CV 1 200
CV 2 255
CV 3 18

und im State des Devices steht jetzt:
Farbwert CV 1 200 CV 2 255 CV 3 18

Mein Test-Notify sieht so aus:
define not_LED_get notify RGB1:Farbwert.* set LED2 rgb 000000

Wenn ich das ":Farbwert.*" entferne, reagiert es auch ordnungsgemäß, allerdings natürlich immer.
An welcher Stelle sind Tomaten auf meinen Augen? Mein Brillenputztuch ist auch weg. Herrjeh...

Danke & viele Grüße,
Spiff.

Dr. Boris Neubert

Hallo,

das Speichern mehrzeiliger Werte in fhem.save hat Rudi m.W. mittlerweile ermöglicht.

Bzgl. der unitialized-Meldungen habe ich ein paar Änderungen vorgenommen, die ab morgen per Update erhältlich sind.

Grüße
Boris
Globaler Moderator, Developer, aktives Mitglied des FHEM e.V. (Marketing, Verwaltung)
Bitte keine unaufgeforderten privaten Nachrichten!