pinou Posté(e) le 31 décembre 2014 Auteur Signaler Posté(e) le 31 décembre 2014 Oui dans l'éditeur de script, si tu fais cmd+entrée sur Mac (peut être ctrl+entrée ou alt+entrée sur Wndows) tu as la " fenêtre console" qui s'affiche.... Je pense que j'ai logge l'URL de la commande exécutée (pas certain mais bon) Envoyé de mon iPhone en utilisant Tapatalk
alexbi Posté(e) le 31 décembre 2014 Signaler Posté(e) le 31 décembre 2014 commande par mail fonctionne merci a toi vraiment un super travail je suis entrain de découvrir tasker sur smartphone je ne sais pas encore si on peut utiliser ton sript avec cette application mais je vais creuser ca
Allan2b Posté(e) le 3 janvier 2015 Signaler Posté(e) le 3 janvier 2015 Bonjours je suis dans le meme cas je que PITP2 suis ne V4.24 dans la console quand je test la commande j'ai pourtant la bonne url qui est envoyée sans l'authentication et quand je tape l'url dans la barre d'adresse directement le module réagit correctement ce qui est bizarre c'est que dans la console meme en m'étant un mot de passe bidon je n'est pas d'erreur et la bonne commande est envoyée . je pense a un problème d'authentication
pinou Posté(e) le 3 janvier 2015 Auteur Signaler Posté(e) le 3 janvier 2015 Oui c'est normal que dans la console le login/password n'apparaisse pas dans l'URL car ces derniers sont "intégrés" au niveau du header de la requête envoyée. C'est quand même étrange cette histoire. Pourquoi tout fonctionne bien en v3.x et rien en v4.x ? Un pb de la version béta ??? Peux tu essayer en remplaçant dans la partie code (fonction executeCommand), ceci : var url_api = ['http://',HC_IP,':',HC_PORT,'/api/',payload].join(''); var options = {"headers": {"User-Agent": "Gcal2HC2 (chiorboli@gmail.com)","Authorization": "Basic " + Utilities.base64Encode(HC_LOGIN + ":" + HC_PWD)}, "Content-Type": "application/json", "method":"get" }; Logger.log(url_api); var response = UrlFetchApp.fetch(url_api, options); par ce bout de code : var url_api = ['http://',HC_LOGIN, ':', HC_PWD, '@', HC_IP,':',HC_PORT,'/api/',payload].join(''); var options = {"headers": {"User-Agent": "Gcal2HC2 (chiorboli@gmail.com)","Authorization": "Basic " + Utilities.base64Encode(HC_LOGIN + ":" + HC_PWD)}, "Content-Type": "application/json", "method":"get" }; Logger.log(url_api); var response = UrlFetchApp.fetch(url_api); La dans la console, devrait apparaître l'URL complète avec le login/pwd en clair dans l'URL... Est ce que cela fonctionne ainsi ?
PITP2 Posté(e) le 3 janvier 2015 Signaler Posté(e) le 3 janvier 2015 J'ai effectué la modif cela donne ceci http://user:password@ip:port/api/callAction?deviceID=4&name=turnon Le o du On est en minuscule meme si j'ai pris la dernière version J'ajouté en dur dans le fichier Excel le O en majuscule pour la commande Off et On l'url est maintenant bonne http://user:password@ip:port/api/callAction?deviceID=4&name=turnOn mais toujorus pas d'action. Copier coller de l'url envoyé par ton script directement dans le navigateur et là ... ca marche ....
pinou Posté(e) le 3 janvier 2015 Auteur Signaler Posté(e) le 3 janvier 2015 Alors vérifie bien ton code car si tu as des trucs en minuscule c'est pas normal. Tu devrais avoir ça dans la fonction setValidationRule case 'SWITCH': rule = SpreadsheetApp.newDataValidation().requireValueInList(['On', 'Off'], true).build(); commentModule = 'ID de l\'interrupteur'; commentParam1 = 'On pour l\'allumer, Off pour l\'éteindre'; commentParam2 = null; colValidationIndex += 2 break; Ensuite, il faudra certainement repasser sur les commandes déjà définies (au niveau de la spreadsheet cette fois ci, afin de reselectionner les bonnes valeurs (On ou Off) partout ou tu as des SWITCHES. Donc de ce que je comprends, au final, l'URL générée est la bonne (au problème de majuscule près) mais ça ne fonctionne pas au travers de la spreadsheet. Par contre la même URL directement dans le browser fonctionne. C'est bien ça ? Ben du coup je comprends plus rien ! Je suis passé justement par un appel en utilisant le header afin de pouvoir spécifier le content type, etc. Et visiblement y a un truc qui coince avec la V4. On peut essayer un dernier truc en attendant la version officielle qui sortira mardi prochain ? Il faudrait revenir au code d'origine de la fonction executeCommand (cf. post précédent) et remplacer le user agent par quelque chose de connu. Le but est de se faire passer pour le navigateur Chrome par exemple (sait on jamais, dès fois que le polonais soit craintif et qu'il ait décider de filtrer les requêtes par rapport au user agent...). Au final ca devrait donner un truc comme ça : var url_api = ['http://',HC_IP,':',HC_PORT,'/api/',payload].join(''); var options = {"headers": {"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36","Authorization": "Basic " + Utilities.base64Encode(HC_LOGIN + ":" + HC_PWD)}, "Content-Type": "application/json", "method":"get" }; Logger.log(url_api); var response = UrlFetchApp.fetch(url_api, options); Je te conseille de mettre la chaine correspondant a ton User Agent (celle qui fonctionne avec ton navigateur). Pour ça, c'est simple, utilise ton navigateur et rends toi sur le site web suivant : http://whatsmyuseragent.com/ Tu n'auras plus qu'a copier/coller la chaine correspondante a ton navigateur/environnement dans le code... Je croise les doigts pour que cela fonctionne...
PITP2 Posté(e) le 3 janvier 2015 Signaler Posté(e) le 3 janvier 2015 Tu devrais avoir ça dans la fonction setValidationRule => oui j'ai bien cela mais cela ne semble pas etre pris en compte. Le seul moyen est de modifier en dur la valeur dans la case la même URL directement dans le browser fonctionne. => yes j'ai modifié le user agent comme tu l'as indiqué et bien cela ne fonctionne toujours pas. Mais alors que passa ... étrange cette histoire ..
Allan2b Posté(e) le 3 janvier 2015 Signaler Posté(e) le 3 janvier 2015 j'ai fait la modif, la commande est pourtant bonne, la forme pour l'd'authentication est ok puisque des que je copie la commande dans la barre d'adresse ca fonctionne mais depuis le script ke module ne réagit pas
pinou Posté(e) le 3 janvier 2015 Auteur Signaler Posté(e) le 3 janvier 2015 Non mais c'est pas possible ça ! Si au niveau de la spreadsheet, tu configure une nouvelle commande avec pour Action = Switch. Au niveau de la colonne Parametre 1 tu devrais avoir On et Off dans la liste déroulante. Si ce n'est pas le cas, c'est qu'il y a un problème dans le code de ta spreadsheet. Ensuite, lorsque je teste une commande, voici ce que j'ai dans la fenêtre de console : [15-01-03 17:36:47:680 CET] Executing lampe de salon [15-01-03 17:36:47:752 CET] ==> allume la lampe salon [15-01-03 17:36:47:787 CET] http://<mon_ip>:<mon_port>/api/callAction?deviceID=7&name=turnOn [15-01-03 17:36:48:224 CET] 202.0 Le 202.0 de la dernière ligne correspond au code retour de l'appel. 202 signifie que la requête a été acceptée mais son execution n'est pas forcément terminée. Qu'as tu dans ton cas ? 202 aussi ?
Allan2b Posté(e) le 3 janvier 2015 Signaler Posté(e) le 3 janvier 2015 [15-01-03 17:45:22:227 CET] Executing Lampe [15-01-03 17:45:22:277 CET] ==> lampe Salon Allumée [15-01-03 17:45:22:296 CET] http://192.168.1.xx:80/api/callAction?deviceID=236&name=turnOn [15-01-03 17:45:22:376 CET] 0.0
PITP2 Posté(e) le 3 janvier 2015 Signaler Posté(e) le 3 janvier 2015 Pareil qu'Allan2B 0.0 = la tete à toto
pinou Posté(e) le 3 janvier 2015 Auteur Signaler Posté(e) le 3 janvier 2015 Heu 0 n'est pas un statut HTTP Valide. ce devrait du 1xx, 2xx, 3xx, 4xx ou 5xx ... Toujours dans la fonction executeCommand, pouvez vous ajouter ces deux lignes après la ligne qui fait le log du getResponse : Logger.log(response.getResponseCode()); Logger.log(response.getAllHeaders().toSource()); Logger.log(response.getContentText("UTF-8")); Vous avez quoi ensuite dans la console ?
PITP2 Posté(e) le 3 janvier 2015 Signaler Posté(e) le 3 janvier 2015 Après ajout des logs supplémentaires [15-01-03 17:58:56:958 CET] 0.0 [15-01-03 17:58:56:959 CET] 0.0 [15-01-03 17:58:56:960 CET] ({}) [15-01-03 17:58:56:960 CET] Voila ce que renvoie le navigateur lorsque l'on met l'url {"id":0,"jsonrpc":"2.0","result":{"result":1}}
Allan2b Posté(e) le 3 janvier 2015 Signaler Posté(e) le 3 janvier 2015 [15-01-03 18:01:24:233 CET] Executing Lampe [15-01-03 18:01:24:280 CET] ==> lampe Salon Allumée [15-01-03 18:01:24:305 CET] http://192.168.1.46:80/api/callAction?deviceID=236&name=turnOn [15-01-03 18:01:24:383 CET] 0.0 [15-01-03 18:01:24:384 CET] ({}) [15-01-03 18:01:24:384 CET]
pinou Posté(e) le 3 janvier 2015 Auteur Signaler Posté(e) le 3 janvier 2015 Comprends rien de chez rien ... C'est quoi ce bordel avec la v4 ??? On dirait que la requête n'arrive pas du tout à la box... J'espère que ca va changer avec la version officielle car la je ne vois pas du tout !
pinou Posté(e) le 3 janvier 2015 Auteur Signaler Posté(e) le 3 janvier 2015 Heu ... ok, pour Allan2b je viens de comprendre en voyant ton log ! Tu as mis l'adresse ip lan de ta box ! Ca ne peut pas fonctionner ainsi !!! Il te faut mettre une adresse publique. Il ne faut pas oublier que la requete vient des serveurs de Google, donc d'internet et ca ne peut pas arriver sur ta box a l'interieur de ton reseau local directement !
PITP2 Posté(e) le 3 janvier 2015 Signaler Posté(e) le 3 janvier 2015 @pinou, moi c'est bien l'adresse externe
pinou Posté(e) le 3 janvier 2015 Auteur Signaler Posté(e) le 3 janvier 2015 Mince ! Bon en toute logique Allan2b devrait donc obtenir maintenant une chaine comme la tienne au niveau du log et non une chaine vide ...
PITP2 Posté(e) le 3 janvier 2015 Signaler Posté(e) le 3 janvier 2015 Attention la chaine {"id":0,"jsonrpc":"2.0","result":{"result":1}} renvoyée est celle renvoyée par le navigateur et pas par le log du script
Allan2b Posté(e) le 3 janvier 2015 Signaler Posté(e) le 3 janvier 2015 ok merci avec ip externe toujours pareil
pinou Posté(e) le 3 janvier 2015 Auteur Signaler Posté(e) le 3 janvier 2015 @Pitp2 : Mais qu'as tu au niveau de la fenêtre console ? @Allan2b : Et avec cette nouvelle URL ca fonctionne toujours dans le navigateur ? Toujours le même résultat au niveau de la console ? Code retour 0 et une chaine vide pour la suite ?
Allan2b Posté(e) le 3 janvier 2015 Signaler Posté(e) le 3 janvier 2015 la commande est envoyée mais elle n'arrive pas a la box c'est bizarre
pinou Posté(e) le 3 janvier 2015 Auteur Signaler Posté(e) le 3 janvier 2015 Quand tu dis "elle n'arrive pas a la box", c'est avec ton navigateur ou que par le script. Si c'est avec le navigateur c'est qu'il doit te manquer une redirection de port pour pouvoir atteindre ta box en local sur le port 80 depuis ton ip publique sur un autre port. Et sinon ben je vois pas, faudra attendre la version du 6 pour voir ce que ça donne... J'ai plus d'idées !
Messages recommandés