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…
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
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.
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
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.
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
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.
Tu dois le mettre là ou tu créés tes commandes
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.