Interfaçage avec Home I/O
Un script Python peut interagir avec un composant logiciel écrit dans un autre langage de programmation.
Home I/0 est un logiciel de simulation d'une maison intelligente. Il a été conçu pour initier les élèves, du collège à l'université, à l'automatisation, la domotique, les transferts de chaleur, etc. Il a été développé avec Unity3D et le langage de programmation C#.
Chaque objet de la maison (lumière, store, porte de garage, chauffage, climatisation, etc) est pilotable en :
- mode câblé via des interrupteurs disposés dans la maison virtuelle
- mode externe via des scripts Python exécutés au moyen du SDK
Le module pythonnet
Ce module permet d'interagir de façon simple avec le .NET Common Language Runtime (CLR) en charge de l'exécution des programmes écrits en C#.
Un module vient compléter le jeu d'instructions de base du langage Python. Il doit donc être installé avant d'être utilisé. La commande sous Windows est la suivante :
python.exe -m pip install pythonnet
Et sous Linux ou macOS
python3 -m pip install pythonnet
Après avoir téléchargé le SDK de Home I/O compatible avec votre version de Python, vous pouvez tester le script ci-dessous.
import sys
import time
import clr
# Chargement de la bibliothèque Home I/O
clr.AddReference('EngineIO')
from EngineIO import *
print("Home I/O & Python are such good friends thanks to pythonnet!")
# Création d'une variable associée à la lampe d'adresse 0
# (cf. nomenclature : https://docs.realgames.co/homeio/fr/memory-addresses/)
livingRoomLight = MemoryMap.Instance.GetBit(0, MemoryType.Output)
for i in range(5):
# Modification de l'état de la lampe
livingRoomLight.Value = not livingRoomLight.Value
# Affichage de l'état de la lampe.
print("Light is on? " + str(livingRoomLight.Value))
# La méthode Update() écrit l'état de lampe (propriété value) dans l'objet MemoryMap
MemoryMap.Instance.Update()
# Attente d'une seconde
time.sleep(1)
# Libération des ressources allouées
MemoryMap.Instance.Dispose()
print("Bye!")