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

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]

Tu a du te mélanger les crayons qq part …

Au cours des vérifications pour éviter de te solliciter, j’ai constaté de nombreuses erreurs dues à mon ignorance:
en consultant la doc :

  1. foreach part à chaque itération d’un tableau pour donner une valeur
  2. explode part d’une valeur pour créer un tableau ( dont il faut definir le nombre d’élements.
    En mesurant la longueur des chaines de caractères extraites j’ai constaté que dans mon fichier de départ, il y avait un caractère caché devant chaque nom de variable. Je l’ai donc supprimé avec un offset, ce qui donne pour le code :
$req = 'curl "http://192.168.0.11:9090/get_params.cgi?user=XX&pwd=XX"';
$foscamwparam = shell_exec($req);
$foscamwparam =str_replace("var ","",$foscamwparam);
$wparam_array = explode(";",$foscamwparam);
$alarm_motion_armed=0;
$scenario->setLog($alarm_motion_armed);
foreach ($wparam_array as $ligne_param)
{
	$array_param = explode("=",$ligne_param,2);
        $array_param[0]=substr($array_param[0],1);
        $scenario->setLog($array_param[0]);
        $scenario->setLog($array_param[1]);
	if(array_param[0] == "alarm_motion_armed")
  	{
	$alarm_motion_armed=$array_param[1];
  	}
};
$scenario->setLog($alarm_motion_armed);

L’extrait suivant du log montre que c’est la fonction "if " qui ne fonctionne pas.
La variable « $alarm_motion_armed » initialisée au début, garde sa valeur à la fin, alors que les valeurs semblent bonnes juste avant le « if ».

[2021-12-16 16:03:06][SCENARIO] Start : Scenario lance manuellement.
[2021-12-16 16:03:06][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-12-16 16:03:07][SCENARIO] Evaluation de la condition : ["" != '1'  ] = Vrai
[2021-12-16 16:03:07][SCENARIO] Exécution du sous-élément de type [action] : then
[2021-12-16 16:03:07][SCENARIO] Exécution d'un bloc élément : 11
[2021-12-16 16:03:07][SCENARIO] Exécution du sous-élément de type [action] : code
[2021-12-16 16:03:07][SCENARIO] Exécution d'un bloc code
[2021-12-16 16:03:07][SCENARIO] # demandes log avant le if#
----------
# le premier log de $alarm-motion-armed demandé
[2021-12-16 16:03:07][SCENARIO] 0
# le log pertinents dans la boucle foreach  avec la valeur que l'on devrait affecter à $alarm-motion-armed #
[2021-12-16 16:03:07][SCENARIO] alarm_motion_armed
[2021-12-16 16:03:07][SCENARIO] 1
...
[2021-12-16 16:03:07][SCENARIO]
[2021-12-16 16:03:07][SCENARIO]
# le log de $alarm-motion-armed demandé à la fin
[2021-12-16 16:03:07][SCENARIO] 0
[2021-12-16 16:03:07][SCENARIO] Fin correcte du scénario

… et là, je ne trouve pas mon erreur…

en complement,
un else après le if, s’exécute toujours…

ne te derangez pas… faute de frappe trouvée

Bonsoir,
je pense être passé à travers les derniers ecueils de ce petit programme.
J’ai surtout beaucoup appris et vous remercie de votre disponibilité.

Cordialement
Jean-Michel

1 « J'aime »

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