Scénario pour relancer Deamon RFXcom

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à
image

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

Bonjour
Sinon avec le plugin jeelink vous avez déjà l’état de tout vos plugin voir plus.
Il faut le paramètrer sur son Jeedom local et régler le Jeedom Distant avec les information du jeedom local.


Dans ce cas vous pouvez lancer un scénario pour redémarrer vos plugin
Damien

Ah ben merci du conseil, c’est effectivement plus simple :smiley:
Je vais tenter avec ça voir si ça gère mieux le monitoring, merci du retour en tous les cas.

1 « J'aime »

le code pour relancer le demon par scenario déclenché par l’état du demon issue de contrôle maison :

$DaemonName = "rfxcom";
$DaemonName::deamon_stop();
	sleep(5);
	shell_exec('sudo chmod 777 /dev/tty*');
	sleep(2);
$DaemonName::deamon_start();
1 « J'aime »

Juste un petite question par rapport à ta ligne

shell_exec('sudo chmod 777 /dev/tty*');

ça fonctionne aussi sur une Jeedom Smart?

Merci d’avance

:slight_smile: Je n’en sais strictement rien, je suis sur un odroid N2.
Le code n’est pas de moi, je ne me rappel plus qui me l’avais passé, ce n’est qu’un changement de droit à priori.
Tu as essayé et ça ne marche pas ?

Disons que ça se lance, et ça ne plante pas.
et le deamon semble toujours actifs comme il faut après test.
après, comme lorsque ça plante ça semble être lié aux aspect USB, la ligne de commande semble viser juste.

Merci en tout cas, j’ai mis le code en place, on va voir comme ça se gère lors du prochain « vrai » plantage.

Salut…
Petite question as-tu régler la partie Heartbeat (min) avec un temps (par ex 10min) et cocher Redémarrer démon

Hello

Merci pour le retour, non je n’avais jamais utilisé ce réglage. J’ai toujours eu un doute sur comment bien le configurer et surtout la flemme de me pencher dessus :crazy_face:

1 « J'aime »