Skip to content

Einfache Szenensteuerung für SmartHome.py mit smartVISU

Stefan edited this page Aug 9, 2016 · 1 revision

Ziel

Mit möglichst wenig Aufwand weitere Szenensteuerungen in SmartHome.py/smartVISU zu erstellen.

Visualizierungselement

Mit der Logik können in smartVISU ein bis maximal zehn zusammengehörigen Szenentasten platziert werden, die nach Betätigung eine Sekunde lang mit alternativer Hintergrundfarbe dargestellt werden, wie z.B wie folgt:

<span data-role="controlgroup" data-type="horizontal">
    {{ basic.dual('szene_schlafen_s1', 'og.schlafen.szenen.s1', icon1~'light_light_dim_100.png', icon0~'light_light_dim_100.png', 1, 0, 'midi') }}
    {{ basic.dual('szene_schlafen_s2', 'og.schlafen.szenen.s2', icon1~'light_light_dim_100.png', icon0~'light_light_dim_100.png', 1, 0, 'midi') }}
    {{ basic.dual('szene_schlafen_s3', 'og.schlafen.szenen.s3', icon1~'light_light_dim_100.png', icon0~'light_light_dim_100.png', 1, 0, 'midi') }}
    {{ basic.dual('szene_schlafen_s0', 'og.schlafen.szenen.s0', icon1~'audio_rec.png', icon0~'audio_rec.png', 1, 0, 'midi') }}
</span>

Logik

logics/szenen.py

#!/usr/bin/env python                                                                                                                    

szenen_item = sh.match_items(str(logic.watch_item[0])[:-2])[0]

if trigger['value'] == True:
    szenen_item(int(trigger['source'][-1:]))
    for item in sh.match_items(str(logic.watch_item[0])):
        if str(item) != trigger['source']:
            item('Off')
        else:
            item.timer(1, 'Off')

die Items müssen dem Muster *.sN folgen, wobei N eine Ziffer 0-9 darstellt, wie z.B.:

items/*.conf

[og]
        [[bad]]
                [[[szenen]]]
                type = scene
                enforce_updates = true
                     [[[[s0]]]]
                     type = bool
                     [[[[s1]]]]
                     type = bool
                     [[[[s2]]]]
                     type = bool
                     [[[[s3]]]]
                     type = bool
        [[schlafen]]
                [[[szenen]]]
                type = scene
                enforce_updates = true
                     [[[[s0]]]]
                     type = bool
                     [[[[s1]]]]
                     type = bool
                     [[[[s2]]]]
                     type = bool
                     [[[[s3]]]]
                     type = bool

und werden in logic.conf eingebunden:

[og_bad_szenen]
    filename = szenen.py
    watch_item = og.bad.szenen.*

[og_schlafen_szenen]
    filename = szenen.py
    watch_item = og.schlafen.szenen.*

die auszuführenden Befehlen können dann auf SmartHome art konfiguriert werden. Für die gezeigte Konfiguration mussen die Befehle in den folgenden Dateien geschrieben werden:

/usr/smarthome/scenes/og.bad.szenen.conf
/usr/smarthome/scenes/og.schlafen.szenen.conf

enforce_updates wird nur gebraucht, wenn die Szene 0 verwendet wird.

Vereinfachung

Wer zu faul ist für jeden Raum die Einträge in logig.conf einzutragen, kann vereinfachen in dem er mit eine logik die szenen für alle Räume behandelt:

Alternative logics/szenen.py (eine für alle)

#!/usr/bin/env python                                                                                                              
                                                                          
szenen_name = str(trigger['source'])[:-3]
szenen_item = sh.match_items(szenen_name)[0]

if trigger['value'] == True:
    szenen_item(int(trigger['source'][-1:]))

    for item in sh.match_items(str(szenen_name + ".*")):
        if str(item) != trigger['source']:
            item('Off')
        else:
            item.timer(1, 'Off')

und nur einen Eintrag in logic.conf

[szenen]
    filename = szenen.py
    watch_item = *.szenen.*

Dabei darf natürlich kein unbeteiligten item das Suchmuster *.szenen.* erfüllen.