Das ist davon abhängig wie das funktionieren soll. Wenn es nur lokal funktionieren soll, kannst Du da eine lokale IP des IP-Symcon Servers mit Webhook eintragen. Wenn es global funktionieren soll brauchst Du z.B. eine Subskription, dann kannst Du dort die IP-Smycon Connect Adresse eintragen, dann ist es egal wo der Plex Server steht bzw. wo der IP-Symcon Server lokalisiert ist. Bei mir ist dort die IP-Symcon Connect Adresse hinterlegt.
Sieht dann z.B. so aus
https://webhookplexuser:webhookplexpassword@123456789.ipmagic.de/hook/plex
die URL setzt sich zusammen aus dem Webhook Usernamen, dem Webhook Passwort und der IP-Symcon Connect Adresse sowie dem Webhook.
Wenn das ganze lokal wäre würde das so aussehen:
https://webhookplexuser:webhookplexpassword@192.168.1.1:3777/hook/plex
Das werden wir wohl im Modul ergänzen, auf die Schnelle kannst Du das aber selber einrichten.
Im Objektbaum an einer Stelle eine Kategorie (CTRL+0) anlegen z.B. Plex nennen. Darunter ein Skript (CTRL+3) anlegen und z.B. Plex Webhook Interface nennen.
in das Skript kopierst Du folgenden Inhalt
<?
$username = "plex";
$password = "ips4";
if(!isset($_SERVER['PHP_AUTH_USER']))
$_SERVER['PHP_AUTH_USER'] = "";
if(!isset($_SERVER['PHP_AUTH_PW']))
$_SERVER['PHP_AUTH_PW'] = "";
if(($_SERVER['PHP_AUTH_USER'] != $username) || ($_SERVER['PHP_AUTH_PW'] != $password))
{
header('WWW-Authenticate: Basic Realm="Plex WebHook"');
header('HTTP/1.0 401 Unauthorized');
echo "Authorization required";
return;
}
echo "Webhook Plex IP-Symcon";
//workaround for bug
if(!isset($_IPS))
global $_IPS;
if($_IPS['SENDER'] == "Execute")
{
echo "This script cannot be used this way.";
return;
}
# Capture JSON content
$plexjson = $_POST["payload"];
$data = json_decode($plexjson);
$event = $data->event;
var_dump($event);
$user = $data->user;
var_dump($user);
$owner = $data->owner;
var_dump($owner);
$account = $data->Account;
$accountname = $account->title;
$accountpic = $account->thumb;
var_dump($accountname);
var_dump($accountpic);
$server = $data->Server;
$servername = $server->title;
$serveruuid = $server->uuid;
var_dump($servername);
var_dump($serveruuid);
$player = $data->Player;
$playerlocal = $player->local;
var_dump($playerlocal);
$playerpublicip = $player->publicAddress;
var_dump($playerpublicip);
$plexclientname = $player->title;
var_dump($plexclientname);
$plexclientuuid = $player->uuid;
var_dump($plexclientuuid);
$metadata = $data->Metadata;
$librarysectiontype = $metadata->librarySectionType;
var_dump($librarysectiontype);
$ratingkey = $metadata->ratingKey;
var_dump($ratingkey);
$ratingkeydata = $metadata->key;
var_dump($ratingkeydata);
$guid = $metadata->guid;
var_dump($guid);
$sectionid = $metadata->librarySectionID;
var_dump($sectionid);
$studio = $metadata->studio;
var_dump($studio);
$plextype = $metadata->type;
var_dump($plextype);
$plextitle = $metadata->title;
var_dump($plextitle);
$plexoriginaltitle = $metadata->originalTitle;
var_dump($plexoriginaltitle);
$contentrating = $metadata->contentRating;
var_dump($contentrating);
$summary = $metadata->summary;
var_dump($summary);
$rating = $metadata->rating;
var_dump($rating);
$viewoffset = $metadata->viewOffset;
$viewcount = $metadata->viewCount;
$lastviewedat = $metadata->lastViewedAt;
$year = $metadata->year;
var_dump($year);
$tagline = $metadata->tagline;
var_dump($tagline);
$thumb = $metadata->thumb;
var_dump($thumb);
$art = $metadata->art;
var_dump($art);
$duration = $metadata->duration;
$originallyavailableat = $metadata->originallyAvailableAt;
$addedat = $metadata->addedAt;
$updatedat = $metadata->updatedAt;
$chaptersource = $metadata->chapterSource;
$primaryextrakey = $metadata->primaryExtraKey;
$genreinfo = $metadata->Genre; // Array
foreach($genreinfo as $key => $genre)
{
$genre = $genre->tag;
var_dump($genre);
}
$directorinfo = $metadata->Director;
foreach($directorinfo as $key => $director)
{
$director = $director->tag;
var_dump($director);
}
$writerinfo = $metadata->Writer;
foreach($writerinfo as $key => $writer)
{
$writer = $writer->tag;
var_dump($writer);
}
$producerinfo = $metadata->Producer;
foreach($producerinfo as $key => $producer)
{
$producer = $producer->tag;
var_dump($producer);
}
$countryinfo = $metadata->Country;
foreach($countryinfo as $key => $country)
{
$country = $country->tag;
var_dump($country);
}
$roleinfo = $metadata->Role;
foreach($roleinfo as $key => $cast)
{
$actor = $cast->tag;
var_dump($actor);
$role = $cast->role;
var_dump($role);
$actorpic = $cast->thumb;
var_dump($actorpic);
}
?>
Du müstest dann an allen Stellen im Skript an dem zur Zeit ein var_dump steht den Wert dann abspeichern. Entweder in eine einzelne Variable (CTRL+2) mit
SetValue(12345, $value); //12345 ist die Objekt ID der Varibale und $value der Wert den Du abspeichern willst.
oder aber auch mehrer Variablen als Webseite gesetzt in einer String Variable mit dem Variablenprofil ~HTMLBox. So könntest Du Dir dann Deine eigene Ansicht zusammen bauen mit den übergebenen Werten.
Im Objektbaum unter Kern Instanzen -> Webhook nun einen neuen Webhook anlegen /hook/plex und mit dem Skript Plex Webhook Interface, das vorher erstellt wurde, verlinken.
Jetzt kommen dann jedes mal, wenn Plex etwas macht, Daten in IP-Symcon auf dem Skript an und werden ausgewertet.
Das ist fürs Grobe, sobald das im Modul drinnen ist muss dann der Webhook wieder gelöscht werden, dann ist das Modul selber der Endpunkt für den Webhook und nicht mehr ein Skript.
Das Modul selber wertet dann zunächst noch den Client aus und schreibt nur dann Werte wenn es auch zu dem passenden Client gehört. Zur Zeit würdest Du bei dem Ansatz oben einfach nicht selektioniert Daten in IP-Symcon bekommen mit allen Clients. Falls die Zeit es zulässt kann ich das mal mal Wochenende ergänzen, dann kann man das auch im Modul ausprobieren.