Probleme mit Regenberechnung mittels mydiff($$$)

Begonnen von VolkerL, 20 Juni 2022, 13:26:06

Vorheriges Thema - Nächstes Thema

VolkerL

Hallo zusammen,

ich versuche schon seit einigen Tagen die Regenberechnung mittels der im Wiki bei dem HM-WDS100-C6-O Funk-Kombi-Sensor OC3 beschriebenen Methode zu realisieren. Nachdem es heute wieder etwas geregnet hat, musste ich aber feststellen, dass weiterhin außer dem RegenmengenOffset keine Werte angezeigt werden.


Das mydiff-sub aus meiner 99_myUtils.pm (1:1-Kopie aus dem Wiki):
# myDiff
# berechnet die Differenz aus der ersten Zeile eines LogFiles und der letzten Zeile eines LogFiles über einen Zeitraum zwischen einem Zeitpunkt in der Vergangenheit und dem Zeitpunkt des Aufrufs
sub myDiff($$$)
{
my ($offset,$logfile,$cspec) = @_;
my $period_s = strftime "%Y-%m-%d\x5f%H:%M:%S", localtime(time-$offset);
my $period_e = strftime "%Y-%m-%d\x5f%H:%M:%S", localtime;
my $oll = $attr{global}{verbose};
$attr{global}{verbose} = 0;
my @logdata = split("\n", fhem("get $logfile - - $period_s $period_e $cspec"));
$attr{global}{verbose} = $oll;
my ($cnt, $first, $last, $diff) = (0)x4;
foreach (@logdata){
  my @line = split(" ", $_);
  if(defined $line[1] && "$line[1]" ne ""){
   $cnt += 1;
    if ($cnt == 1) {
     $first = $line[1];
    }
   $last = $line[1];
  }
}
$diff = $last - $first;
Log 4, ("myDiff: File: $logfile, Field: $cspec, Period: $period_s bis $period_e, First: $first, Last: $last, Diff: $diff");
return $diff;
}


RegenmengeNotify:
Internals:
   DEF        WDS100:rain.* {
  my $menge = (ReadingsVal("WDS100", "rain", 0) - ReadingsVal("RegenmengeOffset", "state", 0));
  my $last1hours = myDiff("3600", "FileLog_WDS100_Rain", "10:::");
  my $last3hours = myDiff("10800", "FileLog_WDS100_Rain", "10:::");
  my $last24hours = INT(myDiff("86400", "FileLog_WDS100_Rain", "10:::")*100)/100;
  fhem("set RegenmengeTag $menge");
  fhem("set RegenmengeLast1Hours $last1hours");
  fhem("set RegenmengeLast3Hours $last3hours");
  fhem("set RegenmengeLast24Hours $last24hours");
}
   FUUID      629288c4-f33f-9fb4-5494-3a66725a28fde83d
   NAME       RegenmengeNotify
   NOTIFYDEV  WDS100
   NR         661
   NTFY_ORDER 50-RegenmengeNotify
   REGEXP     WDS100:rain.*
   STATE      2022-06-20 12:42:40
   TRIGGERTIME 1655721760.41309
   TYPE       notify
   eventCount 1
   READINGS:
     2022-06-20 12:42:36   state           active
     2022-06-20 12:42:40   triggeredByDev  WDS100
     2022-06-20 12:42:40   triggeredByEvent rain: 1028.075
Attributes:


WDS100:
Internals:
   COC_MSGCNT 5
   COC_RAWMSG A13CB867068082B00000000954D0D9DC091140AB1::-78:COC
   COC_RSSI   -78
   COC_TIME   2022-06-20 12:44:45
   DEF        68082B
   FUUID      5f08a9c9-f33f-0724-9f79-3939a99e71e43bc4
   HMLAN1_MSGCNT 5
   HMLAN1_RAWMSG E68082B,0000,04E3CAD8,FF,FFC0,CB867068082B00000000954D0D9DC091140AB1
   HMLAN1_RSSI -64
   HMLAN1_TIME 2022-06-20 12:44:43
   IODev      COC
   LASTInputDev COC
   MSGCNT     10
   NAME       WDS100
   NR         378
   NTFY_ORDER 48-WDS100
   STATE      T: 14.9 H: 77 W: 14.5 R: 1028.075 IR: 0 WD: 100 WDR: 67.5 S: 10 B: 177
   TYPE       CUL_HM
   chanNo     01
   disableNotifyFn 1
   eventCount 6
   lastMsg    No:CB - t:70 s:68082B d:000000 00954D0D9DC091140AB1
   peerList   WDC7000
   protLastRcv 2022-06-20 12:44:43
   protRcv    5 last_at:2022-06-20 12:44:43
   rssi_at_COC cnt:5 min:-78.5 max:-77.5 avg:-78 lst:-78
   rssi_at_HMLAN1 cnt:5 min:-64 max:-63 avg:-63.4 lst:-64
   READINGS:
     2022-06-20 12:45:23   Activity        alive
     2022-06-20 00:15:09   CommandAccepted yes
     2021-03-27 00:03:19   D-firmware      1.6
     2021-03-27 00:03:19   D-serialNr      PEQ0001611
     2022-06-20 12:36:03   IODev           COC
     2022-04-15 00:20:21   PairedTo        0x307840
     2021-03-27 00:37:43   R-WDC7000_chn-09-stormLowThresh 5
     2021-03-27 00:37:43   R-WDC7000_chn-09-stormUpThresh 20
     2022-06-20 00:15:09   R-burstRx       off
     2021-03-27 15:02:12   R-cyclicInfoMsgDis 0
     2021-03-27 00:37:42   R-pairCentral   0x307840
     2022-06-16 11:31:43   R-sunThresh     197
     2021-03-27 00:37:42   R-windSpeedRsltSrc max
     2022-06-20 00:15:09   RegL_00.        00:00 01:00 02:00 0A:30 0B:78 0C:40 18:00 11:00
     2022-06-20 00:15:10   RegL_01.        00:00 05:C5 06:14 07:05 0A:01
     2022-04-15 15:02:14   RegL_01.WDC7000_chn-09 00:00 05:CD 06:14 07:05 0A:01
     2022-04-15 15:02:15   RegL_04.WDC7000_chn-09 00:00 05:00
     2022-06-20 12:44:43   battery         ok
     2022-06-20 12:44:43   brightness      177
     2022-06-20 00:16:10   cfgState        PeerVerf
     2022-06-20 00:15:10   commState       CMDs_done
     2022-06-20 12:44:43   humidity        77
     2022-06-20 12:44:43   isRaining       0
     2022-06-20 12:36:15   peerList        WDC7000
     2021-06-03 13:48:33   powerOn         2021-06-03 13:48:33
     2022-06-20 12:44:43   rain            1028.075
     2021-06-03 13:48:33   recentStateType info
     2022-06-20 00:15:09   sabotageAttackId_ErrIoId_2EF067 cnt:120
     2022-06-20 00:15:09   sabotageAttack_ErrIoAttack_cnt 120
     2022-06-20 12:44:43   state           T: 14.9 H: 77 W: 14.5 R: 1028.075 IR: 0 WD: 100 WDR: 67.5 S: 10 B: 177
     2022-06-20 03:39:50   storm           unknown:04
     2022-06-20 12:44:43   sunshine        10
     2022-06-20 12:44:43   temperature     14.9
     2022-06-20 03:39:50   trig_01         WDC7000
     2022-06-20 03:39:50   trigger_cnt     82
     2022-06-20 00:15:10   unknown         0400000000000105C50A010000
     2022-06-20 12:44:43   windDirRange    67.5
     2022-06-20 12:44:43   windDirection   100
     2022-06-20 12:44:43   windSpeed       14.5



Filelog_WDS100_Rain:
Internals:
   DEF        ./log/WDS100_Rain.log WDS100:(rain|T).*
   FD         107
   FUUID      62aed24a-f33f-9fb4-ab61-8633154536b8bdd8
   NAME       FileLog_WDS100_Rain
   NR         682
   NTFY_ORDER 50-FileLog_WDS100_Rain
   REGEXP     WDS100:(rain|T).*
   STATE      active
   TYPE       FileLog
   currentlogfile ./log/WDS100_Rain.log
   logfile    ./log/WDS100_Rain.log
   READINGS:
     2022-06-20 12:47:36   linesInTheFile  1280
   pos:
Attributes:
   room       Wetter





Zur Info: mit dem original-FileLog bei dem alles geloggt wird, funktioniert es auch nicht.




Die Dummys zeigen immer 0 an (obwohl es heute 2.064 geregnet hat):

RegenmengeLast1Hours    0
RegenmengeLast24Hours  0
RegenmengeLast3Hours    0
RegenmengeOffset      1026.01
RegenmengeTag               0


Woran kann es liegen?


Vielen Dank und viele Grüße

Volker
Raspberry PI mit fhem 5.8, COC & HM-CFG-LAN für Homematic & CUL für FS20

rabehd

Was kommt denn bei {myDiff("86400", "FileLog_WDS100_Rain", "10:::")} in der Befehlszeile?
Auch funktionierende Lösungen kann man hinterfragen.

rabehd

#2
fhem("set RegenmengeLast1Hours $last1hours");

Warum in ein Dummy und nicht als Reading?
fhem("set WDS100 RegenmengeLast1Hours $last1hours");
Auch funktionierende Lösungen kann man hinterfragen.

MadMax-FHEM

Zitat von: rabehd am 20 Juni 2022, 14:23:36
fhem("set RegenmengeLast1Hours $last1hours");

Warum in ein Dummy und nicht als Reading?
fhem("set WDS100 RegenmengeLast1Hours $last1hours");

Müsste doch setreading statt set heißen?

Also:
fhem("setreading WDS100 RegenmengeLast1Hours $last1hours");

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

rabehd

Auch funktionierende Lösungen kann man hinterfragen.

DetlefR

Log 4, ("myDiff: File: $logfile, Field: $cspec, Period: $period_s bis $period_e, First: $first, Last: $last, Diff: $diff");

Was zeigt den das FHEM Log. Interessant wäre auch noch "$cnt"

VolkerL

Hallo,

zu

ZitatWas kommt denn bei
Code: [Auswählen]
{myDiff("86400", "FileLog_WDS100_Rain", "10:::")}
in der Befehlszeile?

Da kommt das richtige Ergebnis 2.06500000000005

ZitatZitat von: rabehd am Heute um 14:23:36
Code: [Auswählen]
fhem("set RegenmengeLast1Hours $last1hours");

Warum in ein Dummy und nicht als Reading?
Code: [Auswählen]
fhem("set WDS100 RegenmengeLast1Hours $last1hours");

Müsste doch setreading statt set heißen?

So habe ich aus dem Wiki übernommen und keine Gedanken darum gemacht, dass es nicht stimmen könnte

Ich habe es jetzt wie folgt geändert und es funktioniert auch nicht.

Internals:
   DEF        WDS100:rain.* {
  my $menge = (ReadingsVal("WDS100", "rain", 0) - ReadingsVal("RegenmengeOffset", "state", 0));
  my $last1hours = myDiff("3600", "FileLog_WDS100_Rain", "10:::");
  my $last3hours = myDiff("10800", "FileLog_WDS100_Rain", "10:::");
  my $last24hours = INT(myDiff("86400", "FileLog_WDS100_Rain", "10:::")*100)/100;
  fhem("setreading WDS100 RegenmengeTag $menge");
  fhem("setreading WDS100 RegenmengeLast1Hours $last1hours");
  fhem("setreading WDS100 RegenmengeLast3Hours $last3hours");
  fhem("setreading WDS100 RegenmengeLast24Hours $last24hours");
}
   FUUID      629288c4-f33f-9fb4-5494-3a66725a28fde83d
   NAME       RegenmengeNotify
   NOTIFYDEV  WDS100
   NR         661
   NTFY_ORDER 50-RegenmengeNotify
   REGEXP     WDS100:rain.*
   STATE      2022-06-20 15:49:15
   TRIGGERTIME 1655732955.69294
   TYPE       notify
   READINGS:
     2022-06-20 15:36:34   state           active
     2022-06-20 15:49:15   triggeredByDev  WDS100
     2022-06-20 15:49:15   triggeredByEvent rain: 1028.075
Attributes:


Oder muss es zuerst wieder regnen?

Im Log habe ich folgendes gefunden und das INT mal raus gelöscht:

2022.06.20 15:51:21 1: ERROR evaluating my $EVENT=   $evalSpecials->{'%EVENT'};my $EVTPART0=   $evalSpecials->{'%EVTPART0'};my $EVTPART1=   $evalSpecials->{'%EVTPART1'};my $NAME=   $evalSpecials->{'%NAME'};my $SELF=   $evalSpecials->{'%SELF'};my $TYPE=   $evalSpecials->{'%TYPE'};{
  my $menge = (ReadingsVal("WDS100", "rain", 0) - ReadingsVal("RegenmengeOffset", "state", 0));
  my $last1hours = myDiff("3600", "FileLog_WDS100_Rain", "10:::");
  my $last3hours = myDiff("10800", "FileLog_WDS100_Rain", "10:::");
  my $last24hours = INT(myDiff("86400", "FileLog_WDS100_Rain", "10:::")*100)/100;
  fhem("setreading WDS100 RegenmengeTag $menge");
  fhem("setreading WDS100 RegenmengeLast1Hours $last1hours");
  fhem("setreading WDS100 RegenmengeLast3Hours $last3hours");
  fhem("setreading WDS100 RegenmengeLast24Hours $last24hours");
}: Undefined subroutine &main::INT called at (eval 1632) line 5.

2022.06.20 15:51:21 3: RegenmengeNotify return value: Undefined subroutine &main::INT called at (eval 1632) line 5.


Bleibt trotzdem auf 0 überall

Danke

Volker
Raspberry PI mit fhem 5.8, COC & HM-CFG-LAN für Homematic & CUL für FS20

MadMax-FHEM

Naja der Code muss ja mindestens einmal ausgeführt werden...
...und das passiert, wenn das notify getriggert wird.

Also ja: es muss wohl erst mal regnen ;)

Oder: setreading WDS100 rain 0

(statt 0 halt was, das am wenigsten "verfälscht")

Oder eben mittels trigger, dann wird (normalerweise) nichts verfälscht...

https://wiki.fhem.de/wiki/Trigger

Bzw.: was heißt "bleibt null"?

Poste doch mal ein aktuelles list...
...und statt ein notify sollte es auch gehen das per userreadings zu lösen?
(aber erst mal "Pflicht" und dann "Kür" ;)  )

EDIT: du kannst (solltest) auch Logausgaben einfügen und da dann die berechneten Werte loggen. So siehst du warum/an welcher Stelle es wohl "schief geht"...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

VolkerL

Hallo,

die Berechnung mit "set" und den Dummies funktionieren, nachdem ich das INT gelöscht hatte.
Anschließend habe ich das GROßE "INT" durch ein kleines "int" ersetzt und dann hat auch das Runden auf zwei Stellen geklappt, was ich nun bei allen Berechnungen mache.

Vielen Dank an alle die mich unterstützt haben.

Hier noch mein funtionierendes Notify dazu:

Internals:
   DEF        WDS100:rain.* {
  my $menge = int(ReadingsVal("WDS100", "rain", 0) - ReadingsVal("RegenmengeOffset", "state", 0)*100)/100;
  my $last1hours = int(myDiff("3600", "FileLog_WDS100_Rain", "10:::")*100)/100;
  my $last3hours = int(myDiff("10800", "FileLog_WDS100_Rain", "10:::")*100)/100;
  my $last24hours = int(myDiff("86400", "FileLog_WDS100_Rain", "10:::")*100)/100;
  fhem("set RegenmengeTag $menge");
  fhem("set RegenmengeLast1Hours $last1hours");
  fhem("set RegenmengeLast3Hours $last3hours");
  fhem("set RegenmengeLast24Hours $last24hours");
}
   FUUID      629288c4-f33f-9fb4-5494-3a66725a28fde83d
   NAME       RegenmengeNotify
   NOTIFYDEV  WDS100
   NR         661
   NTFY_ORDER 50-RegenmengeNotify
   REGEXP     WDS100:rain.*
   STATE      2022-06-22 00:20:56
   TRIGGERTIME 1655850056.41092
   TYPE       notify
   eventCount 5
   READINGS:
     2022-06-20 22:22:28   state           active
     2022-06-22 00:20:56   triggeredByDev  WDS100
     2022-06-22 00:20:56   triggeredByEvent rain: 1028.075
Attributes:


Danke und viele Grüße

Volker
Raspberry PI mit fhem 5.8, COC & HM-CFG-LAN für Homematic & CUL für FS20

MadMax-FHEM

Trotzdem noch die vielen dummy... ;)
...geht mittels setreading wie oben geschrieben doch nun genauso.

Und eigentlich auch ganz ohne notify und dummy direkt als userReadings sollte es auch gehen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

betateilchen

Zitat von: MadMax-FHEM am 22 Juni 2022, 00:28:21
Und eigentlich auch ganz ohne notify und dummy direkt als userReadings sollte es auch gehen...

Du weisst doch: einfache Lösungen sind hier selten erwünscht...

Zitat von: VolkerL am 20 Juni 2022, 16:03:34
So habe ich aus dem Wiki übernommen und keine Gedanken darum gemacht,

denn sie wissen nicht, was sie tun.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!