Ankündigung

Einklappen
Keine Ankündigung bisher.

Wert zwischenspeichern innerhalb einer Rule

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

    Wert zwischenspeichern innerhalb einer Rule

    Hallo,

    Ich habe wieder mal ein Problem mit einer Rule.
    Zu zwar möchte ich den Sollwert eines Temperaturreglers in einer Variable zwischenspeichern.
    Aber leider funktioniert hier postUpdate nicht.


    Code:
    // Globale Variablen immer zu Beginn der Datei definieren!
    
    var Number lastTempKind2 = 20
    
    
    rule "Temperaturanpassung Kind2 Samstag früh"
    when
         Time cron "0 0 5 ? * SAT *" // Samstags um 5 Uhr
    then
        lastTempKind2.postUpdate(OG_Kind2_XTemp.state)
        OG_Kind2_WTemp.postUpdate(24)
    end
    hier erhalte ich den folgenden Fehler:

    The method postUpdate(State) is undefined for the type Number
    In anderen Rules funktioniert die Zuweisung so, warum hier nicht?

    Gruß Tom

    #2
    Es gibt hier zwei verschiedene Dinge..
    Das Eine sind Items. Items sind Objekte, die zum openHAB System gehören. Items kennen postUpdate() als Methode zum Setzen des Status und sendCommand() als Methode zum Senden eines Befehls.
    Das Andere sind die Variablen. Variablen können je nach Definition Primitives oder ebenfalls Objekte sein. Mit der Definition var Number myVar = 1 wird eine Variable als Objekt definiert (erster Buchstabe des Typs ist großgeschrieben).
    Variablen sind Bestandteil der DSL, haben aber nichts mit openHAB zu tun. Entsprechend gibt es dort auch keine Methode postUpdate(), denn eine Variable hat auch keinen Status, sondern einen Wert. Eine Wertzuweisung geschieht immer mit =

    Wenn die Zuweisung in anderen Rules so funktioniert, dann hast Du mindestens ein Item mit identischem Namen. Dann landet der Wert aber nicht in der Variablen, sondern im Item als Status. Oder Du hast gar keine Variable, dachtest aber, eine zu haben

    Kommentar


      #3
      Danke udo1toni, wieder was gelernt.
      Und Du hat Recht in der anderen Rule ist es keine Variable sondern ein Item. Die Variable die ich gesehen habe heißt geringfügig anders.

      So funktioniert es nun:

      Code:
      var Number lastTempKind2 = 20
      
      rule "Temperaturanpassung Kind2 Samstag früh"
      when
           Time cron"0 0 5 ? * SAT *"// Samstags um 5 Uhr
      then
          lastTempKind2 = OG_Kind2_XTemp.state as Number
          OG_Kind2_WTemp.postUpdate(24)
      end

      Kommentar


        #4
        Hallo,

        Leider funktioniert die Rule noch nicht ganz, zwar wird der neue Sollwert in openhab mit "OG_Kind2_WTemp.postUpdate(24)" auch auf die 24°C gesetzt, nur kommt es am KNX-RTR von Kind2 nicht an. Wenn ich den Setpoint über die Sitemap verändere wird es korrekt übermittelt. Ich sehe bei dem postUpdate auch keinen Befehl auf dem KNX-Bus.

        Was mach ich hier falsch?

        knx.things
        Code:
        ThingdeviceRTR_OG_Kind2"RTR-Regler OG Kind 2" @ "Kind 2" [
                address="1.1.28",
                fetch=false,
                pingInterval=300,
                readInterval=0
            ] {
                       
                 Typenumber                :RTR_U_Temp        "RTR-Regler OG Kind 2 Ventilstellung"            [ ga="5.001:4/3/11" ]
                 Typenumber                :RTR_X_Temp        "RTR-Regler OG Kind 2 Temperatur"                [ ga="9.001:4/1/11" ]
                 Typenumber                :RTR_W_Temp       "RTR-Regler OG Kind 2 Solltemperatur"            [ ga="9.001:4/5/11+<4/2/11" ]
                 Typenumber                :RTR_A_Temp        "RTR-Regler OG Kind 2 Beriebsart"                [ ga="5.010:4/0/11" ]
            }
        sitemap
        Code:
        Setpoint item=OG_Kind2_WTemp icon="heating" minValue=7.0 maxValue=25.0 step=0.5
        items
        Code:
        Number          OG_Kind2_WTemp                  "Solltemperatur[%.1f °C]"         <temperature>    (OG_Kind2)                                ["Temperature"]                   {channel="knx:device:42a36ac8:RTR_OG_Kind2:RTR_W_Temp"}

        Kommentar


          #5
          Wie udotoni schrieb:

          Mit postUpdate aktualisierst du den Status. (Ähnlich eines Status-Objektes bei einem KNX Teilnehmer.)
          In diesem Fall von dem Temperatur Item.

          Wenn du mit der Regel auch wirklich den Sollwert setzen möchtest, musst du mit sendCommand arbeiten.
          Dann sollte der Wert auch an den RTR als Sollwert gesendet werden.
          Wenn du über die Sitemap etwas änderst, wird im Hintergrund auch ein Command abgesetzt.



          Zuletzt geändert von Confectrician; 27.11.2021, 16:20.

          Kommentar


            #6
            Zitat von Confectrician Beitrag anzeigen
            Wenn du mit der Regel auch wirklich den Sollwert setzen möchtest, musst du mit sendCommand arbeiten.
            Das wollte ich auch machen, hab aber statt sendCommand, sendUpdate geschrieben und das hat mir eine Fehlermeldung gegeben.
            Aber jetzt funktioniert es.
            Danke

            Kommentar

            Lädt...
            X