Pourquoi ce code passe toujours par 'default'?

Bonjour,

Je n’arrive pas à comprendre pourquoi ce code passe toujours par ‹ default › !

Help !

$trigger = cmd::cmdToHumanReadable($scenario->getRealTrigger());


/* Les triggers du scenario */
/*
#[Bureau][Température meuble technique][Température]#
#[Chambre][Température chambre][Température]#
#[Salon][Température salon][Température]#
#[Cuisine][Température frigo][Température]#
#[Terrasse][Température terrasse][Température]#
#[Cuisine][Température congélateur][Température]#
*/

switch($trigger){
  case '#[Bureau][Température meuble technique][Température]#':
    	$value = "Meuble technique";
    	message::add('SMART', $value);
        break;
  case '#[Chambre][Température chambre][Température]#':
    	$value = "Chambre";
    	message::add('SMART', $value);
        break;
  case '#[Salon][Température salon][Température]#':
    	$value = "Salon";
    	message::add('SMART', $value);
        break;
  case '#[Cuisine][Température frigo][Température]#':
    	$value = "Frigo";
    	message::add('SMART', $value);
        break;
  case '#[Terrasse][Température terrasse][Température]#':
    	$value = "Terrasse";
    	message::add('SMART', $value);
        break;
  case '#[Salle de bain][Température salle de bain][Température]#':
    	$value = "Salle de bain";
    	message::add('SMART', $value);
        break;
   case '#[Cuisine][Température congélateur][Température]#':
    	$value = "Congélateur";
    	message::add('SMART', $value);
        break;
   default:
      	message::add('SMART', 'DEFAUT');
        }

As-tu essayer d’afficher la valeur remontée par $trigger ?

$scenario->setLog($trigger) ;

(je sais que certaines commandes ne renvoient pas les #

Tu peux aussi pour simplifier le switch, ne récupérer que la pièce et faire ton siwtch/case sur la pièce et pas sur la totalité de la commande

… Un petit post bien utile …

1 « J'aime »

Oui je l’avais affiché et c’est ok, mais je viens de réessayer et toujours ok :

[2022-01-26 22:41:35][SCENARIO] #[Bureau][Température meuble technique][Température]#

En effet, ça me convient, merci !

Mais j’aimerais bien comprendre pourquoi mon code ne fonctionne pas !!! ???

Salut,

Pas le choix il va falloir ajouter des logs dans ton code pour investiguer.

Déjà fait pendant plusieurs heures … et pas trouvé !!!

Il faut partager ces logs alors

bonsoir

en 2ième ligne ajoute

$scenario->setLog('trigger = '.$trigger);
puis va voir dans le log … hooooo magic

et ça (et les autres)

#[Bureau][Température meuble technique][Température]#

dans un bloc code ça marche pas

#[Bureau][Température meuble technique][Température]# : Pourquoi ça ne marche pas ?

ce genre de commande n’est pas substituer dans les bloc code
tu doit remplacer par
cmd::byId(1234);
ou 1234 est l’ID de ta commande

J’obtiens cela dans le log, je ne vois toujours pas le pb : trigger = #[Cuisine][Température frigo][Température]#

Bonsoir,
c’est les # qui pose soucis dans le switch, il faut remplacer les # dans le trigger et par consequence dans les « case » :

$trigger = cmd::cmdToHumanReadable($scenario->getRealTrigger());
$trigger = str_replace('#','',$trigger);

switch($trigger){
  case "[Bureau][Température meuble technique][Température]":
    $value = "Meuble technique";
    $scenario->setLog($value);
    break;
  default:
    $value = "Defaut";
    $scenario->setLog($value);
}
1 « J'aime »

En effet c’est la ou j’avais des doutes, je pense que l’expression entre ## est interprétée une fois dans le switch … mais pourquoi …

@ Phpvarious : en effet en retirant les # c’est ok !

Merci !

1 « J'aime »

En faite c’est le core qui remplace le « cmdToHumanReadable » dans le switch -> case
il remplace le #[Bureau][Température meuble technique][Température]# par #id# c’est pour sa que tu tombe toujours dans la case « defaut », 2ème moyen de contournement est de casser la chaine :

$trigger = cmd::cmdToHumanReadable($scenario->getRealTrigger());

switch($trigger){
  case '#'.'[Bureau][Température meuble technique][Température]#' :
    $value = "Meuble technique";
    $scenario->setLog($value);
    break;
  default:
    $value = "Defaut";
    $scenario->setLog("defaut");
}

Bonne soirée.

1 « J'aime »

Merci pour les explications !

Rusée la solution de casser la chaine !

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