Hallo zusammen,
ich versuche schon seit einigen Tagen die Regenberechnung mittels der im Wiki bei dem HM-WDS100-C6-O Funk-Kombi-Sensor OC3 (https://wiki.fhem.de/wiki/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
Was kommt denn bei {myDiff("86400", "FileLog_WDS100_Rain", "10:::")}
in der Befehlszeile?
fhem("set RegenmengeLast1Hours $last1hours");
Warum in ein Dummy und nicht als Reading?
fhem("set WDS100 RegenmengeLast1Hours $last1hours");
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
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"
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
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
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
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
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.