Ankündigung

Einklappen
Keine Ankündigung bisher.

Regel für Waschmaschinenzustand Ein/Aus anhand Stromverbrauch

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

    Regel für Waschmaschinenzustand Ein/Aus anhand Stromverbrauch

    Hallo,

    ich möchte den Zustand von Waschmaschine, Trockner und Spülmaschine anhand des aktuellen Stromverbrauchs bestimmen und dann anzeigen lassen.

    Leider funktioniert das nicht. Der Zustands-Schalter ändert sich nicht auf "ON", er bleibt immer aus. Ich habe die Strom-Werte in der Regel bewusst so gewählt, damit ich das für die Tests besser überprüfen kann.

    Hier meine Dateien:


    Sitemap:
    Code:
                Text item=Strom_Trockner
                Text item=Strom_Spuelmaschine
                Switch item=Zustand_Waschmaschine
                Switch item=Zustand_Trockner
                Switch item=Zustand_Spuelmaschine
    Items:
    Code:
    Group Strom
    /* Stromverbrauch */
    Number Strom_Waschmaschine        "Strom Waschmaschine [%.2f mA]"        <temperature>    (Strom)     { knx="2/3/2" }
    Number Strom_Trockner            "Strom Trockner [%.2f mA]"          <temperature>    (Strom)     { knx="2/3/3" }
    Number Strom_Spuelmaschine        "Strom Spuelmaschine [%.2f mA]"      <temperature>    (Strom)     { knx="2/3/50" }
    
    /* Gerätezustand Aus / Ein */
    Switch  Zustand_Waschmaschine        "Waschmaschine Zustand"            (Strom)  
    Switch  Zustand_Trockner            "Trockner Zustand"                (Strom)    
    Switch  Zustand_Spuelmaschine        "Spülmaschine Zustand"            (Strom)
    Rule:
    Code:
    //
    import org.openhab.core.library.types.*  
    import org.openhab.core.types.Command
    import org.openhab.core.persistence.*
    import org.openhab.model.script.actions.*
    import org.joda.time.*
    import java.lang.Math
    //
    
    
    // Regeln für Zustandsüberprüfung - Waschmaschine Ein / Aus
    //
    rule "Waschmaschine Zustand Ein"
    when
        item Strom_Waschmaschine changed
    then
        if (Zustand_Waschmaschine.state==OFF) {
            if  (Strom_Waschmaschine.state > 0.20) {
                sendCommand(Zustand_Waschmaschine, ON)
            }
        }
    end
    
    rule "Waschmaschine Zustand Aus"
    when
        item Strom_Waschmaschine changed
    then
        if (Zustand_Waschmaschine.state==ON) {
            if  (Strom_Waschmaschine.state < 0.10) {
                sendCommand(Zustand_Waschmaschine, OFF)
            }
        }
    end

    Wenn die Waschmaschine komplett aus ist, ist der Stromwert 0.30 mA. Sobald die Anzeige an der Maschien eingeschaltet wird, gehts auf mindestens 0.40 hoch. Ich möchte nicht überprüfen, ob das Waschprogramm noch aktiv ist (kommt ggf. später), sondern ob die Maschine überhaupt eingeschaltet ist. Bei uns wird öfter vergessen, dass die Maschine gelaufen ist und dann kommt man einen Tag später wieder in den Keller und die Wäsche riecht bereits muffig.


    Wenn ich nur einen Schalter definiere und sonst nichts weiter festgelegt wurde, dann ist der doch standardmäßig auf OFF oder nicht? Sonst würde ja keine der beiden Regeln jemals greifen. Im Display zeigt es mir den Switch jedenfalls als OFF an.
    Zuletzt geändert von halloween; 22.12.2015, 08:32.

    #2

    Da wäre ich mir nicht sicher, ob das auch mit Number-Werten so geht:
    Code:
    item Strom_Waschmaschine changed
    Zur Not könntest auch einen Time-based Trigger alle 5 oder 10 Minuten verwenden.


    Kommentar


      #3
      Das Widerstrebt mir ein wenig, dafür einen Timer laufen zu lassen. Die Waschmaschine läuft einmal in der Woche und dafür muss ich ständig einen Timer aktiv halten. Der Stromwert bleibt im ausgeschalteten Zustand sehr konstant bei 0.30, da würde die Regel natürlich so gut wie keine Last erzeugen.

      Kommentar


        #4
        hm,

        ich kann mir nicht vorstellen, dass du durch den Timer eine merkbar höhere Last verursachst.
        Aber gut, schon mal mit "received update" anstatt "changed" probiert?

        Kommentar


          #5
          Aaalso...
          Auf changed zu triggern, sollte funktionieren.

          Allerdings lässt Du zwei Rules auf das selbe Ereignis triggern. Grundsätzlich sollte das schon funktionieren, es ist nur nicht sonderlich elegant, zumal Du ohnehin anschließend mit einer if-Abfrage weiter machst.
          Der nächste Fehler taucht auf, weil Du das item nur schaltest, wenn es einen von zwei States hat - ON oder OFF. Es gibt aber immer noch einen dritten State, nämlich uninitialized, das ist der Wert, den das Item hat, solange es noch nie geschaltet oder upgedatet wurde, also bei jeder Änderung an einem .items-File oder openHAB-Neustart.
          Der eigentliche Fehler, warum Dein item nicht geschaltet wird, liegt aber darin begründet, dass der Vergleich fehlschlägt. Du möchtest eine Zahl vergleichen, keinen State. Also sollte Deine Rule so aussehen:
          Code:
          rule "Waschmaschinenzustand setzen"
          when
              item Strom_Waschmaschine changed
          then
              if (Zustand_Waschmaschine.state==ON) {
                  if (Strom_Waschmaschine.state as DecimalType < 0.10) //{} hier unnötig, da nur ein Befehl folgt
                      sendCommand(Zustand_Waschmaschine, OFF)
                  }
               else // alles, was nicht ON ist, also auch uninitialized!
                  if (Strom_Waschmaschine.state as DecimalType > 0.20)
                      sendCommand(Zustand_Waschmaschine, ON)
          end

          Kommentar


            #6
            Danke! Werd ich mal testen.

            Wenn ich <= abfragen möchte, dann kann ich einfach das "="-Zeichen ergänzen, oder? Also z.B. folgenes müsste klappen?

            Code:
             
             if (Strom_Waschmaschine.state as DecimalType <= 0.10)

            Kommentar


              #7
              Genau, == bedeutet ist gleich, <= bedeutet kleiner oder gleich, < bedeutet kleiner.

              Kommentar


                #8
                Mit Hilfe des Openhab-Forums bin ich nun endlich auf den Fehler gekommen...

                Code:
                when
                    item Strom_Waschmaschine changed
                then
                item gehört groß geschrieben. Mit "Item" klappts nun!

                Kommentar

                Lädt...
                X