Le JavaScript sur ZiBASE Multi - Mise en oeuvre

Le JavaScript sur ZiBASE Multi - Retour aux généralités

Le JavaScript sur ZiBASE Multi - Mise en oeuvre

Le JavaScript sur ZiBASE Multi - Opérations sur Android

Le JavaScript sur ZiBASE Multi - Opérations sur les périphériques

Le JavaScript sur ZiBASE Multi - Opérations sur les fichiers

Le JavaScript sur ZiBASE Multi - Opérations sur le réseau IP

Le JavaScript sur ZiBASE Multi - Opérations sur ZiBASE

Le JavaScript sur ZiBASE Multi - Opérations sur l'enregistreur

 

 

 

DERNIERE VERSION (BETA)  ICI.  (Dernière mise à jour : 23/02/2016  avec V203 sous le logo Zodianet [appareils à écran tactile])

V70 : Fonction sms3G ré-intégrée. Synchronisation avec version 2.8 déposée sur Google Play.

V71 : Correction d'un bug dans la fonction "AFFICHER UNE IMAGE STOCKEE SUR UN SERVEUR". Ajout de fonctions dans l'objet zibase (addMatchingFunction () etc...) permettent de faire réagir de manière synchrone synchrone des fonctions JavaScript sur des événements de ZIBASE (Scénarios, périphériques...)

V72 : Possibilité de lancer des injections JavaScript du JavaScript lui-même avec zibase.injectJS (). Possibilité de lancer des notifications push (Android et/ou iOS) avec network.pushNotif ().

V73 : 4 Nouveaux designs (skins)  très "flat" et inspirés d'iOS7/8, disponibles dans les options (fond bleu, vert, gris clair, gris sombre). Exemples ici en bleu et en gris foncé. Possibilité de lancer des appels Skype Audio-Video bi-directionnels par simple action JavaScript network.videoSkype ("pseudoSkype" ). L'appli Skype doit être bien-entendu installée dans le terminal Android.

V74 : Compatibilité Android 5.0 Lollipop. Option supplémentaire sur appel Skype.

V75 : Synchronisation avec version 2.9 déposée sur Google Play.

V76 : Pilotage par reconnaissance vocale. Cliquer sur le micro sous le logo Zodianet puis dites "Aide". Permet de lancer des scénarios et allumer ou éteindre des actionneurs. Supporte le vouvoiement et le tutoiement.

V77 : Possibilité de déclencher la reconnaissance vocale par JavaScript. Possibilité après saisie vocale, de récupérer les propositions de phrases dans JavaScript (objet android).

V78 : Ajout de fonction de comparaison phonétique de calcul de signature phonétique ( android.phoneticCompare()). Synchronisation Google Play V3.0

V79 : Correction caractères accentués sur notification. Toast sur expression mal comprise en reconnaissance vocale. Possibilité d'ouvrir une fenêtre de dialogue avec android.askQuestion ()

V80 : Synchronisation avec version déposée sur Google Play 3.1. Amélioration du visuel des icônes (du jeu par défaut) dans certaines tailles.  Possibilité de donner des ordres vocaux dans un style plus libre en mêlant un mot clé dans la phrase (voir objet Android).

V82 : Ajout de la détection et la reconnaissance faciale sur camera AVANT ou ARRIERE de l'appareil Android. Ces fonctions peuvent être liées à des scénarios (documentation ici). La page d'apprentissage des visages se trouve dans les options (icône  : "visage").

V83 : Ajout de la fonction setScannerOptions (...) sur la reconnaissance faciale.

V84 : Ajustements fonctionnels et améliorations cosmétiques sur reconnaissance faciale.

V85 : Correction d'une fuite mémoire sur reconnaissance faciale. Possibilité d'occulter le panneau central pour avoir un plein écran sans discontinuité pour les icônes utilisateurs (nécessite un dashboard temps-réel validé) exemple

V86 : Publication sur Google Play  V3.3

V87 : Publication sur Google Play V3.4 - optimisation sur appareils sans accélérateur de détection faciale.

V88 : Publication sur Google Play V3.5. Prise de photo sur caméra avant ou arrière (Documentation en cours).  Provision pour connexion à un serveur/plateforme personnel et local (le serveur local pourra servir plusieurs ZIBASEs sur son LAN et de tous types : Classic / Mini / Multi). Améliorations diverses.

V90 : Compatibilité fonctionnelle avec les appareils fonctionnant sur "Android-TV". Synchronisation avec la version Google Play 3.8. A noter que Zibase Multi a été testée avec succès avec la BOX ANDROID-TV  "Miami" de Bouygues Telecom avec clés USB ZWAVE et ENOCEAN (avec compatibilité avec ZiBASE Classic en réseau évidente). L'application a été acceptée ce jour par Google sur son "Play Store for Android TV". La BOX domotique software arrive donc dans les BOX TV d'opérateurs (Bouygues, Free) et les téléviseurs sous Android TV (qui devraient représenter 90% des TVs Philips en 2015 selon ce même constructeur)...

V91 : Intégration des raccourcis. Soit sur le bureau, soit pour des applications externes (de type automate comme MacroDroid. Merci à Hervé de www.abavala.com pour son support). Il est possible en outre à partir des options de présenter la liste exhaustive des items pilotables et ainsi lancer à la volée des scénarios, commander des actionneurs, etc... (en sus de l'écran qui est tactile...). Nécessite la licence. Voir superbe tutoriel écrit par abavala.com

V92 : Possibilité de mettre en oeuvre le Dashboard temps-réel par option disponible sur écran tactile (sans solliciter les scénarios). Le pilotage par scénario est cependant prioritaire sur la "commande manuelle" et offre plus de variantes de configuration.

V93 : Synchronisation et mise à jour de la version disponible sur Google Play (V3.9). Optimisation de l'écran (placement et taille des icônes) sur petits écrans (type 1024x600). Bandeau rétractable sur TV-BOX sous Android-TV : Son apparition est consécutive à l'appui de touches de navigation (au choix), droite/gauche/haut/bas sur la télécommande de la TV-BOX.

V94 : Possibilités d'avoir des raccourcis combinant les actions ON et OFF sur interrogation à la volée de l'utilisateur sur les actionneurs et les télécommandes (et non pas une action simple  ON ou OFF).

V95 : Synchronisation et Publication sur Google Play (V4.0). Correction d'un bug sur les appareils Android à CPU Atom/x86 ("ZIBASE Prête" n'était pas prononcé correctement ainsi que tous caractères accentués).

V96 : Synchronisation et Publication sur Google Play (V4.3). Améliorations en état de démarrage / coupure de courant. Acquittement de la sortie lors d'un appui bouton arrière ou clic-droit souris, pour empêcher une sortie trop inopinée.

V97 : Synchronisation et publication sur Google Play (V.4.4). Correction au démarrage (autostart que était toujours ON).

V98 : Correction mineures

V99 : Provisions pour connexion au futur Serveur Local (actuellement en test). Intégration de quelques périphériques Fibaro, FGSD-002, FGS212, FGS222.

V103 : Intégration confidentielle des premiers périphériques BLE (Bluetooth Low Energy)...

V104 : Ajout d'un item dans les options pour activer/désactiver la gestion du BLE par l'application. Bluetooth peut donc rester actif pour d'autres applications. Modification du schéma de redémarrage automatique.

V106 : Ajout de fonctions pour émettre/recevoir des paquets UDP LAN/WAN par JavaScript. Possibilité avec une Zibase Multi de faire exécuter par injection une séquence Javascript sur une ou des autres Zibase Multi (relation 1-->N) , laquelle séquence est portée par paquets UDP sécurisés sur le LAN. Documentation ici. Intégration de clé USB d'interfaçage vers lien série (avec classiquement un connecteur DB9 / norme RS232 ou RS422 très utilisée dans le domaine industriel) à chip FTDI avec gestion des flux par JavaScript. La combinaison "UDP+lien série", permet par exemple de faire un bridge internet en coupure sur une ligne série. Voir documentation ici.

V107 : Ajout fonction askForLine(prompt, JScallBack ) pour saisir dynamiquement une ligne au clavier. Documentation en cours

V201 : Ajout d'une option pour switcher entre plateformes (locale LAN ou distante). Périodicité de 2s sur timer de scénario  au lieu de 10. Synchronisation avec Google Play (version V4.6).

V203 : Correction d'un bug sur l'absence de valeurs émanant du RFXCOM RFXtrx. Mise à jour sur Google Play (Version V4.7).

 

Comment invoquer le JavaScript ?


Le JavaScript est invoqué par l'action "EXECUTER DU JAVASCRIPT" dans l'onglet "PILOTER SUR ANDROID" du menu déroulant des actions.

La version minimale d'Android est 4.2 pour exécuter du JavaScript et 4.4 pour pouvoir faire de l'injection JavaScript sur une page existante.


Le JavaScript peut être exécuté à partir de 3 sources : 1) par incrustation "Inlay" d'instructions JavaScript dans les scénarios de ZiBASE, 2) par fichier déposé sur un serveur, 3) par un fichier dans l'appareil Android.

Faut-il ouvrir une fenêtre ou non ?

Il faut garder à l'esprit que c'est une page (fenêtre) du navigateur Chrome qui est ouverte. Si une nouvelle page est appelée, l'ancienne (avec le JavaScript qu'elle contient) est perdue et  virtuellement "fermée" (effet de "mono-threading"). Pour éviter cet "effet de fermeture" sur vos scripts, il peut donc être utile d'avoir une page unique ouverte et de procéder par injection JS directe dans une seule et même page, de sorte que ces injections fonctionnent en simultanéité et sans s'exclure l'une l'autre (effet de "multi-threading").

PS: Par défaut, une page vide est ouverte à l'initialisation (sur la pseudo URL /sdcard/data/data/zibase/userscripts), l'ouverture de page est donc toujours une option sans être une obligation. Une nouvelle ouverture peut cependant être utile pour annilhiler les anciennes injections (notamment auto-relancées périodiquement par Timer javaScript). L'ouverture d'une page sans nom de fichier sur sdcard réalise cette "ouverture" de page vide. A noter que cette opération est réalisée à chaque fois que vous faites "Enregistrer" sur le configurateur, afin de mettre votre système dans un état d'initialisation connu et déterministe, sans exécution de JavaScript.

Si le source comporte du graphisme ou éléments visuels, une fenêtre d'exécution doit être ouverte et a priori visible. La fenêtre d'exécution peut être rendue visible/invisible instantanément et à tout instant en cliquant sur l'icône "Paysage" des options. Cette vidéo montre l'usage intensif fait de cette icône.

L'ouverture d'une page par fichier sur serveur ou dans l'appareil demande un fichier au format HTML avec ces balises habituels <html><head><body>. La présence de JavaScript peut même y être  optionnelle. A contrario, l'incrustation et l'injection sont directement au format JavaScript comme le montre la copie d'écran ci-dessous.


L'affichage de "toasts" (dans la terminologie Android) et de messages type console.log ne nécessite pas de fenêtre (Consulter le suivi d'activité de ZiBASE Multi dans le configurateur).

Les erreurs à l'exécution sont reportées dans le suivi d'activité et sous forme de toast sur l'écran de l'appareil Android. Le rapport d'erreur est donné ainsi que le numéro de ligne.

 

Particularités selon la source

Incrustation

Contrairement aux 2 autres sources de script, l'exécution d'un script par incrustation ne demande pas de headers particuliers notamment <script type="text/javascript"> et trailer </script>, car ceux-ci sont implicites, sauf si le 1er caractère du script est le caractère '<'. Les instructions JavaScript peuvent donc être directement entrées.

La longueur maximum d'une incrustation est limitée par le scénario qui le porte; elle est donc actuellement très (trop) courte. Nous y travaillons...

L'incrustation est donc utilisable pour l'instant plus pour lancer des actions de manière opportuniste que pour faire de l'algorithmique.


Fichier sur serveur

Pour alléger les URL spécifiées, il est recommandé de consigner sa partie invariable dans l'onglet SYSTEME du configurateur puis cliquer "Prefixer par l'URL par défaut". Si vous devez changer de serveur, le gain de temps sera significatif.

La notation login:password@site.com:port/xx/ est acceptée.

Pour ne pas avoir de problème avec les caractères accentués, bien préciser le 'charset' (voir source des fichiers ISO-8859-1 ou  UTF-8 ...).

Nous vous conseillons toutefois de choisir l'ISO-8859-1, par compatibilité avec les fichiers sur SDCARD qui doivent être à ce format (si vous décidez de mettre plus tard vos fichiers sur SDCARD plutôt que sur serveur).


Fichier dans l'appareil sur sdcard

Pour alléger les chemins spécifiés, il est recommandé de consigner sa partie invariable dans l'onglet SYSTEME du configurateur puis de cliquer "Préfixer par le chemin par défaut".

Si le chemin ne comporte pas de '/' à son début, il est dit relatif, et il sera préfixé automatiquement par un chemin de la forme : /storage/emulated/0/data/data/zibase/userscripts/

Pour ne pas avoir de problème avec les caractères accentués, mettre le 'charset' en  ISO-8859-1.

Balise :  <meta http-equiv="Content-Type" content="text/html; charset=iso8859-1" />

NB : Un message vocal déformé (voir transformé) avec la function android.speaks()  lors de la lecture d'accents est symptomatique d'un problème de 'charset'.

Il peut être dommage de devoir accéder à Internet pour télécharger des documents qui pourraient être stockés localement. Pensez qu'une "pseudo URL" existe et est formée par le chemin où se trouve votre script.

Par exemple, pour utiliser la bibliothèque jQuery, mettez le fichier habituel jquery.js dans le même répertoire que votre script et faites-y référence exactement comme si vous étiez sur serveur. voir ici.

De même que sur un serveur, des fichiers peuvent être téléchargés depuis votre PC par un client ftp (comme FileZilla), il est possible de procéder exactement de la même façon en installant un serveur ftp sur l'appareil Android comme celui-ci. Le téléchargement est alors instantané par drag & drop de votre fichier. Cela permet d'avoir un éditeur plus confortable que dans le mode "Incrustation" et in fine de gagner du temps.


Les Traitements de fond...

Les scripts sont exécutés séquentiellement l'un après l'autre par une même unité de traitement, ils doivent donc s'exécuter rapidement.

Il est néanmoins possible d'avoir un traitement réalisé en permanence.

Il y a 2 façons d'opérer : par une boucle ou par Timer.

La mauvaise méthode : Par une boucle

La boucle est rendue infinie en utilisant une instruction comme 'while(1) {...}, mais l'affichage de la page HTML associée "ne rendra pas la main" et il sera plus lent et complexe de "la récupérer" afin de lancer une autre page et donc un autre script . Il faut donc explicitement aménager une condition de sortie de cette boucle en testant android.exitRequested(). Voir cet exemple (télécharger le source) qui donnera ceci dans le suivi d'activité:


La bonne méthode : Par un timer

La méthode à préférer consiste à utiliser un "Timer" qui va périodiquement exécuter un traitement. Dans ce cas, l'affichage de la page HTML associée est complète et "rend la main" (tout en ayant un traitement à faire selon la période du Timer JavaScript).

Le lancement ultérieur d'une autre page/script sera alors instantané. Voir cet exemple (télécharger le source) qui donnera un résultat analogue au traitement par boucle :

A noter qu'il est toujours possible d'utiliser la technique du Timer en utilisant un scénario de zibase déclenché par un Timer configuré dans la partie STIMULI. Mais la périodicité minimale sera alors de 10 secondes. Le gros avantage sera de pouvoir séquencer ce traitement JavaScript parmi d'autres.