FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: Damian am 12 Januar 2019, 23:18:58

Titel: Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 12 Januar 2019, 23:18:58
Edit: Syntax wurde geändert

Ich habe  neue Optionen für Readingangaben  eingebaut. Man kann jetzt Readings über die letzten X-Werte auswerten lassen. Dazu gibt es die Funktionen avg für Durchschnitt, med für Median,diff für die Differenz und inc für prozentualen Anstieg von Werten. Die Option steht überall zur Verfügung, wo Readings innerhalb eines DOIF angegeben werden können: DOIF-Bedingungen, DOIF-Ausführungsteile, DOIF_Readings-Attribut usw.

Syntax

[<Device>:<Reading>:avg<Anzahl der letzten Werte>]
[<Device>:<Reading>:med<Anzahl der letzten Werte>]
[<Device>:<Reading>:diff<Anzahl der letzten Werte>]
[<Device>:<Reading>:inc<Anzahl der letzten Werte>]

<Anzahl der letzten Werte> ist optional. Wird sie nicht angegeben, so werden die letzten beiden Werte ausgewertet. <Anzahl der letzten Werte> gleich eins ist nicht sinnvoll.

Zu beachten ist, dass der Durchschnitt/Median/Differenz/Anstieg bereits gebildet werden, sobald die ersten Werte eintrudeln, beim ersten Wert ist der Durchschnitt bzw. Median logischerweise der Wert selbst, Differenz und prozentualer Anstieg ist in diesem Fall 0.

Die angegebenen Readings werden intern automatisch für die Auswertung nach Zahlen gefiltert.

Ein Testbeispiel (mit "set bla <Zahl>" kann die Definition mit einem Dummy namens "bla" getestet werden)

defmod accu DOIF ##
attr accu DOIF_Readings avg:[bla:state:avg],\
avg3:[bla:state:avg3],\
avg5:[bla:state:avg5],\
med:[bla:state:med],\
med3:[bla:state:med3],\
med5:[bla:state:med5],\
diff:[bla:state:diff],\
diff3:[bla:state:diff3],\
diff5:[bla:state:diff5]


Bei diff bzw. inc  wird der letzte und x-te zurückliegende Wert ausgewertet.

Edit: letzte Version wurde eingecheckt
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: knopf_piano am 13 Januar 2019, 07:11:32
top feature, danke!

Gesendet von meinem SM-J510FN mit Tapatalk

Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: mi.ke am 13 Januar 2019, 10:11:25
Klasse, danke dafür.

Nur ne Frage:
Wäre nicht :a: für average besser gewesen als s ?

Cheers
mi.ke
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 13 Januar 2019, 10:35:32
Zitat von: mi.ke am 13 Januar 2019, 10:11:25
Klasse, danke dafür.

Nur ne Frage:
Wäre nicht :a: für average besser gewesen als s ?

Cheers
mi.ke

ja, hatte ich zuvor gehabt, dann dachte ich Glättung = (s)moothing wäre besser.

Ich habe die Version bewusst noch nicht eingecheckt, um die Praxistauglichkeit erst prüfen zu lassen.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: cwagner am 13 Januar 2019, 15:25:54
Toll, da bin ich sofort bei den Tests - mein CO2-Sensor ist sehr reagible und bisher habe ich die Events (Messwerte) aggregiert und geglättet. Wenn DOIF das jetzt kann, wird einiges übersichtlicher.


Herzliche Grüße

Christian
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 13 Januar 2019, 18:20:47
Man kann das neue Feature natürlich auch beim DOIF_Readings- oder State-Attribut anwenden.

Bsp.:

attr smooth DOIF_Readings temp:[Aussensensor:temperature],\
temp2:[Aussensensor:temperature:s2]


Hier wird neben dem Reading temp auch ein geglättetes Reading temp2 definiert, das man im DOIF auswerten kann.


Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: cwagner am 13 Januar 2019, 22:39:03
Ist es richtig, wenn ich in einem Listing, in dem ich ein Reading in 5 Bedigungen jeweils über die letzten 10 Werte glätten lassen will, insgesamt so ein Listing bekomme?

Internals:
   DEF        ([CO2Sensor:CO2:s10] and [?Lueftung] eq "max") (set Steller_Zuluft gpio 255) (set Steller_Abluft gpio 255)
DOELSEIF ([CO2Sensor:CO2:s10] and ([?abwesend] eq "an" or [?Lueftung] eq "AUS")) (set Steller_Zuluft gpio 0) (set Steller_Abluft gpio 0)
DOELSEIF ([CO2Sensor:CO2:s10] and ([?Lueftung] eq "min" or [CO2Sensor:CO2:s5]<550)) (set Steller_Zuluft gpio 55) (set Steller_Abluft gpio 45)
DOELSEIF ([?Lueftung] eq "auto" and [CO2Sensor:CO2:s10]>([$SELF:CO2_alt]+25) and [Steller_Zuluft:gpio]<230) (setreading $SELF CO2_alt [CO2Sensor:CO2:s10],setreading $SELF Stell_neu {(sprintf "%.0f", ([Steller_Zuluft:gpio]+25))},set Steller_Zuluft gpio [$SELF:Stell_neu]) (setreading $SELF Stell_neu {(sprintf "%.0f", ([Steller_Zuluft:gpio]*.75))},set Steller_Abluft gpio [$SELF:Stell_neu])
DOELSEIF ([?Lueftung] eq "auto" and [CO2Sensor:CO2:s10]<([$SELF:CO2_alt]-25) and [Steller_Zuluft:gpio]>80) (setreading $SELF CO2_alt [CO2Sensor:CO2:s10],setreading $SELF Stell_neu {(sprintf "%.0f", ([Steller_Zuluft:gpio]-25))},set Steller_Zuluft gpio [$SELF:Stell_neu]) (setreading $SELF Stell_neu {(sprintf "%.0f", ([Steller_Zuluft:gpio]*.75))},set Steller_Abluft gpio [$SELF:Stell_neu])
   MODEL      FHEM
   NAME       DI_Lueftung
   NR         117
   NTFY_ORDER 50-DI_Lueftung
   STATE      Betrieb
   TYPE       DOIF
   READINGS:
     2019-01-13 22:34:02   CO2_alt         1317.27700831025
     2019-01-13 22:37:21   Device          CO2Sensor
     2019-01-13 22:34:17   Stell_neu       79
     2019-01-13 22:34:17   cmd             5.2
     2019-01-13 22:34:17   cmd_event       set_cmd_5
     2019-01-13 22:34:17   cmd_nr          5
     2019-01-13 22:34:17   cmd_seqnr       2
     2019-01-13 22:37:21   e_CO2Sensor_CO2 802
     2019-01-13 15:23:18   mode            enabled
     2019-01-13 22:34:17   state           Betrieb
     2019-01-13 22:34:17   wait_timer      no timer
   Regex:
   akku:
     CO2Sensor CO2:
       940
       940
       940
       940
       945
       945
       945
       945
       945
       945
       938
       938
       938
       938
       938
       938
       944
       944
       944
       944
       944
       944
       949
       949
       949
       949
       949
       949
       941
       941
       941
       941
       941
       941
       938
       938
       938
       938
       938
       938
       931
       931
       931
       931
       931
       931
       951
       951
       951
       951
       951
       951
       931
       931
       931
       931
       931
       931
       937
       937
       937
       937
       937
       937
       952
       952
       952
       952
       952
       952
       928
       928
       928
       928
       928
       928
       927
       927
       927
       927
       927
       927
       921
       921
       921
       921
       921
       921
       940
       940
       940
       940
       940
       940
       929
       929
       929
       929
       929
       929
       921
       921
       921
       921
       921
       921
       1913
       1913
       1913
       1913
       1913
       1913
       2416
       2416
       2416
       2416
       2416
       2656
       2656
       2656
       2656
       2656
       2721
       2721
       2721
       2721
       2721
       2870
       2870
       2870
       2870
       2870
       2744
       2744
       2744
       2744
       2744
       1659
       1659
       1659
       1659
       1659
       1155
       1155
       1155
       1155
       1155
       1033
       1033
       1033
       1033
       1033
       989
       989
       989
       989
       989
       1003
       1003
       1003
       1003
       1003
       2395
       2395
       2395
       2395
       2395
       2330
       2330
       2330
       2330
       2330
       1813
       1813
       1813
       1813
       1813
       2386
       2386
       2386
       2386
       2386
       2221
       2221
       2221
       2221
       2221
       2010
       2010
       2010
       2010
       2010
       1858
       1858
       1858
       1858
       1858
       1664
       1664
       1664
       1664
       1664
       1512
       1512
       1512
       1512
       1512
       1620
       1620
       1620
       1620
       1620
       1769
       1769
       1769
       1769
       1769
       1125
       1125
       1125
       1125
       1125
       1008
       1008
       1008
       1008
       1008
       973
       973
       973
       973
       973
       955
       955
       955
       955
       955
       932
       932
       932
       932
       932
       928
       928
       928
       928
       928
       917
       917
       917
       917
       917
       922
       922
       922
       922
       922
       911
       911
       911
       911
       911
       909
       909
       909
       909
       909
       896
       896
       896
       896
       896
       897
       897
       897
       897
       897
       895
       895
       895
       895
       895
       890
       890
       890
       890
       890
       877
       877
       877
       877
       877
       894
       894
       894
       894
       894
       896
       896
       896
       896
       896
       884
       884
       884
       884
       884
       869
       869
       869
       869
       869
       879
       879
       879
       879
       879
       886
       886
       886
       886
       886
       882
       882
       882
       882
       882
       966
       966
       966
       966
       966
       2258
       2258
       2258
       2258
       2258
       2542
       2542
       2542
       2542
       2542
       2809
       2809
       2809
       2809
       2809
       2671
       2671
       2671
       2671
       2671
       2524
       2524
       2524
       2524
       2524
       1465
       1465
       1465
       1465
       1465
       1076
       1076
       1076
       1076
       1076
       987
       987
       987
       987
       987
       949
       949
       949
       949
       949
       932
       932
       932
       932
       932
       918
       918
       918
       918
       918
       897
       897
       897
       897
       897
       904
       904
       904
       904
       904
       912
       912
       912
       912
       912
       881
       881
       881
       881
       881
       871
       871
       871
       871
       871
       1890
       1890
       1890
       1890
       1890
       2466
       2466
       2466
       2466
       2466
       2740
       2740
       2740
       2740
       2740
       2517
       2517
       2517
       2517
       2517
       2591
       2591
       2591
       2591
       2591
       2731
       2731
       2731
       2731
       2731
       2665
       2665
       2665
       2665
       2665
       2691
       2691
       2691
       2691
       2691
       2090
       2090
       2090
       2090
       2090
       1133
       1133
       1133
       1133
       1133
       1008
       1008
       1008
       1008
       1008
       975
       975
       975
       975
       975
       1340
       1340
       1340
       1340
       1340
       2302
       2302
       2302
       2302
       2302
       2533
       2533
       2533
       2533
       2533
       2396
       2396
       2396
       2396
       2396
       2359
       2359
       2359
       2359
       2359
       2255
       2255
       2255
       2255
       2255
       2119
       2119
       2119
       2119
       2119
       2145
       2145
       2145
       2145
       2145
       2199
       2199
       2199
       2199
       2199
       2292
       2292
       2292
       2292
       2292
       2254
       2254
       2254
       2254
       2254
       1972
       1972
       1972
       1972
       1972
       2204
       2204
       2204
       2204
       2204
       2219
       2219
       2219
       2219
       2219
       2142
       2142
       2142
       2142
       2142
       2069
       2069
       2069
       2069
       2069
       2229
       2229
       2229
       2229
       2229
       2185
       2185
       2185
       2185
       2185
       2290
       2290
       2290
       2290
       2290
       2143
       2143
       2143
       2143
       2143
       2164
       2164
       2164
       2164
       2164
       2135
       2135
       2135
       2135
       2135
       1581
       1581
       1581
       1581
       1581
       1094
       1094
       1094
       1094
       1094
       1002
       1002
       1002
       1002
       1002
       953
       953
       953
       953
       953
       933
       933
       933
       933
       933
       896
       896
       896
       896
       896
       893
       893
       893
       893
       893
       870
       870
       870
       870
       870
       877
       877
       877
       877
       877
       884
       884
       884
       884
       884
       871
       871
       871
       871
       871
       855
       855
       855
       855
       855
       854
       854
       854
       854
       854
       856
       856
       856
       856
       856
       867
       867
       867
       867
       867
       845
       845
       845
       845
       845
       840
       840
       840
       840
       840
       844
       844
       844
       844
       844
       825
       825
       825
       825
       825
       829
       829
       829
       829
       829
       844
       844
       844
       844
       844
       843
       843
       843
       843
       843
       823
       823
       823
       823
       823
       817
       817
       817
       817
       817
       816
       816
       816
       816
       816
       815
       815
       815
       815
       815
       818
       818
       818
       818
       818
       817
       817
       817
       817
       817
       826
       826
       826
       826
       826
       818
       818
       818
       818
       818
       824
       824
       824
       824
       824
       822
       822
       822
       822
       822
       848
       848
       848
       848
       848
       838
       838
       838
       838
       838
       1240
       1240
       1240
       1240
       1240
       2138
       2138
       2138
       2138
       2138
       2119
       2119
       2119
       2119
       2119
       2043
       2043
       2043
       2043
       2043
       2477
       2477
       2477
       2477
       2477
       2210
       2210
       2210
       2210
       2210
       2219
       2219
       2219
       2219
       2219
       1262
       1262
       1262
       1262
       1262
       972
       972
       972
       972
       972
       901
       901
       901
       901
       901
       864
       864
       864
       864
       864
       856
       856
       856
       856
       856
       833
       833
       833
       833
       833
       826
       826
       826
       826
       826
       816
       816
       816
       816
       816
       803
       803
       803
       803
       803
       805
       805
       805
       805
       805
       804
       804
       804
       804
       804
       805
       805
       805
       805
       805
       792
       792
       792
       792
       792
       787
       787
       787
       787
       787
       791
       791
       791
       791
       791
       789
       789
       789
       789
       789
       788
       788
       788
       788
       788
       779
       779
       779
       779
       779
       768
       768
       768
       768
       768
       771
       771
       771
       771
       771
       770
       770
       770
       770
       770
       771
       771
       771
       771
       771
       763
       763
       763
       763
       763
       761
       761
       761
       761
       761
       759
       759
       759
       759
       759
       755
       755
       755
       755
       755
       769
       769
       769
       769
       769
       754
       754
       754
       754
       754
       762
       762
       762
       762
       762
       747
       747
       747
       747
       747
       749
       749
       749
       749
       749
       1332
       1332
       1332
       1332
       1332
       2130
       2130
       2130
       2130
       2130
       2343
       2343
       2343
       2343
       2343
       2052
       2052
       2052
       2052
       2052
       1920
       1920
       1920
       1920
       1920
       1496
       1496
       1496
       1496
       1496
       939
       939
       939
       939
       939
       843
       843
       843
       843
       843
       803
       803
       803
       803
       803
       786
       786
       786
       786
       786
       766
       766
       766
       766
       766
       753
       753
       753
       753
       753
       751
       751
       751
       751
       751
       749
       749
       749
       749
       749
       760
       760
       760
       760
       760
       772
       772
       772
       772
       772
       789
       789
       789
       789
       789
       814
       814
       814
       814
       814
       1836
       1836
       1836
       1836
       1836
       2279
       2279
       2279
       2279
       2279
       2327
       2327
       2327
       2327
       2327
       1710
       1710
       1710
       1710
       1710
       1057
       1057
       1057
       1057
       1057
       921
       921
       921
       921
       921
       887
       887
       887
       887
       887
       842
       842
       842
       842
       842
       828
       828
       828
       828
       828
       810
       810
       810
       810
       810
       810
       818
       818
       818
       818
       818
       818
       802
       802
       802
       802
       802
       802
   attr:
     cmdState:
     repeatsame:
       1
       1
       1
       0
       0
     wait:
       0:
         0
         15
       1:
         0
         15
       2:
         0
         15
       3:
         0
         15
       4:
         0
         15
       5:
         0
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'CO2Sensor','CO2','','s10') and ::InternalDoIf($hash,'Lueftung','STATE') eq "max"
     1          ::ReadingValDoIf($hash,'CO2Sensor','CO2','','s10') and (::InternalDoIf($hash,'abwesend','STATE') eq "an" or ::InternalDoIf($hash,'Lueftung','STATE') eq "AUS")
     2          ::ReadingValDoIf($hash,'CO2Sensor','CO2','','s10') and (::InternalDoIf($hash,'Lueftung','STATE') eq "min" or ::ReadingValDoIf($hash,'CO2Sensor','CO2','','s5')<550)
     3          ::InternalDoIf($hash,'Lueftung','STATE') eq "auto" and ::ReadingValDoIf($hash,'CO2Sensor','CO2','','s10')>(::ReadingValDoIf($hash,'DI_Lueftung','CO2_alt')+25) and ::ReadingValDoIf($hash,'Steller_Zuluft','gpio')<230
     4          ::InternalDoIf($hash,'Lueftung','STATE') eq "auto" and ::ReadingValDoIf($hash,'CO2Sensor','CO2','','s10')<(::ReadingValDoIf($hash,'DI_Lueftung','CO2_alt')-25) and ::ReadingValDoIf($hash,'Steller_Zuluft','gpio')>80
   devices:
     0           CO2Sensor
     1           CO2Sensor
     2           CO2Sensor
     3           CO2Sensor DI_Lueftung Steller_Zuluft
     4           CO2Sensor DI_Lueftung Steller_Zuluft
     all         CO2Sensor DI_Lueftung Steller_Zuluft
   do:
     0:
       0          set Steller_Zuluft gpio 255
       1          set Steller_Abluft gpio 255
     1:
       0          set Steller_Zuluft gpio 0
       1          set Steller_Abluft gpio 0
     2:
       0          set Steller_Zuluft gpio 55
       1          set Steller_Abluft gpio 45
     3:
       0          setreading DI_Lueftung CO2_alt [CO2Sensor:CO2:s10],setreading DI_Lueftung Stell_neu {(sprintf "%.0f", ([Steller_Zuluft:gpio]+25))},set Steller_Zuluft gpio [DI_Lueftung:Stell_neu]
       1          setreading DI_Lueftung Stell_neu {(sprintf "%.0f", ([Steller_Zuluft:gpio]*.75))},set Steller_Abluft gpio [DI_Lueftung:Stell_neu]
     4:
       0          setreading DI_Lueftung CO2_alt [CO2Sensor:CO2:s10],setreading DI_Lueftung Stell_neu {(sprintf "%.0f", ([Steller_Zuluft:gpio]-25))},set Steller_Zuluft gpio [DI_Lueftung:Stell_neu]
       1          setreading DI_Lueftung Stell_neu {(sprintf "%.0f", ([Steller_Zuluft:gpio]*.75))},set Steller_Abluft gpio [DI_Lueftung:Stell_neu]
     5:
   helper:
     event      CO2: 802
     globalinit 1
     last_timer 0
     sleepdevice set_cmd_5
     sleepsubtimer -1
     sleeptimer -1
     timerdev   CO2Sensor
     timerevent CO2: 810
     triggerDev CO2Sensor
     DOIF_eventas:
       cmd_nr: 5
       cmd_seqnr: 2
       cmd_event: set_cmd_5
       state: Betrieb
     timerevents:
       CO2: 810
     timereventsState:
       CO2: 810
     triggerEvents:
       CO2: 802
     triggerEventsState:
       CO2: 802
   internals:
     0           Lueftung:STATE
     1           abwesend:STATE Lueftung:STATE
     2           Lueftung:STATE
     3           Lueftung:STATE
     4           Lueftung:STATE
     all         Lueftung:STATE abwesend:STATE
   itimer:
   readings:
     0           CO2Sensor:CO2
     1           CO2Sensor:CO2
     2           CO2Sensor:CO2
     3           CO2Sensor:CO2 DI_Lueftung:CO2_alt Steller_Zuluft:gpio
     4           CO2Sensor:CO2 DI_Lueftung:CO2_alt Steller_Zuluft:gpio
     all         CO2Sensor:CO2 DI_Lueftung:CO2_alt Steller_Zuluft:gpio
   trigger:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   event-on-change-reading cmd
   repeatsame 1:1:1:0:0
   room       Lueftung
   startup    set $SELF checkall
   state      Betrieb
   verbose    2
   wait       0,15:0,15:0,15:0,15:0,15:0


Das Reading CO2 wird alle zwei Minuten geschrieben.

Christian

Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Ellert am 13 Januar 2019, 22:55:26
Würde ich nur einmal in DOIF_Readings berechnen und das abfragen.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 13 Januar 2019, 23:23:47
Da sind noch paar Stellen, die noch nachgebessert werden müssen. Z. Zt. wird nur eine Dezimalstelle ausgewertet, also maximal bis 9 Werte. Durch s10 wird s1 ausgewertet. Was z. Zt. nicht funktioniert, sind verschiedene Angaben in einem DOIF für das gleiche Reading,  bei Dir also  s10 und s5.

Am besten ist es, bei mehrfachen Abfragen, wie Ellert vorgeschlagen hat, ein DOIF_Reading zu definieren.

Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: mi.ke am 14 Januar 2019, 08:56:25
Zitat von: Damian am 12 Januar 2019, 23:18:58
Zu beachten ist, dass der Durchschnitt bereits gebildet wird, sobald die ersten Werte eintrudeln, beim ersten Wert ist der Durchschnitt logischerweise der Wert selbst.

Wird der Durchschnitt eigentlich als Reading ausgegeben?

Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 14 Januar 2019, 09:58:35
Zitat von: mi.ke am 14 Januar 2019, 08:56:25
Wird der Durchschnitt eigentlich als Reading ausgegeben?

Den Durchschnitt liefert doch die Angabe [....:s.] selbst. Wenn du es sichtbar haben willst, musst du ein DOIF_Reading definieren.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: mi.ke am 14 Januar 2019, 10:04:26
Zitat von: Damian am 13 Januar 2019, 18:20:47
Man kann das neue Feature natürlich auch beim DOIF_Readings- oder State-Attribut anwenden.

Bsp.:

attr smooth DOIF_Readings temp:[Aussensensor:temperature],\
temp2:[Aussensensor:temperature:s2]


Hier wird neben dem Reading temp auch ein geglättetes Reading temp2 definiert, das man im DOIF auswerten kann.

Jaa, jetzt hab auch ich es verstanden.
Danke
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: cwagner am 14 Januar 2019, 18:08:22
Zitat von: Damian am 13 Januar 2019, 23:23:47
Durch s10 wird s1 ausgewertet.

Das verstehe ich nicht: Hatte s10 als Glättung über die letzten 10 Werte verstanden. Bin ich da auf dem Holzweg?

Zitat von: Damian am 13 Januar 2019, 23:23:47
Was z. Zt. nicht funktioniert, sind verschiedene Angaben in einem DOIF für das gleiche Reading,  bei Dir also  s10 und s5.

Erwischt! Hier hatte ich beim Ausprobieren nicht sauber glattgezogen. Danke vor allem für:

Zitat von: Damian am 13 Januar 2019, 23:23:47
Am besten ist es, bei mehrfachen Abfragen, wie Ellert vorgeschlagen hat, ein DOIF_Reading zu definieren.

Das ist sicherlich der richtigere und übersichtlichere Weg...

Christian
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 14 Januar 2019, 19:25:43
Zitat von: cwagner am 14 Januar 2019, 18:08:22
Das verstehe ich nicht: Hatte s10 als Glättung über die letzten 10 Werte verstanden. Bin ich da auf dem Holzweg?

Erwischt! Hier hatte ich beim Ausprobieren nicht sauber glattgezogen. Danke vor allem für:

Das ist sicherlich der richtigere und übersichtlichere Weg...

Christian

z. Zt. geht eben nur s<d> mit d eine Ziffer
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Neuhier am 15 Januar 2019, 13:31:52
Wenn ich das richtig lese, geht das nur in DOIF´s.
Kann ich das irgendwie umbiegen, daß es auch z.B. eingelesene Werte für ein Plot "stablisiert"?
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 15 Januar 2019, 15:03:23
Zitat von: Neuhier am 15 Januar 2019, 13:31:52
Wenn ich das richtig lese, geht das nur in DOIF´s.
Kann ich das irgendwie umbiegen, daß es auch z.B. eingelesene Werte für ein Plot "stablisiert"?

Du kanns z. B. verschiedene Reading in einem DOIF glätten lassen und dort als eigene Readings ablegen, die du dann plotten kannst.

define smoothValues DOIF\
{set_Reading("reading1",[mydev1:readingbla1:s3],1)}\
{set_Reading("reading2",[mydev2:readingbla2:s3],1)}
...
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Neuhier am 15 Januar 2019, 15:36:36
War ich doch richtig, zur Nutzung muß ein DOIF erstellt werden.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 15 Januar 2019, 16:51:49
Zitat von: Neuhier am 15 Januar 2019, 15:36:36
War ich doch richtig, zur Nutzung muß ein DOIF erstellt werden.

ja, es ist Programmcode, der im DOIF-Modul drinsteckt. So etwas könnte jemand allgemein als set_Extensions für alle Devices programmieren, denn die Glättung als weiteres Reading wäre am besten dort aufgehoben, wo die Daten entstehen, nämlich beim Sensor.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: mumpitzstuff am 15 Januar 2019, 17:56:04
Gibts dafür nicht den event-aggregator?

Was wird zur Glättung verwendet? Average oder Median? Letzteres wäre unter Umständen robuster.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Neuhier am 15 Januar 2019, 18:02:48
Habe es mal versucht:
define Flo1Value DOIF {set_Reading("Lux1",[Flower1:Lux:s3],1)}

Bekomme aber ( trotz Update vor 10min ) nur:
DOIF: unknown expression format: s3
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 15 Januar 2019, 18:46:05
Zitat von: Neuhier am 15 Januar 2019, 18:02:48
Habe es mal versucht:
define Flo1Value DOIF {set_Reading("Lux1",[Flower1:Lux:s3],1)}

Bekomme aber ( trotz Update vor 10min ) nur:
DOIF: unknown expression format: s3

Dann hast du nicht die neue DOIF-Version aus dem ersten Post bei dir aktiv ;)
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Neuhier am 15 Januar 2019, 18:59:42
´Ähm
Sogar hinterher nochmal Update ( s.o. ) gemacht und FHEM neu gestartet.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 15 Januar 2019, 19:16:09
Version DOIF muss v0.1 liefern. Vermutlich überschreibt dein Update die Test-Version aus dem ersten Post durch die eingecheckte - das kann ich bereits an der Größe von DOIF sehen.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 15 Januar 2019, 19:17:40
Zitat von: mumpitzstuff am 15 Januar 2019, 17:56:04
Gibts dafür nicht den event-aggregator?

Was wird zur Glättung verwendet? Average oder Median? Letzteres wäre unter Umständen robuster.

ja event-aggregator dafür gibt offensichtlich schon.  Entweder ist es für viele unbekannt oder die Syntax der Definition zu umständlich. Ich habe die Existenz offenbar schon verdrängt.

Es war einfach ein schneller Hack im DOIF-Modul von mir. Die Erweiterung lässt sich so recht einfach in bestehenden DOIF-Definitionen anpassen.

Falls es sich als praktikabel erweist, könnte man es ausbauen z. B.

[device:reading:avr<Anzahl der Werte>] für Durchschnitt

[device:reading:med<Anzahl der Werte>] Median

[device:reading:diff]  Differenz der letzten beiden Werte

...
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Per am 16 Januar 2019, 13:32:46
Zitat von: Damian am 15 Januar 2019, 19:17:40[device:reading:diff]  Differenz der letzten beiden Werte
Würde mir gut gefallen!
Evtl. sogar :time (oder so) als Alter der letzten Meldung. Also wie :sec, nur das :sec in dem Fall wieder 0 wäre.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: the ratman am 16 Januar 2019, 13:58:12
oh ja, bitte erweitern!
die diff hätts mir ganz besonders angetan ...
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Ellert am 16 Januar 2019, 16:12:38
Zitat von: Damian am 15 Januar 2019, 19:17:40
ja event-aggregator dafür gibt offensichtlich schon.  Entweder ist es für viele unbekannt oder die Syntax der Definition zu umständlich. Ich habe die Existenz offenbar schon verdrängt.

Es war einfach ein schneller Hack im DOIF-Modul von mir. Die Erweiterung lässt sich so recht einfach in bestehenden DOIF-Definitionen anpassen.

Falls es sich als praktikabel erweist, könnte man es ausbauen z. B.

[device:reading:avr<Anzahl der Werte>] für Durchschnitt

[device:reading:med<Anzahl der Werte>] Median

[device:reading:diff]  Differenz der letzten beiden Werte

...
Nützlich finde ich auch eine gleitende  lineare Regression, mit Zugriff auf die zugehörigen Parameter (Steigung, Mittelwerte, Aschsenabschnitte, Korellationskoeffizient und Standartabweichung) in der Ausgabeformatierung. Sowas gibt es nicht im Attribut event-aggregator, das muss sich jeder selbst bastelt. Es hätte den Vorteil, das die zeitliche Lage der Messwerte im Ergebnis berücksichtigt wird.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 16 Januar 2019, 18:03:25
Ich muss allerdings einiges an der Programmierlogik noch ändern. Z. Zt. findet die Auswertung bzw. Speicherung des aktuellen Wertes in der Queue in der Perlroutine zu [...:s..]. Dadurch darf z. Zt. zu einem bestimmten Reading nur einmal die Angabe [...:s..] im DOIF gemacht werden, sonst wird der aktuelle Wert mehrfach in der Queue abgelegt. Mehrfache Angaben zum gleichen Reading müssen z. Zt. über DOIF_Reading gemacht werden.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 16 Januar 2019, 18:06:14
Zitat von: Ellert am 16 Januar 2019, 16:12:38
Nützlich finde ich auch eine gleitende  lineare Regression, mit Zugriff auf die zugehörigen Parameter (Steigung, Mittelwerte, Aschsenabschnitte, Korellationskoeffizient und Standartabweichung) in der Ausgabeformatierung. Sowas gibt es nicht im Attribut event-aggregator, das muss sich jeder selbst bastelt. Es hätte den Vorteil, das die zeitliche Lage der Messwerte im Ergebnis berücksichtigt wird.

Kannst du ein konkretes Beispiel machen, wie du es dir vorstellst?
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Christoph Morrison am 16 Januar 2019, 18:08:54
Hallo Damian,

ohne diesen Thread vorher gelesen zu haben, hatte ich mir just heute DOIF um den Median erweitert, einen Patch findest hier (https://bitbucket.org/christoph-morrison/fhem-patches/raw/master/FHEM/98_DOIF.pm/ahphei9Mu7.patch).

Gruß
Christoph
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 16 Januar 2019, 18:19:10
Zitat von: Christoph Morrison am 16 Januar 2019, 18:08:54
Hallo Damian,

ohne diesen Thread vorher gelesen zu haben, hatte ich mir just heute DOIF um den Median erweitert, einen Patch findest hier (https://bitbucket.org/christoph-morrison/fhem-patches/raw/master/FHEM/98_DOIF.pm/ahphei9Mu7.patch).

Gruß
Christoph

Ja, das ist eine gute Sache - kann ich glatt übernehmen. Allerdings hast du es in der Aggregationsfunktion eingebaut.

Hier geht es um die Auswertung vergangener X-Werte eines Readings. Dazu müssen die Werte des jeweiligen Readings in einer internen Queue gesammelt werden.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Christoph Morrison am 16 Januar 2019, 18:31:49
Zitat von: Damian am 16 Januar 2019, 18:19:10
Ja, das ist eine gute Sache - kann ich glatt übernehmen. Allerdings hast du es in der Aggregationsfunktion eingebaut.
Hier geht es um die Auswertung vergangener X-Werte eines Readings. Dazu müssen die Werte des jeweiligen Readings in einer internen Queue gesammelt werden.

Ich weiß, ich wollte das auch in der Aggregatsfunktion haben (um Temperaturwerte zu glätten) und kannte den Thread bis eben nicht. Die Berechnung des Median könntest du aber in eine Subroutine auslagern und dann auch bei den vergangenen Werten nutzen.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 16 Januar 2019, 18:34:19
Zitat von: Christoph Morrison am 16 Januar 2019, 18:31:49
Ich weiß, ich wollte das auch in der Aggregatsfunktion haben (um Temperaturwerte zu glätten) und kannte den Thread bis eben nicht. Die Berechnung des Median könntest du aber in eine Subroutine auslagern und dann auch bei den vergangenen Werten nutzen.

Klar, den Median wollte ich sowieso einbauen.

Wo hast du denn deine Temperaturwerte zum Auswerten über die Aggregatsfunktion abgelegt?
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Christoph Morrison am 16 Januar 2019, 19:14:36
Zitat von: Damian am 16 Januar 2019, 18:34:19
Klar, den Median wollte ich sowieso einbauen.

Wo hast du denn deine Temperaturwerte zum Auswerten über die Aggregatsfunktion abgelegt?

Ich hab mehrere Temperaturdevices auf meinem Grundstück, die jeweils ein Reading temperature haben. Darin ist die Temperatur ohne Gradzeichen abgelegt. Die hole ich mir alle zusammen und berechne den Medianwert, da gelegentlich mal eines nicht aktualisiert wird und ein arithmetisches Mittel dann sehr stark abweichende Werte liefern würde. Hier mal der Code in meiner Testumgebung:


define dummy.0 dummy
define dummy.1 dummy
define dummy.2 dummy
define dummy.4 dummy

setstate dummy.0 1
setstate dummy.0 2019-01-16 14:36:43 state 1

setstate dummy.1 2.5
setstate dummy.1 2019-01-16 14:40:04 state 2.5

setstate dummy.2 3
setstate dummy.2 2019-01-15 21:13:59 state 3

setstate dummy.4 4
setstate dummy.4 2019-01-16 15:48:43 state 4


Und die DOIFs mit denen ich getest habe:

define doif.0 DOIF ##
attr doif.0 state [#median:"dummy.*":state]
attr doif.0 verbose 5

define doif.1 DOIF ##
attr doif.1 state [@median:"dummy.*":state]
attr doif.1 verbose 5

setstate doif.0 2.75
setstate doif.0 2019-01-16 15:48:43 state 2.75

setstate doif.1 dummy.0,dummy.1,dummy.2,dummy.4
setstate doif.1 2019-01-16 15:48:43 state dummy.0,dummy.1,dummy.2,dummy.4

Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: sash.sc am 16 Januar 2019, 19:50:53
pah hat doch mal eine subroutine geschrieben.....

Gesendet von meinem E6653 mit Tapatalk

sub movingAverage($$$){
   my ($name,$reading,$avtime) = @_;
   my $hash = $defs{$name};
   my @new = my ($val,$time) = (ReadingsVal($name,$reading,undef),ReadingsTimestamp($name,$reading,undef));
   my ($cyear, $cmonth, $cday, $chour, $cmin, $csec) = $time =~ /(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})/;
   my $ctime = $csec+60*$cmin+3600*$chour;
   my $num;
   my $arr;
   #-- initialize if requested
   if( ($avtime eq "-1") ){
     $hash->{helper}{history}=undef;
   }
   #-- test for existence
   if( !$hash->{helper}{history}){
      #Log 1,"ARRAY CREATED";
      push(@{$hash->{helper}{history}},\@new);
      $num = 1;
      $arr=\@{$hash->{helper}{history}};
   } else {
      $num = int(@{$hash->{helper}{history}});
      $arr=\@{$hash->{helper}{history}};
      my $starttime = $arr->[0][1];
      my ($syear, $smonth, $sday, $shour, $smin, $ssec) = $starttime =~ /(\d{4})-(\d{2})-(\d{2})\s(\d{2}):(\d{2}):(\d{2})/;
      my $stime = $ssec+60*$smin+3600*$shour;
      #-- correct for daybreak
      $stime-=86400
        if( $stime > $ctime);
      if( ($num < 25)&&( ($ctime-$stime)<$avtime) ){
        #Log 1,"ARRAY has $num elements, adding another one";
        push(@{$hash->{helper}{history}},\@new);
      }else{
        shift(@{$hash->{helper}{history}});
        push(@{$hash->{helper}{history}},\@new);
      }
    }
    #-- output and average
    my $average = 0;
    for(my $i=0;$i<$num;$i++){
      $average+=$arr->[$i][0];
      Log 4,"[$name moving average] Value = ".$arr->[$i][0]." Time = ".$arr->[$i][1];
    }
    $average=sprintf( "%5.3f", $average/$num);
    #--average
    Log 4,"[$name moving average] calculated over $num values is $average"; 
    return $average;
}

Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Ellert am 16 Januar 2019, 20:28:32
Zitat von: Damian am 16 Januar 2019, 18:06:14
Kannst du ein konkretes Beispiel machen, wie du es dir vorstellst?
Für ein Reading temperature werden bei jedem Event die gemessenen Werte (y) als Zeitreihe in fortgeschrieben, wie beim Glätten aber mit Zeitstempel (x).
Zurückgegeben werden die Werte, mit der die Lage der besten Geraden in dem Datenfeld beschrieben wird. Für die Gerade y = a0 + a1x

würde [Sensor:temperature:reg10] dann a0, a1, xm, ym,,Standartabweichung, Korrelationskoeffizent als kommagetrennte Werte zurückliefern, berechnet aus 10 Wertepaaren.

Wenn die Ausgabeformatierung verwendet wird, dann sollten $a0, $a1, $xm, $ym, $stabw, $corr zur Verfügung stehen um ein eigenes Ausgabeformat zu erstellen.

Diese Werte werden durch die Perlfunktion Statistics::lineFit bereitgestellt https://metacpan.org/pod/release/RANDERSON/Statistics-LineFit-0.01/lib/Statistics/LineFit.pm

Die Mittelwerte xm, ym müssten noch berechnet werden.

Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 16 Januar 2019, 20:38:55
Zitat von: Ellert am 16 Januar 2019, 20:28:32
Für ein Reading temperature werden bei jedem Event die gemessenen Werte (y) als Zeitreihe in fortgeschrieben, wie beim Glätten aber mit Zeitstempel (x).
Zurückgegeben werden die Werte, mit der die Lage der besten Geraden in dem Datenfeld beschrieben wird. Für die Gerade y = a0 + a1x

würde [Sensor:temperature:reg10] dann a0, a1, xm, ym,,Standartabweichung, Korrelationskoeffizent als kommagetrennte Werte zurückliefern, berechnet aus 10 Wertepaaren.

Wenn die Ausgabeformatierung verwendet wird, dann sollten $a0, $a1, $xm, $ym, $stabw, $corr zur Verfügung stehen um ein eigenes Ausgabeformat zu erstellen.

Diese Werte werden durch die Perlfunktion Statistics::lineFit bereitgestellt https://metacpan.org/pod/release/RANDERSON/Statistics-LineFit-0.01/lib/Statistics/LineFit.pm

Die Mittelwerte xm, ym müssten noch berechnet werden.
Es müsste also für die Berechnung jeweils ein Wertepaar aus Zeitpunkt=X und dem eigentlichen Wert=Y in der Queue gespeichert werden.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 16 Januar 2019, 20:42:07
Zitat von: Christoph Morrison am 16 Januar 2019, 19:14:36
Ich hab mehrere Temperaturdevices auf meinem Grundstück, die jeweils ein Reading temperature haben. Darin ist die Temperatur ohne Gradzeichen abgelegt. Die hole ich mir alle zusammen und berechne den Medianwert, da gelegentlich mal eines nicht aktualisiert wird und ein arithmetisches Mittel dann sehr stark abweichende Werte liefern würde. Hier mal der Code in meiner Testumgebung:


define dummy.0 dummy
define dummy.1 dummy
define dummy.2 dummy
define dummy.4 dummy

setstate dummy.0 1
setstate dummy.0 2019-01-16 14:36:43 state 1

setstate dummy.1 2.5
setstate dummy.1 2019-01-16 14:40:04 state 2.5

setstate dummy.2 3
setstate dummy.2 2019-01-15 21:13:59 state 3

setstate dummy.4 4
setstate dummy.4 2019-01-16 15:48:43 state 4


Und die DOIFs mit denen ich getest habe:

define doif.0 DOIF ##
attr doif.0 state [#median:"dummy.*":state]
attr doif.0 verbose 5

define doif.1 DOIF ##
attr doif.1 state [@median:"dummy.*":state]
attr doif.1 verbose 5

setstate doif.0 2.75
setstate doif.0 2019-01-16 15:48:43 state 2.75

setstate doif.1 dummy.0,dummy.1,dummy.2,dummy.4
setstate doif.1 2019-01-16 15:48:43 state dummy.0,dummy.1,dummy.2,dummy.4


Das Zwischenspeichern der Werte in Dummys könntest du dir zukünftig sparen und da, wo du die bereinigten Werte benötigst mit  [device:temperature:med7] darauf zugreifen.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Christoph Morrison am 16 Januar 2019, 20:47:14
Zitat von: Damian am 16 Januar 2019, 20:42:07
Das Zwischenspeichern der Werte in Dummys könntest du dir zukünftig sparen und da, wo du die bereinigten Werte benötigst mit  [device:temperature:med7] darauf zugreifen.

Äh, das ist temporärer Code aus meiner Testumgebung, kein produktiver Code ...
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Ellert am 17 Januar 2019, 14:56:05
Zitat von: Damian am 16 Januar 2019, 20:38:55
Es müsste also für die Berechnung jeweils ein Wertepaar aus Zeitpunkt=X und dem eigentlichen Wert=Y in der Queue gespeichert werden.
Ja, wobei es flexibler wäre, wenn [Sensor:temperature:ref10,5] nur 2 Referenzen auf @x, und @y liefert, die man dann in einem DOIF_Reading beliebig auswerten könnte und man ist nicht festgelegt auf einen bestimmten Algorithmus und könnte noch Wichtungen vornehmen.
ref10.5 bedeutet dann es werden 2 Referenzen geliefert auf 2 Arrays mit je 10 Elementen, die nächsten Referenzen werden erst geliefert, wenn das Array um 5 Elemente weiter geschoben ist. Dann wird die Berechnung nur alle 5 Werte ausgeführt, damit könnte man die Zahl zeitintensiver Berechnungen reduzieren.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 17 Januar 2019, 17:14:54
Zitat von: Ellert am 17 Januar 2019, 14:56:05
Ja, wobei es flexibler wäre, wenn [Sensor:temperature:ref10,5] nur 2 Referenzen auf @x, und @y liefert, die man dann in einem DOIF_Reading beliebig auswerten könnte und man ist nicht festgelegt auf einen bestimmten Algorithmus und könnte noch Wichtungen vornehmen.
ref10.5 bedeutet dann es werden 2 Referenzen geliefert auf 2 Arrays mit je 10 Elementen, die nächsten Referenzen werden erst geliefert, wenn das Array um 5 Elemente weiter geschoben ist. Dann wird die Berechnung nur alle 5 Werte ausgeführt, damit könnte man die Zahl zeitintensiver Berechnungen reduzieren.

Ich befürchte, dass der allgemeingültige Ansatz zwar sehr viele Möglichkeiten bietet, aber von 99 % der User als zu komplex gesehen wird. Ich schätze, dass bereits der event-aggregator die meisten in seinen Möglichkeiten überfordert. Zudem wäre die bisherige Semantik bzgl. des Rückgabewertes von [device:reading] verletzt - es wäre kein einfacher Wert (Skalar) mehr, den man in den üblichen Bedingungen auswerten kann.

Was brauchen die meisten?

Ich denke, sie wollen Ausreißer eliminieren und das mit einfacher Syntax wie z. B. [device:reading:med] (med wie Median)

Damit würde ich zunächst anfangen.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Morgennebel am 17 Januar 2019, 17:37:21
Zitat von: Damian am 12 Januar 2019, 23:18:58
Ich habe mal eine neue Option für Readingangaben (s wie smoothing) eingebaut. Man kann jetzt den Wert eines Readings über die letzten X-Werte glätten lassen.

Entspricht dies dem https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen?

Danke, -MN
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 17 Januar 2019, 18:10:46
Zitat von: Morgennebel am 17 Januar 2019, 17:37:21
Entspricht dies dem https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen?

Danke, -MN

Im wesentlichen ja. Die Zeitspanne wird nicht angegeben, da muss der User selbst überlegen, wie viele Werte er auswerten will.

Es gibt sicherlich unzählige Funktionen, die so etwas leisten. Den Durchschnitt zu berechnen ist nichts besonderes, wobei der Median für Ausreißer viel interessanter ist.

Der eigentlicher Vorteil dieser Funktion ist, dass man bestehende Abfragen z. B. [aussen:temperature] <0 in [aussen:temperature:s7] <0 ändern kann, ohne weitere Definitionen oder Funktionsaufrufe irgendwo vornehmen zu müssen.


Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: sash.sc am 17 Januar 2019, 18:28:03
Zitat von: Morgennebel am 17 Januar 2019, 17:37:21
Entspricht dies dem https://wiki.fhem.de/wiki/Gleitende_Mittelwerte_berechnen_und_loggen?

Danke, -MN
Das habe ich etwas vorher angeführt....

Das ist die Funktion für die myutils..... [emoji6]

Gesendet von meinem E6653 mit Tapatalk

Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 17 Januar 2019, 18:39:24
Zitat von: sash.sc am 17 Januar 2019, 18:28:03
Das habe ich etwas vorher angeführt....

Das ist die Funktion für die myutils..... [emoji6]

Gesendet von meinem E6653 mit Tapatalk

ja, die DOIF-Erweiterung ist in erster Linie für DOIF-Nutzer interessant (oder die es werden wollen).

Wenn jemand bisher kein DOIF genutzt hat, kann natürlich trotzdem gern relativ einfach bereinigte Readings zum Plotten erzeugen:

https://forum.fhem.de/index.php/topic,95759.msg888625.html#msg888625
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: sash.sc am 17 Januar 2019, 18:46:03
Doif ist schon cool......

Und mächtig.....

Vereinfacht vieles......

Und polarisiert..... [emoji6]

Gesendet von meinem E6653 mit Tapatalk

Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 17 Januar 2019, 18:54:13
Zitat von: sash.sc am 17 Januar 2019, 18:46:03
Doif ist schon cool......

Und mächtig.....

Vereinfacht vieles......

Und polarisiert..... [emoji6]

Gesendet von meinem E6653 mit Tapatalk

Die Diskussion wollen wir lieber nicht wieder anfangen ;)

Ich hoffe, ich komme dazu am Wochenende die neue Funktionalität sauber im DOIF abzubilden. Es soll Folgendes möglich sein:

-beliebig viele Angaben in einem DOIF zu einem Reading (bisher eine)
-beliebig viele Werte (bisher 9)

Folgende Funktionen:

Durchschnitt: [device:reading:avr<Anzahl>] (kein s mehr)
Median [device:reading:med<Anzahl>] sollte bevorzugt für typische Ausreißer genutzt werden


Den Rest überlegen wir uns noch genau.

Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Ellert am 17 Januar 2019, 19:08:14
Zitat von: Damian am 17 Januar 2019, 17:14:54
Ich befürchte, dass der allgemeingültige Ansatz zwar sehr viele Möglichkeiten bietet, aber von 99 % der User als zu komplex gesehen wird. Ich schätze, dass bereits der event-aggregator die meisten in seinen Möglichkeiten überfordert. Zudem wäre die bisherige Semantik bzgl. des Rückgabewertes von [device:reading] verletzt - es wäre kein einfacher Wert (Skalar) mehr, den man in den üblichen Bedingungen auswerten kann.

Was brauchen die meisten?

Ich denke, sie wollen Ausreißer eliminieren und das mit einfacher Syntax wie z. B. [device:reading:med] (med wie Median)

Damit würde ich zunächst anfangen.
Wenn es einen Mechanismus gibt, der die Daten eines Readings sammelt, wäre es halt schön, wenn man auf die Daten zugreifen könnte. Die Aggregationsfunktion liefert z.B. eine Auflistung von Dateinamen zurück, das könnte auch eine Liste von Arrayreferenzen sein.
Aber ich gebe Dir recht, viele würden das wohl nicht nutzen.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 17 Januar 2019, 19:49:11
Zitat von: Ellert am 17 Januar 2019, 19:08:14
Wenn es einen Mechanismus gibt, der die Daten eines Readings sammelt, wäre es halt schön, wenn man auf die Daten zugreifen könnte. Die Aggregationsfunktion liefert z.B. eine Auflistung von Dateinamen zurück, das könnte auch eine Liste von Arrayreferenzen sein.
Aber ich gebe Dir recht, viele würden das wohl nicht nutzen.

Dafür kann man sich recht einfach eine Routine (hier sammeln) programmieren, die man so aufrufen kann:

DOIF {sammeln ($_myarray,[device:reading])}

Auf die gesammelten Werte kannst du dann über die globale Variable hier $_myarray überall innerhalb des DOIF zwecks Auswertung zugreifen.

Edit: Natürlich kann man als X-Wert auch den Zeitstempel des Readings mit übergeben

Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Brockmann am 26 Januar 2019, 14:00:36
Zitat von: Damian am 17 Januar 2019, 18:54:13
Durchschnitt: [device:reading:avr<Anzahl>] (kein s mehr)
Spricht was dagegen, die übliche Abkürzung avg für den Durchschnitt zu verwenden?
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 26 Januar 2019, 14:21:38
Zitat von: Brockmann am 26 Januar 2019, 14:00:36
Spricht was dagegen, die übliche Abkürzung avg für den Durchschnitt zu verwenden?
nein, bin bisher eh noch nicht dazu gekommen das neue Feature sauber einzubauen.
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 27 Januar 2019, 18:21:38
Neue Version mit Kurzbeschreibung im ersten Post.

Es war aufwändiger als ich dachte. Ich konnte es aber so umsetzen, wie ich es wollte - man kann jetzt in einem DOIF beliebig viele Angaben zum gleichen Reading machen.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz der letzten Werte
Beitrag von: Neuhier am 27 Januar 2019, 19:13:24
Ich blicke da nicht durch.
Eintrag ist: attr HumAK DOIF_Readings humidity:[AK:humidity:avg5]

AK ist ein Sensor, der die Feuchtigkeit liefert.

Es kommt: error in DOIF_Readings avg5, unknown expression format

Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz der letzten Werte
Beitrag von: Damian am 27 Januar 2019, 19:15:01
Zitat von: Neuhier am 27 Januar 2019, 19:13:24
Ich blicke da nicht durch.
Eintrag ist: attr HumAK DOIF_Readings humidity:[AK:humidity:avg5]

AK ist ein Sensor, der die Feuchtigkeit liefert.

Es kommt: error in DOIF_Readings avg5, unknown expression format

Hatten wir das Problem nicht schon mal?

Version DOIF?
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz der letzten Werte
Beitrag von: Neuhier am 27 Januar 2019, 19:28:14
Ja, glaube auch.
Bin aber da nicht weitergekommen, selbst mit Update von FHEM nicht....
Habe so angefangen:
define HumAK DOIF ##
dann oben die geopsteten attr, mehr nicht.
Entspricht IMHO dem Beispiel im ersten Beitrag.

Ausgelesen wird AK.humidity korrekt, wird im Plot angezeigt.
Stelle ich mich nur doof an?
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz der letzten Werte
Beitrag von: Damian am 27 Januar 2019, 19:31:54
Zitat von: Neuhier am 27 Januar 2019, 19:28:14
Ja, glaube auch.
Bin aber da nicht weitergekommen, selbst mit Update von FHEM nicht....
Habe so angefangen:
define HumAK DOIF ##
dann oben die geopsteten attr, mehr nicht.
Entspricht IMHO dem Beispiel im ersten Beitrag.

Ausgelesen wird AK.humidity korrekt, wird im Plot angezeigt.
Stelle ich mich nur doof an?

Du braucht die aktuelle Version aus dem ersten Post z. Zt. v0.4
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz der letzten Werte
Beitrag von: Neuhier am 27 Januar 2019, 20:16:04
File            Rev   Last Change

# $Id: 98_DOIF.pm v0.4 Damian $
98_DOIFtools.pm 18333 2019-01-19 09:13:38Z Ellert

doif.js                    15546 2017-12-03 09:57:42Z Ellert
fhemweb.js                 18399 2019-01-24 13:18:20Z rudolfkoenig
fhemweb_readingsGroup.js   15189 2017-10-03 17:53:27Z justme1968
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz der letzten Werte
Beitrag von: Damian am 27 Januar 2019, 20:30:40
Zitat von: Neuhier am 27 Januar 2019, 20:16:04
File            Rev   Last Change

# $Id: 98_DOIF.pm v0.4 Damian $
98_DOIFtools.pm 18333 2019-01-19 09:13:38Z Ellert

doif.js                    15546 2017-12-03 09:57:42Z Ellert
fhemweb.js                 18399 2019-01-24 13:18:20Z rudolfkoenig
fhemweb_readingsGroup.js   15189 2017-10-03 17:53:27Z justme1968

System durchgestartet?

Bei mir funktioniert alles, wie beschrieben.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 27 Januar 2019, 20:39:03
Weil es so viel Spaß macht, habe ich noch den prozentualen Anstieg eingebaut :)

Bsp.:

DOIF ([Bad:humidity:inc]>0.1)(set echo Fenster öffnen)

Wenn die Feuchtigkeit um über 10 % zwischen zwei gemessenen Werten ansteigt, dann Ansage.

Wenn mehr Werte dazwischen liegen sollen, dann kann man ebenfalls wie bei diff eine Zahl dranhängen.

Version v0.5 im ersten Post.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Neuhier am 27 Januar 2019, 20:42:29
Der Fehler, bei mir ,ist der Doppelpunkt hinter dem Device.
Setze ich dort nur einen Punkt, kommt keine Fehlermeldung mehr.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 27 Januar 2019, 20:44:30
Zitat von: Neuhier am 27 Januar 2019, 20:42:29
Der Fehler, bei mir ,ist der Doppelpunkt hinter dem Device.
Setze ich dort nur einen Punkt, kommt keine Fehlermeldung mehr.
Poste mal list von dem DOIF-Device
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Neuhier am 27 Januar 2019, 21:03:48
list HumAK
ZitatInternals:
   CFGFN     
   DEF        ##
   
   MODEL      FHEM
   NAME       HumAK
   NR         435
   NTFY_ORDER 50-HumAK
   STATE      initialized
   TYPE       DOIF
   CHANGED:
     humidity:
   CHANGEDWITHSTATE:
     humidity:
   DOIF_Readings:
     humidity   ::ReadingValDoIf($hash,'AK.humidity','avg5')
   READINGS:
     2019-01-27 20:54:18   cmd             0
     2019-01-27 20:54:51   humidity       
     2019-01-27 20:54:18   mode            enabled
     2019-01-27 20:54:18   state           initialized
   Regex:
     DOIF_Readings:
       AK.humidity:
         humidity:
           avg5       ^AK.humidity$:^avg5:
   condition:
   devices:
   do:
     0:
   helper:
     DOIF_Readings_events
     globalinit 1
     last_timer 0
     sleeptimer -1
   itimer:
   uiState:
   uiTable:
Attributes:
   DOIF_Readings humidity:[AK.humidity:avg5]
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 27 Januar 2019, 21:20:58
Zitat von: Neuhier am 27 Januar 2019, 21:03:48
list HumAK

So wie du es jetzt angegeben hast, ist avg5 ein Reading. Es muss schon die korrekte Syntax sein, sonst kann es nicht funktionieren.

[AK:humidity:avg5]

Warten wir ab, ob es bei den anderen Usern funktioniert.

Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Neuhier am 27 Januar 2019, 21:23:13
[AK:humidity:avg5] ergibt den geposteten Fehler.
[AK.humidity:avg5] geht ohne Fehler.
Aber es ist nix Wichtiges, kann also abwarten, ob es woanderst fehlerfrei läuft.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: sentinel1 am 27 Januar 2019, 21:28:46
Zitat von: Damian am 27 Januar 2019, 21:20:58

Warten wir ab, ob es bei den anderen Usern funktioniert.

ich habe zwar nur kurz getestet aber bei mir funktioniert die v0.4.

Gruß,
Claudiu
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: cwagner am 01 Februar 2019, 14:00:14
Teste die neuen Aggregat-Funktionen und dabei fiel mir auf: es scheint weiterhin so zu sein, dass z.B. med nur über max 9 Werte läuft. Bei med20 z.B. bekomme ich als Fehlermeldung
error in DOIF_Readings: Modification of non-creatable array value attempted, subscript -20 at ./FHEM/98_DOIF.pm line 1040.

Befremdlich: benutze ich med20 direkt in der Bedingung eines DOIFs bekomme ich keine Fehlermeldung und im Listing wird auch korrekt Dim 20 für die Größe des Arrays angegeben.

Christian
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 01 Februar 2019, 14:36:56
Zitat von: cwagner am 01 Februar 2019, 14:00:14
Teste die neuen Aggregat-Funktionen und dabei fiel mir auf: es scheint weiterhin so zu sein, dass z.B. med nur über max 9 Werte läuft. Bei med20 z.B. bekomme ich als Fehlermeldung
error in DOIF_Readings: Modification of non-creatable array value attempted, subscript -20 at ./FHEM/98_DOIF.pm line 1040.

Befremdlich: benutze ich med20 direkt in der Bedingung eines DOIFs bekomme ich keine Fehlermeldung und im Listing wird auch korrekt Dim 20 für die Größe des Arrays angegeben.

Christian

Poste bitte das Listing vom dem DOIF-Device.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: cwagner am 01 Februar 2019, 14:40:13
Hier das Listing mit dem Versuch, in einem DOIF-Reading einen Median über 20 Werte zu bilden:

nternals:
   CHANGED   
   DEF        ([Lueftung] eq "max") (set Steller_Zuluft gpio 255) (set Steller_Abluft gpio 255)
DOELSEIF ([abwesend] eq "an" or [Lueftung] eq "AUS") (set Steller_Zuluft gpio 0) (set Steller_Abluft gpio 0)
DOELSEIF ([Lueftung] eq "min" or [$SELF:sCO2]<700) (set Steller_Zuluft gpio 55) (set Steller_Abluft gpio 55) ##LWR 0,8/h
DOELSEIF ([?Lueftung] eq "auto" and [$SELF:sCO2]>([$SELF:CO2_alt]+10) and [Steller_Zuluft:gpio]<250) (setreading $SELF CO2_alt [$SELF:sCO2],setreading $SELF Stell_neu {(sprintf "%.0f", ([Steller_Zuluft:gpio]+5))},set Steller_Zuluft gpio [$SELF:Stell_neu]) (setreading $SELF Stell_neu {(sprintf "%.0f", ([Steller_Zuluft:gpio]))},set Steller_Abluft gpio [$SELF:Stell_neu]) ## Vereinfachung möglich mit dirkten Einstetzen von Stellwert-Zuluft als Steuerwert bei Abluft
DOELSEIF ([?Lueftung] eq "auto" and [$SELF:sCO2]<([$SELF:CO2_alt]+10) and [Steller_Zuluft:gpio]>59) (setreading $SELF CO2_alt [$SELF:sCO2],setreading $SELF Stell_neu {(sprintf "%.0f", ([Steller_Zuluft:gpio]-5))},set Steller_Zuluft gpio [$SELF:Stell_neu]) (setreading $SELF Stell_neu {(sprintf "%.0f", ([Steller_Zuluft:gpio]))},set Steller_Abluft gpio [$SELF:Stell_neu])
   FUUID      5c43298b-f33f-e1df-09ea-ab76a5ff2ccd3b93
   MODEL      FHEM
   NAME       DI_Lueftung
   NR         115
   NTFY_ORDER 50-DI_Lueftung
   STATE      Betrieb
   TYPE       DOIF
   DOIF_Readings:
     sCO2       ::ReadingValDoIf($hash,'CO2Sensor','CO2','','med20')
   OLDREADINGS:
   READINGS:
     2019-02-01 08:25:47   CO2_alt         1253
     2019-02-01 14:38:41   Device          DI_Lueftung
     2019-02-01 08:26:02   Stell_neu       55
     2019-02-01 09:24:02   cmd             3.2
     2019-02-01 09:23:47   cmd_count       1
     2019-02-01 09:24:02   cmd_event       DI_Lueftung
     2019-02-01 09:24:02   cmd_nr          3
     2019-02-01 09:24:02   cmd_seqnr       2
     2019-02-01 14:38:41   e_DI_Lueftung_sCO2 error in DOIF_Readings: Modification of non-creatable array value attempted, subscript -20 at ./FHEM/98_DOIF.pm line 1040.

     2019-02-01 09:22:33   mode            enabled
     2019-02-01 14:38:41   sCO2            error in DOIF_Readings: Modification of non-creatable array value attempted, subscript -20 at ./FHEM/98_DOIF.pm line 1040.

     2019-02-01 09:24:02   state           Betrieb
     2019-02-01 09:24:02   wait_timer      no timer
     2019-02-01 14:38:41   warning         condition c03: Argument "error in DOIF_Readings: Modification of non-creatable ar..." isn't numeric in numeric lt (<)

   Regex:
     DOIF_Readings:
       CO2Sensor:
         sCO2:
           CO2        ^CO2Sensor$:^CO2:
       DI_Lueftung:
     accu:
       CO2Sensor:
         accu:
           CO2        ^CO2Sensor$:^CO2:
   accu:
     CO2Sensor CO2:
       dim        9
       value:
         968
         951
         954
         968
         975
         970
         985
         967
         985
   akku:
     CO2Sensor CO2:
       945
       949
       949
       926
       926
       932
       932
       947
       947
   attr:
     cmdState:
     repeatsame:
       1
       1
       1
       0
       0
     wait:
       0:
         0
         15
       1:
         0
         15
       2:
         0
         15
       3:
         0
         15
       4:
         0
         15
       5:
         0
     waitdel:
   condition:
     0          ::InternalDoIf($hash,'Lueftung','STATE') eq "max"
     1          ::InternalDoIf($hash,'abwesend','STATE') eq "an" or ::InternalDoIf($hash,'Lueftung','STATE') eq "AUS"
     2          ::InternalDoIf($hash,'Lueftung','STATE') eq "min" or ::ReadingValDoIf($hash,'DI_Lueftung','sCO2')<700
     3          ::InternalDoIf($hash,'Lueftung','STATE') eq "auto" and ::ReadingValDoIf($hash,'DI_Lueftung','sCO2')>(::ReadingValDoIf($hash,'DI_Lueftung','CO2_alt')+10) and ::ReadingValDoIf($hash,'Steller_Zuluft','gpio')<250
     4          ::InternalDoIf($hash,'Lueftung','STATE') eq "auto" and ::ReadingValDoIf($hash,'DI_Lueftung','sCO2')<(::ReadingValDoIf($hash,'DI_Lueftung','CO2_alt')+10) and ::ReadingValDoIf($hash,'Steller_Zuluft','gpio')>59
   devices:
     0           Lueftung
     1           abwesend Lueftung
     2           Lueftung DI_Lueftung
     3           DI_Lueftung Steller_Zuluft
     4           DI_Lueftung Steller_Zuluft
     all         Lueftung abwesend DI_Lueftung Steller_Zuluft
   do:
     0:
       0          set Steller_Zuluft gpio 255
       1          set Steller_Abluft gpio 255
     1:
       0          set Steller_Zuluft gpio 0
       1          set Steller_Abluft gpio 0
     2:
       0          set Steller_Zuluft gpio 55
       1          set Steller_Abluft gpio 55
     3:
       0          setreading DI_Lueftung CO2_alt [DI_Lueftung:sCO2],setreading DI_Lueftung Stell_neu {(sprintf "%.0f", ([Steller_Zuluft:gpio]+5))},set Steller_Zuluft gpio [DI_Lueftung:Stell_neu]
       1          setreading DI_Lueftung Stell_neu {(sprintf "%.0f", ([Steller_Zuluft:gpio]))},set Steller_Abluft gpio [DI_Lueftung:Stell_neu]
     4:
       0          setreading DI_Lueftung CO2_alt [DI_Lueftung:sCO2],setreading DI_Lueftung Stell_neu {(sprintf "%.0f", ([Steller_Zuluft:gpio]-5))},set Steller_Zuluft gpio [DI_Lueftung:Stell_neu]
       1          setreading DI_Lueftung Stell_neu {(sprintf "%.0f", ([Steller_Zuluft:gpio]))},set Steller_Abluft gpio [DI_Lueftung:Stell_neu]
     5:
   helper:
     DOIF_Readings_events
     event      sCO2: error in DOIF_Readings: Modification of non-creatable array value attempted, subscript -20 at ./FHEM/98_DOIF.pm line 1040.

     globalinit 1
     last_timer 0
     sleepdevice DI_Lueftung
     sleepsubtimer -1
     sleeptimer -1
     timerdev   DI_Lueftung
     timerevent sCO2: error in DOIF_Readings: Modification of non-creatable array value attempted, subscript -20 at ./FHEM/98_DOIF.pm line 1040.

     triggerDev DI_Lueftung
     DOIF_eventas:
       cmd_nr: 3
       cmd_seqnr: 2
       cmd_event: DI_Lueftung
       state: Betrieb
     timerevents:
       sCO2: error in DOIF_Readings: Modification of non-creatable array value attempted, subscript -20 at ./FHEM/98_DOIF.pm line 1040.

     timereventsState:
       sCO2: error in DOIF_Readings: Modification of non-creatable array value attempted, subscript -20 at ./FHEM/98_DOIF.pm line 1040.

     triggerEvents:
       sCO2: error in DOIF_Readings: Modification of non-creatable array value attempted, subscript -20 at ./FHEM/98_DOIF.pm line 1040.

     triggerEventsState:
       sCO2: error in DOIF_Readings: Modification of non-creatable array value attempted, subscript -20 at ./FHEM/98_DOIF.pm line 1040.

   internals:
     0           Lueftung:STATE
     1           abwesend:STATE Lueftung:STATE
     2           Lueftung:STATE
     3           Lueftung:STATE
     4           Lueftung:STATE
     all         Lueftung:STATE abwesend:STATE
   itimer:
   readings:
     2           DI_Lueftung:sCO2
     3           DI_Lueftung:sCO2 DI_Lueftung:CO2_alt Steller_Zuluft:gpio
     4           DI_Lueftung:sCO2 DI_Lueftung:CO2_alt Steller_Zuluft:gpio
     all         DI_Lueftung:sCO2 DI_Lueftung:CO2_alt Steller_Zuluft:gpio
   trigger:
   uiState:
   uiTable:
Attributes:
   DOIF_Readings sCO2:[CO2Sensor:CO2:med20]
   DbLogExclude .*
   do         always
   event-on-change-reading cmd
   repeatsame 1:1:1:0:0
   room       Lueftung
   startup    set $SELF checkall
   state      Betrieb
   verbose    2
   wait       0,15:0,15:0,15:0,15:0,15:0


Die Behauptung, es funktioniere in einer DOIF-Bedingung ist falsch (hätte ich doch ordentlich auf checkall geklickt)

Liebe Grüße

Christian
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 01 Februar 2019, 14:56:09
Das Problem ist, dass du nachdem du DOIF_Readings definiert hast, die DOIF-Definition (DEF-Bereich) noch mal geändert hast. Wenn du die DOIF-Definition änderst, musst du danach noch mal DOIF-Readings anklicken und übernehmen.

Ich werde da noch einen Automatismus einbauen.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: cwagner am 01 Februar 2019, 21:03:08
Das kann ich so nicht bestätigen: Ohne die DEF angefasst zu haben, erhalte ich beim Speichern des attr DOIF-Readings sofort die Fehlermeldungen...

Christian
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 01 Februar 2019, 21:04:40
Zitat von: Damian am 01 Februar 2019, 14:56:09
Das Problem ist, dass du nachdem du DOIF_Readings definiert hast, die DOIF-Definition (DEF-Bereich) noch mal geändert hast. Wenn du die DOIF-Definition änderst, musst du danach noch mal DOIF-Readings anklicken und übernehmen.

Ich werde da noch einen Automatismus einbauen.

Version 0.6 im ersten Post.

Jetzt werden alle Attribut-Definitionen neu gesetzt, wenn man defmod aufruft. Dadurch wird sichergestellt, dass eine nachträgliche Änderung der Definition (DEF) des DOIF-Devices zur Laufzeit keine Probleme mehr bereitet.

PS. Ich denke, dass med3 ausreichen sollte, um Ausreißer zu eliminieren. Es müssten dann schon bei drei nacheinander folgenden Werten zwei Ausreißer dabei sein, damit einer durchkommt - das sollte recht unwahrscheinlich sein.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 01 Februar 2019, 21:45:49
Zitat von: cwagner am 01 Februar 2019, 21:03:08
Das kann ich so nicht bestätigen: Ohne die DEF angefasst zu haben, erhalte ich beim Speichern des attr DOIF-Readings sofort die Fehlermeldungen...

Christian

Korrigierte Version 0.7 im ersten Post.

Da muss man erst mal drauf kommen, dass {max(4,10)} 4 liefert  >:(

Es scheint hier die lexikografische Reihenfolge gemeint zu sein. Ich habe es jetzt selber programmiert.

Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: cwagner am 01 Februar 2019, 23:40:18
Funktioniert nun - getestet mit med20

Was ist die Bedeutung von accu und akku im Listing?

Und immer wieder: Danke für Deine Super-Arbeit!

Christian
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 02 Februar 2019, 11:19:31
Zitat von: cwagner am 01 Februar 2019, 23:40:18
Funktioniert nun - getestet mit med20

Was ist die Bedeutung von accu und akku im Listing?

Und immer wieder: Danke für Deine Super-Arbeit!

Christian

Unterhalb von accu werden die Daten der Sensoren gespeichert.

Ursprünglich hieß es intern akku. Mit der neuen Version und einem durchgestarteten System sollte akku nicht mehr sichtbar sein.

Mit med20 werden die Daten aus meiner Sicht unnötig stark verfälscht. Zusätzlich wird bei jedem Trigger mehr Rechenpower benötigt.

Du könntest, um herauszufinden, welcher Wert für dich am besten ist, folgendes DOIF bauen:

define CO2Med DOIF\
{set_Reading("ori",[CO2Sensor:CO2],1)}\
{set_Reading("med3",[CO2Sensor:CO2:med3],1)}\
{set_Reading("med5",[CO2Sensor:CO2:med5],1)}\
{set_Reading("med7",[CO2Sensor:CO2:med7],1)}\
{set_Reading("med20",[CO2Sensor:CO2:med20],1)}


Im Gegensatz zum Attribut DOIF_Readings werden hier bewusst Events nach außen produziert. Dadurch kann man die Werte als Graphen in einem Plot gegenüberstellen und die Abweichungen zum Originalwert erkennen.

Beim Median würde ich immer ungerade Zahlen nehmen, da bei geraden immer ein Mittelwert gebildet wird.

Und wenn med3 ausreicht, würde ich den nehmen, da bei jedem Trigger von CO2Sensor:CO2 weniger Rechenpower benötigt wird als bei med20.

Edit: Für angehende Informatiker: Der Sortieraufwand (der im Median drinsteckt) ist mit mindestens n*log(n) (oft n^2) immer überproportional hoch. Vergleich: 3*log(3)=1,49 bis 3*3=9 dagegen 20*log(20)=26,02 bis 20*20=400. Für den Laien heißt das, dass die Angabe med20 schlimmstenfalls 400/9=44,44 mal mehr Rechenleistung dem System abverlangt als med3. Bei med100 z. B. wäre es schon ein Faktor 100*100/(3*3)=1111,11 gegenüber med3 ;)

Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: cwagner am 03 Februar 2019, 07:24:01
Vielen Dank, Damian, da habe ich wieder eine Menge gelernt, was mich weiterbringt. Ich habe Deinen Ratschlag folgend dann mal das kleine Vergleichs-Doif genommen und auf die Messwerte gelegt, die aktuell in größeren Abständen extreme Spitzen haben, die meine Steuerung sehr stark hochschaukeln würden.

Da sind Deine Aussagen dann grafisch sehr plakativ belegt. Sehr auffällig ist auch die zeitliche Verschiebung der eingeebneten Spitzen.

Herzliche Grüße

Christian
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 03 Februar 2019, 09:44:48
Zitat von: cwagner am 03 Februar 2019, 07:24:01
Vielen Dank, Damian, da habe ich wieder eine Menge gelernt, was mich weiterbringt. Ich habe Deinen Ratschlag folgend dann mal das kleine Vergleichs-Doif genommen und auf die Messwerte gelegt, die aktuell in größeren Abständen extreme Spitzen haben, die meine Steuerung sehr stark hochschaukeln würden.

Da sind Deine Aussagen dann grafisch sehr plakativ belegt. Sehr auffällig ist auch die zeitliche Verschiebung der eingeebneten Spitzen.

Herzliche Grüße

Christian

Ich nehme an, dass die rote Kurve die Originalwerte sind und die gelbe med20.

Das sieht mir aber nicht nach Ausreißern aus, sondern nach einem kontinuierlichen Anstieg, den du ebnen willst. In diesem Fall würde ich nicht den Median nehmen, der ja nur extreme Werte entfernt, sondern den Durchschnitt avg.

Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Loki am 04 Februar 2019, 21:21:13
Ich wollte ein bisschen mit den neuen Features herumspielen und habe mir mal folgendes DOIF gebaut:
Internals:
   DEF        ([":^measured-temp",0:diff]>0.1)
( {Log 1, "ACHTUNG! $DEVICE: temp steigt! avg: [$DEVICE:measured-temp:avg] med: [$DEVICE:measured-temp:med] diff: [$DEVICE:measured-temp:diff] inc: [$DEVICE:measured-temp:inc]"})

DOELSEIF ([":^measured-temp",0:diff]<0.1)
( {Log 1, "ACHTUNG! $DEVICE: temp sinkt! avg: [$DEVICE:measured-temp:avg] med: [$DEVICE:measured-temp:med] diff: [$DEVICE:measured-temp:diff] inc: [$DEVICE:measured-temp:inc]"})

   FUUID      5c584550-f33f-a31c-6ce0-db61cd1082209d8b
   MODEL      FHEM
   NAME       DOIF_test
   NR         902
   NTFY_ORDER 50-DOIF_test
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2019-02-04 21:17:56   Device          KUECHE.klima_Climate
     2019-02-04 21:17:56   cmd             1
     2019-02-04 21:17:56   cmd_event       KUECHE.klima_Climate
     2019-02-04 21:17:56   cmd_nr          1
     2019-02-04 21:17:05   mode            enabled
     2019-02-04 21:17:56   state           cmd_1
   Regex:
     accu:
       $DEVICE:
         accu:
           measured-temp ^$DEVICE$:^measured-temp:
       ERIK.heizung:
         accu:
           measured-temp ^ERIK.heizung$:^measured-temp:
       ERIK.heizung_Clima:
         accu:
           measured-temp ^ERIK.heizung_Clima$:^measured-temp:
       KUECHE.klima_Climate:
         accu:
           measured-temp ^KUECHE.klima_Climate$:^measured-temp:
       WOHN.SOFA.heizung:
         accu:
           measured-temp ^WOHN.SOFA.heizung$:^measured-temp:
     cond:
       :
         0:
           ":^measured-temp" :^measured-temp
         1:
           ":^measured-temp" :^measured-temp
   accu:
     $DEVICE measured-temp:
       dim        2
       value:
     ERIK.heizung measured-temp:
       dim        2
       value:
     ERIK.heizung_Clima measured-temp:
       dim        2
       value:
     KUECHE.klima_Climate measured-temp:
       dim        2
       value:
     WOHN.SOFA.heizung measured-temp:
       dim        2
       value:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::EventDoIf('',$hash,'^measured-temp',0,'[^\:]*: (.*)','','0:diff')>0.1
     1          ::EventDoIf('',$hash,'^measured-temp',0,'[^\:]*: (.*)','','0:diff')<0.1
   devices:
   do:
     0:
       0           {Log 1, "ACHTUNG! $DEVICE: temp steigt! avg: [$DEVICE:measured-temp:avg] med: [$DEVICE:measured-temp:med] diff: [$DEVICE:measured-temp:diff] inc: [$DEVICE:measured-temp:inc]"}
     1:
       0           {Log 1, "ACHTUNG! $DEVICE: temp sinkt! avg: [$DEVICE:measured-temp:avg] med: [$DEVICE:measured-temp:med] diff: [$DEVICE:measured-temp:diff] inc: [$DEVICE:measured-temp:inc]"}
     2:
   helper:
     event      measured-temp: 21.9
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   KUECHE.klima_Climate
     timerevent measured-temp: 21.9
     triggerDev KUECHE.klima_Climate
     DOIF_eventas:
       cmd_nr: 1
       cmd: 1
       cmd_event: KUECHE.klima_Climate
       state: cmd_1
     timerevents:
       desired-temp: 5.0
       humidity: 42
       measured-temp: 21.9
       T: 21.9 desired: 5.0
     timereventsState:
       desired-temp: 5.0
       humidity: 42
       measured-temp: 21.9
       state: T: 21.9 desired: 5.0
     triggerEvents:
       desired-temp: 5.0
       humidity: 42
       measured-temp: 21.9
       T: 21.9 desired: 5.0
     triggerEventsState:
       desired-temp: 5.0
       humidity: 42
       measured-temp: 21.9
       state: T: 21.9 desired: 5.0
   internals:
   itimer:
   readings:
   trigger:
   uiState:
   uiTable:
Attributes:
   DbLogExclude .*
   do         always


Im Log kommt dann Folgendes an:


2019.02.04 21:17:56 1 : ACHTUNG! KUECHE.klima_Climate: temp steigt! avg: 21.9 med: 21.9 diff: 0 inc: 0
2019-02-04 21:17:56 DOIF DOIF_test cmd_nr: 1
2019-02-04 21:17:56 DOIF DOIF_test cmd: 1
2019-02-04 21:17:56 DOIF DOIF_test cmd_event: KUECHE.klima_Climate
2019-02-04 21:17:56 DOIF DOIF_test cmd_1
2019-02-04 21:17:56 CUL_HM KUECHE.klima_Climate desired-temp: 5.0
2019-02-04 21:17:56 CUL_HM KUECHE.klima_Climate humidity: 42
2019-02-04 21:17:56 CUL_HM KUECHE.klima_Climate measured-temp: 21.9
2019-02-04 21:17:56 CUL_HM KUECHE.klima_Climate T: 21.9 desired: 5.0


"DIFF" ist eigentlich immer 0, aber trotzdem triggert das DOIF.
Was läuft da schief?
Habe ich was übersehen?
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 04 Februar 2019, 21:29:24
Die neuen Features funktionieren nur auf konkrete Readings siehe Syntax im ersten Post und nicht auf allgemeine Event-Abfragen.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Morgennebel am 06 Februar 2019, 09:42:47
Läuft bei mir prima, damit entfällt für mich das "gleitende Mittelwert" aus dem Wiki.

Ich setze es bei der Steuerung meines Fußboden-Mischers ein:


Internals:
   DEF        ([1W_HWR.FussbodenMischer_Vorlauf:temperature:med5] < 22 and [RP_FussbodenPumpe_Sw] eq "on")
   (set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]+1)})      ## Cmd 1: Schnell oeffnen
DOELSEIF ([1W_HWR.FussbodenMischer_Vorlauf:temperature:med5] < 26 and [RP_FussbodenPumpe_Sw] eq "on")
   (set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]+1)})      ## Cmd 2: Ganz langsam oeffnen
DOELSEIF ([1W_HWR.FussbodenMischer_Vorlauf:temperature:med5] < 30 and [RP_FussbodenPumpe_Sw] eq "on")
   (set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]+1)})      ## Cmd 3: Noch ein bisschen
DOELSEIF ([1W_HWR.FussbodenMischer_Vorlauf:temperature:med5] < 33 and [RP_FussbodenPumpe_Sw] eq "on")
   (set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]+1)})      ## Cmd 4: Noch ein bisschen
DOELSEIF ([1W_HWR.FussbodenMischer_Vorlauf:temperature:med5] > 40)
   (set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]-1)})      ## Cmd 5: Viel zu heiss, schnell zu
DOELSEIF ([1W_HWR.FussbodenMischer_Vorlauf:temperature:med5] > 39)
   (set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]-1)})      ## Cmd 6: Viel zu heiss, schnell zu
DOELSEIF ([1W_HWR.FussbodenMischer_Vorlauf:temperature:med5] > 38)
   (set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]-1)})      ## Cmd 7: Zu heiss, schnell zu
DOELSEIF ([03:50])
   (set SM_Fussbodenmischer calibrate, set SM_Fussbodenmischer reset)  ## Cmd 8: Calibrieren fuer Tagprogramm
DOELSEIF ([04:00])
   (set SM_Fussbodenmischer 40)                                        ## Cmd 9: Headstart, Ende der Nachtabsenkung
   FUUID      5c59701c-f33f-9a7b-8505-03f23afcd7562e8f
   MODEL      FHEM
   NAME       DI_MischerCommands
   NR         69
   NTFY_ORDER 50-DI_MischerCommands
   STATE      cmd_7
   TYPE       DOIF
   READINGS:
     2019-02-06 09:39:45   Device          1W_HWR.FussbodenMischer_Vorlauf
     2019-02-06 08:44:46   cmd             7
     2019-02-06 08:44:46   cmd_event       1W_HWR.FussbodenMischer_Vorlauf
     2019-02-06 08:44:46   cmd_nr          7
     2019-02-06 09:39:45   e_1W_HWR.FussbodenMischer_Vorlauf_temperature 36.87
     2019-02-06 09:39:45   e_RP_FussbodenPumpe_Sw_STATE on
     2019-02-05 16:53:13   mode            enabled
     2019-02-06 08:44:46   state           cmd_7
     2019-02-06 03:50:00   timer_01_c08    07.02.2019 03:50:00
     2019-02-06 04:00:00   timer_02_c09    07.02.2019 04:00:00
     2019-02-06 08:44:46   wait_timer      no timer
   Regex:
     accu:
       1W_HWR.FussbodenMischer_Vorlauf:
         accu:
           temperature ^1W_HWR.FussbodenMischer_Vorlauf$:^temperature:
   accu:
     1W_HWR.FussbodenMischer_Vorlauf temperature:
       dim        5
       value:
         36.81
         36.87
         36.87
         36.93
         36.87
   attr:
     cmdState:
     cmdpause:
       60
       120
       360
       480
       60
       180
       300
       0
       0
     wait:
       0:
         180
       1:
         240
       2:
         360
       3:
         600
       4:
         90
       5:
         180
       6:
         420
       7:
         0
       8:
         0
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'1W_HWR.FussbodenMischer_Vorlauf','temperature','','med5') < 22 and ::InternalDoIf($hash,'RP_FussbodenPumpe_Sw','STATE') eq "on"
     1          ::ReadingValDoIf($hash,'1W_HWR.FussbodenMischer_Vorlauf','temperature','','med5') < 26 and ::InternalDoIf($hash,'RP_FussbodenPumpe_Sw','STATE') eq "on"
     2          ::ReadingValDoIf($hash,'1W_HWR.FussbodenMischer_Vorlauf','temperature','','med5') < 30 and ::InternalDoIf($hash,'RP_FussbodenPumpe_Sw','STATE') eq "on"
     3          ::ReadingValDoIf($hash,'1W_HWR.FussbodenMischer_Vorlauf','temperature','','med5') < 33 and ::InternalDoIf($hash,'RP_FussbodenPumpe_Sw','STATE') eq "on"
     4          ::ReadingValDoIf($hash,'1W_HWR.FussbodenMischer_Vorlauf','temperature','','med5') > 40
     5          ::ReadingValDoIf($hash,'1W_HWR.FussbodenMischer_Vorlauf','temperature','','med5') > 39
     6          ::ReadingValDoIf($hash,'1W_HWR.FussbodenMischer_Vorlauf','temperature','','med5') > 38
     7          ::DOIF_time_once($hash,0,$wday)
     8          ::DOIF_time_once($hash,1,$wday)
   days:
   devices:
     0           1W_HWR.FussbodenMischer_Vorlauf RP_FussbodenPumpe_Sw
     1           1W_HWR.FussbodenMischer_Vorlauf RP_FussbodenPumpe_Sw
     2           1W_HWR.FussbodenMischer_Vorlauf RP_FussbodenPumpe_Sw
     3           1W_HWR.FussbodenMischer_Vorlauf RP_FussbodenPumpe_Sw
     4           1W_HWR.FussbodenMischer_Vorlauf
     5           1W_HWR.FussbodenMischer_Vorlauf
     6           1W_HWR.FussbodenMischer_Vorlauf
     all         1W_HWR.FussbodenMischer_Vorlauf RP_FussbodenPumpe_Sw
   do:
     0:
       0          set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]+1)}
     1:
       0          set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]+1)}
     2:
       0          set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]+1)}
     3:
       0          set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]+1)}
     4:
       0          set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]-1)}
     5:
       0          set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]-1)}
     6:
       0          set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]-1)}
     7:
       0          set SM_Fussbodenmischer calibrate, set SM_Fussbodenmischer reset
     8:
       0          set SM_Fussbodenmischer 40
     9:
   helper:
     event      temperature: 36.87
     globalinit 1
     last_timer 2
     sleepdevice 1W_HWR.FussbodenMischer_Vorlauf
     sleepsubtimer -1
     sleeptimer -1
     timerdev   1W_HWR.FussbodenMischer_Vorlauf
     timerevent temperature: 38.12
     triggerDev 1W_HWR.FussbodenMischer_Vorlauf
     DOIF_eventas:
       cmd_nr: 7
       cmd: 7
       cmd_event: 1W_HWR.FussbodenMischer_Vorlauf
       state: cmd_7
     timerevents:
       temperature: 38.12
     timereventsState:
       temperature: 38.12
     triggerEvents:
       temperature: 36.87
     triggerEventsState:
       temperature: 36.87
   internals:
     0           RP_FussbodenPumpe_Sw:STATE
     1           RP_FussbodenPumpe_Sw:STATE
     2           RP_FussbodenPumpe_Sw:STATE
     3           RP_FussbodenPumpe_Sw:STATE
     all         RP_FussbodenPumpe_Sw:STATE
   interval:
   intervalfunc:
   itimer:
   localtime:
     0          1549507800
     1          1549508400
   readings:
     0           1W_HWR.FussbodenMischer_Vorlauf:temperature
     1           1W_HWR.FussbodenMischer_Vorlauf:temperature
     2           1W_HWR.FussbodenMischer_Vorlauf:temperature
     3           1W_HWR.FussbodenMischer_Vorlauf:temperature
     4           1W_HWR.FussbodenMischer_Vorlauf:temperature
     5           1W_HWR.FussbodenMischer_Vorlauf:temperature
     6           1W_HWR.FussbodenMischer_Vorlauf:temperature
     all         1W_HWR.FussbodenMischer_Vorlauf:temperature
   realtime:
     0          03:50:00
     1          04:00:00
   time:
     0          03:50:00
     1          04:00:00
   timeCond:
     0          7
     1          8
   timer:
     0          0
     1          0
   timers:
     7           0
     8           1
   trigger:
   triggertime:
     1549507800:
       localtime  1549507800
       hash:
     1549508400:
       localtime  1549508400
       hash:
   uiState:
   uiTable:
Attributes:
   cmdpause   60:120:360:480:60:180:300:0:0
   do         always
   room       R_HWR,SYS_Events
   verbose    0
   wait       180:240:360:600:90:180:420:0:0


und würde als einzigen Wunsch äußern, daß ich gerne den "Funktionswert" als zusätzliches Reading hätte. Also in meinem Fall den

1W_HWR.FussbodenMischer_Vorlauf:temperature:med5

Wert als Reading, um diesen mit den "normalen" Wert besser vergleichen und zu visualisieren.

Danke, -MN
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 06 Februar 2019, 11:23:34
Zitat von: Morgennebel am 06 Februar 2019, 09:42:47
Läuft bei mir prima, damit entfällt für mich das "gleitende Mittelwert" aus dem Wiki.

Ich setze es bei der Steuerung meines Fußboden-Mischers ein:


Internals:
   DEF        ([1W_HWR.FussbodenMischer_Vorlauf:temperature:med5] < 22 and [RP_FussbodenPumpe_Sw] eq "on")
   (set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]+1)})      ## Cmd 1: Schnell oeffnen
DOELSEIF ([1W_HWR.FussbodenMischer_Vorlauf:temperature:med5] < 26 and [RP_FussbodenPumpe_Sw] eq "on")
   (set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]+1)})      ## Cmd 2: Ganz langsam oeffnen
DOELSEIF ([1W_HWR.FussbodenMischer_Vorlauf:temperature:med5] < 30 and [RP_FussbodenPumpe_Sw] eq "on")
   (set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]+1)})      ## Cmd 3: Noch ein bisschen
DOELSEIF ([1W_HWR.FussbodenMischer_Vorlauf:temperature:med5] < 33 and [RP_FussbodenPumpe_Sw] eq "on")
   (set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]+1)})      ## Cmd 4: Noch ein bisschen
DOELSEIF ([1W_HWR.FussbodenMischer_Vorlauf:temperature:med5] > 40)
   (set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]-1)})      ## Cmd 5: Viel zu heiss, schnell zu
DOELSEIF ([1W_HWR.FussbodenMischer_Vorlauf:temperature:med5] > 39)
   (set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]-1)})      ## Cmd 6: Viel zu heiss, schnell zu
DOELSEIF ([1W_HWR.FussbodenMischer_Vorlauf:temperature:med5] > 38)
   (set SM_Fussbodenmischer {([SM_Fussbodenmischer:position]-1)})      ## Cmd 7: Zu heiss, schnell zu
DOELSEIF ([03:50])
   (set SM_Fussbodenmischer calibrate, set SM_Fussbodenmischer reset)  ## Cmd 8: Calibrieren fuer Tagprogramm
DOELSEIF ([04:00])
...


und würde als einzigen Wunsch äußern, daß ich gerne den "Funktionswert" als zusätzliches Reading hätte. Also in meinem Fall den

1W_HWR.FussbodenMischer_Vorlauf:temperature:med5

Wert als Reading, um diesen mit den "normalen" Wert besser vergleichen und zu visualisieren.

Danke, -MN

Die Vorgehensweise ist in diesem Fall eine Andere.

Du definierst für [1W_HWR.FussbodenMischer_Vorlauf:temperature:med5] ein DOIF_Reading (so wie im ersten Post) und benutzt nur noch diesen im DOIF.

Damit ist der bereinigte Wert sichtbar, die Angaben in der Bedingung sind kürzer und der hohe Rechenaufwand für den Median wird nur einmal, statt mehrfach durchgeführt.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Morgennebel am 06 Februar 2019, 11:32:42
Danke, werde ich gleich ändern...

Ciao, -MN
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Morgennebel am 07 Februar 2019, 22:29:41
Hi Damian,


ich habe eine dbLog-Anweisung der Form:

./db.conf .*:(temperature|desired-temp|measured-temp|humidity|ValvePosition|dewpoint|on|off|position|cond|hmTraffic|motion|motionCount|motionDuration|noMotion|energy|energyCalc|energyOffset|power|gasCnt|gasCntCalc|gasPower|Diesel|SuperE5|AVG\sT|FussbodenMischer_VorlaufMED).*

d.h. beliebige Geräte, aber nur die angegebenen Readings. Mich interessiert das FussbodenMischer_VorlaufMED-Reading ganz am Ende, daß ein med10-DOIF-Reading ist.

attr DI_MischerCommands DOIF_Readings FussbodenMischer_VorlaufMED:[1W_HWR.FussbodenMischer_Vorlauf:temperature:med10]


Leidert triggert das dbLog nicht:

MariaDB [DB_FHEMLOG]> select * from history where DEVICE="%MED%";
Empty set (0.00 sec)



Unterstützen die neuen Funktionen überhaupt das Loggen mit dbLog (d.h. liegt der Fehler eher irgendwo anders bei mir)?

Danke, -MN
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 07 Februar 2019, 23:33:42
DOIF_Readings triggern nur intern und produzieren keine Events nach außen.

Wenn das Reading Events produzieren soll, so bietet sich der Perl-Modus an:

define bereinigte_Readings DOIF {set_Reading("FussbodenMischer_VorlaufMED",[1W_HWR.FussbodenMischer_Vorlauf:temperature:med10],1}

Dieser ist allerdings nicht mit dem FHEM-Modus kombinierbar. Natürlich kann man statt über DOIF_Readings auf  [bereinigte_Readings:FussbodenMischer_VorlaufMED] im anderen DOIF darauf zugreifen und es auch loggen.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 08 Februar 2019, 22:54:48
Bedingt durch die neuen Features steigt offenbar der Bedarf nach Events (zwecks Protokollierung) bei DOIF_Readings.

Ich habe ein neues Attribut definiert namens event_Readings. Dieses hat die gleiche Syntax wie DOIF_Readings. Der Unterschied besteht darin, dass event_Readings im Gegensatz zu DOIF_Readings jedes mal Events produziert. event_Readings kann aber auch das eigene DOIF-Device triggern, kümmert sich jedoch im Gegensatz zu DOIF_Readings nicht um den Zustand der Readings  (DOIF_Readings triggert nur, wenn sich der Zustand des definierten Readings ändert). Das kann bei Bedarf bei event_Readings über das FHEM-Attribut event-on-change-reading angepasst werden.

Bsp.

define di DOIF ([$SELF:tempMed] < 0) (set frost on)

attr di event_Readings tempMed:[ausssen:temperature:med3]



Die bereinigte Temperatur in di:tempMed  lässt sich hierbei loggen.

PS: Sind Events des definierten Readings nicht erforderlich und die Triggerung des eigenen DOIF-Moduls nur bei Änderung interessant, dann sollte man zum Attribut DOIF_Readings greifen, da es durch die interne Triggerung des Moduls weniger das System belastet als event_Readings.


Version 0.9 im ersten Post.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Morgennebel am 10 Februar 2019, 13:26:36
Dankeschön! Super Feature!

Läßt sich damit auch das nicht mehr gepflegte https://wiki.fhem.de/wiki/VALVES VALVES-Modul ersetzen?

Ein DOIF, daß über alle Heizungen den Durchschnitt der Ventilöffnungen ermittelt?

Als über die Heizungsthermostaten:

HM_EG.ARBEITZ_HeizungLinks_Clima
HM_EG.ESSZMMR_HeizungLinks_Clima
HM_EG.ESSZMMR_HeizungMitte_Clima
HM_EG.ESSZMMR_HeizungRechts_Clima
HM_EG.WINTERG_Heizung_Clima
...

den Durchschnitt des Readings ValvePosition?

Danke, -MN
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 10 Februar 2019, 17:10:38
Die neuen Features funktionieren nur auf konkrete Readings. Jedes Reading welches man anpassen will, muss einmal angegeben werden.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 10 Februar 2019, 17:59:58
Neue Version wurde eingecheckt.

Beschreibung in der Commandref:

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

und

https://fhem.de/commandref_DE.html#DOIF_event_Readings
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Moeti am 12 Februar 2019, 19:13:35
Hallo Damian!
Die neuen Features sind toll!
Danke für deine Arbeit!

lG
Michael
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Peter aus Calw am 24 März 2019, 21:41:47
Hallo guten Abend zusammen,
nachdem ich im Log von meinem Aussen-Sensor festgestellt habe, dass der "humidity" Wert sich bei Regen
z.B. innerhalb ca. 5 Minuten von 61 auf 65 % erhöht, möchte ich mit diesem DOIF :

define Regen DOIF ([TH_Aussentemp:humidity:inc4] > 0.04 and [FS_Bad:state] eq "open") (set regen Fenster_zu) DOELSE (set regen Fenster_ok)

bei einem geöffneten Dachfenster eine Meldung an mein FTUI-Tablet senden.
Die neue Möglichkeit in DOIF sollte das mit diesem DOIF ja ermöglichen, mir ist nur nicht klar wie ich die Zeit bestimme,
in der die Änderung erfolgen muss ?
Würde mich über einen Tipp freuen.
LG Peter aus Calw 
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 24 März 2019, 21:58:28
Zitat von: Peter aus Calw am 24 März 2019, 21:41:47
Hallo guten Abend zusammen,
nachdem ich im Log von meinem Aussen-Sensor festgestellt habe, dass der "humidity" Wert sich bei Regen
z.B. innerhalb ca. 5 Minuten von 61 auf 65 % erhöht, möchte ich mit diesem DOIF :

define Regen DOIF ([TH_Aussentemp:humidity:inc4] > 0.04 and [FS_Bad:state] eq "open") (set regen Fenster_zu) DOELSE (set regen Fenster_ok)

bei einem geöffneten Dachfenster eine Meldung an mein FTUI-Tablet senden.
Die neue Möglichkeit in DOIF sollte das mit diesem DOIF ja ermöglichen, mir ist nur nicht klar wie ich die Zeit bestimme,
in der die Änderung erfolgen muss ?
Würde mich über einen Tipp freuen.
LG Peter aus Calw

Die Zeitspanne ergibt sich aus dem zeitlichen Abstand der gesendeten Events des Devices. Konkret, wenn TH_Aussentemp:humidity z. B. alle 6 Minuten sendet, dann liegt das viertletzte vor 3 x 6 = 18 Minuten
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Peter aus Calw am 24 März 2019, 22:17:41
Hallo Damian,
danke für Deine schnelle Antwort.
Das ist mein Problem, normal sendet der Sensor im Abstand von 20-60(oder mehr) Minuten.
Bei Regen ändert sich der Wert in wenigen Minuten und genau diese in kurzer Zeit anfallenden Werte-Änderungen
soll das DOIF auswerten.
Wahrscheinlich kapiere ich den Ablauf der auszuwertenden Werte in Bezug zu "inc4" nicht ?
LG Peter 
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 24 März 2019, 22:36:24
Zitat von: Peter aus Calw am 24 März 2019, 22:17:41
Hallo Damian,
danke für Deine schnelle Antwort.
Das ist mein Problem, normal sendet der Sensor im Abstand von 20-60(oder mehr) Minuten.
Bei Regen ändert sich der Wert in wenigen Minuten und genau diese in kurzer Zeit anfallenden Werte-Änderungen
soll das DOIF auswerten.
Wahrscheinlich kapiere ich den Ablauf der auszuwertenden Werte in Bezug zu "inc4" nicht ?
LG Peter

Bei diesen Features findet seitens DOIF keine Zeitmessung statt. Du kannst aber beim TH_Aussentemp das Attribut event-min-interval setzen, damit die Events im gleichmäßigen Abstand kommen.

Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Peter aus Calw am 24 März 2019, 22:59:58
Hallo Damian,
Deinen Vorschlag werde ich einrichten und morgen kann das bei der erwarteten heftigen Wetteränderung gleich getestet werden.
Besten Dank für Deine nun schon fast unendliche Hilfe und das für richtige User unerreichte
DOIF :) :) :)
Beste Grüße von Peter
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 25 März 2019, 10:46:04
Man kann erst mal mit diff experimentieren, ich bin mir nicht sicher, ob ein Anteil mit inc bei Feuchtigkeit tatsächlich besser ist.

Bei einem event-min-interval von einer Minute wäre :diff16 eine Differenz zwischen dem aktuellen Wert und dem Wert vor 15 Minuten (16 Werte zurück in die Vergangenheit).
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Peter aus Calw am 25 März 2019, 17:58:30
ok Damian, dann werde ich das mal versuchen, heute hat es mit inc3 trotz diesem Log nicht funktioniert :

2019-03-25_13:41:40 TH_Aussentemp humidity: 45
2019-03-25_13:43:56 TH_Aussentemp humidity: 48
2019-03-25_13:45:58 TH_Aussentemp humidity: 48
2019-03-25_13:48:49 TH_Aussentemp humidity: 51
2019-03-25_13:51:26 TH_Aussentemp humidity: 52

es hat exakt in diesem Zeitabschnitt ziemlich ergiebig geregnet, wurde aber nicht ausgewertet.
Wäre dann dieser Versuch so richtig ?

([TH_humidity:state:diff16] > 4) (set regen F_zu) DOELSE (set regen F_ok)

Gruß Peter
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 25 März 2019, 18:18:57
Zitat von: Peter aus Calw am 25 März 2019, 17:58:30
ok Damian, dann werde ich das mal versuchen, heute hat es mit inc3 trotz diesem Log nicht funktioniert :

2019-03-25_13:41:40 TH_Aussentemp humidity: 45
2019-03-25_13:43:56 TH_Aussentemp humidity: 48
2019-03-25_13:45:58 TH_Aussentemp humidity: 48
2019-03-25_13:48:49 TH_Aussentemp humidity: 51
2019-03-25_13:51:26 TH_Aussentemp humidity: 52

es hat exakt in diesem Zeitabschnitt ziemlich ergiebig geregnet, wurde aber nicht ausgewertet.
Wäre dann dieser Versuch so richtig ?

([TH_humidity:state:diff16] > 4) (set regen F_zu) DOELSE (set regen F_ok)

Gruß Peter

Bei inc5  (fünf Werte auseinander) wäre: (52-45)/45=0,155 > 0,1 hätte also funktioniert.

Die Zeitintervalle sind hier größer als eine Minute, hier hätte schon ([TH_humidity:state:diff5] > 5) zugeschlagen, da 52-45=7 > 5

diff16 würde hier schon eine Zeitspanne von über einer halben Stunde bedeutet.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Peter aus Calw am 25 März 2019, 18:39:10
Dank Damian,
habe jetzt die Variante
diff5 >5
eingestellt und werde berichten.
Gruß Peter
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 25 März 2019, 18:57:01
Ich habe mir den heutigen Tag bei uns genauer angeschaut, es ist ein typischer Aprilwettertag mit kurzen Regenfällen. Ein steiler Anstieg von über 5 % in 15 Minuten lässt vermutlich auf Regen schließen (siehe Anhang).

Edit:

Wenn in der gleichen Zeitspanne (hier 15 Minuten) auch noch die Temperatur um 0,5 Grad fällt (and [Sensor:temperature:diff5] < -0.5), wird die Annahme zusätzlich bekräftigt (siehe Anhang). Wie es sich im Sommer mit dem Wetterumschwung verhält, müsste man zunächst beobachten und auswerten. Man könnte sogar nur mit einem Temperatur- und Feuchtigkeitssensor vermutlich ein Gewitter bzw. Unwetter erkennen (hier dürften die Anstiege/Abfälle entsprechend höher ausfallen). Die Wetterexperten werden selbstverständlich noch andere Sensoren zur Wetterauswertung installiert haben ;)


Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Peter aus Calw am 25 März 2019, 19:25:29
ganz so comfortabel ist mein Bild nicht, aber man kann auch die Ausschläge erkennen.
Da man beim älterwerden nicht mehr an alles denkt (bei 3 Dachfenstern) wäre solch eine
Erinnerungshilfe schon praktisch - also optische und akustische Anzeige im FTUI.
Gruß Peter

Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 25 März 2019, 19:36:28
ja, ich habe mir gerade noch weitere Plots bei mir angeschaut und konnte natürlich auch den Helligkeitsabfall durch die Regenwolken als zusätzliches Kriterium ausfindig machen, siehe Anhang. Es ist ein umgebauter Feuchtesensor, daher steht da noch humidity, obwohl es Helligkeit ist. Dass man auch die Plots der Photovoltaikanlage als zusätzliches Kriterium heranziehen kann - ist klar. All das lässt sich mit einer simplen diff-Angabe und and-Verknüpfung als Warnmeldung beim DOIF leicht umsetzen :)
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Peter aus Calw am 25 März 2019, 20:07:09
zu der Auswertung der Helligkeitseinschränkung würde ich eher nicht tendieren da ja auch Wolken ohne Inhalt
vorüberziehen.
Die doch sehr zuverlässige und auch recht schnelle Änderung der Luftfeuchtewerte des HM-WDS10-TH-O
haben mich schon sehr überzeugt und wenn das nun mit einer der beiden Varianten "diff" bzw. "inc" funktioniert,
werde ich sehr happy sein.
Bin jetzt gerade auf der Suche wie die Meldung auch an unsere beiden Smartphons weitergebe wenn wir
demnächst (Anfang Mai) im angrenzenden Tochterhäusle unseren Enkel betreuen dürfen. 
Gruß Peter
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 25 März 2019, 20:15:11
Zitat von: Peter aus Calw am 25 März 2019, 20:07:09
zu der Auswertung der Helligkeitseinschränkung würde ich eher nicht tendieren da ja auch Wolken ohne Inhalt
vorüberziehen.

Klar, aber wenn Feuchtezunahme (als Regenanzeichen), dann muss Helligkeit in dieser Zeit abnehmen: helligkeit:diff2 < 0 oder deine Wattzahl vom Dach abnehmen, daher nur als zusätzlichen UND-Verknüpfung.

Zitat
Die doch sehr zuverlässige und auch recht schnelle Änderung der Luftfeuchtewerte des HM-WDS10-TH-O
haben mich schon sehr überzeugt und wenn das nun mit einer der beiden Varianten "diff" bzw. "inc" funktioniert,
werde ich sehr happy sein.
Bin jetzt gerade auf der Suche wie die Meldung auch an unsere beiden Smartphons weitergebe wenn wir
demnächst (Anfang Mai) im angrenzenden Tochterhäusle unseren Enkel betreuen dürfen. 
Gruß Peter

Ich habe bei mir pushbullet installiert, klappt sehr gut und kostet nichts.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Peter aus Calw am 26 März 2019, 00:06:27
Hallo Damian,
habe die letzten Stunden versucht mich mit pushbullet bekannt zu machen.
Das ist für mich schon etwas anstrengend, eine APP auf dem Smartphon ist zwar installiert - auch auf meinem
WIN 10 PC ist nun eine, in pushbullet.com bin ich mit meinem google-Konto auch bekannt,aber mit den notwendigen
API-Key wird es schon beschwerlich.
Mache aber morgen Abend wieder weiter.
Gruß und gute Nacht von Peter
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Peter aus Calw am 26 März 2019, 19:55:57
Hallo Damian,
habe es geschafft  :D
kann von FHEM Nachrichten an Smartphon und WIN 10 PC senden (gleichzeitig oder einzeln)
Danke für den Tipp !  :D :D :D
Gruß Peter
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 26 März 2019, 19:59:22
Zitat von: Peter aus Calw am 26 März 2019, 19:55:57
Hallo Damian,
habe es geschafft  :D
kann von FHEM Nachrichten an Smartphon und WIN 10 PC senden (gleichzeitig oder einzeln)
Danke für den Tipp !  :D :D :D
Gruß Peter

ja, das freut mich. Jetzt muss nur noch Regen kommen, damit du deine Warnung auch testen kannst :)
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: kotaro am 23 April 2019, 12:11:03
Hey,

ich hab ja gelesen, das die avg funktionen oder so nur auf spezielle Werte gesetzt werden.
Wäre es dann für allgemeinere Dinge ein DOIF_Readings so einzusetzen, das die Werte für die Readings erstellt werden?

attr bla DOIF_Readings Duenger_DEVICE:[$DEVICE:Fertility:med3]

und eine Verständnissfrage, was müsste ich verwenden, damit ich herausfinde, ob wie bei wait z.B. 3x der gleiche Wert eintrifft? unabhängig von der Pull-Intervallszeit? also mein einen Sensor frag ich 5-Minütlich ab, den anderen nur alle 20 Minuten?

Vielen dank für die Ganzen Funkionen im DOIF..
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 23 April 2019, 13:31:44
Zitat von: kotaro am 23 April 2019, 12:11:03
Hey,

ich hab ja gelesen, das die avg funktionen oder so nur auf spezielle Werte gesetzt werden.
Wäre es dann für allgemeinere Dinge ein DOIF_Readings so einzusetzen, das die Werte für die Readings erstellt werden?

attr bla DOIF_Readings Duenger_DEVICE:[$DEVICE:Fertility:med3]

und eine Verständnissfrage, was müsste ich verwenden, damit ich herausfinde, ob wie bei wait z.B. 3x der gleiche Wert eintrifft? unabhängig von der Pull-Intervallszeit? also mein einen Sensor frag ich 5-Minütlich ab, den anderen nur alle 20 Minuten?

Vielen dank für die Ganzen Funkionen im DOIF..

1) Das Triggern auf verschiedene Devices über $DEVICE dürfte nicht funktionieren. Die neuen Funktionen arbeiten mit konkreten Readings und damit auch mit konkreten Devices.

2) Man könnte mit Hilfe von Instanzvariablen im Perl-Mode definieren:

DOIF
init {$_last=[?<mydevice>:<myreading>];$_count=0;}
{if ([<mydevice>:<myreading>] == $_last) {
    $_count++;
    if ($_count == 3) {
      set_fhem"....";
      $_count =0;
    }
  } else {
       $_count=0;
  }
  $_last=[<mydevice>:<myreading>]
}

Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: yersinia am 21 Mai 2020, 14:32:07
Ich kram diesen Thread heraus - wegen einer Frage bezüglich der :diff Funktion mit Zeiten. Ich habe die suche bemüht, aber nichts finden können. -.- (wenn es schon einen Thread dazu gibt bitte einen Link zur Verfügung stellen)

Folgendes habe ich vor: Abends wird ein Badfenster zum Lüften geöffnet und gern vergessen. Um dies gerade im Winter zu verhindern sende ich eine Nachricht an eine Enigma2 Box. Das funktioniert. Nun würde ich das gern smarter machen, da es gerade im Herbst und Frühling durchaus noch schöne Tage gibt bei denen das Fenster länger aufbleiben kann. Dann drückt man die Nachricht weg - und aus den Augen, aus dem Sinn. ::)
Ich möchte nun, dass die Nachricht gesendet wird wenn entweder eine Differenz oder die maximale Zeit erreicht wird, nachdem das Fenster geöffnet worden ist. Mein DOIF sieht derzeit so aus:
(([fenster:state] eq "open")
and ([enigma2:state] eq "on"))
(set enigma2 msg info 5 "Fenster ist noch auf!")

Mit wait 720 und do resetwait.

Mit :diff hab ich mir das so vorgestellt:
(([fenster:state] eq "open")
and ([sensor:temperature:diff3] > 5)
and ([enigma2:state] eq "on"))
(set enigma2 msg info 5 "Fenster ist noch auf!")


Meines Verständnisses nach wirkt sich wait "nur" auf die Wartezeit, bis der Befehl (cmd_1) ausgeführt wird, aus - verzögerte Ausführung also.
Hätte demnach also eine verzögernde Wirkung auf die Ausführung nachdem die Differenz überschritten ist. Allerdings möchte ich die vergangene Zeit mit als weitere Bedingung einbeziehen - mit pseudo code ungefähr so:
(([fenster:state] eq "open")
and (([sensor:temperature:diff3] > 5) or (time_difference > 10))
and ([enigma2:state] eq "on"))
(set enigma2 msg info 5 "Fenster ist noch auf!")


Über einen Denkanstoß wäre ich dankbar.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 21 Mai 2020, 19:28:59
Ich hatte da mal etwas Ähnliches gebastelt, vielleicht kannst du es für deinen Anwendungsfall gebrauchen:

defmod di_Fenster_Bad_Ansage DOIF subs {\
  sub send_alexa {\
    my ($dev,$text,$volume)=@_;;\
$volume=20 if (!defined ($volume));;\
    fhem("attr $dev speak_volume $volume");;\
    fhem("set $dev speak $text");;\
  }\
}\
\
{if ([$SELF:increase]) {send_alexa("echo_Bad","Bitte Fenster öffnen");;set_State("Ansage Öffnen")}}\
{if ([BadFenster:state] eq "open") {set_Reading ("temp",ReadingsVal("TH_Bad_HM","measured-temp",0));;set_State("Fenster geöffnet")}}\
{if ([$SELF:cold]) {send_alexa("echo_Bad","Bitte Fenster schließen");;set_State("Ansage Schließen")}}
attr di_Fenster_Bad_Ansage DOIF_Readings increase: [?BadFenster] eq "closed" and [TH_Bad_HM:humidity:diff] > 5,\
cold:[?BadFenster] eq "open" and ([$SELF:temp] - [TH_Bad_HM:measured-temp]) > 0.5
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: kotaro am 22 Mai 2020, 10:14:10
Hi,

soweit ich das wait verstanden habe, und es auch im Commandref steht, wird nach einem Wait der Timer abgebrochen, wenn ein anderer Fall wahr wird.  --> Hier wäre eine Kontrolle, ob ein DOELSE ausgeführt wird (ohne Befehle - Sichtbar an cmd_2) und dadurch nicht ausgeführt wird.

Zitat von: yersinia am 21 Mai 2020, 14:32:07

Mit :diff hab ich mir das so vorgestellt:
(([fenster:state] eq "open")
and ([sensor:temperature:diff3] > 5)
and ([enigma2:state] eq "on"))
(set enigma2 msg info 5 "Fenster ist noch auf!")


Meines Verständnisses nach wirkt sich wait "nur" auf die Wartezeit, bis der Befehl (cmd_1) ausgeführt wird, aus - verzögerte Ausführung also.
Hätte demnach also eine verzögernde Wirkung auf die Ausführung nachdem die Differenz überschritten ist. Allerdings möchte ich die vergangene Zeit mit als weitere Bedingung einbeziehen - mit pseudo code ungefähr so:
(([fenster:state] eq "open")
and (([sensor:temperature:diff3] > 5) or (time_difference > 10))
and ([enigma2:state] eq "on"))
Letzte Änderung: Heute um 10:17:28
+ Erweiterte Optionen...
Shortcuts: mit Alt+S Beitrag schreiben oder Alt+P für Vorschau




(set enigma2 msg info 5 "Fenster ist noch auf!")


Über einen Denkanstoß wäre ich dankbar.


Ich würde einfach ein anderen DOELSEIF fall einfügen

([?fenster:state] eq "open"
and [?enigma2:state] eq "on"
        and ([sensor:temperature:diff3] > 5 )
(set enigma2 msg info 5 "Fenster ist noch auf und ein Temperaturabfall >5°C")
(DOELSEIF[fenster:state] eq "open"
        and [?enigma2:state] eq "on")
        (set enigma2 msg info 5 "Fenster ist noch auf!")

attr xxx wait 10:720




Achso, ich weiß nicht, warum du so viele Klammern eingefügt hast, das ist eher notwendig um eigene Prioritäten mit or festzulegen.
Hier nochmal ein Hinweis, um es zu lesen https://wiki.fhem.de/wiki/DOIF/Operatorenrangfolge (https://wiki.fhem.de/wiki/DOIF/Operatorenrangfolge)

Hoffe es klappt so, und ich es richtig verstanden habe

Edit: hatte nochmal die Reihenfolge geändert und ? vor einigen Werten gesetzt, da diese doch kein Trigger darstellen sollen, das DOIF zu triggern.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: yersinia am 22 Mai 2020, 12:38:26
Danke kotaro, das hat geholfen. Ich habe das DOIF umgebaut und werde Testen. :)

Zitat von: kotaro am 22 Mai 2020, 10:14:10Achso, ich weiß nicht, warum du so viele Klammern eingefügt hast, das ist eher notwendig um eigene Prioritäten mit or festzulegen.
Hier nochmal ein Hinweis, um es zu lesen https://wiki.fhem.de/wiki/DOIF/Operatorenrangfolge (https://wiki.fhem.de/wiki/DOIF/Operatorenrangfolge)
Das nutze ich bezüglich der Übersichtlichkeit - insbesondere das Synthax-Highlighting. Bei der UND-Verknüpfung benötige ich das eigtl nicht, stimmt.

Danke auch für den Hinweis mit dem ?, das wusste ich noch nicht. :)
Titel: Antw:Neues Feature: Glättung von Werten
Beitrag von: Damian am 04 Januar 2021, 14:39:06
Zitat von: Christoph Morrison am 16 Januar 2019, 18:08:54
Hallo Damian,

ohne diesen Thread vorher gelesen zu haben, hatte ich mir just heute DOIF um den Median erweitert, einen Patch findest hier (https://bitbucket.org/christoph-morrison/fhem-patches/raw/master/FHEM/98_DOIF.pm/ahphei9Mu7.patch).

Gruß
Christoph

Der Median bei Aggregationsfunktionen ist jetzt in der aktuellen DOIF-Version drin: siehe https://fhem.de/commandref_DE.html#DOIF_aggregation
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Christoph Morrison am 04 Januar 2021, 20:10:09
Danke dir :)
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: neyzen am 08 Februar 2021, 00:45:28
Hallo,

ich bekomme mit folgender Def einen Fehler im event_Readings

avg_Cpu_Prozent:[sysmon:Cpu_Prozent:avg2],\
avg_Cpu_Temperatur:[sysmon:Cpu_Temperatur:avg2]


Fehler error in event_Readings \ avg_Cpu_Temperatur:[sysmon:Cpu_Temperatur:avg2], wrong reading specification for: \ avg_Cpu_Temperatur

Vermutlich passt die ,/ nicht.
Mit einem , schluckt er es aber der zweite Wert wird nicht gemittelt. Hier wird er ohne zu mitteln nur der letzte Wert übernommen. Der erste Wert wird aber gemittelt. Was mach ich den falsch?
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 08 Februar 2021, 08:50:32
Zitat von: neyzen am 08 Februar 2021, 00:45:28
Hallo,

ich bekomme mit folgender Def einen Fehler im event_Readings

avg_Cpu_Prozent:[sysmon:Cpu_Prozent:avg2],\
avg_Cpu_Temperatur:[sysmon:Cpu_Temperatur:avg2]


Fehler error in event_Readings \ avg_Cpu_Temperatur:[sysmon:Cpu_Temperatur:avg2], wrong reading specification for: \ avg_Cpu_Temperatur

Vermutlich passt die ,/ nicht.
Mit einem , schluckt er es aber der zweite Wert wird nicht gemittelt. Hier wird er ohne zu mitteln nur der letzte Wert übernommen. Der erste Wert wird aber gemittelt. Was mach ich den falsch?

Im Editor des Attributes werden keine \ eingegeben, dass wir ja gerade bemängelt.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: neyzen am 08 Februar 2021, 16:00:16
Dann werde ich wohl zwei DOIF`s erstellen für jeden einzelnen Mittelwert :-\
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 08 Februar 2021, 16:02:01
Zitat von: neyzen am 08 Februar 2021, 16:00:16
Dann werde ich wohl zwei DOIF`s erstellen für jeden einzelnen Mittelwert :-\

Wozu?

avg_Cpu_Prozent:[sysmon:Cpu_Prozent:avg2],
avg_Cpu_Temperatur:[sysmon:Cpu_Temperatur:avg2]

Sollte im Attribut-Feld funktionieren (ohne \)
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: neyzen am 08 Februar 2021, 16:16:39
Ja das aktzeptiert er ja,nur wird der zweite wert
avg_Cpu_Prozent:[sysmon:Cpu_Prozent:avg2],
avg_Cpu_Temperatur:[sysmon:Cpu_Temperatur:avg2]

nicht gemittelt. Hier wird er einfach von dem reading so übernommen wie er ausgegeben wird.
Der erste wird aber gemittelt.

Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 08 Februar 2021, 18:45:31
Bei mir funktioniert es:

Internals:
   CFGFN     
   DEF        ##
   FUUID      60217791-f33f-c0d4-cc07-18d3dcd4a49987dc
   MODEL      FHEM
   NAME       di_avg
   NOTIFYDEV  test,global
   NR         5120
   NTFY_ORDER 50-di_avg
   STATE      initialized
   TYPE       DOIF
   VERSION    22913 2020-10-04 21:46:02
   READINGS:
     2021-02-08 18:42:52   av1             2
     2021-02-08 18:43:32   av2             3.5
     2021-02-08 18:40:33   cmd             0
     2021-02-08 18:40:33   mode            enabled
     2021-02-08 18:40:33   state           initialized


getestet mit:

setreading test r1 2
setreading test r3 3
setreading test r3 4
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: neyzen am 08 Februar 2021, 19:45:34
Jetzt habe ich mal ein dummy mit 2 verschiedenen readings gesetzt so wie in deinem Beispiel. Hier wird genau für beide auch der Mittelwert gebildet. Aber beim tatsächlichen reading geht das beim zweiten nicht. Er übernimmt weiter einfach den letzten reading. Auch wenn ich avg3 mache,selbes Problem. Ich kanns nicht erklären.
Ich hab ein zweites DOIF erstellt mit dem gleichen event_readings. Da wird dann der erste nicht gemittelt aber dafür der zweite :)
?
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 08 Februar 2021, 20:30:35
Zitat von: neyzen am 08 Februar 2021, 19:45:34
Jetzt habe ich mal ein dummy mit 2 verschiedenen readings gesetzt so wie in deinem Beispiel. Hier wird genau für beide auch der Mittelwert gebildet. Aber beim tatsächlichen reading geht das beim zweiten nicht. Er übernimmt weiter einfach den letzten reading. Auch wenn ich avg3 mache,selbes Problem. Ich kanns nicht erklären.
Ich hab ein zweites DOIF erstellt mit dem gleichen event_readings. Da wird dann der erste nicht gemittelt aber dafür der zweite :)
?

ja, ich konnte das Problem nachstellen, es passiert immer dann, wenn die Readings in einem Event-Block kommen. Ich werde es korrigieren.
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: neyzen am 08 Februar 2021, 23:35:06
Bei mir sind es userReadings die ich gerne mitteln möchte. Vielleicht brauchen die die eine weile bis sie berechnet werden.
Danke dir

Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 09 Februar 2021, 20:44:21
Ich habe es korrigiert.

Teste mal die angehängte Version.

Edit: Version wurde eingecheckt
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: neyzen am 10 Februar 2021, 11:08:14
Hi,

jetzt werden beide readings gemittelt.
Danke dir  :)
Titel: Antw:Neues Feature: Durchschnitt, Median, Differenz, prozentualer Anstieg
Beitrag von: Damian am 10 Februar 2021, 11:20:34
Zitat von: neyzen am 10 Februar 2021, 11:08:14
Hi,

jetzt werden beide readings gemittelt.
Danke dir  :)

OK. Ich habe die neue Version gerade eingecheckt.