About the author

Olivier

Passionné par les nouvelles technologies, ce blog communautaire me permet de partager expérimentations et découvertes. Accéder à mes articles =>

Related Articles

31 Comments

  1. 1

    Matthieu G

    Bonjour et merci pour ce super TUto.

    Cependant, peux tu nous expliquer cette partie la !!

    Mais avant de sauver votre feuille, il est nécessaire de modifier la fonction AppelAPI par celle – ci :
    // fonction permettant de faire un appel à une API
    function AppelAPI(URL)
    {
    var Reponse;
    var LOGIN = « BOXLOGIN »;
    var PWD = « BOXPASSWORD »
    var options = {« headers »: {« User-Agent »: « Google Drive », « Authorization »: « Basic » + Utilities.base64Encode(LOGIN + « : » + PWD)},
    « Content-Type »: « application/json »,
    « method »: »get »
    };
    Reponse = UrlFetchApp.fetch(URL, options);
    Reponse = Reponse.getContentText();
    Logger.log (Reponse);
    return (Reponse);

    J’avoue que je ne comprends pas !! Pour le reste Ok ! mais la je ne comprends pas ce qu’il faut faire en détail ! Je pense comprendre le principe, mais je ne sais pas où et comment l’intégrer!! Merci pour ton boulot et merci pour ta réponse car tonpost m’intéresse +++

    Reg ‘

  2. 2

    Matthieu G

    Y a t-il quelqu’un ?

  3. 3

    Olivier M.

    oui je te réponds dans la soirée je rentre du boulot 😉

  4. 5

    Olivier M.

    Pour répondre à ta question. Pour accéder à la fonction AppelAPI il faut aller dans le menu « outils » et sélectionner « Editeurs de script ». La fonction AppelAPI se trouve dans le source de Code.gs. Pour que cela fonctionne avec la box Fibaro, la modification a faire consiste à bien formater en y ajoutant un identifiant pour accéder à la box. De cette façon Google App pourra accéder à la box via son IP externe. Donc dans la fonction il faut remplacer « BOXLOGIN » par un identifiant qui permet d’accéder à ta box. Je te conseille de créer un identifiant spécifique en lui donnant uniquement les droits d’exécuter les scènes que tu souhaites rendre accessible depuis l’extérieur.

    Est ce que cela répond à ta question ?

  5. 6

    Matthieu G

    Merci pour ta réponse. Je ne savais pas que l’on pouvait créer des logins pour certaines scènes distinctes. Peut être est ce un’autre utilisateur’ avec droits restreints?
    Ceci dit, je suis un newbi de chez newbi, donc non je n’ai malheureusement pas compris. Je pense que d’autres plus aguerris auraient bien saisi. …. je vais essayer de m’y replonger car je crois qu il me faudrait un tuto hyper détaillé genre vidéo pour voir les Manipulations exactes et quoi écrire. .ou l’écrire. ……. je te tiens au jus mais un grand merci je vais essayer cela car cette fonction m’intéresse. …

  6. 7

    Olivier M.

    Je vais sans doute plus détailler l’article pour expliquer pas à pas comment procéder. Si je peux, je ferai une vidéo mais cela prend du temps ;-( Par contre il est vrai qu’il faut se plonger dans l’article d’abavala et prendre le temps de le lire. C’est très bien expliqué mais il faut comprendre son approche pour après être à l’aise et se sentir capable de faire évoluer son code.

    Pour fibaro en allant dans l’onglet « configuration » et « contrôle d’accès », on accède à la liste des utilisateurs. C’est dans cette fenêtre qu’on peut créer un nouvel utilisateur et lui donner les droits pour lui permettre d’exécuter que certaines scènes. Attention, à sauvegarder tes modifs, car cette page est un peu capricieuse.

  7. 8

    Matthieu G

    Merci beaucoup. Je pourrai te tenir au courant de mes déboires. … ou pas. …

  8. 9

    Pierre Bouchard

    salut,
    Je me demande quelle url mettre pour accéder à ma hc2…
    j’ai mis la locale : http://192.168.1.xx/api/sceneControl mais ça marche pas, et c’est bien normal puisque la feuille de calcul s’exécute sur google et non en local. Sauf que je n’ai ouvert aucun port pour accéder à ma hc2 depuis internet.
    Je passe d’habitude par home.fibaro.com, et là, pas moyen d’avoir accès à l’api si ?

  9. 10

    Olivier M.

    Effectivement il faut ouvrir un port pour permettre un accès externe sur la box.
    Via home.fibaro.com cela doit être possible … mais c’est à étudier.
    En regardant à l’instant je constate qu’ils ont fait bcp de changement dans le portail.
    De toute façon ce sera une approche en webscraping donc non pérenne.
    L’idéal serait que Fibaro expose un système d’authentification par clé d’API comme l’a fait Myfox.

  10. 11

    Pat76

    Bonjour et merci pour ce super tuto qui me rendra de grands services (une fois que j’aurais réussi à comprendre comment il marche).
    J’ai bien suivi la procédure mais lors de l’enregistrement du script il me donne cette erreur:

    Caractère incorrect. (ligne 276, fichier « Code »)

    la ligne 276 est la suivante:
    var options = {« headers »: {« User-Agent »: « Google Drive », « Authorization »: « Basic » + Utilities.base64Encode(LOGIN + « : » + PWD)},

    Y at-il des choses spécifiques à rentrer pour chaque mot entre les caractères « » ?

    Merci d’avance et désolé si ma question semble bête mais je m’attaque à un domaine qui m’était jusqu’ici totalement inconnu !

  11. 12

    Olivier M.

    Pas de soucis.
    Voici ce que j’ai mis dans mon cas :
    var options = {"headers": {"User-Agent": "Google Drive", "Authorization": "Basic " + Utilities.base64Encode(LOGIN + ":" + PWD)},
    "Content-Type": "application/json",
    "method":"get"
    };

    LOGIN et PWD sont des variables à renseigner avant l’exécution de cette ligne.
    En comparant , vous devriez trouver la caractère incorrect ???

  12. 13

    Pierre Bouchard

    Oui c’est justement les caractères chevrons qu’il faut que tu remplace par des  » sans espace avant ou après.

  13. 14

    Pat76

    Merci!
    ok, je tente et je vous informe du résultat …

  14. 15

    Pat76

    Super !
    ça fontionne à merveille, avec Do Button j’ai pu créer un bouton qui me facilite bien la vie.
    Merci encore de partager vos astuces.

  15. 16

    Fabien

    J’ai refait l’exercice plusieurs fois sans succès.
    J’ai cette erreur : TypeError: Impossible d’appeler la méthode « getLastColumn » de null (a priori ligne 130)
    J’ai pourtant vérifier que les onglets étaient bon dans le fichier IFTTT-2-API
    Quelqu’un a-t-il deja eu cette erreur ?

  16. 17

    Olivier M.

    Dans IFTTT, tu as dû mettre une valeur dans Formatted-row du type « FibaroSceneControl|||XX|||start ».
    Il faut en premier vérifier que tu as bien créé un onglet dans ta feuille GoogleSheets avec le même nom « FibaroSceneControl ».
    Car si l’objet feuille est null c’est qu’il n’a pas trouvé la feuille.
    Si cela ne te permet pas de trouver l’erreur, l’autre approche est d’exécuter la méthode « Lancement » en mode debug. Tu mets un point d’arrêt, avant la ligne qui plante et tu analyses chaque variable.
    bonne chance 😉

  17. 18

    KristoF

    Merci beaucoup Olivier ! ça marche parfaitement sur ma HC2 v3.600 !

    Je préciserai pour les néophytes en programmation (comme moi) qu’il faut laisser les  »  » de chaque côté du « login » et du « password » dans le script…

    De même, je préciserai que ça ne fonctionne pas avec la v4.xxx

    Encore merci pour le partage !
    Cordialement,

  18. 19

    Olivier M.

    merci pour la précision. Par contre j’ai une HC2 en v4.04 et cela fonctionne parfaitement. La syntaxe décrite fonctionne avec le système d’API proposé pour la v4.xxx.

  19. 20

    Fabien

    Rien a faire, j’ai tout revérifié. J’ai même supprimé les colonnes vide à droite. J’ai toujours une erreur ligne 130 sur le getlast column. En mode debug, il m’affiche « undefined » sur la partie : nomFeuilleParam (dans la fonction traiteserveur, idem fonction recherchecolumnserveur). Mais il n’y a pas de raison, tout semble correct
    Pourtant, tout semble bon.
    J’ai bien les 5 Onglets uniquement : Data, DataErr, Param, FibaroSceneControl et FibaroSceneControlLog
    Pas de probleme avec IFTTT ni la fibaro; la scene se lançant correctement, même à distance manuellement.

    Pour comparer, est ce qu’il est possible de m’envoyer une copie de votre IFTTT-2-API avec le code.gs (en enlevant login mot de passe et adresse IP de l’onglet Param, j’en serais très reconnaissant)
    Je peux faire de même avec mon fichier IFTTT-2-API

    Merci

  20. 21

    Olivier M.

    bonjour
    j’ai ajouté un paragraphe RESSOURCE avec un lien vers la copie de la feuille IFTTT-2-API adaptée pour la box Fibaro.
    Il faut normalement juste mettre vos logins/password de votre box et ajouter des déclencheurs.
    Mais si cette feuille marche chez moi, elle devrait fonctionner chez vous…

  21. 22

    Fabien

    Merci pour tout, je teste ça aujourd’hui

  22. 23

    Fabien

    Idem, impossible d’appeler la commande GetLastColumn de null.
    J’ai simplement remplacé les login pass dans le script, et modifié l’IP, le port et le numéro de la scene.
    Comme ci il me manquait un plugin ou une option sur mon drive online, ou une activation a faire.
    Dois je renommer le nom du script dans l’editeur de script ?

  23. 24

    Fabien

    Voici ce que j’ai dans le script d’execution :
    [15-04-05 08:34:51:263 CEST] Démarrage de l’exécution
    [15-04-05 08:34:51:287 CEST] SpreadsheetApp.getActiveSpreadsheet() [0 secondes]
    [15-04-05 08:34:51:377 CEST] Spreadsheet.getSheetByName([undefined]) [0,089 secondes]
    [15-04-05 08:34:51:380 CEST] Échec de l’exécution du script : TypeError: Impossible d’appeler la méthode « getLastColumn » de null. (ligne 235, fichier « Code ») [durée totale d’exécution : 0.091 secondes]

    Dois je publier quelques choses ?
    Dois ajouter quelques choses dans services avancées Google ? dans le gestionnaire des scripts ?

  24. 25

    doudoubidou

    Bonjour,

    Merci pour ce tuto que je me suis empressé de tester 🙂
    J’ai donc suivi tout et appeler une scène a la maison qui allume une lumière à mon approche de la maison. Juste pour tester 🙂
    Mais j’obtiens une erreure 🙁
    Un petit coup de pouce serait bien cool parce que je ne comprend pas d’ou ça vient 🙁
    j’obtiens un mail avec l’erreur : « Your input contains more than the maximum of 50000 characters in a single cell. » qu’il renvoie 144 fois !?
    Une idée ?

  25. 26

    Olivier M.

    on peut lancer une fonction en mode debug. Cela permet pas à pas, de comprendre ce qui pose problème.
    Il faut juste mettre dans l’onglet de départ les valeurs que IFTTT auraient écrites dans la feuille sur Google drive, puis lancer ce mode.

  26. 27

    doudoubidou

    Hello,

    Merci pour ta réponse Olivier 🙂 (comment on lance ce mode ?)

    Alors entre temps, j’ai essayé de refaire tout le fichier « au cas ou » et j’ai un autre message d’erreur maintenant :p
    « TypeError: Impossible d’appeler la méthode « getLastColumn » de null. (line 130, file « Code ») » dans la fonction « Lancement »

    Le même que Fabien … 🙁 pourtant, j’ai testé l’appel manuellement qui ressemble a : « http://MONSERVEUR/api/sceneControl?id=XXXX&action=start » qui me demande un login et password (manuel du coup) et ça marche !

    C’est la loose ! :p –> HELP

    Pour ce qui est de l’ordonnancement, j’ai paramétré un Lancement toutes les minutes … d’ailleurs quel est l’impact de ce paramétrage ? je m’explique … lorsque mon iphone reconnais mon entree dans la zone defini dans IFTTT, il exécute le script dans GoogleDrive et ca execute ma commande sur mon Fibaro tout de suite ou il attend le temps paramétré dans Lancement ?

    Merci d’avance pour l’aide et les réponses !
    +

  27. 28

    doudoubidou

    Bonjour,
    Alors, je comprend plus rien … En fait j’ai ce message d’erreur mais ça marche quand même 🙂
    Alors bon je vais pas me plaindre :p
    Mais j’aurais aimé comprendre quand même pourquoi j’ai ce message …
    ++

  28. 29

    Fabien

    Bonsoir,
    En fait j’ai finalement trouvé pourquoi on a ce message d’erreur. Le script s’exécute toutes les minutes (vu dans le tutorial), et il génère une notification par défaut. Il faut la désactiver au niveau du déclencheur. Car si aucune ligne n’est créée dans l’onglet data du fichier, il ne détecte rien et génère une erreur getLastColumn et donc une notification avec des echecs par la suite.
    Néanmoins, ça fonctionne dès qu’une ligne est envoyé dans le fichier dans l’onglet Data via IFTTT.
    Idem, pour tester les scripts, si on vérifie son script avec aucune ligne dans l’onglet DATA, on génère une erreur.

    Pour tester le bon fonctionnement du script, c’est donc simple, il faut ajouter ce type de ligne dans l’onglet DATA :
    FibaroSceneControl 44 start

    Remplacer le 44 par le numéro de la scene à jouer

  29. 30

    doudoubidou

    Autrement dit, il ne faut pas de declencheur du tout ?
    OK … vais tester … j’ai supprimer mon trigger du coup vais voir 😉
    Merci !

  30. 31

    doudoubidou

    bon … pas de déclencheur du tout, ça ne marche pas 🙁
    J’ai donc rajouté un déclencheur « Lancement », « From Spreadsheet », « Change » , ce qui semble refaire réagir.
    Mais en fait ca ne marche pas si bien que ça 🙁
    Normalement, lorsque je m’approche de chez moi, IFTTT reconnais que j’approche et donc exécute un script qui ouvre mon portail. Mais le délai entre les 2 est assez long !? Puis-je réduire ce délai ?

Leave a Reply

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.

2016 - Tous droits protégés - Domotique Info

En poursuivant votre navigation sur ce site, vous acceptez l’utilisation de cookies ou autres traceurs pour vous proposer par exemple, des publicités ciblées adaptés à vos centres d’intérêts ou encore, réaliser des statistiques de visites. Plus informations

Les paramètres de cookies sur ce site sont configurés pour "autoriser les cookies" afin de vous offrir la meilleure expérience de navigation possible. Si vous continuez à utiliser ce site Web sans modifier vos paramètres de cookies ou si vous cliquez sur "Accepter" ci-dessous, vous consentez à cela.

Fermer