Récupérer paramètres des commandes

Bonjour,

Version Jeedom: 4.0.61
Tournant sur rpi sur l’OS Linux jeedom 5.4.51-v7

Je cherche à connecter Plex et Jeedom:
Quannd je démarre un film sur Plex, un webhook (Requete HTTP) est envoyé vers mon Jeedom
J’ai donc configuré l’url de ma commande dans Plex,
Je recois bien un event dans mes logs, qui m’affiche le payload (quel média, état de lecture, utilisateur, etc…)

Exécution de la commande [Salon][Plex - Webhooks script][ModeCinema] avec les paramètres {"apikey":"*****","type":"cmd","id":"307","payload":"{\"event\":\"media.resume\",\"user\":true,\"owner\":true,\ .....

Donc on voit bien que le payload est passé en paramètre de la commande

J’ai besoin de filtrer sur certaines valeurs du payload, mais je ne parviens pas à récupérer la valeur de ce payload dans ma commande.
Pour le moment je test avec un script (du plugin script, pas dans un scénario) mais ce payload n’est pas transmis à la variable $argv (en PHP)

  • N’ayant pas la main sur l’emission du hook, je ne peux pas passer de tags à l’appel du scénario
  • Je ne souhaite pas utiliser le plugin Plex, car d’après le topic officiel du plugin, il a l’air mort et que je ne veux pas payer pour tester (et en plus, pas sûr qu’il fasse ce que je veux)

Ma question: Est-il possible de manipuler ce payload via un script PHP dans Jeedom ? (script ou scénarion code)

J’ai pas mal parcouru le web et les docs, mais entre le changement d’URL du forum et certaines pages pas à jour, je galère…
Merci

Complément d’information:
Le script PHP (hors scénario) que j’ai tenté pour faire des essais est le suivant (en lisant la doc https://doc.jeedom.com/fr_FR/plugins/programming/script/#Les%20paramètres)

<?php
	require_once '/var/www/html/core/php/core.inc.php';
	$logName = "script";

    foreach ($_SERVER as $key => $var) {
    	log::add($logName,"INFO",'$_server['.$key.'] = ' . $var) ;
    }

    if (isset($argv)) {
     	foreach ($argv as $arg) {
        	log::add($logName,"INFO",'$arg ' . $arg) ;
         	$argList = explode('=', $arg);
         	if (isset($argList[0]) && isset($argList[1])) {
             	$_GET[$argList[0]] = $argList[1];
         	}
    	}
    }			
?>

Avec la config suivante

et qui me sort les logs suivants:

[2020-08-14 17:09:09][DEBUG] : Execution de : php /var/www/html/plugins/script/data/plex-webhook.php 2>&1
[2020-08-14 17:09:09][INFO] : $_server[APACHE_RUN_DIR] = /var/run/apache2
[2020-08-14 17:09:09][INFO] : $_server[APACHE_PID_FILE] = /var/run/apache2/apache2.pid
[2020-08-14 17:09:09][INFO] : $_server[JOURNAL_STREAM] = 8:11665
[2020-08-14 17:09:09][INFO] : $_server[PATH] = /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
[2020-08-14 17:09:09][INFO] : $_server[INVOCATION_ID] = ******
[2020-08-14 17:09:09][INFO] : $_server[APACHE_LOCK_DIR] = /var/lock/apache2
[2020-08-14 17:09:09][INFO] : $_server[LANG] = C
[2020-08-14 17:09:09][INFO] : $_server[APACHE_RUN_USER] = www-data
[2020-08-14 17:09:09][INFO] : $_server[APACHE_RUN_GROUP] = www-data
[2020-08-14 17:09:09][INFO] : $_server[APACHE_LOG_DIR] = /var/log/apache2
[2020-08-14 17:09:09][INFO] : $_server[PWD] = /var/www/html/core/api
[2020-08-14 17:09:09][INFO] : $_server[PHP_SELF] = /var/www/html/plugins/script/data/plex-webhook.php
[2020-08-14 17:09:09][INFO] : $_server[SCRIPT_NAME] = /var/www/html/plugins/script/data/plex-webhook.php
[2020-08-14 17:09:09][INFO] : $_server[SCRIPT_FILENAME] = /var/www/html/plugins/script/data/plex-webhook.php
[2020-08-14 17:09:09][INFO] : $_server[PATH_TRANSLATED] = /var/www/html/plugins/script/data/plex-webhook.php
[2020-08-14 17:09:09][INFO] : $_server[DOCUMENT_ROOT] =
[2020-08-14 17:09:09][INFO] : $_server[REQUEST_TIME_FLOAT] = 1597417749.3373
[2020-08-14 17:09:09][INFO] : $_server[REQUEST_TIME] = 1597417749
[2020-08-14 17:09:09][INFO] : $_server[argv] = Array
[2020-08-14 17:09:09][INFO] : $_server[argc] = 1
[2020-08-14 17:09:09][INFO] : $arg /var/www/html/plugins/script/data/plex-webhook.php

Mais aucune trace de mon payload dans les arguments

Bonjour,

je t’invite à lire ces infos avant de poster afin de donner les informations nécessaire pour qu’on puisse t’aider :

Messsage initial mis à jour

1 « J'aime »

Rebonjour,

En élargissant mes recherches sans me focaliser sur mon problème de paramètre, je suis tombé sur un tuto qui explique comment faire en utilisant le plugin HTTP Remote Event
https://www.tutos.snatch-crash.fr/domotique-jeedom-recuperer-les-informations-de-plex/

Mais ca ne réponds toujours pas à la question de récupérer les paramètres d’une commande.

Bonsoir,
dans le doc du plug-in script il y a pourtant un exemple pour récupérer des valeurs depuis un json

Absolument, sauf que je ne peux pas utiliser un script de type JSON.
Si j’ai bien compris, le script JSON fait un appel à une URL et analyse le retour.
Dans mon cas, ce n’est pas Jeedom qui doit faire l’appel, mais bien Plex qui m’envoi une requete contenant un JSON.

Donc si j’ai bien suivi, le json est déjà dans une commande (d’un équipement virtuel par exemple) ?

Dans ce cas, si vous avez votre script PHP, vous pouvez l’appeler en passant en paramètre le commande en question.

Non, le JSON est dynammique.
Plex (qui tourne sur un serveur différent de Jeedom) me le transmet dans le corps de sa requete HTTP.
En gros, quand je démarre un film sur Plex, Plex envoi un message à Jeedom
« Jeedom, psyko est un train de regarder un film, voici les infos du film en JSON (dans le Body de la requete HTTP) »

Plex envoi le message à Jeedom est utilisant le lien direct du script (je ne l’ai plus, mais qqchose du genre)
http://#IP_JEEDOM#/core/api/jeeApi.php?apikey=#APIKEY#&type=cmd&id=307

Comme attendu, Jeedom déclenche la commande 307 et m’affiche bien les paramètres dans le log event

Exécution de la commande [Salon][Plex - Webhooks script][ModeCinema] avec les paramètres {"apikey":"*****","type":"cmd","id":"307","payload":"{\"event\":\"media.resume\",\"user\":true,\"owner\":true,\ ....

Dans le log, on voit que Jeedom à bien réussi à retrouver le payload, puisqu’il l’affiche dans le log

La commande 307 est simplement un objet du plugin Script, associé à un script PHP.
Mais dans le script PHP associé à la commande, impossible de récupérer la valeur de ce paramètre payload.

Aucun autre objet ou virtuel n’est utilisé. Le JSON n’existe nul part, en dehors des messages venant de Plex.
J’avoue ne pas avoir cherché plus depuis que j’ai réussi à faire ce que je voulais avec HttpRemoteEvent

Une commande action/défaut ne peut pas recevoir de paramètre.
Il te faut par exemple une commande action/message. Et ce type de commande par exemple s’attend à avoir un paramètre « title » et/ou « message ».

Donc si elle recoit un json, en fait jeedom va decoder le json et le mettre dans un tableau et tenter d’extraire la valeur de « title » et « message » donc il faudrait que ton payload soit dans un index « message » et pas « payload », au premier niveau (pas imbriquer dans un autre noeud).
Si tu fais cela, alors dans ta commande action tu peux appeler ton script php en mettant le tag #message# là où tu veux que la commande y mette la valeur correspondante, par exemple monscript.php #message# et dans ton script tu pourras le récupérer avec $argv

Deuxième solution, si tu ne peux pas changer l’index « payload » en « message », faire en sorte que plex appelle une commande info/autre et pas une commande action, dans ce cas la valeur de la commande sera la valeur reçue et tu pourras passer cette commande info en paramètre de ton script (voir ci-dessus avec une commande action/message);
A ce moment ton script recevrait tout le json et à toi de le parser.

mais bon, si tu as une solution, c’est le principal.

JE vois.
Merci pour l’explication détaillée.

Effectivement, je vais rester avec la solution que j’ai trouvé, puisqu’elle fonctionne :slight_smile:

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.