Nouveau dans la communauté mais utilisateur Jeedom depuis de nombreuses années, je viens soulever un potentiel « bug » du code du plugin Thermostat :
Dans public function calculTemporalData($_consigne, $_allowOverfull = false) de la classe PHP Thermostat, on voit que les appels ne sont jamais passés qu’avec 1 seul argument, alors, $_allowOverfull vaut toujours false.
Mais, après le calcul de power, on voit la condition suivant pour « normaliser » power entre 0 et 100 :
if ($power > 100 && !$_allowOverfull) {
$power = 100;
}
if ($power < 0) {
$power = 0;
}
Alors, si $_allowOverfull vaut toujours false, power ne sera mis à 100 si il est > 100.
De plus, au paramétrage du plugin, on peut indiquer un intervalle de valeurs de puissance, qui n’est pas pris en compte ici.
Comme je me sers de la valeur cycliquement recalculée de power, normalisée entre 0 et 99% pour commander l’ouverture vannes thermostatiques, j’avais des commandes erronées (i.e. des vannes qui restaient à 0% d’ouverture alors qu’elles auraient du être à 99%).
J’ai donc corrigé ainsi, et le comportement semble OK:
if ($power >= 100) {
$power = 99;
}
if ($power < 0) {
$power = 0;
}
J’ai regardé rapidement le code et à priori on ne peut pas mettre en place la modification que tu proposes.
D’une part car ce paramètre est utilisé pour le calcul du prochain état Smart start et d’autre part tout simplement car la puissance peut être égale ou supérieure à 100%.
Je ne saisis pas bien la finalité recherchée ? Les vannes restent à 0% quand elles reçoivent 100% au lieu de 99% ? Dans ce cas tu dois pouvoir agir pour que 100% de puissance du thermostat = 99% d’ouverture des vannes.
Le souci c’est qu’à la sortie de la fonction calculTemporalData, puissance vaut des valeurs « non discrètes » et > 100 et qu’alors, en sortie de calcul, la puissance du thermostat est à 0%.
Donc, non, je ne sais pas simplement comment commander mes vannes si je ne sais pas discriminer une puissance à 0% car on est « hors intervalle » d’une puissance à 0% alors qu’on est sans besoin de chauffage (car T°>Consigne).
Et comme en plus je fais une moyenne des puissances demandées pour provoquer l’allumage de ma chaudière, j’avais un comportement erroné de ma chaudière par ricochet.
Si le fait que la branche if ($power > 100 && !$_allowOverfull) ne puisse jamais être empruntée (code mort) n’est pas anormal, OK.
Que la puissance en sortie de la fonction, puisse valoir n’importe quelle valeur >0 est normale (alors que c’est un pourcentage), OK.
Si ça provoque, sans doute seulement dans certaines conditions de besoin de chauffe, un thermostat qui ne sollicite pas la chauffe car avec une puissance valant 0, OK.
Pas de souci, mais je trouve ça vraiment étrange.
En tout cas, ça m’a permis de retrouver un comportement adéquat de mes thermostats, je n’ai cependant pas une connaissance exhaustive et approfondie de ce code et ne maîtrise pas les tenants et aboutissant de ma proposition, mais reste que, dans mon cas, le comportement du thermostat est erroné → puissance à 0% alors que besoin de chauffe.
Le problème c’est que tu te trompes sur plusieurs points de l’algo :
Comme le précisait @salvialf, il y a un appel à la méthode avec le paramètre _allowOverfull à true (les autres sont bien à false par défaut car non précisés)
Lorsque les appels sont fait avec la valeur false par défaut, le passage à 100 si $power dépasse est possible car le test est !_allowOverfull donc avec _allowOverfull=false, on a !_allowOverfull = true, donc pour $power=120 par exemple, $power sera bien remis à 100
En effet, je n’ai pas regardé tous les appels et les arguments passés.
Je vais sans doute ouvrir un autre sujet sur mes thermostats à puissance = 0% alors que la t° intérieure est << consigne et que la puissance calculée est >> 100% (cf. observations dans les logs).
Comportement « corrigé » par ma modif, mais je comprends qu’elle a des effets de bord non désirables et non désirés.
Il serait peut être judicieux de les partager alors tu ne penses pas ?
Car avec le peu d’ éléments que tu donnes, la modification que tu proposes ne peut pas être prise en compte en l’état au vue des arguments que l’on vient de te donner.
Il ne faut pas oublier que ce plugin est utilisé par des milliers de personnes depuis des années. Je doute vraiment qu’un thermostat qui ne chaufferai pas alors que toutes les conditions sont réunies n’ait pas été remonté avant.
Enfin tu poses des affirmations totalement erronées dès ton 1er message, je t’invite donc à transmettre des faits plutôt (des logs).
Oui oui, j’ai été un peu cavalier et j’ai pris des raccourcis, et j’espérais bien que ce que j’avais vu était une erreur de ma part, mais comme ça a solutionné mon souci, je me suis dit pourquoi pas.
Cela dit, non, aucune affirmation n’est erronée dans mon premier post, et il n’y a que des faits, mais je peux me tromper.
Comme indiqué dans mon dernier post, je vais ouvrir un autre sujet pour présenter mon problème, les logs associés et la solution que j’ai implémentée et retenue.
J’espère n’avoir froissé personne et bonne soirée à la communauté.
Petite note d’organisation: pourquoi voulez-vous ouvrir un nouveau post ?
Vous pouvez donner les compléments d’informations concernant votre problème ici.
Comme ce post était orienté « proposition », je pensais préférable d’en recréer un autre orienté « demande d’aide ».
Je fais sans cesse des modifications à ma configuration, je vais donc stabiliser le tout (après avoir reseté les thermostats, code PHP comme coefficient du mode temporel) et laisser un « équilibre » apparaître. Si cet équilibre ne pilote pas correctement mon installation, je viendrai poster des logs et détails de conf+ screenshots.