Récupération valeur slider

Bonjour à tous,

Tout d’abord, je vous demanderai un peu d’indulgence car je fais mes premiers pas dans le développement d’un plugin. Je connais un peu le PHP mais la programmation orientée objet est très nouvelle pour moi.

Cela fait déjà un certain temps que je veux créer un plugin pour le module Sensibo Sky qu’une connaissance utilise plutôt que de jouer avec un script python trouvé sur le net.

J’ai pratiquement tout terminé mais je bute sur un point.

Le module m’envoie plusieurs informations comme par exemple le mode (heat, cool ou dry). Ce qui m’intéresse est la température consigne.

J’ai donc créé une commande action/slider qui est mise à jour avec la valeur que l’API me renvoie et par cette commande, je souhaite pouvoir changer la valeur pour l’envoyer en retour à l’API si j’actionne le slider.

J’ai tout d’abord deux questions:

  • Est-ce la bonne méthode d’utiliser une commande pour récupérer une valeur et la changer via un slider? Ne faut-il pas avoir deux commandes

  • Comment puis-je récupérer la valeur du slider à l’exécution de la commande en question (action/slider) mais aussi quand j’exécute un autre commande (pour changer la puissance du ventilateur par exemple)?

Donc dans la fonction « execute » du fichier monplugin.class.php, je vérifie le logicalId et je récupère l’objet $this->getEqLogic();. A partir de là, je peux vérifier le nom de la commande pour effectuer le traitement mais je ne vois pas comment récupérer la valeur du slider.

Pour une commande info, j’ai trouvé le code sur l’ancien forum qui me permet de récupérer toutes les commandes info d’un équipement et utiliser execCmd() pour récupérer la valeur… Sauf que pour une commande action, il ne me retourne pas la valeur mais exécute la commande… ce que je ne veux pas…

En vous remerciant d’avance,

Salut,

La valeur d’une commande action/slider est sauvegardée dans une commande info/numérique liée. J’ai survolé sur le tel mais je dirais qu’il te faut ajouter cette commande info numérique liée à la commande slider

1 « J'aime »

Merci pour ta réponse rapide. Cela veut donc dire que je dois bien avoir 2 commandes, une action/slider et une info/numeric. Et donc un lien entre les deux?

Oui je pense. Et pour le lien entre les 2 ça doit se faire en renseignant setConfiguration('infoId','#id#_de_la_commande info)' sur la commande action.

OK, je vais creuser dans ce sens.
Que c’est excitant de pouvoir développer pour Jeedom mais pas toujours évident pour un novice…

Je suis en plein dedans aussi en ce moment :wink:

Je vais regarder cela d’abord en le faisant via un virtuel pour bien comprendre le principe et puis je tâcherai de le faire avec le code.
Si c’est bon, l’étape suivante va être la publication sur git et le Market… Je sens que je vais encore y passer des heures lol

Je m’attaque à la doc dès que possible pour ma part :nerd_face:

Pour te donner une idée :

et en BDD sur la commande action/slider on voit la mention infoId dans Configuration:
image

1 « J'aime »

Effectivement, en le faisant sur le virtuel, c’est cela. Je vais aller dans cette direction, merci du tuyau :slight_smile:

Pour set la commande info ayant la valeur d’une commande action, c’est un setValue qu’il faut faire.
Par exemple:

$actionlogicalId = 'maCommmandeAction';
$infologicalId = 'maCommandeInfo';

$cmd = $this->getCmd(null, $actionlogicalId);
$infoCmd = $this->getCmd(null, $infologicalId);

$cmd->setValue($infoCmd ->getId());

La config infoId dans la config du virtuel est une configuration propre au plugin et uniquement utilisé par ce plugin, ce n’est pas un mécanisme du core.

1 « J'aime »

Merci du coup de main. Je tente déjà de refaire la partie création de commande pour avoir deux commandes pour la consigne, une qui récupère la valeur en info/numeric et une autre action/slider

Pour une commande slider, n’oublie pas de set la config suivante pour que le widget s’applique bien (sinon ca sera 0-100):

            "configuration": {
                "value" : "#slider#",
                "minValue" : -10,
                "maxValue" : 30
            },

Donc

$cmd->setConfiguration('value', "#slider#");
$cmd->setConfiguration('minValue', $min);
$cmd->setConfiguration('maxValue', $max);

A toit de définir le min, max évidement.
Tu peux aussi afficher ces champs dans la config des commandes pour laisser l’utilisateur les changer (préférable) + gérer un min/max « absolu » / « technique » dans ton code au cas où il y a des bornes au delà desquelles l’appel planterait.

Merci pour l’info, j’avais bien le min et le max mais pas la value.
D’ailleurs, j’essaie de forcer la valeur du slider avec la donnée qui vient de l’API avec $sensibosky->checkAndUpdateCmd('setTemperature', $targetTemp); mais la valeur ne se met pas à jour alors que cela fonctionne bien pour les info.

Je vais regarder pour ajouter cette commande supplémentaire pour voir si c’est mieux.

Effectivement, maintenant quand je change le slider, il garde sa valeur.
Je vais maintenant faire le lien.
Restera à comprendre pourquoi le slider ne se met pas à jour lorsque je reçois l’info de l’API.

Tu ne dois pas « mettre à jour » la commande action slider, uniquement la commande info
Et parce que le « value » de l’action est set sur la commande info, le slider se positionnera « automatiquement » sur la valeur de la commande info lorsque tu mets celle-ci à jour avec l’info venant de ton api.

Ok, question idiote peut-être

$actionlogicalId = 'maCommmandeAction';
$infologicalId = 'maCommandeInfo';

$cmd = $this->getCmd(null, $actionlogicalId);
$infoCmd = $this->getCmd(null, $infologicalId);

$cmd->setValue($infoCmd ->getId());

Ce code, je dois l’utiliser dans la class d’exécution des commandes ou dans la class eqLogic?

Tu dois le mettre là ou tu créés tes commandes :wink:
D’ailleurs faut faire un $cmd->save() à la fin

le $this dans l’exemple est un eqLogic (car getCmd est une fonction de eqLogic).

Mais p-e que tu as déjà une variable avec ta commande et que tu n’as pas besoin de faire le getCmd, c’était juste un exemple que tu dois un peu adapter à ton code, ne l’ayant pas vu je ne peux pas dire plus.

Bien entendu. Et c’est très gentil de m’aider sur cela :slight_smile:

Bon, madame me rappelle à l’ordre, je dois m’occuper des enfants… Je retente ce soir :slight_smile:
Merci pour votre aide en tout cas :slight_smile: