Ankündigung

Einklappen
Keine Ankündigung bisher.

Rule funktioniert mal und mal nicht....

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

    Rule funktioniert mal und mal nicht....

    Hallo Leute,

    habe da wieder mal eine Baustelle.
    (Das Grundgerüst der rule kommt hier aus dem Forum :-) )

    Ich versuche, die Raumtemperatur mit einem Homematic-Heizungsventil zu regeln.
    Die Temperatur kann ich auch einstellen, die Temp wird geregelt nach Fensterzustand und alles.

    Nur die Regelung nach Zeit funktioniert mal und mal nicht.

    Kann sich das jemand erklären?
    Ich finde den Fehler nicht.

    Hat jemand eine Idee?




    Code:
    //###########################################################################
    //#   Rule zur Steuerung der Temperatur im WC                               #
    //#        - Zeitregelung                                                      #
    //#        - nach Zustand des Fensters                                         #
    //###########################################################################
    
    var fTemp_WC_low = 12.0
    var fTemp_WC_high = 16.0
    var fTemp_WC_save = 6.0
    
    rule "Autoset Morgen"
    when
        Time cron  "0 10 8 ? * * *"  //täglich 8:10 Uhr
    then
    if (Temp_Auto.state==ON)      
    {
        Temp_WC_temp.postUpdate(fTemp_WC_high)  //gespeicherte Temperatur überschreiben
        if (Fensterkontakt_WC.state == CLOSED)  //Fenster geschlossen ->
        {  
           Temp_WC_set.sendCommand(Temp_WC_temp.state as Number) //Solltemperatur setzen
            logInfo("Temp_WC.rules", "Temperatur Autoset Morgen WC gesetzt")    
        }
    }
    end
    
    
    rule "Autoset Abend"
    when
        Time cron  "0 10 21 ? * * *"  //täglich 21:10 Uhr  //täglich 21 Uhr
    then
    if (Temp_Auto.state==ON)      
    {
        Temp_WC_temp.postUpdate(fTemp_WC_low)  //gespeicherte Temperatur überschreiben
        if (Fensterkontakt_WC.state == CLOSED)  //Fenster geschlossen ->
        {
           Temp_WC_set.sendCommand(Temp_WC_temp.state as Number)//Solltemperatur setzen
            logInfo("Temp_WC.rules", "Temperatur Autoset Abend WC gesetzt")
        }
    }
    end
    
    
    
    rule "Fensterkontakt WC"
    when
        Item Fensterkontakt_WC changed  //Fenster geöffnet oder geschlossen
    then
    
        if (Fensterkontakt_WC.state == OPEN && (Temp_WC_set.state as Number) != fTemp_WC_save)  //Fenster wurde geöffnet, Temperatur noch nicht geändert
        {  
           logInfo("Temp_WC.rules", "Temperatur WC wegen Fenster offen geändert")
           Temp_WC_temp.postUpdate(Temp_WC_set.state as Number)
           Temp_WC_set.sendCommand(fTemp_WC_save)
        }
        else if (Fensterkontakt_WC.state == CLOSED)  //Fenster wurde geschlossen
               {
           logInfo("Temp_WC.rules", "Temperatur WC wegen Fenster geschlossen geändert")
           Temp_WC_set.sendCommand(Temp_WC_temp.state as Number)
            }
    end
    Zuletzt geändert von Yankee1234; 26.02.2018, 18:52.

    #2
    Gibt es denn ein Muster, wann es funktioniert und wann nicht?
    Die Rules sehen erst einmal gut aus. Um den Fehler einzugrenzen, kannst Du zusätzliches Logging in die Rules einbauen, damit beim Triggern der Rules auf jeden Fall eine Ausgabe erfolgt, am besten mit den wichtigsten Status.
    Code:
    logInfo("Temp_WC.rules", "Autoset Morgen Auto = {}, Fenster = {}",Temp_Auto.state,Fensterkontakt_WC.state)
    Genauso kannst Du die gesetzte Temperatur direkt im Log ausgeben. Die {} innerhalb des Log Strings werden durch die angehängten Variablen ersetzt.

    Kommentar


      #3
      Hallo udo1toni,

      Log-Infos klingen doch erstmal gut.
      Habe die Log-Info-Zeilen in die rules eingebaut.

      Kuckst Du:

      Code:
      
      rule "Autoset Morgen"
      when
          Time cron  "0 0 8 ? * * *"  //täglich 8 Uhr
      then
      logInfo("Temp_Buegelzimmer.rules", "Rule fired! Autoset Morgen Auto = {}, Fenster = {}",Temp_Auto.state,Fensterkontakt_Kind2.state) 
      if (Temp_Auto.state==ON)      
      {
          Temp_Buegelzimmer_temp.postUpdate(fTemp_Buegelzimmer_high)  //gespeicherte Temperatur überschreiben
          if (Fensterkontakt_Kind2.state == CLOSED)  //Fenster geschlossen ->
           { 
             logInfo("Temp_Buegelzimmer.rules", "Temperatur gesetzt! Autoset Morgen Auto = {}, Fenster = {}",Temp_Auto.state,Fensterkontakt_Kind2.state)
             logInfo("Temp_Buegelzimmer.rules", "Autoset Morgen Temperatur Buegelzimmer gesetzt")    
             Temp_Buegelzimmer_set.sendCommand(Temp_Buegelzimmer_temp.state as Number) //Solltemperatur setzen
          }
      
      }
      end
      Die Rule wurde aber nicht um 8:00 getriggert, es kam kein Log-Eintrag (Rule fired ! ...)
      Ich habe mehrere rules, die um 8:00 getriggert werden sollen.
      Habe aufgrund der Problematik die Zeiten schon jeweils um 2 min versetzt.
      Alles ohne Erfolg.......

      Kann das ein Bug im Openhab sein?


      Kommentar


        #4
        Gibt es Fehlermeldungen im LOG, wenn Du deine Rules-Datei speicherst und diese neu geladen wird?

        Ich kenne die Variante mit geschweiften Klammern nicht, vielleicht probierst Du noch ein logInfo ohne Variablen, das auf alle Fälle loggt....

        Kommentar


          #5
          Die geschweiften Klammern funktionieren, keine Sorge

          Hast Du jeder Rule einen eindeutigen Namen gegeben? Jeder verwendete Name in openHAB muss systemweit *) eindeutig sein, die einzige Ausnahme sind Variablen, die innerhalb einer Rule definiert werden, da sie nur innerhalb der Rule gültig sind.

          Spaßeshalber könntest Du die Schreibweise des Triggers etwas abändern:
          Code:
          Time cron "0 0 8 * * ?"
          sollte das Gleiche bewirken. Das Jahr ist optional (der letzte Stern bei Dir) und kann deshalb entfallen.

          *) systemweit bedeutet, es spielt z.B. keine Rolle, ob Rules in unterschiedlichen Dateien liegen, sie müssen trotzdem unterschiedliche Namen tragen.

          Kommentar


            #6
            Da habe ich den Fehler .....
            Habe den Namen der Rule doppelt vergeben.
            Ich denke das wird es gewesen sein.

            Ich werde berichten, wie sich die Rules verhalten.

            Ich bin guter Hoffnung

            Kommentar


              #7
              Hallo Leute,

              die rules arbeiten jetzt einwandfrei.
              war wohl tatsächlich die Bezeichnungen der rules...

              wäre ich nie drauf gekommen....
              danke nochmal

              Gruß

              Kommentar

              Lädt...
              X