Cette première partie va servir à expliquer comment lire/écrire certaines valeurs de Squeeze Center (volume, play, stop,…) depuis/vers des objets (adresses de groupe) linknx. La deuxième partie du document expliquera comment utiliser ces valeurs depuis un z38i.
Pour nous connecter au CLI de Squeeze Center (http://wiki.slimdevices.com/index.php/Logitech_Media_Server_CLI), nous allons utiliser les ioports de linknx. Par défaut le CLI est disponible sur le port TCP 9090. Nous déclarons donc notre ioport de la façon suivante:
<ioports> <ioport id="squeezebox" type="tcp" host="10.0.0.1" port="9090" permanent="true" /> </ioports>
(remplacez 10.0.0.1 par l'adresse IP du serveur où tourne votre serveur Squeeze Center)
Lors de la communication via le CLI, les différentes platines sont identifiées via leur adresse MAC, les exemples fournis dans ce tutoriel concerneront la platine ayant l'adresse MAC 00:00:00:00:00:01.
Si votre Squeeze Center est commandé via un autre moyen que linknx (une SqueezeBox Controller par exemple), il peut être intéressant de connaitre les statuts (on/off, volume,…) dans linknx. Pour ce faire, nous pouvons utiliser le CLI qui permet d'afficher en temps réel les évènements qui se produises. Pour activer cette fonctionnalité, nous devons envoyer la commande “listen 1” au CLI au début de la connexion. Nous envoyons cette commande via la rule suivante:
<rule id="squeezecenter_connect"> <condition type="ioport-connect" ioport="squeezebox" trigger="true"/> <actionlist> <action type="ioport-tx" ioport="squeezebox" data="listen 1
" /> </actionlist> </rule>
Nous allons définir 2 objets pour la gestion du On/Off, un pour la commande et un pour le retour d'état.
<object type="1.001" id="audio_sdb_onoff_commande" gad="3/0/0">Audio SDB On/Off commande</object> <object type="1.001" id="audio_sdb_onoff_status" gad="3/0/1" init="persist" flags="crtu">Audio SDB On/Off retour</object>
La rule suivante sera utilisée pour allumer et éteindre une platine:
<rule id="audio_sdb_onoff"> <condition type="object" id="audio_sdb_onoff_commande" value="on" trigger="true" /> <actionlist> <action type="ioport-tx" ioport="squeezebox" data="00:00:00:00:00:01 play
" /> </actionlist> <actionlist type="on-false"> <action type="ioport-tx" ioport="squeezebox" data="00:00:00:00:00:01 power 0
" /> </actionlist> </rule>
La rule suivante nous permettra de gérer le retour d'état:
<rule id="audio_sdb_onoff_monitor"> <condition type="ioport-rx" expected="00%3A00%3A00%3A00%3A00%3A01 power ([01])" regex="true" object1="audio_sdb_onoff_status" ioport="squeezebox" trigger="true"/> <actionlist> </actionlist> </rule>
Nous utilisons ici deux objets de type 0-100%:
<object type="5.001" id="audio_sdb_volume_commande" gad="3/0/2">Audio SDB Volume commande</object> <object type="5.001" id="audio_sdb_volume_status" gad="3/0/3" init="persist" flags="crtu">Audio SDB Volume status</object>
Rule pour la commande:
<rule id="audio_sdb_volume"> <condition type="object-compare" id="audio_sdb_volume_commande" id2="audio_sdb_volume_commande" op="eq" trigger="true" /> <actionlist type="if-true"> <action type="script"> value=obj("audio_sdb_volume_commande"); iosend("squeezebox", "00:00:00:00:00:01 mixer volume " .. value .. "\n"); </action> </actionlist> </rule>
Pour le retour d'état:
<rule id="audio_sdb_volume_monitor"> <condition type="ioport-rx" expected="00%3A00%3A00%3A00%3A00%3A01 prefset server volume ([0-9]*)" regex="true" object1="audio_sdb_volume_status" ioport="squeezebox" trigger="true"/> <actionlist> </actionlist> </rule>
A suivre…