Open ado464 opened 7 years ago
Hello @ado464, could please name the affected datarecord ids which are wrong? Are you able to cross check with a different M-Bus tool? Did you use the latest version from github?
As far as I can tell, there's no issue with the precision, at least not as far as the protocol goes. Possibly the meter is reporting more precise values than it actually has, but the values presented here match what it's sending. The non-integer values are all single-precision (32 bit) IEEE 754 floats.
There are some actual issues here though.
Pretty-printed frame dump:
Header: 68 7A 7A 68 08 01 72
Slave Information: 02 64 52 04 B4 05 80 04 9D 00 FF FF
Data Records:
DIB: 04 VIB: 85 7D
Data: DA 47 74 00
DIB: 04 VIB: 15
Data: E4 C8 71 02
DIB: 42 VIB: 6C
Data: 1E 26
DIB: 44 VIB: 85 7D
Data: B5 D5 6F 00
DIB: 03 VIB: 22
Data: 7C 76 01
DIB: 05 VIB: 2E
Data: 5B 9C 2F 46
DIB: 05 VIB: 3E
Data: 75 94 99 43
DIB: 05 VIB: 5B
Data: EB C9 E7 42
DIB: 05 VIB: 5F
Data: F8 55 A7 42
DIB: 05 VIB: 63
Data: E6 E7 00 42
DIB: 04 VIB: 6D
Data: 00 0C 08 2C
DIB: 06 VIB: 02
Data: C3 AF 60 4D EE 06
DIB: 06 VIB: 10
Data: 95 25 29 DF BA 03
DIB: 05 VIB: 93 28
Data: 00 00 20 41
DIB: 05 VIB: 93 29
Data: 00 00 80 3F
DIB: 02 VIB: FD 17
Data: 00 20
DIB: 05 VIB: 83 33
Data: 3B 55 91 3F
Checksum and Stop: 93 16
I think it's time to use the new M-Bus decoding (mbus-protocol-aux.c) instead of the old implementation (mbus-protocol.c) for all the binaries.
test/mbus_parse_hex -h <hex-file>
should decode it properly:
<?xml version="1.0" encoding="ISO-8859-1"?>
<MBusData>
<SlaveInformation>
<Id>4526402</Id>
<Manufacturer>AMT</Manufacturer>
<Version>128</Version>
<ProductName>Aquametro CALEC MB</ProductName>
<Medium>Heat: Outlet</Medium>
<AccessNumber>157</AccessNumber>
<Status>00</Status>
<Signature>FFFF</Signature>
</SlaveInformation>
<DataRecord id="0">
<Function>Instantaneous value</Function>
<StorageNumber>0</StorageNumber>
<Unit>Wh</Unit>
<Quantity>Energy</Quantity>
<Value>762057000000.000000</Value>
</DataRecord>
<DataRecord id="1">
<Function>Instantaneous value</Function>
<StorageNumber>0</StorageNumber>
<Unit>m^3</Unit>
<Quantity>Volume</Quantity>
<Value>4101142.800000</Value>
</DataRecord>
<DataRecord id="2">
<Function>Instantaneous value</Function>
<StorageNumber>1</StorageNumber>
<Unit>-</Unit>
<Quantity>Time point (date)</Quantity>
<Value>2016-06-30</Value>
</DataRecord>
<DataRecord id="3">
<Function>Instantaneous value</Function>
<StorageNumber>1</StorageNumber>
<Unit>Wh</Unit>
<Quantity>Energy</Quantity>
<Value>732920500000.000000</Value>
</DataRecord>
<DataRecord id="4">
<Function>Instantaneous value</Function>
<StorageNumber>0</StorageNumber>
<Unit>s</Unit>
<Quantity>On time</Quantity>
<Value>345124800.000000</Value>
</DataRecord>
<DataRecord id="5">
<Function>Instantaneous value</Function>
<StorageNumber>0</StorageNumber>
<Unit>W</Unit>
<Quantity>Power</Quantity>
<Value>11239088.867188</Value>
</DataRecord>
<DataRecord id="6">
<Function>Instantaneous value</Function>
<StorageNumber>0</StorageNumber>
<Unit>m^3/h</Unit>
<Quantity>Volume flow</Quantity>
<Value>307.159821</Value>
</DataRecord>
<DataRecord id="7">
<Function>Instantaneous value</Function>
<StorageNumber>0</StorageNumber>
<Unit>°C</Unit>
<Quantity>Flow temperature</Quantity>
<Value>115.894371</Value>
</DataRecord>
<DataRecord id="8">
<Function>Instantaneous value</Function>
<StorageNumber>0</StorageNumber>
<Unit>°C</Unit>
<Quantity>Return temperature</Quantity>
<Value>83.667908</Value>
</DataRecord>
<DataRecord id="9">
<Function>Instantaneous value</Function>
<StorageNumber>0</StorageNumber>
<Unit>K</Unit>
<Quantity>Temperature difference</Quantity>
<Value>32.226463</Value>
</DataRecord>
<DataRecord id="10">
<Function>Instantaneous value</Function>
<StorageNumber>0</StorageNumber>
<Unit>-</Unit>
<Quantity>Time point (date & time)</Quantity>
<Value>2016-12-08T12:00:00</Value>
</DataRecord>
<DataRecord id="11">
<Function>Instantaneous value</Function>
<StorageNumber>0</StorageNumber>
<Unit>Wh</Unit>
<Quantity>Energy</Quantity>
<Value>762057016518.700073</Value>
</DataRecord>
<DataRecord id="12">
<Function>Instantaneous value</Function>
<StorageNumber>0</StorageNumber>
<Unit>m^3</Unit>
<Quantity>Volume</Quantity>
<Value>4101142.816149</Value>
</DataRecord>
<DataRecord id="13">
<Function>Instantaneous value</Function>
<StorageNumber>0</StorageNumber>
<Unit>m^3</Unit>
<Quantity>Volume</Quantity>
<Value>0.010000</Value>
</DataRecord>
<DataRecord id="14">
<Function>Instantaneous value</Function>
<StorageNumber>0</StorageNumber>
<Unit>m^3</Unit>
<Quantity>Volume</Quantity>
<Value>0.001000</Value>
</DataRecord>
<DataRecord id="15">
<Function>Instantaneous value</Function>
<StorageNumber>0</StorageNumber>
<Unit></Unit>
<Quantity>Error flags</Quantity>
<Value>8192.000000</Value>
</DataRecord>
<DataRecord id="16">
<Function>Instantaneous value</Function>
<StorageNumber>0</StorageNumber>
<Unit>Wh</Unit>
<Quantity>Energy</Quantity>
<Value>1.135414</Value>
</DataRecord>
</MBusData>
I'm not sure I would call that "properly" decoded. It solves the issue with VIFE 0x7D, but still misrepresents data records 13, 14 and 16.
It's an improvement, and having separate "Unit" and "Quantity" fields is good (though the "Unit" handling is a bit inconsistent; see DRs 2, 10 and 15), but simply ignoring unrecognized VIFEs is not the way to go.
Hello all, i am guessing my values are a bit off with the infinite decimals i got :P could someone please help me out
This is my output:
In hex:
I can se that the temperature is way off with that many decimals so everything else must be off as well? Maybe even wrong values?
Thanks for all the help guys!
Best regards, Ado