Zibase Multi : Annoncer vocalement la température intérieure et extérieure en Javascript





Zibase Multi :

Annoncer vocalement  la température intérieure et extérieure en JS




Le but

Le but est de découvrir le Javascript à travers un exemple en faisant énoncer vocalement à la Zibase Multi la température intérieure et extérieure. Cette exemple reprend la même finalité que l'article Karotz annonce la température avec Open Karotz et Zibase écrit le 17/01/2015. 

Préambule

Le Javascript est donc le langage client universel retenu par Zodianet pour pouvoir effectuer des actions spécifiques à l'intérieur ou en dehors de scénari. L'avantage est que la documentation sur le Javascript ne manque par sur le Web car il est utilisé sur tous les sites WEB pour effectuer des actions sur le poste client.

Par ailleurs sa syntaxe est relativement simple même si quelques notions de développements sont nécessaires. Je me suis efforcé de présenter ici un exemple simple avec tous les détails pour permettre aux plus néophytes d'entre nous de pouvoir le mettre en oeuvre.

Au delà de ce langage, Zodianet à mis à disposition 6 nouveaux objets orientés Zibase Multi  avec de nombreuses fonctions disponibles permettant d'effectuer des opérations multiples.

Vous trouverez l'ensemble de la description de ces objets et des fonctions associées à partir de cette page sur le site de Zodianet. Je vous laisse prendre les connaissance de toutes les possibilités.

Comment invoquer du Javascript ?

Il existe 3 solutions pour faire appel à du Javascript :


  • En incrustation de lignes JavaScript à l'intérieur même de scénarios de ZIBASE Multi. Ceci est très pratique mais aussi très limité car les limites de longueur d'un scénario sont très vite atteintes. Même si Zodianet travaille actuellement sur le sujet, à aujourd'hui, ces limites sont vraiment problématiques et au bout de quelques lignes de JS, vous ne pourrez plus enregistrer votre scénario. .
  • Dans des fichiers situés dans l'appareil Android supportant ZiBASE Multi. Cette fonctionnalité est très pratique car vous pouvez préciser à Zibase Multi d'aller exécuter du Javascript présent dans un fichier localement sur votre Zibase Multi.Vous n'êtes ainsi plus limités par la longueur des scénari. 
  • Bien entendu, dans des fichiers sur serveur local ou distant.Je ne vois pas vraiment l'intérêt de cette fonctionnalité mais cela peut peut-être présenter un intérêt si vous diposer d'un NAS pour rassemble tous vos développement ? 
Au préalable, il faut aller sur zodianet2 sur le configurateur en mode Expert / Menu Système pour définir le chemin par défaut sur lequel vous enregistrez vos fichiers Javascript. L'avantage est que vous n'aurez plus ensuite à préfixer ce chemin dans les différents appels effectués à l'intérieur des scénari.


Je vous conseille donc d'entrer le chemin préconisé par défaut et déjà créé sur votre tablette par l'installation de Zibase Multi :  /sdcard/data/data/zibase/userscripts/

Une fois ce préalable rempli, vous trouverez ci-dessous la mise en oeuvre du petit script pour faire annoncer vocalement la température intérieure et extérieure à Zibase Multi.


Mise en oeuvre

Comme toutes les fonctions sur Zibase Multi, il faut donc aller dans le Menu Piloter sous Android / Exécuter du Javascript (Pour Béta Testeur seulement même si ce n'est plus le cas) comme ci-dessous :



La fenêtre suivante s'ouvre :


Dans notre exemple, nous allons donc Exécuter du Javascript sur une fenêtre invisible à partir d'un fichier stocké en local sur le serveur Zibase Multi (la tablette quoi !) en prenant le soin de préciser "Préfixer le chemin par défaut" qu reprendra le chemin défini dans les paramètres système. Dans le  chemin/fichier, il faut entrer le Nom du fichier JS que nous allons générer ; ici : "Annonce_temperature.js".

Nous utilisons l'appel à du Javascript dans un fichier stocké car les quelques lignes de JS nécessaires pour effectuer ce petit traitement rendrait le scénario trop long en mode incrustation (JS directement écrit dans le scénario) et vous ne pourrie pas le sauvegarder. Par ailleurs, l'avantage de cette solution est de ne pas remplir la mémoire de la Zibase Multi (aujourd'hui limité historiquement comme la zibase classic) et de pouvoir modifier le javascript sans avoir sans cesse à enregistrer la configuration du scénario (et donc le reboot multiple de la Zibase Multi.

Pour information, nous disposons déjà de deux scénari nous servant notamment pour le thermostat qui se contentent de récupérer la valeur de la sonde de température intérieure dans la variable V0 et respectivement la température extérieure dans la variable V50. Vous pouvez les retrouver dans cet article à la rubrique Scénario "Variable T intérieur" et Scénario "Variable T extérieur".

Le contenu du fichier Annonce_temperature.js est le suivant :

<html>
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1"/>
<title>Annonce Température</title> 
</head>
<body>
<script type="text/javaScript"> 

/*récupère le contenu de la variable V0 de la Zibase (Température Intérieure) et la divise par 10
V0 contient 201 et donc la variable a va contenir 20.1
fonction mis à dispo par Zodianet sur l'objet zibase*/

var a =zibase.varShort(0)/10;

//converti la variable a en string (chaine de caractères) / Fonction javascript

var b=a.toString();

/*découpe la chaîne de caractère b pour séparer la partie entière et la partie décimale 
cela range les éléments dans un tableau de caractère contenu dans la variable c
c[0] va donc contenir la valeur entière de la T° (avant le point) 20 pour l'exemple
c[1] va donc contenir la valeur décimal de la T° (après le point)* 1 pour l'exemple*/

var c= b.split(".");

/*si la décimal de la température vaut 0 alors le contenu de la case 1 du tableau c (c[1]) vaut undefined; alors on remplace par 0*/

if (c[1] == undefined) c[1]= "0";

/*même commentaire que ci-dessus mais pour la variable V50 de la zibase qui contient la Témpérature extérieure*/

var d =zibase.varShort(50)/10;

var e=d.toString();
var f= e.split(".");
if (f[1] == undefined) f[1]= "0";

//fonction mis à dispo par Zodianet sur l'objet android
//cette fonction speaks permet de faire parler Zibase Multi à partir d'un phrase (fonction TTS : Text To Speech)

android.speaks("La température intérieure est de " + c[0] + " point " + c[1] + " degrés.");
android.speaks("La température extérieure est de " + f[0] + " point " + f[1] +  " degrés.",20);
</script>
</body> 
</html>

Les parties en rouge sont des éléments que vous devez reprendre dès que vous créez un script JS indépendant, stocké en local ou sur un serveur (en changeant les éléments contenus dans la balise Title). A noter que les balises en rouge sont implicites et non utiles quand vous écrivez du JS directement dans le scénario (mode incrustation).

Les parties surlignées en vert ne sont que des commentaires pour vous aider à comprendre le script mais ne servent évidemment à rien en tant que telles (noter qu'en Javascript, est considéré en commentaire tout ce qui est préfixé par // sur une ligne ou encadré par  /* */ sur plusieurs lignes).

Une fois votre fichier Annonce_temperature.js créé avec le contenu ci-dessus, il faut aller le placer dans le répertoire sur le serveur Zibase Multi soit dans   /sdcard/data/data/zibase/userscripts/. Pour cela, j'utilise de mon côté AirDroid permettant facilement par glisser/déplacer de faire un copier/coller d'un fichier depuis le PC vers la tablette.

Le scénario complet dans mon exemple donne donc :



Ce scénario Android - Temp WE est donc celui qui va me permettre d'annoncer la température intérieure et extérieure selon un calendrier fixe, ici le samedi et le dimanche à 10 h, 13 h et 20 h.

Vous pouvez créer un autre scénario comme ci-dessous invoquant le même script pour faire annoncer à des heures différentes le reste de la semaine la température intérieure et extérieure. Dans mon exemple, le calendrier fixe va du lundi au vendredi et les heures de déclenchement sont 8h et 20h



J'espère que ces premiers éléments concernant le Javascript sur Zibase Multi vous permettront de mieux appréhender les possibilités et vous donneront des idées quant à la création de nouveaux scénari.

Je publierais d'autres petits script JS dès que j'aurai le temps d'écrire les articles détaillés pour les rendre abordables et compréhensibles par tous.