Bewässerung wetterabhängig

Begonnen von Maui, 06 Juni 2019, 10:49:07

Vorheriges Thema - Nächstes Thema

Maui

Moin,

Aktuell bewässere ich abends, wenn die Regenwahrscheinlichkeit am Tag <= 40 % ist.
Dazu nehme ich proplanta.
Nun soll Boden ja nicht so gut Wasser aufnehmen wenn er warm ist.
Die beste Zeit zum wässern soll wohl nachts 3/4 sein. Da ich nicht will, dass meine Nachbarn mich für völlig bekloppt halten, fände ich 7 Uhr ist ein guter Kompromiss.
Nun würde ich mein DOIF gerne erweitern und gucken, ob es gestern geregnet hat und ob es heute regnen soll. Am liebsten dann noch mit Regensäule, also wieviel es geregnet hat.
Ich weiß es gibt Feuchte/Regen Sensoren, aber auf die möchte ich gerne verzichten.
Erstmal würde mich interessieren was ihr generell von denn Vorgehen haltet?!

Mit proplanta kriege ich problemlos raus, ob es heute regnen soll und wieviel.
Schwieriger wird dann schon eher, ob es gestern wirklich geregnet hat, so wie vorhergesagt.
Hat einer von euch Erfahrungen damit, ob proplanta (oder ein anderer detaillierter Fhem-tauglicher Wetterdienst) auch seine forecasts auf vergangenes anpasst?
Ein Beispiel zum Verständnis:
fc0_chOfRain06 50
Heute morgen sollte es bei mir zu 50% regnen. Es hat auch geregnet.
Der Wert wurde scheinbar nicht angepasst, sonst wäre er jetzt höher.
Oder wird nur der Wert der Regensäule im Nachgang angepasst?
fc0_rain06 3.2

Ich weiß ich könnte alle Werte mitloggen und beim nächsten Fall schauen, aber ich hoffe dass jemand von euch schon mal vor der gleichen Fragestellung stand.

Gruß
Maui

Bartimaus

Moin,

bei mir hat es mit Proplanta und/oder allen anderen Vorhersagediensten leider nicht so gut geklappt. Ich nutze jetzt einen Regenmengenmesser und alles ist gut.
Bewässern tu ich nachts um 0400... um die Zeit sollten die Nachbarn schlafen...
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Christoph Morrison

#2
Anmerkung vom 26.08.2020:
Kurzer Hinweis an Leser dieses Threads, da ich in letzter Zeit mehrere Anfragen bzgl. meines Bewässerungs-Forecasts bekommen habe:
Ich nutze diesen Forecast schon länger nicht mehr und kann deshalb auch keinen Support (mehr) dafür geben.



Ich hatte ähnliche Gedanken. Ich lasse FHEM jeden morgen entscheiden, ob heute gewässert werden soll oder nicht. Feuchtesensoren waren leider zu unzuverlässig, deshalb bin ich auf ein rein rechnerisches Modell ausgewichen. Wie du nutze ich Proplanta.

Ich bewerte verschiedene Punkte:

i) Zeit seit der letzten Bewässerung
Ist die letzte Bewässerung länger her als $threshold, erhöht das die Wahrscheinlichkeit, das bewässert werden sollte. Aber nur, wenn es auch warm ist - im Winter schläft die Bewässerung.


probability_last_watering_run {
    my $time_diff       = ReadingsVal("$name", "time_diff_last_watering_run",0);
    my $temp_max        = ReadingsVal("$name", "max_yesterday", 9.09);
    my $temp_threshold  = ReadingsVal("$name", "threshold_max_daily_temp", 0);

    return ($time_diff * 0.0001 * (($temp_max - $temp_threshold) * 0.0001))
},


ii) Tagestemperatur des vergangenen Tages
Wenn es gestern wärmer war (aktuell 18°C), erhöht sich die Wahrscheinlichkeit, dass bewässert werden muss. Herangezogen wird die Maximaltemperatur des letzten Tages.


probability_daily_max_temp {
    my $temp_max        = ReadingsVal("$name", "temp_max_last_day", 9.09);
    my $temp_threshold  = ReadingsVal("$name", "threshold_max_daily_temp", 0);

    return (
        $temp_max - $temp_threshold
    ) * 0.05;
},


iii) Regenwahrscheinlichkeit
Wenn es sehr wahrscheinlich ist, dass es ausreichend regnen wird, muss nicht bewässert werden. Die Qualität der Vorhersagen nehmen im zeitlichen Verlauf aber ab, deshalb ist Regen morgen weniger "wert" als heute Regen heute.


probability_rain_today {
    return 0.5 - (
        (
            (
                ReadingsVal("g.weather.proplanta", "fc0_chOfRainNight", 0) +
                ReadingsVal("g.weather.proplanta", "fc0_chOfRainDay", 0)
            ) / 2 *   ReadingsVal("g.weather.proplanta", "fc0_rain", 0)
        ) / 10 * 0.05
    )
},

probability_rain_tomorrow {
    return 0.3 - (
    (
        (
                ReadingsVal("g.weather.proplanta", "fc1_chOfRainNight", 0) +
                ReadingsVal("g.weather.proplanta", "fc1_chOfRainDay", 0)
            ) / 2 *   ReadingsVal("g.weather.proplanta", "fc1_rain", 0)
        ) / 10 * 0.05
    )
},



iv) Verdunstung.
Viel Verdunstung macht Boden durstig.


probability_evapor {
    return (ReadingsVal("g.weather.proplanta", "fc0_evapor", 1) * 0.05)
},


Wird aus den Einzelwerten eine Summe von 1 erreicht, wird bewässert.

Heraus kommt dabei dann sowas (die ganzen Events von Proplanta habe ich entfernt):

Internals:
   .FhemMetaInternals 1
   CFGFN      ./cfg.d/gf/out/garden.cfg
   DEF        (
        (
                [gf.out.garden.watering.control:last_run]
            or  [g.weather.temp.daily.max:max_yesterday]
            or  [g.weather.proplanta:"fc(?:0|1)_(?:chOfRain(?:Day|Night)|rain)"]
        )
    )
    (
        ## do nothing, just calculate
    )
   FUUID      5cdd483c-f33f-5647-de75-e1c7d394f889b3a6
   FVERSION   98_DOIF.pm:0.193030/2019-05-01
   MODEL      FHEM
   NAME       gf.out.garden.watering.forecast
   NR         3814
   NTFY_ORDER 50-gf.out.garden.watering.forecast
   STATE      Bewässerung nicht benötigt (-1.51 Punkte)
   TYPE       DOIF
   VERSION    19303 2019-05-01 08:47:16
   .attraggr:
   .attrminint:
   .userReadings:
     HASH(0x87dd978)
     HASH(0xa7e1168)
     HASH(0xc6f5148)
     HASH(0xc2c3ca8)
     HASH(0xc27f360)
     HASH(0xc862200)
     HASH(0xc71e710)
     HASH(0xbf065a8)
   READINGS:
     2019-06-06 11:25:59   Device          g.weather.proplanta
     2018-07-01 01:10:53   chance_of_rain_today_threshold 80
     2018-07-01 01:09:53   chance_of_rain_tomorrow_threshold 80
     2019-06-06 11:25:59   cmd             1
     2019-06-06 11:25:59   cmd_event       g.weather.proplanta
     2019-06-06 11:25:59   cmd_nr          1
     2019-06-06 11:25:59   e_g.weather.proplanta_events [...]
     2019-06-06 00:00:00   e_g.weather.temp.daily.max_max_yesterday 34.05
     2019-06-05 18:48:53   mode            enabled
     2019-06-06 11:25:59   probability_daily_max_temp 0.8025
     2019-06-06 11:25:59   probability_evapor 0.1
     2019-06-06 11:25:59   probability_last_watering_run -0.0538657614
     2019-06-06 11:25:59   probability_rain_today 0.335
     2019-06-06 11:25:59   probability_rain_tomorrow -2.69
     2018-07-01 01:22:22   rain_threshold  2
     2019-06-06 11:25:59   state           -1.51
     2019-06-06 11:25:59   suggest_watering 0
     2019-06-06 11:25:59   temp_max_last_day 34.05
     2018-07-01 13:33:58   threshold_last_watering_run 36000
     2018-07-01 13:36:23   threshold_max_daily_temp 18
     2019-06-06 11:25:59   time_diff_last_watering_run 604554
   Regex:
     accu:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0                   (                 ::ReadingValDoIf($hash,'gf.out.garden.watering.control','last_run')             or  ::ReadingValDoIf($hash,'g.weather.temp.daily.max','max_yesterday')             or  ::EventDoIf('g.weather.proplanta',$hash,'fc(?:0|1)_(?:chOfRain(?:Day|Night)|rain)',1)         )     
   devices:
     0           gf.out.garden.watering.control g.weather.temp.daily.max g.weather.proplanta
     all         gf.out.garden.watering.control g.weather.temp.daily.max g.weather.proplanta
   do:
     0:
       0                       
     1:
   helper:
     event      [...]
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   g.weather.proplanta
     timerevent [...]
     triggerDev g.weather.proplanta
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: g.weather.proplanta
       state: -1.51
     timerevents:
        [...]
   internals:
   itimer:
   readings:
     0           gf.out.garden.watering.control:last_run g.weather.temp.daily.max:max_yesterday
     all         gf.out.garden.watering.control:last_run g.weather.temp.daily.max:max_yesterday
   trigger:
     all         g.weather.proplanta
   uiState:
   uiTable:
Attributes:
   alias      Bewässerungsprognose
   do         always
   group      Gartenbewässerung
   icon       unknown@black
   initialize 1
   room       hidden
   startup    set $SELF checkall
   state      [?#sum:d2:"$SELF":"probability_.*"]
   stateFormat {
        return sprintf("Bewässerung %sbenötigt (%.2f Punkte)",
            (ReadingsNum("$name", "suggest_watering",0) == 0) ?
                'nicht ' : '',
            ReadingsNum("$name", "state", "?")
        );
    }
   userReadings time_diff_last_watering_run {
        return ReadingsAge("gf.out.garden.watering.control","last_run",0)
    },
   
    temp_max_last_day {
        return ReadingsVal("g.weather.temp.daily.max", "max_yesterday", 9.09);
    },
   
    probability_last_watering_run {
        my $time_diff       = ReadingsVal("$name", "time_diff_last_watering_run",0);
        my $temp_max        = ReadingsVal("$name", "max_yesterday", 9.09);
        my $temp_threshold  = ReadingsVal("$name", "threshold_max_daily_temp", 0);
   
        return ($time_diff * 0.0001 * (($temp_max - $temp_threshold) * 0.0001))
    },
   
    probability_daily_max_temp {
        my $temp_max        = ReadingsVal("$name", "temp_max_last_day", 9.09);
        my $temp_threshold  = ReadingsVal("$name", "threshold_max_daily_temp", 0);
   
        return (
            $temp_max - $temp_threshold
        ) * 0.05;
    },
   
    probability_rain_today {
        return 0.5 - (
            (
                (
                    ReadingsVal("g.weather.proplanta", "fc0_chOfRainNight", 0) +
                    ReadingsVal("g.weather.proplanta", "fc0_chOfRainDay", 0)
                ) / 2 *   ReadingsVal("g.weather.proplanta", "fc0_rain", 0)
            ) / 10 * 0.05
        )
    },
   
    probability_rain_tomorrow {
        return 0.3 - (
        (
            (
                    ReadingsVal("g.weather.proplanta", "fc1_chOfRainNight", 0) +
                    ReadingsVal("g.weather.proplanta", "fc1_chOfRainDay", 0)
                ) / 2 *   ReadingsVal("g.weather.proplanta", "fc1_rain", 0)
            ) / 10 * 0.05
        )
    },
   
    probability_evapor {
        return (ReadingsVal("g.weather.proplanta", "fc0_evapor", 1) * 0.05)
    },
   
    suggest_watering {
        return (ReadingsNum("$name", "state", 0) < 1) ?
            0 : 1;
    },


TomLee

Gibt es eine öffentliche Netamo-Wetterstation mit Regensensor in der Nähe ?
Mglw. kannst mit deren Werte was anfangen.
Kam mir gestern Abend mal wieder so in den Kopf als ich mir Gedanken bezüglich ASC und Regensensor machte und ob ich das wirklich brauche.

Gruß

Thomas

Bartimaus

Die Idee ist gut, ich gleiche die gemessene Niederschlagsmenge (händisch) mit einer Netatmo zwei Strassen weiter ab. Und die Ergebnisse sind fast identisch.
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Maui

Moin. @christoph Morrison: das ist schon mal sehr cool danke. Was mir da noch fehlt ist halt die Vergangenheitsbetrachtung bzgl. Regen.
Netatmo ist eine coole Idee, allerdings bin da ich dann quasi wieder abhängig von anderen und da weiß ich nicht, ob die Station "ewig" online bleibt.
Aber mit der Kombi aus deinen Ansätzen und netatmo könnte ich vermutlich was basteln. Ich würde allerdings versuchen es ein wenig simpler zu Stricken, frei nach dem KISS Prinzip. Sodass ich es in x Monaten noch verstehen kann.

Maui

#6
Hab jetzt mal eine Netatmo Station eingebunden und ,,warte" auf Regen. Heute Abend soll welcher kommen.
Würde dann noch mit DOIF rain_day um 23:59 auf rain_yesterday setzen und als Vergangenheit nehmen.
Den Rest will ich eben nicht zu kompliziert halten ist ja am Ende ,,nur" für die Pflanzen.


defmod di_pumpe DOIF ([07:00] and [wea_garbsen:fc0_chOfRainDay] < 40 and [wea_garbsen:fc0_chOfRainNight] < 40 and [ts_aussen:AvgLastDay] > 15 ) (set Swi_Pumpe on) (set Swi_Pumpe on)


Und wegen 4 Uhr morgens: hab keine Tauchpumpe. Pumpe steht zwar in der Garage aber man hört sie trotzdem. Und der pulsierende Rasensprenger würde mich selbst bei offenem Fenster stören  ;D

Maui

#7
Okay gestern kam der versprochene Regen aber mir ist noch nicht ganz klar wie ich bei Netatmo mit regen umgehe.
Der Sensor misst als kleinste Auflösung 0.1. Wenn es regnet, steigt Rain immer um 0.1 auf x.x.
Wenn es dann aufhört zu regnen, wird Rain auf 0 zurück gesetzt. Damit kann man average nicht nutzen und auch nicht ordentlich aufkummulieren.
Oder wo ist mein Denkfehler?

Edit: nutzt man nicht nur eine Wetterstation, sondern mehrere über Koordinaten, bekommt man auch rain_day (als Durchschnitt der Stationen denke und hoffe ich).

enno

Moin zusammen,

es wird wieder trocken und es gibt neue Wetterberichte (Module), daher hole ich diesen Beitrag mal wieder hoch.

Ich würde gerne wie hier im Titel beschrieben "wetterabhängig" bewässern. Hat einer von euch ein System im Betrieb das auf Basis DWD Daten funktioniert? ( https://wiki.fhem.de/wiki/DWD_OpenData )

Gerne würde ich es ohne Feuchtigkeitssensor oder Regenmesser umsetzen. Ich habe zwar einen https://wiki.fhem.de/wiki/HM-WDS100-C6-O_Funk-Kombi-Sensor_OC3 auf dem Dach aber ich bekomme nur zuverlässig mit, dass es regnet, aber nicht wie viel.

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC mit Proxmox und Debian

Bartimaus

Mein Regensensor hat den Geist aufgegeben, daher habe ich per Httpmod ne Wetterstation aus der
Nachbarschaft eingebunden, und frage dessen Regensensor ab. Funzt tadellos
LG
B.


FHEM@AMD-Ryzen7-5700U@Debian-LXC (ProxmoxHOST), CUL1101,FS20,IT,DS18B20,DS2413(Heizungslogger),DS2423(Stromlogger)Homematic,HM-LAN,ZWave,MiniCULs,Shelly

Schronk

Wenn ich den Regen über eine Netatmostation abfrage, zeigt FHEM mir nur ganze Zahlen an. Der Sensor selbst zeigt aber auf der Netatmo homepage auch Nachkommastellen an. Kann ich nun also in FHEM nur bei "weniger 1" schalten oder hat FHEM im Hintergrund ebenfalls die Nachkommastellen und ich kann auch bei z.B. "weniger 0.5" schalten?

Zur Info: Ich überprüfe ob die Temperatur am Tag 19 Grad überschreitet und ob es weniger als 1 mm geregnet hat. Falls ja, werden in der Nacht 3 Kreise nacheinander geschaltet. Heute ist nun der erste Tag mit Regen und gerade stelle ich fest, dass "1" schon eine ganze Menge ist.