Der einfachste Weg bestimmte Wetterbedingungen zu managen ? (doif?)

Begonnen von Ranseyer, 06 August 2019, 17:02:59

Vorheriges Thema - Nächstes Thema

Ranseyer

Hi,

nach langer Zeit will ich mal wieder etwas automatisieren...

Nehmen wir an ich  habe verschiedene Inputs. Beispiele:

Wenn das erfüllt dann soll das als "Regen" gelten für die nächsten 10 Minuten
Regen.*:rainrate",0]<638
Regen2.*:rainrate",0]<555


Macht man das aktuell am einfachsten per doif, oder ist meine Info hier veraltet ?


Also für den Anfang mal:

define DI_Regen DOIF ([[Regen.*:rainrate",0]<638]) (set Regen on) DOELSE (set Regen off)

Mal angenommen meine Klammersetzung wäre schon richtig, wie könnte ich nun am einfachsten einstellen, dass der "Regen" dann für 10 Minuten "on" sein soll ?
Wenn keine neuen Messwerte kommen, soll nach 10 Minuten der Regen wieder "off" sein.

Und ich möchte den Wert auch manuell auf off setzen können...

Freue mich über möglichst konkrete Hinweise, könnte mir gut vorstellen dass ich die Passagen in der Command-Ref + Wiki übersehen habe...
FHEM mit FTUI. Homematic-Funk für Thermostate und Licht. MySensors als Basis für eigene HW.
Zentrale ist der MAPLE-CUL mit RFM69+HModUART-AddOn.
Doku zu meinen Projekten: Github/Ranseyer. Platinen falls verfügbar gerne auf Anfrage.
Support: gerne wenn ich Zeit+Lust habe im Forum. Nicht per PN!

Otto123

Hi,

wenn ich Dich richtig verstanden habe würde ich noch ein
attr DI_Regen wait 0:600
machen.

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ranseyer

Hmm, ich versuche s nochmals andes zu beschreiben.

Ich habe z.B. eine "Wippe" als Regensensor, und diverse andere Möglichkeiten. Wenn einer davon anschlägt, dann nehme ich für die nächsten 10 Minuten an dass es regnet. Solange bis 10 Minuten lang keine Daten mehr gekommen sind. Oder umgekehrt: Immer wenn ein neuer Messwert reinkommt der auf Regen hindeutet würde ich gerne Regen für 10 Minuten lang auf "on" setzen...

Wenn das mit deiner Ergänzung klappt, dann wäre das viel einfacher als erwartet!
FHEM mit FTUI. Homematic-Funk für Thermostate und Licht. MySensors als Basis für eigene HW.
Zentrale ist der MAPLE-CUL mit RFM69+HModUART-AddOn.
Doku zu meinen Projekten: Github/Ranseyer. Platinen falls verfügbar gerne auf Anfrage.
Support: gerne wenn ich Zeit+Lust habe im Forum. Nicht per PN!

amenomade

#3
ZitatDOIF ([[Regen.*:rainrate",0]<638])
Das wird problematisch.... Mit Regex muss es Ereignis-gesteuert sein. Ein Ereignis, der kleiner als 638 sein soll...

Am besten mit aggregation Funktionen von DOIF arbeiten, z.B. Anzahl von Sensoren, wo rainrate > wert, grösser als 0, dann...

https://fhem.de/commandref_DE.html#DOIF_aggregation

Etwas in der Art:
DOIF ([#"^Regen":rainrate:$_ > 638] != 0) (es regnet) DOELSE (es regnet nicht)
attr <name> wait 0:600

Wenn Anzahl der Sensoren, die mit Regen anfangen, und rainrate über 638 haben, nicht gleich 0, dann regnet es
Wenn es nicht mehr der Fall ist, warte 600 Sek, dann regnet es nicht (mehr)

EDIT: und mit attr <name> cmdState on|off kannst Du dir dein "Regen" dummy sparen, und liest den Status direkt am DOIF
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Otto123

ja sorry hatte ich komplett übersehen, an dem ([[Regen.*:rainrate",0]<638]) ist auch die Klammer sicher falsch. Der Inhalt [Regen.*:rainrate",0]<638 würde als wahrscheinlich als Zeit interpretiert weil er nochmal in [] steht.
https://commandref.fhem.de/commandref_DE.html#DOIF_Indirekten_Zeitangaben
Und es hat nur ein " Zeichen, das geht also eh nicht.

Aber amenomade hat es ja schon richtiggestellt.

ZitatWenn einer davon anschlägt, dann nehme ich für die nächsten 10 Minuten an dass es regnet. Solange bis 10 Minuten lang keine Daten mehr gekommen sind. Oder umgekehrt: Immer wenn ein neuer Messwert reinkommt der auf Regen hindeutet würde ich gerne Regen für 10 Minuten lang auf "on" setzen...
Bei der Aufgabenstellung würde ja ein beliebiger Event reichen?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ranseyer

ZitatWenn Anzahl der Sensoren, die mit Regen anfangen, und rainrate über 638 haben, nicht gleich 0, dann regnet es

Sorry da habe ich mein Problem wohl nicht genau genau genug beschrieben.

Regen wäre z.B.
Sensor1:Rainrate < 666
Sensor2:Rainrate < 444
Sensor3:Rainrate < 222
Sensor4:Regen  = on
Sensor5:Raincounter  ist angestiegen

Ich vermute ich sollte also alle Sensoren mit einem einheitlichen zusätzlichen Wert ausstatten. Beispiel:
Wenn bei "Sensor1:Rainrate <638"
=>
Sensor1:regen = on

Wäre das ein Ansatz ?

Allen Regensensoren bekommen wie vorgeschlagen das selbe Namensschema bekommen und ich könnte:

DOIF ([#"^Regen":regen:$_ =on] != 0) (es regnet) DOELSE (es regnet nicht)


PS: Was ich etwas unterschlagen habe... Ich würde dann zum beispiel alle 15 Minuten einen AT absetzen mit:
-Wenn "kein Regen" und "kein Sturm" und z.B. "Temperatur= 25 Grad" dann => fahre Markise auf 100%
-Wenn "kein Regen" und "kein Sturm" und z.B. "Helligkeit > 1000" dann => fahre Markise auf 100%
-Wenn "kein Sturm" und z.B. "Helligkeit > 1000" dann => fahre Jalosie auf 100%

So. ca. war der Plan.
FHEM mit FTUI. Homematic-Funk für Thermostate und Licht. MySensors als Basis für eigene HW.
Zentrale ist der MAPLE-CUL mit RFM69+HModUART-AddOn.
Doku zu meinen Projekten: Github/Ranseyer. Platinen falls verfügbar gerne auf Anfrage.
Support: gerne wenn ich Zeit+Lust habe im Forum. Nicht per PN!

amenomade

Zitat von: Ranseyer am 07 August 2019, 11:25:41
Sorry da habe ich mein Problem wohl nicht genau genau genug beschrieben.

Regen wäre z.B.
Sensor1:Rainrate < 666
Sensor2:Rainrate < 444
Sensor3:Rainrate < 222
Sensor4:Regen  = on
Sensor5:Raincounter  ist angestiegen

Ich vermute ich sollte also alle Sensoren mit einem einheitlichen zusätzlichen Wert ausstatten. Beispiel:
Wenn bei "Sensor1:Rainrate <638"
=>
Sensor1:regen = on

Wäre das ein Ansatz ?

Allen Regensensoren bekommen wie vorgeschlagen das selbe Namensschema bekommen und ich könnte:

DOIF ([#"^Regen":regen:$_ =on] != 0) (es regnet) DOELSE (es regnet nicht)


PS: Was ich etwas unterschlagen habe... Ich würde dann zum beispiel alle 15 Minuten einen AT absetzen mit:
-Wenn "kein Regen" und "kein Sturm" und z.B. "Temperatur= 25 Grad" dann => fahre Markise auf 100%
-Wenn "kein Regen" und "kein Sturm" und z.B. "Helligkeit > 1000" dann => fahre Markise auf 100%
-Wenn "kein Sturm" und z.B. "Helligkeit > 1000" dann => fahre Jalosie auf 100%

So. ca. war der Plan.
Dann machst Du einfach
DOIF ([Sensor1:Rainrate] < 666
  or [Sensor2:Rainrate] < 444
  or [Sensor3:Rainrate] < 222
  or [Sensor4:Regen]  eq "on"
  or [Sensor5:Raincounter:diff2] > 5)
     (es regnet)
DOELSE
     (es regnet nicht)
attr wait usw
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

RaspiLED

Hi,
Kannst Du die 10 Minuten nicht einfach mit off-for-timer 600 lösen?
Gruß Arnd


Signalduino (Nano, ESP, ...), CUL (Busware, Nano, Maple, ...), Homematic (HM-MOD-UART-RPI, ESP, Maple, ...), LaCrosseGateway (LGW, ESP, ...), 1-wire, ESPEasy, Bravia, Yamaha, ...
Raspberry Pi mit FHEM, CUL, Signalduino, MySensors, HomeBridge, Presence, WifiLight2, Bravia, ...

amenomade

Zitat von: RaspiLED am 08 August 2019, 13:51:16
Hi,
Kannst Du die 10 Minuten nicht einfach mit off-for-timer 600 lösen?
Gruß Arnd


Signalduino (Nano, ESP, ...), CUL (Busware, Nano, Maple, ...), Homematic (HM-MOD-UART-RPI, ESP, Maple, ...), LaCrosseGateway (LGW, ESP, ...), 1-wire, ESPEasy, Bravia, Yamaha, ...
Eher on-for-timer, oder?
Wenn dann aber nur mit einem leeren DOELSE am Ende
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Ranseyer

Hi,

folgendes funktioniert: "trigger Regen_Helligkeit_Daechle rainrate: 5" setzt mir "WG_Wetter den Regen auf "on".
Folgendes funktioniert nicht: "trigger Regen_Helligkeit_Daechle rainrate: 999" setzt mir "WG_Wetter den Regen nicht auf "off".

Internals:
   CFGFN     
   DEF        ([Regen_Helligkeit_Daechle:rainrate] < 638
  or [Sensor2:rainrate] < 638
  or [Sensor3:rainrate] < 222
  or [Sensor4:Regen]  eq "on"
  or [Sensor5:Raincounter:diff2] > 5)
     (setreading WG_Wetter Regen on)
DOELSE
     (setreading WG_Wetter Regen off)

   FUUID      5d4aa85b-f33f-0eb4-bf44-3c7507745053fb60
   MODEL      FHEM
   NAME       DOIF_Regen
   NR         645
   NTFY_ORDER 50-DOIF_Regen
   STATE      cmd_1
   TYPE       DOIF
   VERSION    19786 2019-07-05 21:47:08
   READINGS:
     2019-08-09 15:52:04   Device          Regen_Helligkeit_Daechle
     2019-08-09 15:44:58   cmd             1
     2019-08-09 15:44:58   cmd_event       Regen_Helligkeit_Daechle
     2019-08-09 15:44:58   cmd_nr          1
     2019-08-09 15:45:07   e_Regen_Helligkeit_Daechle_rainrate 728
     2019-08-09 15:43:23   mode            enabled
     2019-08-09 15:44:58   state           cmd_1
     2019-08-09 15:45:07   warning         [color=red]condition c01: Argument "" isn't numeric in numeric lt (<)[/color]

   Regex:
     accu:
       Sensor5:
         accu:
           Raincounter ^Sensor5$:^Raincounter:
   accu:
     Sensor5 Raincounter:
       dim        2
       value:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'Regen_Helligkeit_Daechle','rainrate') < 638    or ::ReadingValDoIf($hash,'Sensor2','rainrate') < 638    or ::ReadingValDoIf($hash,'Sensor3','rainrate') < 222    or ::ReadingValDoIf($hash,'Sensor4','Regen')  eq "on"   or ::ReadingValDoIf($hash,'Sensor5','Raincounter','','diff2') > 5
   devices:
     0           Regen_Helligkeit_Daechle Sensor2 Sensor3 Sensor4 Sensor5
     all         Regen_Helligkeit_Daechle Sensor2 Sensor3 Sensor4 Sensor5
   do:
     0:
       0          setreading WG_Wetter Regen on
     1:
       0          setreading WG_Wetter Regen off
   helper:
     event      brightness1: 2137
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Regen_Helligkeit_Daechle
     timerevent rainrate: 0
     triggerDev Regen_Helligkeit_Daechle
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: Regen_Helligkeit_Daechle
       state: cmd_1
     timerevents:
       rainrate: 0
     timereventsState:
       rainrate: 0
     triggerEvents:
       brightness1: 2137
     triggerEventsState:
       brightness1: 2137
   internals:
   itimer:
   readings:
     0           Regen_Helligkeit_Daechle:rainrate Sensor2:rainrate Sensor3:rainrate Sensor4:Regen Sensor5:Raincounter
     all         Regen_Helligkeit_Daechle:rainrate Sensor2:rainrate Sensor3:rainrate Sensor4:Regen Sensor5:Raincounter
   trigger:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   room       0.03_Wintergarten


Bitte um Verständniss dass ich da etwas langsamer bin...

Wenn das läuft, wäre die Verzögerung um 10 Minuten der nächste Step...
FHEM mit FTUI. Homematic-Funk für Thermostate und Licht. MySensors als Basis für eigene HW.
Zentrale ist der MAPLE-CUL mit RFM69+HModUART-AddOn.
Doku zu meinen Projekten: Github/Ranseyer. Platinen falls verfügbar gerne auf Anfrage.
Support: gerne wenn ich Zeit+Lust habe im Forum. Nicht per PN!

Otto123

Ich bin nicht sicher, ob man mit fake triggern diese Umgebung mit realen Sensoren testen kann.

Ich denke Du setzt zwar mit trigger einen trigger auf das DOIF, das liest aber anschließend die richtigen Werte aus:
rainrate: 0

Außerdem wertest Du ja readings aus, sendest aber einen Event mit Inhalt. Ich denke das geht  nicht.

Teste doch mit einem dummy wo Du mit setreading das reading setzt?

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ranseyer

Danke, kann ich tun. Mit realen Daten ist es aber genau so.
Es regnet in der Praxis selten. Ich konnte manuell und real den "Regen" auf on setzen. Weg bekomme ich ihn nicht mehr.
FHEM mit FTUI. Homematic-Funk für Thermostate und Licht. MySensors als Basis für eigene HW.
Zentrale ist der MAPLE-CUL mit RFM69+HModUART-AddOn.
Doku zu meinen Projekten: Github/Ranseyer. Platinen falls verfügbar gerne auf Anfrage.
Support: gerne wenn ich Zeit+Lust habe im Forum. Nicht per PN!

Otto123

Der aktuelle Fall war doch aber dieser Auslöser
2019-08-09 15:45:07   e_Regen_Helligkeit_Daechle_rainrate 728
Damit ist ja die Bedingung nicht erfüllt [Regen_Helligkeit_Daechle:rainrate] < 638
Trotzdem geht er auf cmd 1

Er sagt aber condition c01: Argument "" isn't numeric in numeric lt

Das interpretiere ich so. Er will die etwas lesen, das ist aber leer.

Wenn jetzt alle Readings so stehen, dass cmd 2 kommen müsste: was macht er denn bei checkall?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Ranseyer

ZitatWenn jetzt alle Readings so stehen, dass cmd 2 kommen müsste: was macht er denn bei checkall?
leider das:
2019.08.09 17:05:20.998 1: PERL WARNING: Argument "" isn't numeric in numeric lt (<) at (eval 123765) line 1.
2019.08.09 17:05:20.998 3: eval: DOIF_Regen: warning in condition c01
FHEM mit FTUI. Homematic-Funk für Thermostate und Licht. MySensors als Basis für eigene HW.
Zentrale ist der MAPLE-CUL mit RFM69+HModUART-AddOn.
Doku zu meinen Projekten: Github/Ranseyer. Platinen falls verfügbar gerne auf Anfrage.
Support: gerne wenn ich Zeit+Lust habe im Forum. Nicht per PN!

Otto123

Dann mach mal bitte folgendes:
list Regen_Helligkeit_Daechle rainrate
list Sensor2 rainrate
list Sensor3 rainrate
list Sensor4 Regen
list Sensor5 Raincounter

Und zeig mal die Ausgaben. :)
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz