Scénario déclenche reboot sur erreur Log spécifique

Bonjour,

J’ai de temps en temps les ports usb sur mon Pi4 qui freeze (cela le fait rarement heureusement), mais ce qui m’embête surtout c’est que cela bloque le fonctionnement de Blea avec ma clé Bluetooth et mes périphériques zigbee avec ma conbee2.

La solution est lorsque je vois le problème je reboot et ça refonctionne. Le problème est que je vois souvent cela assez tard si ça arrive la nuit par exemple…

Je souhaiterai réaliser un scénario qui se declanche sur une erreur log spécifique sur Blea :
Can’t init device hci0: Connection timed out (110)
Et que cela me lance un reboot de mon raspberry avec une petite notification.

Pourriez vous m’indiquer comment réaliser le declanchement du scénario sur cette log spécifique (et juste 1 fois max sur la journée pour pas que ca tourne en boucle si vraiment j’aurai un gros soucis).

Merci

bonjour,
relancer le demon n’est t’il pas suffisant ?

	// id du plugin
	$_plugin_Id = 'blea';

	// charger le plugin 
	$_plugin = plugin::byId($_plugin_Id);
	if (is_object($_plugin)) {
	    	// start deamon ...
		$scenario->setLog('démarrage du plugin ------------------------------------------------->>> ' . $_plugin_Id);    
    		$_plugin->deamon_start(true);    
		
    }

Bonjour, non cela n’est pas suffisant les ports usb ne répondent plus et le pi4 ne voit plus les périphériques il faut vraiment un reboot, Blea par exemple essai de relancer et j’ai une erreur qu’il a essayé de relancer le daemon 3 fois.

pas de problème d’alimentation
utilise tu un hub alimenté ?

C’est possible et encore pas sur cela le fait rarement, je souhaiterai vraiment mettre un reboot auto sur erreur de cette log si c’est possible…

Je comprend bien ton désir
il serait quand même mieux de soigner la cause
et ont sais bien que l’alimentation des usb est critique.

1 « J'aime »

Après cela coupe ma conbee2 et la Bluetooth Sena, heureusement pas mon disque nvme avec mon système…

Après cela est peut être plus simple de declancher un scénario sur la notification de relance de daemon échoué de Blea que dans les logs pur ?

Le firmware de ta conbee est a jour. Il y avait un pb similaires sur les vieux firmware avec cette clef

Pas la dernière version j’ai celle qui a un an 0x26680700 (je suis avec zigbee2mqtt) sinon je perds l’affichage des liens avec lqi sous la vue schéma de zigbee2mqtt (problème connu malheureusement)

La correction est sur un firmware après.

Bonjour,
Pour tenter de répondre à la question, non tu ne pourra pas déclencher le scénario sur une erreur de log spécifique, ce n’est pas un déclencheur disponible… Le mieux que tu pourrais faire à la limite, c’est de programmer ton scénario (genre, toute les 5 min) et scanner ton log pour vérifier s’il y a cette erreur.

Mais attention, dans ce cas il faut ensuite vider le log, sinon il va redémarrer toutes les 5 minutes évidemment!

Peut être mieux de redémarrer sur la base de la notification d’échec du démon - mais, la aussi, supprimer la notification bien sur :slight_smile:

Bonjour,

Merci pour ta réponse oui je vois le mécanisme que tu proposes mais perso je ne serai pas faire cela en php.

Si ca t’interesse, ci dessous un scenario qui en fonciton des notififations envoyée par un plugin, supprime le message des logs (sur la base d’une chaine de caractère contenu dans le message). Tout pourra facilement l’adapter, je pense pour lancer une commande de reboot de ton RPI …

le scenario :

le contenu du bloc code

$strings = array('connexion SSH KO'); 						// Chaine de caractère à rechercher pour supprimer la ligne <chaine de caractère>, separer les differentes chaines de caractère par une ,

$tags = $scenario->getTags();  											// Recup des tags passés en paramètre de lancement du scenario
$tagPlugin = $tags['#plugin#'] ; 										// recup du tag plugin

$msgs = message::byPlugin($tagPlugin) ;
foreach ($msgs as &$msg)   {       										// Pour chaque message remonté pour ce plugin
	foreach ( $strings as $string ) {                					// pour chaque chaine de caractère à filtrer
		if ( stristr( $msg->getMessage() , $string ) ) {
			message::removeAll($tagPlugin, $msg->getLogicalId());		// si une chaine de caractère est trouvée, je supprime le message
      	}
    }
}

il convient juste de mettre dans le si le plugin qui envoi le message (blea dans ton cas me semble-t’il !)
et dans $strings = array(‹ connexion SSH KO ›) la chaine de caractère que tu souhaite utiliser pour declencher le reboot.
et finalement, remplacer le message::removeAll($tagPlugin, $msg->getLogicalId()); par ta commande de reboot du RPI

Dans la config des logs logs, indiquer que tu lances ce scenario à chaque reception d’un message :

Norbert

3 « J'aime »

Bonjour,

Je vais regarder cela merci en tout cas.

Mais quel déclencheur tu indiques sur le scénario ? Et quel est la commande de reboot pour jeedom ?Merci

Désolé, j’avais oublié un bout !!! j’ai corrigé dans mon post plus haut …
PAs de declencheur, il est lancé à chaque message

Ah oui ok merci je comprends mieux, par contre je dois passer par les messages envoyés dans les notifications mais pas les logs. Du coup dans la notification mon message est que blea n’a pas réussit à relancer le daemon.

« Attention je pense qu’il y a un soucis avec le démon que j’ai relancé plus de 3 fois consécutivement »

C’est ça qu’il faut mettre dans le Bloc Code ?

$strings = array('Attention je pense qu'il y a un soucis avec le démon que j'ai relancé plus de 3 fois consécutivement'); 					// Chaine de caractère à rechercher pour supprimer la ligne <chaine de caractère>, separer les differentes chaines de caractère par une ,

$tags = $scenario->getTags();  											// Recup des tags passés en paramètre de lancement du scenario
$tagPlugin = $tags['#plugin#'] ; 										// recup du tag plugin

$msgs = message::byPlugin($tagPlugin) ;
foreach ($msgs as &$msg)   {       										// Pour chaque message remonté pour ce plugin
	foreach ( $strings as $string ) {                					// pour chaque chaine de caractère à filtrer
		if ( stristr( $msg->getMessage() , $string ) ) {
			jeedom_reboot;												// Reboot de Jeedom
      	}
    }
}

Mais bon erreur : Sous-élément inconnu. Vérifiez l’ID : Array

met juste un bout de la phrase, evite les ’ ou " dans le bout en questin !

J’ai mis un bout de phrase j’ai toujours le message d’erreur…

Bonjour @kwet ,

Tu peux t’inspirer de mon code :

En même temps il y a une notion de compteur d’occurrences qui peut être pratique.

Après pour le problème de base je n’ai pas de Pi4 mais peut-être de voir une une màj du firmware :

Au niveau des prises pour ne pas avoir de problème d’alimentation avec mon Pi3 j’ai ce hub usb https://www.amazon.fr/gp/product/B00OQ0CYFE/ et pour son alim externe c’est branché sur la prise usb d’alim sur l’onduleur (un Eaton 850 avec 2 prises d’alim usb bien pratique) mais en dehors du fait qu’il vaut mieux éviter de brancher le SSD dessus je n’ai pas eu de problème.

@+

il faut utiliser les double-quote si tu a des simples quote dans ta chaine ( et vice-versa)