Ankündigung

Einklappen
Keine Ankündigung bisher.

Regendauer berechnen

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

    Regendauer berechnen

    Hallo zusammen,

    ich habe einen Regensensor der Regen an/aus sendet.

    Kann mir jemand sagen, wie eine Rule aussehen kann, die eine Regendauer berechnet, sodass ich diese in einem Item visualisieren oder weiterverarbeiten kann.

    Um ein Beispiel wäre ich dankbar.

    Danke Euch

    #2
    Schau mal hier, das könnte Dir helfen.

    Zeit zwischen Aus und Ein ermitteln

    Kommentar


      #3
      Okay super danke:

      Ich habe es jetzt mal für mich wie folgt abgeändert:

      Code:
      
      var Long RegenOffTime = null
      
      rule "Regendauer berechnen"
      
      when
      
      Item ws_regen changed
      
      then
      
      var Number nDuration = 0
      
      if(newState == ON) {
      if(RegenOffTime !== null)
      nDuration = (now.millis - RegenOffTime)/1000
      logInfo("timeRegen","Es hat {} Sekunden geregnet",nDuration.intValue)
      Regendauer.postupdate(nDuration)
      } else {
      RegenOffTime = now.millis
      }
      end
      Habe ich das richtig gemaht mit der Berechnung und durch 1000 geteilt?
      Kann ich die Zeit so in das Item Regendauer schreiben?
      Zuletzt geändert von SaschaQ; 08.11.2020, 18:55.

      Kommentar


        #4
        Keine eine Idee? Vielleicht udo1toni?

        Kommentar


          #5
          Funktionierts denn nicht?
          Sollte so gehen.

          Kommentar


            #6
            Bekomme diese Meldung:
            2020-11-10 13:45:09.001 [WARN ] [el.core.internal.ModelRepositoryImpl] - Configuration model 'wetterstation.rules' has errors, therefore ignoring it: [30,1]: missing EOF at 'var'

            Ist denn auch die Umrechnung korrekt? Funktioniert das so?

            Kommentar


              #7
              Das Problem hierbei ist, dass die Meldung sich auf eine Zeile bezieht, die nicht dargestellt ist

              Die Rule als solche sieht erst mal gut aus. Mögliche Korrekturen: long statt Long und ws_regen.state statt newState.

              Kommentar


                #8
                Der Fehler kommt in Zeile

                ​​​​​​
                var Number nDuration = 0

                Kommentar


                  #9
                  Das Problem kommt von "var Long RegenOffTime = null". Hast Du diese Zeile ganz an den Anfang deiner Datei gesetzt, vor allen Rules?
                  Wenn ich es bei mir zwischenrein schreibe, erhalte ich auch den Fehler von Dir.

                  Kommentar


                    #10
                    Ah perfekt, das geht jetzt.

                    Jetzt möchte ich das ganze gerne in Minuten und Sekunden darstellen.

                    oder eben als Number als kommazahl, das reicht auch,

                    wie bekomme ich das hin?
                    Aktuell bekomme ich immer nur volle Minuten in meiner Sitemap angezeigt und hinter dem Komma steht nichts.

                    Code:
                    rule "Regendauer berechnen"
                    
                    when
                    
                    Item ws_regen changed
                    
                    then
                    
                    var Number nDuration = 0
                    
                    if(ws_regen.state == CLOSED) {
                    if(RegenOffTime != null)
                    nDuration = ((now.millis - RegenOffTime)/1000)/60
                    logInfo("timeRegen","Es hat {} Minute geregnet",nDuration.intValue)
                    ws_Regendauer.postUpdate(nDuration)
                    } else {
                    RegenOffTime = now.millis
                    }
                    end

                    Kommentar


                      #11
                      Die Frage wäre ja, wie Du das Item (bzw. dessen Label) definiert hast.

                      Die Anzeige in Minuten und Sekunden wirst Du nicht direkt erreichen können, sondern nur über ein String Item, welchem Du die Zeit als Text übergeben musst.
                      Die Formel
                      Code:
                      nDuration = ((now.millis - RegenOffTime)/1000)/60
                      lässt sich mit weniger Aufwand genausogut ausgeben:
                      Code:
                      nDuration = (now.millis - RegenOffTime)/60000

                      Umsetzung in Minuten und Sekunden (ohne Berücksichtigung führender Nullen...):
                      Code:
                      rule "Regendauer berechnen"
                      when
                          Item ws_regen changed
                      then
                          var Number nDuration = 0
                      
                          if(ws_regen.state == CLOSED) {
                              if(RegenOffTime !== null)
                                  nDuration = ((now.millis - RegenOffTime)/1000).intValue
                              val Number nMin = (nDuration/60).intValue
                              val Number nSec = nDuration - nMin * 60
                              logInfo("timeRegen","Es hat {} Minute(n) und {} Sekunde(n) geregnet",nMin,nSec)
                              ws_strRegendauer.postUpdate(nMin.toString+":"+nSec.toString))
                          } else {
                              RegenOffTime = now.millis
                          }
                      end
                      Das Item muss natürlich vom Typ String sein (deswegen der geänderte Name...)
                      Zuletzt geändert von udo1toni; 11.11.2020, 23:08.

                      Kommentar


                        #12
                        Cool besten Dank,

                        Ich habe alle Items der Wetterstation gruppiert und habe diese Gruppe auch in der Sitemap so angegeben. Die Regendauer bleibt aber irgendwie leer.

                        Muss ich jetzt alle Items der Wetterstation Gruppe einzeln in der Sitemap angeben oder sollte das String Item vom der Sitemap automatisch als Text Item ausgegeben werden?

                        Kommentar


                          #13
                          Der Text wird ja nur gesetzt, wenn ws_regen seinen Status ändert, und auch nur dann, wenn es den Status auf CLOSED ändert.
                          Übrigens fände ich Switch mit ON und OFF hier wesentlich sinnvoller. Und falls Du nun schreibst: "Aber dann ist da der Schalter in der Sitemap zu sehen", dann nimm bitte das Text Widget zur Darstellung. Der Name Switch ist nur zufällig in Sitemap und Items vorhanden, die beiden haben nicht zwingend etwas miteinander zu tun.


                          Kommentar


                            #14
                            Es funktioniert ja auch alles und das Item bekommt auch den richtigen Text, nur wird dieser in meiner Sitemap nicht angezeigt.

                            Ich habe die Items der Wetterstation alle in gWetterstation gruppiert und diese auch als Group in das Sitemap programmiert, sodass ich nicht jedes Item einzeln einstellen muss.

                            Müsste ich das hier machen, da sonst das String Item nicht als Text item in der Sitemap erkannt wird?

                            Kommentar


                              #15
                              Dann hast Du im Label des Items keinen Platzhalter vorgesehen. Wenn Du das Label in der Sitemap setzt:
                              Code:
                              Text item=myItem label="Mein Label [%s]"
                              Du solltest überhaupt kein Group Widget verwenden das ist nur eine schmutzige Abkürzung. Du verlierst jegliche Möglichkeit der Kontrolle.

                              Kommentar

                              Lädt...
                              X