Comment connaitre les états des plugins actifs?

je comprends pas cette notion de demon secondaire…

Le plugin eWeJee as un second démon pour la gestion des perifs en LAN.

Exactement, j’irai plus loin.
L’activation du plugin tourne sous un demon (une tache)
Ici il y a en plus le Wan et le LAN que j’ai appelé « secondaire » faute de mieux.

C’est le cas de Zigbee ou d’autres plugins ayant des services de communication

Me trompe-je?

Méa culpa, j’ai pas encore la culture (lu assez) Jeedom certainement…

Ben non pour moi le plugin est activé ou pas.
En général on l’active après installation.

Ensuite certains plugins ont un démon, zwave etc…

Et ce n’est pas un démon secondaire. C’est le démon du plugin point barre.

Oui effectivement Zigbee a la possibilité d’activer un second démon, je vais voir pour le faire fonctionner de la même façon.

EU REX KA :slight_smile:

Je suis parti de celui-ci : [TUTO] Une autre stratégie pour la surveillance des démons - Plugins / Monitoring - Communauté Jeedom
Je préfère le code que l’exécution de bash/shell, ce qui m’a emmené ici : [TUTO] Recevoir une notification Telegram regroupant les états des démons - Utilisation du core de Jeedom / Scénarios - Communauté Jeedom
J’ai repris ceci juste pour les icônes:

J’ai surtout recup ceci : [TUTO] Recevoir une notification Telegram regroupant les états des démons - #40 par Thibaut_T

Soit un scénario qui se lance tout les jours à 7h :

Ceci:

// On efface la variable message
$message='Dependances : ';
// on ajoute une ligne dans le log
$scenario->setLog('Début Monitoring des Dependance');

$tags = $scenario->getTags();
$valeurOK=$tags['#IconOK#'];
$valeurNOK=$tags['#IconKO#'];

// pour chaque plugin activé de votre jeedom
foreach (plugin::listPlugin(true) as $plugin)
	{
  	if ($plugin->getHasDependency())
    	{
    	$dependency_info = $plugin->dependancy_info();
    	if ($dependency_info['state'] == 'ok')
        	{
      		$valEtat = $valeurOK.'  ';
    		}
      	elseif ($dependency_info['state'] == 'in_progress')
        	{
      		$valEtat = 'In prog';
    		}
      	else
        	{
      		$valEtat = $valeurNOK.'  ';
    		}
   		$message .='|'.$valEtat.$plugin->getName().' ('.$plugin->getId().')';
  		}
	}

$message=str_replace("|","\n",$message);
// on selectionne la commande telegram correspondante au destinataire du message
$cmd=cmd::byString('#[Telegram][Telegram][Eric - xxxx]#');
// on envoie le contenu de la variable message via telegram
$cmd->execCmd($options=array('title'=>'Jeedom', 'message'=> "$message"), $cache=0);
// on log la fin de la verification des démons
$scenario->setLog('Fin monitoring des Dependances');

et ceci

 // On efface la variable message
$message='Deamon :';
// on ajoute une ligne dans le log
$scenario->setLog('Début Monitoring des Demons');

$tags = $scenario->getTags();
$valeurOK=$tags['#IconOK#'];
$valeurNOK=$tags['#IconKO#'];

$valEtat='toto';
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')
        	{
      		$valEtat = $valeurOK;
    		}
      	else
        	{
      		$valEtat = $valeurNOK;
    		}
 		$message .='|'.$valEtat.$plugin->getName().' ('.$plugin->getId().')';
		}
	}

$message=str_replace("|","\n",$message);
// on selectionne la commande telegram correspondante au destinataire du message
$cmd=cmd::byString('#[Telegram][Telegram][Eric - xxx]#');
// on envoie le contenu de la variable message via telegram
$cmd->execCmd($options=array('title'=>'Jeedom', 'message'=> "$message"), $cache=0);

// on log la fin de la verification des démons
$scenario->setLog('Fin monitoring des démons');

Ce qui me donne un Daemon NOK pour le plugin zigbee si je stop le daemon ainsi:

Résultat :
image

@Foulek57 pour eWeJee l’arrêt du premier daemon CLOUD est détecté mais pas le second (LAN) :

as-tu une fonction pour recup le second, comparable à celle-ci ?

$plugin->getHasOwnDeamon()

@Mips STP :
PHP Core : Y a-t-il un endroit (Doc, .h) où recup la liste et signification des methods (functions) ?
La doc Jeedom pour les dev me parait très light à priori…j’ai du raté qq chose ?

A vrai dire c’est pas cette fonction, celle ci vérifie que le plugin as un démon.

Celle qui vérifie l’état du démon est $plugin->deamon_info()

La fonction pour le LAN est deamon_LAN_info()

Attention c’est spécifique à eWeJee, cette fonction n’existe pas dans les autres plugins, donc faut mettre une condition pour détecter le plugin eWeJee sinon => error :wink:

Oui oui, c’est une Doc pour les dev elle permet de retrouver les fonctions dans le core, ensuite c’est au dev de comprendre le code :grin:
Pas facile au début :wink:
Heureusement la Doc PHP est très complète !

Ok merci du retour.

// Fonction spécifique de @Foulek57
                if ($plugin->deamon_LAN_info() != 'ok')
                	{
	      			$valEtat = $valeurNOK;
                	}

Faut-il caster l’objet plugin ou la fonction n’est pas celle-ci ?
Erreur log:

La suite demain dodo maintenant :wink:

Le PHP semble moi souple que le c++ sous qq aspects. Par exemple les {} du 'if 'semblent obligatoires !
Pour les « string » c’est beaucoup plus souple (pas ceux de ta copine…) et je parle pas du C à ce niveau :slight_smile:

Raté,

Je t’ai prévenu :grin:

Utilise la fonction $plugin->getName()
Si == ‹ ewejee › alors …

Bon je suis sur mon tél donc pas moyen de tester

C’est le cas, je n’avais pas mis tout le code :slight_smile:

if ($deamon_info['state'] == 'ok')
        	{
      		$valEtat = $valeurOK;
			// Cas spécial eWeJee avec 2 deamon
          	if ($plugin->getName()=='eWeJee')
    	    	{
              	// Fonction spécifique de @Foulek57
                if ($plugin->deamon_LAN_info() != 'ok')
                	{
	      			$valEtat = $valeurNOK;
                	}
            	}
    		}

Elle est bien dans ton code.

public static function cron()
  {
    // Check the LAN deamon
    $deamon_LAN_info = ewejee::deamon_LAN_info();
    $deamon_MDNS_info = ewejee::deamon_MDNS_info();
    $deamon_POW_info = ewejee::deamon_POW_info();
    if ($deamon_LAN_info['state'] == 'ok') {
      if ($deamon_MDNS_info['state'] != 'ok') {
        ewejee::deamon_MDNS_start();

reste à caster en ewejee j’imagine. J’ai fait plusieurs tentatives sans success. Je suis bloqué !! tant pis pour ce soir…

@Foulek57
Ton plugin est payant donc pas de git… OK
Mais le code est visible sur le RPI ? Y a-t-il des protections?

Pourquoi ne pas renvoyer deux lignes dans l’array de getdaemon_info (la fonction du core, plus certain du nom); cela ne permet pas d’afficher l’info dans le cadre géré par le core ?

Hello,

Fais un log avec la fonction getName voir s’il sort en ewejee ou eWeJee.

Ou tu peux passer la fonction dans la fonction PHP strtolower

Le code est visible dans plugins/ewejee/

Mais sur la prochaine bêta je vais l’associer au demon_info()

La doc est là :
https://doc.jeedom.com/dev/phpdoc/4.1/
Mais sans explications.

C’est toujours un débat la documentation…
Faut documenter mais quand on change le code on oublie la doc et du coup la doc est fausse ce qui est pire que pas de doc à mon avis.

La seule documentation qui ne ment pas c’est le code directement :wink:

Pas besoin de cast en Php, au runtime si la fonction existe elle sera appelée sinon il y aura une erreur.
C’est pas dingue mais c’est le problème des languages pas compilé.

Hi,
Le nom est bon sinon je ne rentrerai pas dans le test. J’ai vérifié avec un log en double ceinture…

OK merci… de la lecture.

C’est pas totallement faux :slight_smile:

Je m’en doutais. Le debug au log quelle poisse c’est très long. Une précompil/compil élimine un tas d’erreur. Il faudrait lié VS Code qui fait une partie du boulot mais je vois pas comment?

Voici mon dernier code :

$valEtat='';
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')
        	{
      		$valEtat = $valeurOK;
			// Cas spécial eWeJee avec 2 deamon
          	if ($plugin->getName()=='eWeJee')
    	    	{
                $scenario->setLog($plugin->getName());
                $scenario->setLog($plugin->deamon_LAN_info());
              	// Fonction spécifique de @Foulek57
                if ($plugin->deamon_LAN_info() != 'ok')
                	{
	      			$valEtat = $valeurNOK;
                	}
            	}
    		}
      	else
        	{
      		$valEtat = $valeurNOK;
    		}
        	$message .='|'.$valEtat.$plugin->getName().' ('.$plugin->getId().')';
    	}
	}

Voici le log et je ne comprends pas pourquoi il pointe sur AlexaAPI qui est le 1er plugin du tableau
plugin::listPlugin() :

[2021-01-26 09:25:29][SCENARIO] Début Monitoring des Demons
[2021-01-26 09:25:29][SCENARIO] eWeJee
[2021-01-26 09:25:29][SCENARIO] Deamon :|🆗Alexa - API (alexaapi)|🆗Caméra (camera)Call to undefined method plugin::deamon_LAN_info()