Hallo,
Ich möchte eine URL von Wetter Wunderground zerlegen, um ein eigenes Bild zuzuordnen zu können.
Folgendes Reading soll zerlegt werden. Ein Userreading mit dem Inhalt "nt_rain" soll entstehen.
icon_url http://icons.wxug.com/i/c/k/nt_rain.gif
Wie macht man das?
z.b. mit einer regexp
m/.*\/(\w+)\.gif$/
Ergebnis ist dann in $1 verfügbar.
Danke,
regexp habe ich in dem Modul nicht zur Verfügung.
Ich dachte an userReading.
Das geht sicher auch. Wie muss die Formel aufgestellt werden?
Der Code ist ja sicher auch dort verwendbar.
Zitat von: stefan-dd am 07 November 2016, 21:57:48
regexp habe ich in dem Modul nicht zur Verfügung.
regexps können in perl code verwendet werden.
Zitat von: stefan-dd am 07 November 2016, 21:57:48
Ich dachte an userReading.
Ich auch.
Zitat von: stefan-dd am 07 November 2016, 21:57:48
Wie muss die Formel aufgestellt werden?
Im Perl Code (https://wiki.selfhtml.org/wiki/Perl) des userReadings kannst Du mit ReadingsVal (http://fhem.de/commandref.html#perl) den Inhalt des Readings auslesen und, mit der regexp (https://wiki.selfhtml.org/wiki/Perl/Regul%C3%A4re_Ausdr%C3%BCcke) von oben, den benötigten String extrahieren. Dieser String (https://wiki.selfhtml.org/wiki/Perl/Skalare) wird in $1 gespeichert und muss von dem Perl Code zurückgegeben werden.
Danke, ich hab es hin bekommen.
bild {if (ReadingsVal($name,'icon_url','0') =~ m/.*\/(\w+)\.gif$/) {return $1;}}
Gut gemacht. Um noch etwas zu optimieren, könnte man das if weglassen und den optionalen Trigger des userReadings verwenden.
... was ich nicht verstehe: im wunderground-Modul http://fhem.de/commandref#Wunderground gibt es doch bereits entsprechende Readings mit den Icon-Namen!? Die heißen fcx_icon bzw. fcx_icon_night
Zitatfcx_icon bzw. fcx_icon_night
Eigentlich sind die ja Sinnlos, entweder ich habe dauerhaft das Nacht Icon, oder dauerhaft das Tag Icon. Eine automatische Selektion wird nur in der Icon_url gemacht.
Zitat
Gut gemacht. Um noch etwas zu optimieren, könnte man das if weglassen und den optionalen Trigger des userReadings verwenden.
Wie wäre es denn dann richtig?
so?
Zitatbild {$1 (ReadingsVal($name,'icon_url','0') =~ m/.*\/(\w+)\.gif$/)}
Funktioniert aber leider gar nicht.
Meine Variante funktioniert, setzt aber bei Fhem Start den Fehler auf den Startbildschirm:
where is a single device name, a list separated by komma (,) or a regexp. See the devspec section in the commandref.html for details.
Zitat von: stefan-dd am 08 November 2016, 16:21:52
Eigentlich sind die ja Sinnlos, entweder ich habe dauerhaft das Nacht Icon, oder dauerhaft das Tag Icon. Eine automatische Selektion wird nur in der Icon_url gemacht.
Ich verstehe Dich nicht. Das "x" in meinem Kommentar bei "fcx_icon bzw. fcx_icon_night" steht für 0, 1, 2, ... und bedeutet "heute", "morgen", "übermorgen", ...
Ich habe z.B. aktuell folgende Readings im
neuen Modul http://fhem.de/commandref#Wunderground (http://fhem.de/commandref#Wunderground) (siehe bereits mein Link in meinem Kommentar oben - verwendest Du dieses Modul überhaupt?)
fc0_icon chancerain
fc0_icon_night nt_chancerain
fc0_icon_url http://icons.wxug.com/i/c/k/chancerain.gif
fc0_icon_url_night http://icons.wxug.com/i/c/k/nt_chancerain.gif
D.h. man hat sowohl die URL zum Icon als auch den Namen des Icons, den man verwenden kann, wenn das Icon lokal vorliegt. Also genau das was Du mit Deiner Funktion erreichen möchtest. Deswegen verstehe ich es nicht.
Ich hatte an so etwas gedacht (ungetestet):
bild:icon_url:.* { ReadingsVal($name,'icon_url','0') =~ m/.*\/(\w+)\.gif$/; $1 }
Die Fehlermeldung hat aber wohl nichts mit dem userReading zu tun, da es dabei um eine falsche devspec geht.
Danke, so funktioniert der Code es.
Zitat
Icon partlycloudy
icon_url http://icons.wxug.com/i/c/k/nt_partlycloudy.gif
Es geht um das aktuelle Wetter, da geht es nicht anders. Ich habe ein Display, wo u.a. immer das aktuelle Wetter angezeigt wird. Da ist es unschön wenn in einer klaren Nacht eine Sonne angezeigt wird. Man könnte die URL selbst nehmen, da sind die Bilder nicht schön. Nimmt man das Icon, ist immer Tag. Also bleibt nur die URL zerlegen um das "nt" für die Nacht zu erhalten. Oder man springt in der Nacht zu einem anderen Icon Satz. Macht es aber auch nicht einfacher. Das ist mein Weg, und der funktioniert.
... stimmt. Jetzt sehe ich es auch. Ist aus meiner Sicht eher ein Bug des Moduls oder der API als ein Feature. Aber Du hast ja einen Workaround gefunden.