Aller au contenu

Messages recommandés

Posté(e)

Dans le cadre de mes recherches au cours du développement du plugin Freebox Player Remote (ça remonte Lol :D ) et en quête d’une solution efficace ayant pour objectif de déterminer l’état « Allumé » ou « Éteint » du périphérique, j’ai rapidement fait le tour des premières solutions envisageables en utilisant notamment l’API de la Freebox ou bien à   l’aide d’un module mesurant la consommation mais au final rien de bien concluant !

 

J’ai donc commencé à  envisager la chose autrement et investiguer plus au niveau du réseau, pour au final trouver mon bonheur. En effet, le Freeplayer implémente plusieurs protocoles réseau dont l’ UPnP (Universal Plug and Play) comme beaucoup de diffuseurs du marché d’ailleurs et une des particularités intéressante avec l’ UPnP est la découverte de services qui permet de s’affranchir de toute configuration fastidieuse pour les faire communiquer les uns avec les autres. Le protocole de découverte est basé sur SSDP et cela tombe très bien, j’ai déjà  joué avec dans le passé…

 

Le SSDP, c’est quoi ? S.S.D.P pour Simple Service Discovery Protocol, est un protocole de communication donnant la possibilité aux clients de découvrir des services disponibles sur le réseau. Pour cela il utilise UDP (User Datagram Protocol) sur le port 1900.

 

Il ne reste plus qu’à  trouver le port utilisé par le Freeplayer ainsi que l’adresse sur laquelle il diffuse les informations sur ses services. J’ai pour cela utilisé une petite application console réalisée quelques mois avant dans le cadre d’un autre projet afin de mettre en Å“uvre le SSDP mais il existe des outils UPnP pour Windows et Linux permettant d’arriver aux mêmes résultats.

 

Aperçu d’une découverte du réseau…

 

output.PNG

 

En réponse aux paquets envoyés, le Freeplayer diffuse donc son adresse d’accès aux services device.xml  sur le port 54243. Cette url d’accès aux services est disponible uniquement lorsque le FreePlayer est sous tension et allumé mais pas lorsqu’il est éteint complétement ou en veille, voilà  la solution !

 

Pour information, voici le contenu du fichier de description :

 

description.PNG

 

Mais dans notre cas le contenu du fichier ne sera pas utile...

 

Il ne reste plus qu’à  mettre à  profit tout ceci dans un script et le tour est joué :60:

 

Exemple d’utilisation en LUA dans une scène:

local httpClient = net.HTTPClient();

httpClient:request('http://192.168.1.110:54243/device.xml', {
    success = function(result)
      local status = tonumber(result.status)
      if (status ~= 200) then
         print('Status: OFF or In Standby Mode')
      elseif (status == 200) then
         print('Status: ON')
      end      
    end,
    error = function(err)
      print('Connection refused')
    end,
    options = {
      method = 'GET',
      headers = {
        ['Accept'] = 'text/html, application/xhtml+xml',
        ['Accept-Language'] = 'fr-FR'
      }
    }
});

Exemple d’utilisation en LUA dans un Virtual Device:

local HC2 = Net.FHttp('192.168.1.110', 54243);
local result, status, errorCode = HC2:GET("/device.xml");

if errorCode == 0 then
  if tonumber(status) == 200 then
    fibaro:debug('Status: ON')
  else
    fibaro:debug('Status: OFF or In Standby Mode')
  end
else
  fibaro:debug('Connection refused')
end

Maintenant c'est à  vous de jouer pour l’intégrer dans vos scénarios ;)
 

post-3-0-08670900-1461702875_thumb.png

post-3-0-53938500-1461703448_thumb.png

  • Upvote 4
Posté(e) (modifié)

Juste un petit mot pour te saluer amicalement Krikroff... je suis HS ? m'en fous  :P

 

Edit : Bravo tout de même pour ta solution

Modifié par i-magin
  • Upvote 1
Posté(e)

Je profite de ton HS pour aussi te saluer amicalement i-magin.

 

Et dire que c'est dans mes dossiers depuis des mois, je ne vois pas le temps passer :rolleyes:

  • Upvote 1
Posté(e)

YEs, merci beaucoup Krikroff ;-)

 

Bon sais pas trop quoi en faire encore ;-) mais du beau boulot comme d'hab ;-)

 

Je me joins à  mes prédécesseurs pour te saluer ;-)

×
×
  • Créer...