Bonjour
comme peut être pas mal d’entre nous, j’utilise le plugin RFXcom pour mes volets RTS Somfy.
Le deamon ayant souvent tendance à planter, il arrive parfois que les ouvertures ou fermeture de volets ne soient pas effectivement lancées.
Le truc étant que malgré l’activation de la « Gestion automatique », le deamon ne se relance pas.
le statut reste donc parfois sur NOK pendant les plombes.
Du coup, je m’étais dit que j’allais tenter par scénario de monitorer tout ça.
Désormais j’ai un scénario qui se lance dès qu’un scénario utilise les volets pour faire un diagnostic de tous les deamons.
En gros en premier je fais un statut
$tags = $scenario->getTags();
$tags['#tagScenario#'] = $scenario->getName();
$tags['#tagGroupe#'] = $scenario->getGroup();
// On efface la variable message
$message='Deamon :';
// on ajoute une ligne dans le log
$scenario->setLog('Début Monitoring des Demons');
foreach(plugin::listPlugin(true) as $plugin){
if($plugin->getHasOwnDeamon() && config::byKey('deamonAutoMode', $plugin->getId(), 1) == 1) {
$deamon_info = $plugin->deamon_info();
if ($deamon_info['state'] != 'ok') {
$message .='|❌ '.$plugin->getName().' ('.$plugin->getId().')';
$tags['#tagEnvoi#'] = 1;
$tags['#tagDeamID#'] = $plugin->getId();
} else {
$message .='|✅ '.$plugin->getName().' ('.$plugin->getId().')';
}
}
}
$message=str_replace("|","\n",$message);
$tags['#tagMessage#'] = $message;
$scenario->setTags($tags);
je là j’obtiens si tout va bien un message telegram de ce type là
Maintenant, si un deamon est NOK je lance ce morceau de code
$scenario->setLog('Passage en mode repair');
foreach(plugin::listPlugin(true) as $plugin){
if($plugin->getHasOwnDeamon() && config::byKey('deamonAutoMode', $plugin->getId(), 1) == 1) {
$deamon_info = $plugin->deamon_info();
if ($deamon_info['state'] != 'ok') {
// start deamon ...
$scenario->setLog('Tentative de démarrage du plugin ' . $_plugin_Id);
try{
//on Coupe le mode auto, on attend 45s par sécurité si une tentative de démarrage est déjà en cours
$_plugin->deamon_changeAutoMode(0);
sleep(45);
$_plugin->deamon_stop(true);
}
catch (Exception $e) {
$scenario->setLog('Erreur lors du stop plugin et de la désactivation du mode Auto: '.$e->getMessage());
}
//petite pause on sait jamais
sleep(5);
try{
//on relance et on remet le mode auto actif
$_plugin->deamon_start( $_forceRestart = true, $_auto = false);
$_plugin->deamon_changeAutoMode(1);
}
catch (Exception $e) {
$scenario->setLog('Erreur lors du restart plugin et de la réactivation du mode Auto: '.$e->getMessage());
}
$scenario->setLog('status daemon du plugin : ' . $_plugin->deamon_info()['state']);
}
}
}
Sachant qu’à la suite de ce code, je relance le tout (diag + tentative de repair if needed)
Et c’est là où je souhaiterai avoir votre retour, car la dernière fois, malgré tout, le deamon ne se relançait pas. Du coup mon scénario a bouclé non stop à tenter des réparations. (Je vais intégrer un compteur pour éviter ça à l’avenir)
Le truc c’est que manuellement, aucun soucis en passant par la page du plugin.
Est ce que j’utilise bien les instructions? est ce que je loupe une étape? ai-je une erreur de syntaxe?
D’avance merci de votre aide