DOIF auf Basis der Vergangenheit

Begonnen von MobiusOne, 18 Juni 2019, 23:50:45

Vorheriges Thema - Nächstes Thema

MobiusOne

Hallo,

ich möchte meinen Rasen im Urlaub automatisch Bewässern. Leider ist die Gardena Smart App keine Wetterdaten auslesen/verwenden. Darum möchte ich dies über FHEM realisieren. Nun stoße ich gerade an ein Problem und komme nicht wirklich weiter. Ich möchte über meine Netatmo Regensensor den Niederschlag der letzten zwei Tagen auswerten.  Folgende Abfrage habe ich hinbekommen:

define DOELSE ([Regensensor:rain_day] < 0.5 and [Windsensor:windstrength] < 2 and [06:00] and [Urlaub] eq "on") (set Irrigation_Control manualDurationValve2 20)

Damit kann ich leider nur den aktuellen Tag, von 0:00 bis 05:59, auswerten. So eine Abfrage habe ich noch nie gemacht und werde über Google/Forum nicht schlauer, oder ich verstehe den Ansatz nicht.

Gruß
MobiusOne

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

MobiusOne

Hallo amenomade,

nee, leider nicht. Außer 0.5 (23:58 Uhr) und 0 (0:10 Uhr) ergibt als Durchschnitt 0. Das Problem bei dieser Methode ist, dass das rain_day kein Absoluter statischer Wert ist. Wenn es nun für 15 Minuten regnen würde, in drei Stunden und dann nochmals in drei Stunden, würde rain_day drei mal, an einem Tag, aktualisiert werden.

amenomade

Wie würdest Du dann anhand der existierenden Readings den Wert kalkulieren, der dich interessiert?
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

MobiusOne

Mmmh, das ist eine gute Frage. Wenn ich mir das gerade nochmals deutsch den Kopf gehen lasse, würde mir nur folgendes einfallen:

  • Der Wert von vorgestern wird um 23:59 Uhr, als Reading Vorgestern gespeichert
  • Der Wert von gestern wird um 23:59 Uhr, als Reading Gestern gespeichert
  • Der aktuelle Wert bis 06:00 Uhr ist kein Problem
  • Die Vorhersage für den aktuellen Tag, ebenfalls kein Problem

Die vier Werte würde ich dann mit and verbinden. Das Problem wäre dann, wie ich eine rotierende Speicherung der Vorgestern und Gestern Readings hinbekomme. Diese müssten dann auch jeden Tag aktualisiert werden. Vorgestern wird durch Gestern überschrieben und Gestern vom heutigen Tag.

CBSnake

Hi,

eine Möglichkeit wäre mit einem DOIF um 23.59 die Werte zu "verschieben.

setreading wert_vorgestern [wert_gestern],
setreading wert_gestern [wert_heute],
setreading wert_heute [aktueller_wert]


Wichtig ist halt "hinten" zu beginnen da du ja sonst den nötigen Wert schon überschrieben hast.
Lässt sich sicher auch mit Userreading lösen.

Grüße
Achim
FHEM auf Debian 10, HM-Wlan, JeeLink-Wlan, Wlanduino, ConBee, TP-Link Steckdose, GHoma Steckdosen, Shelly Steckdosen

MobiusOne

*facepalm* Na klar, wie logisch. So ne Art von DOIFs habe ich bereits in Verwendung. Danke für die Erinnerung! War dan gestern doch etwas zu spät. Habe es nun wie folgt realisiert:
define Regel_Rasenbewaesserung DOIF ([05:59])\
(setreading Regel_Rasenbewaesserung Regen_Vorgestern [Regel_Rasenbewaesserung:Regen_Gestern], setreading Regel_Rasenbewaesserung Regen_Gestern [Regensensor:rain_day], setreading Regel_Rasenbewaesserung Bewaesserung_Vorgestern [Regel_Rasenbewaesserung:Bewaesserung_Gestern], setreading Regel_Rasenbewaesserung Bewaesserung_Gestern [Regel_Rasenbewaesserung:Bewaesserung_Heute], IF ([Regensensor:rain_day] < 0.5 and [Regel_Rasenbewaesserung:Regen_Vorgestern] < 0.5 and [Regel_Rasenbewaesserung:Regen_Gestern] < 0.5) (setreading Regel_Rasenbewaesserung Regen_3Tage Nein), IF ([Regensensor:rain_day] > 0.5 or [Regel_Rasenbewaesserung:Regen_Vorgestern] > 0.5 or [Regel_Rasenbewaesserung:Regen_Gestern] > 0.5) (setreading Regel_Rasenbewaesserung Regen_3Tage Ja), IF ([Regel_Rasenbewaesserung:Bewaesserung_Heute] eq "Nein" and [Regel_Rasenbewaesserung:Bewaesserung_Vorgestern] eq "Nein" and [Regel_Rasenbewaesserung:Bewaesserung_Gestern] eq "Nein") (setreading Regel_Rasenbewaesserung Bewaesserung_3Tage Nein), IF ([Regel_Rasenbewaesserung:Bewaesserung_Heute] eq "Ja" or [Regel_Rasenbewaesserung:Bewaesserung_Vorgestern] eq "Ja" or [Regel_Rasenbewaesserung:Bewaesserung_Gestern] eq "Ja") (setreading Regel_Rasenbewaesserung Bewaesserung_3Tage Ja))\
DOELSEIF ([06:00] and [Regel_Rasenbewaesserung:Regen_3Tage] eq "Nein" and [Regel_Rasenbewaesserung:Bewaesserung_3Tage] eq "Nein" and [Wetter_Aussichten:fc0_rain] < 1.5 and [Wetter_Aussichten:fc0_temp_max] > 25 and [Windsensor:windstrength] < 3 and [Urlaub] eq "on")\
(set Irrigation_Control manualDurationValve2 8, set Irrigation_Control manualDurationValve3 8, setreading Regel_Rasenbewaesserung Bewaesserung_Heute Ja)\
DOELSEIF ([06:10] and [Regel_Rasenbewaesserung:Regen_3Tage] eq "Nein" and [Regel_Rasenbewaesserung:Bewaesserung_3Tage] eq "Nein" and [Wetter_Aussichten:fc0_rain] < 1.5 and [Wetter_Aussichten:fc0_temp_max] > 25 and [Windsensor:windstrength] < 3 and [Urlaub] eq "on")\
(set Irrigation_Control manualDurationValve4 20, setreading Regel_Rasenbewaesserung Bewaesserung_Heute Ja)
attr Regel_Rasenbewaesserung room Haussteuerung


Die Abfragen vom CMD1 laufen ohne Probleme durch. Ich bin mal auf Morgenfrüh gespannt.

Danke für eure Hilfe!