Comment contrôler si une variable existe

Bonjour,

J’ai une question toute bête.

Mon scénario utilise un bloque CODE.
Je récupère l’ID d’une station et j’aimerais mémorisé son état: 0,1,-1, pour normal, alarm, stop.

J’aimerais donc récupéré sa valauer

$scenario->getData('station-1')

Mais si cette variable n’existe pas, il génère une erreur. Alors j’ai essyé avec la condition if

if(isset($scenario->getData('station-1')))
   echo "existe";
else
   echo "existe pas alors crée là avec la valeur 0";

mais j’ai toujours une erreur.
Alors comment faite vous pour travailler avec une variable si elle n’existe pas encore?

Une autre question ne lien.

Une station peut etre en alarme (état 1) ou en mode normal (état 0)
Une alarm peut etre acquitée pendant 30mn (état 30)
Ou l’alarm peut être désactivtée pour 6h (état 360)

Est-ce une bonne pratique de mémoriser ces états dans un variable

$scenario->getData('station-1')

Ou utiliseriez-vous un virtuel?
L’inconvénient d’un virtuel, c’est qu’il faut le créer et j’aimerais éviter au maximum l’intervention humaine

Merci

Bonjour,

Peut-être faudrait-il envisager de ne pas utiliser de bloc code?
Il n’y aucun avantage en terme de performance ou de maintenance à le faire.

A mon avis, un isset ne fonctionnera pas puisque getdata renvoi un valeur string (toujours, quoi qu’il arrive, par défaut une chaine vide) mais n’est pas une variable ou autre structure de donnée php.

D’autre part, il n’y a pas besoin de créer une variable pour rien, le cas échéant utiliser plutôt une valeur par défaut, 3eme argument de la méthode, voir doc: https://jeedom.github.io/documentation/phpdoc/classes/scenario.html#method_getData

sinon dans votre code il y a une autre erreur:esle est incorrecte, c’est else bien entendu.

A mon avis non.
Je banni l’utilisation des variables (globales) autant que possible.

Bonjour,
Pourquoi ne crées-tu pas la variable manuellement une fois pour toute ou ne l’initialises-tu pas tous les jours à 00h00 par exemple ?

Après tu peux créer un virtuel à la volée avec les cmds que tu veux … donc aucune intervention humaine … :slight_smile:

$virtualName="vBattery".str_replace(' ', '_', $piece);
  	
  	$virtual = eqLogic::byLogicalId($virtualName, 'virtual');
    if (!is_object($virtual)) {
      $scenario->setLog("	  	        - Logic Equipment not exist $virtualName==> need to create with parent id $parentID ");
      $virtual = new virtual();
      $virtual->setName($virtualName);
      $virtual->setLogicalId($virtualName);
      $virtual->setEqType_name('virtual');
      $virtual->setObject_id($parentID);
      $virtual->setIsEnable(1);
      $virtual->setIsVisible(1);
      $virtual->save();
    } else {
      $scenario->setLog("	  	        - Logic Equipment  exist $virtualName==> no need to create it");
    }

Et pour créer des commandes

$cmdName=str_replace(array(' ','.'), '_', $equipment["equipement"]);
  	$scenario->setLog("	  	        - creation de la commande :$cmdName");
  
  	$virtuelCmd=$virtual->getCmd(null, $cmdName);
    if (!is_object($virtuelCmd)) {
        $scenario->setLog("	  	          - cmd do not exist ==> need to create if");
        $virtuelCmd = new virtualCmd();
        $virtuelCmd->setName($cmdName);
        $virtuelCmd->setEqLogic_id($virtualId);
        $virtuelCmd->setLogicalId($cmdName);
        $virtuelCmd->setType('info');
        $virtuelCmd->setSubType('numeric');
      	$virtuelCmd->setTemplate('dashboard', 'customtemp::wBatteryJson');
	    $virtuelCmd->setIsHistorized(1);
    	$virtuelCmd->setUnite('%');
    	$virtuelCmd->setConfiguration("maxValue", "100");
    	$virtuelCmd->setConfiguration("minValue", "0");
    	$virtuelCmd->save();
    } else {
      	$scenario->setLog("	  	          - cmd exist ==> no need to create if");
    }
	//$value=json_encode($equipment);
  	$value=$equipment["batteryValue"];
  	$virtuelCmd->setConfiguration('batteryType',$equipment["typePile"]);
  	$virtuelCmd->setConfiguration('batteryCollectedDate',$equipment["batteryCollectedDate"]);
    $virtuelCmd->save();
    $virtual->checkAndUpdateCmd($cmdName, $value);

Comme ça pas d’intervention humaine et pas de variables globales … :slight_smile:
@chris94440