Bonjour à tous!
Je me permet de vous solicité car je ne trouve pas la possibilité de creer un scenario pour:
Arreter tout les scenarios d’un groupe
Desactiver tout les scenario d’un groupe
Supprimer les CRON associé de ces scenarios (car j’ai des programmation DANS/A)
J’ai fais des recherche mais je n’y arrive pas.
J’ai tester des codes PHP mais rien ne fonctionne:
$groupName = "Chauffage";
$scenarios = scenario::all();
foreach ($scenarios as $scenario) {
if ($scenario->getGroup()->getName() == $groupName) {
// Arrêter le scénario
$scenario->stop();
// Désactiver le scénario
$scenario->setIsActive(0);
$scenario->save();
// Supprimer les cron associés au scénario
$crons = cron::searchClassAndFunction('scenario', 'doIn', '{"scenario_id":'.$scenario->getId().'}');
if (is_array($crons)) {
foreach ($crons as $cron) {
$cron->remove();
}
}
$scenario->setLog("Arrêt et désactivation du scénario : " . $scenario->getName());
}
}
De plus, je n’ai pas de retour de log, j’ai juste cela:
[2023-05-22 10:54:42][SCENARIO] -- Start : Scenario lance manuellement.
[2023-05-22 10:54:42][SCENARIO] - Exécution du sous-élément de type [action] : code
[2023-05-22 10:54:42][SCENARIO] Exécution d'un bloc code
[2023-05-22 10:54:42][SCENARIO] - Exécution du sous-élément de type [action] : action
[2023-05-22 10:54:42][SCENARIO] Fin correcte du scénario
Alors que je souhaiterai avoir le resultat de chaque operation demandé dans le code. Es possible ?
Tu dis ne pas avoir de logs.
Si tu ajoutes des ligs dans un bloc code php mais que le scenario qui execute ce blic code na pas les logs sur defaut tu n’en n’auras pas
Je fais cela sans une ligne de code, avec le plugin « mode ».
Et le plugin mode est lui, piloté par un scénario qui va vérifier les conditions météorologiques « à venir » pour savoir s’il faut activer ou pas les scénarios de chauffage.
Le problème semble être que tu utilises $scenario comme nom de ta variable qui est une variable déjà utilisée par le core. Essaye avec $monScenario ccomme nom de variable par exemple.
$groupName = "Chauffage";
$scenarios = scenario::all();
foreach ($scenarios as $monScenario) {
if ($monScenario->getGroup() == $groupName) {
// Arrêter le scénario
$monScenario->stop();
// Désactiver le scénario
$monScenario->setIsActive(0);
$monScenario->save();
// Supprimer les cron associés au scénario
$crons = cron::searchClassAndFunction('scenario', 'doIn', '{"scenario_id":'.$monScenario->getId().'}');
if (is_array($crons)) {
foreach ($crons as $cron) {
$cron->remove_inat();
}
}
$monScenario->setLog("Arrêt et désactivation du scénario : " . $monScenario->getName());
}
}
Les scenarios se desactivent ! Youpi! Merci
Par contre je n’arrive pas a supprimer les cron liée à mon scenario « Programmation »
Comment dois je proceder ? Je pensais qu’en rajoutant remove_inat, cela enleverai tout les cron des scenarion du groupe visé. Ca n’a pas fonctionné
Oui je comprend.
Mais si seulement il existerait en natif la fonction remove_inat, ce serait plus simple pour des utilisateurs non expérimenté comme moi.
La fonction remove_inat devrait pouvoir être inséré dans un scénario et devrait ouvrir un champs de choix de scénario.
Au moins, de n’importe quel scénario, nous pourrions supprimer des cron liée a d’autre scénario, en natif, et très simplement …
Mais c’est le cas, c’est ce que vous explique prfalken.
Seulement, dans le choix de fonction à utiliser, elle ne porte pas ce nom, mais :
Supprimer bloc DANS/A programmé
À sélectionner dans la liste déroulante des actions de scénario.
Qui se traduit automatiquement en remove_inat