Traitement Chaine de caractères retour d'infos d'état caméra

Trouvé l’erreur ( évidemment idiote)
sur la 3eme ligne de code, j’avais mi le nom du scenario et nom $scenario.
J’ai bien le fichier et je vais continuer
Merci

Super donc etape 2 nettoyage str_replace :+1:

nettoyage des « var » impeccable.
J’arrète pour ce soir.
Merci

1 « J'aime »

Etape 3 Explode à demain :wink:

Bonjour,
Peux tu me dire ce que tu appelles "l’outil </> " . j’ai juste rajouté ce signe devant les lignes de code sur ce message.

Ce matin , j’ai pu « spliter » les données dans tableau avec les « ; » puis chaque ligne avec « = » .
Je ne sais visiblement pas comment mettre les « array » dans le log.
Après le 1er explode, j’ai donc demandé le 1er élément . C’est bon et je suppose que la suite est OK.
Après la boucle « foreach » qui extrait chaque ligne du tableau précédent et y réalise un explode sur « = », J’ai moins de succès

$req = 'curl "IPcam:port#/get_params.cgi?user=#login#&pwd=#pass#"';
$foscamwparam = shell_exec($req);
$foscamwparam =str_replace("var ", "",$foscamwparam);
$wparam_array = explode(";",$foscamwparam);
foreach ($wparam_array as $ligne_param){$ligne_param = explode("=",$ligne_param);};
$scenario->setLog($foscamwparam);
$scenario->setLog($wparam_array[0]);
$scenario->setLog($ligne_param[1]);

log2

Merci, à +

tutoriel cliquez ici

of course…

foreach ($wparam_array as $ligne_param)
{
$ligne_param = explode("=",$ligne_param);
$scenario->setLog($foscamwparam);
$scenario->setLog($wparam_array[0]);
$scenario->setLog($ligne_param[1]);

};


Voici ce que j’ai fait :

$req = 'curl "http://192.168.0.11:9090/get_params.cgi?user=jmjonathan&pwd=whitecamjmj"';
$foscamwparam = shell_exec($req);
$foscamwparam =str_replace("var ", "",$foscamwparam);
$wparam_array = explode(";",$foscamwparam);
foreach ($wparam_array as $ligne_param)
{
$ligne_param = explode("=",$ligne_param);
$scenario->setLog($ligne_param[0]);
$scenario->setLog($ligne_param[1]);
}

J’ai en particulier supprimé les logs des variables intermédiaires . Il semble

  1. que le log n’est pas assez de ligne pour tout afficher. Cela semble verifié car j’ai tout en ne demandant, à chaque fois, que ligne_param[0]
  2. je perd les signes « & » de l’adresse d’envoi http de la camera :
var alarm_http_url='http://192.168.0.45/core/api/jeeApi.php?apikey=DyqEs4MbASeXNs7UQtix7ubvY7r9e6gw&type=camera&id=1103&value=1&next_url';

Faut-il d’abord remplacer les "&"par des « %26 » ?
Pouvez vous me donner des pistes pour la suite de l’utilisation de ces données :

  • supprimer celle qui ne sont pas utilisées ? ( nettoyage du fichier) ?
    -selectionner et utiliser celles qui sont pertinentes ?

dans la boucle foreach
il te faut mettre dans des variables celles qui t’interesse
ave un if

if($ligne_param[0] == "telparametre")
{
$telparametre = $ligne_param[1];
}

voici ce que j’ai fait, avec à la fin, 4 lignes pour essayer de recupérer les variables dans Jeedom. … mais je ne sais pas encore où.
Quen penses tu

$req = 'curl "http://#IPcamera:port#/get_params.cgi?user=j#login#&pwd=#mdp#"';
$foscamwparam = shell_exec($req);
$foscamwparam =str_replace("var ", "",$foscamwparam);
$wparam_array = explode(";",$foscamwparam);
foreach ($wparam_array as $ligne_param)
{
$ligne_param = explode("=",$ligne_param);
  if($ligne_param[0] == "alarm_motion_armed")
  {
    $alarm_motion_armed = $ligne_param[1]; 
  }
  if($ligne_param[0] == "alarm_motion_sensitivity")
  {
    $alarm_motion_sennsitivity = $ligne_param[1];
  }
  if($ligne_param[0] == "alarm_sounddetect_armed")
  {
    $alarm_sounddetect_armed = $ligne_param[1];
  }
  if($ligne_param[0] == "alarm_sounddetect_sensitivity")
  {
    $alarm_sounddetect_sensitivity = $ligne_param[1];
  }
}
$scenario->setData('Detection mouvt armée',$alarm_motion_armed);
$scenario->setData('Sensibilité detection mouvt',$alarm_motion_sensitivity);
$scenario->setData('Detection son armée',$alarm_sounddetect_armed);
$scenario->setData('Sensibilité detection son',$alarm_sounddetect_sensitivity);
  

Bon sans regarder en détail ça me semble correct

la suite c’est exporter les variables du bloc vers des tag utilisable dans la suite du scenario

puis dans la suite du scenario faire
des event commande tag vers un virtuel pour les afficher
ou les exploiter dans la suite du scenario :wink:

$tags=$scenario->getTags();
...
$tags['#alarm_motion_sensitivity#']=$alarm_motion_sennsitivity;

autant de ligne que de variables recup

$scenario->setTags($tags);

Bonjour,
Suivant ton conseil, j’ai avancé en terminant le code par

$tags['#Detection mouvt armée#']=$alarm_motion_armed;
$tags['#Sensibilité detection mouvt#']=$alarm_motion_sensitivity;
$tags['#Detection son armée#']=$alarm_sounddetect_armed;
$tags['#Sensibilité detection son#']=$alarm_sounddetect_sensitivity;
$scenario->setTags($tags);

J’ai ensuite créé la première action « event » dans le scénario pour affecter les valeurs aux commandes « info » crées dans les caméras :

Event / commande : #[Sécurité][camera_Jardin][mvmt_arm]# / valeur :#Detection mouvt armée#

Mais le log me donne :

------------------------------------
[2021-12-16 11:10:27][SCENARIO] Start : Scenario lance manuellement.
[2021-12-16 11:10:27][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-12-16 11:10:27][SCENARIO] Evaluation de la condition : ["" != '1'  ] = Vrai
[2021-12-16 11:10:27][SCENARIO] Exécution du sous-élément de type [action] : then
[2021-12-16 11:10:27][SCENARIO] Exécution d'un bloc élément : 11
[2021-12-16 11:10:27][SCENARIO] Exécution du sous-élément de type [action] : code
[2021-12-16 11:10:27][SCENARIO] Exécution d'un bloc code
[2021-12-16 11:10:27][SCENARIO] Changement de [Sécurité][camera_Jardin][mvmt_arm] à
[2021-12-16 11:10:27][SCENARIO] Fin correcte du scénario

Ce qui semble indiquer que l’action a été exécutée mais que dans la condition « if » de l’ « explode », la valeur n’a pas été transmise.

Je ne réussis pas à tester cela par :

if($ligne_param[0] == "alarm_motion_armed")
  {
   $alarm_motion_armed = $ligne_param[1]; 
  $scenario->setLog($ligne_param[1]);
  }

Ai-je oublié quelque chose ?
Merci

Salut que l’on soit bien d’accord

c’est après ton bloc

dans une commande info d’un virtuel que tu va utiliser ton tag

event tacommandeinfo tag(nomdutag)

C’est bien dans le scenario, après le bloc de code.
La commande « mvmt_arm »

 #[Sécurité][camera_Jardin][mvmt_arm]#

est une commande info créée sur cette camera, dans le plugin « camera », pas dans un virtuel.

commence par la faire dans un virtuel pour voir …

juste un virtuel avec une commande info vide

Meme resultat en créant le virtuel « essai » avec la commande vide « pourvoir » et en lui demendanr de prendre la valeur « #Detection mouvt armée# »

le log donne :

[2021-12-16 11:41:19][SCENARIO] Start : Scenario lance manuellement.
[2021-12-16 11:41:19][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-12-16 11:41:19][SCENARIO] Evaluation de la condition : ["" != '1'  ] = Vrai
[2021-12-16 11:41:19][SCENARIO] Exécution du sous-élément de type [action] : then
[2021-12-16 11:41:19][SCENARIO] Exécution d'un bloc élément : 11
[2021-12-16 11:41:19][SCENARIO] Exécution du sous-élément de type [action] : code
[2021-12-16 11:41:19][SCENARIO] Exécution d'un bloc code
[2021-12-16 11:41:19][SCENARIO] Changement de [Alertes][essai1][pourvoir] à
[2021-12-16 11:41:19][SCENARIO] Fin correcte du scénario

dans le bloc de code :

if($ligne_param[0] == "alarm_motion_armed")
  {
   $alarm_motion_armed = $ligne_param[1]; 
  }

je ne sais pas demander au log, la valeur de $ligne_param[1]
ni celle de $alarm_motion_armed

pas compris

Ma question était : comment demander un « $scenario->setLog » au sein de la boucle if.
Finalement je l’ai fait en fin de code`

$scenario->setLog($alarm_motion_armed);

et la réponse est vide :

[2021-12-16 11:59:16][SCENARIO]