Skip to content

Anzahl eingeschaltete Lampen ermitteln

cstrassburg edited this page Mar 19, 2015 · 5 revisions

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.conf

[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

# /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/OG.conf

[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', '', '') }} )