[Résolu] Clarification syntaxe de la fonction tendance()
- Theduck38
- Helper
- Messages : 2714
- Inscription : 22 févr. 2015, 17:32
- Localisation : Près de Grenoble
- Contact :
[Résolu] Clarification syntaxe de la fonction tendance()
Bonjour,
Suite à une question dans un autre fil (viewtopic.php?f=32&t=46423), la syntaxe de la fonction tendance semble ne pas être claire...
Après la période, il faut préciser un paramètre qui sert au calcul.
La doc donne comme exemple un décimal écrit avec un point : p. ex : 0.4
Or chez moi, ça fonctionne avec une virgule pour le nombre décimal :
tendance(#commande#, 1 hour,0 , 1) = -1
tendance(#commande#, 1 hour,0 . 1) = 0
Idem quand ça monte.
Pourtant, dans une question récente, cela semble fonctionner avec un point :
viewtopic.php?f=32&t=46058#p742888
Donc ma question : quelle est la bonne syntaxe. Est-ce que ceux qui utilisent la fonction peuvent indiquer s'ils ont mis un point ou une virgule et surtout si ça marche (avec l'évaluateur d'expressions ; le résultat ne doit pas être nul...) ?
Merci d'avance pour votre aide !
Suite à une question dans un autre fil (viewtopic.php?f=32&t=46423), la syntaxe de la fonction tendance semble ne pas être claire...
Après la période, il faut préciser un paramètre qui sert au calcul.
La doc donne comme exemple un décimal écrit avec un point : p. ex : 0.4
Or chez moi, ça fonctionne avec une virgule pour le nombre décimal :
tendance(#commande#, 1 hour,0 , 1) = -1
tendance(#commande#, 1 hour,0 . 1) = 0
Idem quand ça monte.
Pourtant, dans une question récente, cela semble fonctionner avec un point :
viewtopic.php?f=32&t=46058#p742888
Donc ma question : quelle est la bonne syntaxe. Est-ce que ceux qui utilisent la fonction peuvent indiquer s'ils ont mis un point ou une virgule et surtout si ça marche (avec l'évaluateur d'expressions ; le résultat ne doit pas être nul...) ?
Merci d'avance pour votre aide !
Dernière édition par Theduck38 le 18 juil. 2019, 17:53, édité 1 fois.
-- TD38 --
Helper Officiel Jeedom
Zimeteo sur Jeedom : http://www.meteo.lecoin.info
Jeedom Stable sur serveur custom
Le risque électrique - Afficheur leds RGB - Tablette Murale - Thermostat connecté
Helper Officiel Jeedom
Zimeteo sur Jeedom : http://www.meteo.lecoin.info
Jeedom Stable sur serveur custom
Le risque électrique - Afficheur leds RGB - Tablette Murale - Thermostat connecté
Re: Clarification syntaxe de la fonction tendance()
Bonjour Theduck38,
Pour ma part, à l'époque le . ne fonctionnait pas.
A ce jour, j'utilise toujours la , dans mes virtuels.
Pour ma part, à l'époque le . ne fonctionnait pas.
A ce jour, j'utilise toujours la , dans mes virtuels.
Code : Tout sélectionner
tendance(#[Salon][(Netatmo) Salon][Température]#,1 Hour,0,1)
Box : smart, mini+, pi 2 et 3, ipbx800 v4
Protocole : Z-Wave (Fibaro & Qubino), Ikea, Bluetooth
Méteo : Netatmo
Audio : Sonos (Play 1 et 5)
Protocole : Z-Wave (Fibaro & Qubino), Ikea, Bluetooth
Méteo : Netatmo
Audio : Sonos (Play 1 et 5)
Re: Clarification syntaxe de la fonction tendance()
Bonjour,
La bonne syntaxe c'est avec le point. Quand tu mets une virgule, c'est comme si tu ajoutais un paramètre à la fonction
Tu peux tester avec 0.01 comme dernier paramètre.
La bonne syntaxe c'est avec le point. Quand tu mets une virgule, c'est comme si tu ajoutais un paramètre à la fonction
Cette ligne est égale à :
Code : Tout sélectionner
tendance(#commande#, 1 hour,0)
tendance(#commande#, 1 hour,0,999)
tendance(#commande#, 1 hour,0,1,2,3,4)
......
Il y a 10 catégories de personnes, celles qui connaissent le binaire et les autres
.
.
- Theduck38
- Helper
- Messages : 2714
- Inscription : 22 févr. 2015, 17:32
- Localisation : Près de Grenoble
- Contact :
Re: Clarification syntaxe de la fonction tendance()
Merci pour vos retour.
@tomdom
justement, ce que j'écris ce sont les résultats de l'évaluateur d'expression... il me retourne une valeur exploitable uniquement si je mets une virgule. Pas quand je mets un point !
Avec 0.01 même topo : tendance(#commande#, 1 hour,0.01) donne toujours 0. Si je mets 0,01 j'ai bien un retour à 1 ou -1.
Tu as essayé sur ton Jeedom ? Il te faut un point ?
@tomdom
justement, ce que j'écris ce sont les résultats de l'évaluateur d'expression... il me retourne une valeur exploitable uniquement si je mets une virgule. Pas quand je mets un point !
Avec 0.01 même topo : tendance(#commande#, 1 hour,0.01) donne toujours 0. Si je mets 0,01 j'ai bien un retour à 1 ou -1.
Tu as essayé sur ton Jeedom ? Il te faut un point ?
-- TD38 --
Helper Officiel Jeedom
Zimeteo sur Jeedom : http://www.meteo.lecoin.info
Jeedom Stable sur serveur custom
Le risque électrique - Afficheur leds RGB - Tablette Murale - Thermostat connecté
Helper Officiel Jeedom
Zimeteo sur Jeedom : http://www.meteo.lecoin.info
Jeedom Stable sur serveur custom
Le risque électrique - Afficheur leds RGB - Tablette Murale - Thermostat connecté
Re: Clarification syntaxe de la fonction tendance()
Bonjour,
Oui j'ai essayé. Et comme déjà indiqué, mettre 0,1 (ou 0,01) reviens au même que mettre 0. Si tu as un retour à 0, ça veut dire que la variation calculée par la fonction n'est pas inférieur à -le3èmeparamètre ou supérieur à +le3èmeparamètre
Quand tu mets 0.1, la fonctionne retourne 1 si la variation est supérieur à 0.1, retourne -1 si la variation est inférieur à -0.1 sinon ça retourne 0.
En mettant 0,1, ça fait le test ci-dessus avec 0.
Oui j'ai essayé. Et comme déjà indiqué, mettre 0,1 (ou 0,01) reviens au même que mettre 0. Si tu as un retour à 0, ça veut dire que la variation calculée par la fonction n'est pas inférieur à -le3èmeparamètre ou supérieur à +le3èmeparamètre
Quand tu mets 0.1, la fonctionne retourne 1 si la variation est supérieur à 0.1, retourne -1 si la variation est inférieur à -0.1 sinon ça retourne 0.
En mettant 0,1, ça fait le test ci-dessus avec 0.
Il y a 10 catégories de personnes, celles qui connaissent le binaire et les autres
.
.
- Theduck38
- Helper
- Messages : 2714
- Inscription : 22 févr. 2015, 17:32
- Localisation : Près de Grenoble
- Contact :
Re: Clarification syntaxe de la fonction tendance()
Je crois que j'ai compris...
J'ai fait des tests sur ma température extérieure qui a varié de environ 2.1°C durant la dernière heure.
Comme tu l'as fait remarquer, lorsque j'écris 0,1 il ne prend que le 0... j'ai essayé en mettant tendance(#température#,1 hour,0,1,2,3,4) et il me donne bien une tendance sur une heure non nulle.
En revanche, pourquoi ça ne marche pas avec 0.4, par exemple ? Et bien parce que dans le cas précis de la température et d'une variation de 2.1°C dans l'heure, la limite de déclenchement de la fonction est de 0.03. Au-dessus ça renvoie 0 et en dessous ça renvoie bien -1.
Du coup, quel est l'impact du paramètre dans la fonction ? Clairement pas directement une valeur exprimée dans l'unité de la commande testée... Ça pourrait être une pente normalisée (calcul de la pente divisée par la valeur moyenne sur la période), mais si je la calcule à la main, je tombe sur 0.07...
Bon, en tout cas, la syntaxe est clarifiée (merci pour l'aide !), mais il reste à expliquer l'impact du paramètre dans le calcul.
J'ai fait des tests sur ma température extérieure qui a varié de environ 2.1°C durant la dernière heure.
Comme tu l'as fait remarquer, lorsque j'écris 0,1 il ne prend que le 0... j'ai essayé en mettant tendance(#température#,1 hour,0,1,2,3,4) et il me donne bien une tendance sur une heure non nulle.
En revanche, pourquoi ça ne marche pas avec 0.4, par exemple ? Et bien parce que dans le cas précis de la température et d'une variation de 2.1°C dans l'heure, la limite de déclenchement de la fonction est de 0.03. Au-dessus ça renvoie 0 et en dessous ça renvoie bien -1.
Du coup, quel est l'impact du paramètre dans la fonction ? Clairement pas directement une valeur exprimée dans l'unité de la commande testée... Ça pourrait être une pente normalisée (calcul de la pente divisée par la valeur moyenne sur la période), mais si je la calcule à la main, je tombe sur 0.07...
Bon, en tout cas, la syntaxe est clarifiée (merci pour l'aide !), mais il reste à expliquer l'impact du paramètre dans le calcul.
-- TD38 --
Helper Officiel Jeedom
Zimeteo sur Jeedom : http://www.meteo.lecoin.info
Jeedom Stable sur serveur custom
Le risque électrique - Afficheur leds RGB - Tablette Murale - Thermostat connecté
Helper Officiel Jeedom
Zimeteo sur Jeedom : http://www.meteo.lecoin.info
Jeedom Stable sur serveur custom
Le risque électrique - Afficheur leds RGB - Tablette Murale - Thermostat connecté
- Theduck38
- Helper
- Messages : 2714
- Inscription : 22 févr. 2015, 17:32
- Localisation : Près de Grenoble
- Contact :
Re: Clarification syntaxe de la fonction tendance()
Je pense que j'ai trouvé la fonction responsable :
Si je comprends bien, c'est le coefficient directeur d'une droite de régression linéaire.
Donc pour ramener ça à une valeur "humaine"... vas-y !!!
Bon, on va dire que la question est résolue
Code : Tout sélectionner
public static function getTendance($_cmd_id, $_startTime, $_endTime) {
$values = array();
foreach (self::all($_cmd_id, $_startTime, $_endTime) as $history) {
$values[] = $history->getValue();
}
if (count($values) == 0) {
$x_mean = 0;
} else {
$x_mean = array_sum(array_keys($values)) / count($values);
}
if (count($values) == 0) {
$y_mean = 0;
} else {
$y_mean = array_sum($values) / count($values);
}
$base = 0.0;
$divisor = 0.0;
foreach ($values as $i => $value) {
$base += ($i - $x_mean) * ($value - $y_mean);
$divisor += ($i - $x_mean) * ($i - $x_mean);
}
if ($divisor == 0) {
return 0;
}
return ($base / $divisor);
}
Donc pour ramener ça à une valeur "humaine"... vas-y !!!
Bon, on va dire que la question est résolue
-- TD38 --
Helper Officiel Jeedom
Zimeteo sur Jeedom : http://www.meteo.lecoin.info
Jeedom Stable sur serveur custom
Le risque électrique - Afficheur leds RGB - Tablette Murale - Thermostat connecté
Helper Officiel Jeedom
Zimeteo sur Jeedom : http://www.meteo.lecoin.info
Jeedom Stable sur serveur custom
Le risque électrique - Afficheur leds RGB - Tablette Murale - Thermostat connecté
Qui est en ligne ?
Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 13 invités