FHEM Forum

FHEM - Hausautomations-Systeme => MQTT => Thema gestartet von: roedert am 17 Dezember 2017, 04:20:32

Titel: String mit mehreren Leerzeichen publishen
Beitrag von: roedert am 17 Dezember 2017, 04:20:32
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?
Titel: Antw:String mit mehreren Leerzeichen publishen
Beitrag von: hexenmeister am 17 Dezember 2017, 20:06:51
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.
Titel: Antw:String mit mehreren Leerzeichen publishen
Beitrag von: justme1968 am 17 Dezember 2017, 20:38:59
es gibt eine parseParams routine die ein modul verwenden kann um im define in " eingeschlossene parameter mit leerzeichen  zu verstehen. doku im wiki.
Titel: Antw:String mit mehreren Leerzeichen publishen
Beitrag von: hexenmeister am 17 Dezember 2017, 22:45:26
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.  :(
Titel: Antw:String mit mehreren Leerzeichen publishen
Beitrag von: justme1968 am 18 Dezember 2017, 06:45:49
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.
Titel: Antw:String mit mehreren Leerzeichen publishen
Beitrag von: hexenmeister am 18 Dezember 2017, 06:52:18
Ja, so habe ich das gemeint. Im Sinne der Erstanfrage wird das leider nichts bringen.
Titel: Aw: String mit mehreren Leerzeichen publishen
Beitrag von: kask am 06 Mai 2023, 18:15:38
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);;