Bonjour Salvialf, bonjour tomdom,
à priori, le problème des droits d'accès semble résolu, donc je vais plutôt orienter ma réponse sur le script en lui-même
Comme je l'ai indiqué, le fichier XML posait des soucis d'interprétation dans Jeedom (et surtout était bloqué en lecture !), donc je suis passé au format JSON, à priori mieux adapté. Pour la méthode, rien ne change : Je récupère le fichier XML "standard" généré par Plex, je le transforme via XSLT, je récupère une chaine XML que je converti en JSON (c'est là la nouveauté)
Donc le script PHP qui traite le XML "standard" de Plex :
ConvertXML.php
Code : Tout sélectionner
<?php
// Traitement du fichier initial
// ---------------------------------------------------------------
$FichierPLEX="http://ip_plex:port_plex/status/sessions?X-Plex-Token=xxxxxxxxxxxxxxxxxxxxxxxxxxx";
$FichierXSL="/var/www/html/plugins/script/core/ressources/Plex/XML_Plex.xsl";
// Fichiers Source et Destination
$Fichier_Plex_Local="/var/www/html/plugins/script/core/ressources/Plex/Plex_Local.xml";
$Fichier_JSON_Simple="/var/www/html/plugins/script/core/ressources/Plex/Plex_Values.json";
// Destruction préalable pour éviter les faux-positifs
unlink($Fichier_Plex_Local);
unlink($Fichier_JSON_Simple);
$Contenu=file_get_contents($FichierPLEX);
file_put_contents($Fichier_Plex_Local, $Contenu);
// On teste si le fichier fait plus de 200 octets (dans le cas contraire, c'est que Plex n'est pas lancé)
if (filesize($Fichier_Plex_Local) > 200)
{
$DocDOM_XML = new DomDocument();
$DocDOM_XML->load($Fichier_Plex_Local);
$DocDOM_XSL = new DomDocument();
$DocDOM_XSL->load($FichierXSL);
$Processus = new XSLTProcessor;
$Processus->importStyleSheet($DocDOM_XSL);
$XML_Resultat = $Processus->transformToXML($DocDOM_XML);
$Chaine_XML = simplexml_load_string($XML_Resultat);
$JSON_Resultat = json_encode($Chaine_XML);
file_put_contents($Fichier_JSON_Simple, $JSON_Resultat);
// Mise à 1 d'une variable Jeedom qui servira de déclencheur au scénario
echo "1";
} else {
// Destruction du fichier local pour éviter les traitements superflux
unlink($Fichier_Plex_Local);
// Mise à 0 de la variable Jeedom
echo "0";
}
?>
et voilà un beau fichier JSON tout propre
Concernant le XSLT (pour passer d'un fichier XML Plex "standard" à un XML "exploitable"), et qui , pour répondre à Salvialf, permet d'avoir une durée lisible, voici le code :
XML_Plex.xsl
Code : Tout sélectionner
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" encoding="UTF-8" indent="yes" />
<xsl:template match="MediaContainer">
<xsl:for-each select="Video">
<Video>
<NumBiblio><xsl:value-of select="@librarySectionID"></xsl:value-of></NumBiblio>
<NameBiblio><xsl:value-of select="@librarySectionTitle"></xsl:value-of></NameBiblio>
<Titre><xsl:value-of select="@title"></xsl:value-of> (<xsl:value-of select="@year"></xsl:value-of>)</Titre>
<xsl:variable name="Heure" select="floor(@duration div 3600000)" />
<xsl:variable name="Minute" select="floor((@duration - ($Heure*3600000)) div 60000)" />
<xsl:variable name="Seconde" select="floor((@duration - ($Heure*3600000) - ($Minute*60000)) div 1000)" />
<Duree><xsl:value-of select="concat($Heure,':',$Minute,':',$Seconde)"></xsl:value-of></Duree>
<TimeJeedom><xsl:value-of select="concat($Heure,$Minute)"></xsl:value-of></TimeJeedom>
<EtatLecture><xsl:value-of select="Player/@state"></xsl:value-of></EtatLecture>
<IPClient><xsl:value-of select="Player/@address"></xsl:value-of></IPClient>
<TypeAcces><xsl:value-of select="Session/@location"></xsl:value-of></TypeAcces>
<Plateforme><xsl:value-of select="Player/@platform"></xsl:value-of></Plateforme>
<Machine><xsl:value-of select="Player/@device"></xsl:value-of></Machine>
</Video>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Un fois fait, j'ai 2 scripts spécifiques. Le 1er permet de récupérer l'état de la conversion (le résultat de echo "0" ou echo "1" du script PHP), ce qui me permet d'avoir un déclencheur propre. NB : ce script s'exécute toutes les minutes via CRON
Le 2ème ne se lance que si le résultat de script précédent est à 1. Il permet de récupérer les infos du JSON
Et maintenant, les scénarii qui vont bien (y en a 2 !)
1er scénario : réaction à l'état du 1er script. si l'état passe à 1, on active + lance mon scénario qui gère les lumières (ou autre chose, peu importe
). Dans le cas contraire (si l'état passe à 0), on arrête et désactive le 2ème scénario (sinon, vos lumières vont se couper toutes les minutes une fois que Plex sera arrêté ! Et c'est chiant d'appuyer toutes les minutes sur un interrupteur
)
2ème scénario : le traitement proprement dit de ce qui doit être fait quand Plex est lancé (éteindre des lumières sur Start, mettre une veilleuse sur Pause, diminuer le volume passé 23h, etc...)
Et voilà, vous savez tout... Et chez moi, ça marche nickel
Si il y a besoin d'infos complémentaires, n'hésitez pas !
Bonne journée