Aller au contenu

Capteur Http Eedomus -> HC3


Messages recommandés

Posté(e)

Bonjour,

 

Nouveau sur la HC3, je souhaite migrer tout doucement ce que j'avais sur l'eedomus sur la HC3, avant d'aller plus loin. Je m'attaque aux éclairage Hue, je sais qu'il existe une QA pour la HC3, mais lorsque je crée une scène, les lumières s'allument les unes après les autres! Sur l'eedomus, je faisais appel aux scènes créées sur l'app Hue au travers ce genre de requêtes.

Est-ce que quelqu'un pourrait m'aider à convertir ça pour la HC3 :

image.png.eb45dbbaec175d13a0137e6080bcf5f7.png 

image.thumb.png.88f35b46b62d1646ca93647eacfbf62e.png

image.thumb.png.55659d799cc0d2b6609b3a215aadb64f.png

 

Posté(e)

Merci,

Le lien que tu me proposes permet d'utiliser le push (ici un IPX) pour envoyer une valeur vers une QA, j'ai testé chez moi et cela fonctionne (grâce à toi d'ailleurs ;-) même si je n'arrive toujours pas à faire l'inverse!)

Ce que je souhaite ici, c'est de faire une requête http vers le pont HUE pour qu'il m'active une scène prédéfinie dans ce pont, mais également connaître l'état de certaines lampes :

image.thumb.png.60b3811117e36f28bcaa449e2d0da66d.png

Posté(e)

J'ai créé un QA Binary Switch (je ne sais pas comment lancer ce code sinon!),et mis ce code :

function QuickApp:turnOn()
    self:debug("binary switch turned on")

    self:updateProperty("value", true)
    -- An example of a GET inquiry 
-- self.http must have been previously created by net.HTTPClient

    local address = "http://192.168.0.11/api/eedomushue/groups/2"
 
    self.http:request(address, {
        options={
            headers = { 
                Accept = "application/json"
            },
            checkCertificate = false,
            method = 'GET'
        },
        success = function(response)
            self:debug("response status:", response.status) 
            self:debug("headers:", response.headers["Content-Type"]) 
            local data = json.decode(response.data)  
            if data.contents and data.contents.quotes and data.contents.quotes[1] then
                local quote = data.contents.quotes[1].quote
                self:debug(quote)
                self:updateView("label", "text", quote) 
            end
        end,
        error = function(error)
            self:debug('error: ' .. json.encode(error))
        end
    }) 
end

Dans mon navigateur, http://192.168.0.11/api/eedomushue/groups/2 me retourne ça : {"name":"Salle de bain","lights":["27","28","29","30"],"sensors":[],"type":"Room","state":{"all_on":false,"any_on":false},"recycle":fa ...

 

Comment je peux m'y prendre pour aller chercher la valeur de state/any_on, et m'en servir pour changer d'état (0/1) mon QA par exemple?

Merci!!

Posté(e)

au hasard, si tu fais un :

self:debug(response.data.state.any_on)

dans le success de ta requete ça donne quoi ?

 

en fait il faudrait que tu postes le debug complet de "response.data", pour voir...

 

PS : utilise l'éditeur du code du fofo (bouton </>) pour poster des lignes de codes, c'est plus lisible ;) 

Posté(e)

Bonjour JJacques68,

 

Désolé pour le délai de réponse, j'ai fait des tests entre temps sur autre chose mais je n'arrive à rien.

Désolé aussi pour l'éditeur de code, je prend note!

J'ai fait ce que tu m'as conseillé, mais ça n'amène pas grand chose:

       method = 'GET'
        },  
        success = function(response) self:updateView("LBL_State", "text", tostring(response.data)) end,
        self:debug(response.data.state.any_on),
        error = function(err) self:updateView("LBL_State", "text", tostring(err)) end
   }) 

j'ai cette erreur :

image.thumb.png.0f837b11e1d62933157fded218056ae0.png

Si je retire la ligne response.data.state.any_on, le LBL_State me retourne ça :

{"name":"Salle de bain","lights":["27","28","29","30"],"sensors":[],"type":"Room","state":{"all_on":false,"any_on":false},"recycle":false,"class":"Bathroom","action":{"on":false,"bri":254,"hue":59969,"sat":205,"effect":"none","xy":[0.4943,0.2638],"ct":443,"alert":"select","colormode":"ct"}} 

...

une idée?

Posté(e)

??? j'ai pas la fin du message d'erreur...

et si tu fais :

self:debug(response.data.state)

sinon l'afficher dans ton label peutêtre ?

 

c'est juste une histoire de formatage, c'est pas grand chose !

Posté(e)

Alors comme je me suis un peu embrouillé, voici mon code (dans turnOn(), je ne sais pas comment lancer le code sinon..) :

function QuickApp:turnOn()
   -- self:Switch(self:getVariable("IpxOutNumber"),1)
    self.http = net.HTTPClient({timeout=3000})
    self.http:request("http://192.168.0.11/api/eedomushue/groups/2",
      {
        options = {
      
    --        headers = {['Authorization']='Basic '..self:getVariable("password")},
            
            method = 'GET'
        },  
        success = function(response)
            self:debug("response status:", response.status) 
            self:debug("headers:", response.headers["Content-Type"]) 
            local data = json.decode(response.data)
            if data.contents and data.contents.quotes and data.contents.quotes[1] then
                local quote = data.contents.quotes[1].quote
                self:debug(quote)
                self:debug(response.data.state)
                self:updateView("label", "text", quote)
            end
        end,
        error = function(error)
            self:debug('error: ' .. json.encode(error))
        end
    }) 
end

Dans la console :

image.thumb.png.79851a679701c2bbca240707698851ba.png

Et pas de mise à jour dans le label..

Je commence à me demander si je n'attaque pas trop grand pour niveau!!

 

Posté(e)

ok donc la condition

if data.contents and data.contents.quotes and data.contents.quotes[1] then

ne fonctionne pas.

 

déplace voir 

self:debug(response.data.state)

juste après 

self:debug("headers:", response.headers["Content-Type"]) 

 

Posté(e)

En déplaçant comme tu me le proposes, pas d'évolution du côté du LBL, voici ce que j'obtient dans la console :

image.thumb.png.2aab35035bf9901ec0cc7b542e5f556f.png

Posté(e)

roah punaise c'est frustrant, on est vraiment pas loin...

comme dis, juste un problème de syntaxe, essaye dans le success :

success = function(response)
	self:debug("response status:", response.status) 
	self:debug("headers:", response.headers["Content-Type"]) 
	self:debug("1 ", response.data)
	local data = json.decode(response.data)
	self:debug("2 ", data)
end,

 

 

Posté(e)

ah ! et maintenant  ?

success = function(response)
	self:debug("response status:", response.status) 
	self:debug("headers:", response.headers["Content-Type"]) 
	self:debug("1 ", response.data.state)
end,

 

Posté(e)
success = function(response)
	self:debug("response status:", response.status) 
	self:debug("headers:", response.headers["Content-Type"]) 
	local data = json.decode(response.data)
	self:debug("1 = ", data.state)
end,

et maintenant ?

Posté(e)
success = function(response)
	self:debug("response status:", response.status) 
	self:debug("headers:", response.headers["Content-Type"]) 
	local data = json.decode(response.data)
	self:debug("1 = ", json.encode(data.state))
end,
Posté(e)

punaise oui :)  et maintenant ?

success = function(response)
	self:debug("response status:", response.status) 
	self:debug("headers:", response.headers["Content-Type"]) 
	local data = json.decode(response.data)
	self:debug("1 = ", json.encode(data.state))
	self:debug("any_on = ", data.state.any_on)
	self:debug("all_on = ", data.state.all_on)
end,

 

 

Posté(e)

!!

En fait c'est une requête qui me permet de connaitre l'état d'une ou plusieurs de mes ampoules connectées dans une pièce, avant de lancer une "scène d'éclairage".

Je viens du monde eedomus, et la solution était pré-machée, en gros j'avais ça:

image.png.5d96dab42f021315d18ba3514282bba2.png

avec un paramètre (la scène en question) :

image.png.cfc991a9c86f502708c7ba7b76da240c.png

Je ne suis pas spécialiste (ça t'avais compris), mais je crois comprendre que c'est du Json, mais je ne sais pas convertir ça en une requête avec paramètres..

image.png

Posté(e) (modifié)

ok.

 

donc il faudrait stocker cette valeur de any_on dans une variable du QA avec 

success = function(response)
	self:debug("response status:", response.status) 
	self:debug("headers:", response.headers["Content-Type"]) 
	local data = json.decode(response.data)
	self:debug("any_on = ", data.state.any_on)
	self:setVariable("anyOn", data.state.any_on)
	--self:debug("all_on = ", data.state.all_on)
end,

du coup tu peux utiliser la variable "anyOn" comme tu veux.

Modifié par jjacques68
×
×
  • Créer...