Edition de la consigne via Google Assistant si Consigne < Température actuel

Je sais pas quoi faire la… Ya aucun mode chez Google qui correspond a l’état du thermostat

Bonjour

je pense que le soucis viens du mapping de la commande « Thermostat Etat (BINAIRE) (pour Plugin Thermostat uniquement) » dans GSH
qui est mappé avec le statut [Actif] du thermostat

Car si jamais je positionne la consigne du thermostat a 22° (donc > a la t° constaté dans la pièce) donc le statut du Thermostat passe à [ACTIF] = 1

et du coup que vois je sur Google :

Google me dit bien que je suis en Mode ‹ Chauffage › (ce qui est exact, je l’ai associé au mode confort)

Donc je pense que la correction à faire est la suivante :

  • Ce n’est pas le mode qu’il faut corriger c’est le statut : Il faut forcer Jeedom a dire que le statut du Thermostat est = 1 (actif) lorsque ce dernier est sur un autre mode que le OFF

Jeedom semble envoyer à google que le statut du Thermostat est à 0 lorsque celui ci ne chauffe pas mais qu’on a bien activé un mode différent de Off
Il faut forcer Jeedom a dire que le statut du Thermostat est = 1 (actif) lorsque ce dernier est sur un autre mode que le OFF (car le soucis vient bien de la , lorsque la consigne du Thermostat est < a la température constaté dans la piece, le statut du Thermostat est à 0 est cela est considéré par Google comme si ce dernier est en fait en OFF, alors que non il est pas OFF, il est juste en attente que la température de la pièce passe en dessous de la consigne pour lancer le chauffage)

Le mapping d’un Thermostat GSH

 "id": "233",
        "type": "action.devices.types.THERMOSTAT",
        "roomHint": "Chambre bas",
        "name": {
            "name": "[Chambre bas][Thermostat Chambre bas]",
            "nicknames": [
                "Thermostat Chambre bas",
                "Thermostat Chambre bass",
                "Thermostat Chambre bas Chambre bas"
            ]
        },
        "traits": [
            "action.devices.traits.TemperatureSetting"
        ],
        "willReportState": false,
        "customData": {
            "TemperatureSetting_cmdGetSetpoint": "1798",
            "TemperatureSetting_cmdGetHumidity": "1806",
            "TemperatureSetting_cmdGetMode": "1813",
            "TemperatureSetting_cmdGetState": "1800",
            "TemperatureSetting_cmdGetTemperature": "1805",
            "TemperatureSetting_cmdSetThermostat": "1799",
            "local_execution::apikey": "vW48RXWkrGbJ9862yf3yi8GFRZhZJNmb"
        },
        "attributes": {
            "availableThermostatModes": "heat,off,eco",
            "thermostatTemperatureUnit": "C"
        },

C’est la ligne
"TemperatureSetting_cmdGetState": "1800",
Qui pose soucis, car même si le mode est Confort, si cette ligne envoit le statut ‹ Arrété › (0) ( cequi est le cas lorsque T° piece > T°Consigne) et bien Google comprend que en fait le Thermostat est en OFF donc il verrouille tout et force le mode à OFF sur Google

En fait il manque une commande côté Jeedom, qui renverrait 1 si le Thermostat est != OFF (donc 1 en mode chauffe ou arrété, et 0 uniquement si on a mis en Off le Thermostat)

cdt

Ok c’est peut etre le activeThermostatMode qui donne cette information a google alors et pas ThermostatMode. J’ai fait un changement pour que les 2 soit toujours identique a voir demain.

Bonjour,

Toujours pareil avec la dernière bêta :frowning:

Comme l’indique Frixo c’est vraiment le statut « Arrêté »’ du thermostat qui pose problème quand la consigne est atteinte ou dépassée.

Bonjour

Alors non c’est pas exactement pareil
désormais, lorsque le

  • Thermostat JEEDOM est OFF => Le Thermostat Google est OFF
  • Thermostat JEEDOM est en CONFORT mais statut Arrété (T° Consigne < T° constaté pièce) => Thermostat Google en Mode Autre ! ( l’édition de la consigne est vérouillé tout comme en mode OFF)
  • Thermostat JEEDOM en CONFORT statut en cours de chauffe (T° Consigne >T° constaté pièce) => Thermostat Google OK en mode Chauffe avec Consigne éditable

cdt

Je pense que on est pas le status qu’il faut il faudrait heat ou cool mais quand le thermostat est pas réellement en train de faire quelque chose (consigne atteinte) je ne peux pas savoir si il est plutôt en mode chauffage ou froid.
.

Demain il y aura une nouvelle beta ou au lieu de on je mets auto… a voir

Bonjour Loic

j’ai fait des essai sur la ligne 241 du fichier (gsh_TemperatureSetting.class.php)

case __('Arrêté', __FILE__):
    $return['thermostatMode'] = 'auto';
    break;

alors :

  • Si $return[‹ thermostatMode ›] = ‹ auto ›; => Google est verouillé en mode Autre , impossible d’éditer la consigne
  • Si $return[‹ thermostatMode ›] = ‹ on ›; => Google est verouillé en mode Autre , impossible d’éditer la consigne
  • Si $return[‹ thermostatMode ›] = ‹ heat ›; => Ca marche !

Bon j’avoue que par contre moi j’ai pas de pompe a chaleur réversible (mode clim), donc je sais pas trop comment faire en mode clim pour inverser cela !

Il y a un autre soucis, c’est que lorsque mon Thermostat est en Mode OFF (sur Jeedom), le statut de ce dernier est ‹ Arrété › et non ‹ Off › , du coup Google comprend que le Thermostat est en route !

du coup j’ai l’impression que cette ligne de code ne s’exécute jamais

           case __('Off', __FILE__):
244           $return['thermostatMode'] = 'off';
245           break;

[MAJ de 11H03]
C’est bon j’ai trouvé le bon code qui marche , le voila

case __('Arrêté', __FILE__):
241                 $cmd = cmd::byId($_infos['customData']['TemperatureSetting_cmdGetMode']);
242                 if (is_object($cmd)) {
243                    $mode = $cmd->execCmd();
244                    $cmd_off = $eqLogic->getCmd('action', 'off');
245                    if(!is_object($cmd_off)){
246                       $cmd_off = cmd::byId($_device->getOptions('TemperatureSetting::off'));
247                    }
248                    if (is_object($cmd_off) && $mode == $cmd_off->getName()) {
249                       $return['thermostatMode'] = 'off';
250                       break;
251                    }
252                 }
253           $return['thermostatMode'] = 'heat';
254           break;
255           case __('Off', __FILE__):
256           $return['thermostatMode'] = 'off';
257           break;
258         }

j’ai la forte impression que ce bout de code ne s’execute jamais

case __('Off', __FILE__):
256           $return['thermostatMode'] = 'off';
257           break;
258         }

cdt

Re

J’ai aussi une petite proposition d’évolution, que perso j’ai implémenté en contournant un peu le systeme
Je souhaitais que via le mode Thermostat Google on puisse enclencher le Thermostat Jeedom, sauf que ce dernier est verrouillé côté Jeedom ,(car sinon j’ai le planning Jeedom qui me le varie auto la nuit ),

Du coup mon idée serait de proposer une option qui authorise Google a déverouiller le Thermostat
Ex : Lorsque je sélectionne Confort sur Google , ca dévérouille le Thermostat Jeedom et la bascule en Confort

Je sais pas la… Cette partie du code n’est pas de mois je ne voulais pas forcement l’accèpter au debut on m’a forcé a le faire mais je ne sais plus le maintenir je ne peux donc pas intervenir dessus plus que ce que j’ai deja fait.

@frixo : pour ta demande ca ne sera pas possible je ne peux pas encore plus dédié la partie thermostat que au plugin thermostat désolé

Bonjour

Pas grave pour la demande j’ai trouvé comment contourner :slight_smile:

Bon par contre ma modif de code marche du tonnerre !
Ça serait dommage de pas en faire profiter tout le monde non

Cdt

Tu peux l’expliquer ? Car oui ca marche pour toi pas de soucis mais pour les dizaine de milliers d’installation et de configuration differente ca je sais pas…

Peux tu essayer aussi heatcool peut etre que ca peut marcher a la place du on/auto

Bonjour,
Je vais ajouter mes trouvailles sur l’action activethermostatmode et thermostatmode. Je comprends que Google s’attend à reçevoir les deux actions dans une tranmission de l’état. De plus j’ai constaté que les verbes permettant de connaitre l’état actif actuel à savoir si entrain de chauffer ou de refroidir sont taillés sur mesure pour le plugin Thermostat et sont en français. Pour ceux qui ont des thermostat zwave ou zigbee comme moi, impossible de transmettre le mode actuel car les verbes sont toujours en anglais.
Par conséquent je crois qu’il est facile d’adapter pour les deux type de thermostats avec les verbes en anglais qui sont standard comme suit:

  if (isset($_infos['customData']['TemperatureSetting_cmdGetState'])) {
      $cmd = cmd::byId($_infos['customData']['TemperatureSetting_cmdGetState']);
      if (is_object($cmd)) {
        $state = $cmd->execCmd();
        switch ($state) {
          case __('Heating', __FILE__);
          case __('Chauffage', __FILE__);
          $return['activeThermostatMode'] = 'heat';
          break;
          case __('Cooling', __FILE__);
          case __('Climatisation', __FILE__);
          $return['activeThermostatMode'] = 'cool';
          break;
          case __('Idle', __FILE__):
          case __('Suspendu', __FILE__):
          $return['activeThermostatMode'] = 'none';
          $return['thermostatMode'] = 'heat';
          break;
          case __('Off', __FILE__):
          case __('Arrêté', __FILE__):
          $return['activeThermostatMode'] = 'none';
          $return['thermostatMode'] = 'off';
          break;

Pas une grosse modification et pourrait facilement accepter tous les thermostats autres que ceux du plugin.

Bonjour

Bien sûr voila ce que ca fait

Si le Statut du Thermostat est en ‹ Arrété ›

case __('Arrêté', __FILE__):

Alors 2 possibilités :

  • Soit le Thermostat est en Mode OFF , donc il faut dire à Google que le Thermostat est désactivé
$cmd = cmd::byId($_infos['customData']['TemperatureSetting_cmdGetMode']);
242                 if (is_object($cmd)) {
243                    $mode = $cmd->execCmd();
244                    $cmd_off = $eqLogic->getCmd('action', 'off');
245                    if(!is_object($cmd_off)){
246                       $cmd_off = cmd::byId($_device->getOptions('TemperatureSetting::off'));
247                    }
248                    if (is_object($cmd_off) && $mode == $cmd_off->getName()) {
249                       $return['thermostatMode'] = 'off';
250                       break;
251                    }
  • Soit le thermostat n’est pas en mode Off, mais la T° de consigne étant < à la température de la piece , le thermostat ne chauffe pas car pas besoin (ce qui explique le statut du Thermostat à ‹ Arrété › )
$return['thermostatMode'] = 'heat';
254           break;

Le reste j’ai pas touché , ca y été déja (je parle de ca :

255           case __('Off', __FILE__):
256           $return['thermostatMode'] = 'off';
257           break;

cdt

Donc ca marchera pas en mode clim… Ce qui est genant

Alors j’ai fouillé mais il me manque une info …
Comment sait on si on est en mode chauffage ou clim dans Jeedom ?
car si je m’amuse à jouer avec la consigne de passe en mode ‹ Aucun › donc j’ai pas d’info pour savoir si je suis en chauffe ou en clim ?

Après, de mes essais, ca change rien sauf le code couleurs côté Google…

cdt

On sait pas c’est le soucis, c’est au moment de se lancer qu’il calcul les 2 possibilité et choisis la plus adaptée…

Le mode heatcool ne marche pas ?

Re

alors je suis reparti sur le code de base
et j’ai juste … commenté la ligne 241

241 //          $return['thermostatMode'] = 'on';

, car en fait elle sert a rien, elle fait complètement redondance avec ce qu’il y a 20 ligne au dessus

J’ai créé un mode froid et chaud

tout est détecté comme il faut ! et le mapping se fait dans les 2 sens !!!
la clim , le chauffage, le mode eco, le Off

voila :slight_smile: content

PS les 20 lignes au dessus c’est celles la

foreach ($cmds_action as $cmd_found) {
200           if ($mode == $cmd_found->getName()) {
201             switch ($cmd_found->getId()) {
202               case $_device->getOptions('TemperatureSetting::heat'):
203               $return['thermostatMode'] = 'heat';
204               break;
205               case $_device->getOptions('TemperatureSetting::cool'):
206               $return['thermostatMode'] = 'cool';
207               break;
208               case $_device->getOptions('TemperatureSetting::eco'):
209               $return['thermostatMode'] = 'eco';
210               break;
211               case $_device->getOptions('TemperatureSetting::auto'):
212               $return['thermostatMode'] = 'auto';
213               break;
214               case $_device->getOptions('TemperatureSetting::heatcool'):
215               $return['thermostatMode'] = 'heatcool';
216               break;
217               case $_device->getOptions('TemperatureSetting::off'):
218               $return['thermostatMode'] = 'off';
219               break;
220             }
221           }
1 « J'aime »

Ok tu peux essayer a la ligne 249 de changer :
if (isset($_infos['customData']['TemperatureSetting_cmdGetState'])) {
par
if (!isset($return['thermostatMode']) && isset($_infos['customData']['TemperatureSetting_cmdGetState'])) {

En gros si ya deja un mode ca sert a rien d’en recalculer un.

J’ai pas compris ton dernier post, mais je confirme que le fais de désactiver tout bonnement la ligne 241 résoud le soucis