Comme annoncé, ce forum est passé en lecture seule au 1er janvier 2020. Désormais nous vous invitons à vous rendre sur notre nouvelle page communauté :
Image

A très bientôt !

[Résolu] Clarification syntaxe de la fonction tendance()

Réservé à la création de scénarios dans JEEDOM
Avatar de l’utilisateur
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()

Message par Theduck38 » 17 juil. 2019, 17:33

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 !
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é

Sartog
Actif
Messages : 502
Inscription : 27 août 2015, 14:54

Re: Clarification syntaxe de la fonction tendance()

Message par Sartog » 18 juil. 2019, 09:01

Bonjour Theduck38,

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)

Avatar de l’utilisateur
tomdom
Actif
Messages : 925
Inscription : 14 nov. 2016, 05:46

Re: Clarification syntaxe de la fonction tendance()

Message par tomdom » 18 juil. 2019, 13:23

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
Theduck38 a écrit :
17 juil. 2019, 17:33

tendance(#commande#, 1 hour,0 , 1) = -1
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)
......
Tu peux tester avec 0.01 comme dernier paramètre.
Il y a 10 catégories de personnes, celles qui connaissent le binaire et les autres
.

Avatar de l’utilisateur
Theduck38
Helper
Messages : 2714
Inscription : 22 févr. 2015, 17:32
Localisation : Près de Grenoble
Contact :

Re: Clarification syntaxe de la fonction tendance()

Message par Theduck38 » 18 juil. 2019, 15:33

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 ?
-- 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é

Avatar de l’utilisateur
tomdom
Actif
Messages : 925
Inscription : 14 nov. 2016, 05:46

Re: Clarification syntaxe de la fonction tendance()

Message par tomdom » 18 juil. 2019, 16:13

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.
Il y a 10 catégories de personnes, celles qui connaissent le binaire et les autres
.

Avatar de l’utilisateur
Theduck38
Helper
Messages : 2714
Inscription : 22 févr. 2015, 17:32
Localisation : Près de Grenoble
Contact :

Re: Clarification syntaxe de la fonction tendance()

Message par Theduck38 » 18 juil. 2019, 17:29

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.
-- 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é

Avatar de l’utilisateur
Theduck38
Helper
Messages : 2714
Inscription : 22 févr. 2015, 17:32
Localisation : Près de Grenoble
Contact :

Re: Clarification syntaxe de la fonction tendance()

Message par Theduck38 » 18 juil. 2019, 17:52

Je pense que j'ai trouvé la fonction responsable :

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);
}
Si je comprends bien, c'est le coefficient directeur d'une droite de régression linéaire. :o :o :o
Donc pour ramener ça à une valeur "humaine"... vas-y !!!

Bon, on va dire que la question est résolue :lol:
-- 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é

Répondre

Revenir vers « Scénarios »

Qui est en ligne ?

Utilisateurs parcourant ce forum : Aucun utilisateur inscrit et 13 invités