Skip to content

Instantly share code, notes, and snippets.

@bjorne
Last active December 13, 2022 21:03
Show Gist options
  • Save bjorne/20829735df1063b1e776ca83f259bf2c to your computer and use it in GitHub Desktop.
Save bjorne/20829735df1063b1e776ca83f259bf2c to your computer and use it in GitHub Desktop.
Usage conversion
$ python3 wfrac.py
usage: 0 kWh ( 0) | origbytes: [0, 0, 0, 0] | vals: [0, 0, 0, 0] => orig: 0.0, glsf91: 0.0, new: 0.0
usage: 1 kWh ( 4) | origbytes: [0, 0, 4, 0] | vals: [0, 0, 4, 0] => orig: 1.0, glsf91: 1.0, new: 1.0
usage: 30 kWh (120) | origbytes: [0, 0, 120, 0] | vals: [0, 0, 120, 0] => orig: 30.0, glsf91: 58.0, new: 30.0
usage: 31 kWh (124) | origbytes: [0, 0, 124, 0] | vals: [0, 0, 124, 0] => orig: 31.0, glsf91: 59.0, new: 31.0
usage: 32 kWh (128) | origbytes: [0, 0, 128, 0] | vals: [0, 0, -128, 0] => orig: None, glsf91: 32.0, new: 32.0
usage: 33 kWh (132) | origbytes: [0, 0, 132, 0] | vals: [0, 0, -124, 0] => orig: None, glsf91: 33.0, new: 33.0
usage: 63 kWh (252) | origbytes: [0, 0, 252, 0] | vals: [0, 0, -4, 0] => orig: None, glsf91: 91.0, new: 63.0
usage: 64 kWh (256) | origbytes: [0, 0, 0, 1] | vals: [0, 0, 0, 1] => orig: 0.0, glsf91: 0.25, new: 64.0
usage: 65 kWh (260) | origbytes: [0, 0, 4, 1] | vals: [0, 0, 4, 1] => orig: 1.0, glsf91: 1.25, new: 65.0
usage: 128 kWh (512) | origbytes: [0, 0, 0, 2] | vals: [0, 0, 0, 2] => orig: 0.0, glsf91: 0.5, new: 128.0
usage: 129 kWh (516) | origbytes: [0, 0, 4, 2] | vals: [0, 0, 4, 2] => orig: 1.0, glsf91: 1.5, new: 129.0
for usage in [0, 1, 30, 31, 32, 33, 63, 64, 65, 128, 129]:
vals_orig = [ 0x00, 0x00, *int.to_bytes(usage * 4, 2, 'little', signed=False)]
vals = [
(256 - a) * (-1) if a > 127 else a for a in vals_orig
]
i = 0
orig, glsf91, new = None, None, None
try:
orig = int.from_bytes(vals[i + 2: i + 3], "little", signed=False ) * 0.25
except: pass
try:
glsf91 = ( ((vals[i + 3] & 0x7f) + (vals[i + 3] & 0xF0) * 64) + (vals[i + 2] & 0x7f) + (vals[i + 2] & 0xF0) )* 0.25
except: pass
try:
new = int.from_bytes([(256 + v) % 256 for v in vals[i + 2: i + 4]], "little", signed=False ) * 0.25
except:
pass
print(f"usage: {usage:5g} kWh ({usage*4:3g}) | origbytes: {str(vals_orig): >16} | vals: {str(vals): >17} => orig: {str(orig): >6}, glsf91: {str(glsf91): >6}, new: {str(new): >6}")
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment