Dummy mit String aus PERL im Reading befüllen

Begonnen von butschek, 23 August 2021, 18:09:03

Vorheriges Thema - Nächstes Thema

butschek

Hallo zusammen

vermutlich stelle ich mich mal wieder zu blöd an.
Kann mir jemand auf die Sprünge helfen, was ich falsch mache?

Folgendes möchte ich abbilden:
Ein AT wird in bestimmten Zeitabständen (alle 60sec) ausgeführt und holt über eine PERL FUnktion die letzten 20 RSS Tickerhotlines ab. Dies funktioniert gut und kann ich mit  folgendem Aufruf auf der Commandzeile der Oberfläche auch machen

{ tagesschau("html",20) }

Als Rückgabe erhalte ich HTML code mit 20 Listitems wie folgt (gekürzt auf 3):

<ul>
<li><a href="https://www.tagesschau.de/investigativ/wdr/bnd-mudschaheddin-101.html" target="_blank">Als der BND die Mudschaheddin unterstützte</a></li>
<li><a href="https://www.tagesschau.de/inland/pflege-zuhause-corona-101.html" target="_blank">Studie: Pflegehaushalte sind die "Vergessenen der Pandemie"</a></li>
<li><a href="https://www.tagesschau.de/ausland/amerika/usa-corona-biontech-zulassung-101.html" target="_blank">BioNTech/Pfizer-Impfstoff erhält vollständige US-Zulassung</a></li>
</ul>


Damit diese Headlines stets aktuell sind, habe ich besagtes AT erstellt:

Internals:
   CFGFN     
   COMMAND    setreading Newsticker newstext {tagesschau("html",20)}
   DEF        +*00:01:00 setreading Newsticker newstext {tagesschau("html",20)}
   FUUID      6120c962-f33f-2131-cbf4-51dd6624eea2d52d
   NAME       at_newsticker
   NR         154
   NTM        18:01:26
   PERIODIC   yes
   RELATIVE   yes
   REP        -1
   STATE      Next: 18:01:26
   TIMESPEC   00:01:00
   TRIGGERTIME 1629734486.89956
   TRIGGERTIME_FMT 2021-08-23 18:01:26
   TYPE       at
   Helper:
     DBLOG:
       state:
         DBLogging:
           TIME       1629538658.13246
           VALUE      Next: 13:39:38
   READINGS:
     2021-08-23 18:00:26   state           Next: 18:01:26
Attributes:
   DbLogExclude .*
   room       Komm-Zentrale


Aufnehmen sollte die Rückgabe eigentlich mein DUMMY namens Newsticker.
Dessen Konfiguration ist wie folgt:

Internals:
   CFGFN     
   FUUID      6123404f-f33f-2131-d88d-0d94d069d3beb822
   NAME       Newsticker
   NR         8928
   STATE      ???
   TYPE       dummy
   READINGS:
     2021-08-23 18:04:26   newstext        {tagesschau("html",20)}
Attributes:
   DbLogExclude .*
   room       Komm-Zentrale
   userReadings newstext



Aber ihr seht schon im Reading was da schief läuft. Er soll mir nicht den Aufruf, sondern das Ergebnis in das Reading schreiben. Das ist doch wahrscheinlich ein ganz banaler Fehler???  >:( >:( >:(

Kann mich da jemand auf die richtige Spur bringen. Habe schon einiges gelesen, aber irgendwie nicht das richtige gefunden.

Viele Grüße
Holger

DS_Starter

Hallo Holger,

der FHEM Befehl setreading nutzt den Term "{tagesschau("html",20)}" als normalen Text und trägt ihn in das Dummy-Reading ein anstatt ihn als Funktion zu behandeln.

Am einfachsten ist es wahrscheinlich in dein Script (in der 99_myUtils.pm ?) eine solche Zeile aufzunehmen:

fhem("setreading Newsticker newstext $lines")

Dabei enthält $lines dein Abfrageergebnis der tagesschau.
Wenn du den Code von "tagesschau" posten würdest, wäre es vllt. einfach die Stelle zu benennen.

Grüße,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

butschek

Hallo Heiko,

das war die Lösung. Verhält es sich also so, dass in einem Setreading der Text in geschweiften Klammern nicht mehr geparst wird?

Aber es funktioniert jetzt und ich kann den zusammen gesetzten HTML-Coder problemlos in meinem TabletUI anzeigen.

Vielen Dank Dir.
LG
Holger

DS_Starter

Verhält es sich also so, dass in einem Setreading der Text in geschweiften Klammern nicht mehr geparst wird?
So ist es. Steht auch nix davon in der Commandref:
http://fhem.de/commandref_DE.html#setreading

LG
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Otto123

Hallo Holger,

was Du in deinem at machen wolltest ist "set magic" - das geht aber so:
setreading Newsticker newstext {(tagesschau("html",20))}

Siehe auch Doku set: https://fhem.de/commandref_modular_DE.html#set

und set magic funktioniert auch bei setreading :) auch wenn es da nicht extra steht

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

DS_Starter

Zitatund set magic funktioniert auch bei setreading :) auch wenn es da nicht extra steht
ah, wieder was gelernt.  :D

Wahrscheinlich vergesse ich es beim nächsten mal wieder.  :o
Bis bald Otto !

Grüße,
Heiko
Proxmox+Debian+MariaDB, PV: SMA, Victron MPII+Pylontech+CerboGX
Maintainer: SSCam, SSChatBot, SSCal, SSFile, DbLog/DbRep, Log2Syslog, SolarForecast,Watches, Dashboard, PylonLowVoltage
Kaffeekasse: https://www.paypal.me/HMaaz
Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/DS_Starter

Otto123

es steht allerdings bei set  ;)
ZitatAb featurelevel 5.7 ersetzt der set und setreading Befehl
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

butschek

Hallo zusammen

habe es nun wie von euch vorgeschlagen umgebaut. Damit funktioniert es nun ebenfalls einwandfrei und ist vom Ansatz her sauberer, als wenn ich aus dem Skript das Reading heraus belege.

Vielen Dank.
LG und ein schönes Wochenende.

Holger

betateilchen

Zitat von: butschek am 23 August 2021, 18:09:03
Ein AT wird in bestimmten Zeitabständen (alle 60sec) ausgeführt und holt über eine PERL FUnktion die letzten 20 RSS Tickerhotlines ab.

Hinweis: es macht wenig Sinn, den tagesschau Server alle 60 Sekunden mit einem Request zu bombardieren.
Erfahrungsgemäß reicht es völlig, alle 15 Minuten zu aktualisieren, ohne Nachrichten zu verpassen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: DS_Starter am 23 August 2021, 20:24:28
Wahrscheinlich vergesse ich es beim nächsten mal wieder.  :o

ich auch, weil dieses Vermischen von perl Code und FHEM Befehlen einfach nur ein Krampf und für mich komplett unlogisch ist  8)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Wernieman

Zitat von: betateilchen am 10 September 2021, 16:39:26
Hinweis: es macht wenig Sinn, den tagesschau Server alle 60 Sekunden mit einem Request zu bombardieren.
Erfahrungsgemäß reicht es völlig, alle 15 Minuten zu aktualisieren, ohne Nachrichten zu verpassen.

Mann sollte sich grundsätzlich Informieren (also nicht nur bei diesem Projekt), was für eine Last man denn erzeugt und was Notwendig ist. Ansonsten könnte es auch passieren, das der Zielserver einen aussperrt .... oder man einen "netten Brief" bekommt.
- Bitte um Input für Output
- When there is a Shell, there is a Way
- Wann war Dein letztes Backup?

Wie man Fragen stellt: https://tty1.net/smart-questions_de.html

butschek

Guter Punkt Betateilchen

der Zyklus von 60 Sekunden war noch aus meiner Zeit des Testens. Vielen Dank für den Hinweis. Habe es nun auf 15 Minuten hoch gesetzt.

VG
Holger

betateilchen

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!