Gelöst: Kodi über json-rpc fernsteuern & jederzeit aktuelle Tagesschau abspielen

Begonnen von thorschtn, 25 Oktober 2017, 23:15:00

Vorheriges Thema - Nächstes Thema

thorschtn

Ich möchte auf Zuruf immer die letzte Folge der Tagesschau gezeigt bekommen. FHEM soll dabei den Fernseher und Kodi starten (das ist ja erstmal kein Problem), über das Tagesschau-Addon die letzte Sendung auswählen, den Player starten und die letzte Folge abspielen (da wirds dann schon ein bisschen schwieriger).

Zwischenzeitlich bin ich da auch ein paar Schritte weiter:

# CALL
set Kodi jsonraw {"jsonrpc":"2.0","method":"Files.GetDirectory","params":{"directory":"plugin://plugin.video.tagesschau/","media":"files"},"id":"1"}

schreibt die Folder-Liste des Tagesschau-Addons ins FHEM-Logfile:
# READ
{"file":"plugin://plugin.video.tagesschau/?action=list_feed&feed=latest_broadcasts","filetype":"directory","label":"Aktuelle Sendungen","type":"unknown"}, ...........

mit dieser Antwort kann man sich dann die aktuell verfügbaren Sendungen anfragen:
# CALL
set Kodi jsonraw {"jsonrpc":"2.0","method":"Files.GetDirectory","params":{"directory":"plugin://plugin.video.tagesschau/?action=list_feed&feed=latest_broadcasts","media":"files"},"id":"1"}

und bekommt dann diese Antwort:
# READ
{"id":"1","jsonrpc":"2.0","result":{"files":[{"file":"plugin://plugin.video.tagesschau?action=play_video&feed=latest_broadcasts&tsid=ts-22411","filetype":"file","label":"tagesschau vom 25.10.2017","type":"unknown"},{"file":"plugin://plugin.video.tagesschau?action=play_video&feed=latest_broadcasts&tsid=tt-5587","filetype":"file","label":"tagesthemen vom 25.10.2017","type":"unknown"},{"file":"plugin://plugin.video.tagesschau?action=play_video&feed=latest_broadcasts&tsid=nm-4535","filetype":"file","label":"nachtmagazin vom 25.10.2017","type":"unknown"},{"file":"plugin://plugin.video.tagesschau?action=play_video&feed=latest_broadcasts&tsid=tsvorzwanzig-2887","filetype":"file","label":"tagesschau vor 20 Jahren vom 24.10.2017","type":"unknown"},{"file":"plugin://plugin.video.tagesschau?action=play_video&feed=latest_broadcasts&tsid=tsg-5451","filetype":"file","label":"tagesschau (mit Gebärdensprache) vom 25.10.2017","type":"unknown"},{"file":"plugin://plugin.video.tagesschau?action=play_video&url=http%253A%2F%2Fmedia.tagesschau.de%2Fvideo%2F100s%2F2017%2F1025%2FTV-100s-2109.webxl.h264.mp4","filetype":"file","label":"Tagesschau in 100 Sekunden vom 25.10.2017 21:09","type":"unknown"},{"file":"plugin://plugin.video.tagesschau?action=play_video&feed=latest_broadcasts&tsid=tt-5587","filetype":"file","label":"tagesthemen vom 25.10.2017 21:35","type":"unknown"}],"limits":{"end":7,"start":0,"total":7}}} .......

Hieraus kann man sich dann den Aufruf der letzten Sendung ableiten und diese direkt im Player starten:
# CALL
set Kodi jsonraw {"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"file":"plugin://plugin.video.tagesschau?action=play_video&feed=latest_broadcasts&tsid=ts-22411"}},"id":"1"}
set Kodi volume 70


Jetzt muss ich lediglich noch aus der Antwort mit der Sendungsliste die tsid der letzten Sendung in ein FHEM-Reading bekommen und schon lässt sich jederzeit automatisch die letzte Sendung aufrufen!

Wie bekomme ich denn jestzt die Json-Antwort, die ich bislang nur im Logfile stehen habe über das Kodi-Modul oder über httpmod in ein Reading!?
NUC - FHEM & HA
MapleCUN, Homematic, 433MHz, AB440, 1-Wire Bewässerung & Pool, Jarolift (Signalduino), Signal Messenger, Denon AVR, LG WebOS, AmazonEcho, Jura S90 (ESP8266), Sonoff, Xiaomi Mii Sauger, Worx SO500i

vbs

Ich wüsste leider keine einfache Methode, um an die Response-JSON-Daten zu kommen.

thorschtn

Ich denke, httpmod sollte das können. Ich weiß nur noch nicht, wie ich den request in httpmod aufsetzen muss....
NUC - FHEM & HA
MapleCUN, Homematic, 433MHz, AB440, 1-Wire Bewässerung & Pool, Jarolift (Signalduino), Signal Messenger, Denon AVR, LG WebOS, AmazonEcho, Jura S90 (ESP8266), Sonoff, Xiaomi Mii Sauger, Worx SO500i

vbs

Ich hab hier mal eine KODI-Version für dich gebaut, mit der du auf die JSON-Antworten reagieren kannst. Kannst du ja evtl mal ausprobieren:
https://forum.fhem.de/index.php/topic,66299.msg705700.html#msg705700

thorschtn

Wie genial ist das denn? Du weisst keine einfache Methode um an die Daten zu kommen aber implementierst das mal eben?

Hat funktioniert, besten Dank!

Damit kann ich jetzt jederzeit die Liste der verfügbaren Sendungen aktualisieren:
set Kodi jsonraw {"jsonrpc":"2.0","method":"Files.GetDirectory","params":{"directory":"plugin://plugin.video.tagesschau/?action=list_feed&feed=latest_broadcasts","media":"files"},"id":"1"}

Und dann lediglich den JSON String noch zerlegen und in einzelnen Readings bereit stellen:
define Kodi.Tagesschau expandJSON Kodi:jsonResponse:.{.*} json

Jetzt kann ich die aktuellste Tagesschau aufrufen/starten:
set Kodi jsonraw {"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"file":"{(ReadingsVal("Kodi","result_files_07_file",0))}"}},"id":"1"}

Und schon kann Alexa auf Zuruf jederzeit die Tagesschau einschalten!

Besten Dank vbs, das hat mir sehr geholfen!
NUC - FHEM & HA
MapleCUN, Homematic, 433MHz, AB440, 1-Wire Bewässerung & Pool, Jarolift (Signalduino), Signal Messenger, Denon AVR, LG WebOS, AmazonEcho, Jura S90 (ESP8266), Sonoff, Xiaomi Mii Sauger, Worx SO500i


riker1

Zitat von: thorschtn am 28 Oktober 2017, 17:25:45


Damit kann ich jetzt jederzeit die Liste der verfügbaren Sendungen aktualisieren:
set Kodi jsonraw {"jsonrpc":"2.0","method":"Files.GetDirectory","params":{"directory":"plugin://plugin.video.tagesschau/?action=list_feed&feed=latest_broadcasts","media":"files"},"id":"1"}

Und dann lediglich den JSON String noch zerlegen und in einzelnen Readings bereit stellen:
define Kodi.Tagesschau expandJSON Kodi:jsonResponse:.{.*} json

Jetzt kann ich die aktuellste Tagesschau aufrufen/starten:
set Kodi jsonraw {"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"file":"{(ReadingsVal("Kodi","result_files_07_file",0))}"}},"id":"1"}


Hi, wollte da nun nachbauen, allerdings bekomme ich das nicht hin.
hört sich ja top an.

also, bekomme als result: am Kodi objekt:

{"id":"1","jsonrpc":"2.0","result":{"files":[{"file":"plugin://plugin.video.tagesschau?action=play_video&feed=latest_broadcasts&tsid=ts-27859","filetype":"file","label":"tagesschau vom 04.10.2018","type":"unknown"},{"file":"plugin://plugin.video.tagesschau?action=play_video&feed=latest_broadcasts&tsid=tt-6295","filetype":"file","label":"tagesthemen vom 04.10.2018","type":"unknown"},{"file":"plugin://plugin.video.tagesschau?action=play_video&feed=latest_broadcasts&tsid=nm-4967","filetype":"file","label":"nachtmagazin vom 05.10.2018","type":"unknown"},{"file":"plugin://plugin.video.tagesschau?action=play_video&feed=latest_broadcasts&tsid=weltspiegel-3917","filetype":"file","label":"Weltspiegel vom 30.09.2018","type":"unknown"},{"file":"plugin://plugin.video.tagesschau?action=play_video&feed=latest_broadcasts&tsid=tsvorzwanzig-3633","filetype":"file","label":"tagesschau vor 20 Jahren vom 04.10.2018","type":"unknown"},{"file":"plugin://plugin.video.tagesschau?action=play_video&feed=latest_broadcasts&tsid=tsg-6145","filetype":"file","label":"tagesschau (mit Gebärdensprache) vom 04.10.2018","type":"unknown"},{"file":"plugin://plugin.video.tagesschau?action=play_video&url=http%253A%2F%2Fmedia.tagesschau.de%2Fvideo%2F100s%2F2018%2F1005%2FTV-100s-1426.webxl.h264.mp4","filetype":"file","label":"Tagesschau in 100 Sekunden vom 05.10.2018 14:26","type":"unknown"},{"file":"plugin://plugin.video.tagesschau?action=play_video&feed=latest_broadcasts&tsid=ts-27871","filetype":"file","label":"tagesschau vom 05.10.2018 14:00","type":"unknown"}],"limits":{"end":8,"start":0,"total":8}}}

dann mit

defmod OSMC95Wohn.Tagesschau expandJSON OSMC95Wohn:jsonResponse:.{.*} json

aber dieses Reading:
..(ReadingsVal("Kodi","result_files_07_file",0)..

ist nicht da.

was könnte ich denn falsch machen?

Danke

FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

riker1

Hallo,

haben nun eine merkwürdige Fehlermeldung:

2019.02.12 18:47:05.413 1: PERL WARNING: Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/^Value("osmc_tagesschau").{ <-- HERE .*}$/ at ./FHEM/98_expandJSON.pm line 64, <$fh> line 7686.
2019.02.12 18:47:05.416 1: PERL WARNING: Unescaped left brace in regex is deprecated here (and will be fatal in Perl 5.30), passed through in regex; marked by <-- HERE in m/^ReadingsVal("osmc_tagesschau","state","").{ <-- HERE .fil*}$/ at ./FHEM/98_expandJSON.pm line 64, <$fh> line 7688.
2019.02.12 18:47:06.388 1: PERL WARNING: can't getattr: Input/output error at FHEM/DevIo.pm line 420.



FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

vbs

Irgendwo wird da offenbar eine Regex prozessiert, deren Syntax nicht (mehr) korrekt ist:
https://forum.fhem.de/index.php?topic=90256.0

Kann das irgendwo in Code von dir sein?

"Value("osmc_tagesschau")."

riker1

Hallo

"Value("osmc_tagesschau")." das ist mein Kodi, entspricht also Value("kodi")

Habe eigentlich nur den code von oben genommen und in ein notify gepackt und mein kodi-namen verwendet

set OSMC95Wohn jsonraw {"jsonrpc":"2.0","method":"Files.GetDirectory","params":{"directory":"plugin://plugin.video.tagesschau/?action=list_feed&feed=latest_broadcasts","media":"files"},"id":"1"};
{fhem('setreading OSMC95Wohn json_TR '.ReadingsVal("OSMC95Wohn","jsonResponse",""))};
#system('sleep 1');
#https://forum.fhem.de/index.php?topic=78499.0
#https://forum.fhem.de/index.php/topic,78499.msg705834.html#msg705834
defmod OSMC95Wohn.Tagesschau expandJSON OSMC95Wohn:jsonResponse:.{.*} json;
#system('sleep 10');
set OSMC95Wohn jsonraw {"jsonrpc":"2.0","method":"Player.Open","params":{"item":{"file":"
{(ReadingsVal("OSMC95Wohn","result_files_07_file",0))}"}},"id":"1"}
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

riker1

Hatte versucht den JSON string im dummy zwischenzuspeichern.

defmod OSMC95Wohn.Tagesschau1 expandJSON Value("osmc_tagesschau").{.*} json;;

defmod osmc_tagesschau dummy

da bei mir das ganze nicht funkioniert hatte. siehe alter Beitrag von mir weiter oben.

Danke
FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox

vbs

Hat ziemlich sicher hiermit zu tun:
defmod Kodi.Tagesschau expandJSON Kodi:jsonResponse:.{.*} json

Probier mal die Klammern zu escapen:
defmod Kodi.Tagesschau expandJSON Kodi:jsonResponse:.\{.*\} json

riker1

FHEM    5.26.1 Ubuntu 18, FHEM    5.26.1 RPI 3 , Actoren: IT ,Tasmota, ESPEasy,
MAX CUBE, MAX HT, MAX WT, Selbstbau nanoCULs, FS 20,Tasmota, Homematic, FTK, SW. DIM, Smoke,KODI,Squeezebox