Hello,
Voici un petit tuto permettant de piloter une barre de son Samsung HW-MS650.
Cette méthode devrait fonctionner (avec de légers ajustements) pour tous les appareils compatibles « multiroom Samsung ».
OBJECTIF:
- Piloter depuis Jeedom ma barre de son (power, source, volume),
- Récupérer l’état de la barre dans Jeedom.
RESULTATS:
- Pilotage fonctionnel power, mute, volume, source,
- Possibilité de piloter bien plus de chose (play, pause, playlist, etc…) avec le même principe; mais ce n’est pas détaillé ici. Toutes les methodes de l’API se trouvent ici https://github.com/bacl/WAM_API_DOC/blob/master/API_Methods.md
- Récupération des status principaux (power, mute, volume, source).
LIMITATIONS (non exhaustif):
- Je n’en connais pas, on peut tout faire, les commandes de l’API sont exhaustives,
- Rappel: Votre barre de son doit être compatible « multiroom Samsung ».
PREREQUIS:
- Plugin VIRTUEL (pour récupérer l’etat de la barre).
PRINCIPE:
- Envoi de requêtes HTTP (API REST je pense).
FONCTIONNEMENT:
- COMMANDE:
- Un scénario « maitre » appelle un scénario de commande en lui envoyant (tag) les commandes à passer (1 tag « commande » et 1 tag « valeur »)(par ex. « commande=volume valeur=12 »)
- Un scénario de commande, avec un bloc code PHP qui permet de lancer les requetes HTTP qui vont bien en fonction des tags qu’il recoit
- STATUS:
- Un scénario avec un bloc de code PHP tourne régulièrement, lance les requetes, récupère les infos et met à jour un virtuel info dans Jeedom
COMMANDE:
- Créez un scénario (BarreDeSon_Commande) avec le bloc de code suivant. Naturellement, adaptez avec l’IP de votre appareil:
function launchHTTPResult($url){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_CUSTOMREQUEST => "GET"
));
$response = curl_exec($curl);
curl_close($curl);
return $response;
}
// Recuperation des tags
$tags = $scenario->getTags();
$command=$tags['#commande#'];
$value=$tags['#valeur#'];
switch ($command) {
case "power":
if ($value == "on") {
$url="http://192.168.2.10:55001/UIC?cmd=%3Cname%3ESetPowerStatus%3C/name%3E%3Cp%20type=%22dec%22%20name=%22powerstatus%22%20val=%221%22/%3E";
} else {
$url="http://192.168.2.10:55001/UIC?cmd=%3Cname%3ESetPowerStatus%3C/name%3E%3Cp%20type=%22dec%22%20name=%22powerstatus%22%20val=%220%22/%3E";
}
break;
case "mute":
// on OU off
$url="http://192.168.2.10:55001/UIC?cmd=%3Cpwron%3Eon%3C/pwron%3E%3Cname%3ESetMute%3C/name%3E%3Cp%20type=%22str%22%20name=%22mute%22%20val=%22".$value."%22/%3E";
break;
case "volume":
$url="http://192.168.2.10:55001/UIC?cmd=%3Cname%3ESetVolume%3C/name%3E%3Cp%20type=%22dec%22%20name=%22volume%22%20val=%22".$value."%22/%3E";
break;
case "source":
// bt / optical (pour TV ARC et D IN) / aux / wifi
$url="http://192.168.2.10:55001/UIC?cmd=%3Cname%3ESetFunc%3C/name%3E%3Cp%20type=%22str%22%20name=%22function%22%20val=%22".$value."%22/%3E";
break;
}
$result=launchHTTPResult($url);
- Vous pouvez créer une action, dans un autre scénario, pour passer la commande vers votre barre de son (ex: « commande=volume valeur=10 », « commande=power valeur=off », etc…).
STATUT:
Si vous le souhaitez, vous pouvez récupérer les infos de votre barre de son pour les stocker dans un virtuel:
- Créez un virtuel qui va récupérer les infos de votre barre de son. Dans mon exemple, j’utilise 4 commandes de type info pour le power (binaire), le volume (numerique), le mute (binaire) et la source (autre):
- Créez un scénario (BarreDeSon_Statut) avec le bloc de code suivant. Naturellement, adaptez avec l’IP de votre appareil et avec les Id de vos commandes Jeedom (par ex. « cmd::byId(1002) » => Remplacez 1002 par l’Id de votre commande, etc…):
function searchHTTPResult($url,$clef){
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => $url,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_CUSTOMREQUEST => "GET"
));
$response = curl_exec($curl);
curl_close($curl);
$balise1='<'.$clef.'>';
$balise2='</'.$clef.'>';
$pos1 = strpos($response, $balise1)+strlen($balise1);
$pos2 = strpos($response, $balise2);
$value = substr("$response",$pos1, $pos2-$pos1);
return $value;
}
//===============================================================================
// GetPowerStatus (Power)
//===============================================================================
$url = 'http://192.168.xxx.xxx:55001/UIC?cmd=%3Cname%3EGetPowerStatus%3C/name%3E';
$clef='powerStatus';
//------------
$result=searchHTTPResult($url,$clef);
// Mise à jour du virtuel Jeedom
cmd::byId(968)->event($result);
//===============================================================================
// GetFunctionStatus (Input) bt / optical (pour TV ARC et D IN) / aux / wifi
//===============================================================================
$url = 'http://192.168.xxx.xxx:55001/UIC?cmd=%3Cname%3EGetFunc%3C/name%3E';
$clef='function';
//------------
$result=searchHTTPResult($url,$clef);
// Mise à jour du virtuel Jeedom
cmd::byId(970)->event($result);
//===============================================================================
// GetVolume (Volume)
//===============================================================================
$url = 'http://192.168.xxx.xxx:55001/UIC?cmd=%3Cname%3EGetVolume%3C/name%3E';
$clef='volume';
//------------
$result=searchHTTPResult($url,$clef);
// Mise à jour du virtuel Jeedom
cmd::byId(969)->event($result);
//===============================================================================
// GetMute (Mute)
//===============================================================================
$url = 'http://192.168.xxx.xxx:55001/UIC?cmd=%3Cname%3EGetMute%3C/name%3E';
$clef='mute';
//------------
$result=searchHTTPResult($url,$clef);
// Mise à jour du virtuel Jeedom
if ($result == "on")
{
$result=1;
}
else
{
$result=0;
}
cmd::byId(1002)->event($result);
- Lancez le scénario lorsque vous voulez mettre à jour les infos (lancement du scénario par programmation, toutes les minutes par ex.).
NEXT STEP:
Cette barre est compatible Smartthings et peut être pilotée via l’application sur téléphone en wifi. J’aurai aimé arriver à utiliser cette fonctionnalité; mais je n’ai pas trouvé de moyen pour la piloter via Smarthings (sans avoir à acheter un hub Smarthings, évidemment). Si vous savez m’aider, je suis preneur de vos solutions.
Enjoy !