Zeichensatzprobleme via Scripting mit CUxD

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

Moderator: Co-Administratoren

Antworten
MarkusSt
Beiträge: 7
Registriert: 11.10.2018, 12:00
Wohnort: Büdingen
Hat sich bedankt: 2 Mal

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) 1767 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) 1767 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: 9847
Registriert: 17.02.2015, 14:45
System: Alternative CCU (auf Basis OCCU)
Wohnort: Dresden
Hat sich bedankt: 462 Mal
Danksagung erhalten: 1863 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.75.6.20240316 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal / ☕️

MarkusSt
Beiträge: 7
Registriert: 11.10.2018, 12:00
Wohnort: Büdingen
Hat sich bedankt: 2 Mal

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: 5472
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 419 Mal
Danksagung erhalten: 1071 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.
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Benutzeravatar
FBK2904
Beiträge: 454
Registriert: 22.03.2016, 17:12
System: Alternative CCU (auf Basis OCCU)
Wohnort: Bei Ludwigsburg
Hat sich bedankt: 80 Mal
Danksagung erhalten: 42 Mal

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
Grüssle,
Frank
--------------------------
System: CCU3 (RM 3.75.6.20240316) mit Stabantenne (www.stall.biz)
Geräte: 56x HM (classic) / 13x HmIP / 8x CUxD /16x virtuelle Gruppen / 4x PioTek-Tracker V4 FTTB & FAM-USB-Gateway
Addons: XML-API 2.3 / CUx-Daemon 2.11 / CUxD-Highcharts 1.45 / Programme drucken 2.6
Sonstige: SDV v5.03.04 G / AIO Creator NEO v3.1.0 mit 2x Samsung Tab SM-T580 (Root & Android 10 [LineageOS 17.1 by TALUAtXDAi])

MarkusSt
Beiträge: 7
Registriert: 11.10.2018, 12:00
Wohnort: Büdingen
Hat sich bedankt: 2 Mal

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: 454
Registriert: 22.03.2016, 17:12
System: Alternative CCU (auf Basis OCCU)
Wohnort: Bei Ludwigsburg
Hat sich bedankt: 80 Mal
Danksagung erhalten: 42 Mal

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
Grüssle,
Frank
--------------------------
System: CCU3 (RM 3.75.6.20240316) mit Stabantenne (www.stall.biz)
Geräte: 56x HM (classic) / 13x HmIP / 8x CUxD /16x virtuelle Gruppen / 4x PioTek-Tracker V4 FTTB & FAM-USB-Gateway
Addons: XML-API 2.3 / CUx-Daemon 2.11 / CUxD-Highcharts 1.45 / Programme drucken 2.6
Sonstige: SDV v5.03.04 G / AIO Creator NEO v3.1.0 mit 2x Samsung Tab SM-T580 (Root & Android 10 [LineageOS 17.1 by TALUAtXDAi])

MarkusSt
Beiträge: 7
Registriert: 11.10.2018, 12:00
Wohnort: Büdingen
Hat sich bedankt: 2 Mal

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“