Aller au contenu
J3R3M

[RÉSOLU] Communiquer de/vers la HC2 avec PUT-POST-GET

Recommended Posts

Bonjour à tous,

 

Après de très longues heures de recherches et d'essais infructueux, je m'en remets à vos connaissances pour ma problématique actuelle.

Je cherche à automatiser l'envoi de SMS vers mon téléphone et également détecter la présence de mon iPhone sur le réseau local (en me basant grossièrement sur ce post).

 

Tout est possible en utilisant les API disponibles sur mon réseau local.

C'est-à-dire qu'une certaine adresse IP avec les bons paramètres enverra un SMS et l'IP de ma HC2 avec les bons paramètres appuiera sur le bouton d'un VD.

Les URL d'accès à ces API fonctionnent en direct depuis mes navigateurs, ce qui prouve leur bon fonctionnement.

 

Mais malheureusement, cela se gâte dès que ça n'est plus en direct !

 

Pour communiquer depuis la HC2 vers l'API SMS, je suis tombé sur ce type de code :

HC2 = Net.FHttphttp://192.168.2.10»)
response = HC2:GET(«?user=user&password=pass&to=0612345678&from=0123456789&text=Salut!»)

Malheureusement, impossible d'en faire quoi que ce soit, ça ne fonctionne pas, sans que je puisse l'expliquer.

 

Je rencontre également des grosses difficultés pour communiquer de mon NAS (Docker) vers la HC2.

Que je tente la ligne du script dont je m'inspire :

 

curl -s -X PUT -d '{"value": "Present"}' http://$login:$password@$hc2ip/api/globalVariables/$nomvariable

 

Ou en cherchant/essayant des solutions diverses et variées, après m'être renseigné sur les différentes utilisations des requêtes ici et , parmi tant d'autres, ça ne donne rien non plus.

 

Je précise que l'utilisateur en question a bien accès aux éléments nécessaires pour agir sur ceux-ci dans la HC2.

De plus, j'ai effectué mes essais en désactivant l'ensemble des pare-feux présents sur mon réseau, mais rien n'y fait !

 

C'est un peu comme si ces requêtes étaient bloquées, mais je ne vois vraiment pas à quel niveau.

Ou alors y'aurait-t-il simplement quelque chose d'énorme à côté duquel je serai passé ?

 

Je vous remercie du temps passé à la lecture de ce message ! :)

Modifié par J3R3M

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut !

 

Tu peux donner un exemple de l'url que tu cherches à envoyer (pas avec des données réelles, mais avec des données réalistes) ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Salut et merci beaucoup de ta réponse !

 

Voici le dernier essai effectué pour l'envoi de SMS :

 

local SMS = Net.FHttp('http://192.168.2.14:9090');
local reponse = SMS:GET('/sendsms?user=jeremy&password=abcdefg&phone=0612345678&text=test');

 

Et voici l'URL que je cherche à déclencher depuis Docker :

 

http://jeremy:123456@192.168.2.2/api/callAction?deviceID=163&name=pressButton&arg1=1

 

N'hésite surtout pas à me demander d'autres compléments et je te répondrai avec grand plaisir ! :)

Partager ce message


Lien à poster
Partager sur d’autres sites

On va essayer de faire ça dans l'ordre...

Qu'est-ce que tu as comme retour dans response pour l'URL SMS ?

 

D'ailleurs, fait comme ça :

local reponse, error = SMS:GET('/sendsms?user=jeremy&password=abcdefg&phone=0612345678&text=test');

Et fais voir ce que ça donne comme retours.

Partager ce message


Lien à poster
Partager sur d’autres sites

Mes lignes étaient dans un VD, peut être que ces fonctions ne peuvent pas être intégrées dans le bouton d'un VD ?

J'avais créé un VD qui contenait tous les SMS qu'il était possible d'envoyer afin de n'avoir besoin que d'appeler un bouton pour l'envoi d'un SMS.

 

Après avoir fait l'essai en copiant les deux lignes dans une nouvelle scène, voici le résultat :

Citation

[DEBUG] 19:19:22: line 7: attempt to index global 'Net' (a nil value)

 

 

Partager ce message


Lien à poster
Partager sur d’autres sites

L'objet Net ne fonctionne que dans un VD, il y en a un autre (net) pour les scènes, qui fonctionne différemment.

Qu'est-ce que te donnent response et error  dans le VD ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Dans le VD, ça ne me donne rien du tout, lorsque je lance le script, rien du tout ne s'affiche dans la fenêtre de débogage :/

Modifié par J3R3M

Partager ce message


Lien à poster
Partager sur d’autres sites

En fait, est-ce que je m'y prends mal ?

Pour voir s'il y a une erreur, je clique sur le bouton "Déboguer" et appuie sur le bouton après avoir cliqué sur "Démarrer".

Dans le script de ce bouton, j'y ai glissé la ligne suivante, qui ne donne aucun résultat. Du moins, un résultat vide.

 

fibaro:debug(reponse)

 

Modifié par J3R3M

Partager ce message


Lien à poster
Partager sur d’autres sites

google translator ;)

au cas où il pourrait vous aider
sccript modifier la valeur de la variable VD_SYNO_BATT dans hc2 à partir des tâches de synology

dans l'exemple envoyer la valeur batterie charge UPS

HOMECENTER_IP="ip_hc2" # Tu IP
HOMECENTER_LOGIN="user" 
HOMECENTER_MDP="password" # Tu contraseña de admin

CargaBateriaUPS=`snmpwalk -v 2c -c public -O qv  localhost 1.3.6.1.4.1.6574.4.3.1.1` #Estado carga bateria SAI 
CargaBateriaUPS=`echo $CargaBateriaUPS | awk {'print $1'}`
curl --request PUT --data-ascii '{"value": "'$CargaBateriaUPS'", "invokeScenes": true}' --user $HOMECENTER_LOGIN:$HOMECENTER_MDP "http://$HOMECENTER_IP/api/globalVariables/VD_SYNO_BATT"

 

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai fini par trouver mon bonheur en ce qui concerne la première problématique grâce à ce sujet.

Je vais bientôt pouvoir me repencher sur l'accès via Docker ! :)

Partager ce message


Lien à poster
Partager sur d’autres sites

En ce qui concerne la communicaton de Docker vers la HC2...

 

Je viens d'essayer toutes ces possibilités de cette page pour essayer d'appuyer sur le bouton d'un VD depuis Docker.

L'utilisateur en question a bien entendu les droits sur ce VD et j'ai essayé l'URL d'accès à l'API à de nombreuses reprises.

Via un navigateur, ça fonctionne sans problème...

 

Le problème vient de la requête en elle-même, puisque je n'arrive pas non plus à m'envoyer de sms via API.

 

Mais, mince alors, je n'ai aucun message d'erreur dans le terminal, mais rien ne se passe, je ne comprends pas du tout :(

Partager ce message


Lien à poster
Partager sur d’autres sites

Docker........heuuuu...

Envoyé de mon Nexus 5X en utilisant Tapatalk

  • Haha 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Alors, en théorie, c'est la même commande que sur un linux classique.

Donc ma question pourrait être, quelles lignes de commandes utilisez-vous sur vos périphériques linux pour agir sur la HC2 en POST ? :2:

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai passé ces dix dernières heures à faire des essais et... Et bien non, je n'arrive pas à déclencher l'appui sur le bouton 1 de mon VD 163.

 

Par contre, j'ai eu l'occasion de constater que la connexion se faisait bien avec user/password.

Mon problème vient donc uniquement de la commande linux.

 

Le problème étant plus précis, pouvez-vous, s'il-vous-plaît, me dire quelle ligne utilisez-vous pour appuyer sur le bouton d'un VD depuis votre plateforme linux, type Rasperry Pi ?

 

Pour rappel, voici le type de lien que je cherche à déclencher depuis un script hébergé sur linux (Conteneur Docker sur Synology) :

Citation

http://user:password@IPHC2/api/callAction?deviceId=163&name=pressButton&arg1=1

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Cela suffit, une simple requête GET :

curl --user xxx:yyy "http://1.2.3.4/api/callAction?deviceID=123&name=pressButton&arg1=1"

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci de ta réponse @Lazer. J'étais bien de cet avis mais cette requête ne fonctionne pas.

Mais, grâce à celle-ci, j'ai pu remarquer que l'authentification à l'API fonctionnait correctement.

 

Cela mène sur une erreur dans l'API, comme si seul le paramètre "deviceID" était pris en compte.

 

5ab788e97c94e_Capturedecran2018-03-25a13_29_28.thumb.png.b19b18122c4ee7552c924e60e8e05aa7.png

 

Qu'à cela ne tienne, j'effectue la requête en rajoutant, en plus, les data séparées avec -d "name=pressButton&arg1=1".

Avec cela, aucune erreur, mais rien ne se passe...

 

J'ai également essayé avec ces deux possibilités :

curl -i -H "Accept: application/json" -H "Content-Type: application/json" --user user:password -X GET  --data "deviceID=91&
name=pressButton&arg1=2" http://192.168.2.2/api/callAction?deviceID=91&name=pressButton&arg1=2
curl -i -H "Accept: application/json" -H "Content-Type: application/json" --user user:password -X GET  --data '{"deviceID":"91",
"name":"pressButton", "arg1":"2"}' http://192.168.2.2/api/callAction?deviceID=91&name=pressButton&arg1=2

Mais ça mène sur une erreur similaire, soit :

[1] 44                                                                                                                                          
[2] 45                                                                                                                                          
root@ubuntu:/home/hc2# HTTP/1.1 400 Bad Request                                                                                                 
Date: Sun, 25 Mar 2018 11:43:37 GMT                                                                                                             
Server: 0.9                                                                                                                                     
Cache-Control: no-cache, no-store, must-revalidate, max-age=0, max-age:0                                                                        
Content-Type: application/json;charset=UTF-8                                                                                                    
Pragma: no-cache                                                                                                                                
Expires: Fri, 01 Jan 2010 00:00:00 GMT                                                                                                          
Connection: close                                                                                                                               
Transfer-Encoding: chunked                                                                                                                      
                                                                                                                                                
{"type":"ERROR","reason":"MISSING_PARAMETER","message":"name: missing required parameter"}                                                      

 

J'ai aussi essayé ça :

curl -i --user user:password --data '{"deviceID":"91,"name"="pressButton","arg1":"2"}' http://192.168.2.2/api/callAction?de
viceID=91&name=pressButton&arg1=2                                                                                                               

Qui mène sur une erreur 403:Forbidden

[1] 64                                                                                                                                          
[2] 65                                                                                                                                          
root@ubuntu:/home/hc2# HTTP/1.1 403 Forbidden                                                                                                   
Date: Sun, 25 Mar 2018 11:58:56 GMT                                                                                                             
Server: 0.9                                                                                                                                     
Cache-Control: no-cache, no-store, must-revalidate, max-age=0, max-age:0                                                                        
Content-Type: application/json;charset=UTF-8                                                                                                    
Pragma: no-cache                                                                                                                                
Expires: Fri, 01 Jan 2010 00:00:00 GMT                                                                                                          
Transfer-Encoding: chunked                                                                                                                      
                                                                                                                                                
                                                                                                                                                
[1]-  Done                    curl -i --user user:password --data '{"deviceID":"91,"name"="pressButton","arg1":"2"}' http://192.168.2.2/api/callAc
tion?deviceID=91                                                                                                                                
[2]+  Done                    name=pressButton

:(

Modifié par J3R3M

Partager ce message


Lien à poster
Partager sur d’autres sites

Question surement bête, mais tu es certain que ton user a les droits sur le VD que tu veux piloter ?

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 15 minutes, Lazer a dit :

Question surement bête, mais tu es certain que ton user a les droits sur le VD que tu veux piloter ?

 

Je comprends tellement la question, je me suis moi-même mis le doute, j'ai revérifié plusieurs fois et l'user est bien autorisé dans le contrôle d'accès de la HC2.

Et j'arrive bien à déclencher mes VD depuis un navigateur en me connectant avec cet user, qui plus est !

 

Dans le doute, j'ai essayé la requête suivante avec mon user et également avec mon compte admin. Les résultats HTTP sont respectivement Forbidden et OK.

Ce premier point est déjà étrange, mais il ne se passe tout de même rien, rien n'est déclenché <_<

curl -i -H "Content-Type : application/json" --data "deviceID=91" --data "name=pressButton" --data "arg1=2" --user user:pasword http://192.168.2.2/api/callAction?deviceID=91&name=pressButton&arg1=2                                                

 

NB : j'utilise maintenant le VD 91 pour mes tests (sur lequel les users ont les accès nécessaires) puisqu'il s'agit d'une ampoule, c'est plus rapide de constater son allumage (enfin non-allumage pour le moment) plutôt que d'aller vérifier si un bouton a bien été appuyé.

Modifié par J3R3M
  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Et sinon ton user ou plus probablement le mot de passe n'aurait pas un caractère spécial qui ne serait pas encodé correctement par curl ?

Il faut parfois jouer avec les singles quotes, ou les doubles quotes.

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a 7 minutes, Lazer a dit :

Et sinon ton user ou plus probablement le mot de passe n'aurait pas un caractère spécial qui ne serait pas encodé correctement par curl ?

Il faut parfois jouer avec les singles quotes, ou les doubles quotes.

J'ai aussi pensé à ça, mais lorsque je change mon mot de passe ou si je supprime un caractère, le retour HTTP est "User not logged in".

C'est comme ça que j'ai déduit que l'authentification fonctionnait correctement.

 

Là tout de suite, je vais tenter la réinstallation de curl.

Étrangement, sur toutes mes requêtes, quoi que je rajoute via --data, je constate qu'il me supprime le dernier paramètre.

Ce qui expliquerait un HTTP OK mais aucune action. Mais rien n'explique cette réaction, on dirait un assureur qui ne veut absolument pas payer un sociétaire.

 

EDIT

 

CURL réinstallé, mais rien n'y fait. Pour illustrer mes propos :

root@ubuntu:/home/hc2# curl --user user:pass http://192.168.2.2/api/callAction?deviceID=33&name=turnOn                   
[1] 193                                                                                                                                         
root@ubuntu:/home/hc2# {"type":"ERROR","reason":"MISSING_PARAMETER","message":"name: missing required parameter"}                               
[1]+  Done                    curl --user user:pass http://192.168.2.2/api/callAction?deviceID=33                        

Oui, maintenant j'essaie avec un WallPlug, il y a moins de paramètres donc moins d'erreurs possibles :rolleyes:

Modifié par J3R3M

Partager ce message


Lien à poster
Partager sur d’autres sites

Amenez-moi la corde. Je viens de supprimer les accès de mon user et lui redonner.

Et, une simple requête comme celle-ci permet l'appui sur le bouton désiré.

 

curl "http://user:password@IPHC2/api/callAction?deviceID=163&name=pressButton&arg1=1"

 

Merci à @rls_46, @pepite et à toi @Lazer d'avoir pris le temps de me donner quelques conseils :74:

Maintenant, je vais devoir démarrer un sevrage pour les anti-dépresseurs :lol:

Partager ce message


Lien à poster
Partager sur d’autres sites

heuuu, moi je n'ai rien fait ;-)

bon ca venait des droits, bizarre tout de même ce comportement.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Tu as pris le temps de répondre quoi :P

 

Carrément étrange oui, car ça a toujours fonctionné directement depuis un navigateur, c’est carrément illogique :huh:

Partager ce message


Lien à poster
Partager sur d’autres sites

Ouais, drôle de bug....

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai lu en diagonale mais c'est pas lié parce que dans les précédent post tu ne protéger pas l'url avec des guillemets (ce qui peut provoquer une erreur de ce type je pense ) ? Je voudrais t'éviter les anti-dépresseurs :D

Envoyé de mon Nexus 5X en utilisant Tapatalk

  • Like 1

Partager ce message


Lien à poster
Partager sur d’autres sites

×