Events von Webhook erfassen

Hallo,

ich möchte gern die Events von einem Emby-Server erfassen, um diese auswerden zu können, nur leider reichen hier meine Kenntnisse nicht aus. Im Emby habe ich folgende URL angegeben:

https://meineurl.ipmagic.de/hook/dummy-emby

Der Webhook wird auch gesendet und ich kann ein Licht oder Sonstiges damit schalten lassen, allerdings würde ich gern auf event play anders auslösen, als wie event stop.

Z.b. bei event play soll das Licht dimmen, bei event stop soll es heller werden,

Den Logs kann ich entnehmen, dass der Event im Webhook Post mitgesendet wird.

 [data] => {"Event":"playback.pause............... 

Jemand eine Idee, wie ich die Daten im Script richtig empfangen kann bzw. ob Emby die Events mit sendet?

Wie frage ich das richtig ab?

Also nach vielem Lesen hier im Forum denke ich, ich muss den Array-Wert decodieren und auslesen, aber selber bekomme ich es nicht hin, ihn z.b. in eine Variable zu schreiben.

Mit SetValueString(45171, print_r($_POST, true)); gebe ich den kompletten Array aus, jedoch benötige ich nur den Part mit playback. … play, pause,unpause etc. aus dem Array

Array(    [data] => {"Event":"playback.pause","User":

Suche ich jetzt weiter in der beschriebenen Variable oder bekomme ich den Wert auch direkt aus der Ausgabe heraus?

Data ist scheinbar ein JSON-String.
Wenn du auf das Data Feld ein json_decode machst, solltest du weiter kommen.
Michael

Du meinst `$json = json_decode($json_string);`?

Wie muss ich das in meinem Fall genau schreiben? Bin ja leider nur Laie was PHP betrift :pleading_face:

Angenommen, ich möchte den Textteil

playback.start
playback.pause
playback.unpause
playback.stop

einfach in eine Variable schreiben. Entweder direkt wenn er empängt oder aus der Variable, welche ich mit SetValueString(45171, print_r($_POST, true)); bereits erstellt habe.

$Data = json_decode($_POST['data'], true);

Dann enthält $Data['Event'] das letzte Event.
Das kannst du dann entweder direkt auswerten oder in eine Variable schreiben.
Michael

$Data = json_decode($_POST['data'], true);

SetValueString(34600, print_r($Data));

Sorry das ich so doof nochmal nachfragen muss, aber wie schreibe ich die Variable?

So gibt er mir nur „true“ aus. :confused:

Du hast bei print_r das true vergessen :wink:
Wobei das du nicht brauchst.
Direkt $Data[‚Event‘] in SetValue benutzen.
Michael

Ah wunderbar

SetValueString(34600, print_r($Data['Event'], true));

genau so funktioniert es, vielen lieben Dank Michael :muscle:

Einen Frage hab ich noch, die Variable wird gesetzt, das passt, jedoch hakt es beim if, else :smiley:

$Data = json_decode($_POST['data'], true);
SetValueString(34600, print_r($Data['Event'], true));

$play = GetValue(34600);   

if ($play == playback.stop)
{
     $InstanzID= 54532;
     $color = hexdec('F6B859');
     $opt = ['on' => true, 'bri' => 255,  'transitiontime' => 45];
     PHUE_ColorSetOpt($InstanzID, $color, $opt);
}
elseif ($play == playback.scrobble)
{
     $InstanzID= 54532;
     $color = hexdec('F6B859');
     $opt = ['on' => true, 'bri' => 255,  'transitiontime' => 45];
     PHUE_ColorSetOpt($InstanzID, $color, $opt);
}
elseif ($play == playback.pause)
{
     $InstanzID= 54532;
     $color = hexdec('F6B859');
     $opt = ['on' => true, 'bri' => 255,  'transitiontime' => 45];
     PHUE_ColorSetOpt($InstanzID, $color, $opt);
}
elseif ($play == playback.unpause)
{
     $InstanzID= 54532;
     $color = hexdec('F6B859');
     $opt = ['on' => true, 'bri' => 20,  'transitiontime' => 45];
     PHUE_ColorSetOpt($InstanzID, $color, $opt);
}
else ($play == playback.play)
{
     $InstanzID= 54532;
     $color = hexdec('F6B859');
     $opt = ['on' => true, 'bri' => 20,  'transitiontime' => 45];
     PHUE_ColorSetOpt($InstanzID, $color, $opt);
}

Irgendwie gehts so nicht, finde aber nicht die Ursache.

die " vergessen :smiley:

Richtig also if ($play == „playback.stop“)

Hier nur das erste IF als Beispiel:

$Data = json_decode($_POST['data'], true);

$play = $Data['Event'];

if ($play == 'playback.stop')
{
     $InstanzID= 54532;
     $color = hexdec('F6B859');
     $opt = ['on' => true, 'bri' => 255,  'transitiontime' => 45];
     PHUE_ColorSetOpt($InstanzID, $color, $opt);
}

Michael

1 „Gefällt mir“

Super, viele Dank.

Ich hätte noch einen Punkt aus den Daten:

„RemoteEndPoint“:„192.168.178.37“

Die IP hätte ich ebenfalls gern mit in einer Variable, um ein Benutzerkonto bei Emby mit mehren Clients nutzen zu können, ohne immer das Licht zu schalten.

Dachte erst, recht einfach, aber leider ist dem nicht so.

SetValueString(13894, print_r($Data['RemoteEndPoint'], true));

Lass das Print_r weg.
Michael

So?

    SetValueString(13894, ($Data['RemoteEndPoint'], true));

Geht leider nicht :pleading_face:

Ne, so nicht.
Nur $Data['RemoteEndPoint'] war damit gemeint.
Michael

2 „Gefällt mir“

Bekomme es leider nicht hin :cold_sweat:

    SetValueString(34600, print_r($Data['Event'], true));
    SetValueString(13894, $Data['RemoteEndPoint'], true));

Michael meint nur …

SetValueString(13894, $Data['RemoteEndPoint']);
1 „Gefällt mir“

Ah okay, dies klappt schon mal ohne Fehler, jedoch bleibt die Variable leer, obwohl sie aktuualisiert wird. Normal sollte da die IP-Adresse stehen, aber Variable ist leer.

„RemoteEndPoint“:„192.168.178.37“

Mach doch mal eine Log-Ausgabe davor …

IPS_LogMessage('Data', $Data['RemoteEndPoint']);
SetValueString(13894, $Data['RemoteEndPoint']);

… dann siehst DU im Status-Widget der Console was der Inhalt war!

Gruß Heiko

Absender Data, Nachricht = leer