@jojo
je crois que j'ai trouvé de quoi simplifier un max tout le fonctionnement
lorsqu'on demande à exécuter la commande Nest.php dans "read" , si on met le listener du connecteur en fonction, on voit qu'ont récupère les affichages HTTP en direct dans le listener HTTP.
A partir de là il suffit d'ajouter dans la partie parseur JS de la commande le code en javascript les ordres pour "décortiquer" ce retour. On a alors directement charger les variables de l'équipement NEST sans passer par les automates ni les envois vers IpBox:UniversalListen? (le connecteur écoute universelle n'est plus nécessaire)
je viens de faire test en modifiant le script Nest.php de manière à avoir une trame simple à analyser avec javascript et ça fonctionne très bien.
la modification dans le code Nest.php porte sur les ordres "echo" pour renvoyer les données sous la forme : Nom_de_la_donnée:
valeurNom_de_la_donnée;
exemple:
Code PHP :
//echo "<i>Eco temperature : </i>".number_format($infos->current_state->eco_temperatures->low,1)."°".$infos->scale."<br>";
echo "ecotmp:".number_format($infos->current_state->eco_temperatures->low,1)."ecotmp;";
le résultat se trouve bien envoyé dans la trame retour de celui qui a déclenché l'ordre "Read", sans avoir à spécifier les infos Ipbox.
extrait de mon log listen du connecteur HTTP Nest:
Code :
résultat après decodage javascript:
safetytmp_test: 5.1
iseco_test: no
ecotmp_test: 17.8
setaway_test: present
targetmode_test: :heat
settmp_test: 20.5
currenthum_test: :55
isheating_test: no
current_temperature_test: 22.3
where_test: Living Room
trame brute renvoyée par le programme PHP
name_test: Thermostat_Nest_Peynier_Salon
name:Thermostat_Nest_Peynier_Salonname;where:Living Roomwhere;current_temperature:22.3current_temperature;isheating:noisheating;currenthum:55currenthum;settmp:20.5settmp;targetmode:heattargetmode;setaway:presentsetaway;ecotmp:17.8ecotmp;iseco:noiseco;safetytmp:5.1safetytmp;issafety:noissafety;
le code javascript dans le parseur JS de la commande est simple :
on peut alors directement mettre le nom des variables qui doivent être alimentées (ici j'ai mis variable_test, pour éviter de tout casser)
Code PHP :
name_test = trame.substring(trame.indexOf("name:")+5,trame.indexOf("name;"));
ldprint ("name_test: "+ name_test);
where_test = trame.substring(trame.indexOf("where:")+6,trame.indexOf("where;"));
ldprint ("where_test: "+ where_test);
current_temperature_test = trame.substring(trame.indexOf("current_temperature:")+20,trame.indexOf("current_temperature;"));
ldprint ("current_temperature_test: "+ current_temperature_test);
isheating_test = trame.substring(trame.indexOf("isheating:")+10,trame.indexOf("isheating;"));
ldprint ("isheating_test: "+ isheating_test);
currenthum_test = trame.substring(trame.indexOf("currenthum:")+10,trame.indexOf("currenthum;"));
ldprint ("currenthum_test: "+ currenthum_test);
settmp_test = trame.substring(trame.indexOf("settmp:")+7,trame.indexOf("settmp;"));
ldprint ("settmp_test: "+ settmp_test);
targetmode_test = trame.substring(trame.indexOf("targetmode:")+10,trame.indexOf("targetmode;"));
ldprint ("targetmode_test: "+ targetmode_test);
setaway_test = trame.substring(trame.indexOf("setaway:")+8,trame.indexOf("setaway;"));
ldprint ("setaway_test: "+ setaway_test);
ecotmp_test = trame.substring(trame.indexOf("ecotmp:")+7,trame.indexOf("ecotmp;"));
ldprint ("ecotmp_test: "+ ecotmp_test);
iseco_test = trame.substring(trame.indexOf("iseco:")+6,trame.indexOf("iseco;"));
ldprint ("iseco_test: "+ iseco_test);
safetytmp_test = trame.substring(trame.indexOf("safetytmp:")+10,trame.indexOf("safetytmp;"));
ldprint ("safetytmp_test: "+ safetytmp_test);
qu'est-ce que tu en penses ?
à partir de là on va pouvoir simplifier les automates.