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

Hallo zusammen,

ich nutze seit Jahren unter Win7 Paresys Beitrag

"Einfache eigene Seiten mit JSON-RPC/Dojo/Javascript ab IP-Symcon 2.6 "

um meine Geräte zu schalten, und alle nützlichen Informationen auf meinem Floorplan darzustellen.
Er wird auf einer eigenen Seite gestartet.

Nach dem Umzug auf den Raspi und nun Symcon 5.1 kann ich den Floorplan über den Server Aufruf 192.168.1.22:9009 nicht mehr starten. Stattdessen erscheint immer mein normales Webfront.
Unter 3.4 ist alles noch ok, nur das soll nun abgeschaltet werden.

Als Ursache vermute ich das ich das Root Verzeichnis nicht mehr bei der Server Einrichtung angeben kann, da diese Zeile nun fehlt.

Was kann ich tun?

tom2005

Schiebe die Seite in den WebFront User Order und lade deine Seite dann über 127.0.0.1:3777/user/

paresy

Hi,

danke das war es, ich musste nur noch den Ordner anhängen.
Den Webserver konnte ich auch löschen.

Alle Bilder und Elemente sind da.
Die Dojo -Funktionen sind aber inaktiv und erzeugen nur Fehler.
Leider funktioniert bisher auch kein einziger Schalter.

tom2005

Hast du mal in der Browser entwickler Konsole geschaut was für Fehler kommen? Evtl stimmen noch ein paar Pfade nicht.

paresy

Ja, in der Konsole konnte ich sehen, das die Json-rpc.php korrigiert werden musste.

" $postdata = file_get_contents(„php://input“); " - wenn php > 5.x

Kann man die Änderung nicht gleich korrigiert beim nächsten Update einbinden?
Das müsste doch eigentlich jeden betreffen seit wir php > 7 nutzen, oder?

Der Rest war dann nur noch Fleißarbeit, bin aber noch dabei.

Danke noch mal

tom2005

Hi Tom. Cool dass es geht. Die Json-Rpc liefern wir schon seit Jahren nicht mehr aus. Somit können wir da nicht mehr viel patchen.

Danke für dein Feedback!

paresy

Danke für die Info, man kann die Lösung ja im Forum finden.

Doch nun brauche ich doch noch mal Hilfe …

Bei dem Umbau bin ich nun auf ein Problem gestoßen wo mir keine Lösung einfällt.
Ich habe mal 2 Bilder dazu angehängt, einmal 3.4 und 5.1.
Der Zeichensatz Fehler wie dargestellt betrifft nur 5.1.

Dieser Fehler ist unter Win10 Edge und Firefox identisch, betrifft aber nur den Inhalt der Variablen.
Der Seiteninhalt ist bis auf die Variablen ID`s und die Verzeichnisse identisch.

Quelle: IP-Symcon 3.4 läuft unter Win7 und 5.1 auf Raspi 3 letzte Vers.

Die Worte „Status Türen“ habe ich auf der HTML Seite als Text eingegeben, „meta charset UFT-8“ und wird korrekt dargestellt.

Die Variable Status Türen auf beiden Versionen sind Integer, die eigenen Profile sind identisch angelegt und die Umlaute werden auf dem Webfront korrekt angezeigt.

Die Variable hinter „Temperatur“ hat das interne Systemprofil ~Temperature.
Auch das ist auf dem WF ok.

Was kann ich da tun?

tom2005

Du willst wahrscheinlich ein utf8_decode auf den Inhalt der Variable werfen. Seit 4.x nutzt IP-Symcon intern immer UTF-8. Ich vermute, dass deine WebApp noch ein altes Encoding verwendet.

paresy

Hi Paresy,

ich glaube ich komme hier nicht mehr ganz mit.
Würde irgendwie mal die Möglichkeit bestehen per Fon miteinander zu sprechen?

Was kann ich wo an meiner Webapp prüfen?

Ich habe nur eine HTML-Seite, die in den jeweiligen (Rapi-Stretch oder Intel-64-Win7) rpc Verzeichnissen liegt und von dort über einen beliebigen Browser (IE11, Edge, Chrom unter Android oder Fully unter Android) auf den entsprechenden Geräten aufgerufen wird.

Dabei unterscheidet sich die Ausgabe dieser beiden Variablen ob sie vom Win7-Symcon 3.4 kommen oder von Raspi -Symcon 5.1.

Unter 3.4 ist alles immer ok und unter 5.1 sind bisher diese beiden Variablen betroffen. Vielleicht sollte ich statt „Tür“ lieber „Door“ schreiben. :wink:
Das °C schreibe ich nicht mal selbst sondern es stammt aus dem internen Systemprofil für ~Temperature .

<div ips-variable-id="21415" ips-variable-label="Temperatur: " style="top: 85px; left: 470px;" class="variable">Temperatur: 00.00 °C</div>

Das rote ist nur der Platzhalter und dort erscheint dann der Fehler „Temperatur: 30,3 °C“ auch bei Element untersuchen .

Übrigens:

<div ips-variable-id="25277" ips-variable-label="Luftfeuchtigkeit: " style="top: 85px; left: 650px;" class="variable">Luftfeuchtigkeit: 00.00 %</div>

Hier wird der grüne Platzhalter wird durch die Variable „Luftfeuchtigkeit: 52 %“ korrekt ersetzt

Danke schon mal

tom2005

Hast du einmal im util control dein System nach falsche kodierten Zeichenketten suchen lassen?
Michael

Ups, wie geht das?

Öffne die Instanz in der Konsole (liegt unter Kern Instanzen), dann solltest du es finden :slight_smile:
Michael

Ich vermute eher dass die PHP Datei bei ihm komplett nicht UTF-8 Konform ist.

Ich kann dir Telefonsupport leider nur im Rahmen unseres Premium Supports anbieten. Wenn du den buchst, bekommen wir dein Skriptproblem bestimmt auch in den Griff.

Ansonsten probier den utf8_decode Tipp noch mal aus.

paresy

Toll was es so gibt.
Aber nein, es sind zwar einige Variable gelistet, wo der Inhalt aus externen Quellen stammt, wie DB Fahrpläne,
Müllkalender usw.
In den dazu gehörigen scripts sind dort sind aber Zeichenkorrekturen eingebaut.

Meine alte CCU1 gibt eine XML statt mit UTF-8 mit ISO-8859-1 zurück.

Ich denke nun das hier nicht das Problem liegt oder?

Habe mal ein neues Profil angelegt: ä, ö, ü, ° bringen den Fehler, %, &, $ aber nicht. (unvollständig)

Wo noch suchen?

tom2005

@paresy

soll ich meine HTML Datei mal schicken, ich kann keine Fehler entdecken aber wer weiß das schon,
Welche php Datei meinst du könnte noch den Fehler verursachen?

Das mit der CCU lässt dich damit lösen:
GitHub - Nall-chan/IPSHomematicExtended: IPS-Modul for Homematic-Script Devices

Die Json-RPC muss eigentlich komplett in UTF8 laufen, eventuell ist da irgendwas bei dir falsch? Ein utf8decode o.ä.?
Michael

Hi Michael,

die HM-Scrip-Dev sind installiert und es klappt prima.

Was passiert wenn ich unter Utils Control „Alle Fehler beheben“ drücke? Was und wie wird dann verarbeitet, kann ich Abbrechen und gibt es einen Weg zurück wenn nachher nichts mehr geht?
Backup ist schon durchgeführt.

Zu meinem RTC / UTF-8 Problem:
Ein decode ist nicht zu finden.

So sieht mein HTML Head aus:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">

<head>	

	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Er ist in beiden Vers. gleich

Wo kann ich denn auf die Var noch ein UTF-8 auflegen und wie, es wird doch nicht am Raspi liegen?

Danke

tom2005

Wenn du ein Backup hast, dann drück drauf :slight_smile:
Ich meinte nicht das HTML, ich meine die Json-rpc.php
Michael

Ok, habe jetzt die Json-PC.php geprüft und nochmal auf UTF-8 umkopiert. Sollte nun ok sein, aber keine sichtbare Änderung.

Nun habe ich die Settings.json untersucht und hier das merkwürdige Resultat: :confused:
Betrachtet mit dem Lister / Editor von Windows.

Warum wird denn °C mit diesem Code Zeichen überhaupt gespeichert?

Wenn ich Notepad++ nehme wird es natürlich richtig angezeigt. Also wird die Settings.json nicht UTF-8 conform gespeichert.

        "ID38908": {
            "position": 0,
            "readOnly": false,
            "ident": "",
            "hidden": false,
            "disabled": false,
            "type": 2,
            "name": "Aktualisiert",
            "info": "",
            "icon": "",
            "parentID": 31506,
            "data": {
                "action": 0,
                "customAction": 0,
                "profile": "",
                "lastUpdate": 1564502267,
                "value": "Temperatur: 22,6 °C und Luftfeuchtigkeit: 56 % - 30.07.2019   17:57",
                "customProfile": "",
                "lastChange": 1564502267,
                "type": 3 

Was nun?

tom2005

Das ist eine String Variable, und da sie nicht readonly ist, wird sie wohl über ein Script beschrieben.
Somit musst du wohl Mal im Utils Control deine Scripte überprüfen und auf UTF8 korrigieren lassen.
Das Script schreibt den Müll in diese Variable.
Michael

Sorry, ich wollte da nur zeigen, dass die Json das gleiche Ergebnis abspeichert was ich angezeigt bekomme.

Das script verkettet nur die beiden string Vars mit dem Text °C … . Es ist definitiv UTF-8 codet.

Wenn ich es dann probehalber zu ANSI konvertiere erscheint das °.
Zurück nach UTF-8 ist es wieder ok.

Also irgendwo muss dieser String sich in ANSI wandeln sonst würde er nicht so im Array der Var gespeichert.

In meinem rpc script ist es eine floatVar und die erhält das °C durch das Profil ~Temperature.
Auch hier wird scheinbar eine ANSI Konvertierung erfolgen.

Sie wird dann an Stelle des Platzhalters, wie ich das sehe, dynamisch in die HTML Seite eingefügt und nicht mehr zurück konvertiert.

Ok, damit könnte ich leben, dann wird eben die Temp Var mit dem Text °C erst auf der HTML Seite verkettet.

Das echte Problem sind Umlaute und einige Sonderzeichen in eingefügten weiteren Variablen.
Im Text auf der Seite spielt das aber keine Rolle.

tom2005