IoT
openHAB 3.0 - gestion de groupes d'Items

openHAB 3.0 - gestion de groupes d'Items

Au fur et à mesure que l’on ajoute des Bindings, des Things et des Items sous openHAB 3.0, la liste peut rapidement devenir très longue. En outre, si l’on souhaite par exemple exécuter un script à chaque fois qu’un Item est mis à jour (cf. tutoriel openHAB 3.0 - accès à l’état d’un item depuis JavaScript pour la mise en place d’une règle déclenchée sur un événement), il va falloir recopier la règle pour chacun des Items. L’idée est donc ici de créer un groupe d’Items et d’associer la règle (et le script) au groupe, et non à chaque Item.


Placer des Items dans un Group

Création d’un Group

Voici la liste des Items dont nous disponsons sur notre plateforme openHAB.

Groups - 1
Groups - 1

Pour créer le groupe il faut se rendre sur la liste des Items et cliquer sur le bouton « + » blue en bas à droite.

  • SettingsThingsBlue « + »Add Item

Dans la fenêtre de création de cet Item, cliquer sur Type pour choisir Group. Définir ensuite le nom (interne) et le Label de cet Item (dans cet exemple Group, InoValley 4101).

Groups - 2
Groups - 2

Le groupe apparaît alors comme un nouvel Item dans la liste.

Groups - 3
Groups - 3

Si nous affichons le détail de ce élément, nous pouvons constater que ce groupe ne contient pour l’instant aucun Item (cf. section Direct Group Members).

Groups - 4
Groups - 4

Ajout d’Items au Group

Pour ajouter des Items à notre groupe, nous allons justement cliquer sur Change dans cette section Direct Group Members, puis sur Members pour afficher la liste des Items définis sur notre plateforme openHAB.

Groups - 5
Groups - 5

Groups - 6
Groups - 6

Une fois les Items sélectionnés, ne pas oublier de cliquer sur Apply pour appliquer ces changements et de valider.

Groups - 7
Groups - 7

Groups - 8
Groups - 8

Les Items ajoutés apparaissent maintenant dans la section Direct Group Members dans le détail de notre Group.

Groups - 9
Groups - 9

Mettre un Group dans un Group

Il est à noter qu’openHAB nous permet d’ajouter un groupe dans un groupe, et donc de gérer ainsi une hiérarchie de groupes (cf. documentation).

En suivant la même démarche que précédemment, nous avons créé un second groupe nommé Group, InoValley a401. Toujours selon la même procédure, nous créons maintenant un 3ème groupe nommé Group, InoValley All Items dans lequel nous allons cette fois placer non pas des Items mais des Groups.

Groups - 10
Groups - 10

Groups - 11
Groups - 11

Groups - 12
Groups - 12

Notons au passage que si nous affichons maintenant le détail du Group Group, InoValley 4101, openHAB nous indique dans la section Direct Parent Groups que cet élément fait partie du Group Group, InoValley All Items.

Groups - 13
Groups - 13


Définir une Rule sur un Group

Voyons maintenant comment définir une règle qui exécutera un scrip JavaScript lorsqu’un des éléments du groupe sera mis à jour. Nous utilisons pour cet exemple le Group Group, InoValley 4101.

Pour la création de la règle nous allons suivre la même procédure que dans mon précédent tutoriel tutoriel openHAB 3.0 - accès à l’état d’un item depuis JavaScript.

Rule - 1
Rule - 1

Notons que lors de la sélection de l’Item qui sera la source des événements déclencheurs il faut bien cocher la case Show non-semantic pour faire apparaître les groupes que nous avons créés.

Rule - 2
Rule - 2

L’événement qui nous intéresse ici sera had a member update, c’est-à-dire quand un des Items du groupe sera mis à jour, ce qu’openHAB interprète comme “This triggers the rule if the state of a member of an item group is updated (even if it does not change)”.

Rule - 3
Rule - 3

Le script JavaScript que nous associions à cette règle se contente d’inscrire une ligne de le log indiquant le nom de la machine et qu’un membre du groupe a été mis à jour (lignes surlignées en bleu).

Rule - 4
Rule - 4

Rule - 5
Rule - 5

Rule - 6
Rule - 6

La plateforme openHAB fournit des variables d’environnement supplémentaires pour nos script afin que nous puissions avoir plus d’informations sur l’événement qui a déclanché cette règle. C’est le cas par exemple de la variable triggeringItem. Nous pouvons alors modifier notre script JavaScript afin de logger des informations plus détaillées.

Rule - 7
Rule - 7

Rule - 8
Rule - 8

Remarque sur les groupes imbriqués

Il faut noter que si openHAB permet effectivement de créer des sous-groupes, c’est-à-dire de mettre des groupes dans des groupes, les événements had a member update ne concernent que les éléments inclus directement dans un groupe, et non dans les sous-groupes.

Nous avons par exemple testé cette règle sur le groupe Group, InoValley All Items, lequel contient les sous-groupes Group, InoValley 4101 et Group, InoValley a401, lesquels contiennent leurs Items respectifs. Et bien… la règle n’est jamais déclenchée :-(

Cela réduit donc fortement l’intérêt des sous-groupes (en tout cas pour l’utilisation que nous souhaitions en faire). Mais, comme indiqué dans la documentation d’openHAB, s’ils nous permettent de créer des sous-groupes cela ne correspond pas (pour l’instant) à la philosophie du modèle d’événements qu’ils ont développé. Et de nous conseiller de n’avoir donc qu’un seul niveau de groupes pour mettre en place des règles.


Conclusion

Dans ce tutoriel nous avons donc vu comment regrouper nos Items pour appliquer la même règle à tout un Group, quel que soit le membre qui sera mis à jour. Pour l’écriture de nos scripts (ici en JavaScript), openHAB nous fournit automatiquement différentes variables d’environnement. C’est le cas par exemple de la variable triggeringItem qui nous permet de récupérer des informations quant à l’événement qui aura déclenché la règle.

Pour ce tutoriel, toutes les étapes ont été réalisées directement via l’interface graphique d’OH3.

Pour toutes remarques ou suggestions, n’hésitez surtout pas à me contacter sur manuel.munier@univ-pau.fr.