TCL und Sonderzeichen in Variablen

Homematic-, TCL- und Shell-Script, Toolchain, C, etc.

Moderator: Co-Administratoren

Antworten
Henk
Beiträge: 115
Registriert: 17.06.2012, 16:07

TCL und Sonderzeichen in Variablen

Beitrag von Henk » 07.02.2013, 12:14

Hallo,

ich habe ein Problem mit einem TCL Script.
Es geht um eine Wettervorhersage siehe http://homematic-forum.de/forum/viewtop ... =19&t=9867. Das Script an sich funktioniert soweit, nur bei der Übergabe der Werte werden keine Sonderzeichen übermittelt zB Regen möglich wird ohne ö in die Varible geschrieben.

Wenn ich das Script über Telnet starte und ich mir das Ergebnis in der Konsole anzeigen lasse, stehen die korrekten Werte da.
Ebenfalls werden Sonderzeichen in der Variablen angezeigt, wenn ich sie über die WEBUI direkt befülle.

Hier mal das Script und ein paar Screenshots

Code: Alles auswählen

                #!/bin/tclsh

                load tclrega.so

                #
                # Read weather data
                #
                set url http://api.wunderground.com/api/xxxxx/forecast/lang:DL/q/germany/xxxxx.xml
                exec /usr/bin/wget -q -O /usr/local/addons/wettervorhersage/wetterwunderground.xml $url

                set f [open "/usr/local/addons/wettervorhersage/wetterwunderground.xml"]
                set input [read $f]
                close $f


                #
                # goto section with forecast
                #
                regexp "<simpleforecast>(.*?)</simpleforecast>" $input dummy text  ; #get second forecast section
                regexp "<forecastday>(.*?)</forecastday>.*?<forecastday>(.*?)</forecastday>.*?<forecastday>(.*?)</forecastday>.*?<forecastday>(.*?)</forecastday>" $text -> day0 day1 day2 day3 ; #split days

                #day0
                regexp "<high>(.*?)</high>" $day0 dummy temp  ; #get high values
                regexp "<celsius>(.*?)</celsius>" $temp dummy max0  ; #get deg Celsius
                regexp "<low>(.*?)</low>" $day0 dummy temp  ; #get low values
                regexp "<celsius>(.*?)</celsius>" $temp dummy min0  ; #get deg Celsius
                regexp "<conditions>(.*?)</conditions>" $day0 dummy conditions0  ; #get conditions

           #day1
                regexp "<high>(.*?)</high>" $day1 dummy temp  ; #get high values
                regexp "<celsius>(.*?)</celsius>" $temp dummy max1  ; #get deg Celsius
                regexp "<low>(.*?)</low>" $day1 dummy temp  ; #get high values
                regexp "<celsius>(.*?)</celsius>" $temp dummy min1  ; #get deg Celsius
                regexp "<conditions>(.*?)</conditions>" $day1 dummy conditions1  ; #get conditions

           #day2
                regexp "<high>(.*?)</high>" $day2 dummy temp  ; #get high values
                regexp "<celsius>(.*?)</celsius>" $temp dummy max2  ; #get deg Celsius
                regexp "<low>(.*?)</low>" $day2 dummy temp  ; #get high values
                regexp "<celsius>(.*?)</celsius>" $temp dummy min2  ; #get deg Celsius
                regexp "<conditions>(.*?)</conditions>" $day2 dummy conditions2  ; #get conditions

           #day3
                regexp "<high>(.*?)</high>" $day3 dummy temp  ; #get high values
                regexp "<celsius>(.*?)</celsius>" $temp dummy max3  ; #get deg Celsius
                regexp "<low>(.*?)</low>" $day3 dummy temp  ; #get high values
                regexp "<celsius>(.*?)</celsius>" $temp dummy min3  ; #get deg Celsius
                regexp "<conditions>(.*?)</conditions>" $day3 dummy conditions3  ; #get conditions


                set day0_text "$min0 bis $max0 °C $conditions0"
                set day1_text "$min1 bis $max1 °C $conditions1"
                set day2_text "$min2 bis $max2 °C $conditions2"
                set day3_text "$min3 bis $max3 °C $conditions3"
             

                set day0_text          [string map {"ü" "ü" "ö" "ö" "°" "°"}  $day0_text]
                set day1_text          [string map {"ü" "ü" "ö" "ö" "°" "°"}  $day1_text]
                set day2_text          [string map {"ü" "ü" "ö" "ö" "°" "°"}  $day2_text]
                set day3_text          [string map {"ü" "ü" "ö" "ö" "°" "°"}  $day3_text]

             puts $day0_text
             puts $day1_text
              puts $day2_text
              puts $day3_text

                #
                # set ReGaHss variables
                #
                set rega_cmd ""
                append rega_cmd "var w0 = dom.GetObject('con0');"
                append rega_cmd "var w1 = dom.GetObject('con1');"
                append rega_cmd "var w2 = dom.GetObject('con2');"
                append rega_cmd "var w3 = dom.GetObject('con3');"
               
                append rega_cmd "w0.State('$day0_text');"
                append rega_cmd "w1.State('$day1_text');"
                append rega_cmd "w2.State('$day2_text');"
                append rega_cmd "w3.State('$day3_text');"
             
                rega_script $rega_cmd
Bild

Bild

Hat jemand eine Idee was da schief läuft?

Gruß
Henk

MaxWrestler
Beiträge: 237
Registriert: 11.12.2011, 12:19
Danksagung erhalten: 1 Mal

Re: TCL und Sonderzeichen in Variablen

Beitrag von MaxWrestler » 07.02.2013, 13:43

Hallo Henk,

ersetze mal diesen Programmabschnitt:

Code: Alles auswählen

                set day0_text "$min0 bis $max0 °C $conditions0"
                set day1_text "$min1 bis $max1 °C $conditions1"
                set day2_text "$min2 bis $max2 °C $conditions2"
                set day3_text "$min3 bis $max3 °C $conditions3"
             

                set day0_text          [string map {"ü" "ü" "ö" "ö" "°" "°"}  $day0_text]
                set day1_text          [string map {"ü" "ü" "ö" "ö" "°" "°"}  $day1_text]
                set day2_text          [string map {"ü" "ü" "ö" "ö" "°" "°"}  $day2_text]
                set day3_text          [string map {"ü" "ü" "ö" "ö" "°" "°"}  $day3_text]
durch folgende Zeilen:

Code: Alles auswählen

set day0_text [encoding convertfrom identity [string map {. ,} "$min0 bis $max0 °C $conditions0"]]
set day1_text [encoding convertfrom identity [string map {. ,} "$min1 bis $max1 °C $conditions1"]]
set day2_text [encoding convertfrom identity [string map {. ,} "$min2 bis $max2 °C $conditions2"]]
set day3_text [encoding convertfrom identity [string map {. ,} "$min3 bis $max3 °C $conditions3"]]
nur so in blaue geraten.....

grüße MaxW.

Henk
Beiträge: 115
Registriert: 17.06.2012, 16:07

Re: TCL und Sonderzeichen in Variablen

Beitrag von Henk » 07.02.2013, 14:02

Jep, genau das war es. Jetzt funktioniert es...

Vielen Dank MaxWrestler

Könntest du mir vielleicht noch die Funktionsweise von

Code: Alles auswählen

[encoding convertfrom identity [string map {. ,}
erklären?

Gruß
Henk

Henk
Beiträge: 115
Registriert: 17.06.2012, 16:07

Re: TCL und Sonderzeichen in Variablen

Beitrag von Henk » 07.02.2013, 14:08

Jetzt gerade ist mir aufgefallen, dass die Ausgabe im Terminal so aussieht
-2 bis 5 �C Teils Wolkig

Schon irgendwie komisch...

MaxWrestler
Beiträge: 237
Registriert: 11.12.2011, 12:19
Danksagung erhalten: 1 Mal

Re: TCL und Sonderzeichen in Variablen

Beitrag von MaxWrestler » 07.02.2013, 14:21

Henk hat geschrieben:Jep, genau das war es. Jetzt funktioniert es...

Vielen Dank MaxWrestler

Könntest du mir vielleicht noch die Funktionsweise von

Code: Alles auswählen

[encoding convertfrom identity [string map {. ,}
erklären?

Gruß
Henk
Nö, leider.
Ich habs gegooglt. :D
Henk hat geschrieben:Jetzt gerade ist mir aufgefallen, dass die Ausgabe im Terminal so aussieht
-2 bis 5 �C Teils Wolkig

Schon irgendwie komisch...
Aber in der WebUi wird es jetzt richtig dargestellt ? :(

Henk
Beiträge: 115
Registriert: 17.06.2012, 16:07

Re: TCL und Sonderzeichen in Variablen

Beitrag von Henk » 07.02.2013, 14:33

Ja da steht es richtig und das ist das Wichtigste!

Danke

Antworten

Zurück zu „Softwareentwicklung für die HomeMatic CCU“