Ankündigung

Einklappen
Keine Ankündigung bisher.

Variablen in Rules

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

    Variablen in Rules

    Ich habe da ein für mich gerade schwer nachvollziehbares Problem mit einer Regel und vielleicht hat ja einer von euch eine Idee.

    Das Item:
    Code:
    Number                Zisterne                "Regenwasser [%.0f%%]"
    Die Regel:
    Code:
    rule "Zisterne"
    when
        Item Zisterne received update
    then
        var Number percent = 0
        if (Zisterne.state instanceof DecimalType) {
            percent = Zisterne.state as DecimalType
        }
        logInfo("RULE", "Zisterne="+percent)
        if (percent == 0) {
            logInfo("RULE", "Zisterne leer")
        } else {
            logInfo("RULE", "Zisterne nicht leer")
        }
        if (percent >= 95) {
            logInfo("RULE", "Zisterne voll")
        } else {
            logInfo("RULE", "Zisterne nicht voll")
        }
    end
    Der Output:
    Code:
    Zisterne=98
    Zisterne nicht leer
    Zisterne nicht voll
    Erwartet hätte ich eher ein "Zisterne voll". Wenn jedoch ein "(Zisterne.state as DecimalType) >= 95" einfüge, funktioniert das alles wie es soll. Prinzipiell kein großes Problem, jedoch macht es die Regel nicht unbedingt lesbarer.

    #2
    Versuche mal statt var Number ein var int und entsprechend bei der Zuweisung ein (Zisterne.state as DecimalType).intValue.

    Kommentar


      #3
      Die Ausgabe ist leider die Gleiche...

      Kommentar


        #4
        Das kann eigentlich nicht sein, das erste logInfo sollte nämlich schon eine Fehlermeldung schmeißen... korrekt funktionieren sollte dann
        Code:
        logInfo("RULE","Zisterne = {}",percent)
        weil int ein primitive ist, es sollte also kein toString geben, entsprechend sollte der Versuch, einen String aufzubauen fehl schlagen.

        Kommentar


          #5
          Hab das nochmal ausprobiert:
          Es geht!. Entweder hatte ich noch einen Tippfehler oder ein Mainzelmännchen hat jetzt noch irgendein Bit umgekippt.

          Die Stringverkettung funktioniert übrigens auch mit primitiven Datentypen. Ein
          Code:
          var int percent = (Zisterne.state as DecimalType).intValue
          logInfo("RULE", "Zisterne="+percent)
          tut wirklich, was man erwartet.

          Danke an udo1toni!

          Gruß Björn

          Kommentar


            #6
            Konnte man früher nicht auch Themen als "gelöst" markieren?

            Kommentar


              #7
              Ich meine, mich zu erinnern, dass man das nur über den Umweg Ausgangspost editieren (also Überschrift ergänzen) kann.

              Kommentar

              Lädt...
              X