Ankündigung

Einklappen
Keine Ankündigung bisher.

Probleme mit einer Jahreszeitenregel

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

    Probleme mit einer Jahreszeitenregel

    Hallo!
    ich würde gerne in Openhab eine Regel erstellen die als erste Bedingung eine Jahreszeit hat.
    Im Grunde soll also die Jahreszeit erreicht sein, bis dann weitere Schritte passieren.
    Beispiel:
    Code:
    rule "Herbst-Test"
    
     when  Season_Name.state == AUTUMN
    
    then
        sendTelegram("bot1", "Es ist Herbst!")
    
    
    end
    die Telegram Nachricht ist in diesem Fall nur ein Beispiel.
    In diesem Fall soll die Regel wie folgt laufen Wenn das ITEm Season_Name auf Herbst steht soll eine Aktion ausgelöst werden.
    Allerdings funktioniert das leider nicht so wie ich es mir vorgestellt habe. Muss ich das ganze mit IF machen?
    Über eine Antwort würde ich mich sehr freuen!
    LG luismauriz1

    #2
    Das passt von der Syntax so nicht und würde ziemlich sicher auch eine Fehlermeldung im Log erzeugen (dort würde ich immer rein schauen beim Speichern der Rules-Dateien). Siehe auch https://www.openhab.org/docs/configu...#rule-triggers (und https://www.openhab.org/docs/configu...based-triggers )

    Zitat von luismauriz1 Beitrag anzeigen
    Wenn das ITEm Season_Name auf Herbst steht soll eine Aktion ausgelöst werden.
    Die Aktion auf einem Item würde bei diesem Ansatz höchstens einamlig beim Wechsel der Jahreszeit auf Herbst auslösen. Wenn Du informiert werden willst, wann der Herbst beginnt dann könntest Du das so machen. Wahrscheinlich wirst Du aber eher beim Eintritt eines anderen Ereignisses nach Jahreszeit unterscheiden?

    Kommentar


      #3
      Im when-Teil einer Rule werden keine Bedingungen angegeben, sondern Trigger. Ja, das ist ein Unterschied.

      Bedingungen gibst Du im then-Teil der Rule an:
      Code:
      rule "Jahreszeit"
      when
          Item myItem changed // irgendein Ereignis tritt ein
      then
          var String strSeason
          switch(Season_Name.state) {
              case "AUTUMN" : {
                  strSeason = "Herbst"
              }
              case "WINTER" : {
                  strSeason = "Winter"
              }
              case "SPRING" : {
                  strSeason = "Frühling"
              }
              case "SUMMER" : {
                  strSeason = "Sommer"
              }
          }
          sendTelegram("bot1", "Es ist {}!",strSeason)
      end

      Kommentar


        #4
        Hallo!
        Vielen Dank für die Hilfe!
        Allerdings verstehe ich das immernoch nicht so ganz.
        Ich möchte das gewisse Regeln z.B. nur im Sommer funktionieren.
        Das z.B. im Sommer 3x Pro Tag die Bewässerung in Form eines Switches angeschaltet wird.
        Wie genau muss ich das dann machen? udo1toni deine Rule wäre ja speziell für die Telegram nachricht ausgelegt. Es geht aber darum das es jeden Tag im Sommer um 08:00 Uhr etwas passiert. Wie würde das dann funktionieren?
        Entschuldigt diese Dummen Fragen. Ich stehe mit den Regeln aktuell am Anfang meiner Programmierkarriere
        VIelen Dank!

        Kommentar


          #5
          Na ja, das machst Du ja nicht über die ermittlung der Jahreszeit, sondern eher über das Datum. Aber zum Beispiel bei der Bewässerung ist noch eher interessant, wie viel es in den letzten Tagen geregnet hat, ob es heute oder morgen regnen wird und wie heiß es ist. Dass eine Rule in einem bestimmten Zeitraum nicht triggert, kannst Du nur erreichen, wenn ide Rule ausschließlich per Time cron Rule getriggert wird:
          Code:
          rule "nur im Sommer um 8 Uhr"
          when
              Time cron "0 0 8 21-30 6 ?" or
              Time cron "0 0 8 * 7,8 ?" or
              Time cron "0 0 8 1-23 ?"
          then
              // nur im Sommer
          end
          Das Problem ist hier vor allem die Überlappung im Juni und September, wie man sieht, geht es aber.

          Wenn es hingegen andere Trigger gibt, muss in der Rule entschieden werden, ob das Datum passt:
          Code:
          rule "nur im Sommer um 8 Uhr"
          when
              Item MyItem changed
          then
              if(now.getDayOfYear > 31+28+now.isLeapYear+31+30+31+20&& now.getDayOfYear < 31+28+now.isLeapYear+31+30+31+30+31+31+24) {
                  // nur im Sommer
              }
          end
          Ich bin mir nicht sicher, ob die Funktion isLeapYear funktioniert, aber ich denke, es ist klar, worum es geht .
          Natürlich schreibt man dann eher eine Zahl hin (größer 173 und kleiner 268, im Schaltjahr jeweils + 1)

          Kommentar

          Lädt...
          X