MyVera – Implémentation d’un module non reconnu par MyVera

Suite à une question concernant la gestion du plugin d’une Squeezebox, j’ai décidé de faire un tutoriel pour montrer comment implémenter un module dans une vue même si celui-ci n’est pas géré par MyVera. N’ayant pas de Squeezebox, je l’ai fait pour une enceinte Sonos.Le plugin Sonos est implémenté dans MyVera mais ici nous allons voir comment géré une de ces enceinte sans utiliser cette implémentation.

Nous allons voir comment configurer un vue pour obtenir une interface de ce type:

sonosinterface

Il faut commencer par ajouter une vue et lui mettre le fond désiré.
Il faut ensuite y ajouter les différents modules ou clones.

Les paramètres qui suivent seront pour un écran Retina (ce qui veut dire que les icônes personnalisées auront un nom avec "@2x" et que le paramètre Largeur Icône sera à définir pour chaque module ou clone).

Le bouton mute:

Cet exemple permet de voir comment, avec un Custom Device, il est possible de gérer une action que ne connait pas MyVera (ici couper le son ou le remettre). La contrainte est que la variable utilisée soit un entier. C’est le cas de la variable mute (0 ou 1) du module Sonos.

Dans la partie configuration des modules, il faut éditer le module de l’enceinte Sonos pour le configurer ainsi:

  • Catégorie: Custom Device
  • Sub-catégorie: Normal
  • Tableau de bord: Désactivé
  • Variable Etat: mute
  • Commande: urn:upnp-org:serviceId:RenderingControl|SetMute|targetvalue
  • Num. Icône: 301
  • Largeur Icône: 32

La partie commande sert à lancer la commande SetMute. Elle est sans valeur. targetvalue n’a donc pas d’effet et vous pouvez y mettre un autre texte.

Il faut ajouter les icônes suivant dans resources/images:

d301_0@2xd301_1@2x

Elles seront nommées respectivement d301_0@2x.png et d301_1@2x.png et font 64px.
Le module ne sera pas affiché dans le tableau de bord, il n’y a donc pas besoin d’icône pour celui-ci. Cependant, pour ne pas avoir une icône manquante dans la partie configuration, je vous recommande de prendre l’image d301_0@2x.png, de la redimensionner en 50px et de la sauvegarder sous le nom l301_0@2x.png.

Le bouton Play/Pause:

Le module de la Sonos (ID=94) ne peut être utilisé directement car la variable d’état TransportState n’est pas un entier.
Nous allons d’abord configurer la Vera et utiliser un module Variable Container (ID=25) et deux scènes.

Une scène pour configurer le Variable Container:

L’enceinte peut avoir 4 état (playing, paused, stopped, transitionning). Chacun de ces états sera déclencheur de la scène:

scene1A titre d’exemple, pour le passage vers l’état stop, le déclencheur est le suivant:

scene2Ces déclencheurs lanceront le code luup suivant:

local statustxt = luup.variable_get("urn:upnp-org:serviceId:AVTransport", "TransportState", 94)
local status = 3
if (statustxt == "PAUSED_PLAYBACK") then
status=1
elseif (statustxt == "PLAYING") then
status=0
elseif (statustxt == "STOPPED") then
status=2
end
luup.variable_set("urn:upnp-org:serviceId:VContainer1","Variable1", status, 25)

Chaque état affecte donc variable1 du Variable Container avec un nombre de 0 à 3.

Une scène pour faire changer d’état la Sonos:

Une autre scène (avec l’ID=4 que nous utiliserons dans ce qui suit) servira à passer la Sonos en mode pause ou en mode play. Celle-ci n’a pas de déclencheur. Le lancement de la scène exécutera le code luup suivant:

local statustxt = luup.variable_get("urn:upnp-org:serviceId:AVTransport", "TransportState", 94)
if (statustxt == "PLAYING") then
luup.call_action("urn:micasaverde-com:serviceId:MediaNavigation1", "Pause", {}, 94)
else
luup.call_action("urn:micasaverde-com:serviceId:MediaNavigation1", "Play", {}, 94)
end

Configuration de MyVera:

Nous ajoutons le Variable Container à MyVera avec la configuration suivante:

  • Catégorie: Custom Device
  • Sub-catégorie: Normal
  • Tableau de bord: Désactivé
  • Variable Etat: variable1
  • Num. Icône: 300
  • Largeur Icône: 128
  • Num. scène on: 4
  • Num scène off: 4

Un clic sur l’icône lancera la scène 4 ce qui fera changer d’état la Sonos. variable1 permet de faire afficher une des quatre icônes suivantes (de d300_0@2x.png à d300_3@2x.png):

d300_0@2xd300_1@2xd300_2@2xd300_3@2x

Il est également recommandé de mettre l300_0@2x.png.

Une petite explication du comportement du mode switch pour un module de plus de deux états:
Si Variable Etat (ici variable1) n’est pas égale à 0 (ici ce serait que la Sonos est dans un état "not playing"), un clic sur l’icône lancera la scène indiquée dans sceneoff ou sinon une commande avec le paramètre 0.
Si cette variable est égale à 0 ("playing"),  ce sera sceneon ou la commande avec le paramètre 1.
Nous avons donc fait correspondre "PLAYING" à 0 et "PAUSED_PLAYBACK" à 1 afin de permettre le switch entre ces deux états. Sceneon et sceneoff lancent la même scène (avec l’ID 4) ce qui permet d’en économiser une. Au niveau de la Vera, l’effet de switch est géré en fonction de l’état de la Sonos.
Ceci veut dire que, depuis MyVera, il est possible de mettre sur pause mais pas sur stop avec ce type de configuration.

Les autres fonctionnalités sont ensuite gérées en faisant des clones du module de la Sonos.

Un bouton qui tourne pour contrôler le volume

Nous allons maintenant faire un clone du module Sonos pour en faire un slider circulaire. Ce clone aura la configuration suivante:

  • Catégorie: Custom Control
  • Sub-catégorie: Circle Slider
  • Variable Etat: volume
  • Image : 3
  • Suffixe Texte: %
  • Commande: urn:upnp-org:serviceId:RenderingControl|SetVolume|DesiredVolume
  • Incr.|Min|Max|Th.: 1|0|100|120
  • Largeur: 208
  • Couleur Texte: Black
  • Taille Texte: 35px

Les images utilisées pour le slider (et à mettre dans resources/images/cslider avec comme nom fond3.png et thumb3.png) sont:

fond3thumb3

Les boutons morceaux précédent et suivant:

C’est, à nouveau, un clone du module Sonos avec, pour le bouton précédent:

  • Catégorie: Custom Device
  • Sub-catégorie: Normal
  • Commande: urn:micasaverde-com:serviceId:MediaNavigation1|SkipUp|targetvalue
  • Num. Icône: 304
  • Largeur icône: 64

L’image de l’icône est:
d304_0@2xIl n’y a qu’une image d304_0@2x.png car ce clone n’aura qu’un état (le paramètre Variable Etat n’a pas été défini).

Pour le bouton suivant, ce sont les même paramètres sauf:

  • Commande: urn:micasaverde-com:serviceId:MediaNavigation1|SkipDown|targetvalue
  • Num. Icône: 303

Avec cette icône:
d303_0@2x

Affichage des infos sur la chanson:

Nous allons créer un clone qui aura comme seule fonction l’affichage des informations contenues dans la variable currentstatus du module Sonos:

  • Catégorie: Custom Device
  • Sub-catégorie: Normal
  • Variable Texte 1: currentstatus
  • Couleur Texte: White
  • Taille Texte: 15px
  • Num. Icône: 302
  • Largeur icône: 10

Ici, l’icône ne sert à rien, ce sera donc une image png entièrement transparente avec pour nom d302_0@2x.png.

Tous les modules nécessaires sont configurés…

About these ads

12 réflexions sur “MyVera – Implémentation d’un module non reconnu par MyVera

  1. Ping : MyVera – Implementation d'un module non r...
    • j’ai un problème pour le bouton du volume avec les squeezebox, et pareil avec la récupération de la piste en cours… J’ai l’impression que c’est la récupération des variables du plugin squeezebox qui passe pas.

      • Il faut faire une requête de type sdata:
        http://MONIPVERA:3480/data_request?id=sdata
        et aller chercher le module de la Squeezebox pour regarder qu’elles sont les variables renvoyées par la Vera. MyVera ne peut lire que ces variables. Si par exemple, il n’y a pas le niveau du volume, il ne pourra être affiché.

  2. OK, après vérification le module squeezebox ne ressort aucune de ses variables, je vais voir pour faire une copie de la variable dans un variable container. Ou si tu connais un autre moyen

    • Sinon, il faut aller modifier le plugin pour qu’il remonte ces variables comme je l’ai fait lors d’une précédente beta pour le plugin Battery Monitor (et il y a quelques temps pour une ancienne version du plugin Sonos).

      • J’ai ajouté la ligne "volume" dans le fichier "S_RenderingControl1.xml" comme tu l’as expliqué ici : https://sbdomotique.wordpress.com/myvera-download/
        Mais rien à faire, je ne retrouve pas cette info dans le sdata.
        J’ai également essayé d’ajouter :

        CurrentStatus
        currentstatus
        string

        Mais pareil rien ne s’affiche, même en changeant le nom par "SongName" (ou "TargetVolumeLevel" pour le volume) qui correspond à la variable.

      • désolé les codes sont mal passé, c’était :

        <shortCode>volume</shortCode>

        et

        <stateVariable sendEvents="no">
        <name>CurrentStatus</name>
        <shortCode>currentstatus</shortCode>
        <dataType>string</dataType>
        </stateVariable>
        
      • C’est la bonne méthode pour faire remonter une variable d’un module ou d’un plugin via le sdata. Par contre n’ayant pas de Squeezebox, je ne peux pas dire qu’elles sont les variables à utiliser.
        Il ne faut pas oublier de relancer le service luup après une modification…

  3. Ping : MyVera - Implémentation d'un module non ...

Laisser un commentaire

Entrez vos coordonnées ci-dessous ou cliquez sur une icône pour vous connecter:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion / Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion / Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion / Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion / Changer )

Connexion à %s