Ankündigung

Einklappen
Keine Ankündigung bisher.

Spülmaschinen Status mittels FritzDect210 Steckdose

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

    #16
    Meinst du, du könntest mir das mal in meine Rule einbauen. Da wäre ich dir sehr dankbar.

    Viele Grüße

    Kommentar


      #17
      Also, ein Schuss ins Blaue (davon ausgehend, dass die Rule oben der aktuelle Stand ist):
      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
      var Long lDishwasherStart = 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;
          }
          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
      
          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)
                  var Integer iMinutes = 5
                  if((now.millis - lDishwasherStart)/60000 > 90)
                      iMinutes = 20
                  tDishwasher = createTimer(now.plusMinutes(iMinutes),[|
                      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)
                  lDishwasherStart = now.millis
                  logInfo("dishwasher","Spülmaschine: MODE_ACTIVE_1")
              }
          }
      end

      Kommentar


        #18
        Wenn ich die Rule einfüge erhalte ich das folgende:



        ==> /var/log/openhab2/openhab.log <==

        2020-09-14 08:32:44.118 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'spuelmaschine.rules' has errors, therefore ignoring it: [31,13]: no viable alternative at input 'var'

        Kommentar


          #19
          Ups, Klammern vergessen...
          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
          var Long lDishwasherStart = 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;
              }
              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
          
              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) {         // <--- hier
                      var Integer iMinutes = 5
                      if((now.millis - lDishwasherStart)/60000 > 90)
                          iMinutes = 20
                      tDishwasher = createTimer(now.plusMinutes(iMinutes),[|
                          eg_kueche_spuelmaschine_OpState.postUpdate(MODE_FINISHED_1)
                          logInfo("dishwasher","Spülmaschine: MODE_FINISHED_1")
                          tDishwasher = null
                      ])
                  }                                                                   // <-- und hier
              } else if(nLeistung > 10) {
                  tDishwasher?.cancel
                  tDishwasher = null
                  if(nMode != MODE_ACTIVE_1) {
                      eg_kueche_spuelmaschine_OpState.postUpdate(MODE_ACTIVE_1)
                      lDishwasherStart = now.millis
                      logInfo("dishwasher","Spülmaschine: MODE_ACTIVE_1")
                  }
              }
          end

          Kommentar


            #20
            Perfekt danke dir. Ich teste mal.

            Kommentar

            Lädt...
            X