Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add Buderus AM200 Support #573

Closed
OlliHein opened this issue Jul 16, 2022 · 29 comments
Closed

Add Buderus AM200 Support #573

OlliHein opened this issue Jul 16, 2022 · 29 comments
Labels
enhancement New feature or request
Milestone

Comments

@OlliHein
Copy link

OlliHein commented Jul 16, 2022

Requirement:
Im using GB172 together with SM200, RC310 and AM200. Currently AM200 is not available and cannot be detected.

System:
EMS-ESP Version: v3.4.1
Device (Platform / SDK): ESP32 / v3.3.5-1-g85c43024c
Heap (Free / Max Alloc): 118.816 / 62.172 bytes
Flash Chip (Size / Speed): 4.194.304 bytes / 40 MHz
File System (Used / Total): 20.480 / 327.680 bytes (307.200 bytes free)

Devices and Sensors:
Type;Description;;Entries
Boiler;GBx72/Trendline/Cerapur/Greenstar Si/27i;67
Thermostat;RC300/RC310/Moduline 3000/1010H/CW400/Sense II;34
Solar;SM200/MS200;42
Gateway;KM200/MB LAN 2;0
Unknown;unknown;0
Sensors;Attached EMS-ESP Sensors;0

As you can see there is an unknown device detected, should be AM200

Environment:
Im using picture 23 from Buderus "Installation instructions for contractors". If you need PDF, I can give you a attachment. But I think you already have it or can download it.
As you can see in picture 23 I am using following sensors, pumps and valves:
Sensors: TA1, TR1, TR2, TB4, TB1, TB3
Valves: VR1, VB1
Pump: PR1

I can give you all the data and values of the running system to better identify the devices.

At first I attached the current logfile of EMS-PSP32:
log_AM200.txt

with more data:
log2_AM200.txt

and also picture 23 from Buderus installation guide:
AM200

Hope that will you give a first overview of my running system.

It will be great if AM200 can be integrated in your system, thanks for dooing that ;)

Thanks
Oliver

@OlliHein OlliHein added the enhancement New feature or request label Jul 16, 2022
@MichaelDvP
Copy link
Contributor

MichaelDvP commented Jul 17, 2022

Please go to help-page and download the debug info (not settings/customizations), and post it here. We need the product-id and telegrams.
The log shows 3 telegrams from device 0x60.
0x054D seems to be Temperatures

00F5 00F7 8000 00D5 010F 01E5 8000 01DD 0000 8000
24.5 24.7      21.3 27.1 48.5      47.7

0x054E could be a status message, all valves off: 00 00 00 00 00 00
0x0550 could be settings: 00 FF 00 FF FF 00 0D 00 01 00 00 00 00 01 03 01 00 03 00 2D 19 C8 02 94 00 00 FF FF

For the temperatures note the temperatures shown in thermostat monitor screen and in terminal type read 60 54d
For the status telegrams you can use disgnostic menu, switch valves and check if and how telegram 0x54e changes.

For settings you have to change every setting for AM200 on the thermostat and check what changes in telegram 0x550.

With all this info we can add values/settings to emsesp.

@proddy : What device type? It is a special case of additional heating device, or in pos 10, as boiler replacement. I think best to add it as boiler and check for device-id 0x60? Like 0x70... for cascaded boilers.

PS:
@proddy Could you make the debug info on help page with a large button? Nobody uses it. And maybe move the settings/customization-download to system->upload (rename tab to up/download) to avoid confusion on the help page?

@proddy
Copy link
Contributor

proddy commented Jul 17, 2022

@proddy : What device type? It is a special case of additional heating device, or in pos 10, as boiler replacement. I think best to add it as boiler and check for device-id 0x60? Like 0x70... for cascaded boilers.

Agree, let's add it to boiler

PS: @proddy Could you make the debug info on help page with a large button? Nobody uses it. And maybe move the settings/customization-download to system->upload (rename tab to up/download) to avoid confusion on the help page?

Both good ideas. I'll try and think of a name for the up/download tab

@OlliHein
Copy link
Author

@MichaelDvP
At first I attached debug info file. You are right, it is hard to find.
BTW: I also put it into a zip file because .json is not supported as an attachment here ;)

emsesp_info.zip

Tomorrow I will investigate more time to find out values and status informations as you descibed. Thanks for such fast support ;)

@MichaelDvP
Copy link
Contributor

BTW: I also put it into a zip file because .json is not supported as an attachment here ;)

Good point, we should rename to emsesp_info.json.txt.

@OlliHein
Copy link
Author

OlliHein commented Jul 18, 2022

@MichaelDvP
Here are the temperature definitions:

[telegram] Rx: 60 00 FF 00 04 4D 0103 0108 8000 00C6 0127 0205 8000 0200 0000 8000 6C
                                 TB4  TR2       TA1  TR1  TB1  TB2* TB3

There are two 0x8000 I do not have connected. Should be TF1 and T1
*TB2 should be between TB1 and TB3 but it is also not connected in my installation

Pump detection is following in % (I used 0x55 to test)

[telegram] Rx: 60 00 FF 00 04 4E 55 01 C6
                                 PR1
[emsesp] No telegram type handler found for ID 0x54E (src 0x60)

Values of valves are not so easy to detect. I can only set On or Off in test mode. AM200 will adjust to any valve position depending on temperatures.

Let us start with temperatures and pump. What do you think?

@MichaelDvP
Copy link
Contributor

Ok, first test here: https://github.com/MichaelDvP/EMS-ESP32/releases
We can do some iterations and renames and if all works i'll do a PR.

@OlliHein
Copy link
Author

OlliHein commented Jul 18, 2022 via email

@MichaelDvP
Copy link
Contributor

Ups, forgot that boilers have a special handling when detecting. Hopefully it works now.

@OlliHein
Copy link
Author

OlliHein commented Jul 18, 2022

Great,
It works and I can read temperatures. I will try to check pump and values later.
Where did you get the informations about valves?

Current device Data:
AM200

The MQTT topics are not unique:

  • curflowtemp
  • currettemp

I think it must be:

  • altcurflowtemp
  • altcurrettemp

@MichaelDvP Can you check it please - thanks ;)

@proddy
Copy link
Contributor

proddy commented Jul 18, 2022

@OlliHein did you mark all those entries as favourites via the Customization page, or could this possibly be a new undiscovered bug?

@OlliHein
Copy link
Author

OlliHein commented Jul 18, 2022

I mark all needed entries as favourites and enable it for MQTT. I have curflowtemp twice in both boilers available but with different temperature values

@MichaelDvP I think the parent topic must be another one. The AM200 items are located at the default boiler not to the new alternative one.

@MichaelDvP
Copy link
Contributor

The valves are not correct at the moment, i expect them in telegram 54E like pump in offset 0, and read offset 1,2,3 as bool. But i think some are mixing valves an use percent-states. You have to ckeck the right values/positions.

The flow temp is TB4/TR2, the en-manual says "system flow temp" and "system return temp", i thought it is the same as main boiler curflowtemp, but it seems they are different. I'll rename and take the names from the manual.

For mqtt it we can use a tag "hsa" (heating source alternative) like cascaded boilers (hs1-hs16) and heating circuits (hc1-hc4).
This shows as json-nest in "boiler"-topic, or, if you choose non-nested format, as extra "boiler_hsa"-topic.

If it helps we can add the input to names i.e. "system flow temperature (TB4)", and/or use the input as mqtt-shortname: "tb4" instead of "sysflowtemp"?

I thought telegram 550 is settings, but it is broadcasted (uncommon for settings) and there are some values in manual like "set temp return" (65°C), "Set flow temp AHS" (75°C) ,etc i can not see. Try in terminal read 60 54F, maybe there are some values. (try also 551).

I've updated my build.

@OlliHein
Copy link
Author

TB4 and TR2 are the temperatures to control the VB1 valve as puffer bypass. TB4 should be the same as "system return temp".

The mqtt tag "hsa" is a good seperator to make the mqtt topic unique. See picture from mqtt explorer with the new EMS-ESP version you created. It works fine:

MQTT-ahs

If it helps we can add the input to names i.e. "system flow temperature (TB4)", and/or use the input as mqtt-shortname: "tb4" instead of "sysflowtemp"?
-> I think it is not nessessary

The valves are not correct at the moment, i expect them in telegram 54E like pump in offset 0, and read offset 1,2,3 as bool. But i think some are mixing valves an use percent-states. You have to ckeck the right values/positions.
-> ok, I will check it next weekend

I thought telegram 550 is settings, but it is broadcasted (uncommon for settings) and there are some values in manual like "set temp return" (65°C), "Set flow temp AHS" (75°C) ,etc i can not see. Try in terminal read 60 54F, maybe there are some values. (try also 551).
-> also next weekend

@OlliHein
Copy link
Author

@MichaelDvP Currently it is hard to find out changes of status information in logfile. You already have a great method to post status information with MQTT available in EMS-ESP. I mean it should be easy to write telegram data from bus depending of the devices (i.e. 0x60) to MQTT as a topic. The value should be the hex stream. If we have this, it will be easy to change data on a terminal and I can be seen directly as changes in MQTT explorer. Wat do you think?

@MichaelDvP
Copy link
Contributor

Emsesp has already a lot of tools to examine the bus, remember that emsesp is based on reverse engineering the bus.
Best to do from terminal with watch and read commands.
watch affects also syslog and weblog and can also be set by API or mqtt.
If you like to read a specific telegram via mqtt, use topic system with payload {"cmd":"send","data":"0B E0 FF 00 1B 04 4E"}
(same as read 60 54E or call system send "0B E0 FF 1B 04 4E" in terminal) and look at the topic response in your mqtt-broker.

@OlliHein
Copy link
Author

Yes, you are right, I hat to read documentation first. The terminal watch is a good way to examine bus data.
I will try it this weekend. Send you an update if I have the missing data / information's.

@OlliHein
Copy link
Author

OlliHein commented Jul 23, 2022

@MichaelDvP Here are the values of both valves:

I set buffer bypass (VB1) to off in diagnostic menu:

000+21:20:58.702 N 362: [emsesp] Thermostat(0x10) -> Boiler(0x60), ?(0x054F), data: 00 (offset 3)
000+21:21:14.321 N 363: [emsesp] Thermostat(0x10) <- Boiler(0x60), ?(0x054F), length: 0x01 (offset 3)
000+21:21:14.342 N 364: [emsesp] Boiler(0x60) -> Thermostat(0x10), ?(0x054F), data: 00 (offset 3)
000+21:21:25.569 N 366: [emsesp] Boiler(0x60) -> All(0x00), AmTemperatures(0x054D), data: 00 F1 00 F4 80 00 00 DD 01 0C 01 CF 80 00 01 C4 00 00 80 00
000+21:21:25.771 N 367: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 00 00 00 00 00 00
000+21:21:26.454 N 368: [emsesp] Boiler(0x60) -> All(0x00), AmSettings(0x0550), data: 00 FF FF FF FF FF FF 00 02 00 00 00 00 00 03 00 00 03 00 2D 19 C8 02 94 00
000+21:21:26.654 N 369: [emsesp] Boiler(0x60) -> All(0x00), AmSettings(0x0550), data: 00 FF FF (offset 25)

I set buffer bypass (VB1) to open in diagnostic menu:

000+21:12:14.200 N 170: [emsesp] Thermostat(0x10) -> Boiler(0x60), ?(0x054F), data: 01 (offset 3)
000+21:12:15.413 N 171: [emsesp] Boiler(0x60) -> All(0x00), ?(0x054F), data: 01 (offset 3)
000+21:12:15.598 N 172: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 08 (offset 1)
000+21:12:17.514 N 173: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 03 (offset 5)
000+21:12:18.562 N 174: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 04 (offset 5)
000+21:12:20.153 N 176: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 06 (offset 5)
000+21:12:22.421 N 177: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 08 (offset 5)
000+21:12:24.176 N 178: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 0B (offset 5)
000+21:12:25.241 N 179: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 00 08 00 00 00 0C
000+21:12:25.486 N 180: [emsesp] Boiler(0x60) -> All(0x00), AmTemperatures(0x054D), data: 00 F1 00 F4 80 00 00 DD 01 0D 01 CF 80 00 01 C4 00 00 80 00
000+21:12:27.739 N 181: [emsesp] Boiler(0x60) -> All(0x00), AmSettings(0x0550), data: 00 FF FF FF FF FF FF 00 02 00 00 00 00 00 03 00 00 03 00 2D 19 C8 02 94 00
000+21:12:27.928 N 182: [emsesp] Boiler(0x60) -> All(0x00), AmSettings(0x0550), data: 00 FF FF (offset 25)
000+21:12:30.398 N 183: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 11 (offset 5)
000+21:12:32.761 N 184: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 13 (offset 5)
000+21:12:33.841 N 185: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 15 (offset 5)
000+21:12:35.862 N 187: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 17 (offset 5)
000+21:12:37.037 N 188: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 18 (offset 5)
000+21:12:37.896 N 189: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 19 (offset 5)
000+21:12:39.455 N 190: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 1B (offset 5)
000+21:12:41.199 N 191: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 1D (offset 5)
000+21:12:43.027 N 192: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 1F (offset 5)
000+21:12:44.426 N 193: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 21 (offset 5)
000+21:12:45.839 N 194: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 22 (offset 5)
000+21:12:47.296 N 195: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 24 (offset 5)
000+21:12:48.461 N 196: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 25 (offset 5)
000+21:12:49.649 N 197: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 26 (offset 5)
000+21:12:51.107 N 198: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 29 (offset 5)
000+21:12:51.884 N 199: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 29 (offset 5)
000+21:12:53.466 N 200: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 2B (offset 5)
000+21:12:55.201 N 201: [emsesp] Thermostat(0x10) <- Boiler(0x60), ?(0xF9), length: 0x11
000+21:12:55.275 N 202: [emsesp] Boiler(0x60) -> Thermostat(0x10), ?(0xF9), data: FF 04 4F 03 47 00 00 00 00 00 00 00 00 00 07 00 02 00 07 00 01
000+21:12:55.549 N 203: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 2D (offset 5)
000+21:12:55.732 N 204: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 2D (offset 5)
000+21:12:56.675 N 205: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 2E (offset 5)
000+21:12:59.593 N 206: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 31 (offset 5)
000+21:13:01.183 N 207: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 34 (offset 5)
000+21:13:02.016 N 208: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 34 (offset 5)

I set buffer bypass (VB1) to close in diagnostic menu:

000+21:13:46.792 N 245: [emsesp] Thermostat(0x10) -> Boiler(0x60), ?(0x054F), data: 02 (offset 3)
000+21:13:47.463 N 246: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 62 (offset 5)
000+21:13:47.652 N 247: [emsesp] Boiler(0x60) -> All(0x00), ?(0x054F), data: 02 (offset 3)
000+21:13:48.648 N 248: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 10 (offset 1)
000+21:13:48.832 N 249: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 61 (offset 5)
000+21:13:50.598 N 250: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 5F (offset 5)
000+21:13:51.758 N 251: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 5E (offset 5)
000+21:13:53.519 N 252: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 5C (offset 5)
000+21:13:54.376 N 253: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 5B (offset 5)
000+21:13:56.145 N 254: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 58 (offset 5)
000+21:13:57.061 N 255: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 58 (offset 5)
000+21:13:59.195 N 256: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 55 (offset 5)
000+21:14:01.203 N 257: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 53 (offset 5)
000+21:14:01.899 N 258: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 53 (offset 5)
000+21:14:03.126 N 259: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 51 (offset 5)
000+21:14:04.365 N 260: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 50 (offset 5)
000+21:14:05.649 N 261: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 4E (offset 5)
000+21:14:07.439 N 262: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 4C (offset 5)
000+21:14:08.144 N 263: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 4B (offset 5)
000+21:14:10.687 N 264: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 49 (offset 5)
000+21:14:12.074 N 265: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 48 (offset 5)
000+21:14:13.405 N 266: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 46 (offset 5)
000+21:14:15.831 N 267: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 43 (offset 5)
000+21:14:17.788 N 268: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 41 (offset 5)
000+21:14:19.995 N 270: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 3F (offset 5)
000+21:14:22.348 N 271: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 3C (offset 5)
000+21:14:24.283 N 272: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 39 (offset 5)
000+21:14:25.381 N 274: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 00 10 00 00 00 38
000+21:14:25.627 N 275: [emsesp] Boiler(0x60) -> All(0x00), AmTemperatures(0x054D), data: 00 F1 00 F4 80 00 00 DD 01 0D 01 CF 80 00 01 C4 00 00 80 00
000+21:14:27.830 N 276: [emsesp] Boiler(0x60) -> All(0x00), AmSettings(0x0550), data: 00 FF FF FF FF FF FF 00 02 00 00 00 00 00 03 00 00 03 00 2D 19 C8 02 94 00
000+21:14:28.025 N 277: [emsesp] Boiler(0x60) -> All(0x00), AmSettings(0x0550), data: 00 FF FF (offset 25)
000+21:14:29.175 N 278: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 34 (offset 5)
000+21:14:31.164 N 279: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 32 (offset 5)

I set AVE Valve (VR1) off in diagnostic menu

000+21:17:10.061 N 326: [emsesp] Thermostat(0x10) -> Boiler(0x60), ?(0x054F), data: 00 (offset 2)
000+21:17:25.209 N 328: [emsesp] Thermostat(0x10) <- Boiler(0x60), ?(0x054F), length: 0x01 (offset 2)
000+21:17:25.230 N 329: [emsesp] Boiler(0x60) -> Thermostat(0x10), ?(0x054F), data: 00 (offset 2)
000+21:17:25.734 N 330: [emsesp] Boiler(0x60) -> All(0x00), AmTemperatures(0x054D), data: 00 F1 00 F4 80 00 00 DD 01 0D 01 CF 80 00 01 C4 00 00 80 00
000+21:17:25.933 N 331: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 00 10 00 00 00 00
000+21:17:27.975 N 332: [emsesp] Boiler(0x60) -> All(0x00), AmSettings(0x0550), data: 00 FF FF FF FF FF FF 00 02 00 00 00 00 00 03 00 00 03 00 2D 19 C8 02 94 00
000+21:17:28.164 N 333: [emsesp] Boiler(0x60) -> All(0x00), AmSettings(0x0550), data: 00 FF FF (offset 25)
000+21:17:42.355 N 334: [emsesp] Boiler(0x60) -> All(0x00), ErrorMessage(0xBF), data: 60 E4 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00

I set AVE Valve (VR1) open in diagnostic menu

000+21:22:48.534 N 376: [emsesp] Thermostat(0x10) -> Boiler(0x60), ?(0x054F), data: 01 (offset 2)
000+21:22:49.257 N 377: [emsesp] Boiler(0x60) -> All(0x00), ?(0x054F), data: 01 (offset 2)
000+21:22:50.286 N 378: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 02 (offset 1)
000+21:22:50.468 N 379: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 02 (offset 4)
000+21:22:51.676 N 380: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 03 (offset 4)
000+21:22:53.115 N 381: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 05 (offset 4)
000+21:22:54.195 N 382: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 06 (offset 4)
000+21:22:55.587 N 383: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 07 (offset 4)
000+21:22:56.548 N 384: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 08 (offset 4)
000+21:22:58.741 N 385: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 0B (offset 4)
000+21:22:59.470 N 386: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 0C (offset 4)
000+21:23:00.265 N 387: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 0D (offset 4)
000+21:23:02.017 N 388: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 0E (offset 4)
000+21:23:02.727 N 389: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 0F (offset 4)
000+21:23:04.648 N 390: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 11 (offset 4)
000+21:23:05.463 N 391: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 12 (offset 4)
000+21:23:06.927 N 392: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 13 (offset 4)
000+21:23:07.821 N 393: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 15 (offset 4)
000+21:23:09.374 N 394: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 17 (offset 4)
000+21:23:10.605 N 395: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 18 (offset 4)
000+21:23:12.038 N 396: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 19 (offset 4)
000+21:23:13.815 N 397: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 1B (offset 4)
000+21:23:13.998 N 398: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 1B (offset 4)
000+21:23:16.679 N 399: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 1F (offset 4)
000+21:23:19.018 N 400: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 21 (offset 4)
000+21:23:21.550 E 401: [telegram] Last Tx Read operation failed after 3 retries. Ignoring request: 0B 88 14 00 1B
000+21:23:22.001 N 402: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 24 (offset 4)
000+21:23:23.067 N 403: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 26 (offset 4)
000+21:23:24.964 N 404: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 27 (offset 4)
000+21:23:25.195 N 405: [emsesp] Boiler(0x60) -> All(0x00), AmTemperatures(0x054D), data: 00 F1 00 F4 80 00 00 DD 01 0C 01 CF 80 00 01 C4 00 00 80 00
000+21:23:25.995 N 406: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 00 02 00 00 29 00
000+21:23:26.264 N 407: [emsesp] Boiler(0x60) -> All(0x00), AmSettings(0x0550), data: 00 FF FF FF FF FF FF 00 02 00 00 00 00 00 03 00 00 03 00 2D 19 C8 02 94 00
000+21:23:27.024 N 408: [emsesp] Boiler(0x60) -> All(0x00), AmSettings(0x0550), data: 00 FF FF (offset 25)
000+21:23:27.206 N 409: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 2B (offset 4)
000+21:23:29.392 N 410: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 2D (offset 4)
000+21:23:29.575 N 411: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 2D (offset 4)
000+21:23:30.651 N 412: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 2E (offset 4)
000+21:23:32.673 N 413: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 30 (offset 4)
000+21:23:33.734 N 414: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 31 (offset 4)
000+21:23:36.290 N 415: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 35 (offset 4)
000+21:23:38.909 N 416: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 37 (offset 4)
000+21:23:39.711 E 417: [telegram] Last Tx Read operation failed after 3 retries. Ignoring request: 0B 88 26 00 1B
000+21:23:40.238 N 418: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 39 (offset 4)
000+21:23:41.191 N 419: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 3A (offset 4)
000+21:23:42.164 N 420: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 3B (offset 4)
000+21:23:43.676 N 421: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 3D (offset 4)
000+21:23:45.744 N 422: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 3F (offset 4)
000+21:23:46.891 N 423: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 40 (offset 4)

I set AVE Valve (VR1) close in diagnostic menu

000+21:24:15.890 N 445: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 60 (offset 4)
000+21:24:16.632 N 446: [emsesp] Thermostat(0x10) -> Boiler(0x60), ?(0x054F), data: 02 (offset 2)
000+21:24:18.011 N 447: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 60 (offset 4)
000+21:24:18.194 N 448: [emsesp] Boiler(0x60) -> All(0x00), ?(0x054F), data: 02 (offset 2)
000+21:24:18.379 N 449: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 04 (offset 1)
000+21:24:19.674 N 450: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 5E (offset 4)
000+21:24:20.762 N 451: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 5D (offset 4)
000+21:24:21.903 N 453: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 5C (offset 4)
000+21:24:23.824 N 454: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 59 (offset 4)
000+21:24:24.905 N 455: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 58 (offset 4)
000+21:24:25.142 N 456: [emsesp] Boiler(0x60) -> All(0x00), AmTemperatures(0x054D), data: 00 F1 00 F4 80 00 00 DD 01 0C 01 CF 80 00 01 C4 00 00 80 00
000+21:24:26.256 N 457: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 00 04 00 00 56 00
000+21:24:26.530 N 458: [emsesp] Boiler(0x60) -> All(0x00), AmSettings(0x0550), data: 00 FF FF FF FF FF FF 00 02 00 00 00 00 00 03 00 00 03 00 2D 19 C8 02 94 00
000+21:24:27.534 N 459: [emsesp] Boiler(0x60) -> All(0x00), AmSettings(0x0550), data: 00 FF FF (offset 25)
000+21:24:27.723 N 460: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 55 (offset 4)
000+21:24:29.081 N 461: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 53 (offset 4)
000+21:24:30.983 N 462: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 52 (offset 4)
000+21:24:31.997 N 463: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 51 (offset 4)
000+21:24:33.025 N 465: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 4E (offset 4)
000+21:24:34.781 N 466: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 4D (offset 4)
000+21:24:35.822 N 467: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 4C (offset 4)
000+21:24:38.593 N 468: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 49 (offset 4)
000+21:24:41.144 N 469: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 45 (offset 4)
000+21:24:42.285 N 470: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 44 (offset 4)
000+21:24:44.293 N 472: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 42 (offset 4)
000+21:24:45.188 N 473: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 41 (offset 4)
000+21:24:46.163 N 474: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 40 (offset 4)
000+21:24:48.540 N 475: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 3E (offset 4)
000+21:24:52.252 N 476: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 39 (offset 4)
000+21:24:53.751 N 477: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 38 (offset 4)
000+21:24:55.097 N 478: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 36 (offset 4)
000+21:24:57.914 N 479: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 34 (offset 4)
000+21:24:59.021 N 480: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 33 (offset 4)
000+21:25:00.413 N 481: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 30 (offset 4)
000+21:25:02.039 N 482: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 2E (offset 4)
000+21:25:02.858 N 483: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 2E (offset 4)
000+21:25:04.887 N 484: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 2C (offset 4)
000+21:25:05.075 N 485: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 2B (offset 4)
000+21:25:06.929 N 486: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 2A (offset 4)
000+21:25:08.554 N 487: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 27 (offset 4)
000+21:25:09.486 N 488: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 26 (offset 4)
000+21:25:10.376 N 489: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 25 (offset 4)
000+21:25:11.946 N 490: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 24 (offset 4)
000+21:25:12.762 N 491: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 23 (offset 4)
000+21:25:14.220 N 492: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 21 (offset 4)
000+21:25:15.625 N 493: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 20 (offset 4)
000+21:25:18.595 N 494: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 1C (offset 4)
000+21:25:19.888 N 495: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 1B (offset 4)
000+21:25:20.948 N 496: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 1A (offset 4)
000+21:25:22.047 N 497: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 18 (offset 4)
000+21:25:23.003 N 499: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 18 (offset 4)
000+21:25:24.201 N 500: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 16 (offset 4)
000+21:25:25.373 N 501: [emsesp] Boiler(0x60) -> All(0x00), AmTemperatures(0x054D), data: 00 F1 00 F4 80 00 00 DD 01 0C 01 CF 80 00 01 C4 00 00 80 00
000+21:25:25.573 N 502: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 00 04 00 00 15 00
000+21:25:26.430 N 503: [emsesp] Boiler(0x60) -> All(0x00), AmSettings(0x0550), data: 00 FF FF FF FF FF FF 00 02 00 00 00 00 00 03 00 00 03 00 2D 19 C8 02 94 00
000+21:25:26.626 N 504: [emsesp] Boiler(0x60) -> All(0x00), AmSettings(0x0550), data: 00 FF FF (offset 25)
000+21:25:28.173 N 505: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 11 (offset 4)
000+21:25:29.969 N 506: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 10 (offset 4)
000+21:25:30.958 N 508: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 0F (offset 4)
000+21:25:31.998 N 509: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 0E (offset 4)
000+21:25:33.919 N 510: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 0C (offset 4)
000+21:25:34.981 N 511: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 0B (offset 4)
000+21:25:37.293 N 513: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 07 (offset 4)
000+21:25:39.872 N 514: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 05 (offset 4)
000+21:25:41.038 N 515: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 03 (offset 4)
000+21:25:42.008 N 516: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 03 (offset 4)
000+21:25:43.921 N 518: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 01 (offset 4)
000+21:25:44.778 N 519: [emsesp] Boiler(0x60) -> All(0x00), AmStatus(0x054E), data: 00 (offset 4)

@MichaelDvP
Copy link
Contributor

Thx, so we have a telgram 0x54F for settings, please use read 60 54F to get the whole telegram.

In statusMessage 0x54E we have now in offset:
0: pumpMod (percent)
1: bitfield: 01-pump on, 02 -VR1 opening, 04-VR1 closing, 08-VB1 opening, 10-VB1 closing
4: VR1 percent open
5: VB1 percent open
message 0x54E is only 6 bytes long, so only offsets 2/3 missing, i think for VR2 and OA

and in 0x54F commands for
2: VR1: 0-stop, 1-open, 2-close
3: VB1: 0-stop, 1-open. 2-close

I think the main information to show in ems-esp are the percent values for pump and valves. Is it usefull also to add entities for opening/closing and pump on/off?
Is there a usecase for setting the valves via ems-esp? I think in normal operation the valves are set by module depending on temperature settings and manual setting will be overwritten.
For tweaking the heating it is imo more usefull to find and manipulate the values of "set return temp", "boiler release wait time" and "Hyst".

@OlliHein
Copy link
Author

Is it usefull also to add entities for opening/closing and pump on/off?

I think also the percent values are enought. 0=close; >1-99 = opening; 100=open
For the pump is also clear 0=off; >1 - 100 = running

Is there a usecase for setting the valves via ems-esp?

I don't think so and I do not need it, AM200 should control valves.

Did you add the new valves informations to the new boiler device? I miss the data in last update v3.4.2b4?
There are also entries of:

  • collector shutdown
  • cyl heated
    2022-07-25 20_21_02-Window

@MichaelDvP
Copy link
Contributor

Did you add the new valves informations to the new boiler device? I miss the data in last update v3.4.2b4?

I have not updated yet, i'm waiting for the complete 54F telegram.

There are also entries of:
collector shutdown
cyl heated

Strange, these are from solar class, don't know howthey came to boiler, maybe something from browser cache?

@OlliHein
Copy link
Author

OlliHein commented Jul 26, 2022

@MichaelDvP
here are the state settings from telegram 54F:

ems-esp:$ read 60 54f
001+00:49:45.584 I 2: [emsesp] Boiler(0x60) -> Me(0x0B), ?(0x054F), data: 08 00 00 00 00 00 00
                                                                          AA BB CC DD EE FF GG

ems-esp:$ read 60 54f
AA=AHS return pump in %
BB=
CC=AHS mixer return rise: off(00), open(01), closed(02)
DD=Mixer buffer bypass: of(00), open(01), closed(02)
EE=
FF=
GG=Boiler blocking: 0ff(0),On(01)

and there is another telegram 54C for configuration settings:

000+22:36:33.419 N 63: [emsesp] Me(0x0B) <- Boiler(0x60), ?(0x054C), length: 0x20
000+22:36:33.534 I 64: [emsesp] Boiler(0x60) -> Me(0x0B), ?(0x054C), data: 00 01 01 00 01 00 41 4B 00 5A 00 5A 00 01 05 3C 00 00 5A 00 01 23 00
                                                                           BB FF JJ DD CC    GG II    KK       AA       PP MM NN       LL EE

AA=Alternate heat source activation: No(00),Yes(01)
BB=Relay output config: Aus(00)/Keelbypass(01)
CC=Buffer primary pump->Config pump: No(00),Yes(01)

Buffer primary pump (PR1)
DD=Output for pump: On/Off(00),PWM(01),PWM invers(02)
EE=Min output pump (%)

Mixer return AHS (VR1)
FF=AHS return temp rise: No(00),Yes(01)
GG=Set temp return (°C)
HH=Mixer run time (s)

Buffer
II=Set flow temp AHS (°C)
JJ=Puffer bypass: No(00), Mischer(01), Ventil(02)
KK=Bypass mixer run time: [time] (s)
LL=Konfig WW-Speicher Monovalent(01), Bivalent(02)

Blocking mode
MM=Config htg. blocking mode: No(00),Automatic(01),Always block02)
NN=Config of block terminal: NO(00), NC(01)
OO=Hyst. for bolier block (K)
PP=Boiler release wait time

Have fun implementing it ;)

Strange, these are from solar class, don't know howthey came to boiler, maybe something from browser cache?
Yes, you are right it was the cache :(

@MichaelDvP
Copy link
Contributor

Nice findings, good work. So 54F is only testing mode and 54C are settings. It will take some days to implement all with commands.
Im missing the positions of HH (maybe one of th 5A in offset 11 or 18) and OO (default is 5 deg, so i think offset 14).
The mixer runtime default in manual is 120s in range 0..600, there must be a factor, or it is a 16 bit value: KK pos 8/9 and HH pos 10,11? Your setting is 90s (5A) for HH and KK, right?

MichaelDvP added a commit to MichaelDvP/EMS-ESP32 that referenced this issue Jul 30, 2022
@MichaelDvP
Copy link
Contributor

First implementation with the mentioned assumptions is on my GH. Please check.

@OlliHein
Copy link
Author

OlliHein commented Aug 4, 2022

Hi @MichaelDvP ,
Sorry for the delay, I was bussy this week.
I forgot to write positions for HH and OO
Here are a corrected output of values:

Boiler(0x60) -> Me(0x0B), ?(0x054C), data: 00 01 01 00 01 00 41 4B 00 5A 00 5A 00 01 05 3C 00 00 5A 00 01 23 00
                                           BB FF JJ DD CC    GG II HA HH    KK AA    OO PP MM NN       LL EE

KK pos 8/9 and HH pos 10,11? Your setting is 90s (5A) for HH and KK, right?

-> I corrected settings of HH, KK and OO. I did a mistake. Yes, my setting of (HH and KK) are both 90s

I updated my ems-esp with new version and it look nice with your current implementation ;)

HA HH 
00 5A = 90s
01 30 = 304s
01 CC = 460s
02 55 = 597s

Let us coninue - thx

@MichaelDvP
Copy link
Contributor

KK pos 8/9 and HH pos 10,11? Your setting is 90s (5A) for HH and KK, right?

Now you have marked HH to (8/)9 and KK to (10/)11, Check which is first.

@OlliHein
Copy link
Author

OlliHein commented Aug 4, 2022

Yes KK is pos 8/9 and HH is pos 10/11 I cheked it twice. It was a mistake in my first documentation.
My settings are 90s (5A) for HH and KK

@OlliHein
Copy link
Author

OlliHein commented Aug 6, 2022

@MichaelDvP I updated following post with lager data to show the overflow of a 255s value
#573 (comment)

@OlliHein
Copy link
Author

@MichaelDvP Do you have enough information to bring AM200 running? If you need more data I can update you.

@proddy
Copy link
Contributor

proddy commented Aug 20, 2022

@OlliHein I've merged Michael's AM200 additions to the latest dev branch/release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

3 participants