NEWS
Node-red basierter Abruf des Fernsehprogramms von rtv.de
-
Hallo,
der TV-Spielfilm-Adapter läuft richtig gut, aber leider ist der RSS-Feed von TV-Spielfilm mehr als lückenhaft. Deswegen habe ich eine Alternative gesucht, die auch die Sky-Sender sowie viele ausländische Sender enthält. http://www.rtv.de/ bietet eine brauchbare Auswahl und stellt die Daten ebenfalls per rss-Feed bereit. Deswegen habe ich meine Lösung darauf aufgebaut. Die redaktionellen Teile und Bilder sind war etwas schlechter als bei TV-Spielfilm, aber dafür sind fast alle relevanten Sender aus Deutschland, Östereich und der Schweiz und auch Pay-TV enthalten.
Ich hab das ganze in node-red umgesetzt, weil das aus meiner Sicht erstmal flexibler ist und einfacher angepasst werden kann. Außerdem gehört zum Flow auch noch ein Stück der Anzeigelogik in vis.
Mein Flow ließt periodisch die folgenden rss-Feeds aus:
-
Aktuelles Programm (alle 5 Minuten)
-
Filmtipps (alle 60 Minuten)
-
Programm 20:15 (alle 4 Stunden)
-
Programm 22:00 (alle 4 Stunden)
Die Programme können über eine Whitelist gefiltert und sortiert werden. Die Whitelist ist ein json-Objekt, in dem nicht nur die Sender, sondern auch die Kanalnummern auf der Fernbedingung und die Gruppenzuordnung (n:m) festgelegt werden kann.
Die Anzeige erfolgt in einem einzigen json Table Widget, wobei die Anzeige sowohl swischen den Feeds umschalten als auch nach den definierten Gruppen filtern kann. Der Inhalt des json-States wird dann über node-red dynamisch angepasst. Ansonsten sieht die Tabelle erstmal ziemlich ähnlich aus, wie die vom TV-Spielfilm-Adapter.
Für die Umschaltung der Sender z.B. über den Harmony-Adapter oder über eine IR-Diode am Raspberry habe ich Client-seitig eine Javascript-Funktion eingebaut, die über XMLHttpRequest eine Rest-API (z.B. ioBroker direkt oder node-red) aufrufen kann.
Falls Interesse besteht, kann ich die Lösung hier gerne mal veröffentlichen.
Markus
-
-
Hallo,
mich würde sehr der Flow interessieren.
Es währe super wenn du diesen Posten könntest.
Grüße
Daniel
-
Hallo rde-master,
ok, dann versuche ich mal die Installation so gut wie möglich zu beschreiben. Leider geht das mit node-red nicht so komfortabel wie bei den Adaptern.
Anlegen des Abbildungsverzeichnisses
In der Datei sender.zip sind die Icons der Sender, ich bisher aktiviert habe, und noch ein paar Icons für die Steuerung der edit-Seite. Diese Dateien am besten in ein neues Unterverzeichnis unterhalb des vis-Projektordners kopieren (z.B. in /opt/iobroker/iobroker-data/files/vis.0/main/img/sender)
Die Logos stammen von https://github.com/3PO/Senderlogos. Falls Sender aufgenommen werden sollen, für die noch kein Bild da ist, kann dies einfach in den Order kopiert werden. Der Dateiname muss aber ggf. angepasst werden, weil dieser dem Sendernamen im RSS in Kleinbuchstaben entsprechen muss. Außerdem werden alle anderen Zeichen als [a..z0..9] entfernt.
Anlegen der States in ioBroker
Der Flow legt die States nicht selbst an. Diese müssen über die Admin-Seite importiert werden. Dafür ist die Datei tv-Flow-States.json.txt da.
Diesen kann man über folgende Funktion importieren:
Alle States befinden sich hoffentlich anschließend unter node-red.0.tvImportieren des Node-red-Flows
Dafür am besten auf einer neuen Seite den Flow aus Datei node-red tv flow.json.txt importieren und Deploy drücken.
Im Node-Red-Flow selbst sollten eigentlich keine Einstellungen erforderlich sein. Alle Parameter befinden sich in ioBroker-States.
Importieren des CSS für die Tabellenanzeige in das VIS-Projekt
Die Datei TV View Style.css.txt enthält die Syle-Informationen für die Tabellen. Den Inhalt am besten in den Projektteil reinkopieren.
Die Style-Angaben können natürlich im Anschluss an die eigenen Vorstellungen angepasst werden.
Importieren der Widgets für die Edit-Seite
Ich habe die Lösung in dieser Woche üm einen View erweitert, über den alle Konfigurationen vorgenommen werden können. Diese Widgets aus Datei tv edit.json.txt auf einen neuen View importieren.
Die Seite sollte dann in etwa so aussehen:
Die Channel-Whitelist ist jedoch zurzeit noch leer. Auch dürften die Bilder noch nicht korrekt angezeigt werden.
Wichtig ist, zunächst einmal die Grundeinstellungen ganz unten vorzunehmen:
Unter Image Verzeichnis url ist der Pfad auf das Image-Verzeichnis einzutragen, in dem die Bilder rein kopiert wurden. Damit dies später vielleicht auch noch mit der Android-App funktioniert, sollte dies am besten mit einem lokalen absoluten Pfad erfolgen. Also z.B.````
/vis.0/main/img/senderAm Ende darf kein "/" stehen. Unter __node red url__ ist die url des Node-Red-Servers anzugeben. Dieser muss unter dieser URLvom Client aus für die Funktionen der Edit-Seite erreichbar sein. Auch hier darf am Ende kein "/" stehen. Anschießend die Seite im Browser neu laden und auf den Schalter __Refesh__ drücken. Es werden dann schonmal alle Sender abgerufen und in der unteren Tabelle angezeigt. Jetzt kann man entweder die Whitelist komplett von Hand befüllen, indem man einen Sender aus der unteren Liste auswählt, rechts daneben die Eigenschaften ausfüllt und dann auf speichern klickt. Oder man kann meine Whitelist über die Admin-Seite von ioBroker in den State kopieren und diese dann nach den eigenen Wünschen abändern. Nach den einkopieren ist aber noch eine Änderung in einem der beiden Felder erforderlich, weil erst dadurch die Links in der einkopierten Whitelist angepasst werden. In der oberern Tabelle sieht man alle Einträge in der Whitelist. Nur Sender, die sich in der Whitelist befinden, werden auch angezeigt. Über die Icons in der letzten Spalte können Einträge verschoben, in das Edit-Feld kopiert oder gelöscht werden. Für jeden Sender kann die Kanalnummer auf der Fernbedienung eingegeben sowie mehrere Kategorien ausgewählt werden. Diese dienen nacher zur Einschränkung der angezeigten Sender. Weitere Einstellmöglichkeiten: Über die Genre-Blacklist können Genre festgelegt werden, die nicht angezeigt werden sollen. Die Liste ist durch "," getrennt. Ein Eintrag muss genau dem Genre-Text vor dem ersten "," entsprechen, damit eine Sendung ausgeblendet wird. Über Highlight-Keywords können Sendungen als Tip markiert werden, wenn im Titel das angegebene Schlüsselwort enthalten ist. Über die Titel Blacklist können Schlüsselworter eingegeben werden, die zum Ausblenden einer Sendung führt, wenn eines der Schlüsselwörter im Titel enthalten ist. Nach Anpassung der Daten kann man auf den Schalter __Refresh__ drücken, um alle RSS-Feeds neu abzurufen und die geänderten Attribute anzuwenden. Ansonsten erfolgt der Abruf der RSS-Feeds erst wieder mit der nächsten Regel-Aktualisierung. ****Importieren des VIS Anzeige-Views**** Zum Schluss ist natürlich auch noch der View für die Anzeige zu importieren. Dieser sollte in dasselbe Projekt aber auf einen anderen View wie der Edit-Dialog importiert werden. Die Widgets befinden sich in der Datei __TV View Widgets.json.txt__. Nach dem Import sollte die Anzeige dann in etwa so aussehen:  So, ich hoffe, dass war jetzt nicht zu kompliziert und klappt auch so wie beschrieben. Ich hab leider kein freies Testsystem und kann die Installationsanleitung nicht vorher ausprobieren. Es fehlt noch eine kleine Ergänzung, die die Konfigurationsparameter in eine json-Datei sichert und nach einem Neustart wieder herstellt. Das mache ich am WE noch. mfg Markus
-
Erst einmal vielen Dank für deine Mühe, die gute Anleitung sowie die Dateien.
Ich bin noch totale Anfängerin, habe aber deine Anleitung Step by Step befolgt und soweit ich es überschauen kann, ist auch alles soweit korrekt angelegt.
Allerdings habe ich im View, wo die grundlegenden Einstellungen vorgenommen werden, keinerlei "nicht zugewiesene" TV-Programme. Da ich keinen Plan habe, wo ich nach einem Fehler suchen könnte, bitte ich hier mal um Unterstützung.
-
Hallo marloross,
die Listen verwenden Variablen unter node-red.0, die vorhanden sein müssen und die von den node-red Flows ab Abruf gefüllt werden.
Laufen bei dir die Flows ohne Fehler durch?
Gesendet von meinem GT-N8000 mit Tapatalk
-
danke für die schnelle Antwort. Ein Teil der Variablen scheint ok, andere sind leer. Aber wie gesagt, ich bin Anfängerin und weiß noch nicht, wie und wo ich Fehler eingrenzen kann.
Nachtrag: habe jetzt Debug-Informationen eingeschaltet bekommen, darin steht "msg : string [23] Unexpected end of input". Klicke ich das an, wird im Flow "Konvertiere String nach JSON" hervorgehoben.
Noch ein Nachtrag: Auch im Log des ioBroker wird nach jedem Refresh des Browsers der o.g. Fehler angezeigt
Nachtrag: Wenn ich das richtig verstehe, werden sowohl das Verzeichnis der Logos noch die Adresse zum Node-Red akzeptiert (im ioBroker erscheint im Dialog "bestätigt: false".
-
Heute folgendes durchgeführt:
- Node-Red gelöscht und neu aufgesetzt (über Befehlskonsole Raspi)
Noch einmal alle Arbeitsschritte durchgeführt
Ergebnis: Zumindest sind jetzt unter "nicht zugewiesene" Sender zu sehen, aber diese lassen sich nicht in die Whiteliste kopieren oder anders bearbeiten.
ioBroker-Log zeigt solche Fehlermeldungen:
` > [error] [json:Konvertiere String nach JSON] Unexpected end of input[error] [json:f61158b.60c92a8] Unexpected end of input
[error] [json:f61158b.60c92a8] Unexpected token Z `
-
Das Feld mit den aktuell konfigurierten Sendern scheint leer zu sein. Deswegen klappt wahrscheinlich das Einlesen der Daten nicht.
Gehe mal mit iobroker.admin auf den Reiter Objekte. Dann darunter den folgenden Wert aufklappen:
node-red.0.tv.channel
Klicke mal hinten auf die Spalte Wert und kopiere den folgenden Text komplett da rein:
! [{"name":"Das Erste","channelID":"1","groups":["Hauptsender","Öffentlich"],"action":" []("javascript:changeWhitelist('1','Das) []("javascript:changeWhitelist('2','Das) []("javascript:changeWhitelist('3','Das) []("javascript:changeWhitelist('4','Das)"},{"name":"ZDF","channelID":"2","groups":["Hauptsender","Öffentlich"],"action":" "},{"name":"RTL","channelID":"4","groups":["Hauptsender","Privat"],"action":" "},{"name":"RTL II","channelID":"6","groups":["Hauptsender","Privat"],"action":" []("javascript:changeWhitelist('1','RTL) []("javascript:changeWhitelist('2','RTL) []("javascript:changeWhitelist('3','RTL) []("javascript:changeWhitelist('4','RTL)"},{"name":"Sat.1","channelID":"5","groups":["Hauptsender","Privat"],"action":" "},{"name":"ProSieben","channelID":"7","groups":["Hauptsender","Privat"],"action":" "},{"name":"kabel eins","channelID":"8","groups":["Hauptsender","Privat"],"action":" []("javascript:changeWhitelist('1','kabel) []("javascript:changeWhitelist('2','kabel) []("javascript:changeWhitelist('3','kabel) []("javascript:changeWhitelist('4','kabel)"},{"name":"Tele 5","channelID":"11","groups":["Hauptsender","Privat"],"action":" []("javascript:changeWhitelist('1','Tele) []("javascript:changeWhitelist('2','Tele) []("javascript:changeWhitelist('3','Tele) []("javascript:changeWhitelist('4','Tele)"},{"name":"VOX","channelID":"9","groups":["Hauptsender","Privat"],"action":" "},{"name":"RTL NITRO","channelID":"14","groups":["Hauptsender","Privat"],"action":" []("javascript:changeWhitelist('1','RTL) []("javascript:changeWhitelist('2','RTL) []("javascript:changeWhitelist('3','RTL) []("javascript:changeWhitelist('4','RTL)"},{"name":"RTL Plus","channelID":"1","groups":["Hauptsender","Privat"],"action":" []("javascript:changeWhitelist('1','RTL) []("javascript:changeWhitelist('2','RTL) []("javascript:changeWhitelist('3','RTL) []("javascript:changeWhitelist('4','RTL)"},{"name":"Super RTL","channelID":"10","groups":["Hauptsender","Privat","Kinder"],"action":" []("javascript:changeWhitelist('1','Super) []("javascript:changeWhitelist('2','Super) []("javascript:changeWhitelist('3','Super) []("javascript:changeWhitelist('4','Super)"},{"name":"sixx","channelID":"12","groups":["Hauptsender","Privat"],"action":" "},{"name":"TLC","channelID":"18","groups":["Hauptsender","Privat"],"action":" "},{"name":"Pro7 MAXX","channelID":"13","groups":["Hauptsender","Privat"],"action":" []("javascript:changeWhitelist('1','Pro7) []("javascript:changeWhitelist('2','Pro7) []("javascript:changeWhitelist('3','Pro7) []("javascript:changeWhitelist('4','Pro7)"},{"name":"Disney Channel","channelID":"1","groups":["Hauptsender","Privat","Kinder"],"action":" []("javascript:changeWhitelist('1','Disney) []("javascript:changeWhitelist('2','Disney) []("javascript:changeWhitelist('3','Disney) []("javascript:changeWhitelist('4','Disney)"},{"name":"SAT.1 Gold","channelID":"19","groups":["Hauptsender","Privat"],"action":" []("javascript:changeWhitelist('1','SAT.1) []("javascript:changeWhitelist('2','SAT.1) []("javascript:changeWhitelist('3','SAT.1) []("javascript:changeWhitelist('4','SAT.1)"}]
Ich hab da jetzt dein Image-Verzeichnis aus dem Screenshot rein kopiert.
-
Danke für die Rückmeldung. Der Text ist ja schon drin, aber ich kann nichts in die Whitelist verschieben.
Kontextmenü im ioBroker meldet:
Wert: [Adresse des Node-Adapters; Verzeichnis Senderlogos]
Bestätigt: false
Zeitstempel: […..]
letzte Änderung: […..]
Quelle: system.adapter.web.0
Quality: ok
Nachtrag: Könnte es am simply web adapter liegen? Eigentlich sollte doch auch der entsprechende Ordner im Bereich Objekte zu sehen sein oder?
-
Entschuldige die langen Antwortzeiten aber ich bin zurzeit beruflich ziemlich unter Wasser…
Kommen irgendwelche Fehlermeldungen in node-red?
Die Version oben ist etwas veraltet. Wenn ich mich richtig erinnere, kommuniziert diese noch direkt mit node-red und geht nicht über den Web-Adapter.
Dafür muss unbedingt die url von Nodered richtig eingetragen und anschließend der Schalter Reese gedrückt werden.
Ich hab das bei mir alles auf Kommunikation über den js-controller umgestellt, komme aber zurzeit nicht dazu, dies hier rein zu stellen.
Da zurzeit auch an einem iobroker Adapter für iobroker gebastelt wird glaube ich auch nicht, dass daran noch viele interessiert sind.
Gesendet von meinem GT-N8000 mit Tapatalk