OpenKarotz piloté par votre agenda Google

Script permettant de piloter son Karotz (sous OpenKarotz) directement depuis son agenda Google.

Permet de planifier les actions suivantes : Parler, Bouger les oreilles, Modifier la LED, Prendre une photo, …

/** Information pour accèder au Karotz **/
var KAROTZ_URL = "http://xxx.xxxxxx.xxx"; 
var KAROTZ_PORT = "81"; 

/** Information pour accèder à l'agenda **/
var CAL_ID = 'xxxxxxxxxxxxxx@group.calendar.google.com';

/** Mot clé utilisé pour identifié les évenements concernant le Karotz **/
/** Le titre de l'événement doit contenir le mot clé pour être déclenché **/
/** Exemple : 12:05 Karotz bon apétit -> Demandera au Karotz de dire bon apétit à 12:05 **/
var KEYWORD = "Karotz";

/** Information de votre serveur ftp pour les photos de type ftp **/
var FTP_SERVER = "192.168.1.100";
var FTP_USER = "user";
var FTP_PASSWORD = "pwd";
var FTP_DIRECTORY = "/";

/** URL utilisées par le système **/
var URL_PHOTO = "/cgi-bin/snapshot?silent=1";
var URL_MOODS = "/cgi-bin/apps/moods?id=";
var URL_TTS = "/cgi-bin/tts?text=";
var URL_LEDS = "/cgi-bin/leds?color=";
var URL_EARS = "/cgi-bin/ears_random";
var URL_FTP = "/cgi-bin/snapshot_ftp?server="+FTP_SERVER+"&user="+FTP_USER+"&password="+FTP_PASSWORD+"&remote_dir="+FTP_DIRECTORY+"&silent=1";
 
/**
 * ----------------------------------------------------------------------------
 * Recherche dans l'agenda si le Karotz doit parler et si oui, envoi le 
 * message au Karotz
 * Et pourquoi pas un événement "Karotz coucou&voice=antoine" :-)
 * ----------------------------------------------------------------------------
**/
function findAndPlay() {
 
 var cal = CalendarApp.getCalendarById(CAL_ID);
 var now = new Date();
 var nowPlusOneMinute = new Date(now.getTime() + (60 * 1000));
 var events = cal.getEvents(now, nowPlusOneMinute, {search: KEYWORD});

 for (var i=0 ; i < events.length; i++) {
 if (events[i].getTag(KEYWORD) == null || events[i].getTag(KEYWORD) != "done") {
 play(events[i].getTitle().replace(KEYWORD, ''));
 events[i].setTag(KEYWORD, "done");
 }
 }

}

function test() {
 play("photo:");
 //play("Moi aussi j ai des réunion importantes")
}

/**
 * ----------------------------------------------------------------------------
 * Demande au Karotz d'agir
 * ----------------------------------------------------------------------------
**/
function play(words) {
 if (words.indexOf("moods:") >= 0) {
 envoi = UrlFetchApp.fetch(getUrl()+URL_MOODS+words.replace("moods:", ''));
 } else if (words.indexOf("leds:") >= 0) {
 envoi = UrlFetchApp.fetch(getUrl()+URL_LEDS+words.replace("leds:", ''));
 } else if (words.indexOf("photo:") >= 0) {
 envoi = UrlFetchApp.fetch(getUrl()+URL_PHOTO);
 } else if (words.indexOf("ears:") >= 0) {
 envoi = UrlFetchApp.fetch(getUrl()+URL_EARS);
 } else if (words.indexOf("photo_ftp:") >= 0) {
 envoi = UrlFetchApp.fetch(getUrl()+URL_FTP);
 } else if (words.indexOf("cgi:") >= 0) {
 envoi = UrlFetchApp.fetch(getUrl()+words.replace("cgi:", ''));
 } else if (words.indexOf("vacances:") >= 0) {
 vacances();
 } else {
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+words);
 }
 
}

function vacances() {
 
 var number = Math.floor((Math.random()*10)+1);
 
 if (number == 1) {
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"chéri&voice=margaux");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"As tu pu acheter du sucre&voice=margaux");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Non je ne suis pas encore passé au magazin&voice=antoine");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Tant pi j arrais plus tard&voice=margaux");
 } else if (number == 2) {
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"chérie&voice=antoine");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"As tu vu mon vieux pull gris&voice=antoine");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Il est encore au sale&voice=margaux");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"d accord je vais prendre le blanc&voice=antoine"); 
 } else if (number == 3) {
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"chéri&voice=margaux");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Les enfants sont invité chez les amis demain&voice=margaux");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"bien je les amainerai aprai le travail&voice=antoine");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"ok merci&voice=margaux");
 } else if (number == 4) {
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Hé&voice=antoine");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"vous faites quoi comme bétise&voice=antoine");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"rien on dessine c est tout&voice=julie");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"pardon j ai cru encore vous voir dessiner sur la table&voice=antoine");
 } else if (number == 5) {
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Demain j ai une réunion je vais devoir partir plus to&voice=antoine");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"pourrais tu amener les enfants a l ecole s il te plait&voice=antoine");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"oui je n ai rien de spécial&voice=margaux");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"merci beaucoup&voice=antoine");
 } else if (number == 6) {
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Tu sais ce qu'il y a au cinéma ces jours&voice=margaux");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Non aucune idée cela fait bien longtemps qu on y ai pas été&voice=antoine");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"justement je vais organizer quelque chose&voice=margaux");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"bonne idée&voice=antoine");
 } else if (number == 7) {
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Chérie&voice=antoine");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Je ne te le dis pas assez mais je t aime mon ange&voice=antoine");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Et bien que t arrive t il&voice=margaux");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"rien juste envie de te le dire&voice=antoine"); 
 } else if (number == 8) {
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Chérie&voice=antoine");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Il faudrait penser a sortir le lapin de temps en temps&voice=antoine");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"puisque tu en parle fait le&voice=margaux");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"ouai ok&voice=antoine"); 
 } else if (number == 9) {
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Chérie&voice=margaux");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Il faudrait penser a sortir le lapin de temps en temps&voice=antoine");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"puisque tu en parle fait le&voice=margaux");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"ouai ok&voice=antoine"); 
 } else if (number == 10) {
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Chérie&voice=margaux");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"Il faudrait penser a sortir le lapin de temps en temps&voice=antoine");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"puisque tu en parle fait le&voice=margaux");
 envoi = UrlFetchApp.fetch(getUrl()+URL_TTS+"ouai ok&voice=antoine"); 
 }
}

/**
 * ----------------------------------------------------------------------------
 * Retourne l'URL du Karotz
 * ----------------------------------------------------------------------------
**/
function getUrl() {
 if (KAROTZ_PORT == null || KAROTZ_PORT == "") {
 return KAROTZ_URL;
 }
 return KAROTZ_URL + ":" + KAROTZ_PORT;
}

7 thoughts on “OpenKarotz piloté par votre agenda Google”

  1. Bonjour, je suis en train d’essayer de contrôler mon karotz via mon agenda google avec votre script. Seulement je n’y connais pas grand-chose, et je suis bloqué à la première étape qui est de savoir où placer le script que vous avez écrit ?

      1. Merci, effectivement le tuto est très bien fait ! 😉

        Une autre question qui me pertube, comment google agenda sait qu’il doit envoyé la requête http sur le karotz, puisque ce dernier a une adresse privé LAN, et que google est sur internet et donc n’a que mon adresse ip publique ? (oui, je suis vraiment débutant…)

        Merci ! 🙂

  2. Merci pour les réponses super rapides !
    Du coup j’ai natté sur le port 81 du karotz. Si j’ai bien compris, je n’ai besoin que de celui-ci puisque j’ai besoin uniquement de la connexion google -> karotz ?

    Par contre à ce stade, je n’ai pas besoin de no-ip.com ? Ou alors je ne comprend pas tellement pourquoi et j’ai énormément de mal à le configurer !

    1. Tu auras besoin de No-Ip.com car ton adresse ip actuelle risque de changer et tu ne pourras plus y accéder. Les fournisseurs internet changent nos adresses IP … dans mon cas environ toutes les 2 semaines … sauf si tu as acheter une adresse ip fixe, mais je ne pense pas 🙂

      1. Ah OK !!! Je progresse pas à pas, mais la route est encore longue…
        Merci pour ta patience, ça fait plaisir !!!

        Ça ne marche toujours pas malheureusement… je pense avoir identité quelques causes :
        – tout d’abord je reviens sur l’histoire des Ip publiques car ça m’échappe encore… dans le script, on indique absolument pas à Google qu’il doit envoyer la requête sur notre box (bien que celle-ci soit natée !) donc je ne comprend comment le script peut savoir où l’envoyer ! Car même sans no-ip.com ça devrait marcher (tant que mon Ip reste la même pendant 2 semaines)
        – serait-il possible que le pare-feu de la box puisse bloquer la connexion entrante malgré la règle NAT ajoutée ?

        – dans ton script tu as mis le port 81 du karotz, pourquoi pas le :80 ? Car depuis un réseau local, c’est le port 80 pour accéder au Karotz !

        Merci pour les réponses à ces nombreuses questions !!! 😉

Laisser un commentaire

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Changer )

Twitter picture

You are commenting using your Twitter account. Log Out / Changer )

Facebook photo

You are commenting using your Facebook account. Log Out / Changer )

Google+ photo

You are commenting using your Google+ account. Log Out / Changer )

Connecting to %s