-
Notifications
You must be signed in to change notification settings - Fork 67
Anzahl eingeschaltete Lampen ermitteln
cstrassburg edited this page Mar 19, 2015
·
5 revisions
Anzahl und Position der eingeschalteten Lampen ermitteln und visualisieren.
Es werden alle Lichter gesucht, die nicht auf Taster oder Level enden und die nicht in Zentral definiert sind. Die eingeschalteten Lichter werden als Link zum Ausschalten gespeichert, so dass sie bequem später ausgeschaltet werden können.
#!/usr/bin/env python
counter = []
# finde alle Lichter, die eingeschaltet sind (und nicht auf taster oder level enden)
for item in sh.match_items('*.licht.*'):
if item() and not item.id().endswith('taster') and not item.id().endswith('level') and not item.id().startswith('zentral') and not item.id().endswith('aussen'):
counter.append(item)
# ermittle licht bool wert
if len(counter) > 0:
sh.zentral.zaehler.licht(1)
else:
sh.zentral.zaehler.licht(0)
# setze licht anzahl wert
sh.zentral.zaehler.licht.anzahl(len(counter))
# ermittle Namen der Lichter, die eingeschaltet sind
namen = "<ul class='logik_licht'>"
for item in counter:
parent_item = item.return_parent()
namen += "<li><a href=\"#\" class=\"ui-link\" onclick=\"io.write(\'"+item.id()+"\',0);\">{0} {1}</a></li>".format(str(parent_item), str(item))
namen += "</ul>"
# setze Namen der eingeschalteten Lichter
sh.zentral.zaehler.licht.namen(namen.strip())
# Logging
logger.info("Es sind {0} Lichter an. ( {1})".format(str(sh.zentral.zaehler.licht.anzahl()), sh.zentral.zaehler.licht.namen()))
Die Logik aktiviert man unter etc/logic.conf mit dem Eintrag von:
[lichter]
filename = light.py
watch_item = *.licht.*
In der Zentral.conf habe ich Elemente definiert, die die ermittelten Werte aufnehmen.
# /usr/local/smarthome/items/Zentral.conf
[zentral]
name = Zentral
[[zaehler]]
name = Zähler
sv_page = room
[[[licht]]]
name = Licht an
type = bool
visu = yes
[[[[anzahl]]]]
name = Anzahl eingeschalteter Lichter
type = num
visu = yes
[[[[namen]]]]
name = Eingeschaltete Lichter
type = str
visu = yes
Folgende Items werden benötigt.
[eg]
name = Erdgeschoß
[[flur]]
name = Flur
sv_page = room
sv_img = scene_hall.png
[[[licht]]]
name = Flur
[[[[decke]]]]
name = Dimmer
type = bool
visu = yes
visu_acl = rw
sv_img = light_ceiling_light.png
[[[[[level]]]]]
type = num
visu = yes
visu_acl = rw
Die ermittelten Werte können nun in einer HTML-Seite wie folgt angezeigt werden
Es sind <strong>{{ basic.value('zentral.zaehler.licht.anzahl.1', 'zentral.zaehler.licht.anzahl', '', '') }}</strong> Lichter an
<br/>
( {{ basic.value('zentral.zaehler.licht.namen.1', 'zentral.zaehler.licht.namen', '', '') }} )