samedi 4 janvier 2014

A propos de ce blog ...

Mon installation domotique évolue un peu ... suite à des problèmes avec l'API Python pour Google, j'ai décidé de migrer tous les échanges entre mon installation et internet vers Google Calendar ... Voici ce que ça donne en live ...

J'ai donc remplacé toute la gestion des données en entrée/sortie Web de mon Arduino (récupération des consignes de thermostats hébergées sous Google Calendar, envoi des données de température vers mon site web) précédemment réalisées sous Python par des scripts Google.
Le but final est de rendre mon installation 100% autonome, sans scripts Python, donc sans PC. Cette migration ultime arrivera courant février: je suis en attente de mon shield Ethernet ...

En attendant, voici quelques explications sur les scripts Google, dans une toute nouvelle rubrique (Google, of course) !

Bonne lecture... pour toute question, n'hésitez-pas à me contacter !

Bonne année 2014 !

Shield Ethernet: C'est pour bientôt !



J'attends impatiemment de la recevoir ...

Google Services: Calendar, Scripts, Drive, Sites

Utiliser les services Google avec son Arduino (ou tout autre chose ...)
Comme je l'ai écrit au travers de ce post, j'utilise désormais les services Google pour héberger les données de température et récupérer les consignes de thermostat en provenance de Calendar.
Auparavent, j'utilisais:

  • la librairie ftp Python pour sauvegarder les données de température et générer la page web des courbes. Je sauvegardais ces données sur mon FTP perso Free, ce qui ne plaisait guère à mon fournisseur d'accès (qui m'a fermé mon accès)
  • la librairie google Python pour lire les données de Calendar (étudié ici). Soit celle-ci était bugguée, soit je ne savais pas m'en servir (je penche pour la 2nde solution) car j'avais des soucis avec (les plaquettes supprimées était quand même lues par l'API par exemple)
Ces problèmes sont désormais réglés car:
  • Google Script me permet de récupérer cycliquement les données de Calendar pour les mettre dans un format lisible facilement par un sketch Arduino (un spreadsheet Drive, autrement dit une feuille de calcul Excell à la sauce Google) via la librairie gspread
  • La librairie gspread permet de sauvegarder tout aussi facilement des données de température dans une feuille de calcul
  • Les différents indicateurs (courbes ...) peuvent être générés directement dans la feuille de calcul sous Drive, comme on le fait par exemple avec Excel
  • Sites me permet de générer une page web avec une simplicité extrème, en allant directement récupérer les données graphiques depuis la feuille de calcul
Le résultat est visible ici....

Voici en quelques lignes comment accéder à son agenda, extraire les données qui y sont sauvegardées, et générer une feuille de calcul. Ce post ne fait que donner quelques indications sur l'utilisation et l'écriture de scripts. Les tutoriaux Google Script sont nombreux, je vous invite à les parcourir ...

Accéder à Calendar
Le but est de récupérer l'ID de l'agenda afin de pouvoir y accéder depuis les scripts Google. La manipulation a déjà été expliquée dans ce post. Je vous laisse aller y faire un tour...

Accéder à la feuille de calcul
Comme pour Calendar, le but est de récupérer l'ID de la feuille de calcul.
Pour ce faire, créez une feuille vide dans Drive puis ouvrez là, ou ouvrez une feuille existante. Dans l'URL, l'ID est tout ce qui est placé entre les parties rouges:
https://docs.google.com/spreadsheet/ccc?key=xxxxxxxxxxxxxxxxxxxxxxxxxx&usp=drive_web#gid=0

Créer un script
Dans Drive, créez un nouveau document de type Script.
Si Script n'est pas disponible, cliquez sur "Connecter plus d'applications", puis sélectionnez "Script in Google Drive". 
Sélectionnez ensuite un projet vide

Premier script
Les scripts sous Drive sont écrits en Javascript.
Ils se déclinent en une succession de functions pouvant ensuite être déclenchées automatiquement et cycliquement. Il est donc important de faire des fonctions modulaires.

Le script suivant permet de:
  • Accéder à Calendar
  • Accéder à la feuille de calcul
  • Lire toutes les données du jour dans Calendar
  • Ecrire toutes ces données dans la feuille de calcul
Le script est disponible ici (je n'arrive pas à le coller dans ce post :( )

Dans ce script:

  • Je force le fuseau au fuseau local, car les évènements sont décalés d'une heure sinon,
  • La ligne var events = cal.getEventsForDay(today); permet de récupérer les évènements de la journée. La ligne var events = cal.getEvents(today,tomorrow); permet de les récupérer entre 2 dates. tomorrow est défini par: var tomorrow=new Date(today.getTime()+ (36 * 60 * 60 * 1000)); chez moi (ce qui fait un peu plus de 24h, mais je voulais assurer...)
  • En fin de script, il ne faut pas oublier de réaffecter le fuseau d'origine

Voilà en ce qui concerne la récupération d'évènements Calendar dans Spreadsheet.
Prochainement, j'aborderai la lecture des données Spreadsheet depuis Arduino, et l'écriture de données dans un Spreadsheet depuis Arduino.