[LUA] Thermostat Netatmo : Modification des plannings dans le cloud Netatmo
Publié : 22 août 2021, 10:46
Bonjour à tous,
Je partage aujourd'hui un script LUA permettant de modifier dans Domoticz les plannings enregistrés sur le cloud de Netatmo. Il n'est pas parfait mais il fonctionne. Je l'ai annoté pour une meilleure compréhension.
N'hésitez pas à l'améliorer.
Bonne journée.
Je partage aujourd'hui un script LUA permettant de modifier dans Domoticz les plannings enregistrés sur le cloud de Netatmo. Il n'est pas parfait mais il fonctionne. Je l'ai annoté pour une meilleure compréhension.
N'hésitez pas à l'améliorer.
Bonne journée.
Code : Tout sélectionner
--[[
Netatmo_Planning.lua
Auteur : JMB
Date : 21/08/21
Prérequis :
--> Un compte Netatmo (Identifiant, MDP) et avoir créer des plannings (dans le script il y a 2 plannings : Planning1 et Planning2)
--> Avoir créer une appli sur netatmo connect (https://dev.netatmo.com/) et récupérer son "client id" et "client secret"
--> Créer un "interrupteur_virtuel" de type "selector" dans Domoticz qui va permettre de sélectionner un des plannings netatmo.
--]]
commandArray = {}
if devicechanged["Planning_Netatmo"] then -- Planning_Netatmo = nom du selecteur virtuel
--------------------------------------------------------------------------------
-- Infos Netatmo
--------------------------------------------------------------------------------
client_id = "xxxxxxxxxxxxxxx" -- Attention aux caractères spéciaux comme ils sont utilisés dans des URL
client_secret = "xxxxxxxxxxxxxxx" -- Il faut donc les encoder ex : %40 = @ ; %26 = &
username = "xxxxxxxxxxxxxxx" -- Pour plus de détails : https://apical.xyz/fiches/les_formulaires_html/Encodage_dans_l_URL_UTF-8_comme_par_exemple_20
password = "xxxxxxxxxxxxxxx"
scope = "read_thermostat write_thermostat"
home_id = "xxxxxxxxxxxxxxx" -- On obtient ces infos sur https://dev.netatmo.com/
Planning1_id = "xxxxxxxxxxxxxxx" -- Une fois connecté on peut lancer dans Documentation/Energy l'API "homesdata"
Planning2_id = "xxxxxxxxxxxxxxx" -- Et lire toutes ces infos
----------------------------------------------------------------------------------
-- Modules
------------------------------------------------------------------------
ltn12 =require ("ltn12")
https = require("ssl.https")
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
------------------------------------------------------------------------
-- Fct access_token
------------------------------------------------------------------------
parametres_token = "grant_type=password&client_id=" .. client_id .."&client_secret=" .. client_secret .. "&username=" .. username .. "&password=" .. password.."&scope="..scope
function token(token_url,parametres_token)
local reponse = {}
local b, c, h = https.request
{
url = token_url;
method = "POST";
headers =
{
["Content-Type"] = "application/x-www-form-urlencoded;charset=utf-8";
["Content-Length"] = #parametres_token
};
source = ltn12.source.string(parametres_token);
sink = ltn12.sink.table(reponse)
}
return json:decode(table.concat(reponse))
end
------------------------------------------------------------------------
-- Fct Changement de Planning
------------------------------------------------------------------------
function planning_api(api_url,planning_id,home_id,access_token)
local envoi = https.request(api_url.."schedule_id="..planning_id.."&home_id="..home_id,"access_token=" .. access_token)
end
------------------------------------------------------------------------
-- Récupération de l'access_token (et du refresh_token si besoin)
------------------------------------------------------------------------
local reponsetoken = token("https://api.netatmo.net/oauth2/token",parametres_token)
local access_token = reponsetoken.access_token
local refresh_token = reponsetoken.refresh_token
------------------------------------------------------------------------
-- Changement de Planning
------------------------------------------------------------------------
if devicechanged["Planning_Netatmo"] == "Planning1" then
local changed_device = planning_api("https://api.netatmo.com/api/switchhomeschedule?",Planning1_id,home_id,access_token)
end
if devicechanged["Planning_Netatmo"] == "Planning2" then
local changed_device = planning_api("https://api.netatmo.com/api/switchhomeschedule?",Planning2_id,home_id,access_token)
end
end
