Ankündigung

Einklappen
Keine Ankündigung bisher.

Frage zu Rules

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

    Frage zu Rules

    Hallo,

    ich beschäftige mich gerade mit Rules und habe schon einen kleinen Erfolg. Folgende Rule schaltet bei Dämmerung kleiner 50 Lux die Beleuchtung ein.


    Code:
    rule "Dämmerung"
    when   
            Item wetter_daemmerung changed
    then   
            if(wetter_daemmerung.state < 50) {
                    sendCommand(dg_bel_flur_decke, ON)
            }
    end
    Allerdings soll jetzt noch ein Zeitbereich dazu, z.B. 17-23 Uhr. Und das ganze dann nur wenn Abwesenheit gesetzt ist. Wie lässt sich das realisieren?

    Lassen sich mit Rules auch einfache logische Verknüpfungen erstellen (UND / ODER), um so beispielsweise einen KNX Logikbaustein zu ersetzen?

    Gibt es genauere Infos zur Syntax etc. Ich habe mir schon die Beispiele angesehen. Die sind teils komplex. Würde gerne mit einfachen Dingen anfangen.

    Danke für Eure Hilfe.

    #2
    hallo gth

    das sollte wie folgt funktioniren

    Code:
    rule "Dämmerung"
    when   
            Item wetter_daemmerung changed
    then   
            if(wetter_daemmerung.state < 50 && anwesend.state == ON) {
                    sendCommand(dg_bel_flur_decke, ON)
            }
    end
    && = und
    || = oder

    mit der Zeit wüste ich jetzt nicht genau.

    Kommentar


      #3
      Hallo napoleonmm83,

      danke für den Tip, damit komme ich schon weiter. Muss ich das anwesend Item auch noch in den when Teil einfügen:

      Code:
      when
          Item wetter_daemmerung changed or
          Item anwesend changed
      Vielleicht hat noch jemand einen Hinweis zur Uhrzeit (evtl. mit cron).

      Kommentar


        #4
        Das macht sinn das anwesend Item auch noch in den when Teil einzufügen.
        Denn dann wird auch wenn jemand nach Hause kommt und Lux unter 50 ist das Licht angemacht.

        Wen es nicht im when Teil ist reagiert das Rule nur noch auf die Lichtveränderung.

        Kommentar


          #5
          Zitat von gth Beitrag anzeigen
          Vielleicht hat noch jemand einen Hinweis zur Uhrzeit
          var Number Hour = now.getHourOfDay

          Kommentar


            #6
            Ich hab es bei mir etwas anders gelöst.

            Es gibt einen Switch "dunkel"
            Dieser wird in einer minütlichen Regel gesetzt (Pseudocode):

            if wetter_daemmerung.state < 50 dunkel = on
            if wetter_daemmerung.state > 52 dunkel = off

            alternativ: wenn sich dämmerung ändert switch dunkel ändern

            Damit hast du eine gewisse Hysterese.

            Wechselt jetzt die Anwesenheit von off zu on und es ist dunkel --> Licht an

            wechselt dunkel von off zu on und Anwesenheit = on dann Licht an

            wechselt dunkel zu off dann ist es hell und Licht aus

            wechselt Anwesenheit von on zu off dann Licht aus

            Holger

            Kommentar


              #7
              Zitat von HolgerW Beitrag anzeigen
              Ich hab es bei mir etwas anders gelöst.
              gute Lösung! Gruß, Thomas E.-E.
              Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

              Kommentar


                #8
                Ich habe jetzt eine Rule angelegt, wie von HolgerW empfohlen. Die funktioniert auch soweit:

                Code:
                rule "Dämmerung EIN/AUS"
                
                when   
                    Time cron "*/60 * * * * ?" or                        // Jede Minute überprüfen, oder
                    Item wetter_daemmerung changed                        // wenn sich Item ändert
                
                then   
                    if(wetter_daemmerung.state < 50) {                    // Falls Item kleiner 50 Lux
                        sendCommand(daemmerung, ON)                        // sende Status Item EIN,
                    }
                    else if(wetter_daemmerung.state > 60) {                // andernfalls Item größer 60 Lux
                        sendCommand(daemmerung, OFF)                    // sende Status Item AUS
                    }
                end
                Laut Wikipedia Eintrag zu cron wird mit folgender Angabe (* * * * *) eine Aktion jede Minute ausgeführt. Ich bekomme jedoch jede Sekunde das Kommando gesendet. Alle 5 Minuten sollte das Kommando mit */5 * * * * gesendet werden, tatsächlich sind es aber alle 5 Sekunden. Erst mit */60 wird jede Minute gesendet.

                Habe ich irgendeinen Konfigurationsfehler, oder muss in Openhab die Zeit in Sekunden eingetragen werden?

                Worin besteht eigentlich der Unterschied zu 'sendCommand' und 'postUpdate'.

                Kommentar


                  #9
                  Hallo
                  Bei cron ist die kleinste Einstellung Minute,
                  Bei openhab cron jede Secunde.
                  Schau mal hier:
                  Quartz Scheduler | Documentation | Tutorial Lesson 06

                  Gruß NetFritz
                  KNX & Wago 750-849 ,Wiregate u. Cometvisu, iPad 3G 64GB.
                  WP Alpha-Innotec WWC130HX (RS232-Moxa-LAN),Solaranlage für Brauchwasser und Heizung.
                  PV-Anlage = SMA Webbox2.0 , SunnyBoy 4000TL, Sharp 4kWP

                  Kommentar


                    #10
                    Hallo,
                    so muss es aussehen für jede Minute (genauer, wenn die Sekunde 0 ist)
                    Code:
                    Time cron "0 * * * * ?"
                    das aller 5 Minuten:
                    Code:
                    Time cron "0 0/5 * * * ?"
                    Bei mir wird die Rule nur einmal pro Minute ausgeführt, ohne die changes auf Dämmerung.
                    Minütlich die Helligkeit auswerten sollte reichen.
                    In der minütlichen Regel kann man noch andere Dinge erledigen, deshalb global gültig.

                    <halbwissen an>
                    sendCommand führt ein Command aus (item received command...)
                    postUpdate sendet nur die Information auf den Bus
                    <halbwissen aus>

                    Holger

                    Kommentar


                      #11
                      Hi,

                      Zitat von gth Beitrag anzeigen
                      Worin besteht eigentlich der Unterschied zu 'sendCommand' und 'postUpdate'.
                      mit "sendCommand" schickst Du ein Kommando an Deine Aktorik, damit sich ein Status in Zukunft ändern wird (bspw. Garagentor:AUF). Mit "postUpdate" aktualisierst Du den Status eines Items (bspw. Garagentor: ist nun auf).

                      Unterschied klarer?

                      Gruß,

                      Thomas E.-E.
                      Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

                      Kommentar


                        #12
                        @teichsta: Ja, verstanden.

                        Ich habe jetzt eine Rule, die mir die Dämmerung auswertet und einen 'virtuellen' Switch schaltet:

                        Code:
                        rule "Dämmerung EIN/AUS"
                        
                        when   
                            Time cron "0 * * * * ?"                                // Jede Minute überprüfen
                        
                        then   
                            if(wetter_daemmerung.state < 50) {                    // Falls Item kleiner 50 Lux
                                sendCommand(daemmerung, ON)                        // sende Kommando Item EIN,
                            }
                            else if(wetter_daemmerung.state > 60) {                // andernfalls Item größer 60 Lux
                                sendCommand(daemmerung, OFF)                    // sende Kommando Item AUS
                            }
                        end
                        In einer 2ten Rule wird die Flurbeleuchtung in Abhängigkeit von Uhrzeit, Dämmerung und An-/Abwesenheit geschaltet:

                        Code:
                        rule "Beleuchtung Flur"
                        
                        when   
                                Time cron "0 * * * * ?"
                        
                        then   
                                if (now.getHourOfDay >= 16 && now.getHourOfDay <= 23 && daemmerung.state == ON && dg_anwesenheit_zentral.state == OFF) {
                                    sendCommand(dg_bel_flur_wand, ON)
                                } 
                                else if (dg_anwesenheit_zentral.state == OFF) {
                                    sendCommand(dg_bel_flur_wand, OFF)
                                }
                        end
                        Die Regel muß ich zyklisch (momentan jede Minute) aufrufen?

                        Damit die Beleuchtung nicht zur vollen Stunde geschaltet wird, kann ich auch noch Minuten mit einbeziehen?

                        Kommentar


                          #13
                          An die Minuten kommst du mit now.getMinuteOfHour()

                          Du musst nicht jede Minute aufrufen sondern kannst auch von Ereignissen abhängig machen.
                          Z.b. wenn Anwesenheit auf ON geht prüfst du ob es dunkel ist und das Licht wird eingeschaltet
                          Wenn Anwesenheit auf off geht dann schaltest du das Licht aus
                          Ich würde das in einzelne Regeln packen, du wirdst noch andere Schaltvorgänge finden die du dort unterbringst

                          Wenn du etwas in einer bestimmten Zeit nur prüfen willst ist soetwas u.U. besser:
                          Code:
                          rule "xyz"
                          when  Time cron "0 0/15 8-20 * * ?" then // aller 15 Minuten 8:00 Uhr bis 20:59 Uhr
                          ...
                          Wenn du auf Ereignisse prüfst kannst du ein Licht auch mal von Hand schalten, ansonsten würde er jede Minute wieder das Licht den Regeln entsprechend schalten.

                          Bei deiner Dämmerung würde ich auf die Änderung des Switches gehen, wen Dämmerung auf ON geht, dann prüfst du ob Anwesenheit ist und wenn ja wird das Licht geschaltet.
                          Code:
                          when    Item daemmerung  changed to ON
                          Holger

                          Kommentar

                          Lädt...
                          X