Aller au contenu

Utilisation API HC2


jjacques68

Messages recommandés

Bonjour tout le monde !

 

Petite question rapide : (enfin je crois)

 

j'arrive très facilement à récupérer des valeurs grâce à l'API de la HC2, exemple :

 

je récupère la valeur suivante : l'heure défini dans le panneau de chauffage du lundi matin, comme ceci :

local Pannel = api.get("/panels/heating/61")

print(Pannel.properties["monday"].morning["hour"])

ça marche nickel ! j'utilise souvent cette méthode...

 

Par contre si je veux écrire dans l'API, il faut utiliser un "PUT" ! -> ok

mais y a t'il une méthode plus simple que le Net.HTTP ?

On peut pas l'attaquer directement  comme pour la lecture ? genre api.put ..........

 

merci à vous !

Lien vers le commentaire
Partager sur d’autres sites

Salut, 

 

Qu'est ce que tu veux faire exactement ? 

 

Un exemple de tinman pour la suppression d'une alerte template 


 

---============= Suppression alerte Template =================
 -- Scene à ne lancer qu'une fois ---
 
local devices = api.get('/devices')
for _, dev in ipairs(devices) do
   if (dev.properties.parametersTemplate == "0") then
     if  (dev.parentId > 3) then
        -- "execute order 66" (66 was once device with template)
        -- now it does not have any parameters, so we can use it
        dev.properties.parametersTemplate = 66
        -- set to parent device
        api.put('/devices/' .. dev.parentId, dev)
        -- if other slaves exists, do it as well
        api.put('/devices/' .. dev.id, dev)
           
        -- "give fibaro a break" :)
        fibaro:sleep(1000)
      
        -- we have no temmplate, so select to not use any template!!!
        dev.properties.useTemplate = false
        api.put('/devices/' .. dev.parentId, dev)
        -- if other slaves exists, do it as well
        api.put('/devices/' .. dev.id, dev)
      
        -- "give fibaro a break" :)
        fibaro:sleep(1000)
      
        -- and hide parent device (when changing template parent shows up, bug?)
        dev.visible = false
        api.put('/devices/' .. dev.parentId, dev)
      
        fibaro:debug("changed module: " .. dev.name .. " with id: " .. dev.id)
     end
  end
end

 

Lien vers le commentaire
Partager sur d’autres sites

alors je viens d'essayer ceci :

local Pannel = api.get("/panels/heating/61")

print("AVANT modif = "..Pannel.properties["monday"].morning["hour"])

--modification
Pannel.properties["monday"].morning["hour"] = "8"

api.put(Pannel.properties["monday"].morning["hour"])

print("APRES modif = "..Pannel.properties["monday"].morning["hour"])

et voici le resultat du debug :

[DEBUG] 17:44:33: AVANT modif = 7
[DEBUG] 17:44:33: APRES modif = 8

MAIS la valeur dans le panneau de chauffage ne change pas !!! ???

heat.png.d191aa05ad9f1f6902c32fc746cea91c.png

 

Je sèche, j'ai essayé beaucoup de variante...

Lien vers le commentaire
Partager sur d’autres sites

Si ca peut aider :

 

  • Passage en mode vacances :
-- Thermostat : 5°C
local HC2 = Net.FHttp("127.0.0.1", 11111)
local response, status, errorCode = HC2:GET("/api/panels/heating/1")
if tonumber(errorCode) == 0 and tonumber(status) == 200 and response ~= nil and response ~= "" then
	local jsonTable = json.decode(response)
	jsonTable.properties.vacationTemperature = 5
	local newJson = json.encode(jsonTable)
	HC2:PUT("/api/panels/heating", newJson)
end

 

  • Passage en mode normal :
-- Thermostat : mode normal
local HC2 = Net.FHttp("127.0.0.1", 11111)
local response, status, errorCode = HC2:GET("/api/panels/heating/1")
if tonumber(errorCode) == 0 and tonumber(status) == 200 and response ~= nil and response ~= "" then
	local jsonTable = json.decode(response)
	jsonTable.properties.vacationTemperature = 0
	local newJson = json.encode(jsonTable)
	HC2:PUT("/api/panels/heating", newJson)
end

 

  • Upvote 1
Lien vers le commentaire
Partager sur d’autres sites

Il y a 2 heures, Steven a dit :

C'est quoi ce PUT tout pourri :-)

:2:

je dois être fou mais je comprends toujours pas la syntaxe :

Il y a 2 heures, Steven a dit :

api.put("/panels/heating/61", Pannel)

 

Ma variable "Pannel" contient le "chemin" pour accéder à la valeur que je souhaite modifier ?? !!! (Pannel.properties["monday"].morning["hour"])

Elle ne contient pas la valeur elle-même !!

j'ai essayé cela aussi, mais sans succès :

local Pannel = api.get("/panels/heating/61")
api.put(Pannel.properties["monday"].morning["hour"], "8")

 

@Lazer : je connais cette méthode, mais je voulais pas utiliser le net.fhttp ;)

 

(L'objectif de ma demande est de pourvoir modifier le panneau de chauffage dynamiquement depuis un VD. Et je vourdrai utiliser la commande api.put)

Lien vers le commentaire
Partager sur d’autres sites

Tu fais comme tu veux, moi j'aime bien les Net.Fhttp, mais si tu préfères les coups de PUT... :P

 

Sinon sur le forum il existe au moins 2 bons exemples de gestion du panneau de chauffage en LUA, écris par @JossAlf et @Jojo.

Lien vers le commentaire
Partager sur d’autres sites

Il y a 23 heures, jjacques68 a dit :

--modification Pannel.properties["monday"].morning["hour"] = "8"

ben tu l'as fait, comme avant, en fait faut re"PUT"er tout le json après modif de la valeur


 

local Pannel = api.get("/panels/heating/61")

print("AVANT modif = "..Pannel.properties["monday"].morning["hour"])

--modification
Pannel.properties["monday"].morning["hour"] = "8"

api.put("/panels/heating/61", Pannel)

print("APRES modif = "..Pannel.properties["monday"].morning["hour"])

Dans l'exemple de @Lazer, c'est pour cela : "Newjson" ;-) :2:

Modifié par pepite
Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...