Affichage des métriques des périphériques IoT avec Kendo UI Builder
En utilisant un composant personnalisé et la propriété du modèle, nous allons explorer comment vous pouvez facilement interagir avec les périphériques IoT en utilisant Kendo UI Builder.
Dans ce blog suivant dans mon Kendo UI Builder comment faire série, nous allons étudier un exemple de composant personnalisé qui interagit avec un autre composant sur la page via la propriété du modèle. Plus précisément, le composant affichera une mesure à partir d'un périphérique IoT dans une pièce. Les données des différentes salles et appareils sont obtenues via un fournisseur de données REST.
Nous allons utiliser deux instances de ce composant sur une vue vide pour montrer la température et l'humidité dans la pièce. La pièce est sélectionnée à partir d'un composant de liste déroulante sur la même vue.
La vue contenant la liste déroulante et les deux composants personnalisés ressemble à ceci:
Cet exemple de composant est construit à partir de l'échantillon de base Plus tôt dans la série Si vous ne le connaissez pas, vous pouvez en lire plus à ce sujet ici .
Pour suivre, téléchargez le template samples zip de github ou clonez le référentiel, puis ouvrez le dossier components / custom-device-metrics-comp et suivez les mêmes étapes décrites dans ce post pour installer ce modèle dans votre application cible.
Requisites
Nous devons configurer quelques éléments:
- Un serveur REST de test qui sert des métriques de périphérique pour plusieurs pièces
- Un fournisseur de données au service REST
- Une vue vide contenant une combobox pour sélectionner salle nous voulons des informations de
Nous allons tirer parti du serveur REST et des données fournisseur dans plusieurs autres échantillons de cette série, alors s'il vous plaît prendre les deux minutes qu'il faut pour le configurer.
Configuration du serveur REST (2 minutes)
Les métriques de l'appareil seront fournies par un serveur REST de test. La configuration est simple grâce à json-server, un serveur REST à codage nul:
- Installation avec commande: npm install -g json-server ( cliquez ici pour plus d'informations )
- Démarrez le serveur: json-server –watch dbIoT.json –port 3004 (ceci démarre le serveur avec l'ensemble de données dans le fichier dbIoT.json, disponible dans this github repo )
- Vous pouvez vérifier l'accès en accédant à cette URL http: // localhost: 3004 / devices
Vous devriez obtenir une liste complète d'environ 20 enregistrements qui devraient ressembler à cet exemple d'enregistrement:
01.
{
02.
"id": 1,
03.
"pièce": "Schrödinger",
04.
"currentTemp": 21,
05.
"setTemp": 20,
06.
"hum": 65,
07.
"co2": 200,
08.
"voc": 4
09.
}
Configuration du fournisseur de données au service REST
- Création d'une application Kendo UI Builder , enregistrez-le et quittez Kendo UI Builder
- Copiez l'exemple de fichier Data Provider
à partir de : https://github.com/thierryciot/kendoui-builder-template-samples/blob/master/DataProviders/IoT .json
à : [your application name] meta dataProviders IoT.jsonCela vous évitera de devoir configurer le fournisseur de données REST pour le service REST Devices installé à l'étape précédente.
[19659013] Redémarrez Kendo UI Builder et vérifiez que le fournisseur de données IoT est répertorié. Lorsque vous modifiez la source de données Périphériques, vous devriez voir ceci:
Configuration de la vue vide
La vue vide est configurée avec une source de données à notre Suivez les étapes suivantes:
- Dans votre application, créez une vue vide
- Dans le panneau de droite, cliquez sur le bouton Modifier de la propriété Source de données de la vue. et créez une source de données comme ceci:
- Dans la vue vide, dans une colonne de votre choix, ajoutez un composant combobox avec les propriétés suivantes: ] source de données "title =" source de données "/>
Une fois cela fait, nous sommes prêts à créer des instances de notre composant métrique de périphérique et lier ces instances à un champ spécifique de l'enregistrement REST (une pièce avec périphérique métriques) via le modèle "DevicesModel."
Comment définir un composant qui peut être lié à un champ dans ce modèle? s regardez comment nous faisons cela en programmant le fichier de définition du composant.
Définition du composant
Ouvrez les composants de fichier / custom-device-métriques-comp / custom-device-metrics-comp.json [19659003] Il contient les mêmes propriétés que l'échantillon de composant de base, donc ceux-ci devraient vous être familiers. Sinon, veuillez vous référer à ce billet de blog .
Il y a deux nouvelles propriétés:
01.
"valeurPrimitive"
: {
02
"type"
:
"booléen"
03.
"par défaut"
:
true
04.
"caché"
:
true
05.
"ordre"
: 3
06.
},
07.
"modèle"
: {
08.
"type"
:
"chaîne de caractères"
09.
"titre"
:
"Modèle"
10.
"par défaut"
:
""
11.
"editorType"
:
"modelName"
12.
"ordre"
: 4
13.
}
Dans ce post, nous nous concentrons sur le modèle . Nous allons entrer dans les détails de valuePrimitive dans le prochain blog lorsque nous écrivons un composant multi-valeurs.
La propriété du modèle, et plus précisément l'éditeur modelName (property editorType) , fournit un moyen de sélectionner la source de données et le champ à lier à la variable de modèle EJS.
Voici comment la propriété de modèle s'affiche au moment du design, dans le panneau de propriétés:
Pour la première instance de mon composant de métrique de périphérique, j'ai sélectionné le modèle correspondant à ma source de données IoT Devices (DevicesModel), puis j'ai sélectionné le champ currentTemp pour indiquer que le composant Metric doit affiche la température actuelle de la pièce sélectionnée
Pour la deuxième instance, j'ai simplement sélectionné le champ "hum" (Humidité):
Maintenant, il serait opportun de l'essayer par vous-même: accédez à la vue vide créée précédemment et faites glisser deux instances du composant personnalisé dans deux colonnes distinctes Pour chacun d'eux, sélectionnez le modèle et l'une des métriques que vous aimez (comme VOC, CO2, ect …)
Design-Time
Comme nous l'avons fait dans ce post dans l'exemple custom-hello-world-comp nous définissons une icône utilisée dans la palette des composants (Panneau de gauche).
Nous définissons également un modèle:
<
div
>
<%- metric %>: 12
</
div
>
Ce modèle simplement montre l'étiquette de la métrique et une valeur codée en dur
Run-Time
Les modèles d'exécution sont également relativement simples
Il y a deux choses principales dont nous devons nous occuper:
- Nous nous assurons que nous affichons l'étiquette pour Par exemple, nous utilisons la chaîne EJS <%-id%> pour faire référence à l'instance spécifique
- Nous référençons le champ approprié du modèle de données à l'aide de la chaîne EJS <%- model %> (la valeur de cette occurrence sera, pour les instances de composant , DevicesModel.currentTemp et DevicesModel.hum respectivement)
Le code généré pour ceux-ci dépend du framework cible. Alors explorons chacun un peu plus.
Angular
Le modèle ressemble à ceci:
1.
<
div
class
=
"deviceMetric" [19659067]>
2.
[
span
classe
=
"deviceMetricLabel"
> {{$ config.components. <%-id%> .metric}} </
trav
>
3.
[
span
classe
=
"deviceMetricSeparator"
> </
étendue
>
4.
[
span
classe
=
"deviceMetricValue"
> {{$ dataModels. <%- model %>}} </
trav
>
5.
</
div
>
Voir les composants de fichier / custom-device-metrics-comp / angular / template.html.ejs [19659003] Le fichier dactylographié du composant de base de code généré, par exemple, devices.view.base.component.ts, a un littéral d'objet $ dataModels avec une référence à un objet contenant les valeurs de champ que nous voulons rendre dans instances de composant
1.
public $ dataModels: any = {
2.
DevicesModel:
nouveau
IoTDevice ()
3.
};
Et voici la définition de IoTDevice: [19659020] 01.
classe d'exportation IoTDevice
02.
{
03.
identifiant public: number;
04.
pièce publique: string;
05.
public setTemp: number;
06.
public currentTemp: number;
07.
public hum: numéro;
08.
public co2: numéro;
09.
public voc: numéro;
10.
}
L'expression {{$ dataModels. <%- model %>}} sera traduite par le compilateur EJS en {{$ dataModels. DevicesModel.currentTemp >}} pour la première instance du composant personnalisé et en {{$ dataModels DevicesModel.hum >}} pour la deuxième instance, donnant ainsi accès aux valeurs du périphérique actuellement sélectionné (room).
Note: Le générateur de code utilise le nom du fournisseur de données et les noms des sources de données pour générer le nom de classe IoTDevice. Si vous avez utilisé un fournisseur de données différent de celui fourni dans le référentiel github, les noms seront différents.
Comment le modèle est-il mis à jour?
Le modèle est mis à jour chaque fois que la combobox est modifiée. Cela se produit à cause de ce gestionnaire de changement enregistré dans le composant combobox (voir le fichier: generators / angular / generators / module-partagé / templates / components / combo-box / combo-box.component.html dans votre projet généré): [19659137] (valueChange) = "changementHandler ($ événement)"
AngularJS
Voir les composants de fichier / custom-device-metrics-comp / angularjs / directive.html.ejs:
<
div
classe
=
"périphériqueMétrique"
>
<
étendue
classe
=
"deviceMetricLabel"
> {{vm. $ Components. <%-id%> .metric}} </
étendue
>
[19659163] [
étendue
classe
=
"deviceMetricSeparator"
> </
étendue
>
[
span
classe
=
"périphérique MetricValue "
> {{vm. $ ViewModels. <%-model%>}} </
étendue
>
</
div [19659067]>
Le code généré (controller.js) définit $ viewModels comme un tableau de modèles de source de données. L'expression {{vm. $ ViewModels. <%-model%>}} sera traduite par le compilateur EJS en {{vm. $ ViewModels. DevicesModel.currentTemp >}} pour la première instance du composant personnalisé et {{vm. $ viewModels. DevicesModel.hum >}} pour la deuxième instance, donnant ainsi accès aux valeurs du périphérique actuellement sélectionné (room).
Classes CSS
À la fois les frameworks Angular et AngularJS, nous fournissons un ensemble de classes CSS pour personnaliser davantage l'apparence et le contenu. Voici des exemples de définitions de CSS pour mettre en vue des styles:
01.
.deviceMetric {
02.
type de police
:
120%
;
03.
marge
:
1
rem
04.
}
05.
06.
.deviceMetricLabel {
07.
fonte
:
normal
;
08.
}
09.
10.
.deviceMetricSeparator: avant {
11.
Contenu
:
":"
;
12.
marge droite
:
0,6
rem;
13.
}
14.
]
15.
.deviceMetricValue {
16.
font-weight
:
gras
;
17.
}