Hauptmenü

URL zerlegen

Begonnen von stefan-dd, 07 November 2016, 20:02:52

Vorheriges Thema - Nächstes Thema

stefan-dd

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?

dev0

#1
z.b. mit einer regexp

m/.*\/(\w+)\.gif$/

Ergebnis ist dann in $1 verfügbar.

stefan-dd

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.

dev0

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 des userReadings kannst Du mit ReadingsVal den Inhalt des Readings auslesen und, mit der regexp von oben, den benötigten String extrahieren. Dieser String wird in $1 gespeichert und muss von dem Perl Code zurückgegeben werden.


stefan-dd

Danke, ich hab es hin bekommen.
bild {if (ReadingsVal($name,'icon_url','0')  =~ m/.*\/(\w+)\.gif$/) {return $1;}}

dev0

Gut gemacht. Um noch etwas zu optimieren, könnte man das if weglassen und den optionalen Trigger des userReadings verwenden.

hartenthaler

... 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
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

stefan-dd

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.

hartenthaler

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 (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.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...

dev0

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.

stefan-dd

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.

hartenthaler

... 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.
fhem 5.8 auf RaspberryPi 3 mit HMLAN und CCU2, ZWave, JeeLink, FHZ1000 für FS20, HMS, Fritz!Box, Fritz!DECT200, Harmony, Sonos, hue, netatmo, SSCam, Wetter- und Verkehrsmodule, Chat-Bot mit RiveScript/Telegram, IFTTT, pushover, ...