Mon tout premier Plugin
On va réaliser un plugin avec notre super script heure.php
C'est quoi en fait un plugin ?
Un plugin c'est un utilitaire qui va (éventuellement) enregistrer le script, configurer un ou des périphériques qui y font (éventuellement) appel puis le ou les créer. Contrairement au script, il apparaîtra dans le store.
NB : éventuellement parcequ'on peut concevoir un plugin qui appelle un fichier XML externe, donc sans avoir besoin d'un script.
Références
Documentation : Eedomus, Merguez07
Principe
on va donc créer les 4 éléments, spécifiquement pour notre script "heure.php", puis on les "zipera" avant de les enregistrer sur notre Eedomus.
Dossier de Travail
On va mettre ces éléments dans un dossier spécifique, par exemple "plugin_heure"
Script
Ca tombe bien, en principe, si vous êtes ici, il est déjà fait ! sinon, on ouvre Notepad++, on indique langage: PHP, codage: ANSI, on colle le code, et on enregistre sous: "heure.php"
on le met dans notre dossier "plugin_heure" !
Icône
on va aller choisir une icône pour notre périphérique "heure", au lieu de se casser la tête à la créer ou se compliquer la vie dans votre interface Eedomus ou récupérer une icône se fait en plusieurs temps, on va directement aller en chercher dans la page d'Abalava (dans Calendrier puis Horloge par exemple)
Et... on va créer un sous dossier "img" dans lequel on mettra notre icône.
Aide
On va faire simple, d'abord on se réfère aux explications dans trucs et astuces, ensuite, on va faire dépouillé: on ouvre un nouveau document dans Notepad++, on mets le codage à ANSI, dans langage, on indique Markdown, et on enregistre sous (dans le dossier de travail, ici, plugin_heure) pour lui donner un nom qui sera obligatoirement : "readme_fr.md"
Comme on aura automatiquement l'icône et le nom de notre plugin en en-tête (définis dans le json, on y vient, c'est le dernier chapitre), il suffit juste de remplir une petite indication:
Ce plugin vous donnera l'heure sous la forme :
**hh:mm:ss**
*NB: il ne se mettra à l'heure que toutes les minutes, il ne s'agit ici que d'un exemple dans le cadre des mini-didacticiels "Pied à l'Etrier"*
## Installation
Cliquez sur le plugin, puis faites **créer**, puis dans le fenêtre de configuration, indiquez seulement la pièce dans laquelle il doit apparaître.
on l'enregistre.
Json
Ouf, il ne nous reste plus que le gros du morceau ! vous avez vu les références, en premier chapitre, aussi le petit mot dans trucs et asctuces dans cette dernière nous avons vu qu'il ya 4 parties !
- Infos
- Parametres
- Script
- Device
Mais on a vu aussi que la syntaxe nous demande de les présenter comme ceci :
- {
- couples de la section description (,)
- [ {paramètre1},{paramètre2}...],
- [ {script} ],
- [ {device1},{device2}...]
- }
On va donc remplir l'essentiel:
Description
cela se passe de commentaires... éditez éventuellement le nom de l'icône, le nom du plugin: attention, ce n'est pas son plugin_id qui est une référence interne, mais name_fr, la date...
On commence bien sur par une accolade
{
"plugin_id": "heure",
"name_fr": "Heure",
"icon": "heure.png",
"version": "1.0",
"creation_date": "2020-01-01",
"modification_date": "2020-01-01",
"author": "eedotrucs",
"description_fr": "heure sous la forme hh:mm:ss",
"description_en": "",
"description_es": "",
"description_it": "",
"description_de": "",
"forum_link": "",
Paramètres
Il manquait donc...
"parameters": [],
On va remplir ce qu'il ya entre crochets: les paramètres, on se contentera ici d'un seul, qui va nous indiquer de ne pas oublier d'aller choisir la pièce ! puisque tous les autres seront préféfinis dans la dernière section. Il ne sera pas suivi de virgule, puisqu'il n'y en a pas de suivant (tout comme le dernier "couple" paramètre)
On aura compris que les paramètres servent à "paramétrer" la création de(s) capteurs(s), et donc d'entrer des infos personnalisées, comme le genre de capteur à créer, son nom, une VARiable... ils affichent des infos, des cases à cocher, des listes ou des entrées de saisie.
{
"parameter": "config_info",
"description": "<b>--------- N\\'oubliez pas ! ---------</b>",
"xtype": "displayfield",
"field": "style: 'padding: 3px;', value: 'N\\'oubliez pas d'\\indiquer la pièce<br>sinon votre capteur serait invisible !'"
}
C'est un paramètre displayfield qui ne fait qu'afficher :
- une description, située dans la première colonne, comme pour tous les paramètres
- un champ, 2ème colonne, ici un texte, sinon, une case à cocher, une liste, une entrée de saisie
Mais pourquoi des \\, des <br> et des <b> et </b> : on a le droit d'inclure des tags HTML de mise en forme, par exemple ici,
du <b>gras</b> ou un retour ligne <br>
Mais, ce code ne doit pas comporter ni de guillemet ni d'apostrophe puisqu'on a les 2 tags de chaîne de caractère déjà imbriqué, on les échappe donc pour les afficher, non pas comme en PHP avec un antisclash, mais avec 2 ... Sinon, vous allez provoquer une erreur (qui ne sera pas reconnue dans les pages de test et pendant l'enregistrement sur lEedomus) qui va vous faire un sablier éternel lors de la création !
Si jamais cela vous arrive, voir dans trucs et astuces
Script
Il manque aussi
"scripts": [],
De même, on va remplir ce qu'il ya entre crochet, ici assez simplement:
{
"name": "heure.php"
}
Device
Il ne reste que le device, le périphérique à créer, il n'aura pas de [Tableau de valeurs],
il manque donc, sans virgule à la fin, puisque c'est le dernier :
"devices": []
On va donc remplir entre les crochets, encore une fois ici, un seul, donc pas de virgule à la fin de l'accolade pour indiquer qu'il y'en a un autre. Attention, le device ayant aussi des paramètres, il y aura un autre couple d'accolades les définissant et faisant suite à "parameters":{,,...}
{
"device_id": "device_heure",
"module_id": "51",
"type": "http",
"name_fr": "Heure",
"icon": "heure.png",
"utilisation_id": "35",
"parameters":
{
"value_type": "string",
"ignore_errors": 3,
"RAW_URL": "http://localhost/script/?exec=heure.php",
"RAW_XPATH": "//heure",
"POLLING": "1"
}
}
On explique presque ligne à ligne ?
- l'id est un identifiant interne, ("heure" est déjà utilisé par le nom du plugin)
- le N° de module indique (51) qu'on veut un Capteur HTTP
- le type est donc http
- l'utilisation est "autre" (35) puisqu'il n'ya pas d'utilisation "heure" prédéfinie
- la valeur est une chaine de caractère (hh:mm:ss), donc string
- ignore error à 3 : (voir dans les "paramètres expert")
- l'URL appelée (script)
- le XPath qui va bien (//heure)
- et le polling pour test : rafraichissement toutes les minutes
- On a fermé 2 accolades, puisque... on en a ouvert 2
Encore une fois, ce n'est qu'un exercice, cela ne sert pas à grand chose d'avoir l'heure à la seconde près toutes les minutes, néanmoins, vous avec avec ça la possibilité de comprendre le plugin "Horloge" dans le store qui affiche l'heure quand il est appelé sous forme de nombre : 07:20:24 devient 720.
Vous pouvez d'ailleurs l'améliorer en choisissant sa valeur de sortie, mais il faudra apprendre à récupérer les VAR et s'en servir avec un conditionnel dans le script... à vous de jouer...
On ferme !
C'est bien gentil d'écrire du code, mais il faut le terminer ! vous vous souvenez qu'on a commencé par un accolade qui englobe donc tout le Json ? et bien, fermons la:
}
Contrôle
Si vous avez tout fait comme il faut, dans votre fenêtre Notepad++, vous avez donc forcément le bon code, vous pouvez le mettre en forme pour y voir plus clair, bien aligner, décaler avec des tabulations et pour en être sur qu'il n'y a pas d'erreurs, vous allez ouvrir avec votre navigateur, une fenêtre de contrôle puis vous allez copier/coller votre code à gauche, et en faisant Copie> pour afficher dans la fenêtre de droite : toute erreur sera signalée immédiatement. Pour voir la structure, cliquez en haut à droite sur Tree.
Enregistrer le plugin
Tout va bien ? bon, on va zipper nos 3 fichiers et notre dossier img (envoyer vers: dossier compressé sous windows, etc) puis on va dans le store cliquer sur "Publier sur le Store; entrez votre ZIP puis une courte description obligatoire... et HOP !
Vous voila avec un plugin _PRIVATE que vous pouvez tout de suite tester !.
N'oubliez pas de le supprimer et aussi de supprimer le script associé qui ne partira pas tout seul.
Et Après ?
En préparation, convertir un HTML en XML, ce qui est la fonction principale des scripts.
... dans la série 'pied à l'étrier'.