Webserver RPC: wo kann man Root (Verzeichnis unter Raspi symcon) setzen?

Auf die Gefahr hin das ich langweile,

ist das nun im IP-Symcon ein Bug bei der Darstellung von °C als Suffix oder nicht.

Für Umlaute habe ich es noch nicht probiert, da ich glaube, wenn das Problem beseitigt ist, geht es auch mit den Umlauten.

Hier ist mein Workaround in einem script:

<?php
$T_float = GetValueFloat(21415 /*[Wetter\KS300 - WDE-1\WDE-1\Temperatur]*/);

$T_string = strval(round($T_float, 2));

$s = " °C";

//$Grad = utf8_encode($s);  wenn aktiv erscheint hier dann ein doppeltes "ÂÂ + °C"

$Grad = iconv("UTF-8", "ISO-8859-1//IGNORE", $s);

SetValueString(15840 /*[Wetter\KS300 - WDE-1\WDE-1\Temperatur]*/, $T_string.$Grad);

?>

Damit habe ich mein Problem nun gelöst.
Das heißt, ich muss im script „°C“ nach ISO-8859-1 konvertieren und in der Variabln speichern, damit es dann in der RPC HTML Page ohne Fehler dargestellt wird.

IP-Symcon V3.4 hat das ohne diesen Umweg gekonnt.

Ich wäre dankbar wenn wir dieses Problem lösen könnten

tom2005

PS:
Hier ist mein Workaround für die Umlaute „ä“ - „&auml“ und „ü - &uuml“.

Dazu war es notwendig jeweils ein neues Profil zu erstellen und die beiden Buchstaben entsprechend zu ersetzen.
Leider habe ich nun eine weitere Integer-Variable und 2 zusätzliche Profile einmal z.B. mit „ä“ für das Webfront und das andere mit „&auml“ für RPC.
Jedes der beiden Profil funktioniert nur in seiner Anwendung richtig, sonst ist die Darstellung falsch.

Ein Hallo an die Entwickler, wo liegt denn nun die Ursache für das Durcheinander mit dem Charset?

Danke

tom2005

Hallo paresy,

könntest du bitte mal meinen Beitrag #21 überfliegen und prüfen ob es für dieses Problem eine andere Lösung gibt oder ob man so damit leben muss?

Danke

tom2005

Nutzt du zur Darstellung jetzt deine in den Scripten gezeigten Stringvariablen?
Dann vermute ich dein Script selber ist noch nicht als UTF8 abgespeichert (Hast du die Konvertierung mit dem Utils Control durchgeführt?)
Oder nutzt du in der Visu GetValueFormated auf die Integer/Float Variablen?
Michael

Ich bin mir ziemlich sicher dass du irgendeinen Fehler bei der Kodierung hast. Wie Nall-Chan schon vermutet ist irgendwie eine Datei oder String in der falschen Kodierung und dadurch entsteht dieses Problem.

paresy

Danke für die Antworten.

@ Nall-chan

Ich habe mein Script (HTML-Page) unter Notepad2++ als HTML und UTF-8 gespeichert.
Wenn ich aber temporär auf ANSI oder ISO-8859-1 schalte ändert sich die Text-Anzeige von " °C" auf " °C".

Meine Temperatur-Daten kommen aus der CCU-1 via „xmlapi/state.cgi“ und werden unter einer float-Variablen gespeichert.

[1] => ' value='22.600000' valuetype='4'

Diese Zahl habe ich danach in eine StringVariable konvertiert und " °C " angehängt.
In meiner RPC Page wird dieser Wert der ursprünglichen FloatVariable genauso als
StringVariable in ~TextBox durch " 22,6 °C" dargestellt.

Wenn ich nun aber utf8_encode(" °C ") einfüge ändert sich das Ergebnis auf der RPC Page sogar in „22,6  °C“
während wenn ich iconv(„UTF-8“, „ISO-8859-1//IGNORE“, " °C ") einfüge wird daraus das Ergebnis der RPC Page in „22,6 °C“.

Übrigens eine Änderung der Konvertierung der reinen Float Zahl hat keinen Einfluss auf die Anzeige.

Ich sehe nicht mehr durch wo ich noch suchen soll

tom2005

Weil dein Script in IPS welches diese unsinnige StringVariable beschreibt und das Grad anhängt vermutlich nicht utf8 ist.
Warum überhaupt diese String Variable?
Nutzte doch direkt in deiner Seite die Temperatur Float Var.
Michael
PS: Meine Frage zum konvertieren der Scripte mit dem Utils Control hast du wieder nicht beantworte.

Hallo Nall-chan,

in Beitrag #18 hatte ich eigentlich die Aufgabe „Scripte mit dem Utils Control zu konvertieren“ abgearbeitet und auch bestätigt. Wenn es nicht ganz klar ausgedrückt wurde, dann sorry. :slight_smile:
Ich habe aber heute noch einmal gecheckt und es ist kein Fehler in dem Zusammenhang reportet.

Warum StringVar:

GetValueFloat(21415 /*[Wetter\KS300 - WDE-1\WDE-1\Temperatur]*/);

ist die von dir erwähnte FloatVar, die in der Darstellung in meiner RPC Page den erwähnten Fehler zeigt -" 22,6 °C" .

Und nur aus diesem Grund habe ich ein neue StringVar erstellt in der ich eine Zahl als String mit dem String " °C" leicht verketten kann. Auch dieses Konstrukt zeigt den gleichen Fehler.

Erst wenn ich die StringVar Zahl mit dem konvertierten String " iconv(„UTF-8“, „ISO-8859-1//IGNORE“, " °C „)“ verkette zeigt mir die Seite " 22,6 °C" an.

Du hast nun sicher Recht, das konvertierte Ergebnis ist ein ISO-8859-1.

Ich verstehe das Ergebnis auch nicht, da paresy sagt, intern Symcon ist alles UTF-8.

Meine Seite ist mehrfach geprüftes UTF-8 und wenn dann die FloatVar (UTF-8) genutzt wird habe ich den Fehler, die StringVar entsprechend konvertiert zeigt dann aber richtig an.

Ich würde damit leben, aber im original (FloatVar) und Vers. 3.4 läuft heute noch alles ohne die Konvertierungs-Klimmzüge wie es sein soll und dafür muss es einen Grund geben. :confused:

Ich hänge mal meine HTML Seite zum probieren an, vielleicht hilft das zu verstehen

Danke

tom2005

Var-Test.txt (2.95 KB)

Hallo Gemeinde,

ich nutze immer noch paresys Webserver RPC.

Es funktioniert seit der 3.4 mit geringen Anpassungen einwandfrei und schnell.

Zum Schalten von HM Geräte Buttons nutze ich die beiden Zeilen:


<button id="WZTVx" data-dojo-type="dijit.form.Button" style="top: 160px; left: 146px;" title="Denon AUS" class="button">
		<script type="dojo/method" data-dojo-event="onClick" data-dojo-args="evt">
			ips.HM_WriteValueBoolean(38128 /*[WZ/TV]*/, "STATE", false);
			</script>
		</button>
		
"<button id="WZTVx" data-dojo-type="dijit.form.Button" style="top: 160px; left: 146px;" title="Denon Ein" class="button">
		<script type="dojo/method" data-dojo-event="onClick" data-dojo-args="evt">
			ips.HM_WriteValueBoolean(38128 /*[WZ/TV]*/, "STATE", true);
			</script>
		</button>"

Die 2 Buttons funktionieren in allen Browswern unter IOS, Windows und Android.

Zum Teil nutze ich auch einen Button als Taster z.B. 1.push AUS und 2.push AN:


<button id="WZKL" data-dojo-type="dijit.form.Button" style="top: 400px; left: 290px;" title="Kronleuchter" class="button">
			<script type="dojo/method" data-dojo-event="onClick" data-dojo-args="evt">
			ips.GetValueBoolean(35673).then(
           function(data){
              if(data==true)
                ips.HM_WriteValueBoolean(35072, "STATE", false);
                else
                ips.HM_WriteValueBoolean(35072, "STATE", true);
                },
          function(err){
            alert(err); 
                }
            );
			</script>
		</button>

Seit längerem habe ich damit nun mit diesem Taster ein Problem beim Schalten von Geräten.

Diese Methode funktioniert nur noch unabhängig vom Browser bei IOS und Windows einwandfrei, aber bei Android erfolgt kein Schalten mehr.

Kennt jemand ein workaround oder muß ich etwas am Code ändern.

Danke
tom2005

Ich befürchte, dass keiner mehr diesen Code nutzt. Ich würde dir empfehlen das irgendwie „neu“ zu machen.

paresy