Seuil à plusieurs étages

Seuils à plusieurs étages

Historique

Le plugin a été développé par Patskins (décembre 2017) pour afficher dans un capteur l'état d'une valeur sur 3 étages (Seuil haut / Normal / Seuil bas).

Il a été étendu par dommarion (v2.1 mai 2021) pour pouvoir traiter 10 seuils hauts et 10 seuils bas.

En janvier 2022, la v2.2 (opa95) a permis la correction d'un bug rare et l'extension à plus de 10 seuils (hauts ou bas) à condition de modifier par la suite la liste des valeurs.

Présentation du plugin

 Le plugin surveille la valeur numérique d'un capteur et la compare aux divers seuils définis dans les variables [VAR2] (seuils hauts) et [VAR3] (seuils bas). Le résultat est un nombre entier:

 A l'installation du plugin, il est crée une liste de 21 valeurs allant de -10 à 10, pour permettre d'activer des règles facilement. Ils correspondent aux noms par défaut (On peut les renommer dans la liste des valeurs du plugin) :
Seuil bas 10 franchi, ... Seuil bas 1 franchi, Normal, Seuil haut 1 franchi ... Seuil haut 10 franchi

 La version v2.2 permet d'aller au delà de la limitation à 20 seuils, mais il faudra compléter manuellement la liste des valeurs en mode configuration du device.

 Les seuils de chaque liste sont séparés par des '*' et sont triés, dans l'ordre croissant, indépendamment l'une de l'autre ; les seuils peuvent donc être dans un ordre quelconque, mais le minimum des seuils hauts doit être strictement supérieur au maximum des seuils bas pour que l'intervalle Normal existe. A partir de la version v2.2, si 2 seuils sont identiques, le second est éliminé.
 Les seuils correspondent à la limite haute de l'intervalle du dessous : par exemple, pour une suite de seuils s1*s2*s3 (classés) correspondants respectivement aux valeurs 1,2,3 une valeur strictement supérieure à s2 et inférieure ou égale à s3 se verra affecter la valeur correspondant à s2 (c'est à dire 2). Les valeurs des seuils étant arrondies à 2 décimales, la valeur 2 sera affectée à toutes les mesures entre s2+0.005 et s3+0.004.
 La notation décimale accepte indifféremment le '.' (point) ou la ',' 'virgule).

Installation du plugin

Remplir les divers champs (tous sont modifiables après l'installation)

puis cliquer sur créer.

 Le plugin de type Liste de valeurs sera crée avec avec 21 valeurs par défaut.

Appel

http://localhost/script/?exec=seuilsvaleur.php&ValSensor=[LAST_VALUE PERIPH_ID=1538197]&VAR2=[VAR2]]&VAR3=[VAR3]]

Exemple

 [VAR1] => 1538197

 [VAR2] => 19,5*21*23*25

 [VAR3] => 7*10*16,5*17.5*18,5

 XPATH => /root/Etat

Remarque

 Le calcul est a priori plus rapide si les seuils sont rentrés dans l'ordre croissant.

Résultat

N° du niveau
   0 si valeur dans la zone Normale
 <0 si zone basse,  >0 si zone haute.
erreur si seuils incohérents

Applications types

Référence de thermostat

 Pour une température de référence de 19°, on peut consirérer les zones :
  Excessif  : [21,5;24,5] => 2
  Douillet  : [19,5;21,5] => 1
  Normale  : [18,5;19,5] => 0
  Confort-1 : [17,5;18,5] => -1
  Confort-2 : [16,5;17,5] => -2
  Eco        : [15,5;16,5] => -3
  Absence  : [9,5;15,5] => -4
  HorsGel  : [6,5;9,5] => -5
  Alerte   : [2,5;6,5] => -6
  Danger   : [-30;2,5] => -7

On mettra donc
[VAR2] => 19.5*21,5*24,5 et
[VAR3] => -30*2,5*6,5*9,5*15,5*16,5*17,5*18,5

et on aura intérêt à renommer la liste des valeurs, surtout si on on a plusieurs plugin à dupliquer, y compris la valeur 3 ('Canicule') et la valeur -8 ('Antarctique').

Pourcentage de charge ou de puissance

 Pour un chauffage de 2000W , on peut consirérer les zones :
  100%  : [1900;2500] => 0
  90%  : [1700;1900] => -1
  80%  : [1500;1700] => -2
  70%  : [1300;1500] => -3
  60%  : [1100;1300] => -4
  50%  : [900;1100] => -5
  40%  : [700;900] => -6
  30%  : [500;700] => -7
  20%  : [300;500] => -8
  10%  : [100;300] => -9
  10%  : [0;100] => -10

On mettra donc
[VAR2] => 2500 et
[VAR3] => 0*100*300*500*700*900*1100*1300*1500*1700*1900

et on aura intérêt à renommer la liste des valeurs, surtout si on on a plusieurs plugin à dupliquer.

Enchaînement de tâches liées à l'alarme du réveil

 Si on utilise myreveil du STORE, /REVEIL/DELTATIME contient le temps en minutes restant avant l'alarme (valeur négative) ou depuis l'alarme (valeur positive). Il est donc possible de définir des seuils avant le lever (Chauffage : -60'; radio : -15', lumière *5, ....).

Règles

 On peut utiliser les règles simplement avec un critère du genre
  Capteur - devient maintenant - égal à (inférieur à - différent de) - Normal
 ou bien avoir une réaction différentiée selon que l'on atteint le niveau en remontant ou en descendant avec un double critère du genre
Capteur - était - inférieur à - Normal
et
Capteur - devient maintenant - égal à - Normal
et une autre règle pour la descente
Capteur - était - supérieur à - Normal
et
Capteur - devient maintenant - égal à - Normal

 On peut ainsi éviter d'éventuelles oscillations pour un thermostat si la température oscille trop au voisinage du point de consigne.

Débogage

 Pour vérifier les valeurs, entrer dans le panneau de configuration du plugin et cliquer sur Tester.

 Dans la fenêtre de test, apparaît la commande envoyée par le plugin, par exemple :
http://localhost/script/?exec=seuilsvaleur.php&ValSensor=[LAST_VALUE PERIPH_ID=1538197]&VAR2=19,5*21*23*25&VAR3=7*10*16,5*17.5*18,5&eedomus_controller_module_id=2611758

 En cliquant sur Tester on obtient le résultat du plugin avant le traitement par XPATH.

&lt;?xml version="1.0" encoding="utf8" ?&gt;&lt;root&gt;&lt;Etat&gt;0&lt;/Etat&gt;&lt;/root&gt;

et Résultat du XPATH : 0

 Pour essayer des valeurs particulières, on peut remplacer dans la commande
[LAST_VALUE PERIPH_ID=1538197] directement par une valeur décimale
(Attention dans [VAR1], le séparateur des décimales est le point et non la virgule)

 On peut obtenir des informations complémentaires en mode debug; pour cela il faut ajouter à la chaîne de commande &debug=1 (par défaut, debug=0, le débogage est inactif).

http://localhost/script/?exec=seuilsvaleur.php&ValSensor=[LAST_VALUE PERIPH_ID=1538197]&VAR2=19,5*21*23*25&VAR3=7*10*16,5*17.5*18,5&debug=1&eedomus_controller_module_id=2611758

Le résultat permet d'afficher le contenu de [VAR2], [VAR3], les nombres de seuils hauts et bas, les valeurs des seuils triés et l'indice qui leur est affecté et la valeur mesurée.

Le résultat renvoie : ERREUR: Valeur lue vide car le fichier obtenu n'est pas au format xml, mais les informations de la fenêtre sont correctes.



VAR2 : 19,5212325
VAR3 : 23457891016,517.5*18,5
Nbr Haut : 4
Nbr Bas  : 11
array(15) {
  [-11]=>
  float(2)
  [-10]=>
  float(3)
  [-9]=>
  float(4)
  [-8]=>
  float(5)
  [-7]=>
  float(7)
  [-6]=>
  float(8)
  [-5]=>
  float(9)
  [-4]=>
  float(10)
  [-3]=>
  float(16.5)
  [-2]=>
  float(17.5)
  [-1]=>
  float(18.5)
  [0]=>
  float(19.5)
  [1]=>
  float(21)
  [2]=>
  float(23)
  [3]=>
  float(25)
}
 ValSensor = 20
 Seuil = 1
<?xml version="1.0" encoding="utf8" ?><root><Etat>1</Etat></root>