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);