Statistics - yes:no

Begonnen von tutenchamun, 15 Juli 2018, 09:23:56

Vorheriges Thema - Nächstes Thema

tutenchamun

Ich möchte von meinem Wettersensor das reading "isRaining" "yes"/"no" auswerten
um die Gartenberwässerung erst zu starten, wenn 48h kein Regen gefallen ist ("no" für 48h ohne Änderung)

Probiert habe ich das Statistics Modul, aber das wertet "yes"/"no" nicht aus.
Den HourCounter habe ich ebenfalls noch nicht zum laufen gebracht.

Kann mir jemand helfen, eines der Module oder ein anderes für diese >Aufgabe zum laufen zu bringen ?


Hier meine kläglichen Versuche
zB
define sensor_weather_statistics statistics sensor_weather
attr sensor_weather_statistics singularReadings sensor_weather:isRaining:(no|yes)
attr sensor_weather_statistics specialDeltaPeriods sensor_weather:isRaining:Hour:1:12:24:48:72
attr sensor_weather_statistics durationReadings sensor_weather:isRaining
attr sensor_weather_statistics durationPeriodHour sensor_weather:isRaining:(no|yes)



Internals:
   DEF        0189XXXX
   IODev      TCM310
   LASTInputDev TCM310
   MSGCNT     5049
   NAME       sensor_weather
   NR         28
   NTFY_ORDER 50-sensor_weather
   STATE      T: 16.9 B: 999 W: 1.9 IR: yes
   TCM310_DestinationID FFFFFFFF
   TCM310_MSGCNT 5049
   TCM310_PacketType 1
   TCM310_RSSI -79
   TCM310_ReceivingQuality good
   TCM310_RepeatingCounter 1
   TCM310_SubTelNum 6
   TCM310_TIME 2018-06-28 19:21:50
   TYPE       EnOcean
   READINGS:
     2018-05-30 01:49:41   azimuth         XX
     2018-06-28 19:21:50   brightness      999
     2018-05-22 05:46:29   date            2005-3-3
     2018-06-28 19:21:50   dayNight        day
     2018-05-30 01:49:41   elevation       -26
     2018-06-28 19:21:06   hemisphere      north
     2018-06-28 19:21:50   isRaining       yes
     2018-06-27 12:14:03   latitude        -71.363
     2018-06-27 12:14:03   longitude       78.093
     2018-06-28 19:21:50   statBrightnessDay Min: 0 Avg: 669 Max: 999
     2018-06-27 23:59:55   statBrightnessDayLast Min: 0 Avg: 635 Max: 999
     2018-06-28 19:21:50   statBrightnessHour Min: 999 Avg: 999 Max: 999
     2018-06-28 18:59:55   statBrightnessHourLast Min: 999 Avg: 999 Max: 999
     2018-06-28 19:21:50   statBrightnessMonth Min: 0 Avg: 643 Max: 999 (since: 2018-06-18_21:05:01 )
     2018-06-28 19:21:50   statBrightnessYear Min: 0 Avg: 643 Max: 999 (since: 2018-06-18_21:05:01 )
     2018-06-28 19:21:50   statTemperatureDay Min: 12.7 Avg: 16.1 Max: 24.9
     2018-06-27 23:59:55   statTemperatureDayLast Min: 11.8 Avg: 16.5 Max: 73.9
     2018-06-28 19:21:50   statTemperatureMonth Min: 8.9 Avg: 18.6 Max: 73.9 (since: 2018-06-18_21:05:01 )
     2018-06-28 19:21:50   statTemperatureYear Min: 8.9 Avg: 18.6 Max: 73.9 (since: 2018-06-18_21:05:01 )
     2018-06-28 19:21:50   statWindSpeedDay Min: 0.0 Avg: 3.3 Max: 11.8
     2018-06-27 23:59:55   statWindSpeedDayLast Min: 0.0 Avg: 2.2 Max: 9.9
     2018-06-28 19:21:50   statWindSpeedHour Min: 0.8 Avg: 3.0 Max: 5.8
     2018-06-28 18:59:55   statWindSpeedHourLast Min: 0.0 Avg: 2.7 Max: 5.8
     2018-06-28 19:21:50   statWindSpeedMonth Min: 0.0 Avg: 2.1 Max: 14.8 (since: 2018-06-18_21:05:01 )
     2018-06-28 19:21:50   statWindSpeedYear Min: 0.0 Avg: 2.1 Max: 14.8 (since: 2018-06-18_21:05:01 )
     2018-06-28 19:21:50   state           T: 16.9 B: 999 W: 1.9 IR: yes
     2018-06-28 19:21:06   sunEast         589
     2018-06-28 19:21:06   sunSouth        1765
     2018-06-28 19:21:06   sunWest         589
     2018-06-28 19:21:50   temperature     16.9
     2018-06-28 19:21:50   windSpeed       1.9
   helper:
     _98_statistics sensor_weather_statistics
Attributes:
   IODev      TCM310
   event-min-interval .*:120
   event-on-change-reading .*
   event-on-update-reading .*
   manufID    00D
   room       EnOcean
   subType    environmentApp
   verbose    3

Byte09

#1
das sollte wohl mit mehreren modulen möglich sein , spontan fällt mir u.a watchdog ein.
ansonsten kann ich dir eine Möglichkeit mit MSwitch anbieten .Das ist aber kein Standartmodul und müsste erst installiert werden .

https://wiki.fhem.de/wiki/MSwitch.pm

und hier wäre eine entsprechende Beispielkonfiguration als Rawdefinition, ausgelegt auf deinen angegebenen Wettersensor und einen zusätzlichen Dummy, der geschaltet wird:
( ist nach dem Einspielen im Grunde selbserklärend )

defmod wettertest MSwitch sensor_weather  # action
attr wettertest MSwitch_Debug 0
attr wettertest MSwitch_Delete_Delays 1
attr wettertest MSwitch_Expert 0
attr wettertest MSwitch_Extensions 0
attr wettertest MSwitch_Help 0
attr wettertest MSwitch_Ignore_Types notify allowed at watchdog doif fhem2fhem telnet FileLog readingsGroup FHEMWEB autocreate eventtypes readingsproxy svg cul
attr wettertest MSwitch_Include_Devicecmds 1
attr wettertest MSwitch_Include_MSwitchcmds 0
attr wettertest MSwitch_Include_Webcmds 1
attr wettertest MSwitch_Inforoom MSwitch
attr wettertest MSwitch_Lock_Quickedit 1
attr wettertest MSwitch_Mode Notify
attr wettertest room 1_test

defmod action dummy
attr action room 1_test
attr action webCmd on:off



setstate wettertest active
setstate wettertest 2018-07-15 09:48:50 .Device_Affected action-AbsCmd1
setstate wettertest 2018-07-15 09:49:52 .Device_Affected_Details action-AbsCmd1,on,no_action,,,delay1,delay1,480000,000000,[sensor_weather:isRaining]~eq~"no",,,,1
setstate wettertest 2018-07-15 09:52:05 .Device_Events state:yes|state:no|no_trigger|isRaining:yes|isRaining:no
setstate wettertest 2018-07-15 09:45:49 .First_init done
setstate wettertest 2018-07-15 09:51:29 .Trigger_cmd_off isRaining:yes
setstate wettertest 2018-07-15 09:51:29 .Trigger_cmd_on isRaining:no
setstate wettertest 2018-07-15 09:47:48 .Trigger_condition
setstate wettertest 2018-07-15 09:51:29 .Trigger_off no_trigger
setstate wettertest 2018-07-15 09:51:29 .Trigger_on no_trigger
setstate wettertest 2018-07-15 09:47:48 .Trigger_time
setstate wettertest 2018-07-15 09:45:49 .V_Check V 0.3
setstate wettertest 2018-07-15 09:52:05 EVENT isRaining:yes
setstate wettertest 2018-07-15 09:52:05 EVTFULL sensor_weather:isRaining:yes
setstate wettertest 2018-07-15 09:52:05 EVTPART1 sensor_weather
setstate wettertest 2018-07-15 09:52:05 EVTPART2 isRaining
setstate wettertest 2018-07-15 09:52:05 EVTPART3 yes
setstate wettertest 2018-07-15 09:47:48 Trigger_device sensor_weather
setstate wettertest 2018-07-15 09:51:29 Trigger_log on
setstate wettertest 2018-07-15 09:52:05 last_event isRaining:yes
setstate wettertest 2018-07-15 09:55:14 state active



gruss Byte09

Otto123

Hi,

die Idee mit dem watchdog mal in Worten:
define w_48NoRain watchdog sensor_weather:isRaining.no 48:00 sensor_weather:isRaining.yes set wasser start;; trigger w_48NoRain .

Die Anweisung set wasser start ist natürlich nur ausgedacht, die musst Du ersetzen.
Ich weiß nicht ob ein watchdog 48 h kann.
Die regExp sensor_weather:isRaining.no musst Du eventuell entsprechend deinem echten Event noch anpassen. Nimm dazu den Event monitor.

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

miot

#3
Hallo,

wenn das Reading nur bei Wechsel aktualisiert wird koenntest Du ReadingsAge verwenden. Also beim Start eine Abfrage einbauen a la:

if (ReadingsAge("sensor_weather", "isRaining", 0) > (48 * 60 * 60)) {Starte Bewaesserung}

Anmerkung: Wenn es bei Deiner Ueberlegung zwischendurch immer wieder mal 5 Minuten regnet hast Du sehr bald eine braune Wiese da die 48 Stunden nicht oft genug erreicht werden und demzufolge die Bewaesserung ueber einen moeglicherweise langen Zeitraum nicht gestartet wird.

Gruss
Michael

tutenchamun

#4
Danke für den Input vorerst.

Zitat von: miot am 15 Juli 2018, 11:05:32
if (ReadingsAge("sensor_weather", "isRaining", 0) > (48 * 60 * 60)) {Starte Bewaesserung}
Das geht leider nicht (wäre sehr einfach), aber der Wert "ändert" sich alle 120sec (auch wenn er eigentlich gleich bleibt) ...

Die beiden anderen Varianten muss ich erst probieren ...
Da das in Verbindung mit einer Tageszeit gehen sollte (also 18:00 Bewässerung - aber nur wenn 48h kein regen war)
muss ich die Möglichkeiten aber noch ausloten.

... im Prinzip müsste ich aus dem "no" ein userReading erzeugen für "age" ... dann kann ich einen Timer setzen, der "age" abfragt ...