Bonjour,
Afin de profiter pleinement de mes nouveaux panneaux solaires, et soulager ma cuve de fuel, je souhaiterais sur-chauffer en journées (ensoleillées) mes pièces avec des radiateurs électriques.
Par contre, pour faire les choses bien, j’aurais aimé déterminer quelle est la pièce la plus froide afin de déclencher en priorité le radiateur de l’endroit qui en a le plus besoin (et les faire les uns après les autres pour ne pas acheter d’électricité).
Ne sachant que faire des comparaisons qu’entre deux valeurs (et ayant plus de deux pièces chez moi ), est ce que quelqu’un pourrait m’aiguiller pour démarrer proprement mon scénario.
Exemple:
#[Pièce 1][Thermostat Pièce 1][Température]# = 19.2
#[Pièce 2][Thermostat Pièce 2][Température]# = 18.3
#[Pièce 3][Thermostat Pièce 3][Température]# = 19
#[Pièce 4][Thermostat Pièce 4][Température]# = 18.1
#[Pièce 5][Thermostat Pièce 5][Température]# = 19.3
→ Exécution de #[Pièce 4][Radiateur élec][On]#
Jeedolm n’est pas hyper fort pour fair ede la comparaison inter-equipememnt ou interpièce !!!
Je peux te proposer un bloc code :
// Création d'un tableau pour stocker les températures des pièces
$temperatures = array(
"Pièce 1" => cmd::byString('#[Pièce 1][Thermostat Pièce 1][Température]#')->execCmd(),
"Pièce 2" => cmd::byString('#[Pièce 2][Thermostat Pièce 2][Température]#')->execCmd(),
"Pièce 3" => cmd::byString('#[Pièce 3][Thermostat Pièce 3][Température]#')->execCmd(),
"Pièce 4" => cmd::byString('#[Pièce 4][Thermostat Pièce 4][Température]#')->execCmd()
);
// Tri du tableau par température
asort($temperatures);
// Récupération de la première entrée du tableau trié (la pièce la plus froide)
$piece_la_plus_froide = key($temperatures);
$temperature_la_plus_froide = $temperatures[$piece_la_plus_froide];
$scenario->setLog( "La pièce la plus froide est : " . $piece_la_plus_froide . " avec une température de " . $temperature_la_plus_froide . "°C.");
// Stockage du résultat dans des tags Jeedom
$scenario->setTags(array('piece_la_plus_froide' => $piece_la_plus_froide, 'temperature_la_plus_froide' => $temperature_la_plus_froide));
// Pour utiliser ces tags dans un autre scénario, utilisez tag(piece_la_plus_froide) et tag(temperature_la_plus_froide)
(fait avec chatGPT )
Ensuite, soit tu continues en bloc code, soit tu recupereres la pièce via les tags et avec des SI
SI <piece 1> Alors
mettre le chauffage dans Pièce 1
Eteindre dans toutes les autres pièces
SI <piece 2> Alors .....
Et comment tu récupères ensuite la pièce concernée pour lancer le chauffage
sans compter que min, coté jeedom correspond à la recup d’un min dans une même commande
min(commande,période) & minBetween(commande,start,end) : Donnent le minimum de la commande sur la période (period=[month,day,hour,min] ou expression PHP) ou entre les 2 bornes demandées (sous la forme Y-m-d H:i:s ou expression PHP).
oui ca je me suis posé la question en l’écrivant mais j’ai pourtant des scénarios avec max et ca fonctionne; faudrait que je creuse
et ca va d’autant plus fonctionner dans un bloc code
mais min tout seul va pas suffir on est d’accord, la solution du sort est très bien et surtout fonctionne!
Merci énormément pour vos retours , par contre, j’ai quand même quelques problèmes (sans doute à cause de mon niveau inférieur à 0 en code ):
Je n’arrive pas à récupérer les tags pour mes blocs SI…
Exécution du sous-élément de type [condition] : if tag(piece_la_plus_froide) == 'Salle'
Evaluation de la condition : ["" == 'Salle'] = Faux
Exécution du sous-élément de type [condition] : if tag(temperature_la_plus_froide) < 19
Evaluation de la condition : ["" < 19] = Vrai
@ktn :
J’ai également testé ta solution, mais ça me retourne ceci:
Merci pour ton retour, en effet, ça va mieux sans la faute de frappe , par contre, je te confirme que les ‹ # › sont obligatoire, et le code me retourne ça dans les logs:
La pièce la plus froide est : [Cuisine][Thermostat Cuisine] avec une température de 19.1°C.
De plus, peux-tu m’indiquer comment récupérer les tag dans mon scénario? (j’ai essayé de rajouter ça, mais ça marche pas, le tag(pieceMin) me répond toujours "" )
ChatGPT m’a trouvé ma bourde (merci @ngrataloup pour le conseil )
voici donc le code que je vais utiliser:
$tempCmds = array(
cmd::byString('#[Salle][Thermostat Salle][Température]#'),
cmd::byString('#[Cuisine][Thermostat Cuisine][Température]#'),
cmd::byString('#[TV][Thermostat TV][Température]#'),
);
$tempMin = 300;
$pieceMin = null;
foreach ($tempCmds as $cmd) {
$temp = $cmd->execCmd();
if ($temp < $tempMin) {
$tempMin = $temp;
$pieceMin = $cmd->getEqLogic();
}
}
$scenario->setLog("La pièce la plus froide est : " . $pieceMin->getHumanName() . " avec une température de " . $tempMin . "°C.");
// Récupérer les tags actuels du scénario
$tags = $scenario->getTags();
// Mettre à jour les valeurs des tags
$tags['#piece_Min#'] = $pieceMin->getHumanName(); // Utiliser getHumanName() pour obtenir le nom de la pièce
$tags['#temp_Min#'] = $tempMin;
// Réaffecter les tags mis à jour au scénario
$scenario->setTags($tags);
Bon , je récupère le tag sous la forme "[TV][Thermostat TV]" (et non pas que le nom de la pièce), mais rien de bien gênant pour la suite de mon scénario