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.
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).
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.
http://localhost/script/?exec=seuilsvaleur.php&ValSensor=[LAST_VALUE PERIPH_ID=1538197]&VAR2=[VAR2]]&VAR3=[VAR3]]
VAR1 => code API du plugin de mesure -> envoi de la valeur au script
VAR2 => seuils hauts séparés par des *
(nombre décimal avec . ou , et ordre des seuils indifférent)
VAR3 => seuils bas séparés par des *
(nombre décimal avec . ou , et ordre des seuils indifférent)
XPATH => /root/Etat
[VAR1] => 1538197
[VAR2] => 19,5*21*23*25
[VAR3] => 7*10*16,5*17.5*18,5
XPATH => /root/Etat
Le calcul est a priori plus rapide si les seuils sont rentrés dans l'ordre croissant.
N° du niveau
0 si valeur dans la zone Normale
<0 si zone basse,
>0 si zone haute.
erreur si seuils incohérents
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').
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.
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, ....).
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.
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.
<?xml version="1.0" encoding="utf8" ?><root><Etat>0</Etat></root>
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>