Aller au contenu

Google Calendar Vers Hc2/hcl


pinou

Messages recommandés

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

Lien vers le commentaire
Partager sur d’autres sites

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 

Lien vers le commentaire
Partager sur d’autres sites

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 ? 

Lien vers le commentaire
Partager sur d’autres sites

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 ....  :13:

Lien vers le commentaire
Partager sur d’autres sites

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...

Lien vers le commentaire
Partager sur d’autres sites

 

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 ..  :huh: 

Lien vers le commentaire
Partager sur d’autres sites

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 ? 

Lien vers le commentaire
Partager sur d’autres sites

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 ? 

Lien vers le commentaire
Partager sur d’autres sites

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}}
Lien vers le commentaire
Partager sur d’autres sites


[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]

Lien vers le commentaire
Partager sur d’autres sites

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 ! 

Lien vers le commentaire
Partager sur d’autres sites

@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 ?

Lien vers le commentaire
Partager sur d’autres sites

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 !

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...