RFD-FHEM / RFFHEM

Counterpart of SIGNALDuino, it's the code for FHEM to work with the data received from the uC
GNU General Public License v3.0
44 stars 33 forks source link

SD_WS09_WindDirAverage - Ergebnis falsch #1094

Closed sidey79 closed 2 years ago

sidey79 commented 2 years ago

Von @elektron-bbs

Woran es genau liegt, habe ich noch nicht heraus gefunden. Der Effekt ist hier aber auch nachvollziehbar. Auf einem System, wo das letzte Update schon etwas zurück liegt (06.02.2022) liefert das Log folgendes:

2022.04.13 13:02:02 4: SD_WS09_WindDirAverage --- OK ----
2022.04.13 13:02:02 4: SD_WS09_WindDirAverage Math::Trig:OK
2022.04.13 13:02:02 4: SD_WS09_WindDirAverage_01 WH1080 :Speed=0.3 DirR=1.57 Time=2022-04-13 13:02:02
2022.04.13 13:02:02 4: SD_WS09_WindDirAverage_02 WH1080 :avtime=600 decay=0 minspeed=0
2022.04.13 13:02:02 4: SD_WS09_WindDirAverage_04 WH1080 :Speed=0.3 Dir=1.57 Time=2022-04-13 13:02:02 minspeed=0 ctime=1649847722 ltime=1649847105 stime=1649847105 num=1
2022.04.13 13:02:02 4: SD_WS09_WindDirAverage_06 WH1080 :Speed=0.3 Dir=1.57 Time=2022-04-13 13:02:02 minspeed=0 num=1
2022.04.13 13:02:02 4: SD_WS09_WindDirAverage_08 WH1080 i=0 Speed=0.30 Dir=1.57 Time=13:02:02 vec=0.30/0.00 age=0 1.00
2022.04.13 13:02:02 4: SD_WS09_WindDirAverage_09 WH1080 Mittelwert über 1 Werte ist 90, avspeed=0.3
2022.04.13 13:02:02 4: SD_WS09_WindDirAverage_END WH1080 Mittelwert=90

Auf dem anderen Rechner (Update vor wenigen Minuten) sieht es so aus:

2022.04.13 13:01:53 4: SD_WS09_WindDirAverage --- OK ----
2022.04.13 13:01:53 4: SD_WS09_WindDirAverage Math::Trig:OK
2022.04.13 13:01:53 4: SD_WS09_WindDirAverage_01 WH1080 :Speed=0.3 DirR=1.57 Time=2022-04-13 13:01:53
2022.04.13 13:01:53 4: SD_WS09_WindDirAverage_02 WH1080 :avtime=600 decay=0 minspeed=0
2022.04.13 13:01:53 4: SD_WS09_WindDirAverage_04 WH1080 :Speed=0.3 Dir=1.57 Time=2022-04-13 13:01:53 minspeed=0 ctime=1649847713.0453 ltime=1649847004 stime=1649847004 num=1
2022.04.13 13:01:53 4: SD_WS09_WindDirAverage_06 WH1080 :Speed=0.3 Dir=1.57 Time=2022-04-13 13:01:53 minspeed=0 num=1
2022.04.13 13:01:53 4: SD_WS09_WindDirAverage_08 WH1080 i=0 Speed=0.30 Dir=1.57 Time=13:01:53 vec=0.00/0.00 age=0.0453019142150879 0.00
2022.04.13 13:01:53 4: SD_WS09_WindDirAverage_09 WH1080 Mittelwert über 1 Werte ist 0, avspeed=0.0
2022.04.13 13:01:53 4: SD_WS09_WindDirAverage_END WH1080 Mittelwert=0

Irgend etwas in der sub SD_WS09_WindDirAverage wird da jetzt anders berechnet.

Originally posted by @elektron-bbs in https://github.com/RFD-FHEM/RFFHEM/issues/1089#issuecomment-1097942106

sidey79 commented 2 years ago

Test 09_parseDatat.t aus Modul 14_SD_WS09 mit folgender FHEM Version ausgeführt:

2022.04.13 22:42:12 3: version : Latest Revision: 25531

File                  Rev   Last Change

fhem.pl               25521 2022-01-20 18:25:19Z rudolfkoenig
No Id found for 99_DockerImageInfo.pm
98_FhemTestUtils.pm   22660 2020-08-24 10:17:42Z rudolfkoenig
No Id found for 00_load.t
14_SD_WS09.pm         21622 2021-08-10 19:51:16Z sidey79
# $Id: 00_SIGNALduino.pm v3.5.4 2022-03-12 17:55:30Z sidey79 $
99_SUNRISE_EL.pm      24249 2021-04-14 05:45:49Z rudolfkoenig
99_Utils.pm           24128 2021-04-02 16:29:11Z rudolfkoenig
98_version.pm         15140 2017-09-26 09:20:09Z markusbloch

DevIo.pm              24800 2021-07-26 11:42:33Z rudolfkoenig
GPUtils.pm            19666 2019-06-20 11:17:29Z CoolTux
HttpUtils.pm          25487 2022-01-17 20:59:02Z rudolfkoenig
Meta.pm               21008 2020-01-18 10:22:10Z loredo
RTypes.pm             10476 2016-01-12 21:03:33Z borisneubert
# $Id: SD_ProtocolData.pm 3.5.x 2022-01-30 10:19:30Z elektron-bbs $
ok

Ergebnis

All tests successful. Files=1, Tests=2, 1 wallclock secs ( 0.04 usr 0.00 sys + 0.44 cusr 0.04 csys = 0.52 CPU) Result: PASS

sidey79 commented 2 years ago

Revision 25634 funktioniert auch noch

sidey79 commented 2 years ago

@elektron-bbs

Es sieht so aus, als ob ich den Test durch mehrere Revs laufen lassen musste um den zuletzt funktionalen zu finden.

Mit dem Update Befehl ist mir nichts bekannt, wie ich eine spezifische Revision bekomme.

Wenn ich das fhem Verzeichnis aus dem SVN hole, könnte ich vor jedem Testlauf eine spezifische Revision holen. Sobald der Test fehl schlägt wissen wir, welche Änderungen es verursacht.

elektron-bbs commented 2 years ago

Kann es sein, das sich an "time" etwas geändert hat?

Auf dem System, wo es noch funktioniert, liefert mir dieses:

    my $testtime = time;
    Log3 $hash, 4,"SD_WS09_WindDirAverage_01 $name: time=$testtime";

den Wert: time=1649962931 aber bei dem, wo es nicht mehr funktioniert, den Wert: time=1649962935.2339

Mit dem float scheint

      $weight = $decay ** ($age / $avtime);

aber nicht zu funktionieren.

Wenn ich in der sub SD_WS09_WindDirAverage die Zeile

    my $ctime = time;

ändere in:

    my $ctime = int time;

funktioniert die Durchschnittsberechnung wieder:

2022.04.14 21:13:56 4: SD_WS09_WindDirAverage --- OK ----
2022.04.14 21:13:56 4: SD_WS09_WindDirAverage Math::Trig:OK
2022.04.14 21:13:56 4: SD_WS09_WindDirAverage_01 WH1080: time=1649963636.57536
2022.04.14 21:13:56 4: SD_WS09_WindDirAverage_01 WH1080 :Speed=0.3 DirR=1.57 Time=2022-04-14 21:13:56
2022.04.14 21:13:56 4: SD_WS09_WindDirAverage_02 WH1080 :avtime=600 decay=0 minspeed=0
2022.04.14 21:13:56 4: SD_WS09_WindDirAverage_04 WH1080 :Speed=0.3 Dir=1.57 Time=2022-04-14 21:13:56 minspeed=0 ctime=1649963636 ltime=1649962935 stime=1649962410 num=2
2022.04.14 21:13:56 4: SD_WS09_WindDirAverage_06 WH1080 :Speed=0.3 Dir=1.57 Time=2022-04-14 21:13:56 minspeed=0 num=2
2022.04.14 21:13:56 4: SD_WS09_WindDirAverage_07 WH1080 i=0 Speed=0.30 Dir=1.57 Time=21:02:15 ctime=1649963636 akt.=1649962935
2022.04.14 21:13:56 4: SD_WS09_WindDirAverage_08 WH1080 i=0 Speed=0.30 Dir=1.57 Time=21:13:56 vec=0.30/0.00 age=0 1.00
2022.04.14 21:13:56 4: SD_WS09_WindDirAverage_09 WH1080 Mittelwert über 1 Werte ist 90, avspeed=0.3
2022.04.14 21:13:56 4: SD_WS09_WindDirAverage_END WH1080 Mittelwert=90
sidey79 commented 2 years ago

Ja, an time würde tatsächlich etwas geändert.

sidey79 commented 2 years ago

Hier die Referenz zur Änderung https://github.com/fhem/fhem-mirror/commit/0635ed35b4c2aa6f1ef683caf6e779396d3b421f

Wenn wir anstelle time() den Aufruf in CORE::time() ändern, dann geht es wieder wie zuvor.

sidey79 commented 2 years ago

https://svn.fhem.de/trac/changeset/25922