Zeichensatzprobleme via Scripting mit CUxD

Anbindung von FS20-Komponenten, ELV-Wetterstationen, EnOcean und DMX an HomeMatic

Moderator: Co-Administratoren

Antworten
MarkusSt
Beiträge: 5
Registriert: 11.10.2018, 12:00
Wohnort: Büdingen

Zeichensatzprobleme via Scripting mit CUxD

Beitrag von MarkusSt » 24.04.2019, 16:47

Hallo zusammen,

ich bin noch recht frisch in der ganzen Scripting Materie und Homematic (IP), möglicherweise fehlen mir die richtigen Suchbegriffe, eine passende Lösung hier im Forum zu finden; dazu noch mein allererster Post überhaupt (gibt's hier einen Vorstellungsbereich?) - möge Gnade walten :P

<tldr>

Code: Alles auswählen

        var url = "http://wttr.in/Berlin?format=%t+%w+%h";
        url.ToUTF8().UriEncode()
        
        !hier ist die Abfrage mit CUxD
        dom.GetObject("CUxD.CUX2801001:2.CMD_SETS").State("wget -q -O - '"#url#"'");
        dom.GetObject("CUxD.CUX2801001:2.CMD_QUERY_RET").State(1);
        string wetter_txt = dom.GetObject("CUxD.CUX2801001:2.CMD_RETS").State();
        
        WriteLine(wetter_txt);
Haut mir
HmIP_Script_CUxD_Variable.png
Screenshot Variable
HmIP_Script_CUxD_Variable.png (8.22 KiB) 366 mal betrachtet
anstelle von

Code: Alles auswählen

+20°C ↖13 km/h 46%
in meine Variable.
Auf der Commandline via ssh funktioniert es, via CUxD kommt es zu fehlerhaften Daten.

Was mache ich falsch?
</tldr>


<ausführlich>
Da es weatherundergrund.com ja leider nicht mehr mit freien API Keys gibt ohne eigene, registrierte Hardware, versuche ich mich grade an einer alternativen Quellen.

Mein Wunschkandidat ist https://de.wttr.in für die rudimentäre Steuerung (wie warm, wie stark ist der Wind) von Rollos und Sonnenschutz.

Stadtname mit z. B. /Berlin oder /San Francisco an die URL anhängen und schwupps gibts den Wetterbericht ohne API Key oder sonstigem für die gewünschte Stadt.

Auf der GitHub Projektseite https://github.com/chubin/wttr.in sieht man auch die Parameter via curl um die Ausgabe anzupassen.

Code: Alles auswählen

curl wttr.in/Berlin?format=%t+%w+%h
schmeisst dann folgendes aus

Code: Alles auswählen

+20°C ↖13 km/h 46%
Jetzt zum eigentlichen Problem.
Via ssh auf meinem RaspberryMatic kommts in der Shell sauber an.

Code: Alles auswählen

+20°C ↖13 km/h 46%
Sobald ich aber das Script via CUxD ausführen lasse ist nach dem wget oder curl nur noch Kauderwelsch, ich lasse direkt nach dem Füllen der Variable deren Inhalt ausgeben via WriteLine():
HmIP_Script_CUxD_Variable.png
Screenshot Variable
HmIP_Script_CUxD_Variable.png (8.22 KiB) 366 mal betrachtet

Die Sonderzeichen hätte ich ja mit den Trim Befehlen noch wegschneiden können, aber die Zahlenwerte selbst stimmen schon nicht mehr (23 statt 20 und 60 statt 46).

Ein

Code: Alles auswählen

wetter_txt.ToUTF8();
macht hier leider keinen Unterschied, die AbfageURL passt soweit, hier habe ich testweise auch ToUTF und UriEncode verwendet - kein Unterschied.

RaspberryMatic und CUxD sind beide auf dem aktuellsten Stand. Ich vermute, dass es irgendwo den Zeichensatz verhaut - aber leider weiß ich nicht an welcher Stelle.

Zur Vollständigkeit hier der Codeschnippsel:

Code: Alles auswählen

        var url = "http://wttr.in/Berlin?format=%t+%w+%h";
        url.ToUTF8().UriEncode()
        
        !hier ist die Abfrage mit CUxD
        dom.GetObject("CUxD.CUX2801001:2.CMD_SETS").State("wget -q -O - '"#url#"'");
        dom.GetObject("CUxD.CUX2801001:2.CMD_QUERY_RET").State(1);
        string wetter_txt = dom.GetObject("CUxD.CUX2801001:2.CMD_RETS").State();
        
        WriteLine(wetter_txt);
Ich habe wget auch mal mit

Code: Alles auswählen

-np -nc --restrict-file-names=nocontrol
aufgebohrt - das macht leider auch keinen Unterschied. Quelle https://www.win.tue.nl/~aeb/linux/misc/wget.html - da geht es aber eigentlich um UTF-8 Filenames.
</ausführlich>

Jemand eine Idee, wie ich die Werte korrekt in die Variable bekomme oder wie ich das weiter troubleshooten kann?

Danke und Gruß
Markus

Edit: selbst copy & paste von RM in den Forumspost verändert die Darstellung :roll: - daher per Screenshot eingefügt

Benutzeravatar
jmaus
Beiträge: 4802
Registriert: 17.02.2015, 14:45
Wohnort: Dresden
Danksagung erhalten: 32 Mal
Kontaktdaten:

Re: Zeichensatzprobleme via Scripting mit CUxD

Beitrag von jmaus » 24.04.2019, 22:34

Nun, du hast wohl bei all deinen Bestrebungen übersehen, das die WebUI der CCU lediglich ISO-8859-1 (Latin1) beherrscht und in der Darstellung nicht mit UTF8 Kodierung umgehen kann wie du das wohl versuchst zu erzwingen.

D.h. Du kannst kein UTF8 kodierten Text in eine Systemvariable packen und darauf hoffen das dieser Inhalt dann in der WebUI korrekt dargestellt wird. Wie gesagt, die WebUI der CCU kann lediglich mit ISO-8859-1 (Latin1) umgehen und wandelt auch alles andere kodierte in Latin1 um was genau das erzeugt was du hier bemerkt hast.

... und übrigens hat das alles nichts mit CUxD zu tun, sondern ist ein Effekt/Resultat der Skriptsprache der ReGaHss Logikengine.
RaspberryMatic 3.47.10.20190713 @ TinkerS mit ~160 HomeMatic Geräten + ioBroker – GitHubPayPalTwitter

MarkusSt
Beiträge: 5
Registriert: 11.10.2018, 12:00
Wohnort: Büdingen

Re: Zeichensatzprobleme via Scripting mit CUxD

Beitrag von MarkusSt » 25.04.2019, 09:15

Moin,

danke Jens für die Erläuterung - ich meine das irgendwo schonmal gehört/gelesen zu haben. Und auch dafür, dass es keine CUxD Einschränkung ist :idea:

Ich habe für das Script Eugen Stall @funkleuchtturm zweckentfremdet - jetzt weiß ich (wohl) auch, warum Umlaute im Script gesucht und ersetzt werden bei der Windrichtung.

So wie sich das anhört bleibt also nur an eine Ausgabe heranzukommen, die im kompatiblen Zeichensatz arbeitet - oder einen Weg "außen herum" zu bauen, wie ein Textfile z. B. via Cron und dort die Sonderzeichen auszusortieren.

Andere Lösungsansätze gerne willkommen.

Gruß
Markus

Benutzeravatar
Black
Beiträge: 1798
Registriert: 12.09.2015, 22:31
Wohnort: Wegberg
Hat sich bedankt: 4 Mal
Danksagung erhalten: 12 Mal
Kontaktdaten:

Re: Zeichensatzprobleme via Scripting mit CUxD

Beitrag von Black » 25.04.2019, 10:48

an dieser codierung habe ich mir auch eine weile die zähne ausgebissten beim programmieren des SDV. hat eine ganze weile gebraucht bis das konsistent tat.
Die Wahrheit ist ein Chor aus Wind
Meine Seite, ok noch bisschen im Aufbau

RaspberryMatic 3.45.7.20190507 mit Groundplane Antennenmod (Mein Grundstück ist halt etwas gross)
jede Menge Sensoren und Aktoren, Logamatic 2107 Gateway zum Buderus Kessel
ioBroker unter ProxMox auf NUC als Hauptsteuersystem und Visualisierung
Script Time Scheduler V1.3
SDV 3.08.11 Scripteditor und Objektinspektor

Benutzeravatar
FBK2904
Beiträge: 159
Registriert: 22.03.2016, 17:12
Wohnort: Ludwigsburg

Re: Zeichensatzprobleme via Scripting mit CUxD

Beitrag von FBK2904 » 25.04.2019, 17:57

MarkusSt hat geschrieben:
24.04.2019, 16:47
Zur Vollständigkeit hier der Codeschnippsel:

Code: Alles auswählen

        var url = "http://wttr.in/Berlin?format=%t+%w+%h";
        url.ToUTF8().UriEncode()
        
        !hier ist die Abfrage mit CUxD
        dom.GetObject("CUxD.CUX2801001:2.CMD_SETS").State("wget -q -O - '"#url#"'");
        dom.GetObject("CUxD.CUX2801001:2.CMD_QUERY_RET").State(1);
        string wetter_txt = dom.GetObject("CUxD.CUX2801001:2.CMD_RETS").State();
        
        WriteLine(wetter_txt);
Jemand eine Idee, wie ich die Werte korrekt in die Variable bekomme oder wie ich das weiter troubleshooten kann?

Ändere doch einmal diese Zeile:

Code: Alles auswählen

string wetter_txt = dom.GetObject("CUxD.CUX2801001:2.CMD_RETS").State();
in:

Code: Alles auswählen

string wetter_txt = dom.GetObject("CUxD.CUX2801001:2.CMD_RETS").State().ToLatin(); 
und schaue was dann dabei heraus kommt :wink:

Bei meinem (jetzigen) Test, kommt sowohl bei HTTP (Webseite) als auch im SCRIPT (CUxD) folgende Daten (gleiche) heraus:

Code: Alles auswählen

+25°C 0 km/h 26%
:mrgreen:

PS:
Die zweite Zeile in Deinem script:

Code: Alles auswählen

url.ToUTF8().UriEncode()
kannst Du dir sparen bzw. entfernen.

Grüssle,
Frank

MarkusSt
Beiträge: 5
Registriert: 11.10.2018, 12:00
Wohnort: Büdingen

Re: Zeichensatzprobleme via Scripting mit CUxD

Beitrag von MarkusSt » 25.04.2019, 19:38

FBK2904 hat geschrieben:
25.04.2019, 17:57
in:

Code: Alles auswählen

string wetter_txt = dom.GetObject("CUxD.CUX2801001:2.CMD_RETS").State().ToLatin(); 
und schaue was dann dabei heraus kommt :wink:

Bei meinem (jetzigen) Test, kommt sowohl bei HTTP (Webseite) als auch im SCRIPT (CUxD) folgende Daten (gleiche) heraus:

Code: Alles auswählen

+25°C 0 km/h 26%
:mrgreen:

PS:
Die zweite Zeile in Deinem script:

Code: Alles auswählen

url.ToUTF8().UriEncode()
kannst Du dir sparen bzw. entfernen.

Grüssle,
Frank
Großartig, ich habs eine Zeile zu früh versucht - bzw auch noch vor dem .State() - 1000 Dank Frank, Du hast Dir ein Bier verdient :P ! :lol:

EDIT: Ha, eins hab ich doch noch gefunden - der Windrichtungspfeil ist jetzt weg. Aber damit kann man ja leben :D

Benutzeravatar
FBK2904
Beiträge: 159
Registriert: 22.03.2016, 17:12
Wohnort: Ludwigsburg

Re: Zeichensatzprobleme via Scripting mit CUxD

Beitrag von FBK2904 » 25.04.2019, 21:04

MarkusSt hat geschrieben:
25.04.2019, 19:38
- 1000 Dank Frank, Du hast Dir ein Bier verdient :P ! :lol:
Bitte schön, gern geschehen! Habe schon einmal zwei Hefeweizen auf Dich genehmigt :mrgreen:
MarkusSt hat geschrieben:
25.04.2019, 19:38
EDIT: Ha, eins hab ich doch noch gefunden - der Windrichtungspfeil ist jetzt weg. Aber damit kann man ja leben :D
TJA ... das wird so wohl nichts werden. Dazu müsstest Du irgendwie die "Winddirection" aus dem URL-String bekommen und anderweitig auswerten (ist bei allen Wetterdaten-Anbieter so). Solche "Extravagante"-Sonderzeichen sind so nicht möglich bzw. vorgesehen.

Grüssle,
Frank

MarkusSt
Beiträge: 5
Registriert: 11.10.2018, 12:00
Wohnort: Büdingen

Re: Zeichensatzprobleme via Scripting mit CUxD

Beitrag von MarkusSt » 25.04.2019, 21:28

FBK2904 hat geschrieben:
25.04.2019, 21:04

TJA ... das wird so wohl nichts werden. Dazu müsstest Du irgendwie die "Winddirection" aus dem URL-String bekommen und anderweitig auswerten (ist bei allen Wetterdaten-Anbieter so). Solche "Extravagante"-Sonderzeichen sind so nicht möglich bzw. vorgesehen.

Grüssle,
Frank
Hab auf Github schon ein issue eröffnet, ob es nicht möglich wäre auf plain Latin1 per Parameter ohne die Symbole zu beschränken - der Entwickler findet die Idee gut 😇

Warten wir mal ab. Prost 🍻

Antworten

Zurück zu „CUxD“