1
0
Fork 0

Add mp1s get_status function (#762)

This commit is contained in:
Hozoy 2024-04-10 06:23:35 +08:00 committed by GitHub
parent 06c91ae394
commit c6bf96da47
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
1 changed files with 34 additions and 5 deletions

View File

@ -367,11 +367,40 @@ class mp1s(mp1):
TYPE = "MP1S"
def get_energy(self) -> float:
"""Return the power consumption in W."""
packet = bytearray([8, 0, 254, 1, 5, 1, 0, 0, 0, 45])
def get_status(self) -> dict:
"""
Return the power state of the device.
voltage in V.
current in A.
power in W.
power consumption in kW·h.
"""
packet = bytearray(16)
packet[0x00] = 0x0E
packet[0x02] = 0xA5
packet[0x03] = 0xA5
packet[0x04] = 0x5A
packet[0x05] = 0x5A
packet[0x06] = 0xB2
packet[0x07] = 0xC0
packet[0x08] = 0x01
packet[0x0A] = 0x04
response = self.send_packet(0x6A, packet)
e.check_error(response[0x22:0x24])
payload = self.decrypt(response[0x38:])
energy = payload[0x7:0x4:-1].hex()
return int(energy) / 100
payload_str = payload.hex()[4:-6]
def get_value(start, end, factors):
value = sum(int(payload_str[i-2:i]) * factor for i,
factor in zip(range(start, end, -2), factors))
return value
return {
'voltage': get_value(34, 30, [10, 0.1]),
'current': get_value(40, 34, [1, 0.01, 0.0001]),
'power': get_value(46, 40, [100, 1, 0.01]),
'power_consumption': get_value(54, 46, [10000, 100, 1, 0.01])
}