[LUA] Thermostat Netatmo : Modification des plannings dans le cloud Netatmo

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
J.M.B
Messages : 67
Inscription : 26 déc. 2017, 15:43

[LUA] Thermostat Netatmo : Modification des plannings dans le cloud Netatmo

Message par J.M.B »

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.

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
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: [LUA] Thermostat Netatmo : Modification des plannings dans le cloud Netatmo.

Message par Wolfen38 »

Salut,

J'ai voulu essayer ton script, mais je tombe sur cette erreur, peux tu me dire comment la résoudre ?

Code : Tout sélectionner

2021-10-14 14:48:11.695 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_device_planning-netatmo.lua: .../domoticz/scripts/lua/script_device_planning-netatmo.lua:69: attempt to concatenate a nil value (local 'access_token')
Merci.
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: [LUA] Thermostat Netatmo : Modification des plannings dans le cloud Netatmo.

Message par Wolfen38 »

Bon, j'ai plus le message, par contre rien ne se passe quand je change mon virtuel....
J.M.B
Messages : 67
Inscription : 26 déc. 2017, 15:43

Re: [LUA] Thermostat Netatmo : Modification des plannings dans le cloud Netatmo.

Message par J.M.B »

Bonjour Wolfen38,
La bibliothèque ltn12 est nécessaire.
Pour l'obtenir vous pouvez installer le package LuaRocks : https://luarocks.org/.
Cordialement.
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: [LUA] Thermostat Netatmo : Modification des plannings dans le cloud Netatmo.

Message par Wolfen38 »

Merci.

Pour les bibliothèques c'est ok maintenant

Mais il ne se passe rien quand j'active le virtuel.

Mais je suis pas sûre de bien récupérer les bons id de planning j'ai du mal avec le dire 5 de netatmo.

Quand je vais dans homedata les plannings n'apparaissent pas et j'ai une fenêtre d'erreur.

J'ai essayé avec try it out mais ça doit pas être ça

Image

Envoyé de mon Mi 9T Pro en utilisant Tapatalk



J.M.B
Messages : 67
Inscription : 26 déc. 2017, 15:43

Re: [LUA] Thermostat Netatmo : Modification des plannings dans le cloud Netatmo.

Message par J.M.B »

Questions sans doute stupides mais êtes-vous connecté quand vous utilisez l'api ? Avez-vous créer des plannings ?
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: [LUA] Thermostat Netatmo : Modification des plannings dans le cloud Netatmo.

Message par Wolfen38 »

Oui pour les plannings j'ai un standard et un vacances.

Sur le site api, je suis connecté, j'ai créé (y a longtemps) une appli pour id client et id secret.

Peut être est elle expirée ? Ai je raté autre chose ?

Envoyé de mon Mi 9T Pro en utilisant Tapatalk

Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: [LUA] Thermostat Netatmo : Modification des plannings dans le cloud Netatmo.

Message par Wolfen38 »

C'est quoi la procédure exacte pour récupérer les id de planning ? Faut cliquer ou ?

Envoyé de mon Mi 9T Pro en utilisant Tapatalk

J.M.B
Messages : 67
Inscription : 26 déc. 2017, 15:43

Re: [LUA] Thermostat Netatmo : Modification des plannings dans le cloud Netatmo.

Message par J.M.B »

Documentation/Energy
getHomesdata
try it out
Execute /Homesdata
Wolfen38
Messages : 1983
Inscription : 19 oct. 2017, 14:49

Re: [LUA] Thermostat Netatmo : Modification des plannings dans le cloud Netatmo.

Message par Wolfen38 »

C'est exactement ce que j'ai fait.
Par contre, si en haut je renseigne le homeid, j'ai cette erreur :
erreur-api1.jpg
erreur-api1.jpg (26.55 Kio) Consulté 3030 fois
Répondre