Hallo,
nach den letzten Regenfällen ist bei mir das Wasser im Brunnen stark angestiegen. Sobald der Pegel im Brunnen einen Wert übersteigt werden negative Werte ausgegeben und die Umrechnung findet nicht statt.
Was kann ich tun?
Ist bei mir auch so. Den Sensor soweit rausziehen, bis keine negativen Werte mehr gemeldet werden.
Ich nutze die negativen Werte allerdings, um "Alarm" zu geben, dass die Zisterne langsam überläuft.
Gruß
könnt ihr dazu logs schicken - mit beschreibung? Evtl stimmt der Wertebereich des Readings nicht...
Hier zB. hatte es sehr geregnet.
2014-08-03 01:15:07: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 355
2014-08-03 01:46:03: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 355
2014-08-03 02:16:43: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 359
2014-08-03 02:47:46: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 362
2014-08-03 03:18:33: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 377
2014-08-03 03:49:37: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -109
2014-08-03 04:20:25: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -109
2014-08-03 04:51:28: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -112
2014-08-03 05:22:23: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -122
2014-08-03 05:53:02: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 383
2014-08-03 06:23:41: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 380
2014-08-03 06:54:38: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 376
2014-08-03 20:00:18: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 361
2014-08-03 20:31:06: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 362
2014-08-03 21:01:45: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 373
2014-08-03 21:32:40: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -120
2014-08-03 22:03:19: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -118
2014-08-03 22:34:15: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -121
2014-08-03 23:04:55: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 359
2014-08-03 23:35:58: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 368
2014-08-04 00:06:45: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 372
2014-08-04 00:37:49: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 373
2014-08-04 01:08:37: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 373
2014-08-04 01:39:41: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 374
2014-08-04 02:10:36: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 380
2014-08-04 02:41:15: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -104
2014-08-04 03:12:11: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -106
2014-08-04 03:42:51: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -106
2014-08-04 04:13:46: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -113
2014-08-04 04:44:33: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -119
2014-08-04 05:15:36: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -122
2014-08-04 05:46:24: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -124
2014-08-04 06:17:28: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -126
2014-08-04 06:48:15: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -126
2014-08-04 07:18:54: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -127
2014-08-04 07:49:49: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -127
2014-08-04 08:20:29: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: -127
2014-08-04 08:51:24: CUL_HM_KFM100_Sensor_1D9A46, CUL_HM, rawValue: 379
Das Wasser hat im Brunnen einen Pegel meist von 355 was ca. 2,20m entspricht.
Bei 383 ist der letzte positive Wert gewesen, danach geht es mit -127...-100 weiter.
Die -100 müssten dann ca. 3m sein.
Bei lastMsg stand was von d:1159198141020000FF43 und rawValue zeigte -127
das sind seltsame werte. Die Berechnung habe ich nie verstanden.
Kannst du einmal die rohmessages dazu aufnehmen?
Gerne eine lange Messreihe. Dazu die Definition des Gefäßes, also die Register
FF43 sollte -127 anzeigen
wenn 355=2,2m sind, 384 dann 3m folgt: 29 = 80cm.
Hast du ein nicht-homogenes Gefäss definiert?
-100 bekommt man mit E443
355 muss 1D42 sein
Einige Bits scheinen nicht genutzt zu sein - es gibt also Varianten.
Hier mal das List vom CUL_HM_KFM100_Sensor_1D9A46
Internals:
DEF 1D9A46
IODev hmlan_1
LASTInputDev hmlan_1
MSGCNT 274
NAME CUL_HM_KFM100_Sensor_1D9A46
NR 57
STATE 227.9 cm
TYPE CUL_HM
hmlan_1_MSGCNT 274
hmlan_1_RAWMSG E1D9A46,0000,7581E228,FF,FFB8,F3A0531D9A46115919814B0200801A44
hmlan_1_RSSI -72
hmlan_1_TIME 2014-08-07 22:04:47
lastMsg No:F3 - t:53 s:1D9A46 d:115919 814B0200801A44
protCmdDel 4
protLastRcv 2014-08-07 22:04:47
protResnd 6 last_at:2014-08-06 07:36:59
protResndFail 2 last_at:2014-08-06 07:37:03
protSnd 2 last_at:2014-08-06 07:36:44
protState CMDs_done_Errors:1
rssi_at_hmlan_1 avg:-76.78 min:-83 max:-72 lst:-72 cnt:274
CHANGETIME:
Helper:
Dblog:
Activity:
Mydblog:
TIME 1407303376.35981
VALUE alive
Sequence:
Mydblog:
TIME 1407441886.8559
VALUE 11
Content:
Mydblog:
TIME 1407441886.8559
VALUE 227.9 cm
Rawvalue:
Mydblog:
TIME 1407441886.8559
VALUE 358
State:
Mydblog:
TIME 1407441886.8559
VALUE 227.9 cm
Readings:
2014-08-06 07:36:16 Activity alive
2014-06-08 13:41:40 D-serialNr JAA0166620
2014-08-06 07:59:55 RegL_00:
2014-08-07 22:04:46 Sequence 11
2014-08-07 22:04:46 content 227.9 cm
2014-08-07 22:04:46 rawValue 358
2014-08-04 09:22:03 rawValueMax 383
2014-08-04 08:20:29 rawValueMin -127
2014-08-07 22:04:46 state 227.9 cm
Helper:
cSnd 017139021D9A4600040000000000
getCfgList all
getCfgListNo ,3
mId 0047
rxType 1
Io:
newChn +1D9A46,00,01,00
nextSend 1407441887.37667
prefIO
rxt 0
vccu hmlan_ccu
p:
1D9A46
00
01
00
Mrssi:
mNo F3
Io:
hmlan_1 -70
Prt:
bErr 0
sProc 0
Q:
qReqConf
qReqStat
Role:
chn 1
dev 1
Rssi:
At_hmlan_1:
avg -76.7810218978102
cnt 274
lst -72
max -72
min -83
Shadowreg:
Attributes:
DbLogExclude [DR]-.*
IODev hmlan_1
IOgrp hmlan_ccu
actCycle 001:10
actStatus alive
alias Brunnen Pegelstand
autoReadReg 4_reqStatus
devStateIcon {my $V=int(ReadingsVal("$name","rawValue",0)*1);;my $M=int(ReadingsVal("$name","rawValueMax",350)*1);;my $c=ReadingsVal("$name","content",0);;'<div style="width:'.$M.'px;;height:20px;;background-color:grey"><div style="width:'.$V.'px;;height:20px;;background-color:blue">'.$V.' (max. '.$M.')/ '.$c.'</div>'}
expert 2_full
model KFM-Sensor
rawToReadable 1:0 10:30 240:110 297:150 337:190 383:273
room 8_2_Brunnen,9_8_ESA,9_8_HM
serialNr JAA0166620
subType KFM100
unit cm
userReadings rawValueMin:rawValue {my $r=ReadingsVal($name,"rawValue",360);;my $rl=ReadingsVal($name,"rawValueMin",$r);;if($r<=$rl){$r}else{}}, rawValueMax:rawValue {my $r=ReadingsVal($name,"rawValue",0);;my $rh=ReadingsVal($name,"rawValueMax",$r);;if($r>=$rh){$r}else{}}
Gefäß habe ich keines definiert.
355 ist 1D44.
Warum bringt er nach 3/4 der Füllhöhe negative Raw Werte.
Das Grundwasser ist jetzt wieder fast auf Normalpegel.
Um die Messreihe zu machen müsste ich den Sensor tiefer hängen.
Messreihe wird erst nächste Woche, da ich bis Montag weg bin.
die errechnung der Werte ist seltsam - das ist nicht eQ3 Stil. Schon möglich, dass es korrekt ist. Es scheint kein eQ3 eigenes Device zu sein....
Wenn es mehr Werte gibt kann man versuchen, es zu ergründen.
Pegelmessung habe ich noch nicht gemacht, aber die Low Batt Meldung müsste ich gefunden haben:
No:00 - t:53 s:1D9A46 d:000000 01420200002844
-----------------------------------^---------------- batterie ok
No:EA - t:53 s:1D9A46 d:000000 81420200C02944
-----------------------------------^---------------- batterie low
ist eingebaut
So, Messungen soweit durch, Pegel steigt von erster zu letzter Zeile an.
No:80 - t:53 s:1D9A46 d:000000 014E0200300245 126
No:DA - t:53 s:1D9A46 d:000000 014E0200100045 128
No:3F - t:53 s:1D9A46 d:000000 0147020000FF44 129
No:08 - t:53 s:1D9A46 d:000000 014A020000FE44 130
No:F2 - t:53 s:1D9A46 d:000000 0146020000FD44 131
No:6B - t:53 s:1D9A46 d:000000 0149020000FC44 132
.....
No:4D - t:53 s:1D9A46 d:000000 014B0200C00244 382
No:7E - t:53 s:1D9A46 d:000000 014F0200800144 383
No:A1 - t:53 s:1D9A46 d:000000 01450200800044 384
hier springt er auf negative Werte
No:EB - t:53 s:1D9A46 d:000000 0144020000FF43 -127 (385)
No:63 - t:53 s:1D9A46 d:000000 0147020000FE43 -126 (386)
No:62 - t:53 s:1D9A46 d:000000 0146020000FD43 -125 (387)
No:61 - t:53 s:1D9A46 d:000000 0145020000FB43 -123 (389)
Im Programm habe ich eine Auswertung 43/44 gesehen, die 45 wird da aber wie 43 betrachtet.
Ich habe bei mir jetzt mal folgendes geändert:
my $v = 128-$k_v2; # FIXME: calibrate
$v += 256 if(!($k_v3 & 1));
in
my $v = 128-$k_v2; # FIXME: calibrate
$v += 256 if(($k_v3 & 0x03) == 0); # $k_v3 = 44 Pegel ca. 0.4m < $v < 2.5m
$v += 512 if(($k_v3 & 0x03) == 3); # $k_v3 = 43 Pegel ca. 2.5m < $v
Damit zeigt er mir die kompletten 3m an.
Es scheint sich um einen 11 oder 12 bit wert zu handel, der in die entgegengesetzte Richtung läuft.
FF 43 ist dann 3ff.
der wert, der sich ergibt ist
$v = 1408 - (($k_v3 & 0x07)<<8 + $k_v2)
oder
$v = 1408 - (($k_v3 & 0x07)*256 + $k_v2)
Klappt das? Ist besser als die ganzen ifs
Zitat von: martinp876 am 07 September 2014, 20:00:01
Es scheint sich um einen 11 oder 12 bit wert zu handel, der in die entgegengesetzte Richtung läuft.
FF 43 ist dann 3ff.
der wert, der sich ergibt ist
$v = 1408 - (($k_v3 & 0x07)*256 + $k_v2)
Klappt das? Ist besser als die ganzen ifs
Mit mehr als 8bit habe ich es noch nicht betrachtet. Mit mehreren Werten durchgerechnet.
Und weniger if Bedingungen sind besser.
Beim durchgehen der beobachteten Werte könnten es sogar noch mehr als 11bit sein.
$k_v1 könnte noch niederwertigere Bits enthalten.
01450200800044 384
01460200000144
014F0200800144 383
014A0200000244
014B0200C00244 382
01450200400344 381
014F0200400444
014B0200C00444 380
014D0200800544 379
014F0200000644
014A0200800644 378
014A0200C00744 377
01410200400844 376
01420200000944
014F0200800944 375
Zitat von: martinp876 am 07 September 2014, 20:00:01
$v = 1408 - (($k_v3 & 0x07)<<8 + $k_v2)
hier braucht es noch eine Klammer
$v = 1408 - (
(($k_v3 & 0x07)<<8
) + $k_v2)
eingebaut
Noch ein kleiner Hinweis zu einem Problem was hier her passt:
Ich habe mich lange Zeit gewundert, warum mein Sensor (bzw. das HM- Modul) mal den Wert "content" liefert und mal nicht.
Jetzt habe ich angeregt durch diesen Thread mal den Code im Modul untersucht und Folgendes gefunden:
Gibt man bei "attr rawToReadable" als höchsten oder niedrigsten raw-Wert einen Wert an, der dann in der Praxis gelegentlich unter- oder überschritten wird, reicht der Code (Vergleicher auf Bereich von - bis) den Wert nicht mehr weiter.
Verhindern lässt sich das z.B. in dem man zuerst die realen Werte misst/berechnet und dann per Dreisatz zwei Werte ermittelt, die etwas unter- und oberhalb der zuvor ermittelten Min/Max- Werte liegen. Trägt man diese nun in "attr rawToReadable" ein, wird der Füllstand immer noch richtig berechnet, aber die "Endlagen" werden nicht mehr erreicht und "content" somit immer geliefert.
Dazu habe ich diesen Rechner (http://www.ehtam-mathe.de/Rechner/dreisatz.htm) benutzt. Beispiel : mein Max- Wertepaar: 330:8.16 -> Berechnung eines "Headroom": 350:8.65
Gruß
Frank
So, diese Woche kam meine 1. reguläre Low Bat-meldung vom Sensor. Dieser Batteriesatz hat 15Monate gehalten.
Haste wieder den 50er Satz für 1 Euro bei Tedi gekauft, was!? ;D Bei mir kommen in Sensoren die ich einfach vergessen können möchte immer die Lithium von Energizer rein. Das läuft dann über viele Jahre durch.