# /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)