Nouvelle version du plugin GSH

Salut à tous, et à @Loic !

Tout d’abord un grand merci pour cette nouvelle version du plugin GSH qui permet de faire PLEINNNN de nouveaux types d’appareil bien plus facilement. Bravo !

Par contre, une question sur notre participation au code… Je jette un œil sur le thermostat, et j’aurai des propositions de modifications sur la class TemperatureSettings, même si le code n’est pas mon fort mais ça marche chez moi :slight_smile:

Je ne trouve pas de github pour le plugin gsh. C’est quoi la bonne méthode pour soumettre du code (sans avoir à révéler justement le code d’un plugin payant ?)

Bonjour,
Le plugin étant payant il est privé, donc le mieux c’est de poster le fichier modifier ici (en .txt je crois) et je regarde de mon coté les modifications et si c’est valable.

gsh_TemperatureSetting.class.php.txt (12,3 Ko)

Tiens @Loic, j’ai essayé de commenter mes modifs
Y’a que le bloc sur le test de la commande Off que j’arrive pas à faire marcher.

Sinon le reste fonctionne chez moi sur un thermostat jeedom couplé à une climatisation simple (via IR)

Je me pose par contre une question, sur le retour d’état en push… J’ai coché la case dans la conf de mon thermostat sur gsh, mais les modifs apparaissent pas en temps réel sur mon tel ou mon nest hub… C’est normal ?

Merci je regarde ça demain. Pour le push faut éviter de le cocher je crois ça ne marche que sur les lumières et ça met pas a jour dans l’application si tu es sur l’équipement faut sortir et rerentrer

1 « J'aime »

Je viens de pousser en beta (dispo demain) je pense avoir compris le soucis du off il n’est pas de type mode_action j’ai donc changé le filtre a tester (je n’ai pas de quoi le faire)

Je testerai dès que je peux. Tiens je te donne encore du boulot pour le Fan ce coup ci

2 erreurs à mon sens
ligne 93 $return['attributes']['commandOnlyFanSpeed'] = false;
puisque la valeur est déjà définie par défaut à true dans ton array
(EDIT : Argh mais du coup on perd le SetFanSpeedRelativeSpeed avec un false ici… bon…)

Tout le bloc query aussi à partir de 154, y’a un problème de logique avec la formule de calcul
Les minvalue et maxvalue sont appliqués sur une CMD qui n’est pas un slider
Du coup, ca marche bien quand c’est les valeurs par défaut, mais sinon, ca foire

J’ai écrit ça à la place

public static function query($_device, $_infos){
    $return = array();
    $cmd = null;
    $cmd_set = null;
    if (isset($_infos['customData']['FanSpeed_cmdSet'])) {
      $cmd_set = cmd::byId($_infos['customData']['FanSpeed_cmdSet']);
    }
    if (isset($_infos['customData']['FanSpeed_cmdGet'])) {
      $cmd = cmd::byId($_infos['customData']['FanSpeed_cmdGet']);
      
      if (is_object($cmd)) {
        $value = $cmd->execCmd();
        $return['currentFanSpeedPercent'] = ($value - $cmd_set->getConfiguration('minValue', 0)) * 100 / ($cmd_set->getConfiguration('maxValue', 100) - $cmd_set->getConfiguration('minValue', 0));
        if($return['currentFanSpeedPercent'] > 75){
          $return['currentFanSpeedSetting'] = '100';
        }elseif($return['currentFanSpeedPercent'] > 50){
          $return['currentFanSpeedSetting'] = '75';
        }elseif($return['currentFanSpeedPercent'] > 25){
          $return['currentFanSpeedSetting'] = '50';
        }elseif($return['currentFanSpeedPercent'] > 0){
          $return['currentFanSpeedSetting'] = '25';
        }else{
          $return['currentFanSpeedSetting'] = '0';
        }
      }
    }
    return $return;
  }

Salut,

Alors pour le commandOnlyFanSpeed effectivement il devrait etre a false et pas a true tu as raison.

Par contre pour la 2eme modification je suis pas forcement d’accord normalement la commande info « get » doit avoir le meme min/max que le set donc pour moi pas besoin d’aller chercher la commande set.

Ca doit être une de mes spécificités alors, comme c’est un ventilateur en IR je le commande avec un virtuel.
Du coup, j’ai une action par un slider, mais une commande info qui renvoi un numérique. Il faut que je trouve comment transformer ce numérique en slider je suppose ?

Et concernant les modes et states qui marchaient pas dans le temperatureSettings, c’est que j’utilisais les anciennes dénomination de thermostatMode:: et pas temperatureSetting:: :man_facepalming:
J’ai aussi pas mal jouer à ajouter des modes (eco, auto, heatcool…)
J’essaye de voir ce qui est interessant ou pas à ajouter, genre un eco pour un hors-gel par exemple…

Pour ta commande numéric ya pas de soucis ta commande renvoi la valeur X qui est convertie en % puis jeedom regarde le mode correspondant et le renvoi a google normalement pas de probleme.

Mettre les mêmes bornes sur l’info que sur l’action… Quel imbécile je suis !
Mea culpa ^^

Voila une nouvelle version de la classe temperatureSettings
En gros :

  • Correction de bug sur le mode off
    Pour le thermostatMode == off que j’arrivais pas à faire marcher, tu utilises la variable $eqlogic qui n’est pas initialisée dans cette fonction
public static function exec($_device, $_executions, $_infos){
    $return = array();
    $eqLogic = $_device->getLink();
    foreach ($_executions as $execution) {

Je recherche également la valeur logique Off et le nom renseigné dans la liste déroulante « Mode Off » sur les commandes pour comparer avec thermostatMode lors d’un query

  • Ajout des modes
    1 - Eco (eco) : pour un hors-gel par exemple - température non modifiable
    2 - Autre (auto) : mode buggué à l’heure actuelle chez Google. On ne peut pas le sélectionner mais je le garde en réserve dans le code.
    3 - Auto chaud/froid (heatcool) : qui est le plus intéressant à mon sens, puisque le plugin thermostat est capable de faire les deux mais ce mode doit normalement renvoyer un range de température (une super idée pour le dev du plugin thermostat ça d’ailleurs :smirk:). En attendant, je renvois un intervalle de +2/-2° autour de la consigne. Si modification d’une des bornes, la consigne sera ajustée à la moyenne de l’intervalle et le mode basculera automatiquement sur Clim ou Chauffage.
    Pourquoi c’est intéressant ? Ca permet d’avoir plusieurs modes du plugin thermostat sélectionnables directement !

Ma conf pour ma clim

  • un mode confort à 27° sur le Auto(heatcool)
  • un mode MAX à 25° sur le mode clim qui me permet de changer la température
  • un mode Eco à 29° sur le Eco pour quand je suis pas là
    (Et oui ma clim est une monobloc vieillissante dans un appartement qui s’approche d’un four en été ^^’)

TemperatureSettings.php.txt (15,6 Ko)

Salut,

Merci pour le retour ca sera disponible demain en beta du plugin.

Pour le range du plugin thermostat ce n’est pas possible avec son mode de fonction temporelle.

J’essaye d’utiliser les sensors mais pas moyen…
Y’a une bizarerie chez google pour le TemperatureControl : il faut apparement impérativement un SetPoint même juste pour renvoyer un temperatureAmbientCelsius :thinking:

Du coup j’ai modifié le query, la réponse n’est pas très française (« Capteur est réglé sur 28 point 3 degrés ») mais au moins il repond qq chose

public static function query($_device, $_infos){
    $return = array();
    $cmd = null;
    if (isset($_infos['customData']['TemperatureControl_cmdGetTemperature'])) {
      $cmd = cmd::byId($_infos['customData']['TemperatureControl_cmdGetTemperature']);
      $return['temperatureAmbientCelsius'] = $cmd->execCmd();
    }
    if (isset($_infos['customData']['TemperatureControl_cmdGetSetpoint'])) {
      $cmd = cmd::byId($_infos['customData']['TemperatureControl_cmdGetSetpoint']);
      $return['temperatureSetpointCelsius'] = $cmd->execCmd();
    } else if (isset($_infos['customData']['TemperatureControl_cmdGetTemperature'])) {
      $cmd = cmd::byId($_infos['customData']['TemperatureControl_cmdGetTemperature']);
      $return['temperatureSetpointCelsius'] = $cmd->execCmd();
    }
    return $return;
  }

J’en profite aussi pour militer contre la disparition du type enceinte/AV :stuck_out_tongue:
Du coup j’ai rajouté un
'action.devices.types.AUDIO_VIDEO_RECEIVER' => array('name' => __('Ampli AV',__FILE__) ,'traits' =>array('OnOff','MediaState','InputSelector','AppSelector','TransportControl','Volume','Modes')),
dans la classe gsh

Bonjour,
Merci pour ton retour ca sera integré dans la beta de demain matin

Hello ! Si tu pouvais ajouter le type Arrosage automatique

'action.devices.types.SPRINKLER' => array('name' => __('Arrosage',__FILE__) ,'traits' =>array('StartStop')),

et tant qu’à faire @Loic s’il est possible d’utiliser un des types générique déjà ajouté de mon coté dans homebridge car ils manquaient dans le core c’est encore mieux :wink:

'FAUCET_STATE' => array('name' => __('Robinet Etat (Homebridge)',__FILE__), 'family' => __('Valves',__FILE__), 'type' => 'Info', 'ignore' => true, 'homebridge_type' => true),
			'FAUCET_ON' => array('name' => __('Robinet Bouton On (Homebridge)',__FILE__), 'family' => __('Valves',__FILE__), 'type' => 'Action', 'ignore' => true, 'homebridge_type' => true),
			'FAUCET_OFF' => array('name' => __('Robinet Bouton Off (Homebridge)',__FILE__), 'family' => __('Valves',__FILE__), 'type' => 'Action', 'ignore' => true, 'homebridge_type' => true),
			'IRRIG_STATE' => array('name' => __('Irrigation Etat (Homebridge)',__FILE__), 'family' => __('Valves',__FILE__), 'type' => 'Info', 'ignore' => true, 'homebridge_type' => true),
			'IRRIG_ON' => array('name' => __('Irrigation Bouton On (Homebridge)',__FILE__), 'family' => __('Valves',__FILE__), 'type' => 'Action', 'ignore' => true, 'homebridge_type' => true),
			'IRRIG_OFF' => array('name' => __('Irrigation Bouton Off (Homebridge)',__FILE__), 'family' => __('Valves',__FILE__), 'type' => 'Action', 'ignore' => true, 'homebridge_type' => true),
			'VALVE_STATE' => array('name' => __('Valve générique Etat (Homebridge)',__FILE__), 'family' => __('Valves',__FILE__), 'type' => 'Info', 'ignore' => true, 'homebridge_type' => true),
			'VALVE_ON' => array('name' => __('Valve générique Bouton On (Homebridge)',__FILE__), 'family' => __('Valves',__FILE__), 'type' => 'Action', 'ignore' => true, 'homebridge_type' => true),
			'VALVE_OFF' => array('name' => __('Valve générique Bouton Off (Homebridge)',__FILE__), 'family' => __('Valves',__FILE__), 'type' => 'Action', 'ignore' => true, 'homebridge_type' => true),

Je ne sais pas faut voir avec l’équipe l’ajout de générique type n’est pas un truc que l’on fait a la légère

j’ai pourtant fournis ma liste de types génériques il y a longtemps à Alex, mais malgré tout, quand tu as ajouté les types multimedia, ou encore les ventilateurs (qui sont depuis plus d’un an dans homebridge), cela n’a pas été pris en compte.

Je ne gère pas cette partie et ne suis pas au courant de ce que tu as passé a Alex… Et je ne peux pas prendre ce genre de décision tout seul désolé