Hi zusammen!
Zur Verwaltung von KNX-Szenen habe ich im sh.py Mikrokosmos bisher nichts finden können. Daher ist bei mir etwas Code entstanden; in Anlehnung an den Szenencontroller von fry. Diesen möchte ich hier gern teilen. Da ich mit Python zuvor noch nie was gemacht habe, bitte ich um Nachsicht und freue mich auf evtl. Hinweise...
scene.py ist eine Logik, die Szenen innerhalb von sh.py sowohl speichern als auch abrufen kann -- basierend auf den im sh.py verfügbaren items. Die Konfiguration bzw. der Zentralspeicher der Szenen ist in sich selbst wieder ein String item, bspw. wie folgt:
Eine Szene lässt sich dann innerhalb der logic.conf wie folgt definieren:
watch_item nimmt den Namen eines (zuvor definierten) Szenen Items auf, bspw. wie folgt:
Und scene_items definieren die Elemente der Szene. Man kann also im Anschluss durch setzen des bedroom.scene items auf 0, 1, 2, usw. die entspr. KNX Szene abrufen bzw. mit 128, 129, 123, usw. speichern.
Viel Spaß damit und besten Gruß,
Timo
scene.py Code:
Zur Verwaltung von KNX-Szenen habe ich im sh.py Mikrokosmos bisher nichts finden können. Daher ist bei mir etwas Code entstanden; in Anlehnung an den Szenencontroller von fry. Diesen möchte ich hier gern teilen. Da ich mit Python zuvor noch nie was gemacht habe, bitte ich um Nachsicht und freue mich auf evtl. Hinweise...
scene.py ist eine Logik, die Szenen innerhalb von sh.py sowohl speichern als auch abrufen kann -- basierend auf den im sh.py verfügbaren items. Die Konfiguration bzw. der Zentralspeicher der Szenen ist in sich selbst wieder ein String item, bspw. wie folgt:
Code:
[home] # zentraler Szenenspeicher [[scenes]] type = str cache = on
Code:
[bedroom_scene] filename = scene.py watch_item = bedroom.scene scene_items = bedroom.light.ceiling, bedroom.light.bed, bedroom.light.wardrobe
Code:
[bedroom] [[scene]] type = num enforce_updates = on knx_dpt = 5 knx_listen = 7/0/58
Viel Spaß damit und besten Gruß,
Timo
scene.py Code:
Code:
#!/usr/bin/env python import json # Szenenkonfiguration laden scenesData = sh.home.scenes() scenes = {} if (len(scenesData) > 0): scenes = json.loads(scenesData) # Triggerparameter auslesen sceneNo = str(trigger['value'] & 127) loadOperation = ((trigger['value'] & 128) == 0) watchItemName = trigger['source'] # Szenenkonfiguration initialisieren, falls erforderlich if not watchItemName in scenes: scenes[watchItemName] = {} if not sceneNo in scenes[watchItemName]: scenes[watchItemName][sceneNo] = {} # Szene aus Konfiguration auslesen scene = scenes[watchItemName][sceneNo] # Elemente der Szene behandeln for sceneItem in logic.scene_items: if (loadOperation): if sceneItem in scene: exec('sh.' + sceneItem + '(\'' + str(scene[sceneItem]) + '\')') else: # save operation scene[sceneItem] = eval('sh.' + sceneItem + '()') # Szenenkonfiguration speichern sh.home.scenes(json.dumps(scenes))
Kommentar