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

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

OBJET : network

ROLE : Cet objet comporte les fonctions liées à la connexion réseau de ZiBASE Multi.

 

void callSkype (String pseudo, String type)
Etablissement d'une connexion Skype bidirectionnelle avec un correspondant identifié par son pseudo Skype.
L'application Skype doit être préalablement installée et configurée dans le terminal Android. Pas de nécessité d'avoir l'application Skype maintenue ouverte en arrière plan : Elle est lancée automatiquement. Durant la connexion et son établissement, les caractéristiques et options habituelles de Skype sont présentes (sonnerie d'appel en cours, validation/dévalidation video, changement de caméra avant/arrière, validation/dévalidation audio, raccrochage, etc...). La caméra AVANT est prise par défaut par Skype. L'intérêt est de déclencher la connexion par un détecteur/capteur/scénario. Remplace efficacement une caméra IP fixe en y apportant le son, la bidirectionnalité, et possède l'avantage de rester fonctionnelle sur lien 3G (coté BOX), contrairement aux caméras IP traditionnelles.
pseudo : pseudo du compte Skype appelé.
type : Type de connexion :
- "audio" : Etablissement d'une connexion audio bidirectionnelle.
- "video" : Etablissement d'une connexion audio/video bidirectionnelle.

void videoSkype (String pseudo)
Utilise la fonction ci-dessus. Equivalent à callSkype (pseudo, "video").

Exemple

 

int setSmtpAgent(int valid)
Mise en d'un client SMTP permettant d'envoyer des emails sans passer par la librairie standard Android (qui oblige à devoir autoriser manuellement l'envoi des emails). Cette fonction est classiquement à lancer une fois au démarrage de ZiBASE Multi.
valid : 1 : Validation d'un client SMTP par défaut et d'essai avec un compte Zodianet sur Gmail pour un usage temporaire (transferts authentifiés, cryptés SSL, port 465) ;  0 : Dévalidation (utilisation de la librairie standard Android avec acquittement manuel des emails)
Retourne la réussite de l'opération. 0 : Echec ;  1 : Succès.

int setSmtpAgent(String host, String user, String pass, String alias)
Identique à la fonction précédente mais avec spécification de vos propres paramètres de client SMTP avec authentification activée, cryptage SSL activée, port 465 (cas typique GMAIL). Cette fonction est classiquement à lancer une fois au démarrage de ZiBASE Multi.
host : Serveur SMTP à utiliser.
user :  Login du compte SMTP.
pass :  Mot de Passe du compte SMTP
alias :  Alias du compte. Exemple :  "Jean Paul Dubois". Eviter les caractères spéciaux.
Exemple de configuration d'une boite Gmail :  network.setSmtpAgent("smtp.gmail.com", "MyLogin", "MyPassword", "My Name") ;

int setSmtpAgent(String host, String user, String pass, String alias, int port, String authentification, String encryption)
Identique à la fonction précédente mais avec spécification de vos propres paramètres de client SMTP avec authentification activée, cryptage SSL activée, port 465 (cas typique GMAIL). Cette fonction est classiquement à lancer une fois au démarrage de ZiBASE Multi.
port :  Port utilisé par le serveur SMTP
authentification : Mettre "auth" pour valider l'authentification, mettre une chaine vide ou "noauth" dans le cas contraire.
encryption : Mettre "ssl" pour valider le cryptage, mettre une chaine vide ou "nossl" dans le cas contraire.
Exemples:
Configuration d'une boite Gmail (équivalent à l'exemple précédent):  network.setSmtpAgent("smtp.gmail.com", "MyLogin", "MyPassword", "My Name", 465, "auth", "ssl") ;
Configuration d'une boite Wanadoo sur port 25:  network.setSmtpAgent("smtp.wanadoo.fr", "MyLogin", "MyPassword", "My Name", 25,"noauth","nossl") ;

void emailDir (String emailTo, String emailCC, String emailSubject, String emailBody, String pattern )
Emission sur un ensemble de fichiers de la ‘SandBox’ (/sdcard/data/data/zibase/userfiles/)
L’ensemble de ces fichiers est défini par la présence de la sous-chaine ‘pattern’ dans leurs noms.
NOTA: L'envoi s'effectue en fonction de ce qui a été consigné comme client SMTP. Ne pas oublier que si le compte client SMTP n'a pas été spécifié auparavant, un acquittement manuel vous sera demandé lors de l'envoi du mail.

int zipThenEmail (String emailTo, String subject,String zipname, String pattern)
Opération de compression d’un ensemble de fichiers de la ‘SandBox’ suivi d’une émission par email du fichier archive .zip créé.
L’ensemble de ces fichiers est défini par la présence de la sous-chaine ‘pattern’ dans les noms de fichiers. Le pattern «*» concerne tous les fichiers (hors «.zip»).
Le nom de l’archive zipname doit être spécifié sans son extension « .zip ». Retourne le nombre de fichiers contenus dans l'archive .zip.
NOTA: L'envoi s'effectue en fonction de ce qui a été consigné comme client SMTP. Ne pas oublier que si le compte client SMTP n'a pas été spécifié auparavant, un acquittement manuel vous sera demandé lors de l'envoi du mail.

int sms3G(String phoneNumber, String message, String passCode)
Emission d’un SMS par réseau mobile. Sécurité : Un "passCode" différent par appareil est affiché à l'écran au maximum 3 fois si ce PassCode est faux. Ce code doit être recopié dans la requête; mettre une chaîne de caractères arbitraire la première fois puis recopier la code donné à l'écran sous forme de Toast.
La limite d'envoi de SMS est fixée à 50 par jour.
Demande la présence d’une carte SIM valide dans l’appareil Android.
La facturation de ces SMS est faite par votre opérateur mobile (émetteur de la carte SIM). Renseignez-vous auprès de votre opérateur sur son autorisation pour émettre des SMS automatiquement par une machine.
En mettant en perspective le prix du SMS envoyé par plateforme avec un forfait SMS illimités sur la carte SIM... Cela peut être vite rentable. Mais soyez raisonnable et responsable...

int pushNotif (  String message, String os, String androidIcon, int delay )
Emission d’une notification PUSH sur terminaux Android ou iOS, de manière immédiate ou retardée. Retourne 1 si succès d'envoi, 0 si erreur de syntaxe. Ces terminaux doivent s'être loggués pour la dernière fois au compte associé à ZiBASE Multi par l'application "Zodianet" (iOS) ou Zodianet HD (Android). L'application peut ensuite être fermée sans perturber la réception des notifications.
message : Message a émettre.
os: Type de terminaux. Spécifier "android" ou "ios". Mettre "android+ios" ou "*" pour cibler les 2 types de terminaux simultanément.
androidIcon: Android offre la possibilité de particulariser l'icône reçue en notification. Spécifiez un item dans cette liste : "red house", "water", "gas" , "smoke", "co", "motion",
"gate","yellow house","temperature","wind","light", "rain", "power".

delay : Délai avant émission de la notification (en secondes).

int pushNotif (  String message, String os, String androidIcon )
Identique à la fonction ci-dessus, mais sans délai.

int pushNotif (  String message, String os, int delay )
Identique à la fonction ci-dessus, mais sans préciser d'icône.

int pushNotif (  String message, String os)
Identique à la fonction ci-dessus, mais sans préciser d'icône ni de délai.

int pushNotif (  String message)
Identique à la fonction ci-dessus, mais sans préciser d'icône ni de délai et simultanément sur terminaux Android et iOS.

int isConnected()
retourne l’état de connexion à un réseau IP et le réseau privilégié.
0 : Déconnecté
1 : Ethernet
2 : Wifi
3 : Mobile
4 : Wimax

NOTA : ZIBASE se voit automatiquement notifier les connexions/déconnexions à un réseau IP.
Pour cela, des mots clés mis en liste de déclenchement permettent de lancer des scénarios:
NETWORKOFF : signale la déconnexion du réseau IP
NETETH : signale la connexion au réseau ETHERNET
NETWIFI : signale la connexion au réseau WIFI
NETMOBILE : signale la connexion au réseau MOBILE
NETWIMAX : signale la connexion au réseau WIMAX
PS : il est possible de spécifier plusieurs mots clés (séparés par un espace) en liste de déclenchement.

int isBTConnected()
retourne l’état de connexion à un réseau Bluetooth (0/1) . Valide en cas d’échec sur isConnected().

int urlReachable(String url_server, int timeout_ms)
Test de la connectivité à un serveur http (0/1).
Exemple : urlReachable(« http://google.com », 3000)

isInternetConnected()
Test de la connectivité à Internet (0/1).

int isEthernet()
teste la connectivité par Ethernet comme réseau privilégié (0/1)

int isWifi()
teste la connectivité par Wifi comme réseau privilégié (0/1)

int isMobile()
tester la connectivité par réseau Mobile comme réseau privilégié (0/1)

Fonctions génériques pour objets communicants et plateformes tierces

void getGenericTokenByOauth2(String tokenUrl, String clientID, String clientSecret, String username, String password, String callbackFunction)

Valide sur Android <= 5.0. Rechercher le token selon le protocole d'authentification Oauth2 (http://en.wikipedia.org/wiki/OAuth) appliqué à la méthode "Resource Owner Password Credentials" (Cette méthode ne requiert pas de serveur PHP intermédiaire).
tokenUrl : URL sur la plateforme du fournisseur de l'objet communicant qui permet de rechercher le Token (à précèder de http:// ou https://) nécessaire pour vous identifier dans les requêtes sur les données (de sondes par exemple).
String clientID, String clientSecret : Codes d'enregistrement de "l'application appelante" chez le fournisseur de l'objet communicant.
String username, String password : Le login et le mot de passe de votre compte chez le fournisseur de l'objet communicant.
callbackFunction : (Android KIT-KAT (4.4) minimum) Nom de la Fonction JavaScript appelée en retour. Le nom est specifié ici sous forme de simple chaîne de caractères. Elle est appelée avec 2 arguments; soit la fonction foo(token, validity) où 'token' est le token retourné et 'validity' le drapeau montrant la validité du token (1: Token Ok; 0: Message d'erreur (à la place du token) retourné par le serveur). La fonction callbackFunction nécessite Android 4.4 minimum car elle est appelée par injection JS.

PS: A partir du token, JavaScript a toutes les ressources nécessaires pour faire des appels http/https sur des serveurs et faire le parsing xml ou JSON. Voir le tutoriel. A noter qu'un appel https ne doit être fait qu'à partir d'une incrustation ou de la sdcard de votre appareil et non d'un fichier JavaScript sur serveur appelé par http (protection/sécurité de Chrome...).

void redefineUserAgent (String newUserAgent)
Permet de redéfinir le 'User Agent' lors des requetes http/https


void httpCall(String url,String params, String callbackFunction, String method)
Valide sur Android <= 5.0. Faire un appel http ou https en GET ou en POST avec une liste optionnelle d'arguments.
- url : URL et chemin à solliciter. Exemple "https://www.alpha.com/foo"
- params : Liste des paramètres séparés par '&'. Exemple : "i=1&j=2". Mettre null ou "" si aucun argument.
- callbackFunction : (Android KIT-KAT (4.4) minimum) Nom de la Fonction JavaScript appelée en retour. Le nom est spécifié ici sous forme de simple chaîne de caractères. Elle est appelée avec 2 arguments; soit la fonction foo("info", validity) où info est l'information retournée (page lue) et validity le drapeau montrant la validité de l'information (1 (true): contenu Ok; 0 (false): Message d'erreur (à la place de 'info' ) retourné par le serveur). Mettre callback à null ou "" si aucune fonction de callback n'est souhaité. Le champ info ne peut pas être de type binaire. La fonction callbackFunction nécessite Android 4.4 minimum car elle est appelée par injection JS.
- method : Mettre simplement "GET" ou "POST" pour préciser la méthode. Des paramètres supplémentaires peuvent précisés à séparer par '&' dans un ordre quelconque:
AUTH : Permet de spécifier un login/password. Exemple "GET&AUTH:login:pass"
HEADER : Permet d'ajouter un ou plusieurs headers lors de l'appel. Exemple "POST&AUTH:login:pass&HEADER:Cache-Control:no-cache".

void httpCall(String url,String params, String callbackFunction, String method, String filter )
Valide sur Android <= 5.0. Identique à la fonction précédente mais applique une recherche par la fonction XPath (filter = Expression XPath) sur la page renvoyée et considérée au format XML, le résultat est alors envoyé à callbackFunction.Voir syntaxe de filter ici.

void httpCall(String url,String params, String callbackFunction, String method, String filter, String pageType )
Valide sur Android <= 5.0. Identique à la fonction précédente, mais offre la possibilité avec le sélecteur pageType de faire une recherche dans une page HTML par select JSOUP (filter =Exp1//Exp2//Exp3...)
, le résultat est alors envoyé à callbackFunction. Elaboration de filter avec JSOUP : Lien utile ici. Syntaxe formelle ici.
pageType :

- "XML" : Page XML avec filtrage par XPath,
- "HTML" : Page HTML avec filtrage par JSOUP,
- "XPATH" : Page quelconque avec filtrage par XPath,
- "JSOUP" : Page quelconque avec filtrage par JSOUP,
Le suffixe "DEBUG" ou ":DEBUG" peut être ajouté à pageType pour ajouter des information de debug lors de la mise au point du filtre (avec JSOUP uniquement). Exemple "HTMLDEBUG" ou "HTML:DEBUG".
Les expressions unitaires JSOUP doivent être séparées par un double slash ( '//'). Exemple : div.TempoDay:contains(Tempo d'aujourd'hui)//ul.tempoColor//li.white:contains(X)
Trois mots-clés, à considérer comme une expression JSOUP, sont réservés pour des opérations particulières :
- ITEMS_NB : Permet de voir le nombre d'items sélectionnés. Le suffixe ":RET" permet de retourner ce résultat à callbackFunction. Exemple : "//xxxx//yyyy//ITEMS_NB:RET"
- ITEMS_BODY : Permet de voir le contenu texte (hors balises HTML). Le suffixe ":RET" permet de retourner ce résultat à callbackFunction.
- ITEMS_HBODY : Permet de voir le contenu avec balises HTML. Le suffixe ":RET" permet de retourner ce résultat à callbackFunction.
(Voir tutoriel ici).

void httpCall(String url,String params, String callbackFunction, String method, String filter, String pageType, String launchScenario )
Valide sur Android <= 5.0. Identique à la fonction précédente mais offre la possibilité de lancer un scénario de ZiBASE sur un résultat non nul suite à une recherche par la fonction XPath (sur une page XML) ou JSOUP (sur une page HTML).
launchScenario peut être de la forme "xxx:yyy" auquel cas, le scénario 'xxx' sera lancé si le résultat de la recherche est non nul et le scénario 'yyy' sera lancé si le résultat de la recherche est  nul. NB: Les libellés de scénarios ne peuvent contenir le caractère  ':'.
(Voir tutoriel ici).

 


Fonctions et facilités dédiées à la station météo Netatmo

Exemple d'application : Mise en place d'une sonde virtuelle en une ligne de code

void measureNetatmoByLogin (String username, String password, String callbackFunction, String target, String type )
Valide sur Android <= 5.0. Lecture directe d'informations sur station météo Netatmo en une seule fonction, par requête faite sur la plateforme Netatmo. Cette fonction ne requiert pas de serveur PHP intermédiaire. (La procédure d'identification Oauth2 y est également intégrée)
String username, String password : Le login et le mot de passe de votre compte chez le fournisseur de l'objet communicant.
String callbackFunction: Nom de la Fonction JavaScript appelée en retour. Le nom est specifié ici sous forme de simple chaîne de caractères. Elle est appelée avec 2 arguments; soit la fonction foo("info", validity) où info est l'information retournée et validity le drapeau montrant la validité du token (1 (true): Token Ok; 0 (false): Message d'erreur (à la place du token) retourné par le serveur). Mettre callbackFunction à null ou "" si aucun CallBack n'est souhaité.
"info" peut être de différente nature, JSON (ensemble de données) ou Float (donnée de sondes) selon le champ target.
String "target" : Contient le nom arbitraire de la station ou du module à sélectionner (exemple: "Extérieur"). Plusieurs valeurs sont réservées:
- "stations" : retourne une entité JSON contenant les données relatives aux stations de votre installation (stations=stations (base) connectées sur secteur et Wifi).
- "station" : retourne l'information demandée fournie par le champ "type" de la première station rencontrée (ce qui évite d'avoir à connaître le nom de sa station).
- "module" : retourne l'information demandée fournie par le champ "type" du premier module rencontré (ce qui évite d'avoir à connaître le nom de son module).
String "type" : Contient la grandeur à mesurer : Choisir un mot-clé (Attention : orthographe stricte !) parmi : "Temperature", "Humidity", "Noise", "CO2", "Pressure", "min_temp", "max_temp".

void measureNetatmoByLogin (String username, String password, String callbackFunction, String target, String type, String TCprobe)
Valide sur Android <= 5.0. Identique à la fonction précédente mais permet de mettre en cascade une sonde virtuelle thermomètre/Hygromètre de ZIBASE Multi (voir trace dans le suivi d'activité pour récupérer l'ID OSxxxxx), soit la possibilité d'avoir2 sondes virtuelles si vous avez par exemple une station Netatmo et son module sur piles, ou plus si vous avez des périphériques Netatmo supplémentaires.
TCprobe : Numéro de canal de sonde. "CH" peut précéder ce numéro. Exemple de format valide : "12", "CH12".

void getNetatmoTokenByLogin(String username, String password, String callbackFunction)
Valide sur Android <= 5.0. Permet de récupérer le Token associé à votre compte par l'intermédiaire d'une fonction CallBack foo (token, validity). validity =1 : token valide; validity =0 : token invalide et replacé par le message d'erreur fourni par le serveur Netatmo. .
A noter qu'un token donnéa une certaine durée de vie (3H chez Netatmo), cette fonction doit donc être appelée pour solliciter un nouveau token si une erreur intervient sur la lecture d'information via la fonction ci-dessous.

void getNetatmoTokenByLogin(String username, String password, String callbackFunction)
Valide sur Android <= 5.0. Lecture d'informations sur station météo Netatmo à partir du token, par requête faite sur la plateforme Netatmo. Les champs callbackFunction, target et type sont les mêmes que pour measureNetatmoByLogin(). Préférer measureNetatmoByLogin() qui est d'un usage plus simple puisque que le token n'est pas à gérer.

NB : Veuillez à ne pas faire des appels incessants et inconsidérés à la plateforme Netatmo, sans quoi votre compte sera temporairement suspendu par cette plateforme. Espacez vos requêtes de quelques minutes minimum.

 


Fonctions liées au transport de données sur UDP

int sendUdpStr(String destAdrStr, int port, String dataStr,String encoding )
Envoi d'un paquet UDP sur le réseau. Retourne 1 si pas d'erreur. Retourne 0 si erreur rencontrée.
String destAdrStr : Chaîne de caractères de l'adresse IP ou nom de domaine,  destinataire du paquet UDP. Exemples : "192.168.1.24" ou "myDomain.com". Un broadcast peut être fait avec par exemple "192.168.1.255" ou de manière plus générale avec "255.255.255.255" qui peut être abrégé en le remplaçant par le mot "broadcast".
Il peut être utile de spécifier une liste de destinataires, notamment pour un broadcast, ou pour le destinataire d'authentifier la source du paquet (car cette liste est cryptée et difficile à reproduire).  Pour cela, il suffit d'adjoindre à DestAdrStr (après ":"), une liste de mots clé où les destinataires pourront se reconnaître grâce à leur propre mot clé (contenu ou non dans cette liste). Plusieurs destinataires peuvent partager le même mot clé. Exemple : "broadcast:keyword1 keyword2 keyword3". L'inconvénient de l'usage de ces mots clé est qu'il faut bien entendu les transporter dans le paquet sous un format convenu entre expéditeur et destinataire(s) du paquet et donc nécessairement entre ZiBASE Multi. Sans mots clé, il est possible d'interagir avec n'importe système à distance que les données soient de type ASCII, accentués avec l'ISO8859-1 ou UTF-8,  ou binaire via un codage intermédiaire Base64
int port : port UDP destinataire entre  1024 et 65535. Pour rappel, Android interdit l'usage de ports inférieurs à 1024.
String dataStr : Chaîne de caractères représentative des données à transporter.
String encoding : Options d'encodage des données. Si la chaîne de caractères à émettre est à convertir en UTF-8, précisez "UTF". Si elle est de type ISO8859-1 ou si aucun encodage n'est souhaité, préciser "ISO" ou "" (cas par défaut). Pour envoyer des données binaires, il est nécessaire de les présenter dans dataStr dans un format encodé String Base64 (voir fonctions JavaScript atob() et btoa()) et de préciser comme encodage "decodeBase64" pour que les données soient binaires au niveau du paquet UDP. Si vous souhaitez que la chaîne dataStr n'apparaisse pas en clair, précisez comme encodage "encodeBase64" ou présenter les comme déjà encodées en Base64. Il est possible de préciser à la fois le type de la chaîne et l'encodage. Exemple "decodeBase64 UTF". Naturellement, le destinataire doit connaître ces informations et éventuellement faire des opérations inverses pour récupérer les données. Attention,  le format UTF n'est pas l'inverse d'ISO8859-1. Des caractères accentués mal affichés sont symptomatiques d'un problème UTF/ISO. Ne pas encoder avec l'option "UTF" une chaîne de caractère déjà encodée en UTF-8 ( l'encodage serait alors double). Il est préférable d'avoir un fichier source et une chaîne dataStr codé en IS8859-1 car il est possible de l'encoder ou non en UTF8 dans le paquet UDP, alors qu'une chaîne dataStr déjà présentée encodée UTF-8 ne peut être convertie en 8859-1 dans le paquet UDP.

NB: Afin de donner le maximum de flexibilité, la liste des mots clé n'est pas une liste au sens propre mais une chaîne de caractères ordinaire (CC), car il suffit que le mot-clé à reconnaître soit une sous-chaîne de caractères incluse dans la chaîne CC,  sans cadrage particulier. Par exemple si l'émetteur envoie "22Zodianet123 WikiWiki",   le récepteur ayant pour mot clé "Zodianet" se reconnaitra car le mot-clé "Zodianet" est inclus dans "22Zodianet123 WikiWiki". Il faut donc être prudent avec des mots clé dérivés les uns des autres.

L'utilitaire logiciel Wireshark ( https://fr.wikipedia.org/wiki/Wireshark) peut être utile et facile à mettre en oeuvre sur des paquets broadcastés. Pour des paquets non broadcastés, il vous faut rapidement un vieux Hub Eth 10Mb/s en coupure du lien à observer car un switch Ethernet ne marchera pas ! Un Hub Eth diffuse toujours les données unicast sur la totalité de ses ports (1->N), c'est la différence avec le switch Eth (1->1 parmi N).

Le passage de paramètres entre Javascript et le moteur Java de ZiBASE Multi ne peut pas techniquement s'appliquer sur des données binaires. Le format Base64 est là pour contourner cet aléa en passant par un intermédiaire "String". Pour information, JavaScript et Java peuvent chacun de leur côté manipuler des données binaires (tableaux d'octets).

Fonctions utiles de conversion sur des paquets UDP binaires :

function arrayBufferToBase64( buffer ) {  // JavaScript / convert  Byte Array to base64
var base64String = btoa(String.fromCharCode.apply(null, new Uint8Array(array)));
return (base64String);
}

function base64ToArrayBuffer(base64) { // JavaScript / convert base64 to Byte Array
var binary_string =  atob(base64);
var len = binary_string.length;
var bytes = new Uint8Array( len );
for (var i = 0; i < len; i++)        {
bytes[i] = binary_string.charCodeAt(i);
}
return bytes;
}



int receiveUdpStr(String keyWord, int port, String callBack,  String encoding)
Réception en continu de paquets UDP du réseau et fourniture en continu des données à une fonction de callback.  Retourne 1 si pas d'erreur. Retourne 0 si erreur rencontrée.
String  keyWord : Mot clé attendu dans le paquet UDP pour être accepté. Mettre null (sans guillemets !) ou "" pour ne pas avoir de mot clé (ce qui sera toujours le cas si la source n'est pas une ZiBASE Multi) . Le mot clé doit comporter minimum 6 caractères. Choisir des caractères dans les ensembles A-Z,  a-z,  ou 0-9. La différence majuscule/minuscule est faite.
int port : Port UDP écouté entre  1024 et 65535. Plusieurs fonctions  receiveUdpStr() ne peuvent pas écouter le même port. Une déclaration sur un port écrase la précèdente.

String callBack : Fonction Javascript appelée (exemple : "foo")  lorsqu'un paquet a été reçu et accepté. Son format avec arguments est  callBack (String receivedString, String sourceIP).
String encoding : Options de décodage des données. Si la chaîne de caractères reçue est de type UTF-8, précisez "UTF" s'il est souhaité de la décoder. Si elle est de type ISO8859-1, préciser "ISO" ou "" (cas par défaut). Pour recevoir des données UDP transmises en binaire,  préciser comme décodage "encodeBase64". Si  la chaîne dataStr a été cryptée en Base64, précisez comme encodage "decodeBase64". Il est possible de préciser le type de la chaîne et l'encodage/decodage Base64 simultanément. Des caractères accentués mal affichés sont symptomatiques d'un problème UTF/ISO.

NOTA : le callBack de receiveUdpStr() fonctionne par injection JavaScript. Cela a 2 conséquences:  Android 4.4 est le minimum requis et il ne doit pas être fait d'ouverture de page HTML5 après cette la déclaration sans quoi la fonction receiveUDPStr() perdra son callBack. Il est donc indispensable de ne procéder ultérieurement qu'à des injections de scripts.


int initBroadcastJSCmd(String recKeyWord, String emitKeyWords)
Initialisation des mots clé du système d'exécution à distance de commandes JavaScript. Retourne 1 en cas de succès. Retourne 0 en cas d'échec. Cette fonction DOIT être positionnée dans un script défini dans un scénario lancé lors de l'initialisation de ZIBASE Multi.
ZiBASE Multi peut demander à des ZiBASE tierces sur le même LAN d'exécuter une séquence de javaScript (laquelle peut comporter plusieurs instructions séparées par ";"). Ce système s'appuie sur les fonctions sendUdpStr() et receiveUdpStr() mais le message transmis n'est pas rendu disponible à l'utilisateur sous forme de chaîne de caractères, mais directement interprété en JavaScript. 
String recKeyWord : Mot clé utilisé pour recevoir et interpréter des commandes
.
Si receivingKeyWord est null ou de taille inférieure à 6 caractères, la réception est désactivée.
String emitKeyWords : Mots clé utilisés par défaut uniquement pour émettre des commandes. Si emitKeyWords est null ou de taille inférieurre à 6 caractères, l'émission est désactivée.

NOTA: Afin de pouvoir fonctionner sur des systèmes sans licence et donc sans capacité de lancer des scénarios, recKeyWord et emitKeywords sont initialisés par défaut à la valeur "Zodianet". Des ZiBASE Multi sans licence sont donc capables de servir de "Périphériques Multimedia" à des ZIBASE Multi qui bénéficient d'une licence. De manière générale, toute ZiBASE Multi peut servir de périphérique pour une autre si son RecKeyWord "matche".

Dans la mesure où recKeyWord est égal à emitKeywords (ou plus exactement inclus), une ZIBASE Multi qui émet un ordre, va s'inclure elle-même dans la liste des ZIBASE réceptrices. Dans la mesure où ils sont différents, elle s'en exclut.

 


int broadcastJSCmd(  String commandJS, String destKeywords)
Emission d'un séquence de commandes JavaScript avec une liste de mots clés. Retourne 1 en cas de succès. Retourne 0 en cas d'échec. Le ou les récepteurs qui reconnaîtront leur mot clé interpréteront la séquence de commandes JavaScript
PS : Le cas arrive très rapidement où on doit doit spécifier une "String elle-même dans une String". Par exemple : network.broadcastJSCmd("android.speaks('ALERTE!')");  En JavasScript, il est possible d'avoir 2 délimiteurs interchangeables ' et " (quote et double-quote) avec lesquels on peut se sortir de cas de "double niveaux". On peut aussi avoir le cas d'un triple niveau avec ALERTE AUJOURD'HUI! (entre AUJOURD et HUI, il y a un quote....) Dans ce cas, il est nécessaire de faire appel au backslash (doublé ou quadruplé pour des raisons qu'il est difficile d'expliquer ici) : network.broadcastJSCmd("android.speaks('ALERTE AUJOURD\\\\'HUI!')");

 


int broadcastJSCmd(  String commandJS)
Identique à la fonction précédente mais avec la liste de mots clés établis par défaut par la variable emitKeyWords de la fonction initBroadcastJSCmd().

int launchBroadcastJSCmdDaemon()
Lance le processus permanent d'écoute sur le port UDP 50099 pour interpréter des commandes JavaScript avec les paramètres qui ont été donnés préalablement par initBroadcastJSCmd(). ZiBASE Multi exécute cette fonction systématiquement après le lancement des scénarios lancés au démarrage de sorte que l'utilisateur n'a normalement pas usage de cette fonction.


Remarque : Le lancement de commandes à distance peut paraître complexe. Pour vous y initier, déclarez en moins de 30 secondes un nouveau scénario avec une incrustation JavaScript avec simplement pour contenu :  network.broadcastJSCmd("android.speaks('ALERTE')");

Enregistrer puis cliquez "Tester le scénario". Toutes les ZiBASE Multi (versions à jour !)  sur votre LAN réagiront alors. Votre intérêt pour sophistiquer ce "broadcast basique" viendra alors ensuite !