IoT
openHAB 3.0 - accès à l'état d'un item depuis JavaScript

openHAB 3.0 - accès à l'état d'un item depuis JavaScript

Dans un précédent tutoriel (openHAB 3.0 - création d’un switch qui publie son état via des messages MQTT) je vous avais présenté comment il était possible de publier un message MQTT à chaque fois que l’on actionnait un item de type switch sous openHAB. J’avais pour cela défini 2 règles: l’une sur l’événement received a command ON, l’autre sur l’événement received a command OFF. Quand elles étaient déclenchées, ces règles exécutaient chacune un script écrit en JavaScript (type ECMAScript), lequel envoyait un message MQTT dont le contenu était hard codé: ON ou OFF. L’objectif du totoriel d’aujourd’hui est de (re)faire la même chose… mais avec une seule règle.

Comme pour mes tutoriels précédents, les différentes étapes ont été réalisées via l’interface graphique d’openHAB3. L’utilisation des fichiers de configuration textuels… sera étudiée ultérieurement…


Obtenir l’état d’un item openHAB

Nous allons donc créer une seule règle qui sera déclenchée à chaque changement d’état de notre switch. Comme indiqué sur ce post How to Create Rules in OpenHAB 3 using JavaScript / ECMAScript, le JavaScript associé à cette règle utilisera la fonction itemRegistry.getItem(<ItemId>).getState() pour récupérer l’état de l’item.

  • création d’un switch TestSwitch002

Test Switch 002 - 1
Test Switch 002 - 1

Test Switch 002 - 2
Test Switch 002 - 2

  • création d’une seule règle sur l’événement was updated avec le JavaScript suivant (ECMAScript):

    actions.get("mqtt","mqtt:broker:ccc94a5065").publishMQTT("testswitch002", itemRegistry.getItem("TestSwitch002").getState().toString())
    

Test Switch 002 - 3
Test Switch 002 - 3

Test Switch 002 - 4
Test Switch 002 - 4

Test Switch 002 - 5
Test Switch 002 - 5

Test Switch 002 - 6
Test Switch 002 - 6

  • on récupère l’état de l’item TestSwitch002 via l’instruction itemRegistry.getItem("TestSwitch002").getState() puis on le convertit en String pour construire le message MQTT → il n’est plus nécessaire d’avoir un script pour chaque état

Test Switch 002 - 7
Test Switch 002 - 7

On utilise ensuite MQTT Explorer (par exemple) connecté sur notre broker pour voir les messages. Dans ItemsTest Switch 002 on peut actionner le switch ce qui déclenche bien l’envoi de messages MQTT !


Modifier l’état d’un item openHAB

Dans la deuxième partie de ce tutoriel je vous montre comment modifier l’état d’un item (ici un switch) depuis un JavaScript (déclenché par une règle). J’utilise pour cela la fonction events.sendCommand(<ItemId>, <NewState>).

  • création d’un switch TestSwitch003

  • création d’une seule règle sur l’événement was updated avec le JavaScript suivant (ECMAScript) pour “recopier” l’état de l’item TestSwitch003 sur l’item TestSwitch001:

    events.sendCommand("TestSwitch001", itemRegistry.getItem("TestSwitch003").getState())
    

Test Switch 003 - 1
Test Switch 003 - 1

Test Switch 003 - 2
Test Switch 003 - 2


Conclusion

Encore un retour d’expérience sous openHAB 3.0, cette fois avec les instructions JavaScript permettant de consulter et de modifier l’état d’un item. Si ça peut servir à d’autres personnes, ce sera avec plaisir. Si vous avez des remarques ou des suggestions, n’hésitez pas à me contacter sur manuel.munier@univ-pau.fr.

Prochaine étape:

  • sur une instance d’openHAB avoir un switch qui envoie des messages MQTT, lesquels seront reçus sur une autre instance d’openHAB pour modifier l’état d’un item…