Problème d'envoi d'une commande HTTP

Quand j’envoie la commande dans l’URL du navigateur, la réponse est : OK
Je pense que même si la réponse était mal interprétée côté Jeedom, l’action serait faite par la cible.
Je suis entrain de tester le script php mais je galère avec des erreurs de syntaxe, vu que je ne connais le php.

<?php 
$request_http = new com_http('http://192.168.0.16/cgi-bin/accessControl.cgi?action=openDoor&channel=1&UserID=101&Type=Remote',"MonLogin","MonPassword");
$request_http->setCURLOPT_HTTPAUTH(CURLAUTH_DIGEST);
?>

jc@debian:/var/www/html/plugins/script/data$ php -f portier.php 
PHP Fatal error:  Uncaught Error: Class 'com_http' not found in /var/www/html/plugins/script/data/portier.php:2

En lisant le code php du plugin, après « La réponse ne contient pas OK » il y a du texte que vous ne donnez pas.
Pouvez-vous SVP fournir une capture d’écran du message complet?

NB: Ce que vous essayez de faire en php avec new com_http… , c’est ce que fait le plugin.


et dans la classe com_http:
image

@ipty : j’ai suivi la suggestion proposée par Olivier :face_with_head_bandage:

Capture depuis le navigateur

Depuis Jeedom
image

Le Log du plugin

[2021-02-14 17:46:05][ERROR] : Erreur exécution de la commande [...*nom complet de la commande*...] : La réponse ne contient pas "OK" : ""

Comme vous faites exécuter le php en dehors de Jeedom avec php -f, il faut ajouter au début du php :
require_once __DIR__ . '/../../../core/php/core.inc.php';
pour que la classe com_http soit définie.

Il manque la partie exécution de la commande.

NB: @olive ne s’appelle pas Olivier

1 « J'aime »

La réponse est donc vide.
Vous avez une doc de l’appareil que vous essayez de piloter ?

Pour Olive, désolé, j’ai lu le nom trop vite :frowning:
Pour le script php en ligne de commande , j’ai plus l’erreur gra ce à l’include. Mais j’ai aucun retour en ligne de commande.
L’appareil est un portier vidéo de chez Dahua. L’API est dispo
Voici la page relative à la fonction :

Il n’y a pas de login/mot de passe. Juste un UserID. Il doit être passé sur la ligne de commande avec le channel et le Type comme vous l’avez fait dans le navigateur.

C’est quelle réf votre portier?
Vous avez un lien vers la doc complète?

Si je ne passe pas le login et le mot de passe dans l’url du navigateur, je me fais prompter pour les entrer.
Le modèle c’est un VTO3211D
Pour la doc de l’API, elle fait 8 Mo en pdf.
Voici un lien, il faudra un compte je pense pour la récupérer, sinon je peux l’envoyer par un autre moyen.
https://ipcamtalk.com/threads/latest-version-of-dahua-http-api-for-ipc-documentation.45213/

Vous pourriez taper cette commande en ssh:
curl -s --globoff --digest --user login:mdp http://192.168.1.110/cgi-bin/accessControl.cgi?action=openDoor&channel=1&UserID=101&Type=Remote
Je l’ai trouvé sur ce forum: Visiophone et caméras de surveillance - Dahua ? - Page 2 - Forum Domoticz en français

Voici le résultat, ça n’a rien fait au niveau du portier.

jc@debian:/var/www/html/plugins/script/data$ curl -s --globoff --digest --user MonLogin:MonPassword http://192.168.0.16/cgi-bin/accessControl.cgi?action=openDoor&channel=1&UserID=101&Type=Remote
[1] 4687
[2] 4688
[3] 4689
jc@debian:/var/www/html/plugins/script/data$ Error
Bad Request!

[1]   Fini                    curl -s --globoff --digest --user MonLogin:MonPassword http://192.168.0.16/cgi-bin/accessControl.cgi?action=openDoor
[2]-  Fini                    channel=1
[3]+  Fini                    UserID=101
[2]-  Fini                    channel=1
[3]+  Fini                    UserID=101
jc@debian:/var/www/html/plugins/script/data$ 

MonLogin et MonPassword, c’est ceux que vous tapez dans le navigateur ?

Oui, j’ai remplacé les vrais par MonLogin et MonPassword dans les posts du forum.

Je sèche. :thinking:

La nuit porte conseille :grin: et puis c’est l’heure d’aller manger :yum:
En attendant, merci beaucoup pour ces efforts.
Pour info, je crois me souvenir qu’avec un wget j’arrive à ouvrir.

Il faut trouver une commande qui fonctionne en ssh, la mettre dans un .sh et appeler le .sh depuis Jeedom.

Avec un sudo wget « l’url avec le mot de passe », je récupère bien un fichier qui contient OK et l’ordre est bien reçu par la gache.

Reste alors à mettre la commande wget dans un fichier .sh
Et le faire exécuter par Jeedom dans une commande du plugin script.

Il y a des choses spécifiques dans le wget qui manquerait dans la commande curl ?

Absolument rien, c’est exactement la même syntaxe que l’url que je passe au navigateur.

Bonsoir,
J’ai pu faire un script très basique (je ne suis pas expert linux)

#/bin/bash
sudo wget -O- "http://Login:MotdePasse@192.168.0.16/cgi-bin/accessControl.cgi?action=openDoor&channel=1&UserID=101&Type=Remote"

Il déclenche bien l’ouverture en le testant depuis Jeedom. Mais j’aimerais bien tester le retour et le traiter pour remonter l’info dans Jeedom, pour déclencher une autre action par exemple.
Voici la sortie du wget

requête HTTP transmise, en attente de la réponse… 200 OK
Taille : 4 [text/plain]
Sauvegarde en : « STDOUT »

-                                                        0%[                                                                                                                           ]       0  --.-KB/s               OK
-                                                      100%[==========================================================================================================================>]       4  --.-KB/s    ds 0s      

2021-02-20 19:20:51 (272 KB/s) — envoi vers sortie standard [4/4]
saisir ou coller le code ici

Essayez avec l’URL entre guillemets (comme vous l’avez fait avec wget):
curl -s --globoff --digest --user MonLogin:MonPassword "http://192.168.0.16/cgi-bin/accessControl.cgi?action=openDoor&channel=1&UserID=101&Type=Remote"

le &, sous bash -ou sh-, exécute la commande qui le précède en tache de fond.
en reprenant votre exemple :
curl -s --globoff --digest --user MonLogin:MonPassword http://192.168.0.16/cgi-bin/accessControl.cgi?action=openDoor&channel=1&UserID=101&Type=Remote
→ cela va s’executer comme ci-dessous:

  • 1ere tâche (ou commande) : curl -s --globoff --digest --user MonLogin:MonPassword http://192.168.0.16/cgi-bin/accessControl.cgi?action=openDoor&
  • 2eme tache (ou commande) : channel=1&
  • 3eme tâche (ou commande) : UserID=101&
  • 4eme tâche (ou commande) : Type=Remote

en mettant entre guillements l’URL complète, les & ne sont pas interpretés, ils font partie intégrante de l’URL appelée.

1 « J'aime »