SAT icon indicating copy to clipboard operation
SAT copied to clipboard

SAT integration with ems-esp junkers/bosch - bad call command

Open jlk3281 opened this issue 4 months ago • 3 comments

Hi,

I'm using EMS-ESP to control my Junkers GCW 2200 boiler. I used my own scripts that sent commands to the EMS-ESP gateway to simulate the heating curve based on my own outdoor temperature sensor. Now I wanted to use Smart Auto Tune, and after the initial setup, I see two problems that boil down to the same thing:

  1. Incorrect command for setting the supply temperature:
[command] Called command boiler/heatingoff (wymuś wyłączenie grzania) with value off
[command] Called command boiler/selfflowtemp (wybrana temperatura zasilania) with value 55.00
[command] Called command boiler/burnmaxpower (maksymalna moc źródła ciepła) with value 100

As you can see above, we have "boiler/selfflowtemp" here, but unfortunately, changing this value doesn't change the boiler's value at all. I tried directly This doesn't work with ems-esp for this boiler either.

This causes automatic calibration to take forever...

  1. Incorrect command for setting the supply temperature in the simulated SAT thermostat.

Skipping calibration, I manually configured the SAT (there's no option to select Bosch/Junkers boilers; I selected 'simulator'). Then, in the SAT thermostat, I set the temperature to, for example, 23 degrees Celsius. The logs show that 'boiler/selfflowtemp' is being executed, which doesn't work.

In this model, and probably many others, based on how I previously controlled the boiler, the following should be called:

[command] Called command boiler/heatingtemp (temperatura grzania) with a value of 35.

That is, 'boiler/heatingtemp'. Changing this value only changes the central heating supply temperature in this boiler.

Therefore, changing this value would probably fix the automatic calibration and also the SAT thermostat control.

jlk3281 avatar Sep 28 '25 15:09 jlk3281

Hi, the EMS/ESP coordinator was created based on this discussion: https://github.com/emsesp/EMS-ESP32/discussions/2257, in collaboration with the creators of the EMS/ESP gateway, since we don’t own an EMS-capable boiler.

You can also try manually setting the overshoot protection value in the system calibration card for example, something around 45–50.

In the latest dev version, we’ve added the option other in the manufacturer card, which is more suitable for your case.

sergeantd83 avatar Sep 29 '25 04:09 sergeantd83

I used the latest version from the 'develop' branch, set my device as 'other', but it still doesn't work... namely the thermostat (climate). Logs below:

2025-09-29T10:15:15.158047+02:00 ems-esp command 000+16:38:44.637 I 51707: Called command boiler/selfflowtemp (wybrana temperatura zasilania) with value 46.10
2025-09-29T10:15:16.084611+02:00 ems-esp command 000+16:38:45.447 I 51713: Called command boiler/selfflowtemp (wybrana temperatura zasilania) with value 46.10
2025-09-29T10:15:16.286156+02:00 ems-esp command 000+16:38:45.638 I 51714: Called command boiler/burnmaxpower (maksymalna moc źródła ciepła) with value 100
2025-09-29T10:15:16.948308+02:00 ems-esp command 000+16:38:46.455 I 51717: Called command boiler/burnmaxpower (maksymalna moc źródła ciepła) with value 100
2025-09-29T10:15:17.135306+02:00 ems-esp command 000+16:38:46.643 I 51718: Called command boiler/heatingoff (wymuś wyłączenie grzania) with value off
2025-09-29T10:15:17.952213+02:00 ems-esp command 000+16:38:47.460 I 51721: Called command boiler/heatingoff (wymuś wyłączenie grzania) with value off

It doesn't turn on the heating at all, it should call the command to turn the heating on and off:

Called command boiler/heatingactivated (system c.o.) with value włączono
Called command boiler/heatingactivated (system c.o.) with value wyłączono

And to change the temperature, as I wrote earlier:

Called command boiler/heatingtemp (temperatura grzania) with value 42

Would it be possible How can I handle this? I'm sure there are many boilers that work like mine. If you need tests or logs, I'm available. Perhaps we should revisit https://github.com/emsesp/EMS-ESP32/discussions/2257 with @proddy?

p.s I changed temporary local like this:

➜  sat diff -u mqtt/ems_org.py mqtt/ems.py    
--- mqtt/ems_org.py     2025-09-29 11:00:54.586008243 +0200
+++ mqtt/ems.py 2025-09-29 10:53:17.687582900 +0200
@@ -13,7 +13,8 @@
 DATA_BOILER_DATA = "boiler_data"
 DATA_FLAME_ACTIVE = "burngas"
 DATA_DHW_SETPOINT = "dhw/seltemp"
-DATA_CONTROL_SETPOINT = "selflowtemp"
+DATA_CONTROL_SETPOINT = "heatingtemp"
+#DATA_CONTROL_SETPOINT = "selflowtemp"
 DATA_REL_MOD_LEVEL = "curburnpow"
 DATA_BOILER_TEMPERATURE = "curflowtemp"
 DATA_RETURN_TEMPERATURE = "rettemp"
@@ -108,7 +109,8 @@
         return [DATA_BOILER_DATA]
 
     async def async_set_control_setpoint(self, value: float) -> None:
-        await self._publish_command(f'{{"cmd": "selflowtemp", "value": {0 if value == 10 else value}}}')
+        #await self._publish_command(f'{{"cmd": "selflowtemp", "value": {0 if value == 10 else value}}}')
+        await self._publish_command(f'{{"cmd": "heatingtemp", "value": {0 if value == 10 else value}}}')
 
         await super().async_set_control_setpoint(value)
 
@@ -122,7 +124,8 @@
         await super().async_set_control_thermostat_setpoint(value)
 
     async def async_set_heater_state(self, state: DeviceState) -> None:
-        await self._publish_command(f'{{"cmd": "heatingoff", "value": "{DATA_OFF if state == DeviceState.ON else DATA_ON}"}}')
+        #await self._publish_command(f'{{"cmd": "heatingoff", "value": "{DATA_OFF if state == DeviceState.ON else DATA_ON}"}}')
+        await self._publish_command(f'{{"cmd": "heatingactivated", "value": "{DATA_ON if state == DeviceState.ON else DATA_OFF}"}}')
 
         await super().async_set_heater_state(state)

and now working, but heating curve doesn't work that's my impression... it's still setting 45 degrees Celsius, or should it calculate the temperature after some time?

When the internal sensor reaches the set temperature on the SAT, I see the following call:

called command boiler/heatingtemp (temperatura grzania) with a value of 0

which automatically gives 30 degrees Celsius as the lowest temperature in my furnace.

jlk3281 avatar Sep 29 '25 08:09 jlk3281

Hi

In the thread https://github.com/emsesp/EMS-ESP32/discussions/2641#discussioncomment-14595308 it was explained that the problem was with my boiler type, so SAT should still set 'selfflowtemp'. However, it seems that for some boilers 'selfflowtemp' needs to be set frequently, in my case every 5 seconds

and please look on https://github.com/emsesp/EMS-ESP32/discussions/2641#discussioncomment-14611481

@sergeantd83 FYI

jlk3281 avatar Oct 05 '25 10:10 jlk3281