Ankündigung

Einklappen
Keine Ankündigung bisher.

Problem mit Rule zur Temperaturregelung

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

    Problem mit Rule zur Temperaturregelung

    Hallo Leute,

    ich habe da ein kleines Problem mit einer Rule und finde den Fehler nicht.

    Folgende Situation:
    Ich habe in unserem Haus im WC einen Fensterkontakt, welchen ich über KNX abfrage (OPEN oder CLOSED).
    Dann habe ich über Homematic einen Heizungsthermostat verbaut.
    Die eingestellte Temperatur soll über Zustand des Fensters und über Zeit geregelt werden.

    Als Software benutze ich Openhab 2.1 mit Homegear auf einem Raspberry PI 2.


    Das habe ich vor:

    Freigabe "Automatik Temperatur ist immer "ON"

    1. Situation:
    Die Temperatur im WC ist auf 16°C eingestellt (Temp_WC_set auf 16 °C gestellt). Sobald das Fenster geöffnet wird, soll der Wert von Temp_WC_set in das Item Temp_WC_temp geschrieben werden und Temp_WC_set auf 6°C gestellt werden.

    2. Situation:
    Das Fenster wird wieder geschlossen:
    Der Wert von Temp_WC_temp soll in das Item Temp_WC_set geschrieben werden.

    3. Situation:
    Fenster geschlossen und Zeit 20:00 (oder 9:00) wird erreicht:
    Der Wert von Temp_WC_set wird auf 12°C gestellt.

    4. Situation:
    Das Fenster ist geöffnet und 20:00 (oder 9:00) wird erreicht:
    Temp_WC_set bleibt auf 6°C. Temp_WC_temp wird auf 12°C gestellt.
    Wird das Fenster dann geschlossen, soll der Wert von Temp_WC_temp auf das Item Temp_WC_set geschrieben werden.


    Nun zu meinem Problem:
    Die Temperatur im WC wird immer auf 6°C eingestellt, ich finde den Fehler leider nicht.
    Der Smarthome-Designer hilft da auch nicht weiter....


    hier sind die Items dazu:

    Code:
    Freigabe Regelung:
    Switch        Temp_Auto        "Automatik Temperatur"
    
    Fensterkontakt:
    Contact     Fensterkontakt_WC         "Fenster WC             [MAP(de.map):%s]"            (UG_WC, Fenster)        {knx="<5/1/35"}    
    
    Thermostat:
    Number     Temp_WC                  "Temperatur [%.1f °C]"                           
    Number     Temp_WC_temp
    Number     Temp_WC_set           "Eingest. Temperatur [%.1f °C]"

    Hier ist die Rule, wo der Fehler drin ist:


    Code:
    // Rule zur Temperaturregelung im WC
    
    
    // Situation 1:
    
    rule "Runterregeln bei offenem Fenster WC"
    
    when
    
        Item Fensterkontakt_WC received update OPEN
    
    then
    
        if (Temp_Auto.state==ON)      {
    
        postUpdate(Temp_WC_temp, Temp_WC_set.state)
        sendCommand(Temp_WC_set, 6)
    
        }
    
    end
    
    
    //#####################################################################################################
    
    
    //Situation 2:
    
    rule "Anheizen bei geschlossenem Fenster WC"
    
    when
        Item Fensterkontakt_WC received update CLOSED
    
    then
    
        if (Temp_Auto.state==ON)      {
    
        sendCommand(Temp_WC_set, Temp_WC_temp.state)
        //Temp_WC_set.sendCommand(Temp_WC_temp.state)
    
        }
    
    end
    
    //#####################################################################################################
    
    
    //Situation 3:
    
    
    rule "Runterregeln nach Zeit Fenster geschlossen"
    
    when
    
        Time cron "0 00 20 * * ?"        /* taeglich 20:00 */
    
    then
    
        if (Temp_Auto.state==ON && Fensterkontakt_WC.state==CLOSED)
        {
    
        sendCommand(Temp_WC_set, 12)
        }
    
    end
    
    //#####################################################################################################
    
    
    //Situation 4:
    
    
    rule "Runterregeln nach Zeit Fenster offen"
    
    when
    
        Time cron "0 00 20 * * ?"        /* taeglich 20:00 */
    
    then
    
        if (Temp_Auto.state==ON && Fensterkontakt_WC.state==OPEN)
        {
    
        postUpdate(Temp_WC_temp, 12)
        }
    
    end
    
    //#####################################################################################################
    
    
    //Situation 3:
    
    
    rule "Anheizen nach Zeit Fenster geschlossen"
    
    when
    
        Time cron "0 00 09 * * ?"        /* taeglich 09:00 */
    
    then
    
        if (Temp_Auto.state==ON && Fensterkontakt_WC.state==CLOSED)
        {
    
        sendCommand(Temp_WC_set, 16)
        }
    
    end
    
    //#####################################################################################################
    
    
    
    //Situation 4:
    
    
    rule "Anheizen nach Zeit Fenster offen"
    
    when
    
        Time cron "0 00 09 * * ?"        /* taeglich 09:00 */
    
    then
    
        if (Temp_Auto.state==ON && Fensterkontakt_WC.state==OPEN)
        {
    
        postUpdate(Temp_WC_temp, 16)
        }
    
    end
    
    //#####################################################################################################

    Hat da jemand einen heißen Tip für mich??


    Danke schonmal

    Yankee



    #2
    Versuche doch mal Deine Rule mit ein paar log-Daten zu verfolgen. Dann siehst Du auch, ob die Rule überhaupt getriggert wird und kannst auch die Zustände sehen.

    Ich vermute, dass eines der Items nicht initialisiert ist (keinen Wert hat) und somit einmal der Wert auf 6°C gestellt wird und davon nicht mehr weg kommt...


    Kleine Optimierung am Rande:
    Die beiden Rule mit Trigger auf 20:00 Uhr würde ich in einer Rule zusammenfassen, dann gibt es nur eine Rule, die ausgeführt wird....

    Andreas

    Kommentar


      #3
      Da Du auf received update triggerst, wird die Rule auch ausgeführt, wenn das Fenster bereits offen ist und die Temperatur schon gesetzt war. Da dann die aktuelle Solltemperatur 6°C ist, wird der gesicherte Wert überschrieben.

      Vermutlich willst Du den Temperaturwert sichern, weil die eingestellte Temperatur auch eine andere als 12°C oder 16°C sein könnte?

      Ich würde die Aufgabe so erledigen:
      Code:
      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 0 9 * * ?"  //täglich 9 Uhr
      then
          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
      end
      
      rule "Autoset Abend"
      when
          Time cron "0 0 20 * * ?"  //täglich 20 Uhr
      then
          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
      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
             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
             Temp_WC_set.sendCommand(Temp_WC_temp.state as Number)
      end
      Ein mögliches Fehlverhalten wäre, wenn man manuell eine Solltemperatur von 6°C setzt, dann wird die Rule zwar beim Öffnen des Fensters einfach nichts tun, aber anschließend beim Schließen die letzte von 6°C verschiedene Temperatur setzen, weil 6°C ja niemals nach Temp_WC_temp geschrieben wird. Das könnte man abfangen, indem man gezielt Temp_WC_temp auf einen unnsinnigen Wert setzt und auf diesen prüft.

      Kommentar


        #4
        Super Danke,
        ich hätte die rule so nie hinbekommen.

        Ich werde das heute abend gleich mal testen.


        Gruß
        Yankee

        Kommentar


          #5
          Top!!!

          Die Rule funktioniert einwandfrei.

          Danke für die Hilfe!!

          Gruß
          Yankee

          Kommentar

          Lädt...
          X