Retour d'expérience sur le X-display-v2

Bonjour @choupfamily, peux-tu m’en dire plus sur la maniere que tu as utilisée pour lier les commandes d’un player avec ton spotify? Comme expliqué dans l’autre sujet IPX v5 Widget son - #7 par Helethom j’arrive à afficher les informations de titres et d’auteurs mais pas à avoir des boutons fonctionnels…

Pour info voici le code du scenario Jeedom que j’utilise pour arriver à afficher les infos sur le player depuis Jeedom. Il est facile à utiliser car on le paramètre dans les tags au début et ensuite la requête est envoyée dans un bloc Code avec du Curl. :

- Nom du scénario : Sync Sonos Salon -> IPX800
- Objet parent : Salon
- Mode du scénario : all
    - Programmation : */5 * * * *
    - Evènement : #[Salon][192.168.1.XX - Sonos Arc][Répéter statut]#
    - Evènement : #[Salon][192.168.1.XX - Sonos Arc][Muet statut]#
    - Evènement : #[Salon][192.168.1.XX - Sonos Arc][Aléatoire statut]#
    - Evènement : #[Salon][192.168.1.XX - Sonos Arc][Piste]#
    - Evènement : #[Salon][192.168.1.XX - Sonos Arc][Statut]#



    
    ACTION
     tag - Options : {"enable":"1","background":"0","name":"ip","value":"192.168.1.xx"}//IP de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"apikey","value":"XXXXXXXXX"} // API key de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"ID_IPX800_Title","value":"xxxxx"} // ID récupéré à l'aide de l'API DECK de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"ID_IPX800_Artist","value":"xxxxx"} // ID récupéré à l'aide de l'API DECK de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"ID_IPX800_Random","value":"xxxxx"} // ID récupéré à l'aide de l'API DECK de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"ID_IPX800_Loop_Mode","value":"xxxxx"} // ID récupéré à l'aide de l'API DECK de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"ID_IPX800_Mute","value":"xxxxx"} // ID récupéré à l'aide de l'API DECK de l'IPX800
     tag - Options : {"enable":"1","background":"0","name":"String_SONOS","value":"[Salon][192.168.1.XX - Sonos Arc]"}
    
    CODE
     (code) $tags = $scenario->getTags();
    
    // Configuration de l'IPX800
    $Config_IPX800 = array(
        'ip' => $tags['#ip#'],
        'apikey' => $tags['#apikey#']
    );
    
    // Données pour le Player
    $Player_Data = array(
        'Artist' => array(
            'ipx800id' => $tags['#ID_IPX800_Artist#'],
            'ipx800folder' => '/api/core/str/',
            'sonosvalue' => cmd::byString('#' . $tags['#String_SONOS#'] . '[Artiste]#')->execCmd()
        ),
        'Title' => array(
            'ipx800id' => $tags['#ID_IPX800_Title#'], 
            'ipx800folder' => '/api/core/str/',
            'sonosvalue' => cmd::byString('#' . $tags['#String_SONOS#'] . '[Piste]#')->execCmd()
        ),
        'Random' => array(
            'ipx800id' => $tags['#ID_IPX800_Random#'],
            'ipx800folder' => '/api/core/io/',
            'sonosvalue' => cmd::byString('#' . $tags['#String_SONOS#'] . '[Aléatoire statut]#')->execCmd()
        ),
        'Mute' => array(
            'ipx800id' => $tags['#ID_IPX800_Mute#'],
            'ipx800folder' => '/api/core/io/',
            'sonosvalue' => cmd::byString('#' . $tags['#String_SONOS#'] . '[Muet statut]#')->execCmd()
        ),
        'Loop_Mode' => array(
            'ipx800id' => $tags['#ID_IPX800_Loop_Mode#'],
            'ipx800folder' => '/api/core/ana',
            'sonosvalue' => cmd::byString('#' . $tags['#String_SONOS#'] . '[Répéter statut]#')->execCmd()
        )
    );
    
    // Fonction pour envoyer les données via PUT
    function put($url, $data) {
        $curl = curl_init($url);
        $headers = array(
            "accept: application/json",
            "Content-Type: application/json"
        );
        curl_setopt($curl, CURLOPT_URL, $url);
        curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
        curl_setopt($curl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
        curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
        curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode($data));
    
        $resp = curl_exec($curl);
        if ($resp === false) {
            throw new Exception('cURL error: ' . curl_error($curl));
        }
        curl_close($curl);
        return $resp;
    }
    
    // Fonction principale pour exécuter les commandes sur l'IPX800
    function execute($Config_IPX800, $Player_Data) {
        foreach ($Player_Data as $key => $info) {
            $urlPut = 'http://' . $Config_IPX800['ip'] . $info['ipx800folder'] . $info['ipx800id'] . '?ApiKey=' . $Config_IPX800['apikey'];
            $body = array('value' => $info['sonosvalue']);
            try {
                $response = put($urlPut, $body);
                // Log pour déboguer
                // log::add('GCE_IPX800V5', 'debug', $urlPut . ' PUT : ' . json_encode($response));
            } catch (Exception $e) {
                // Gestion d'erreur
                log::add('GCE_IPX800V5', 'error', 'Error sending data to IPX800: ' . $e->getMessage());
            }
        }
    }
    
    // Exécution avec les données configurées
    execute($Config_IPX800, $Player_Data);
    
    

1 « J'aime »