Thermostat Google NEST

Discussion et échanges de scripts pour la box eedomus

Re: Thermostat Google NEST

Messagepar solidxiii » 16 Déc 2021 23:20

Bonjour à tous,

L’hiver est là. Savez vous s’il y a eu des avancées sur eedomus et la nouvelle API Google ? Ce serait très très cool ! :)

Bonne soirée.

Alex
solidxiii
 
Messages : 6
Inscription : 08 Jan 2021

Re: Thermostat Google NEST

Messagepar merguez07 » 17 Déc 2021 09:47

si notre ami Google57 pouvait nous donner sa procédure ce serait top (et éviterait de tout réinventer)
tuto 1 -->Programmation des scripts Eedomus
tuto 2 -->SmartDevice
tuto 3 -->Le déclenchement de règles
scripts -->Météo du jour | GH Thermostat | TotalWatt | Detecfire | smartbattery
Skype Eedomus -->lien vers le skype Eedomus
merguez07
 
Messages : 2346
Inscription : 15 Sep 2017
Localisation : Le Teil en Ardèche

Re: Thermostat Google NEST

Messagepar solidxiii » 17 Déc 2021 13:39

Aller, on y croit ! eedomus contribue à préserver la planète ! :)
solidxiii
 
Messages : 6
Inscription : 08 Jan 2021

Re: Thermostat Google NEST

Messagepar Vinky » 31 Oct 2022 12:12

Bonjour,

Ayant récemment investi dans un thermostat Nest, je suis parvenu à le piloter via Homebridge (dont voici le lien : https://github.com/chrisjshull/homebridge-nest vers le plug in)

Cela nécessite de récupérer des token et cookies, mais cela fonctionne bien.

Cela signifie donc que cela est faisable également sur notre Eedomus sans trop de soucis, est-ce le plugin pourrait être mis à jour pour le rendre compatible ?

A noter que je cherche, en attendant à piloter, via la Eedomus, mon Homebridge, mais j'avoue ne pas bien maîtriser le fonctionnement... (de l'API Homebridge, mais c'est un autre sujet)
Dernière édition par Vinky le 01 Nov 2022 06:54, édité 1 fois.
Eedomus+
- Legrand/Netatmo (prises/interrupteurs/Volets/VMC) + Bubendorff via idiamant
- Fibaro (Lum./Ouverture/Détecteur)
- Clim Daikin
- Capteurs Aqara (Therm/Ouverture)
- Aeotec (Alarme/Détecteurs)
- Foscam (C2/2xC2M)
- Roborock S7
- Thermostat Nest
Vinky
 
Messages : 85
Inscription : 04 Mars 2021
Localisation : 69

Re: Thermostat Google NEST

Messagepar Vinky » 01 Nov 2022 06:54

Bonjour à tous,

Pour les personnes qui souhaitent piloter leur thermostat nest via la Eedomus, j'y suis parvenu. (Actuellement : Récupération de la température/Humidité + Modification & Récupération de la température de consigne/Absence/Mode Eco). Tout peut donc être piloté par règles via la Eedomus.

Ensemble Nest.jpg
Ensemble Nest
Ensemble Nest.jpg (148.73 Kio) Consulté 4916 fois

Périphérique global.jpg
Périphérique Nest
Périphérique global.jpg (109.73 Kio) Consulté 4916 fois


C'est assez bidouille et ça nécessite un serveur web à côté (en l'occurence mon NAS pour ma part) et homebridge d'installé également en plus.

  • Etape 1 : Installer Homebridge (voir sur internet comment faire)

  • Etape 2 : Ajouter Nest à Homebridge via un plug-in développé (voir ce GitHub : https://github.com/chrisjshull/homebridge-nest et éventuellement ce tuto qui est en français et détaillé par une vidéo : https://www.mamili-homekit.fr/homebridge-google-nest/)

  • Etape 3 : Installer un serveur Web avec php et possibilité d'utiliser curl

  • Etape 4 : Insérer la page php suivante :

    Code : Tout sélectionner
    <?

       $user 
    = "";//Login HomeBridge
       $mdp = "";// Mdp HomeBridge
       $IP = "https://";//IP ou URL Homebridge

       //URL à générer
       $url_login = $IP."/api/auth/login";
       $url_accessories = $IP."/api/accessories";

       //Initialisation variables à nul pour savoir si format ok.
       $value='';
       $var='';

       //Verifie les données et existance de la variable "presence"
       if(isset ($_GET['presence']))
       {
          if (($_GET['presence'] == 0 || $_GET['presence'] == 1)&& is_numeric($_GET['presence']))
          {
             $value=$_GET['presence'];
             $var="presence";
             $characteristicType="On";//Indique le format qui sera attendu par la requête.
          }
       }

       //Verifie les données et existance de la variable "presence"
       if(isset ($_GET['mode']))
       {
          if (($_GET['mode'] == 0 || $_GET['mode'] == 1)&& is_numeric($_GET['mode']))
          {
             $value=$_GET['mode'];
             $var="mode";
             $characteristicType="TargetHeatingCoolingState";//Indique le format qui sera attendu par la requête.
          }
       }

       //Verifie les données et existance de la variable "target_temp"
       if(isset ($_GET['target_temp']))
       {
          if ($_GET['target_temp'] > 8 && $_GET['target_temp'] < 33 && is_numeric($_GET['target_temp']))//Uniquement entre 9 et 32
          {
             $value=$_GET['target_temp'];
             $var="target_temp";
             $characteristicType="TargetTemperature";//Indique le format qui sera attendu par la requête.
          }
          else exit("Température non adaptée");
       }

       //Fonction qui emet des requêtes json via CURL
       function callAPI($method, $url, $data, $token){
          $curl = curl_init();
          switch ($method){
             case "POST":
                curl_setopt($curl, CURLOPT_POST, 1);
                if ($data)
                   curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
                break;
             case "PUT":
                curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "PUT");
                if ($data)
                   curl_setopt($curl, CURLOPT_POSTFIELDS, $data);                       
                break
    ;
             default:
                if ($data)
                   $url = sprintf("%s?%s", $url, http_build_query($data));
          }
          // OPTIONS:
          curl_setopt($curl, CURLOPT_URL, $url);
          curl_setopt($curl, CURLOPT_HTTPHEADER, array(
             'Authorization: Bearer '.$token,
             'Content-Type: application/json',
          ));
          curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
          curl_setopt($curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
          // EXECUTE:
          $result = curl_exec($curl);
          if(!$result){die("Connection Failure");}
          //echo (curl_getinfo($curl,CURLINFO_RESPONSE_CODE));
          curl_close($curl);
          return $result;
       }
       //Fin fonction

       //Début récupération de Token

       $data_array =  array(
          "username" => $user,
          "password" => $mdp,
          "otp" => "String"
       );

       $make_call = callAPI('POST', $url_login, json_encode($data_array),false);
       $response = json_decode($make_call, true);

       $token = $response["access_token"];

       //Fin récupération Token

       if(isset ($_GET['action']))//Vérification présence de la variable "action"
       {

          if($_GET['action']=="GET_ALL"){//Si action = GET_ALL
             $get_all = $get_data = callAPI('GET', $url_accessories, false,$token);
             $response_get_all = json_decode($get_all, true);
             print_r(json_encode($response_get_all, JSON_PRETTY_PRINT));
          }
          else{
             if(isset ($_GET['unique_id']))//Vérification présence de la variable "unique_id"
             {   
                $unique_id_nest 
    = $_GET['unique_id'];

                   if($_GET['action']=="GET")//Cas d'action = GET
                   {

                      $get_data = callAPI('GET', $url_accessories."/".$unique_id_nest, false,$token);
                      $response_get = json_decode($get_data, true);
                      print_r(json_encode($response_get, JSON_PRETTY_PRINT)); //Afichage réponse en json
                   }
                   elseif($_GET['action']=="PUT")//Cas d'action = PUT
                   {
                      if(!is_null($value))//Vérification de la valeur à modifier
                      {
                         if ($var =="presence" || $var == "target_temp" || $var == "mode"){//Soit la presence soit la temperature de consigne
                                                 
                            $nest_put 
    =  array(
                               "characteristicType" => $characteristicType,
                               "value" => $value
                            
    );
                            
                            $update_plan 
    = callAPI('PUT', $url_accessories."/".$unique_id_nest,json_encode($nest_put),$token);
                            $response_nest = json_decode($update_plan, true);
                            print_r(json_encode($response_nest, JSON_PRETTY_PRINT));//Afichage réponse en json
                         }
                         else
                         
    {
                            exit("url inconnue : Valeur de la variable action non reconnue");
                         }
                      }
                      else 
                      
    {
                         exit("Argument Variable inconnu");
                      }            
                   
    }
                   else
                   
    {
                      exit("Argument Variable 'action' inconnu");
                   }
             }
             else
             
    {
                exit("unique_id manquant");
             }
          }
       }
       else
       
    {
          exit("url inconnue : Aucune variable action");
       }
    ?>

    USAGE :

    http://URL?Arg1=X&Arg2=Z
    ex : http://192.168.0.1:/?Action=PUT&unique_ ... presence=0

    Liste des arguments :
    • Action : GET_ALL : Affiche l'ensemble des accessoires
    • Action : GET : Affiche les informations de l'accessoire concerné
    • Action : PUT : Modifie les informations de l'accessoire concerné
    • unique_id (valeur de l'unique id) : unique id de l'accessoire à piloter.(Obligatoire pour action GET et PUT)
    • presence (Valeur 0 ou 1) : Met le mode Absence ou Présence
    • target_temp (Température souhaitée) : Consigne de température à donner à la Google Nest

  • Etape 5 : Créer les périphériques voulus sur la Eedomus (température/Humidité/Consignes de Température/Absence/Présence etc...)

Sur Eedomus, voici ce que ça donne :

  • Créer un périphérique (Capteur ou Actionneur si on veut modifier sa valeur) HTTP
  • Mettre dans VAR1 la valeur unique_id de l'accessoire (si actionneur, sinon, directement dans l'url)
  • Cocher "convertir json en XML et indiquer le XPATH souhaité pour mettre à jour la valeur
  • Indiquer le XPATH pour récupérer les valeurs souhaitées
En créant un Actionneur HTTP (url avec action=PUT dans les valeurs) celui-ci peut modifier les valeur de la Nest tout en récupérant les information pour se mettre à jour (url avec action=GET dans la "requête de mise à jour (Optionnelle)").
Thermomètre Nest.jpg
Thermomètre Nest
Thermomètre Nest.jpg (328.65 Kio) Consulté 4916 fois


A noter la possibilité de les regrouper pour avoir l'ensemble des périphériques créés liés. Il suffit de mettre les unique_id mode eco/absence et consigne de Température en VAR1/VAR2 & VAR3 (voir capture ci-dessus)


Thermomètre :
Code : Tout sélectionner
Créer un capteur HTTP
Type de données : "Nombre Décimal"
Unité : "°C"
URL de la requête : http://IP:port/?action=GET&unique_id=XXXXX
Chemin XPATH : /root/values/CurrentTemperature
Fréquence de la requête : Définir en fonction du souhait
Convertir le JSON en XML : coché


Capteur Humidité :
Code : Tout sélectionner
Créer un capteur HTTP
Type de données : "Nombre Décimal"
Unité : "%"
URL de la requête : http://IP:port/?action=GET&unique_id=XXXXX
Chemin XPATH : /root/values/CurrentRelativeHumidity
Fréquence de la requête : Définir en fonction du souhait
Convertir le JSON en XML : coché


Fonctionnement de la chaudière :
Code : Tout sélectionner
Créer un capteur HTTP
Type de données : "Liste de valeurs"
URL de la requête : http://IP:port/?action=GET&unique_id=XXXXX
Chemin XPATH : /root/values/CurrentHeatingCoolingState
Fréquence de la requête : Définir en fonction du souhait
Convertir le JSON en XML : coché
VALEUR :
Valeur brute : 0 / Description : Arrêt
Valeur brute : 1 / Description : En fonctionnement


Présence/Absence :
Code : Tout sélectionner
Créer un Actionneur HTTP
VAR1 : XXXXXX (uniqueid)
URL de la requête : http://IP:port/?action=GET&unique_id=[VAR1]
Chemin XPATH : /root/values/On
Fréquence de la requête : Définir en fonction du souhait
Convertir le JSON en XML : coché
VALEUR :
Valeur brute : 0 / Description : Absent /url : uri/?action=PUT&presence=[RAW_VALUE]&unique_id=[VAR1]
Valeur brute : 1 / Description : Présent /url : uri/?action=PUT&presence=[RAW_VALUE]&unique_id=[VAR1]


Mode Eco :
Code : Tout sélectionner
Créer un Actionneur HTTP
VAR1 : XXXXXX (uniqueid)
URL de la requête : http://IP:port/?action=GET&unique_id=[VAR1]
Chemin XPATH : /root/values/On
Fréquence de la requête : Définir en fonction du souhait
Convertir le JSON en XML : coché
VALEUR :
Valeur brute : 0 / Description : Mode Normal /url : uri/?action=PUT&presence=[RAW_VALUE]&unique_id=[VAR1]
Valeur brute : 1 / Description : Mode Eco /url : uri/?action=PUT&presence=[RAW_VALUE]&unique_id=[VAR1]


Thermostat actif :
Code : Tout sélectionner
Créer un Actionneur HTTP
VAR1 : XXXXXX (uniqueid)
URL de la requête : http://IP:port/?action=GET&unique_id=[VAR1]
Chemin XPATH : /root/values/TargetHeatingCoolingState
Fréquence de la requête : Définir en fonction du souhait
Convertir le JSON en XML : coché
VALEUR :
Valeur brute : 0 / Description : Eteint /url : uri/?action=PUT&mode=[RAW_VALUE]&unique_id=[VAR1]
Valeur brute : 1 / Description : Chauffage /url : uri/?action=PUT&mode=[RAW_VALUE]&unique_id=[VAR1]


Consigne de Température :
Code : Tout sélectionner
Créer un Actionneur HTTP
VAR1 : XXXXXX (uniqueid)
URL de la requête : http://IP:port/?action=GET&unique_id=[VAR1]
Chemin XPATH : /root/values/TargetTemperature
Fréquence de la requête : Définir en fonction du souhait
Convertir le JSON en XML : coché
VALEUR : (Faire autant de valeur que de réglage possible souhaité (de 13°C à 26°C par palier de 1 degré par exemple, soit 14 lignes)
Valeur brute : 13 / Description : 13°C /url : uri/?action=PUT&target_temp=[RAW_VALUE]&unique_id=[VAR1]
Valeur brute : 14 / Description : 14°C /url : uri/?action=PUT&target_temp=[RAW_VALUE]&unique_id=[VAR1]

Température Valeur.jpg
Température Valeur
Température Valeur.jpg (147.13 Kio) Consulté 4916 fois


A noter ici un ensemble d'icônes que j'ai refaite pour l'ensemble :


Si quelqu'un parvient à reprendre le fonctionnement de homeBridge pour gérer la connexion sur la nest pour le faire directement dans la Eedomus (Etape 2), cela pourra devenir un simple périphérique du store tout ce qu'il y a de plus lambda, et il suffira de le piloter simplement comme je l'ai fait sur la page php ci-dessus).
Peut-être qu'il y a des simplifications possibles et qu'il aurait été plus simple/pratique de ne pas avoir besoin de serveur web en le faisant en créant un script sur la Eedomus directement. (Etape 4) mais je ne maîtrise surement pas assez bien la Eedomus pour le faire (impossibilité d'utiliser le CURL dans les scripts).

A dispo si vous quelqu'un a besoin d'aide.
Dernière édition par Vinky le 13 Nov 2022 21:21, édité 11 fois.
Eedomus+
- Legrand/Netatmo (prises/interrupteurs/Volets/VMC) + Bubendorff via idiamant
- Fibaro (Lum./Ouverture/Détecteur)
- Clim Daikin
- Capteurs Aqara (Therm/Ouverture)
- Aeotec (Alarme/Détecteurs)
- Foscam (C2/2xC2M)
- Roborock S7
- Thermostat Nest
Vinky
 
Messages : 85
Inscription : 04 Mars 2021
Localisation : 69

Re: Thermostat Google NEST

Messagepar solidxiii » 04 Nov 2022 22:59

Merci beaucoup. C’est vraiment top !
solidxiii
 
Messages : 6
Inscription : 08 Jan 2021

Re: Thermostat Google NEST

Messagepar Vinky » 05 Nov 2022 01:13

solidxiii a écrit:Merci beaucoup. C’est vraiment top !

Avec plaisir.

Tu as réussi à le mettre en place ?
Eedomus+
- Legrand/Netatmo (prises/interrupteurs/Volets/VMC) + Bubendorff via idiamant
- Fibaro (Lum./Ouverture/Détecteur)
- Clim Daikin
- Capteurs Aqara (Therm/Ouverture)
- Aeotec (Alarme/Détecteurs)
- Foscam (C2/2xC2M)
- Roborock S7
- Thermostat Nest
Vinky
 
Messages : 85
Inscription : 04 Mars 2021
Localisation : 69

Re: Thermostat Google NEST

Messagepar solidxiii » 05 Nov 2022 08:01

Oui. J’ai pu réussir en installant le serveur php sur ma freebox. Encore merci !
solidxiii
 
Messages : 6
Inscription : 08 Jan 2021

Re: Thermostat Google NEST

Messagepar Vinky » 05 Nov 2022 08:42

Top !

Je suis content que ça serve et que quelqu’un d’autre ait réussi à l’utiliser (je n’ai donc pas été trop mauvais dans mes explications).

N’hésite pas à partager des conseils si je n’ai pas assez détaillé ou même de dire si tu as fait des choses adaptées à ton besoin.

Personnellement je me suis contenté d’un thermomètre, capteur d’humidité et 3 bouton pour gérer le thermostat (mise absence/mode éco/température de consigne) mais peut être que d’autres données ou fonctionnalités peuvent être nécessaires/utiles à d’autres (et même moi) que je n’aurai pas identifié.

A noter que je l’utilise depuis 5 jours et que cela semble bien fonctionner, sauf quand le serveur web est tombé en rade :D

@+
Eedomus+
- Legrand/Netatmo (prises/interrupteurs/Volets/VMC) + Bubendorff via idiamant
- Fibaro (Lum./Ouverture/Détecteur)
- Clim Daikin
- Capteurs Aqara (Therm/Ouverture)
- Aeotec (Alarme/Détecteurs)
- Foscam (C2/2xC2M)
- Roborock S7
- Thermostat Nest
Vinky
 
Messages : 85
Inscription : 04 Mars 2021
Localisation : 69

Re: Thermostat Google NEST

Messagepar solidxiii » 05 Nov 2022 08:59

Pareil. J’ai mis température, humidité et quelques valeurs « standard ». J’ai mis en place un scénario pour ne chauffer la maison qu’à 18 degrés les jours où c’est ensoleillé. Le soleil sur la baie vitrée fera le reste ! Vu le contexte, ça peut servir a d’autres !

Encore merci !
solidxiii
 
Messages : 6
Inscription : 08 Jan 2021

Re: Thermostat Google NEST

Messagepar Vinky » 05 Nov 2022 09:19

Effectivement pourquoi pas des scénarios de style. Cependant, est-ce vraiment efficace en pratique ? Ne va-t-il pas se couper naturellement si la chaleur monte dans la pièce ? Ça fait peut être économiser un petit peu avant que le soleil fasse véritablement effet ?

EDIT : J'ai mis à jour mon post pour ajouter quelques explications sur la création dans Eedomus des capteur/Actionneur HTTP et la possibilité de les lier en un seul périphérique.
Eedomus+
- Legrand/Netatmo (prises/interrupteurs/Volets/VMC) + Bubendorff via idiamant
- Fibaro (Lum./Ouverture/Détecteur)
- Clim Daikin
- Capteurs Aqara (Therm/Ouverture)
- Aeotec (Alarme/Détecteurs)
- Foscam (C2/2xC2M)
- Roborock S7
- Thermostat Nest
Vinky
 
Messages : 85
Inscription : 04 Mars 2021
Localisation : 69

Re: Thermostat Google NEST

Messagepar Vinky » 07 Nov 2022 14:02

Bonjour,

Après constat que cela n'était pas présent, j'ai modifié mon script pour y inclure également un bouton pour activer ou désactiver le thermostat (ce qui permet de limiter les règles à uniquement lorsque le thermostat est actif).

J'en ai également profité pour refaire l'ensemble des icônes nécessaires (je ne trouvais pas mon bonheur sur le store) que j'ai laissé également en PJ de mon précédent message.

EDIT : Après analyse, on peut obtenir également l'état de fonctionnement (lorsque la température de consigne est supérieure à la température actuelle). Cela peut éventuellement être utile pour information/statistique. Je l'ai ajouté dans le descriptif (ne nécessite aucun code complémentaire sur le fichier php)
Eedomus+
- Legrand/Netatmo (prises/interrupteurs/Volets/VMC) + Bubendorff via idiamant
- Fibaro (Lum./Ouverture/Détecteur)
- Clim Daikin
- Capteurs Aqara (Therm/Ouverture)
- Aeotec (Alarme/Détecteurs)
- Foscam (C2/2xC2M)
- Roborock S7
- Thermostat Nest
Vinky
 
Messages : 85
Inscription : 04 Mars 2021
Localisation : 69

Re: Thermostat Google NEST

Messagepar SoicnarfB » 22 Avr 2023 11:59

Bonjour à tous,

je déterre le sujet car Nest vient de communiquer l'arrêt de Works with Nest au 29 Septembre 2023.

Ayant gardé précieusement mon compte Nest et la connexion en Works with Nest, là il n'y a plus le choix, il faut migrer si on veut garder la possibilité sur eedomus d'agir sur le thermostat Nest.

J'ai vu les solutions précédemment proposées (serveur web php installé à part) mais cela semble être sortir la grosse artillerie alors que cela doit rester une connexion en API que eedomus serait en mesure de faire.
Est-ce qu'il y a 1) des gens intéressés pour un nouveau plugin Nest ? 2) des développeurs pour aider ? 3) éventuellement la team car c'est censé être un plugin officiel de l'eedomus :P ?

Je vais essayer de regarder de mon côté avec mon ami ChatGPT ;) ...

edit: qui n'est pas d'une grande aide...
Google search me renvoit sur cela (en python) qui a l'air assez didactique
https://www.wouternieuwerth.nl/controll ... th-python/

++
F.
SoicnarfB
 
Messages : 40
Inscription : 27 Juil 2016

Re: Thermostat Google NEST

Messagepar Vinky » 22 Avr 2023 17:09

Bonjour SoicnarfB,

Sauf erreur de ma part, la box eedomus ne permet pas de scripter en Python. Seul le PHP est possible.
Eedomus+
- Legrand/Netatmo (prises/interrupteurs/Volets/VMC) + Bubendorff via idiamant
- Fibaro (Lum./Ouverture/Détecteur)
- Clim Daikin
- Capteurs Aqara (Therm/Ouverture)
- Aeotec (Alarme/Détecteurs)
- Foscam (C2/2xC2M)
- Roborock S7
- Thermostat Nest
Vinky
 
Messages : 85
Inscription : 04 Mars 2021
Localisation : 69

Re: Thermostat Google NEST

Messagepar SoicnarfB » 23 Avr 2023 16:30

Hello Vinky,

yes yes bien sur, mais le python est assez "clair"/compréhensible pour être adapté en php.
Je vais regarder de ce côté là, j'attends juste la fin de l'usage du chauffage, pour faire la migration de mon Nest Thermostat sur Google et faire l'adaptation.

++
F.
SoicnarfB
 
Messages : 40
Inscription : 27 Juil 2016

Re: Thermostat Google NEST

Messagepar bizardnime » 29 Sep 2023 21:06

Bonjour SoicnarfB,

Je suis intéresser par ton projet.

Malheureusement, je ne sais pas codé. Mais chatGPT pourrait peux être aider

Merci pour ton aide
bizardnime
 
Messages : 13
Inscription : 30 Nov 2019

Précédent

Retour vers Scripts & Périphériques du store

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 12 invité(s)