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

Bonjour,
J’essaie d’écrire pour un widget, pour afficher et régler la sensibilité de detection des mouvements par une caméra.

http://IPcamera:port/get_params.cgi fonctionne bien en direct mais fournit une TRES longue chaine de caractères au sein de laquelle se trouve ce que je cherche : « alarm_motion_sensitivity=9 »;
J’ai créé cette même commande « info » avec le sous-type « autre » sur le plugin de cette caméra .Mais je suis incapable d’en connaitre le retour.

Un grand merci à qui pourra m’aider à récupérer dans jeedom la valeur de cette sensibilité.
Il m’aura aussi certainement fait progresser

Bonjour,
il te faut passer ta requette par un bloc code de scenario

le message de réponse semble être en json

tu devra donc utiliser une instruction php json_decode
qui transformera la réponse en un tableau (array)
pour en fin accéder a l’index de l’élément qui t’intéresse.

ou moins pratique écrire un script json …

des exemples dans ce sujet

je vais regarder ce qu’est json…
en attendant voici un extrait des 198 que je reçois à chaque requete envoyée en http par la camera ( voir dernière ligne). Json ne devait pas exister à l’époque où cette vielle Foscam est sortie.
Merci,

var alarm_motion_armed=1;
var alarm_motion_sensitivity=9;
var alarm_motion_compensation=1;
var alarm_input_armed=1;
var alarm_ioin_level=1;
var alarm_sounddetect_armed=0;
var alarm_sounddetect_sensitivity=0;
var alarm_iolinkage=0;
var alarm_preset=0;
var alarm_ioout_level=1;
var alarm_mail=1;
var alarm_upload_interval=0;
var alarm_http=1;
var alarm_msn=0;
var alarm_http_url=‹ http://#IPJEEDOM/core/api/jeeApi.php?apikey=DyqEs4MbASeXNs7UQtix7ubvY7r9e6gw&type=camera&id=1101&value=1&next_url ›;

peut-être pas du json mais des données en rafales :wink:

d’où l’intérêt de savoir extraire une ligne et surtout la valeur numérique associée.
Le coté rassurant est qu’il n’y a aucun problème pour renvoyer ensuite des ordres à la caméra :rofl:

bon il va te falloir mettre un peut les main dans le code:)
1 on récupere tout dans une variable voir la ligne avec curl dans le lien donné.
vue la tête des données
on commence par supprimer tout ce qui est var alarm_ par rien avec un (str_replace en php)
ensuite on split ( explode en php) les données dans un tableau en se servant des ;
on balaye le tableau avec un foreach sur chaque éléments
pour chaque ligne on slpit en utilisant le = cette fois-ci
pour obtenir le nom et la valeur :wink:

voilà tu téléphone quand tu est perdu :rofl:

Bonsoir,
Je suppose que tu veux dire que je supprime tout sauf ce qui n’est PAS var alarm_ par.
Je vais m’y mettre doucement en commençant par la doc du plugin Script et en allant voir ton lien… et les docs php pour débutant (à moins que tu connaisses un tuto).
…tu peux donc espérer que je ne t’ennuie pas pour les fêtes.

Ben on vire tout ce qui est commun et ne sert a rien

var alarm_motion_armed=1;
var alarm_motion_sensitivity=9;
var alarm_motion_compensation=1;
var alarm_input_armed=1;
...

deviens

motion_armed=1;
motion_sensitivity=9;
motion_compensation=1;
input_armed=1;
...

a l’aide de str_replace

(reste dans un bloc code de scenario ce sera plus simple)

le pas à pas c’est mieux pour apprendre

si je te met la solution toute cuite tu n’apprendra rien :slight_smile:

on est bien d’accord

allez 1er étape depuis ton scenario
récupérer dans une variable php ce que renvoi
http://IPcamera:port/get_params.cgi

petite astuce pour mettre dans le log du scenario et contrôler ce que tu a récupérer dans la variable
$scenario->setLog($tavariable);

Tentatives infructueuses pour l’instant avec ce scenario nommé : Test_params :
Déclenché par la commande Get_params sur la caméra ( laissée vide)

SI #sécurité][camera][Get_params]#
ALORS CODE
$Test_params ->setLog($foscamwparam);
$req = 'curl "http://192.168.0.11:9090/get_params.cgi"';
$foscamwparam = shell_exec($req);

Le log dit :
Log

@manerbras j’ai corrigé le;
prend l’habitude de mettre tes morceaux de code avec l’outil </>
quant tu tape
http://192.168.0.11:9090/get_params.cgi
dans un navigateur ça répond quoi ?

edit et le setlog il faut le faire après

$req = 'curl "http://192.168.0.11:9090/get_params.cgi"';
$foscamwparam = shell_exec($req);
$scenario->setLog($foscamwparam);

Edit 2 : ta cam n’a pas de login ni mot de passe ?

si c’est le cas …

http://login:password@192.168.0.11:9090/get_params.cgi

Bonsoir,
j’ai effectivement mis les login & mots de passe , mais sous une forme qui me semble equivalente et qui fonctionne sur le navigateur :
« http://192.168.0.11:9090/get_params.cgi?#user#&#pwd# »

J’ai aussi changé la condition de départ pour être certain qu’elle soit vérifiée :
#[Sécurité][camera_Jardin][Get_params]# != ‹ 1 ›

Voici ce que j’obtiens dans le log

[2021-12-14 22:14:37][SCENARIO] Start : Scenario lance manuellement.
[2021-12-14 22:14:37][SCENARIO] Exécution du sous-élément de type [condition] : if
[2021-12-14 22:14:37][SCENARIO] Evaluation de la condition : ["" != ‹ 1 › ] = Vrai
[2021-12-14 22:14:37][SCENARIO] Exécution du sous-élément de type [action] : then
[2021-12-14 22:14:37][SCENARIO] Exécution d’un bloc élément : 11
[2021-12-14 22:14:37][SCENARIO] Exécution du sous-élément de type [action] : code
[2021-12-14 22:14:37][SCENARIO] Exécution d’un bloc code
[2021-12-14 22:14:37][SCENARIO] Call to a member function setLog() on null
[2021-12-14 22:14:37][SCENARIO] Fin correcte du scénario

Je vais bien entendu essayer la forme de login que tu proposes

PS: la forme de login que tu proposes ne semble pas fonctionner sur le navigateur

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