Hallo,
ich habe ein Problem, mit dem ich mich schon Monate immer mal wieder rumschlage:
Anscheinend werden Sonderzeichen bei Verwendung des „.=“-Operators falsch verarbeitet.
Der gleiche Code läuft unter V3.4 völlig korrekt.
Das Codebeispiel läuft auch unter V4 korrekt, wenn alle Objekte neu erzeugt werden (Nachstellen auf einem 2ten PI mit neu installiertem IPS)
Dies zeigt auf ein mögliches Migrationsproblem V3.4Win → V4-Raspbian.
Details:
$input=GetValueString(xxxxx);
$output.=$input;
Der „.=“-Operator macht hier aus „ÜüÄäÖö“ offensichtlich Ã?üÃ?äÃ?Ã.$input
s. Codebeispiel und Output in „Meldungen“ und aus dem Logfile weiter unten…
Der selbe Code funktioniert im selben Script korrekt, wenn den Variablen statische Werte zugewiesen werden.
Wie kann ich das beheben? Jemand eine Idee? Bug? Neu Migrieren scheidet wohl aus, da unter V4.0 schon viele Features hinzugefügt wurden.
Danke + Grüße
Christian
<?
// Aufruf des Scriptes mit IPS_RunScriptEx(xxxxx /*[Alarmzentrale\Protokoll_Write_Line]*/, Array("text" => "$writetext"));
//$writetext=zu übergebener String
$text=$_IPS['text'];
//$text="test";
IPS_LogMessage((string)$_IPS["SELF"],"Protokoll übergebener Text:$text");
$input=GetValueString(xxxxx /*[Alarmzentrale\Statustext]*/);
//Timestamp erzeugen
setlocale(LC_TIME,'de_DE@euro','de_DE','de','ge');
$timestamp=strftime("%a-%d.%m.%Y-%H:%M:%S Uhr");
// Aussgabe zusammenstellen konkatinieren + Zeilenumbruch
$output=($timestamp ." | " .$text ."
");
IPS_LogMessage((string)$_IPS["SELF"],"Protokoll output1:$output");
$output.=$input;
IPS_LogMessage((string)$_IPS["SELF"],"Protokoll output2:$output");
SetValueString(xxxxx /*[Alarmzentrale\Statustext]*/,"$output");
// Testsequenz output1 -> output2
$input="ÄÖÜ";
$output="äöü";
$output.=$input;
IPS_LogMessage((string)$_IPS["SELF"],"Test output:$output");
?>
Ausgabe Konsole\Meldungen:
04.10.2015 12:20:10*| xxxxx*| Protokoll übergebener Text:ÜüÄäÖö
04.10.2015 12:20:10*| xxxxx*| Protokoll output1:Sun-04.10.2015-12:20:10 Uhr | ÜüÄäÖö
04.10.2015 12:20:10*| xxxxx*| Protokoll output2:Sun-04.10.2015-12:20:10 Uhr | �ü�ä�ö
Sun-04.10.2015-12:19:42 Uhr | Protokoll gelöscht.
04.10.2015 12:20:10*| VariableManager*| [Alarmzentrale\Statustext] = Sun-04.10.2015-12:20:10 Uhr | �ü�ä�ö
Sun-04.10.2015-12:19:42 Uhr | Protokoll gelöscht.
04.10.2015 12:20:10*| xxxxx*| Test output:äöüÄÖÜ
/var/log/symcon/logfile.log
12:20:10 | 58876 | DEBUG | ScriptEngine | Executed Script Alarmzentrale\Test_Protokoll ~ Sender: Execute
12:20:10 | 00000 | CUSTOM | xxxxx | Protokoll übergebener Text:ÜüÄäÖö
12:20:10 | 00000 | CUSTOM | xxxxx | Protokoll output1:Sun-04.10.2015-12:20:10 Uhr | ÜüÄäÖö
12:20:10 | 00000 | CUSTOM | xxxxx | Protokoll output2:Sun-04.10.2015-12:20:10 Uhr | ÜüÄäÖö
Sun-04.10.2015-12:19:42 Uhr | Protokoll gel▒scht.
12:20:10 | 23817 | MESSAGE | VariableManager | [Alarmzentrale\Statustext] = Sun-04.10.2015-12:20:10 Uhr | ÜüÄäÖö
Sun-04.10.2015-12:19:42 Uhr | Protokoll gel▒scht.
12:20:10 | 00000 | CUSTOM | xxxxx | Test output:äöüÄÖÜ
12:20:10 | 31710 | DEBUG | ScriptEngine | Executed Script Alarmzentrale\Protokoll_Write_Line ~ Sender: RunScript