You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I'm running a small home automation setup with a Marstek B2500-D (HMJ-2, FW V113) and a Hoymiles HM-1500 microinverter monitored via OpenDTU. Since I don't have a Shelly on my smart meter, I built a Home Assistant automation that pauses B2500 feed-in whenever two specific HM-1500 inputs (my street-facing panels) together exceed 250W — basically preventing the B2500 from pushing power when the panels on that side are already delivering enough.
The automation is working, but I had to figure out the raw MQTT payload format by sniffing what the Marstek app sends. I ended up using cd=20 with the full timer config string (e.g. a1=0 to disable, a1=1 to enable), published to hame_energy/HMJ-2/App/<mac>/ctrl via hame-relay with inverse_forwarding_device_ids set.
It works, but only kind of — after sending a few commands the B2500 became completely unresponsive via MQTT and the app and I had to physically restart it. So I'm not confident I'm using the right commands here, and I'd love some clarity before I keep hammering the device.
My questions:
Is cd=20 the correct/recommended command for temporarily toggling feed-in (timer on/off) without writing to EEPROM?
Is there a cleaner way to just enable/disable a specific timer period without sending the full config string every time?
Are there any hm2mqtt control topics for HMJ-2 that handle this more elegantly? I only see status topics in my broker, no control topics.
Could sending repeated cd=20 commands cause the device to become unresponsive? Is there a safe rate limit or a better approach?
Would love to know if there's a more robust approach. Happy to share my HA automation YAML if useful for docs or examples 🙂
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
Hey everyone,
I'm running a small home automation setup with a Marstek B2500-D (HMJ-2, FW V113) and a Hoymiles HM-1500 microinverter monitored via OpenDTU. Since I don't have a Shelly on my smart meter, I built a Home Assistant automation that pauses B2500 feed-in whenever two specific HM-1500 inputs (my street-facing panels) together exceed 250W — basically preventing the B2500 from pushing power when the panels on that side are already delivering enough.
The automation is working, but I had to figure out the raw MQTT payload format by sniffing what the Marstek app sends. I ended up using
cd=20with the full timer config string (e.g.a1=0to disable,a1=1to enable), published tohame_energy/HMJ-2/App/<mac>/ctrlvia hame-relay withinverse_forwarding_device_idsset.It works, but only kind of — after sending a few commands the B2500 became completely unresponsive via MQTT and the app and I had to physically restart it. So I'm not confident I'm using the right commands here, and I'd love some clarity before I keep hammering the device.
My questions:
cd=20the correct/recommended command for temporarily toggling feed-in (timer on/off) without writing to EEPROM?cd=20commands cause the device to become unresponsive? Is there a safe rate limit or a better approach?Would love to know if there's a more robust approach. Happy to share my HA automation YAML if useful for docs or examples 🙂
Thanks for the amazing work on this project!
Beta Was this translation helpful? Give feedback.
All reactions