J3R3M Posté(e) le 10 janvier 2018 Signaler Posté(e) le 10 janvier 2018 (modifié) 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.FHttp(«http://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 là, 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é le 25 mars 2018 par J3R3M
OJC Posté(e) le 10 janvier 2018 Signaler Posté(e) le 10 janvier 2018 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) ?
J3R3M Posté(e) le 10 janvier 2018 Auteur Signaler Posté(e) le 10 janvier 2018 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 !
OJC Posté(e) le 10 janvier 2018 Signaler Posté(e) le 10 janvier 2018 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.
J3R3M Posté(e) le 10 janvier 2018 Auteur Signaler Posté(e) le 10 janvier 2018 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)
OJC Posté(e) le 10 janvier 2018 Signaler Posté(e) le 10 janvier 2018 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 ?
J3R3M Posté(e) le 10 janvier 2018 Auteur Signaler Posté(e) le 10 janvier 2018 (modifié) 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é le 10 janvier 2018 par J3R3M
J3R3M Posté(e) le 11 janvier 2018 Auteur Signaler Posté(e) le 11 janvier 2018 (modifié) 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é le 11 janvier 2018 par J3R3M
rls_46 Posté(e) le 15 janvier 2018 Signaler Posté(e) le 15 janvier 2018 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"
J3R3M Posté(e) le 21 mars 2018 Auteur Signaler Posté(e) le 21 mars 2018 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 !
J3R3M Posté(e) le 23 mars 2018 Auteur Signaler Posté(e) le 23 mars 2018 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
pepite Posté(e) le 23 mars 2018 Signaler Posté(e) le 23 mars 2018 Docker........heuuuu...Envoyé de mon Nexus 5X en utilisant Tapatalk 1
J3R3M Posté(e) le 23 mars 2018 Auteur Signaler Posté(e) le 23 mars 2018 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 ?
J3R3M Posté(e) le 25 mars 2018 Auteur Signaler Posté(e) le 25 mars 2018 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
Lazer Posté(e) le 25 mars 2018 Signaler Posté(e) le 25 mars 2018 Cela suffit, une simple requête GET : curl --user xxx:yyy "http://1.2.3.4/api/callAction?deviceID=123&name=pressButton&arg1=1"
J3R3M Posté(e) le 25 mars 2018 Auteur Signaler Posté(e) le 25 mars 2018 (modifié) 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. 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é le 25 mars 2018 par J3R3M
Lazer Posté(e) le 25 mars 2018 Signaler Posté(e) le 25 mars 2018 Question surement bête, mais tu es certain que ton user a les droits sur le VD que tu veux piloter ?
J3R3M Posté(e) le 25 mars 2018 Auteur Signaler Posté(e) le 25 mars 2018 (modifié) 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é le 25 mars 2018 par J3R3M 1
Lazer Posté(e) le 25 mars 2018 Signaler Posté(e) le 25 mars 2018 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.
J3R3M Posté(e) le 25 mars 2018 Auteur Signaler Posté(e) le 25 mars 2018 (modifié) 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 Modifié le 25 mars 2018 par J3R3M
J3R3M Posté(e) le 25 mars 2018 Auteur Signaler Posté(e) le 25 mars 2018 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 Maintenant, je vais devoir démarrer un sevrage pour les anti-dépresseurs
pepite Posté(e) le 25 mars 2018 Signaler Posté(e) le 25 mars 2018 heuuu, moi je n'ai rien fait ;-) bon ca venait des droits, bizarre tout de même ce comportement.
J3R3M Posté(e) le 25 mars 2018 Auteur Signaler Posté(e) le 25 mars 2018 Tu as pris le temps de répondre quoi Carrément étrange oui, car ça a toujours fonctionné directement depuis un navigateur, c’est carrément illogique
ADN182 Posté(e) le 4 avril 2018 Signaler Posté(e) le 4 avril 2018 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 Envoyé de mon Nexus 5X en utilisant Tapatalk 1
Messages recommandés