Aller au contenu

Recommended Posts

Bonsoir,

 

J'ai acheté un Hue dimmer switch qui fonctionne correctement pour commander des ampoules de type Hue. J'aimerais aller plus loin et déclancher des scène Fibaro via un polling de l'API du Bridge sur la partie capteurs.

 

J'essaie de parser la résponse seulement pour récupérer la valeur 2.state.lastupdated mais j'obtiens une errreur : [ERROR] 22:54:45: line getSelfId()..."]:23

local selfId = fibaro:getSelfId()
local ip = fibaro:get(selfId, 'IPAddress')
local port = fibaro:get(selfId, 'TCPPort')

local response 
local status
local errorCode

Hue = Net.FHttp(ip,port) 

response ,status, errorCode = Hue:GET('/api/*********/sensors'); 
fibaro:debug(status)
--Controle du status
if (tonumber(status) == 200) 
  then 
  	fibaro:debug(response)
  
  -- Contrôle d'une erreur
  if (jsonTable[1] ~= nil) 
    then
    	fibaro:debug("Erreur")
    else --Pas d'erreur 
    	lastupdated = jsonTable[1].2.lastupdated
  end
end

Voilà  ce que cela me retourne le message de debug.

{
   "1":{
      "state":{
         "daylight":null,
         "lastupdated":"none"
      },
      "config":{
         "on":true,
         "long":"none",
         "lat":"none",
         "sunriseoffset":30,
         "sunsetoffset":-30
      },
      "name":"Daylight",
      "type":"Daylight",
      "modelid":"PHDL00",
      "manufacturername":"Philips",
      "swversion":"1.0"
   },
   "2":{
      "state":{
         "buttonevent":1002,
         "lastupdated":"2016-03-22T18:25:15"
      },
      "config":{
         "on":true,
         "battery":100,
         "reachable":true
      },
      "name":"Hue dimmer switch 1",
      "type":"ZLLSwitch",
      "modelid":"RWL021",
      "manufacturername":"Philips",
      "swversion":"5.45.1.16265",
      "uniqueid":"00:17:88:01:10:39:02:c4-02-fc00"
   }
}

Cela semble possible avec un script Python : http://www.developers.meethue.com/comment/1632#comment-1632

    import urllib2
    import time

    def SensorState( SensorName ):

      s = "buttonevent\":"
      a = urllib2.urlopen("http://192.168.1.128/api/*********/sensors/" + SensorName ).read()
      b =  a.find(s) + len(s)
      e = a.find(",",

      return a[b:e];

    while 1 == 1:

     lastState = SensorState("2")
     while (SensorState ("2") == lastState):
       time.sleep(0.5)

     print "State Changed!" + SensorState("2") 

Des idées sur mon erreur ?

 

Pour info, voici les valeur possible de la variable buttonevent :

Button     Action     Dimmer Button
1000     INITIAL_PRESS     Button 1 (ON)
1001     HOLD
1002     SHORT_RELEASED
1003     LONG_RELEASED

2000     INITIAL_PRESS     Button 2 (DIM UP)
2001     HOLD
2002     SHORT_RELEASED
2003     LONG_RELEASED

3000     INITIAL_PRESS     Button 3 (DIM DOWN)
3001     HOLD
3002     SHORT_RELEASED
3003     LONG_RELEASED

4000     INITIAL_PRESS     Button 4 (OFF)
4001     HOLD
4002     SHORT_RELEASED
4003     LONG_RELEASED

 

Ludovic

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour darklite44,

 

J'ai la même préoccupation que toi. Aussi j'ai adapté un script LUA pour le Dimmer HUE à  partir d'un existant pour des ampoules HUE (dont je ne connais pas l'auteur, désolé).

Chez moi ça fonctionne. Il faut changer les lignes 7 & 8 avec tes paramètres.

-- http://developers.meethue.com/gettingstarted.html  

local selfId = fibaro:getSelfId()
local ip = fibaro:get(selfId, 'IPAddress')
local port = fibaro:get(selfId, 'TCPPort')
hueUser = "*******" 
huesensorID = 2

local response 
local status
local errorCode
 
Hue = Net.FHttp(ip,port) 
response ,status, errorCode = Hue:GET('/api/'..hueUser..'/sensors/'..huesensorID); 

-- Controle du status
-- fibaro:debug(status)

-- continue si HTTP status code = 200 
if (tonumber(status) == 200) then 
  jsonTable = json.decode(response) 

-- check if error table exists 
  if (jsonTable[1] ~= nil) then 

-- affiche le code erreur 
    errorType = jsonTable[1].error.type 
    errorDescription = jsonTable[1].error.description 
    fibaro:debug("Error type = "..errorType) 
    fibaro:debug("Error description = "..errorDescription) 
    if (errorType == 1) then fibaro:log("Hue: Unauthorized user") 
    elseif (errorType == 3) then fibaro:log("Hue: Incorrect light ID")  
  end 
-- si Pas d'erreur     
  else
-- recupere les donnees 
    SensorName = jsonTable.name
    MaJ = jsonTable.state.lastupdated
    Actioncode = jsonTable.state.buttonevent

-- affiche les donnees 
    fibaro:debug("Dernière action sur "..tostring(SensorName).." : code "..tostring(Actioncode).." le  " .. tostring(MaJ));  
  end
end

Partager ce message


Lien à poster
Partager sur d’autres sites

×