mirror of
https://github.com/esphome/esphome.git
synced 2024-12-22 13:34:54 +01:00
Fix 24 bit signed integer parsing in sml parser (#5250)
This commit is contained in:
parent
b9e9223fdd
commit
6089526975
1 changed files with 5 additions and 0 deletions
|
@ -88,6 +88,11 @@ uint64_t bytes_to_uint(const bytes &buffer) {
|
||||||
for (auto const value : buffer) {
|
for (auto const value : buffer) {
|
||||||
val = (val << 8) + value;
|
val = (val << 8) + value;
|
||||||
}
|
}
|
||||||
|
// Some smart meters send 24 bit signed integers. Sign extend to 64 bit if the
|
||||||
|
// 24 bit value is negative.
|
||||||
|
if (buffer.size() == 3 && buffer[0] & 0x80) {
|
||||||
|
val |= 0xFFFFFFFFFF000000;
|
||||||
|
}
|
||||||
return val;
|
return val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue