26 lines
684 B
Python
26 lines
684 B
Python
# /config/pyscript/ess_set_power.py
|
|
import struct
|
|
|
|
@service
|
|
def ess_set_power(hub="openEMS", slave=1, power_w=0.0):
|
|
"""
|
|
706 = SetActivePowerEquals (float32 BE)
|
|
Laden = negativ, Entladen = positiv.
|
|
"""
|
|
|
|
ADDR_EQUALS = 706
|
|
|
|
def float_to_regs_be(val: float):
|
|
b = struct.pack(">f", float(val)) # Big Endian
|
|
return [(b[0] << 8) | b[1], (b[2] << 8) | b[3]] # [hi, lo]
|
|
|
|
try:
|
|
p = float(power_w)
|
|
except Exception:
|
|
p = 0.0
|
|
|
|
regs = float_to_regs_be(p)
|
|
log.info(f"OpenEMS ESS Ziel: {p:.1f} W -> {ADDR_EQUALS} -> {regs}")
|
|
|
|
service.call("modbus", "write_register", hub=hub, slave=slave, address=ADDR_EQUALS, value=regs)
|