HM-OU-LED16 ilum funktioniert nicht mehr

Begonnen von maxx8888, 11 Juni 2013, 19:52:33

Vorheriges Thema - Nächstes Thema

maxx8888

Hi!

Ich habe vor ein paar Tagen auf die letzte Fhem Version upgedatet.

Anschließend ist mir aufgefallen, daß der ilum Befehl meiner HM_OU_Led16 nicht mehr funktioniert.

Fehlermeldung in der Console:
Illegal hexadecimal digit ' ' ignored at ./FHEM/10_CUL_HM.pm line 1966.
Illegal hexadecimal digit ' ' ignored at ./FHEM/10_CUL_HM.pm line 1967.
Illegal hexadecimal digit ' ' ignored at ./FHEM/10_CUL_HM.pm line 1966.
Illegal hexadecimal digit ' ' ignored at ./FHEM/10_CUL_HM.pm line 1967.

Anschließend habe ich das File 10_CUL_HM.pm auf die alte Version überschrieben.
Funktioniert wieder.

Bin leider was Perl betrifft blutiger Anfänger:

Neue Function (geht nicht):
  elsif($cmd eq "ilum") { ################################################# reg
   return "$a[2] not specified. choose 0-15 for brightness"  if ($a[2]>15);
   return "$a[3] not specified. choose 0-127 for duration"   if ($a[3]>127);
   return "unsupported for channel, use $devName"            if (!$roleD);
   splice @a,1,3, ("regBulk","RegL_00:",sprintf(" 04:%02X",$a[2]),sprintf(" 08:%02X",$a[3]*2));


Alte Function (funktioniert):
  elsif($cmd eq "ilum") { ################################################# reg
   return "$a[2] not specified. choose 0-15 for brightness"  if ($a[2]>15);
   return "$a[3] not specified. choose 0-127 for duration"  if ($a[3]>127);
   return "unsupported for HMid:".$hash->{DEF}.", use HMId:".substr($hash->{DEF},0,6)
                     if (length($hash->{DEF}) != 6);
   my $addrData = sprintf("04%02X08%02X",$a[2],$a[3]*2);
   # write list0,
   CUL_HM_pushConfig($hash,$id,$dst,0,0,0,0,$addrData);


Hat da jemand vielleicht einen Tipp für mich (bzw Idee wie man den Bug fixen könnte)

Danke,
/Maxx

martinp876

hm - wollte es bereinigen - internes aufraeumen..
sorry, dass es nicht Funktioniert.

Bei meiner Simulation bekomme ich keinen Fehler...
kannst du den Aufruf posten und evtl ein List?

Gruss
Martin

mcfly71

Hallo Martin,

hier also nochmals der Fehler beim ilum:

in deinem pm steht:

     foreach my $ad (sort @adIn){
       ($addr,$data) = split(":",$ad);
**       $adList .= sprintf("%02X%02X",hex($addr),hex($data)) if ($addr ne "00");
**       return "wrong addr or data:".$ad if (hex($addr)>255 || hex($data)>255);

Das Problem ist, das $ad mit einem SPACE beginnt, da $addr ebenfalls mit einem SPACE anfängt.
(Da steht sowas drin wie " 7") und die hex funktion motzt, dass sie kein SPACE in eine hex Zahl umwandeln kann. Dies passiert natürlich in 2 Zeilen (**).
Ich habe mir notdürftig damit geholfen, dass ich rigoros $addr um das erste SPACE abschneide, dann funktioniert es. Das ist aber natürlich keine Lösung.
Entweder muss irgendwas vorher passieren, damit $ad nicht mit einem SPACE anfängt, oder
$ad, oder $addr muessen getrimmt werden (TRIM()). So würde ich mal sagen....

Hoffe du verstehst mich...
VG
mcfly
- HMLAN / Raspberry auf hmmode
- Homematic

martinp876

Hi mcfly,

im Prinzip schon klar. Ich hatte es einmal getestet und hatte die Fehlermeldugn nicht, daher wollte ich den Aufruf sehen, denn eigentlich sollte es auch bei mir passieren.

Das Problem wird wohl zu loesen sein in Zeile ~1831
splice @a,1,3, ("regBulk","RegL_00:",sprintf(" 04:%02X",$a[2]),sprintf(" 08:%02X",$a[3]*2));
ersetzen durch
splice @a,1,3, ("regBulk","RegL_00:",sprintf("04:%02X",$a[2]),sprintf("08:%02X",$a[3]*2));
das sollten die blanks gewesen sein.

Gruss und Danke, Martin

mcfly71

Jep, dat waret, so fkt. es....
wieder mal komisch, dass es bei dir nicht fkt. .
Einzige Erklärung meinerseits:
deine perl-funktion hex akzeptiert es, macht also aus hex(" F") -> F und keine Fehlermeldung...
das kannst du ja mal schnell probieren, vielleicht ist das des rätsels lösung....

VG
mcfly
- HMLAN / Raspberry auf hmmode
- Homematic

martinp876

kann sein, bin aber nicht an der Maschine... heute evtl. schlecht.

Jedenfalls aendere ich es... hab noch ein paar dinge mehr...

Werde den log-eintrag auch noch anpassen...
Gruss
Martin