darklite44 Posté(e) le 22 mars 2016 Signaler Posté(e) le 22 mars 2016 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 Button1000 INITIAL_PRESS Button 1 (ON)1001 HOLD1002 SHORT_RELEASED1003 LONG_RELEASED2000 INITIAL_PRESS Button 2 (DIM UP)2001 HOLD2002 SHORT_RELEASED2003 LONG_RELEASED3000 INITIAL_PRESS Button 3 (DIM DOWN)3001 HOLD3002 SHORT_RELEASED3003 LONG_RELEASED4000 INITIAL_PRESS Button 4 (OFF)4001 HOLD4002 SHORT_RELEASED4003 LONG_RELEASED Ludovic
darklite44 Posté(e) le 23 mars 2016 Auteur Signaler Posté(e) le 23 mars 2016 Bonsoir, Personne ne sait faire ça en Lua ?
smartiz Posté(e) le 4 juin 2016 Signaler Posté(e) le 4 juin 2016 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
Messages recommandés