Recherche d'information sur eqEnable dans un bloc code

Bonjour,
je suis à la recherche d’une personne qui aurais utiliser la fonction eqEnable dans ses scénarios avec un bloc code et une partie variable.

Problématique :
J’ai un scénario qui est actionné par mes capteurs de mouvement extérieur et qui va allumer la lumière si il fait nuit et m’envoyer une capture d’image faite par la caméra qui se trouve au même endroit. Ceci fonctionne très bien dans ma configuration.

//nom de la commande déclencheuse
$scenario->setLog('-- Préparation et envoi capture ---');
$scenario->setLog('-- Début ---');
$t_cmde=cmd::cmdToHumanReadable($scenario->getRealTrigger()); 
$scenario->setLog('Trigger    :'.$t_cmde);
//extraction des noms utiles
$objet=strtok($t_cmde,"#[]");
$scenario->setData("obj", $objet);
$scenario->setLog('Object     :'.$objet);
$equipmt=strtok("#[]");
$scenario->setLog('Equipement :'.$equipmt);
$cmde=strtok("#[]");
$scenario->setLog('Commande   :'.$cmde);

//allume la lumière si sombre et auto=1
$value = cmd::byString('#['.$objet.'][Detecteur][Luminosité]#')->execCmd();
if ($value>200) {
  $msg='Il fait jour. ('.$value.')';
} else {
  $msg='Il fait nuit. ('.$value.')';
  $value = cmd::byString('#[Maison][Resume][Auto]#')->execCmd();
  if ($value==1) {
    	cmd::byString('#['.$objet.'][Lumiere][On]#')->execCmd();
  }
}

//recuperation du mode Camera.
$value = cmd::byString('#[Video][Camera][Mode]#')->execCmd();
$scenario->setLog('Mode    :'.$value);
$piece = cmd::byString('#[Maison][Resume][Mouvement]#')->execCmd();
$piecenew = strtolower($objet);
if (($value="On") AND ($piece!=$piecenew)) {
	//envoi de la capture 
          $scenario->setLog('Envoi capture '.$objet);
          $Camera = '#[Video]['.$objet.'][Enregistrer]#';
	  $Dest = '#[Maison][alerte][Envoi fichier]#';
	  $CameraId = cmd::byString($Camera)->getId();
	  $DestId = cmd::byString($Dest)->getId();
	  $commande = cmd::byString($CameraId);
	  $commande->execCmd($options=array('background'=>'0','title'=>'1','message'=>$DestId), $cache=0);
}

$scenario->setLog($msg);
$scenario->setLog('-- Fin ---');

Maintenant je viens de rajouter une pièce qui à la même configuration que les autres mais sans la caméra, du coup je voulais tester la présence d’une caméra pour éviter une erreur dans l’exécution du script.
Cela devrait ressembler à cela je pense :

if (scenarioExpression::eqEnable('#[Video]['.$objet.']#')==1) {
// différente action
}

Mais il semblerais que cela ne passe pas car l’évaluation de l’expression va donner par exemple pour la Terrasse :

if (scenarioExpression::eqEnable('#[Video][Terrasse]#')==1) {
// différente action
}

Les simples cotes sont de trop et du coup il ne trouve pas l’équipement :unamused:

Est ce que quelqu’un d’entre vous utilise eqEnable avec des variables?

Mathieu

Hello
A priori il attend l’id de l’équipement
image

Du coup vu ton cas autant reprendre le code :

$eqLogic = eqLogic::byString('#[Video]['.$objet.']#');
if (is_object($eqLogic)) {
	//do what you want
}

@chris94440

Merci pour ton retour,

cela semble fonctionner tant que l’équipement existe, par contre si il n’existe pas cela génère une erreur php et stoppe le scénario :slightly_frowning_face:
Donc pas tout à fait concluant pour mon objectif.

Mathieu

Si tu utilises le code juste au-dessus tu n’auras pas ce problème :

if (is_object($eqLogic))

Cette condition vérifie justement que l’équipement existe.

Je viens de refaire le test avec un petit script rapide :

//Vérifie si l'équipement est actif avant de lancer la commande :
$objet = 'Terrasse';
$eqLogic = eqLogic::byString('#[Video]['.$objet.']#');
if (is_object($eqLogic)) {
 $sc->log('Trouve'); 
} else {
  $sc->log('Non Trouve');
}

voici le log quand l’objet existe :

------------------------------------
[2022-10-20 13:34:05][SCENARIO] -- Start : Scenario lance manuellement.
[2022-10-20 13:34:05][SCENARIO] - Exécution du sous-élément de type [action] : action
[2022-10-20 13:34:05][SCENARIO] Affectation de la variable piece => Terrasse = Terrasse
[2022-10-20 13:34:05][SCENARIO] - Exécution du sous-élément de type [action] : code
[2022-10-20 13:34:05][SCENARIO] Exécution d'un bloc code
[2022-10-20 13:34:05][SCENARIO]  - ----------------------------------------
[2022-10-20 13:34:05][SCENARIO]  - - Framework sc v0.993f
[2022-10-20 13:34:05][SCENARIO]  - - Vos scenarios en PHP
[2022-10-20 13:34:05][SCENARIO]  - - by dJuL
[2022-10-20 13:34:05][SCENARIO]  - ----------------------------------------
[2022-10-20 13:34:05][SCENARIO]  - INFO: DOCUMENTATION DISPONIBLE EN LOCAL EN CLIQUANT ICI
[2022-10-20 13:34:05][SCENARIO]  - - - 
[2022-10-20 13:34:05][SCENARIO]  - /* - Execution du Bloc code n°1 - DEBUG NATIF ACTIF (php >= v7) */
[2022-10-20 13:34:05][SCENARIO]  - - - 
[2022-10-20 13:34:05][SCENARIO]  - Trouve
[2022-10-20 13:34:05][SCENARIO]  - - - 
[2022-10-20 13:34:05][SCENARIO]  - /* - Fin du Bloc code n°1 - */
[2022-10-20 13:34:05][SCENARIO]  - - - 
[2022-10-20 13:34:05][SCENARIO] Durée d'exécution (depuis le 1er bloc code) : 21.49 millisecondes
[2022-10-20 13:34:05][SCENARIO] Fin correcte du scénario

Et voici le log quand l’objet n’existe pas :

------------------------------------
[2022-10-20 13:35:45][SCENARIO] -- Start : Scenario lance manuellement.
[2022-10-20 13:35:45][SCENARIO] - Exécution du sous-élément de type [action] : code
[2022-10-20 13:35:45][SCENARIO] Exécution d'un bloc code
[2022-10-20 13:35:45][SCENARIO]  - ----------------------------------------
[2022-10-20 13:35:45][SCENARIO]  - - Framework sc v0.993f
[2022-10-20 13:35:45][SCENARIO]  - - Vos scenarios en PHP
[2022-10-20 13:35:45][SCENARIO]  - - by dJuL
[2022-10-20 13:35:45][SCENARIO]  - ----------------------------------------
[2022-10-20 13:35:45][SCENARIO]  - INFO: DOCUMENTATION DISPONIBLE EN LOCAL EN CLIQUANT ICI
[2022-10-20 13:35:45][SCENARIO]  - - - 
[2022-10-20 13:35:45][SCENARIO]  - /* - Execution du Bloc code n°1 - DEBUG NATIF ACTIF (php >= v7) */
[2022-10-20 13:35:45][SCENARIO]  - - - 
[2022-10-20 13:35:45][SCENARIO]  - ERREUR PHP: L\'équipement n\'a pas pu être trouvé : #[Video][Terrasse1]# => #[Video][Terrasse1]# à la ligne 514 !
[2022-10-20 13:35:45][SCENARIO]  - - - 
[2022-10-20 13:35:45][SCENARIO]  - /* - Fin du Bloc code n°1 - */
[2022-10-20 13:35:45][SCENARIO]  - - - 
[2022-10-20 13:35:45][SCENARIO] Arrêt forcé du scénario pour cause d'erreur de syntaxe php ou de retour 'false'
[2022-10-20 13:35:45][SCENARIO] Action stop
[2022-10-20 13:35:45][SCENARIO] Durée d'exécution (depuis le 1er bloc code) : 17.25 millisecondes
[2022-10-20 13:35:45][SCENARIO] Fin correcte du scénario

OK tu utilises le framework sc, comme quoi c’est toujours mieux de préciser avec des logs ou des captures.

Dans ce cas ça devrait être bon comme ça :

$objet = 'Terrasse';
try {
  $eqLogic = eqLogic::byString('#[Video]['.$objet.']#');
  $sc->log('Trouve ' . $eqLogic->getIsEnable()); 
}
catch (Exception $e) {
  $sc->log($e->getMessage()); 
}
1 « J'aime »

Merci pour ton retour, et effectivement, oubli de ma part de l’avoir précisé, milles excuses.
:hugs:

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.