Scanner un fichier log et envoyer alerte sur erreur spécifique

bonjour ,
j’ai ma vm zigbee2mqtt qui freeze depuis que j’ai la dernière version !
je l’utilise via le plugin zigbeelinker et ça fonctionne super bien sauf quand zigbee2mqtt freeze et à ce moment là, j’ai des erreurs dans le log "zigbee2mqtt " du type :

[2024-02-20 15:09:11][ERROR] : [Maison][Volet Cote Voisin] : L'équipement n'a pas répondu à la commande envoyée (zigbee2mqtt/Volet Cote Voisin/set {"position":100})

du coup , je voulais me faire un scénario qui tourne toutes les heures pour contrôler dans le log "zigbee2mqtt " si il trouve un texte définit et qu’il exécute un autre scénario !
j’ai fait ça en code mais ça ne marche pas, il n’a pas l’air de rentrer dans le log :cry:
voici mon code (pompé ici en grande partie ) :

$strings = array('a pas répondu à la commande envoyée'); 						// 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 = 'zigbee2mqtt' ;//$tags['#plugin#'] ; 										// recup du tag plugin

$msgs = message::byPlugin($tagPlugin) ;
foreach ($msgs as &$msg)   {       										// Pour chaque message remonté pour ce plugin
  $scenario->setLog("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
          	$scenario->setLog("chaine de caractère est trouvée");
          	$scenario = scenario::byId(101);
			$scenario->stop();
      	}
    }
}

Bonjour,

J’adhère pas à l’approche. Vouloir parser un log c’est toujours mal parti.

Zigbee2mqtt publie son état y compris un lwt online sur le topic « bridge »;
Quelle est la valeur en cas de plantage? A priori ca passe à 0; c’est ca qu’il faut monitorer.

1 « J'aime »

Merci pour ta réponse
Je vais regarder la valeur de bridge lors de la prochaine non réponse de mes équipements.
En fait, l.interface zigbe2mqtt fonctionne toujours mais plus aucun périphérique ne répond.
Il faut que je stoppe le service (ça prend plus d’une minute) et restant

du coup, si le lwt ne donne rien,tu peux peut-tre fair eun test sur un equipement (ou mieux, une commande) qui n’aurais pas été mise à jour dans les x dernieres minutes.
Faut juste bien selectionner une commande qui se met à jour frequenment

Norbert