Ankündigung

Einklappen
Keine Ankündigung bisher.

Erkennen, ob es heute schon geregnet hat

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

    Erkennen, ob es heute schon geregnet hat

    Hallo Zusammen,

    ich möchte meine Beregnungsanlage automatisieren. Dazu möchte ich prüfen, ob es gestern und heute bereits geregnet hat. Es ist eine KNX Wetterstation angebunden, die bei Regen "ON" sendet. Zur Zeit bekomme ich nur die Momentaufnahme, ob es gerade regnet oder nicht. Wie kann ich nun speichern ob es seit gestern bereits geregnet hat?
    Meine Idee war ein Zähler. Allerdings stehe ich gerade auf dem Schlauch wie ich das am sinnvollsten umsetze.

    Ich freue mich über Vorschläge.

    Viele Grüße
    Patrick

    #2
    Das geht über Persistence. Ja nachdem, was der Sensor ausspuckt, kannst Du z.B. die Regenmenge der letzten 36 Stunden abrufen, oder auch nur, ob der Sensor in den letzten 24 Stunden Regen registriert hat.

    Kommentar


      #3
      Hallo udo1toni,
      vielen Dank für den Ansatz. In die Richtung habe ich ebenfalls schon gedacht. Ich weiß wie ich persistierte Werte in einem Chart darstelle oder bei Systemstart wiederherstelle. Wie rufe ich nun ab, ob der Sensor in den letzten 24 Stunden etwas registriert hat? Hast du ein einfaches Beispiel?

      Vielen Dank schon einmal und einen tollen Wochenstart.

      Viele Grüße
      Patrick

      Kommentar


        #4
        Hallo Patrick,

        Genau genommen ist es wenig hilfrich, zu wissen, ob es geregnet hat: Könnten ja auch nur ein paar Tropfen gewesen sein. die den Pflanzen nicht helfen. Man will doch eigentlich wissen, wie viel es geregnet hat, wozu allerdings ein extra Regenmengensensor nötig ist. Hat man den nicht, könnte man wenigstens hilfsweise erfassen, wie lange es seit der letzten Bewässerung geregnet hat. Damit kann man die nachfolgende Bewässerungszeit proportional verringern (und nicht einfach nur ein/aus schalten).

        Ich würde allerdings ernsthaft über einen Bodenfeuchtesensor nachdenken: Der sagt Dir nämlich viel direkter, was Du wissen willst.

        Grüße von Horst
        Zuletzt geändert von hyman; 23.04.2018, 21:50.

        Kommentar


          #5
          Du kannst eine Rule verwenden, um ein ungebundenes Item mit den Daten Deiner Wahl zu füllen. In der Demo gibt es beispielsweise Maximum und Minimum Temperatur.
          Für ein persistiertes Item Regenmenge wäre das dann z.B.
          Code:
          rule "Regen innerhalb 24h"
          when
              Time cron "0 0 8 * * ?" //täglich 8 Uhr
          then
              if(Regenmenge.maximumSince(now.minusHours(24)).intValue = 0) {
                  //kein Regen, also gießen
              }
          end
          So, oder so ähnlich wäre mein Ansatz - aber da ich keine Regensensoren und vor allem bisher keine steuerbare Beregnung habe, ist das ungetestet.

          Kommentar


            #6
            Hallo Zusammen,
            @hyman: vielen Dank für deine Ausführungen. Da gebe ich dir recht. Die Regenmenge kann ich mit meiner Wetterstation leider nicht erfassen. Der Bodenfeuchte Sensor ist bereits in der Mache und geht die nächsten Tage an den Start.

            @Udo1toni: Das werde ich gleich mal testen. Vielen Dank.

            Kommentar


              #7
              Ach so , wenn der Sensor nur ein Schalter ist, kann man natürlich kein MaximumSince abfragen, aber man kann den Status erfragen, und ob der Status in den letzten 24 Stunden gewechselt hat:
              Code:
              rule "Regen innerhalb 24h"
              when
                  Item Regen received update
              then
                  if (Regen.state == OFF && !(Regen.changedSince(Now.minusHours(24)))) {
                      //kein Regen seit 24 Stunden
                  }
              end

              Kommentar


                #8
                ah, perfekt. Das wäre jetzt meine Denkarbeit heute Abend gewesen

                Kommentar


                  #9
                  Zitat von udo1toni Beitrag anzeigen
                  Ach so , wenn der Sensor nur ein Schalter ist, kann man natürlich kein MaximumSince abfragen, aber man kann den Status erfragen, und ob der Status in den letzten 24 Stunden gewechselt hat:
                  Code:
                  rule "Regen innerhalb 24h"
                  when
                  Item Regen received update
                  then
                  if (Regen.state == OFF && !(Regen.changedSince(Now.minusHours(24)))) {
                  //kein Regen seit 24 Stunden
                  }
                  end
                  Mir hat das auch sehr geholfen, vielen Dank.

                  Wie müsste der Code aussehen, wenn man bspw. die Bedingung einfügen wollte, dass es mindestens 1h geregnet haben muss in den letzten 24h. Ich habe auch keinen Regenmengenmesser, sondern nur eine Wetterstation die sagt "Regen ja / nein".

                  Ich hätte mir -- laienhaft -- vorgestellt, man setzt eine Variable wenn es beginnt zu regnen und setzt sie zurück, wenn es innerhalb einer Stunde aufhört. = kein Regen. NAch 24h setzt man die Variable automatisch auf den Ausgangswert zurück.

                  Und ganz generell: an welche Guidance sollte man sich halten, wenn man die Rulesprache von OpenHAB ein bisschen tiefer durchdringen will, als es in der Doku möglich ist?

                  Viele Grüße,
                  HajoKA
                  Zuletzt geändert von hajoka; 15.09.2018, 12:23. Grund: Rechtschreibung.

                  Kommentar


                    #10
                    Du kannst eine Regel mache, die einmal pro Minute läuft. Dort prüfst du ob es regnet und wenn ja, erhöhst du eine Variable.
                    Wenn diese 60 erreicht weist du es hat eine Stunde geregnet.
                    Du musst die dann nur irgendwann zurücksetzen.

                    Holger

                    Kommentar


                      #11
                      Die Rule-Sprache ist XTend. Die Doku gibt's hier: https://www.eclipse.org/xtend/documentation/index.html

                      Leider unterstützt OH nicht alles davon (eigene Klassen gehen zb nicht). Daneben sollte man sich mit den Klassenbiliotheken von Java beschäftigen zb java.math oder joda.time
                      KNX in Betrieb OpenHAB auf Intel NUC / Debian Darin eingebunden: Vallox Lüftung, Viessmann Wärmepumpe und SMA Wechselrichter, meine Lösung: https://github.com/StefanLSA/py-sma-modbus2

                      Kommentar


                        #12
                        Die Rules werden in einer DSL programmiert (DomainSpecificLanguage). XTend ist hier quasi ein Baukasten, welcher es sehr einfach macht, solche DSL zu erstellen. XTend wiederum ist, wenn ich es richtig im Kopf habe, in Java programmiert.
                        Da die Programmierer schon in Java unterwegs sind, ist es naheliegend, dass das Design sich in vielen Punkten an Java anlehnt.
                        Allerdings haben die Programmierer auch versucht, das Ganze etwas weniger strikt zu gestalten. Zum Beispiel wird kein Semikolon am Ende einer Anweisung benötigt.
                        Man kann relativ leicht Funktionen nachrüsten, wenn man weiß, wo sich diese in den Klassen von Java verbergen - wobei es da auch Grenzen gibt, die aber beim Programmieren für die openHAB-Automation keine Rolle spielen sollten.

                        Kommentar


                          #13
                          Das ist jetzt mal eine Grobkonstruktion. Wobei ich dem Log entnehme, dass insbesondere um die do-while-Schleife die Klammern nicht richtig gesetzt sein dürften.
                          Jeden Tag, bevor die Bewässerung startet (oder eben nicht) würde ich Regen_in_24h auf "off" zurücksetzen.
                          Was denkt Ihr dazu?


                          // Regen_in_24h in items als switch definiert
                          rule "Setze regen_in_24=true, wenn es einmal in 24h eine Stunde geregnet hat"
                          when
                          Item wetter_regen changed to ON
                          then
                          { do i=i+1
                          Thread::sleep(60) }
                          while (wetter_regen = ON && i<=60)
                          if (i>= 60) { Regen_in_24h.postUpdate(ON) }
                          }
                          end

                          Kommentar


                            #14
                            Ich würde es, wie oben gesagt, in eine minütliche Regel packen und z.b. um 8 Uhr prüfen ob es geregnet hat.
                            Bevor der Rasensprenger eingeschaltet wird sollte man vielleicht nochmal prüfen ob es nicht gerade doch regnet.
                            Bei einem Neustart geht hier allerdings regen_count verloren, evtl. sollte man das in ein Number Item packen
                            Ungetestet:

                            Code:
                            var Integer regen_count = 0
                             
                            rule "minuetliche Werte"
                            when
                                Time cron "0 * * * * ?"
                            then
                            
                                if (wetter_regen.state == ON) regen_count = regen_count +1
                                
                                if (regen_count >= 60)  Regen_in_24h.postUpdate(ON)
                                
                                if (now.getHourOfDay() == 8 && now.getMinuteOfHour() == 0)  {
                                       regen_count = 0
                                       Regen_in_24h.postUpdate(OFF)
                                }
                            end
                            Holger
                            Zuletzt geändert von HolgerW; 16.09.2018, 15:46.

                            Kommentar


                              #15
                              Danke, Holger.
                              Wenn man Deinen Ansatz wählt, dann sollte man doch im Grunde die Variable regen_count als number item auslegen und diese als "Regenminuten in den letzten 24h" ausgeben und auswerten.
                              Wenn man es noch weitertreiben wollte, könnte man die Regenminuten pro Woche ermitteln und daran anschließend eine dynamische Bewässerungsdauer ableiten...
                              Korrekt?

                              Kommentar

                              Lädt...
                              X