Ich sende per MQTT Daten an ein 20x4-LCD-Display und will eigentlich immer eine komplette Zeile mit 20 Stellen senden.
set <MQTT-Device> LINE1=a b c d
klappt auch bestens, allerdings werden bei
set <MQTT-Device> LINE1= a b c d
alle mehrfach auftretenden Leerzeichen durch nur ein Leerzeichen ersetzt.
Hochkomme oder Anführungszeichen helfen auch nicht, diese werden per MQQT auch mit gesendet.
Gibt es irgendeine Möglichkeit den String formatiert ohne Veränderung zu senden?
Das Problem ist, dass FHEM-set-Befehl die Daten bereits zerlegt in einem Array weitergibt. Bei der Zerlegung gehen alle Leerzeichen erstmal verloren ( my @a = split("[ \t][ \t]*", $param); ). In dem MQTT-DEVICE-Modul werden diese dann mit Leerzeichen dazwischen zusammengesetzt (my $value = join " ",@values;).
Einzige Möglichkeit, die ich sehe, wäre das MQTT-DEVICE-Modul so umzubauen, dass dieser ein eigenes Publish-Befehl und/oder eine Methode anbietet, die man direkt aufrufen kann.
es gibt eine parseParams routine die ein modul verwenden kann um im define in " eingeschlossene parameter mit leerzeichen zu verstehen. doku im wiki.
Ah! Danke, gut zu wissen (ist an mich irgendwie vorbeigegangen ??? ).
Die Änderung dürfte also recht einfach sein. Jetzt muss nur noch jemand mal einen Patch für den Modul-Maintainer erstellen. Kann ich auch machen, wird aber etwas dauern...
Edit: wenn ich Quelle in fhem.pl ansehe, irgendwie denke ich, das wird eben die Leerzeichen speziell für 'set' (auch in Anführungszeichzen versteckt) auch nicht retten. :(
mehrere einzelne leerzeichen wie im beispiel ganz oben die z.b. die wörter eines satzes trennen gehen.
nur strings mit mehreren direkt aufeinander folgenden leerzeichen gehen (noch) nicht.
Ja, so habe ich das gemeint. Im Sinne der Erstanfrage wird das leider nichts bringen.
Falls einer danach sucht..es gibt eine Möglichkeit.
Im Charset des Displays nach einem Zeichen suchen was auch "leer" ist und das als Hex übergeben.
my $ww_tu = sprintf("%.0f",(ReadingsNum("DeltaSol_BX","Temp_Speicher_unten",0)));;
my $ww_tm = sprintf("%.0f",(ReadingsNum("DeltaSol_BX","Temp_Speicher_mitte",0)));;
my $ww_to = sprintf("%.0f",(ReadingsNum("DeltaSol_BX","Temp_Speicher_oben",0)));;
my $ww_pow = sprintf("%.0f",((ReadingsNum("VarWWepower","state",0) + ReadingsNum("DeltaSol_BX","Waermemenge.calc",0))));;
##$ww_pow = substr("\xFE\xFE\xFE\xFE\xFE".$ww_pow."W", -5);;
$ww_pow = substr("\xA0\xA0\xA0\xA0\xA0".$ww_pow."W", -5);;
fhem ("set MQTT2_DVES_C04CC9 Row3 W: " . $ww_tu ."/".$ww_tm."/".$ww_to. "\xDFC " . $ww_pow);;