Ankündigung

Einklappen
Keine Ankündigung bisher.

Fensterkontaktstatus auf Taster LED

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Fensterkontaktstatus auf Taster LED

    Hallo,

    ich bin gerade dabei die Konfigurationsstruktur von OpenHab zu verstehen. Hierzu habe ich eigentlich nichts über die PaperUI konfiguriert, sondern bin gleich zu der text-/dateibasierten Variante übergegangen. Derzeit habe ich kein IP-Interface, so dass ich noch Trockenübungen mache, seht mir das bitte nach.

    Ich denke die Struktur der *.things und *.items Dateien verstanden zu haben und schaue mit gerade die Rules an. Und hier habe ich an einer Stelle einen Knoten im Kopf. Ich wollte eine Rule erstellen, die eine Taster LED (grün) einschaltet, wenn alle Fenster im Haus geschlossen sind. Ist mindestens 1 Fenster geöffnet soll diese LED rot leuchten. Bei wenigen Fenster-Kontakten habe ich mir das so vorgestellt:

    Code:
     rule "Fenster geschlossen LED-Anzeige"
    when
        Item ContactKuecheRechts received command ON and
        Item ContactKuecheLinks received command ON
    then
        sendCommand(AlleFensterZu, ON)
    end
     
    rule "mind 1 Fenster geoeffnet LED-Anzeige"
    when
        Item ContactKuecheRechts received command OFF or
        Item ContactKuecheLinks received command OFF  
    then
        sendCommand(AlleFensterZu, OFF)
    end
    Das geht nun sicher einfacher, gerade weil ich nicht nur 2 Fensterkontakte habe, sondern einige mehr.

    Die Fensterkontakte sind alle gruppiert in der Gruppe "gFensterkontakte" und ich habe hier im Forum Rules gefunden, wir man sich die offenen Fenster der Gruppe per Mail senden lassen kann. Dass man zählen kann, wie viele Fenster offen sind, habe ich ebenfalls gesehen. Man könnte also vermutlich diesen Zähler nehmen und mit dem Wert 0 (kein Fenster offen) und >=1 (mehr als 1 Fenster offen) eine Bedingung bauen. Nur - ich kriege das gedanklich gerade nicht zusammen. Habe viel in der Doku gesucht, auch hier im Forum und im OpenHab-Forum, aber so richtig komme ich nicht voran. Finde es echt schwierig auch zu gängigen Anforderungen passende Beispiel-Rules zu finden.

    Kann mich hier jemand in die richtige Richtung schubsen bzw. hat jemand eine Beispiel-Rule?

    Danke & Viele Grüße
    Jens
    Zuletzt geändert von Neelex; 17.10.2018, 18:14.

    #2
    Der Witz ist, dass Du für diese Aufgabe gar keine Rule brauchst (naja, um die LED leuchten zu lassen schon).

    Aber zuerst ein elementarer Hinweis: Es gibt im Trigger-Teil einer Rule kein AND. Trigger sind Events, ein AND an dieser Stelle bedeutete dann also, dass absolut zeitgleich zwei Ereignisse auftreten müssten. Stattdessen möchtest Du Zustände mit AND verknüpfen, das passiert im auszuführenden Teil der Rule, also nach dem then.

    Im vorliegenden Fall möchtest Du eine OR Verknüpfung aller Fensterkontakte. Sobald einer der Fensterkontakte ein OPEN meldet, soll dies angezeigt werden.
    Items:
    Code:
    Group:Contact:OR(OPEN,CLOSED) AlleFenster "Anzahl offener Fenster [%d]"
    Contact Fenster1 "Fenster 1 [%s]" <window> (AlleFenster) {channel="knx:device:bridge:thing:channel1"}
    Contact Fenster2 "Fenster 2 [%s]" <window> (AlleFenster) {channel="knx:device:bridge:thing:channel2"}
    Contact Fenster3 "Fenster 3 [%s]" <window> (AlleFenster) {channel="knx:device:bridge:thing:channel3"}
    Contact Fenster4 "Fenster 4 [%s]" <window> (AlleFenster) {channel="knx:device:bridge:thing:channel4"}
    
    Switch Rot ...
    Switch Gruen ...
    Die Gruppe AlleFenster nimmt den Zustand OPEN an, sobald einer der Kontakte OPEN meldet. Im Label steht die Anzahl der Kontakte, dir gerade OPEN sind. Sobald alle Fensterkontakte geschlossen sind, wechselt auch die Gruppe nach CLOSED.

    Die passende Rule zum Schalten der LED sieht dann so aus:
    Code:
    rule "Fensterkontakte melden"
    when
        Item AlleFenster changed
    then
        if(AlleFenster.state == CLOSED) {
            rot.sendCommand(OFF)
            gruen.sendCommand(ON)
        } else {
            rot.sendCommand(ON)
            gruen.sendCommand(OFF)
        }
    end
    Wenn Du nur ein Item verwendest, um die LED als Switch zu steuern und ON grün bedeutet (und OFF damit für rot steht) reicht sogar eine Zeile im then-Teil:
    Code:
    rule "Fensterkontakte melden"
    when
        Item AlleFenster changed
    then
        LED.sendCommand(if(AlleFenster.state == CLOSED) ON else OFF)
    end
    Du kannst selbstverständlich statt Contact Items auch Switch Items verwenden, dann musst Du halt die OR-Verknüpfung mit (ON,OFF) verwenden (oder auch (OFF,ON))

    Kommentar


      #3
      Hallo Udo,

      vielen Dank für die Mühe! Sieht immer so einfach aus, wenn man es fertig sieht. Aber da erstmal drauf kommen... Werde es sobald als möglich testen. Die LED hat übrigens in der Tat nur ein Item mit ON/OFF.

      Die grundlegenden Hinweise helfen mir ebenfalls den generellen Aufbau zu verstehen.

      Danke nochmal.

      Viele Grüße
      Jens

      PS: Gerade gesehen, dass Du gar nicht so weit von mir weg bist.



      Kommentar


        #4
        Zitat von Neelex Beitrag anzeigen
        Gerade gesehen, dass Du gar nicht so weit von mir weg bist.
        Ja, stimmt, letzten Mittwoch erst an der Autobahnausfahrt vorbei gefahren

        Kommentar

        Lädt...
        X