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 

 

 

Kategorien: Tipps & Tricks

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.

Schreibe einen Kommentar

Avatar-Platzhalter

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert