Also die detaillierte Beschreibung!
---- DER WSWIN-TEIL ---------
Im wswin-Verzeichnis ist die Datei custom.txt anzulegen:
Code: Alles auswählen
<!-- %customfile=hmwetter.xml% -->
<response>
<wsversion>%ws_vers%</wsversion>
<station_id>Wunderground: IXXXXXXX, AWEKAS: nnnnn</station_id>
<current_observation>
%unit_off%
%alwaysseppoint_on%
<observation_time>%ws_date%, %ws_time%</observation_time>
<weather>%forecast_txt%</weather>
<temp_c>%curval[2]%</temp_c>
<relative_humidity>%curval[18]%</relative_humidity>
<wind_string>%curval[35]% km/h aus %wind_txt%</wind_string>
<wind_dir>%curval[36]% Grad / %wind_txt%</wind_dir>
<wind_degrees>%curval[36]%</wind_degrees>
<wind_kph>%curval[35]%</wind_kph>
<wind_gust_kph>%curval[45]%</wind_gust_kph>
<pressure_mb>%curval[33]%</pressure_mb>
<pressure_trend>%ws_baro6h% hPa/6h</pressure_trend>
<windchill_c>%curval[44]%</windchill_c>
</current_observation>
</response>
Diese muss bei den Interneteinstellungen bei wswin aktiviert werden. Dann wird sie entsprechend erzeugt, d.h. die Variablen werden durch die Werte ersetzt und die Datei mit dem in Zeile 1 festgelegten Namen im Verzeichnis der Wetterdaten abgelegt. Was dann so aussieht:
Code: Alles auswählen
<response>
<wsversion>V2.99.1 </wsversion>
<station_id>Wunderground: x, AWEKAS: n</station_id>
<current_observation>
<observation_time>20.04.2018, 19:30</observation_time>
<weather>stürmisch</weather>
<temp_c>25.8</temp_c>
<relative_humidity>49</relative_humidity>
<wind_string>1.0 km/h aus O-NO</wind_string>
<wind_dir>67 Grad / O-NO</wind_dir>
<wind_degrees>67</wind_degrees>
<wind_kph>1.0</wind_kph>
<wind_gust_kph>2.1</wind_gust_kph>
<pressure_mb>1018.6</pressure_mb>
<pressure_trend>-7.2 hPa/6h</pressure_trend>
<windchill_c>25.8</windchill_c>
</current_observation>
</response>
---- DER WINSCP- und WINDOWS-AUFGABENPLANER-TEIL ---------
Nun benutze ich WINSCP als FTP-Programm. Hier kann man wunderbar ein Batch-Programm erzeugen welches die oben erzeugte Datei irgendwo hin überträgt. Bei mir ist das logischerweise das addons-Verzeichnis der CCU2. Die cmd und die WINSCP-Datei sehen so aus:
Code: Alles auswählen
"C:\Program Files (x86)\WinSCP\WinSCP.exe" /log="d:\-pfad-\WinSCP.log" /ini=nul /script="C:\-pfad-\wettertransfer.txt"
Die wettertransfer.txt (DIE WIRD AUS WINSCP GENERIERT!!!):
Code: Alles auswählen
open sftp://ccu2-user:ccu-passwort@192.168.nnn.nnn/ -hostkey="ecdsa-sha2-nistp256 256 ----key----=" -rawsettings FSProtocol=2
option confirm off
lcd D:\Internet\wetter\
cd /usr/local/addons/wetter
put hmwetter.xml
exit
Dieses FTP-Skript wird vom Windows-Aufgabenplaner alle nn Minuten aufgerufen und schreibt so die jeweilige Werte-XML-Datei auf die CCU2.
---- DER HOMEMATIC-TEIL ---------
Auf der CCU2 liegt im selben addons-Verzeichnis (hier addons/wetter) das tcl-Skript. Dieses wird dann alle nn Minuten über ein stinknormales WebUI-Programm aufgerufen und schreibt die Werte aus der XML-Datei die von wswin geliefert wird in die Systemvariablen der Homematic.
Code: Alles auswählen
load tclrega.so
# Variablen:
# Wetter-Aktualisierung Zeichenkette
# Wetter-Bedingungen Zeichenkette
# Wetter-Temperatur Zahl (°C)
# Wetter-Windgeschwindigkeit Zahl (km/h)
# Wetter-Windboeen Zahl (km/h)
# Wetter-Windrichtung Zeichenkette
# Wetter-Windbedingungen Zeichenkette
# Wetter-Luftdruck Zahl (mb)
# Wetter-Luftdrucktrend Zeichenkette
# Wetter-Luftfeuchte Zeichenkette
set pressure_mb 0
# Kein Aufruf von WUG mehr! Die Daten kommen direkt von PC-Wetterstation in der Datei hmwetter.xml
set f [open "/usr/local/addons/wetter/hmwetter.xml"]
set input [read $f]
close $f
#
# goto section with current observation
#
regexp "<current_observation>(.*?)</current_observation>" $input dummy current ; #get current observation
#
regexp "<observation_time>(.*?)</observation_time>" $current dummy observation_time ; # letzter update
regexp "<weather>(.*?)</weather>" $current dummy weather ; # wetterbedingungen
regexp "<temp_c>(.*?)</temp_c>" $current dummy temp_c ; # temperatur # ZAHL
regexp "<wind_kph>(.*?)</wind_kph>" $current dummy wind_kph ; # Windgeschwindigkeit # ZAHL
regexp "<wind_gust_kph>(.*?)</wind_gust_kph>" $current dummy wind_gust_kph ; # Windboeengeschwindigkeit # ZAHL
regexp "<wind_dir>(.*?)</wind_dir>" $current dummy wind_dir ; # windrichtung
regexp "<wind_string>(.*?)</wind_string>" $current dummy wind_string ; # windbedingungen
regexp "<pressure_mb>(.*?)</pressure_mb>" $current dummy pressure_mb ; # Luftdruck #ZAHL
regexp "<pressure_trend>(.*?)</pressure_trend>" $current dummy pressure_trend ; # Luftdrucktrend
regexp "<relative_humidity>(.*?)</relative_humidity>" $current dummy relative_humidity ; # Luftfeuchte
# Abfrage ob sinnvolle Antwort von API geliefert wurde
if {$pressure_mb != 0} {
#
# set ReGaHss variables
#
set rega_cmd ""
append rega_cmd "var c0 = dom.GetObject('Wetter-Aktualisierung');"
append rega_cmd "var c1 = dom.GetObject('Wetter-Bedingungen');"
append rega_cmd "var c2 = dom.GetObject('Wetter-Temperatur');"
append rega_cmd "var c3 = dom.GetObject('Wetter-Windgeschwindigkeit');"
append rega_cmd "var c4 = dom.GetObject('Wetter-Windboeen');"
append rega_cmd "var c5 = dom.GetObject('Wetter-Windrichtung');"
append rega_cmd "var c7 = dom.GetObject('Wetter-Luftdruck');"
append rega_cmd "var c8 = dom.GetObject('Wetter-Luftdrucktrend');"
append rega_cmd "var c9 = dom.GetObject('Wetter-Luftfeuchte');"
append rega_cmd "c0.State('$observation_time');"
append rega_cmd "c1.State('$weather');"
append rega_cmd "c2.State('$temp_c');"
append rega_cmd "c3.State('$wind_kph');"
append rega_cmd "c4.State('$wind_gust_kph');"
append rega_cmd "c5.State('$wind_dir');"
append rega_cmd "c7.State('$pressure_mb');"
append rega_cmd "c8.State('$pressure_trend');"
append rega_cmd "c9.State('$relative_humidity');"
rega_script $rega_cmd
}