[gelöst] ECMD: Leerzeichen bei LCD nur ohne EVENT/EVTPART?

Begonnen von kpwg, 22 Juni 2014, 14:00:08

Vorheriges Thema - Nächstes Thema

kpwg

Hallo Leute,

Ich habe da ein Problem, dem ich nicht so recht auf die Schliche komme. Ich sende auf ein LCD am Ethersex per Notify bestimmte Daten, welche auch Text mit Leerzeichen enthalten. Diese "spaces" müssen mit \x20 bedient werden, sonst wird das als separates (und unzulässiges) Argument gewertet. Soweit alles klein Problem. Sobald die beschriebene Zeile jedoch Daten aus EVENT oder EVTPART enthält, funktioniert \x20 nicht mehr! Die Zeile bleibt leer. Die classdef ist identisch zu der im Wiki. Anbei die DEFs der Notifys.

Die funktionierende Variante mit Unterstrich:
Keller:dewpoint.* {
  my $value1 = "%EVTPART1";
  fhem "set KU_LCD clear 2";
  fhem "set KU_LCD write 2 0 TP_Keller:$value1";
undef
}


Die nicht funktionierende Variante mit \x20:
Keller:dewpoint.* {
  my $value1 = "%EVTPART1";
  fhem "set KU_LCD clear 2";
  fhem "set KU_LCD write 2 0 TP\x20Keller:$value1";
undef
}


Das Logfile sagt dann
2014.06.22 13:45:20 3: set KU_LCD write 2 0 TP Keller:9.6 : Wrong number of parameters.
2014.06.22 13:45:24 3: set KU_LCD write 2 0 TP Keller:9.6 : Wrong number of parameters.
2014.06.22 13:46:25 3: set KU_LCD write 2 0 TP Keller:9.5 : Wrong number of parameters.
2014.06.22 13:51:22 3: set KU_LCD write 2 0 TP Keller:9.5 : Wrong number of parameters.
2014.06.22 13:51:30 3: set KU_LCD write 2 0 TP Keller:9.5 : Wrong number of parameters.



Zu jeder Zeit funktioniert das DEF
set KU_LCD clear 0; set KU_LCD write 0 0 Kellerfenster\x20zu
und
set KU_LCD clear 0; set KU_LCD write 0 0 Keller\x20lueften
auf dem gleichen Display.

Das Problem ist ganz klar eher kosmetischer Natur, ich kann nur keinen Grund erkennen? Kennt FHEM noch andere Möglichkeiten, Leerzeichen zu erzeugen?

Viele Grüße, Ricardo

rudolfkoenig

Da dieser String per perl-eval ausgefuehrt wird, wird \x20 sofort nach Leerzeichen gewandelt. Vermutlich ist noch ein weiteres \ (oder 2 ?) notwendig, um \x20 da zu haben, wo man es haben will.

kpwg

Wie doch ein Backslash zum kleinen Glück beitragen kann...
... Perfekt, es funktioniert! Vielen Dank, Rudolf!

Im Detail für alle anderen: Ich schreibe per Notify den Taupunkt des Kellers auf ein HD44780-LCD am Ethersex (bzw. Net-IO). Zuerst wird Zeile 2 gelöscht, danach neu beschrieben. Das \\x20 wird als Leerzeichen verwertet. Falls nur Text geschrieben wird, genügt \x20.
Damit das funktioniert, muss das vollständige Notify für die fhem.cfg so aussehen:
define dew_Keller2KU_LCD notify Keller:dewpoint.* {\
  my $value1 = "%EVTPART1";;\
  fhem "set KU_LCD clear 2";;\
  fhem "set KU_LCD write 2 0 TP\\x20Keller:$value1";;\
undef\
}


Vielen Dank, Ricardo