Calcul de variable

Bonjour,

Question peut être très bête, mais je ne vois pas.
Je passe par des variables pour calculer des consommations.

Pour récupérer la valeur, je passe par un maxbetween sur une info de suivi conso, jusque là tout va bien.

maxBetween(#[Energie][Chauffage SDB][Conso Semaine TOTAL]#,monday 2 weeks ago 00:00,sunday 2 weeks ago 23:59)+maxBetween(#[Energie][Chauffage Ami][Conso Semaine TOTAL]#,monday 2 weeks ago 00:00,sunday 2 weeks ago 23:59)+maxBetween(#[Energie][Chauffage Entrée][Conso Semaine TOTAL]#,monday 2 weeks ago 00:00,sunday 2 weeks ago 23:59)+maxBetween(#[Energie][Chauffage Raphaël][Conso Semaine TOTAL]#,monday 2 weeks ago 00:00,sunday 2 weeks ago 23:59)+maxBetween(#[Energie][Chauffage SdO][Conso Semaine TOTAL]#,monday 2 weeks ago 00:00,sunday 2 weeks ago 23:59)

Par exemple.

Sauf que le résultat de ce calcul peut donner si certaines données ne retournent rien un résultat un peu spécial…

Du coup, si je cherche à afficher cette variable dans un virtuel, bein ça m’affiche 0… certainement car le résultat est une suite non calculée.

Une idée comment contourner cela ?

Merci et bon confinement !

Salut,

Il doit y avoir moyen en utilisant les expressions ternaires afin d’indiquer d’additionner 0 si un maxbetween est vide.

Ça fera une expression un peu longue mais bon.

Bison

J’ai cherché sur l’aide scénario/jeedom mais je ne vois pas comment faire un test conditionnel ternaire en NA.
Si quelqu’un sait ?

EDIT bon à priori NULL fonctionne… voilà la ligne de calcul maintenant !

maxBetween(#[Energie][Chauffage SDB][Conso Semaine TOTAL]#,monday 2 weeks ago 00:00,sunday 2 weeks ago 23:59) == NULL ? "VRAI" : "FAUX"

Ce qui donne à l’origine :

Corrigé :

Et en résultat merci les yeux :

Au premier abord, on se dit chouette !
Sauf que la variable reste à 0 et ne donne pas 21.1 comme on peut voir dans le testeur d’expression…

Le log donne :

[2020-04-29 16:26:56][SCENARIO] Affectation de la variable conso_chauf_semprec => ((0.3 == NULL) ? 0 : 0.3) + (( == NULL) ? 0 : ) + ((11.8 == NULL) ? 0 : 11.8) + ((9 == NULL) ? 0 : 9) + (( == NULL) ? 0 : ) = ((0.3 == NULL) ? 0 : 0.3) + (( == NULL) ? 0 : ) + ((11.8 == NULL) ? 0 : 11.8) + ((9 == NULL) ? 0 : 9) + (( == NULL) ? 0 : )
[2020-04-29 16:26:56][SCENARIO] Affectation de la variable prix_chauf_semprec => ((0 == NULL) ? 0 : 0) + (( == NULL) ? 0 : ) + ((1 == NULL) ? 0 : 1) + ((0.9 == NULL) ? 0 : 0.9) + (( == NULL) ? 0 : ) = ((0 == NULL) ? 0 : 0) + (( == NULL) ? 0 : ) + ((1 == NULL) ? 0 : 1) + ((0.9 == NULL) ? 0 : 0.9) + (( == NULL) ? 0 : )

Et du coup mon virtuel donne 0…

Une idée pour que j’obtienne le résultat du testeur d’expression ?

Ah intuitivement j’aurais plutôt utilisé la condition == " plutôt que == NULL mais je suppose que tu as déjà essayé ?

bonjour benj29
ou triple =
https://www.php.net/manual/fr/language.operators.comparison.php

Hello U :),

Non, le triple === ne change rien avec NULL. L’expression reste sans résultat de même.

[2020-05-01 18:32:31][SCENARIO] Affectation de la variable prix_chauf_sem => 0.1++0.5+0.9+0 = 1.5
[2020-05-01 18:32:31][SCENARIO] Affectation de la variable conso_chauf_semprec => ((0.3 === NULL) ? 0 : 0.3) + (( === NULL) ? 0 : ) + ((11.8 === NULL) ? 0 : 11.8) + ((9 === NULL) ? 0 : 9) + (( === NULL) ? 0 : ) = ((0.3 === NULL) ? 0 : 0.3) + (( === NULL) ? 0 : ) + ((11.8 === NULL) ? 0 : 11.8) + ((9 === NULL) ? 0 : 9) + (( === NULL) ? 0 : )
[2020-05-01 18:32:31][SCENARIO] Affectation de la variable prix_chauf_semprec => ((0 == NULL) ? 0 : 0) + (( == NULL) ? 0 : ) + ((1 == NULL) ? 0 : 1) + ((0.9 == NULL) ? 0 : 0.9) + (( == NULL) ? 0 : ) = ((0 == NULL) ? 0 : 0) + (( == NULL) ? 0 : ) + ((1 == NULL) ? 0 : 1) + ((0.9 == NULL) ? 0 : 0.9) + (( == NULL) ? 0 : )

Et le design à 0.

Bonsoir,
Si on parle bien de double cote et non pas un simple ", c’est pareil… nada aussi !.

Bon, il me reste à créer des variables intermédiaires pour les cas compliqués.

Bon, voilà.
Pour le cas d’une variable basée sur un seul paramètre, j’utilise la fonction ternaire.
A défaut, je passe par des variables et je fais la somme.
Un peu lourd, mais au moins, tous les calculs sont faits.

Non, bein ça ne marche pas du tout !
Je ne comprends pas pourquoi et ça commence à me piquer après plusieurs heures de test …

[2020-05-01 19:56:08][SCENARIO] Affectation de la variable temp_ami => (( == '') ? 0 : ) = (( == '') ? 0 : )
[2020-05-01 19:56:08][SCENARIO] Affectation de la variable temp_sdb => (( == NULL) ? 0 : ) = (( == NULL) ? 0 : )
[2020-05-01 19:56:08][SCENARIO] Affectation de la variable temp_entree => (( == NULL) ? 0 : ) = (( == NULL) ? 0 : )
[2020-05-01 19:56:08][SCENARIO] Affectation de la variable temp_raph => ((1.9 == NULL) ? 0 : 1.9) = 1.9
[2020-05-01 19:56:08][SCENARIO] Affectation de la variable temp_sdo => (( == ) ? 0 : ) = (( == ) ? 0 : )
[2020-05-01 19:56:08][SCENARIO] Affectation de la variable conso_chauff_2j => (( == NULL) ? 0 : )+(( == '') ? 0 : )+(( == NULL) ? 0 : )+1.9+(( == ) ? 0 : ) = (( == NULL) ? 0 : )+(( == '') ? 0 : )+(( == NULL) ? 0 : )+1.9+(( == ) ? 0 : )
[2020-05-01 19:56:08][SCENARIO] Affectation de la variable temp_ami => (( == NULL) ? 0 : ) = (( == NULL) ? 0 : )

J’ai testé avec == NULL ; ===’’ ; == «  » ou ==="" … à chaque fois, le testeur d’expression marche parfaitement.
Par contre dans le scénario, il empile le texte « bêtement » et n’y arrive pas …

EDIT :

quelqu’un pourrait il me guider pour faire ça par code ?
histoire de voir si cela vient des variables.

C’est à dire ?

Avec un bloc code dans un scénario, cela donnerait cela (je viens de le tester) :

$valeur1 = $scenario->getData('valeur_1');
$valeur2 = $scenario->getData('valeur_2');
$valeur_test = $scenario->getData('valeur_test');
$resultat = ($valeur_test == NULL)?$valeur1:$valeur2;
$scenario->setLog('Résultat : '.$resultat);
cmd::byString("#[Tests][Calcul][Résultat]#")->event($resultat);