Ziel
Anzahl und Position der eingeschalteten Lampen ermitteln und visualisieren.
Logik
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/local/smarthome/logics/light.py
#!/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:
/usr/local/smarthome/etc/logic.yaml
In der Zentral.conf habe ich Elemente definiert, die die ermittelten Werte aufnehmen.
lichter:
filename: light.py
watch_item: *.licht.*
/usr/local/smarthome/items/Zentral.yaml
# /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
Items
Folgende Items werden benötigt.
/usr/local/smarthome/items/EG.yaml
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
HTML-Seite
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', '', '') }} )
15.02.2014: Original Wiki Beitrag von ReneHezser
19.05.2015: Überarbeitung durch cstrassburg
1 Kommentar
Sven · 12. Januar 2021 um 9:57
Achtung funktioniert ab SV 2.9 so nicht mehr. Es muss basic.print benutzt werden mit Codierung html:
{{ basic.print(‚zentral.zaehler.licht.anzahl.1‘, ‚zentral.zaehler.licht.anzahl‘,’html‘)
Zusätzlich musste ich noch in der light.py folgende Zeile anpassen:
namen = „“ angepasst auf
namen = „“
Vielleicht hilfts ja jemandem.