Mise en oeuvre d'UPnP sur OSGi
par Didier DONSEZ (Version du 17/06/2005)

Le cours

Universal Plug and Play (UPnP)

Universal Plug and Play (UPnP) Forum [2] est un consortium industriel ouvert qui s’est formé en 1999 pour la définition de standards simplifiant la mise en réseaux d’équipements communicants dans les maisons et dans les entreprises (SOHO : Small Office Home Office). UPnP Forum a publié une première version des protocoles réseaux requis et un certain nombre de définitions standards de périphériques (devices) et de services associés.

L’architecture d’Universal Plug and Play (UPnP) est celle d’une architecture d’une plateforme distribuée de services dynamiques pour des périphériques communicants (imprimante, télévision, lecteur de DVD, volets déroulants, HVAC ...) t des points de contrôle (PDA, télévision, ... connectés entre eux par un réseau adhoc. UPnP définit les protocoles réseau permettant la détection et le retrait dynamique des périphériques, l’utilisation par les points de contrôle des services qu’ils fournissent et la notification des changements de valeurs des variables d’état associées aux services. Les protocoles définis dans la première version d’UPnP s’appuient beaucoup sur XML et HTTP au dessus de TCP, UDP et UDP Multicast. La prochaine version réoriente les protocoles vers les standards des Web Services.

  • Les transparents de la présentation
  • Installation

    Logiciels

    Les logiciels qui seront utilisés au cours de l'atelier est la suivante. Vous pouvez les installer individuellement ou en masse à partir de l'URL donné au cours de l'atelier
    Installez l'ensemble des logiciels dans le répertoire c:\Temp et fixez la variable d'environnement OSGIUPNP..
    Vous pouvez également ajouter les documents relatifs à OSGi et UPnP dans vos bookmarks.

    Pare-Feu

    Sur Windows XP, il est parfois nécessaire d'autoriser les échanges UPnP avec votre hôte en reconfigurant le pare-feu.
    Pour cela, cochez la case "Infrastructure UPnP" dans "Panneau de Configuration > Pare-Feu Windows > Exceptions"

    Pare-feu Windows XP
    Vous pouvez également configurer des composants UPnP pour Windows XP. Pour cela, cochez les cases suivantes dans "Panneau de Configuration > Ajouter ou Supprimer des programmes > Ajouter ou Supprimer des composants Wondows"
    Configuration Windows XP UPnP 1     Configuration Windows XP UPnP 2

    Manipulation avec le SDK Intel


    Le SDK UPnP d'Intel requiert le framework .NET (1.1 et + ).
    Le SDK UPnP d'Intel comporte plusieurs outils pour:

    L'ensemble des outils est détaillé dans %OSGIUPNP%\intel-upnp\tools\Readme.htm.
    Nous n'utiliserons pas les outils de génération d'Intel dans cet atelier. Ceux sont néanmoins disponibles dans le répertoire %OSGIUPNP%\intel-upnp\author. Un avant-goût est présenté en annexe.

    Les premières manipulations consistent à lancer des devices et à invoquer des actions dessus.

    Explorateur et Traceur

    Lancez le traceur réseau UPnP %OSGIUPNP%\intel-upnp\tools\Device Sniffer.exe

    Intel Device Sniffer for UPnP Technologies
    Remarque: le SDK inclut une version de ce Sniffer implementée en Java (lancez java Intel.DeviceSniffer.MainApp depuis le répertoire "%OSGIUPNP%\intel-upnp\tools\Java Tools).

    Lancez l'explorateur réseau UPnP Device %OSGIUPNP%\intel-upnp\tools\Device Spy.exe

    Intel Device Explorer for UPnP Technologies
    Les devices visibles sont ceux que vous lancerez mais également ceux de vos voisins !
    Le traceur peut être configuré (menu Filter) pour n'afficher qu'un sous-ensemble des échanges.

    Un device très simple : une ampoule électrique

    Le premier device est une ampoule électrique (light bulb) munie d'un gradateur (dimmer).
    Lancez l'émulateur de ce device %OSGIUPNP%\intel-upnp\tools\Network Light.exe

    1. L'action SetTarget du service SwitchPower agit sur l'alimentation de l'ampoule
    2. L'action SetLoadLevelTarget du service DimmingService agit sur la gradation de l'intensité lumineuse de l'ampoule
    Utilisez l'explorateur pour faire varier l'intensité lumineuse de votre ampoule et de celle de votre voisin.
    SetTaget action
    light 0% light 25% light 50% light 75% light 100%

    L'architecture Audio-Video d'UPnP

    La seconde manipulation consiste à tester les éléments de l'architecture AV (Audio/Video) d'UPnP.
    Le kit d'Intel comporte :

    1. Lancez ces 3 éléments,
    2. Explorez les services fournis par le(s) serveur(s),
    3. Publiez les fichiers du répertoire %UPNPOSGI%\video sur votre serveur,
    4. Démarrez la lecture d'une vidéo sur votre renderer au moyen du controller ouvert sur votre poste.

    AV Media Server
    Figure: AV Media Server en service (les vidéos et les audios des 2 répertoires sont disponibles à la lecture)

    AV Media Renderer (au lancement) AV Media Renderer AV Media Renderer (en cours de lecture)
    Figure: AV Media Renderer

    AV Media Controller
    Figure: AV Media Controller

    Autres équipements UPnP

    La liste complete des devices et des services standardisés est dans le répertoire %UPNPOSGI%\upnposgi-tools\upnp-forum\standardizeddcps
    Visualisez quelques uns des documents de spécification.

    Prise en main OSCAR

    Pour la prise en main d'OSCAR, la passerelle OSGi que nous utiliserons,

    1. positionnez vous dans le répertoire %OSGIUPNP%\oscar1.0.4
    2. suivez la première partie du tutoriel général sur OSGi

    UPnP Device Driver

    La spécification "UPnP Device Driver" d'OSGi (R3 chapître 25) spécifie comment les bundles OSGi peuvent être développés pour intéropérer avec des périphériques UPnP et leurs points de contrôle (control point).

    Bundles UPnP sur OSGi

    La démonstration comporte 2 instances d'OSCAR (upnp1, upnp2) qui hébergent respectivement:

      Console
    > oscar
    
    Welcome to Oscar.
    =================
    
    Enter profile name: upnp1
    
    -> obr install "OSGi Service"
    -> rem obr start "DomoWare UPnP Base Driver"
    -> start http://www-adele.imag.fr/~donsez/dev/osgi/upnp/upnpbasedriver-1.0.5-bin.jar
    -> obr start "UPnP Control Point"
    -> start http://www-adele.imag.fr/~donsez/dev/osgi/upnp/clock-1.1.2-bin.jar
    ...
    -> services
    ...
    ->
    

      Console
    > oscar
    
    Welcome to Oscar.
    =================
    
    Enter profile name: upnp2
    
    -> obr install "OSGi Service"
    -> start http://www-adele.imag.fr/~donsez/dev/osgi/upnp/light-1.1.2-bin.jar
    -> start http://www-adele.imag.fr/~donsez/dev/osgi/upnp/tv-1.1.2-bin.jar
    -> start http://www-adele.imag.fr/~donsez/dev/osgi/upnpthermometer/upnpthermometer.jar
    -> rem obr start "DomoWare UPnP Base Driver"
    -> start http://www-adele.imag.fr/~donsez/dev/osgi/upnp/upnpbasedriver-1.0.5-bin.jar
    ...
    -> services
    ...
    ->
    

    Le resultat est à peu près le suivant sur une station de travail :

    UPnP Clock   UPnP Binary Light   UPnP Temperature Sensor
    UPnP Generic Control Point

    Le resultat est à peu près le suivant sur un PDA (tournant OSCAR) :

    Tiny UPnP Control Point (Device List Panel) Tiny UPnP Control Point (Thermometer Panel) Tiny UPnP Control Point (WebCam Panel) Tiny UPnP Control Point (GPS Position Panel)

    Quelques explications:
    UPnP Base Driver a 2 rôles. Premièrement, il exporte les services org.osgi.service.upnp.UPnPDevice à l'extérieur de la passerelle.
    Deuxièmenent, UPnP Base Driver instancie un service org.osgi.service.upnp.UPnPDevice pour chaque device découvert sur le réseau UPnP.


    Pour plus d'information, vous pouvez consulter la documentation Domoware:

    Les commandes de cet exemple d'usage de "UPnP Device Driver" sont présentées dans le script suivant http://www-adele.imag.fr/~donsez/dev/osgi/script/upnp.txt.
    Listez les services fournis par les bundles.

    Développement

    Etant donné le peu de temps disponible, vous completerez un device existant et son point de contrôle associé.

    Simple UPnP TV emulation Tiny UPnP : TV control point GUI

    Il s'agit d'une émulation de téléviseur (description) qui fournit les 3 services suivants: Son point de contrôle utilise un java.awt.Panel pour chacun de ces services. Vous noterez que le java.awt.Panel pour le service standard "SwitchPower" est le même que celui du device "Light Bulb".

    Lancez les commandes suivantes dans un ou deux profils OSCAR pour démarrer le device Simple TV et et le point de contrôle associé.
      Console
    > oscar
    
    Welcome to Oscar.
    =================
    
    Enter profile name: upnptv1
    
    -> obr install "OSGi Service"
    -> rem obr start "DomoWare UPnP Base Driver"
    -> start http://www-adele.imag.fr/~donsez/dev/osgi/upnp/upnpbasedriver-1.0.5-bin.jar
    -> http://www-adele.imag.fr/~donsez/dev/osgi/domowareutil/domowareutil.jar
    -> http://www-adele.imag.fr/~donsez/dev/osgi/upnpgenutil/upnpgenutil.jar
    -> http://www-adele.imag.fr/~donsez/dev/osgi/simpleupnptv/simpleupnptv.jar
    -> services
    ...
    ->
    

      Console
    > oscar
    
    Welcome to Oscar.
    =================
    
    Enter profile name: upnptv2
    
    -> obr install "OSGi Service"
    -> rem obr start "DomoWare UPnP Base Driver"
    -> start http://www-adele.imag.fr/~donsez/dev/osgi/upnp/upnpbasedriver-1.0.5-bin.jar
    -> obr start "Tiny Shell GUI"
    -> obr start "Tiny Shell Component"
    -> http://www-adele.imag.fr/~donsez/dev/osgi/domowareutil/domowareutil.jar
    -> http://www-adele.imag.fr/~donsez/dev/osgi/upnpgenutil/upnpgenutil.jar
    -> http://www-adele.imag.fr/~donsez/dev/osgi/tinyupnp/tinyupnp.jar
    -> services
    ...
    ->
    


    La travail à réaliser consiste à faire évoluer la version actuelle du service "VolumeSelector" pour que ce service permet la coupure et la reprise du volume.
    Le service incluera une variable d'état "Mute" et les actions (setter/getter) associées.
    Exercice: proposez un SSDP pour la nouvelle version du service "VolumeSelector".

    Développement d'un Device UPnP

    Le projet Eclispe pour compléter le développement du device UPnP est dans le répertoire %OSGIUPNP%\workspace\simpleupnptv

    1. Ouvrez ce projet sous Eclispe
    2. Construisez le jarfile du bundle en exécutant le project ANT (build.xml) associé
    3. Sous OSCAR shell, installez (install) et démarrez (start) le jarfile du bundle regénéré.
    4. Modifiez sous Eclipse le source du bundle pour ajouter la variable d'état Mute et ses setter/getter associés
    5. Reconstruisez le jarfile du bundle en exécutant le project ANT (build.xml)
    6. Sous OSCAR shell, mettez (update) le jarfile du bundle regénéré.
    7. Testez depuis Domoware Generic Control Point les effets des actions sur Mute.
    8. Testez depuis Intel Device Spy les effets des actions sur Mute.
    Remarque: simpletv requière les dependances de package résolus par les bundles:

    Développement d'un point de contrôle UPnP

    Le projet Eclispe pour compléter le développement du point de contrôle UPnP est dans le répertoire %OSGIUPNP%\workspace\tinyupnp

    1. Ouvrez ce projet sous Eclispe
    2. Construisez le jarfile du bundle en exécutant le project ANT (build.xml) associé
    3. Sous OSCAR shell, installez (install) et démarrez (start) le jarfile du bundle regénéré.
    4. Modifiez sous Eclipse le source du bundle pour ajouter un bouton de contrôle de la sourdine
    5. Reconstruisez le jarfile du bundle en exécutant le project ANT (build.xml)
    6. Sous OSCAR shell, mettez (update) le jarfile du bundle regénéré.
    Remarque: ce point de contrôle est développé en AWT pour pouvoir s'exécuter sur des configurations restreintes de machine (PDA, STB, ...).

    Développement Complémentaire

    Si vous avez le temps, vous pouvez compléter le point de contrôle TinyUPnP pour permettre l'affichage du image capturée par le device "UPnP WebCam".

    Développement d'un point de contrôle pour la WebCam UPnP

    Le projet Eclispe pour compléter le développement du point de contrôle UPnP est dans le répertoire %OSGIUPNP%\workspace\tinyupnp

    1. Ouvrez ce projet sous Eclispe
    2. Construisez le jarfile du bundle en exécutant le project ANT (build.xml) associé
    3. Sous OSCAR shell, installez (install) et démarrez (start) le jarfile du bundle regénéré.
    4. Modifiez sous Eclipse le source du bundle pour afficher l'image récupérée et ajouter un bouton de raffraichissement.
    5. Reconstruisez le jarfile du bundle en exécutant le project ANT (build.xml)
    6. Sous OSCAR shell, mettez (update) le jarfile du bundle regénéré.
    Remarque: ce point de contrôle est développé en AWT pour pouvoir s'exécuter sur des configurations restreintes de machine (PDA, STB, ...).

    Annexes

    Génération de devices "OSGi"


    Le bundle UPnP Generated Device contient un générateur de devices UPnP. Ce generateur est constitué de transformateurs XSLT qui génèrent des classes Java à partir des descriptions XML (device et ssdp). Il reste cependant à donner l'implémentation des services (classe XModelImpl).
    Le fonctionnement de la génération est présenté par les transparents suivants.
    Plusieurs devices (vides) ont été déjà générés à partir des spécifications de devices et services standardisés par l'UPnP Forum.
    Vous pouvez vous appuyer dessus pour générer vos propres devices à partir de votre propre description XML (device et ssdp)
    Vous devez lire et suivre les indications listées dans la documentation de ce bundle pour générer votre propre device

    Génération de devices avec le SDK Intel


    Le SDK UPnP d'Intel comporte un outil de génération (graphique) des devices et des points de contrôle en C, C++ ou C#.
    Cet outil est "%OSGIUPNP%\intel-upnp\author\Device Builder.exe".
    Il est possible de générer le source du squelette d'un device et de ses services à partir des documents de description XML standards et propriétaires.
    La figure suivante présente cet outil pour la génération d'un Light Bulb:

    Intel Device Builder for UPnP Technologies

    SDK UPnP Java de Siemens


    Siemens propose une implémentation Java et une implémentation C++ de pile UPnP disponibles sur http://www.plug-n-play-technologies.com.
    L'implémentation Java permet d'écrire des points de contrôle et des devices en Java pouvant fonctionner sur J2SE, Personal Java (Java 1.1) et J2ME/CDC/Personal Profile.
    La figure suivante présente le point de contrôle générique fournit avec la pile UPnP Java de Siemens :

    Siemens' UPnP Java Stack