HSL 2.0-Framework
1.9
Beschreibung des Frameworks
|
Das HSL 2.0-Framework bietet die Möglichkeit, dass Logikbausteine auf Instanzen anderer Bausteine zugreifen können.
Dies ermöglicht die Kommunikation von Logikbaustein-Instanzen untereinander.
Im Framework sind zwei Methoden vorhanden, um eine Instanz zu erhalten:
Beide Methoden liefern als Ergebnis die zu instance_id zugehörige Logikbaustein-Instanz zurück (oder None wenn
die instance_id ungültig ist). Der Unterschied zwischen den beiden Methoden liegt darin, dass get_instance_by_id(instance_id)
nur auf Instanzen aus dem gleichen Modulkontext zugreifen kann. Die Methode get_instance_from_module_by_id(module_context, instance_id)
liefert unter Angabe des entsprechenden Modulkontexts auch eine Instanz aus einem anderen Modulkontext.
Die instance_id ist eine vom Framework zur Laufzeit des HomeServers eindeutig vergebene ID für die jeweilige Instanz
eines Bausteins. Sie stimmt nicht mit der fünfstelligen Baustein-ID (z.B. 19042) überein. Die instance_id (auch Laufzeit-ID
genannt) kann über die Methode _get_module_id() (des BaseModule) ermittelt werden. Folgender Beispielcode würde die eigene Instanz
(also self) zurückliefern:
self.FRAMEWORK.get_instance_by_id(self._get_module_id())
Die Laufzeit-ID kann einfach über die Verdrahtung von Ein- und Ausgängen zwischen Logikbausteinen ausgetauscht und bekannt gemacht werden.
Folgendes Beispiel zeigt die Kommunikation zwischen Logikbaustein-Instanzen. Dazu wurden 2 Logikbausteine entworfen. Diese 2 Bausteine
werden zur Konfiguration von 3 Lautsprechern (Player) in 3 Räumen, die sich innerhalb eines Haushalts (Büro) befinden, genutzt.
Die Demo-Bausteine finden Sie auch im Beispiel-Ordner unter "\communication_between_instances"
Dieser Baustein enthält den spezifischen Programmcode und regelt zentral die Kommunikation mit der (fiktiven) SpeakerSystem-API. Ein Household (=Haushalt)
bündelt logisch alle im Büro befindlichen SpeakerSystem Devices.
Der Baustein sendet nach Initialisierung der Logik seine Laufzeit-ID auf Ausgang 1 und macht diese damit den Player Bausteinen bekannt.
Dieser Baustein repräsentiert jeweils einen Player (PLAY:1, PLAY:3, usw.). In diesem Beispiel befindet sich jeder Player in einem
eigenen Raum im Büro. Jeder Player Baustein (bzw. jede Instanz des Bausteins) erhält die Laufzeit-ID des Household Bausteins über
Eingang 1. Damit kann er auf die Methoden des Household Bausteins zugreifen und muss nicht direkt mit der SpeakerSystem-API kommunizieren.
Um den Ablauf der Kommunikation zwischen den Bausteinen im Detail zu zeigen, wird im Folgenden jeweils auf die Stellen im Quellcode verwiesen.
Jeder Codezeile wird zur besseren Übersicht die entsprechende Zeile im jeweiligen Quellcode des Bausteins vorangestellt. Der Quellcode des
Household Bausteins befindet sich in der Datei 10705_SpeakerSystem Household.py. Der Quellcode des Player Bausteins befindet sich in der
Datei 10706_SpeakerSystem Player.py.
20 module_id = self._get_module_id()
21 self._set_output_value(self.PIN_O_SPEAKERSYSTEM_PLAYER, module_id)
25 self.household_instance = self.FRAMEWORK.get_instance_by_id(value)(Dies passiert jeweils einmal pro Instanz des Player Bausteins. Also insgesamt drei mal.)
28 self.household_instance.register_for_trackinfo_update(self._get_input_value(self.PIN_I_DEVICE_ID), self.on_trackinfo_event)(Dies passiert jeweils einmal pro Instanz des Player Baustein. Also insgesamt drei mal.)
33 self.household_instance.do_play_or_pause(self._get_input_value(self.PIN_I_DEVICE_ID))
55 if device_id in self.registered_devices.keys(): 56 self.registered_devices[device_id](args["info"])