Reading enthält XML, darin ist der Link zu einem Bild, das möchte ich Anzeigen

Begonnen von Jakl, 03 Juli 2020, 16:57:10

Vorheriges Thema - Nächstes Thema

Jakl

Hallo,

ich habe mich wirklich schon hoch und runter gesucht, finde aber keine Lösung.

Mit wird ein Reeding mit XML gefüllt. Darin ist ein Link, den ich gerne als Bild anzeigen würde. Wie extrahiere ich aus dem Reading den link?

Hier der Wert des Readings:

<p>
<img src="https://assets.amuniversal.com/ee6a3ca08d7f013808e1005056a9545d" alt="Dilbert by Scott Adams on Fri, 03 Jul 2020" title="Dilbert by Scott Adams on Fri, 03 Jul 2020">
</p>
<p>
<a href="https://dilbert.com/strip/2020-07-03">Source</a> -
<a href="https://www.patreon.com/bePatron?u=6855838">Patreon</a>
</p>


Ich brauch den Wert aus dem src Attribut. Daraus möchte ich ein eigenes Reading machen und das als Wert einer Weblink Definition anhängen.

Kann mir jemand helfen?
Danke und Gruß,
Jakl

Otto123

Hi,

als Denkansatz ein Oneliner für die FHEM Kommandozeile:
{my $in = '<img src="https://assets.amuniversal.com/ee6a3ca08d7f013808e1005056a9545d" alt="Dilbert by Scott Adams on Fri, 03 Jul 2020" title="Dilbert by Scott Adams on Fri, 03 Jul 2020">';;my @a = split('"', $in);;return $a[1]}

Musst Du bloß my $in=ReadingsVal() umbauen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

Gleich in devstateIcon umsetzen wenns nicht unbedingt eine Weblink Definition sein muss  :)

Für den RAW-Import:

attr <devicename> devStateIcon {my $url = ReadingsVal($name,"url","undef");;my @a = split('"', $url);;\
"<img src='$a[1]' style='width:80px;;height:80px;;'>" }


Gruß

Thomas

betateilchen

Damit kriegst Du spätestens dann ein Problem, wenn der default-Wert von ReadingsVal() gezogen wird.

Ich würde das Ganze mittels regex lösen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

TomLee

Wenn das Reading sich nicht grundsätzlich ändert und es bei dem split bleiben kann könnte man doch darüber nachdenken den default-Wert auch anzupassen:
ReadingsVal('url','url','"fhem/www/images/openautomation/scene_making_love.svg"')

Der default-Wert ist aber doch weniger das Problem, in dem Reading wird doch wohl immer was drinstehen und das Reading selbst auch existieren.
Nur ausführen wenn die Anzahl der Elemente 1 ergibt wär wohl eher angesagt.




oder so mit einem regexp:

attr url devStateIcon { my $rep = 'fhem/www/images/fhemSVG/rc_BLANK.svg';
my $img = ReadingsVal('url','url',$rep) =~ m,<img.*?src="(.*?)"[^\>]+>, ? $1 : $rep;"<img src='$img' style='width:80px;height:80px;'>"}

Jakl

Vielen Dank. Der Denkanstoß hat geholfen... ;-)

Ich habe mir ein UserReading angelegt, was mit den Beispielen von euch den Link befüllt. Und darauf reagiere ich mit einem Notify das per defmod den Weblink aktualisiert.