Besoin aide scenario bloc code php

bonjour, je lance un appel aux codeurs php
actuellement dans un bloc code php j’obtiens une variable(V_Ouvrants_open)
qui contient :


[Salon][Lumiere]
[Cuisine][Lumiere]
[Couloir][Plug Osram]
[Salon][Sonoff Mini Lampe 1]
[Séjour][Sonoff Mini Lampe 2]

<br>[Salon][Lumiere]<br>[Cuisine][Lumiere]<br>[Couloir][Plug Osram]<br>[Salon][Sonoff Mini Lampe 1]<br>[Séjour][Sonoff Mini Lampe 2]

dont l’état de ces objets est [on]

ma question est simple (mais la réalisation compliquée pour moi…)
est-il possible via un bloc code php d’envoyer une commande action [off] à TOUS ces objets ???

si une âme charitable a un bout de code à essayer… je suis preneur.

merci d’avance et bon confinement.

Bonjour,

Ta variable t’envoi en string multiligne le contenu ?
Globalement le principe,

  • tu prends ta variable
  • tu la parse ligne a ligne (boucle)
  • tu ajoute [off] a chacune
  • tu utilises cmd::humanReadableToCmd pour récupérer l’objet cmd à partir de son nom
  • tu execute ta commande.

Si j’ai le temps dans la journée je verrais pour te faire un petit bout de code mais essaye c’est plus profitable pour toi

@mguyard
merci pour ton aide… en effet vu ton statut de dev ça à l’air faisable… pour toi :slight_smile:
mais là du coup c’est compliqué pour moi car je n’ai quelques notions en php, et pas assez
pour réaliser ce que tu me cite dans ton message :frowning:

donc je suis preneur pour un bout de code à tester… merci d’avance :+1:

edit: ma variable contient un " < b r > " entre chaque objet d’où l’affichage avec une retour à la ligne sur le forum…

<br>[Salon][Lumiere]<br>[Cuisine][Lumiere]<br>[Couloir][Plug Osram]<br>[Salon][Sonoff Mini Lampe 1]<br>[Séjour][Sonoff Mini Lampe 2]

Salut,

tu peux essayer ça

$test = "<br>[Salon][Miroir]<br>[Cuisine][Lumiere]<br>[Couloir][Plug Osram]<br>[Salon][Sonoff Mini Lampe 1]<br>[Séjour][Sonoff Mini Lampe 2]";
$scenario->setLog($test);
$array = explode("<br>", $test);
foreach($array as $value){
  	if(!$value){
      continue;
    }
  	$value = "#".$value."[Off]#";
  try{
    $commande = cmd::byString($value);
    $commande->execCmd();
  }catch(Exception $e){
  	$scenario->setLog($value." introuvable");
  }
}

@kaktusatomik
bonjour, je viens de tester ton code et je t’en remercie…

il fonctionne correctement mais j’obtiens un « bug » sur un module zigbee sur conbee2 de type osram smart plug

voici le log :

------------------------------------
[2020-04-09 11:10:03][SCENARIO] Start : Scenario lance manuellement.
[2020-04-09 11:10:03][SCENARIO] Exécution du sous-élément de type [action] : code
[2020-04-09 11:10:03][SCENARIO] Exécution d'un bloc code
[2020-04-09 11:10:03][SCENARIO] <br>[Cuisine][Lumiere]<br>[Couloir][Plug Osram]
[2020-04-09 11:10:03][SCENARIO] #[Couloir][Plug Osram][Off]# introuvable
[2020-04-09 11:10:03][SCENARIO] Exécution du sous-élément de type [action] : action
[2020-04-09 11:10:03][SCENARIO] Fin correcte du scénario
------------------------------------
[2020-04-09 11:12:01][SCENARIO] Start : Scenario lance manuellement.
[2020-04-09 11:12:01][SCENARIO] Exécution du sous-élément de type [action] : code
[2020-04-09 11:12:01][SCENARIO] Exécution d'un bloc code
[2020-04-09 11:12:01][SCENARIO] <br>[Cuisine][Lumiere]<br>[Séjour][Sonoff Mini Lampe 2]
[2020-04-09 11:12:01][SCENARIO] Exécution du sous-élément de type [action] : action
[2020-04-09 11:12:01][SCENARIO] Fin correcte du scénario

et voici la config du plug osram :

une idée pourquoi le smart plug osram n’accepte pas la commande [off] ?

merci encore pour votre aide :grinning:

Peux tu reformater ton message stp je n’ai pas ta capture

ok c’est fait…

Parceque le nom de la commande est « Off 03 » :wink:
Renomme la en off

hé… ben… tout fonctionne à merveille :+1:
merci encore…
sans vouloir abuser, tant que je t’ai sous la main
comment ferais tu pour transformer cette variable

<br>[Salon][Miroir]<br>[Cuisine][Lumiere]<br>[Couloir][Plug Osram]<br>[Salon][Sonoff Mini Lampe 1]<br>[Séjour][Sonoff Mini Lampe 2]

en :
miroir du salon, lumière de la cuisine, prise du couloir, lampe du salon, lampe du séjour

merci :slight_smile:

Il va falloir passer par une table de correspondances
Ici la variable $map

$test = "<br>[Salon][Miroir]<br>[Cuisine][Lumiere]<br>[Couloir][Plug Osram]<br>[Salon][Sonoff Mini Lampe 1]<br>[Séjour][Sonoff Mini Lampe 2]";
$map = array(
    "[Salon][Miroir]" => "Lumière du salon",
    "[Cuisine][Lumiere]" => "Lumière de la cuisine",
);
$scenario->setLog($test);
$array = explode("<br>", $test);
foreach($array as $value){
    if(array_key_exists($value, $map)){
      $scenario->setLog($map[$value]);
    }else{
      $scenario->setLog($value." introuvable");
    }
}

Penses à marquer le post en résolu si tout fonctionne.

ok donc il faut remplir le tableau $map

avec tous les éléments possibles, même si ils ne sont pas dans la variable ?

Oui je ne vois pas d’autre solution afin de déterminer si le nom est féminin ou masculin

ok je vais tester :slight_smile:

merci beaucoup :+1:

re…
je viens de tester ton code et j’y ai rajouté

      $scenario->setData("V_phrase_objets_on",$map[$value] ,false) ; //sauvegarde de la phrase dans une variable

afin de créer une variable pour utilisation via tts ou sms

$var = "<br>[Cuisine][Lumiere]<br>[Couloir][Plug Osram]<br>[Salon][Sonoff Mini Lampe 1]<br>[Séjour][Sonoff Mini Lampe 2]";
$scenario->setLog("open(s) : ".$var); //Log
$map = array(
    "[Salon][Lumiere]" => "Lumière du salon",
    "[Cuisine][Lumiere]" => "Lumière de la cuisine",
    "[Couloir][Plug Osram]" => "Prise du couloir",
);
//$scenario->setLog($var);
$array = explode("<br>", $var);
foreach($array as $value){
    if(array_key_exists($value, $map)){
      $scenario->setLog($map[$value]);
      $scenario->setData("V_phrase_objets_on",$map[$value] ,false) ; //sauvegarde de la phrase dans une variable     
    }else{
      $scenario->setLog($value." introuvable");
    }
}

mais la variable ne se remplie pas comme dans la log…
la variable V_phrase_objets_on contient : Prise du couloir

et dans le log on voit :

------------------------------------
[2020-04-09 12:21:30][SCENARIO] Start : Scenario lance manuellement.
[2020-04-09 12:21:30][SCENARIO] Exécution du sous-élément de type [action] : code
[2020-04-09 12:21:30][SCENARIO] Exécution d'un bloc code
[2020-04-09 12:21:30][SCENARIO] open(s) : <br>[Cuisine][Lumiere]<br>[Couloir][Plug Osram]<br>[Salon][Sonoff Mini Lampe 1]<br>[Séjour][Sonoff Mini Lampe 2]
[2020-04-09 12:21:30][SCENARIO]  introuvable
[2020-04-09 12:21:30][SCENARIO] Lumière de la cuisine
[2020-04-09 12:21:30][SCENARIO] Prise du couloir
[2020-04-09 12:21:30][SCENARIO] [Salon][Sonoff Mini Lampe 1] introuvable
[2020-04-09 12:21:30][SCENARIO] [Séjour][Sonoff Mini Lampe 2] introuvable
[2020-04-09 12:21:30][SCENARIO] Exécution du sous-élément de type [action] : action
[2020-04-09 12:21:30][SCENARIO] Fin correcte du scénario

il manque donc : Lumière de la cuisine

donc comment écrire la variable V_phrase_objets_on entière avec : Lumière de la cuisine Prise du couloir

Merci d’avance :slight_smile:

Il faut créer une variable globale

$var = "<br>[Cuisine][Lumiere]<br>[Couloir][Plug Osram]<br>[Salon][Sonoff Mini Lampe 1]<br>[Séjour][Sonoff Mini Lampe 2]";
$scenario->setLog("open(s) : ".$var); //Log
$map = array(
    "[Salon][Lumiere]" => "Lumière du salon",
    "[Cuisine][Lumiere]" => "Lumière de la cuisine",
    "[Couloir][Plug Osram]" => "Prise du couloir",
);
//$scenario->setLog($var);
$array = explode("<br>", $var);
$data = "";
foreach($array as $value){
    if(array_key_exists($value, $map)){
      $scenario->setLog($map[$value]);
$data = $data . " " . $map[$value];
     
    }else{
      $scenario->setLog($value." introuvable");
    }
}
 $scenario->setData("V_phrase_objets_on",$data,false) ; //sauvegarde de la phrase dans une variable     

super ça fonctionne nickel :+1: :slight_smile:
Merci encore pour ton aide précieuse.

Longue vie au forum !!!
Cordialement

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