Ankündigung

Einklappen
Keine Ankündigung bisher.

Spülmaschinen Status mittels FritzDect210 Steckdose

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

    Spülmaschinen Status mittels FritzDect210 Steckdose

    Hallo zusammen,

    ich habe meine Waschmaschine mit dem FritzDect 210 Zwischenstecker Smart gemacht indem ich den aktuellen Stromverbrauch einen Status zuordne und diese verarbeite.

    Nun möchte ich dieses gerne auch für meine Spülmaschine machen.

    Was bei der Waschmaschine funktioniert, funktioniert bei der Spülmaschine nicht so optimal.

    Die Spülmaschine hat während des Spülvorgangs sogenannte "tote Punkte" sodass der Verbrauch für 1-3 Minuten soweit abfällt, dass der Status sich schon zu "fertig" ändert.

    Kann ich irgendwie eine Verzögerung einbauen, dass er bei dem Status Fertig eine Verzögerung einbaut und nochmal die Leistung überprüft?

    Wie könnte das aussehen.

    Hier die Rule:


    Code:
    val Number MODE_OFF_1 = 0
    val Number MODE_STANDBY_1 = 1
    val Number MODE_ACTIVE_1 = 2
    val Number MODE_FINISHED_1 = 3
    
    rule "Spuelmaschine Consumption State Machine"
    when
    Item eg_kueche_spuelmaschine_leistung changed
    then
    if (eg_kueche_spuelmaschine_leistung.state < 0.2) {
    eg_kueche_spuelmaschine_OpState.postUpdate(MODE_OF F_1)
    logInfo("INFO","Spuelmaschine: MODE_OFF_1")
    }
    else if (eg_kueche_spuelmaschine_leistung.state > 10) {
    eg_kueche_spuelmaschine_OpState.postUpdate(MODE_AC TIVE_1)
    logInfo("INFO","Spuelmaschine: MODE_ACTIVE_1")
    }
    else if (eg_kueche_spuelmaschine_leistung.state < 4.5) {
    if (eg_kueche_spuelmaschine_OpState.state == MODE_OFF_1) {
    eg_kueche_spuelmaschine_OpState.postUpdate(MODE_ST ANDBY_1)
    logInfo("INFO","Spuelmaschine: MODE_STANDBY_1")
    }
    else if (eg_kueche_spuelmaschine_OpState.state == MODE_ACTIVE_1) {
    eg_kueche_spuelmaschine_OpState.postUpdate(MODE_FI NISHED_1)
    logInfo("INFO","Spuelmaschine: MODE_FINISHED_1")
    
    
    }
    }
    end

    #2
    Ja, natürlich, das geht mit einem Timer. Schau mal hier: https://community.openhab.org/t/wash...hine/15587/172

    Kommentar


      #3
      Sieht komplex aus.

      Wie müsste ich den bei mir oben einbauen um eine Verzögerung beim Wechsel von ACTIVE auf FINISHED zu verzögern? Könntest du mir das bitte mal einbauen?

      Das wäre klasse.

      Kommentar


        #4
        Eigentlich bräuchte man dazu zunächst ein Verbrauchsprofil
        Ohne die Rule ausprobiert zu haben:
        Code:
        val Number MODE_OFF_1 = 0
        val Number MODE_STANDBY_1 = 1
        val Number MODE_ACTIVE_1 = 2
        val Number MODE_FINISHED_1 = 3
        var Timer tDishwasher = null
        
        rule "Spuelmaschine Consumption State Machine"
        when
            Item eg_kueche_spuelmaschine_leistung changed
        then
            if(!(eg_kueche_spuelmaschine_leistung.state instanceof Number)) {
                logWarn("dishwasher","Leistung ungültig! ({}) Abbruch!",eg_kueche_spuelmaschine_leistung.state)
                return;
            }
            if(!(eg_kueche_spuelmaschine_OpState.state instanceof Number)) {
                logWarn("dishwasher","Opstate ungültig! ({}) Abbruch!",eg_kueche_spuelmaschine_OpState.state)
                return;
            }
            val Number nLeistung = eg_kueche_spuelmaschine_leistung.state as Number
            val Integer nMode = (eg_kueche_spuelmaschine_OpState.state as Number).intValue
        
            if(nLeistung < 0.2) {
                eg_kueche_spuelmaschine_OpState.postUpdate(MODE_OFF_1)
                logInfo("dishwasher","Spülmaschine: MODE_OFF_1")
            } else if(nLeistung < 4.5) {
                if(nMode == MODE_OFF_1) {
                    eg_kueche_spuelmaschine_OpState.postUpdate(MODE_STANDBY_1)
                    logInfo("dishwasher","Spülmaschine: MODE_STANDBY_1")
                } else if(nMode == MODE_ACTIVE_1 && tDishwasher === null)
                    tDishwasher = createTimer(now.plusMinutes(5),[|
                        eg_kueche_spuelmaschine_OpState.postUpdate(MODE_FINISHED_1)
                        logInfo("dishwasher","Spülmaschine: MODE_FINISHED_1")
                        tDishwasher = null
                    ])
            } else if(nLeistung > 10) {
                tDishwasher?.cancel
                tDishwasher = null
                if(nMode != MODE_ACTIVE_1) {
                    eg_kueche_spuelmaschine_OpState.postUpdate(MODE_ACTIVE_1)
                    logInfo("dishwasher","Spülmaschine: MODE_ACTIVE_1")
                }
            }
        end

        Kommentar


          #5
          Vom Verbrauch her passt das, danke dir. ich teste mal.

          Kommentar


            #6
            Ich habe die Rule jetzt mal so wie du sie umgebaut hast übernommen,aber jetzt bekomme ich garkeinen Status mehr. Nur noch Opstate ungültig! (NULL) Abbruch!

            Ne Idee?

            Kommentar


              #7
              Ja... Der Opstate muss halt einmal initial gesetzt werden. Das einfachste wird sein, dass Du statt des return; ein postUpdate(0) einbaust. Allerdings solltest Du
              eg_kueche_spuelmaschine_OpState vermutlich besser über mapdb Persistence mit everyChange,restoreOnStartup beim Start von openHAB den Status auf den letzten bekannten Status setzen lassen (die Initialisierung brauchst Du aber trotzdem...)

              Eine weitere Alternative wäre, die Konstante nMode stattdessen als Variable zu definieren und auf einen Default wert zu setzen.
              Code-Snippet alt:
              Code:
                  if(!(eg_kueche_spuelmaschine_OpState.state instanceof Number)) {
                      logWarn("dishwasher","Opstate ungültig! ({}) Abbruch!",eg_kueche_spuelmaschine_OpState.state)
                      return;
                  }
                  val Number nLeistung = eg_kueche_spuelmaschine_leistung.state as Number
                  val Integer nMode = (eg_kueche_spuelmaschine_OpState.state as Number).intValue
              Code-Snippet neu:
              Code:
                  var Integer nMode = MODE_OFF_1
                  if(eg_kueche_spuelmaschine_OpState.state instanceof Number) {
                      nMode = (eg_kueche_spuelmaschine_OpState.state as Number).intValue
                  }
                  val Number nLeistung = eg_kueche_spuelmaschine_leistung.state as Number

              Kommentar


                #8
                Hallo udo1toni,

                ich habe ja von dir die folgende Rule bei mir eingebaut um den Spülmaschinenstatus per Push Notification zu versenden.

                Jetzt habe ich folgendes Problem erkannt.

                Die Spülmaschine geht bei unter 4,5 W in den Standby Modus und ist damit fertig aber noch an. Nach 30 Minuten geht die Spülmaschine dann von Standby auf Aus.
                Die Werte , die in der Rule festgelegt werden passen auch soweit nur das in dem rot umkreisten Bereich (wenn die Spülmaschine von Standby auf Aus wechselt) nochmal ein kleiner Peak von 13,2 W kommt und sie damit natürlich sagt ich bin nochmal gestartet worden.

                Hast du ne Idee wie ich die Rule ändern muss, damit das nicht mehr passiert?

                Unbenannt.JPG
                Angehängte Dateien

                Kommentar


                  #9
                  Mein erster Tipp wäre, statt auf >10 einfach auf >14 zu testen, es sei denn, es gibt einen guten Grund für dne Wert, dann müsste man nochmals drüber nachdenken

                  Kommentar


                    #10
                    Okay teste ich mal,klingt logisch, aber es scheint bei einer Spülmaschine auch was schwieriger zu sein, da sie öfters mal Ruhepausen einlegt.

                    Kommentar


                      #11
                      SaschaQ Wie hast du das visualisiert?

                      Danke & lG

                      Kommentar


                        #12
                        Ich habe nur die Leistung als Text item visualisiert um zu sehen, wie hoch der Verbrauch gerade ist und eben den Status als Text.

                        Mir ging es hauptsächlich um die Push Notification.

                        Kommentar


                          #13

                          Kommentar


                            #14
                            Huhu Udo1toni,

                            ich habe nochmal eine Frage.

                            Ich habe jetzt festgestellt, dass es bei dem 2 Stunden Programm der Spülmaschine sehr lange dauert bis diese piepst und tatsächlich fertig ist. Openhab meldet dies aber schon früher, da der Verbrauch am Ende schon sehr stark abfällt. Dazu benutze ich ja den Timer von 20 Minuten.

                            Jetzt möchte ich gerne, dass die Laufzeit in der Rule gemessen wird, solange Spülmaschine auf Active steht.

                            Ist der Status Active für länger als 1Stunde 30 Minute gegeben dann soll am Ende beim Wechsel von Active auf Finished der Verzögerungstimer von 20 Minuten greifen.

                            Ist die Laufzeit aber kürzer als 1 Stunde 30 Minuten, dann soll nur ein Verzögerungstimer von 5 Minuten beim Wechsel von Active auf Finished greifen.

                            Kannst du mir das einbauen?

                            Das wäre super klasse

                            Danke Dir und einen schönen Sonntag.

                            Kommentar


                              #15
                              Da gibt es verschiedene Möglichkeiten.
                              Zum Beispiel kannst Du eine globale Variable definieren (Typ Long, ich verwende hier mal longStart als Namen) und in dieser Variablen beim Aktivieren der Maschine mittels longStart = now.millis den Startzeitpunkt speichern. Später kannst Du dann in der Rule abfragen, ob now.minusMinutes(90).millis kleiner oder größer als longStart ist.
                              Oder Du rechnest (now.millis - longStart)/60000 und prüfst, ob das Ergebnis größer oder kleiner 90 ist.

                              Du kannst das auch mit DateTime Items machen, aber es ist ekelig, die entsprechenden Zeitstempel innerhalb einer Rule zu erzeugen.

                              Du kannst auch das active-Item persistieren und prüfen, ob .changedSince(now.minusMinutes(90)) true oder false liefert. Vorteil: funktioniert auch über einen Neustart von openHAB hinaus. Nachteil: Persistence nötig.

                              Kommentar

                              Lädt...
                              X