Ankündigung

Einklappen
Keine Ankündigung bisher.

Mit Numbern rechnen

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

    Mit Numbern rechnen

    Hallo zusammen,

    die Sprache ist mal wieder ein Problem, bei dem ich mich über ein bisschen Hilfe sehr freuen würde:
    Habe in Homematic eine Systemvariable, die einen Zählerstand speichert.

    Die Variable ist als item über
    Code:
    Number varWasserzaehler            "Zählerstand Wasser [%.2f m³]"   {homematic="variable=Wasserzaehler"}
    definiert.

    Wertänderungen (z.B. auf den Wert 8) funktionieren in einer Rule über
    Code:
    varWasserzaehler.sendCommand(8)
    Nun würde ich gerne bei jedem Zählerimpuls den Wert um einen Aufschlag erhöhen und den Wert in Homematic zurückschreiben
    Code:
    rule "Wasserzaehlerimpuls"
    when
        Item itmSK_Wasserzaehler received command or
        Item itmTestSwitch received command //normaler openHAB Switch, um die Rule manuell testen zu können
    then
    
    
        var float fImpuls = 0.05
        
        if (receivedCommand==ON) {
            //Relais ist true, d.h. die 0 Stellung des Zählers ist erreicht
            //Zählerwert um Impulswert erhöhen
            varWasserzaehler = varWasserzaehler + fImpuls //Fehlerzeile1
            
            varWasserzaehler.sendCommand((varWasserzaehler.state + fImpuls))      //Fehlerzeile 2
        }
        else {
            varWasserzaehler.sendCommand(8)
        }
    end
    Das klappt aber leider nicht, weil in den Fehlerzeilen 1 und 2 reklamiert wird
    incompatible types. Expected java.lang.string was float
    Wie geht's denn richtig?

    Danke für Eure Hilfe!

    #2
    Der Fehler ist recht klar. Du nutzt einen Number Item, als Quasi ein Gerät, welches eine Zahl darstellt. Das ist was anderes als eine Variable vom Typ Number. d.h. Du must mit dem State von Number operieren und nicht mit Number selber. Der state ist hier dann die Zahl und nicht das Gerät.

    Und jetzt habe ich nochmal genau gelesen. Zeile 2 ist der richtige Weg, aber es muss noch einbisschen Typecasting gemacht werden

    Code:
      // Aktuellen Wert in eine Variable
      var double currentValue = (varWasserzaehler.state as DecimalType).doubleValue
    
     // Den Impuls Offset
      var  double fImpuls = 0.05
    
    varWasserzaehler.sendCommand(currentValue+fImpuls)
    sollte funktionieren

    Thomas

    Kommentar


      #3
      Geht! Danke für Deine Erklärung!

      Kommentar

      Lädt...
      X