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
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
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
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
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
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
es steht allerdings bei set ;)
ZitatAb featurelevel 5.7 ersetzt der set und setreading Befehl
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
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.
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)
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.
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
Zitat von: Wernieman am 10 September 2021, 16:44:33
Mann sollte sich grundsätzlich Informieren ...
Frau und * auch :)