Tipps und Tricks Update

Erstellen eines Zeitgiedes

Wenn man ein Item benötigt, welches seinen Wert erst nach einer zeitlichen Verzögerung ändert, kann man das mit Hilfe eines zweiten Items realisieren. Das erste Item (Eingang) wird dabei durch ein Ereignis (Plugins, eval, …) verändert. Das zweite Item (Ausgang) nimmt den neuen Wert des ersten Items erst nach einer definierten zeitlichen Verzögerung an.

Beispiel

In diesem Beispiel ist ein Zeitglied für ein numerischs Item dargestellt, welches eine Verzögerung von 15 Sekunden implementiert.

Zeitglied:
    Eingang:
        type: num
        on_change:
          - sh...Ausgang.timer(15, value)

    Ausgang:
        type: num

Invertieren eines Item Wertes

Beispiel 1

Es geht um einen Reed-Kontakt am Fenster, der über einen 1-Wire Multi-I/O-Sensor per 1-Wire-Plugin abgefragt und auf den KNX-Bus gesendet wird.

Leider sind die Werte vertauscht, 0 soll 1 sein und umgekehrt, ein geschlossenes Fenster wird geöffnet angezeigt und umgekehrt.

Ein eval: Attribut zum Item hinzufügen. eval: not value Value ist der Wert, der vom KNX Bus gelesen wird, der eval Ausdruck verändert diesen Wert, bevor er in das Item geschrieben wird. Damit wird dann der invertierte Wert auf den KNX Bus geschrieben.

OW:
    Fenster:
        EsszimmerLinks:
            type: bool
            visu_acl: rw
            ow_addr: 3A.CBF713000000
            ow_sensor: IB
            knx_dpt: 1
            knx_send: 2/1/82
            knx_reply: 2/1/82
            eval: not value

Beispiel 2

Es geht um einen Lautsprecher, der über einen GPIO Kontakt des Raspberry geschaltet werden soll. Der Wert kommt von einem Item das per knx bedient wird und dessen Item Wert nicht verfälscht werden soll.

Leider sind auch hier die Werte vertauscht, 0 soll 1 sein und umgekehrt.

Ein Hilfsitem hinzufügen und diesem mit relativer Adressierung auf das Elternelement ein eval_trigger und ein eval zufügen.

Gaestezimmer_Lautsprecher:
    type: bool
    knx_dpt: 1
    knx_listen: 5/0/5
    visu_acl: rw
    GPIO_Ausgabe:
        type: bool
        gpio_out: 38
        eval: not sh...()
        eval_trigger: ..

Erstellung von Tag-/Nacht-Items für KNX

Ein Tag- oder Nachtobjekt kann zur Ansteuerung von Status-LEDs, Präsenzmeldern oder ähnlichem genutzt werden.

Tag-Item: Ist “true” (also 1) von der bürgerlichen Dämmerung am Morgen bis zur Dämmerung am Abend, danach ist es “false” (also 0)

Nacht-Item: Ist “true” (also 1) von der bürgerlichen Dämmerung am Abend bis zur Dämmerung am Morgen, danach ist es “false” (also 0)

Bürgerliche Dämmerung bedeutet, dass sich die Sonne noch/schon unterhalb des Horizonts befindet, der Himmel aber dennoch leicht erhellt wird.

Welches der beiden Items man nutzen will, bleibt jedem selbst überlassen. Schließlich ist der Status des jeweiligen Items bereits eindeutig. Wichtig dafür ist natürlich, dass die richtigen Geo-Koordinaten und die Zeitzone in der Datei ../etc/smarthome.yaml hinterlegt sind sowie die aktuelle Uhrzeit auf dem Rechner eingestellt ist.

Um Tag/Nacht-Items zu erstellen, bringt SmarthomeNG bereits alles mit. Man kann einfach auf die SmarthomeNG internen Items env.location.day und env.location.night zugreifen.

Beispiele

Nutzung mit neuen (zusätzlichen) Items

tag:
    type: num
    knx_dpt: 1
    knx_send: 0/0/103
    knx_reply: 0/0/103
    eval: sh.env.location.day()
    eval_trigger: env.location.day

nacht:
    type: num
    knx_dpt: 1
    knx_send: 0/0/104
    knx_reply: 0/0/104
    eval: sh.env.location.night()
    eval_trigger: env.location.night

Nutzung der SmarthomeNG internen Items

Dazu müssen die entsprechenden Items um die KNX Attribute erweitert werden:

env:
    location:
        day:
            name: Tag
            knx_dpt: 1
            knx_send: 0/0/103
            knx_reply: 0/0/103
        night:
            name: Nacht
            knx_dpt: 1
            knx_send: 0/0/104
            knx_reply: 0/0/104

Da sich die internen Items von Release zu Release ändern könnten, ist der Weg der zusätzlichen Items zu bevorzugen.

Berechnung von Tag und Nacht

Die Berechnung der Items Tag und Nacht erfolgt SmarthomeNG-intern über sh.sun.rise(-6).day (bürgerliche Dämmerung).

Für eine Beleuchtungssteuerung (z.B. mit KNX) wäre es sinnvoll, die Berechnung von Tag/Nacht anders vorzunehmen, weil z.B. für Flurlichtsteuerung o.ä. vielleicht schon 1h vor Sonnenuntergang die “Nacht” beginnen soll. Das kann durch die Definition neuer Items erreicht werden. Im folgenden Beispiel wird die Tag/Nacht Grenze bei einem Sonnenstand von 4° unter dem Horizont festgelegt:

berechnung:
    type: bool
    crontab:
      - init = 1
      - sunrise-4 = 1
      - sunset-4 = 1
    enforce_updates: true

day:
    type: bool
    eval: sh.sun.rise(-4).day != sh.sun.set(-4).day
    eval_trigger: ..berechnung
    enforce_updates: true

Die Triggerung dieser Berechnung wird im berechnung - Item durch das Attribut crontab gesteuert. In diesem Beispiel erfolgt die Berechnung 4° vor Sonnenaufgang, 4° nach Sonnenuntergang, sowie beim Systemstart.