Problème d'envoi d'une commande HTTP

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 »

@mnpg : Merci de l’intérêt porté à mon prroblème

Cette commande fonctionne parfaitement dans une session en ssh mais impossible de la paramétrer de manière fonctionnelle en tant de que script http dans Jeedom.
Ceci n’a aucun effet sur le portier :


Et celle-la ne fonctionne pas dans Jeedom

Erreur http car les " ne sont pas supportées par le script

Bonjour @JC38,
je pensais plus comme cela :


NB : je passe certaines de mes commandes de script directement de cette façon plutôt que de faire un fichier sh (qui ne contiendrait que cette commande)

En suggestion pour votre partie « Statut du portail », je partirai également sur une commande de script de ce type (suivant les informations de l’API indiquées dans votre post précédent) :
Type script : Script
Type : Info / Autre
commande : curl -s --globoff --digest --user MonLogin:MonPassword "http://192.168.0.16/cgi-bin/accessControl.cgi?action=getDoorStatus&channel=1" | cut -d= -f2
→ En retour de cette commande, vous aurez l’état Open, Break ou Close

@mnpg
Merci bcp pour toutes ces informations.
Effectivement, passer la ligne de commande plutot qu’un script sh fonctionne bien.
Pour le statut du portail, la commande fonctionne aussi.
Voici ce que j’ai


Il me manque le traitement de la commande « Portier » qui renvoie OK quand ça se passe bien. Je voudrais pouvoir piloter avec Alexa son ouverture mais pour le moment, elle me répond l’appareil ne répond pas parce qu’il manque le retour d’état mais l’action est bien faite.
J’ai mis ceci en type générique et je suis obligé d’utiliser le mot clef allume plutôt que ouvre pour Alexa

Salut @olive
J’essaie de faire des modifications dans un plugin pour gérer des devices supplémentaires.
J’ai besoin de faire des reqettes http GET et PUT
En ligne de commande ça roule via curl via un curl -X PUT ou GET « http://… »
Le plugin concerné n’utilise par curl mais com_http en php donc.
Est il possible via com_http de faire des requetes en PUT et GET ?
Ca m’éviterait d’avoir à construire mes lignes de commandes ssh…
J’ai vu aussi qu’on pouvait utiliser en PHP curl_init. Quelle difference avec un com_http ?
Au niveau auth, j’ai besoin du BASIC pour le moment. Pas de DIGEST
Thx

salut,
par principe je touche pas aux plugin …
ce serait pas mieux que tu ouvre ton propre sujet non ?

Ce sujet a été automatiquement fermé après 30 heures. Aucune réponse n’est permise dorénavant.