NEWS

Plex bei VIS darstellen oder als iobroker Datenpunkte



  • Bisher ist die Steuerung / Darstellung des Plex-Server (im Gegensatz von Winamp oder Sonos) weder als Adapter / als VIS Widget oder als Datenpunkt realisiert ..,

    Mir scheint das aber irgendwie machbar … https://code.google.com/archive/p/plex-api/

    Gibt es hier schon was?

    So was zum Beispiel bei Musikwiedergabe:

    var request = require('request');
    //url Plex Server eintragen
    var url="http://x.x.x.x";
    
    var headers = {
        'User-Agent':       'Super Agent/0.0.1',
        'Content-Type':     'application/x-www-form-urlencoded',
        'Accept':           'application/json'
    }
    var options = {
        url: url+':32400/status/sessions',
        method: 'POST',
        headers: headers
    }
    
    request(options, function (error, response, body) {
        if (!error && response.statusCode == 200) {
            var obj = JSON.parse(body);
    
             if (obj.MediaContainer.size!==0 ) {
       console.log(obj.MediaContainer.Track[0].grandparentTitle); 
       console.log(obj.MediaContainer.Track[0].title);
        console.log(url+':32400'+obj.MediaContainer.Track[0].grandparentThumb);
    
             } else {
             console.log("Plex spielt nichts ab."); 
             }
        }
    
    });
    

  • Developer

    Ich wäre als Plex Pass Nutzer dabei. 😉

    Hier wäre schon mal was: https://github.com/phillipj/node-plex-c … /Readme.md

    Gesendet von meinem SM-G920F mit Tapatalk



  • Inzwischen habe ich noch was besseres gefunden … (Plex Pass vorausgesetzt).

    Unter Einstellungen Plex kann man einen Webhook einrichten und es wird von Plex zu iobroker eine JSON übertragen, die man dann auswerten kann.

    Als Light Lösung bekommt man so die Titel, Album, sogar ein Album-Bild und vieles mehr übertragen. Vor allem muss man nicht pollen.

    Habe das bisher über Javascript abgebildet.

    Allerdings bietet ja Plex mehrere Wiedergaben an von mehrere Geräten ... mal sehen, ob ich hier tiefer gehe (will).

    Mich würde noch reizen, Pause, Steuerung usw. ... vielleicht geht es ja mit dem Plex API von dir .... zeitlich bei mir aber erst nächste Woche. @Eisbaeeer: Oder hast du es fertig?

    Wie man daraus für Anzeige / Steuerung ein Widget oder sogar einen Adapter baut, würde mich auch reizen, habe ich aber noch nicht gemacht.

    Naja, vielleicht habt ihr ja ein paar Tipps für den Anfang.


  • Developer

    @mdsv:

    Inzwischen habe ich noch was besseres gefunden … (Plex Pass vorausgesetzt).

    Unter Einstellungen Plex kann man einen Webhook einrichten und es wird von Plex zu iobroker eine JSON übertragen, die man dann auswerten kann.

    Als Light Lösung bekommt man so die Titel, Album, sogar ein Album-Bild und vieles mehr übertragen. Vor allem muss man nicht pollen.

    Habe das bisher über Javascript abgebildet.

    Allerdings bietet ja Plex mehrere Wiedergaben an von mehrere Geräten ... mal sehen, ob ich hier tiefer gehe (will).

    Mich würde noch reizen, Pause, Steuerung usw. ... vielleicht geht es ja mit dem Plex API von dir .... zeitlich bei mir aber erst nächste Woche. @Eisbaeeer: Oder hast du es fertig?

    Wie man daraus für Anzeige / Steuerung ein Widget oder sogar einen Adapter baut, würde mich auch reizen, habe ich aber noch nicht gemacht.

    Naja, vielleicht habt ihr ja ein paar Tipps für den Anfang. ` Hab da noch nichts fertig. Zeitlich sieht es bei mir da noch viel später aus. VIS Widget hab ich auch noch nicht gemacht. Adapter wäre aber kein Problem. Kannst du mal beschreiben wie dein js Script aussieht und wo du das im Plex eingestellt hast?

    Gruß Eisbaeeer

    Gesendet von meinem SM-G920F mit Tapatalk



  • Plex Einstellungen für Einrichtung Webhook:

    https://www.plex.tv starten - NICHT auf Launch gehen, sondern auf MyAccount - Settings

    ggf. Hauptbenutzer wählen, dann auf Webhook links gehen und dort die lokale IP-Adresse des ioBroker Server eintragen:

    http://xxx.xxx.xxx.xxx:10000

    Port sollte nicht belegt sein.

    ioBroker Javascript:

    Variablen anlegen:

    createState('Plex.Titel', 0, { 
                              desc: "Plex - Titel", 
                              type: "string", 
    
        });
    createState('Plex.parentTitel', 0, { 
                              desc: "Plex - parenttitel", 
                              type: "string", 
    
        });
    createState('Plex.wer', 0, { 
                              desc: "Plex - wer", 
                              type: "string", 
    
        });
    createState('Plex.logo', 0, { 
                              desc: "Plex - logo", 
                              type: "string", 
    
        });
    createState('Plex.parentlogo', 0, { 
                              desc: "Plex - parentlogo", 
                              type: "string", 
    
        });
    createState('Plex.Rating', 0, { 
                              desc: "Plex - rating", 
                              type: "string", 
    
        });
    createState('Plex.media', 0, { 
                              desc: "Plex - musik video home", 
                              type: "string", 
    
        });
    createState('Plex.description', 0, { 
                              desc: "Plex - Beschreibung", 
                              type: "string", 
    
        });
    

    Danach noch als Javascript - Script wertet Webhook aus und die Titel/ Thumbs ist als Variable abrufbar.

    var express = require('express')
      , request = require('request'),
        multer  = require('multer');
    var url="http://xxx.xxx.xxx.xxx";
    var app = express();
    var isPlaying = true;
    var app = express();
    var upload = multer({ dest: '/tmp/' });
    app.post('/', upload.single('thumb'), function (req, res, next) {
    var payload = JSON.parse(req.body.payload);
    console.log('Got webhook for', payload.event);
    
    // MUSIK 
      if ( payload.event == "media.play" && payload.Metadata.type == "track") {
        setState("javascript.0.Plex.wer",payload.Metadata.grandparentTitle); 
        setState("javascript.0.Plex.Titel"/*Plex.Titel*/,payload.Metadata.parentTitle); 
        setState("javascript.0.Plex.parentTitel"/*Plex.parentTitel*/,payload.Metadata.title);
        setState("javascript.0.Plex.Rating"/*Plex.Rating*/,payload.Metadata.ratingCount.toString()); 
        setState("javascript.0.Plex.media"/*Plex.media*/,payload.Metadata.librarySectionType); 
        var logo=url+':32400'+payload.Metadata.thumb;
        setState("javascript.0.Plex.logo"/*Plex.logo*/,logo); 
        setState("javascript.0.Plex.media"/*Plex.media*/,"Musik");
        } 
    
     //*****************************
     // VIDEOS & HomeVIDEOS
       if ( payload.event == "media.play" && payload.Metadata.type == "movie") {
       setState("javascript.0.Plex.wer",payload.Metadata.studio); 
       setState("javascript.0.Plex.Titel"/*Plex.Titel*/,payload.Metadata.title); 
        setState("javascript.0.Plex.Rating"/*Plex.Rating*/,payload.Metadata.rating.toString()); 
        var logo2=url+':32400'+payload.Metadata.thumb;  
        setState("javascript.0.Plex.logo"/*Plex.logo*/,logo2); 
        var logo3=url+':32400'+payload.Metadata.art;
        setState("javascript.0.Plex.parentlogo"/*Plex.parentlogo*/,logo3); 
        setState("javascript.0.Plex.media"/*Plex.media*/,"Video");
        } 
    
    //*****************************
      // Bilder wieder auf null
       if ( payload.event == "media.stop") {
    
       setState("javascript.0.Plex.wer",""); 
       setState("javascript.0.Plex.Titel"/*Plex.Titel*/,""); 
       setState("javascript.0.Plex.logo"/*Plex.logo*/,'http://192.168.1.184:8082/vis.0/main/img/firework-music.jpg'); 
       setState("javascript.0.Plex.parentTitel"/*Plex.parentTitel*/,"");
       setState("javascript.0.Plex.Rating"/*Plex.Rating*/,""); 
       setState("javascript.0.Plex.media"/*Plex.media*/,"");
       setState("javascript.0.Plex.parentlogo"/*Plex.parentlogo*/,""); 
       }
      if (payload.event == "media.play" || payload.event == "media.resume") {
        isPlaying = true;
      } else if (payload.event == "media.pause" || payload.event == "media.stop") {
        isPlaying = false;
      }
    
      res.sendStatus(200);
    });
    
    var options = {
      headers: {
    
      }
    };
    
    app.listen(10000);
    

    Einschränkungen: Beim Ändern des Scripts muss zuerst Javascript beendet werden, sonst meckert er, weil der Port bereits belegt ist.

    Habe ich noch nicht rausgefunden, wie man das anders löst. Jemand Ideen?

    Nächste Schritt wäre:

    als Adapter oder als Widget :roll: 😄


  • Developer

    Hi

    Ok, ich hab es mal bei mir getestet. Soweit ja ganz interessant. Man kann jetzt darauf reagieren, wenn Plex etwas abspielt. Ich würde aber gerne Clients steuern können. Wenn du beide Scripts in eines packst, hast du auch kein Problem mit dem Port.

    Gruß

    –- EDIT ---

    Das hier könnte man sehr Einfach implementieren. Damit ließe sich ein Client steuern (Navigation und Playback). Nur bekommt man da noch keine Info zurück: https://github.com/phillipj/node-plex-control

    Ich bau gerade mal einen Adapter für den Webhook. Dann kann ich schon mal das Licht dimmen 😉



  • lass mich teilhaben, vielleicht lerne ich ja noch was 😄

    Im Prinzip muss es ja auch 2x Teile geben:

    Navigation + Info, was läuft.

    Die Info kann ja nur über Webhook kommen, sonst muss du ständig pollen.

    Navigation: Wie hast du die node-flex-control denn eingebaut? Als Javascript kommt kein Fehler, aber steuern tut das bei dir nicht. Bei dir???


  • Developer

    @mdsv:

    lass mich teilhaben, vielleicht lerne ich ja noch was 😄

    Im Prinzip muss es ja auch 2x Teile geben:

    Navigation + Info, was läuft.

    Die Info kann ja nur über Webhook kommen, sonst muss du ständig pollen.

    Navigation: Wie hast du die node-flex-control denn eingebaut? Als Javascript kommt kein Fehler, aber steuern tut das bei dir nicht. Bei dir??? ` Gerne kannst du mitmachen. Bin gerade noch am bauen und hatte heute keine Zeit mehr. Die Anfänge findest du unter https://github.com/eisbaeeer/iobroker.plexwebhook

    Nur mal "schnell" zusammen gebaut. Läuft noch nicht. Der haupt Teil sollte die bekannt vorkommen und ist in der plexwebhook.js

    Die ganzen variable müssen noch angepasst werden und und und 😉

    Mach einen Clone und Bau mal weiter. Falls er dann bei dir schon läuft können wir mergen.

    Gruß Eisbaeeer

    Gesendet von meinem SM-G920F mit Tapatalk



  • habe noch nicht mit GitHub gearbeitet, sondern eher mit Javascript direkt. Gibt es hier einen gute Seite zum Informieren??

    Du baust aber ein Adapter oder ist das nur Code für Javascript? Fehlt ja noch ein bisschen sonst …?!

    Die Frage ist außerdem, was er machen soll ... nur Webhook verarbeiten = Datenpunkte anlegen oder auch steuern.

    Meine Zielsetzung wäre bisher:

    a) Anzeige, was läuft so ...(geht ja schon 🙂 ) b) Stoppen und anhalten, ggf. nächstes Lied.

    ob man c) was ganz neues starten / suchen will ... (glaube bräuchte ich erst mal nicht) + Frage wäre auch, wo soll es starten = auf welchen Gerät.

    Ich habe die Steuerung aber auch noch nicht praktisch hinbekommen, fehlte mir aber auch etwas Zeit.


  • Developer

    @mdsv:

    Die Frage ist außerdem, was er machen soll … nur Webhook verarbeiten = Datenpunkte anlegen oder auch steuern.

    Meine Zielsetzung wäre bisher:

    a) Anzeige, was läuft so ...(geht ja schon 🙂 ) b) Stoppen und anhalten, ggf. nächstes Lied.

    ob man c) was ganz neues starten / suchen will ... (glaube bräuchte ich erst mal nicht) + Frage wäre auch, wo soll es starten = auf welchen Gerät.

    Ich habe die Steuerung aber auch noch nicht praktisch hinbekommen, fehlte mir aber auch etwas Zeit. `

    Ich schlage vor dass wir schrittweise die Funktionen integrieren. Im ersten Schritt soll der Adapter das gleiche wie deine Scripte machen, eben nur als Adapter.

    Der legt alles an, was man braucht.

    Wenn das dann Läuft, erweitern wir die Funktionen. Player auflisten und steuern, etc.

    Was meinst Du?

    Gruß

    Gesendet von meinem SM-G920F mit Tapatalk



  • Find ich gut … macht Sinn.

    Mein Script war aber schon gefiltert auf die Felder, die mich interessieren.

    Als Adapter könnte man auch mehr machen ... siehe https://support.plex.tv/hc/en-us/articles/115002267687

    Bei einem Adapter könnte man es auch mit mehr Felder machen.

    Kann man sooo schon den als Adapter einbinden??? Noch nicht oder???


  • Developer

    @mdsv:

    Kann man sooo schon den als Adapter einbinden??? Noch nicht oder??? `

    Ja, da holen wir dann alle Infos raus. Derzeit läuft er noch nicht. Hab ihn nur mal in github abgelegt, damit ich ihn in meinem kreativen Chaos nicht verliere 😉

    Für github gibt es einen client, aber am einfachsten ist es, dass zip herunterzuladen. Darin ist der ganze code. Wenn du dir einen Acount erstellt, kannst du ihn dir auch kopieren und darin arbeiten. Vorteil, mit github hast du eine Versionierung und man kann die Änderungen zusammenführen.

    Am besten du arbeitest dich Stück für Stück ein. Lege mal einen Account bei github an.

    Gruß

    Gesendet von meinem SM-G920F mit Tapatalk


  • Developer

    So, hatte heute Abend ein wenig Zeit.

    Der Adapter lässt sich jetzt installieren. Der Code ist noch "schmutzig" und es ist noch ein wenig zu tun. 8-)

    Im Moment bekommt man nur den Interpret und Thumb ohne Server Adresse, aber das wird noch. Jetzt ist es nur noch Fleißarbeit.

    Ich muss mal noch die "if" routinge debuggen. Die greift noch nicht. Wenn du bock hast, kannst du dir das ja mal anschauen. Es ist Zeile 31 in der plexwebhook.js

    Gruß Eisbaeeer

    –-EDIT---

    Hab den Namen des Adapters geändert. Der Name war doch zu sehr auf eine Funktion zugeschnitten. Er heisst jetzt iobroker.plexconnect


  • Developer

    Hi mdsv

    Könntest du für mich mal testen?

    Ich hab jetzt im Adapter erstmal den Webhook realisiert. Du kannst den Adapter mal installieren und testen. Hier die Schritte, wie du ihn installieren kannst:

    Gehe in iobroker Admin Adapter und klicke auf das Github Symbol oben links:
    139_1.png
    Dann die URL des Adapters von meinem Github eingeben:

    https://github.com/Eisbaeeer/iobroker.plexconnect

    Eisbaeeer 139_2.png
    Danach sollte er sich installieren und im Adapter Reiter sichtbar sein. Dann mit dem Plus Zeichen normal installieren.
    139_3.png

    Danke für deine hervorragende Vorarbeit! Wenn bei dir alles läuft, können wir weiter machen. Ich denke wir bekommen das nur über die http API hin, dass wir die Player ansteuern. Hatte noch keine Zeit, da weiter zu forschen. Wenn du bock hast, kannst du dich gerne schlau machen.

    Gruß Eisbaeeer



  • Hallo,

    jetzt erst gesehen … sorry ...

    gute Nachtricht = Install klappte

    schlechte Nachricht = sowohl 127.0.0.1, als auch die richtige IP-Adresse lassen bei mir den Adapter abstützen...

    Siehe:

    plexconnect.0	2017-10-29 14:31:20.099	error	at initAdapter (/opt/iobroker/node_modules/iobroker.js-controller/lib/adapter.js:4568:18)
    plexconnect.0	2017-10-29 14:31:20.099	error	at Adapter.emit (events.js:185:7)
    plexconnect.0	2017-10-29 14:31:20.099	error	at emitNone (events.js:86:13)
    plexconnect.0	2017-10-29 14:31:20.099	error	at Adapter. (/opt/iobroker/node_modules/iobroker.plexconnect/plexconnect.js:66:22)
    plexconnect.0	2017-10-29 14:31:20.099	error	at EventEmitter.listen (/opt/iobroker/node_modules/iobroker.plexconnect/node_modules/express/lib/application.js:618:24)
    plexconnect.0	2017-10-29 14:31:20.099	error	at Server.listen (net.js:1394:5)
    plexconnect.0	2017-10-29 14:31:20.099	error	at listen (net.js:1298:10)
    plexconnect.0	2017-10-29 14:31:20.099	error	at Server._listen2 (net.js:1262:14)
    plexconnect.0	2017-10-29 14:31:20.099	error	at exports._exceptionWithHostPort (util.js:1043:20)
    plexconnect.0	2017-10-29 14:31:20.099	error	at Object.exports._errnoException (util.js:1020:11)
    plexconnect.0	2017-10-29 14:31:20.099	error	Error: listen EADDRINUSE :::10000
    plexconnect.0	2017-10-29 14:31:20.099	error	uncaught exception: listen EADDRINUSE :::10000
    


  • Immer weiter, Leute [emoji106]

    Als (weiterer) PlexPass-User verfolge ich diesen Thread sehr gespannt.

    (Leider kann ich mich nicht technisch einbringen)


  • Developer

    @mdsv:

    Hallo,

    jetzt erst gesehen … sorry ...

    gute Nachtricht = Install klappte

    schlechte Nachricht = sowohl 127.0.0.1, als auch die richtige IP-Adresse ... `

    Hi.

    In den Fehler bin ich auch schon gelaufen 😉

    Ursache ist dein noch laufendes JavaScript, mit dem du die Anbindung an Plex gemacht hast.

    Prüfe mal 2 Dinge:

    • läuft dein JavaScript für Plex noch?

    • wenn Nein, dann läuft aber noch der Webdienst, den du per JavaScript gestartest hast. Der Port 10000 ist schon in Benutzung! Das heisst der Adapter kann ihn nicht an sich binden.

    Lösungen:

    Ändere den Plex Port oder Kill das JavaScript mit deinem Script oder starte den Server neu. Aber nicht vergessen das JavaScript auszuschalten vor dem Neustart.

    Dann läuft's 😉

    Eisbaeeer

    kein Support per PM. Fragen hier im Forum stellen.



  • Ja, es lag wirklich daran :roll:

    Jetzt läuft es … echt genial gemacht ... :-).

    Nur wenn mehrere Wiedergabe bei Plex gleichzeitig laufen, nimmt er immer die letzte ... ist aber durch Webhook "work as designed".

    welche werte kann Event.Name bekommen ... stop, play, pause?

    Wie stellst es nun weiter dar? Schon was fertig?

    PS: Noch mal Hut ab 🙂


  • Developer

    @mdsv:

    Ja, es lag wirklich daran :roll:

    welche werte kann Event.Name bekommen … stop, play, pause?

    Wie stellst es nun weiter dar?

    PS: Noch mal Hut ab 🙂 `

    Danke. Du hast ja auch gut dazu beigetragen.

    Die möglichen Werte der Datenpunkte die unter Webhooks beschrieben.

    Darstellung geht ja schon mit Bordmitteln. Ein Widget wäre natürlich toll. Aber mir fehlt die Zeit und ich bin auch nicht der Grafiker. Das überlasse ich anderen.

    Nächster Schritt wäre die Steuerung von Playern. Ich muss mich aber erst in die offizielle API einlesen.

    Hier wäre Eure Hilfe natürlich willkommen!

    Eisbaeeer

    kein Support per PM. Fragen hier im Forum stellen.


Log in to reply
 

Suggested Topics

1.8k
Online

29.8k
Users

36.9k
Topics

494.1k
Posts