mirror of
https://github.com/emsesp/EMS-ESP32.git
synced 2025-12-08 00:39:50 +03:00
180 lines
7.0 KiB
Markdown
180 lines
7.0 KiB
Markdown
|
|
### General
|
|
|
|
The SM100 (and SM200) is a device to enhance Buderus heatings with the ability to earn solar energy using solar collectors and spend these energy into a water reservoir.
|
|
There are different scenarios available to add these module into a heating.
|
|
|
|
Protocol: The SM100 device communicates using the EMS+ protocol. That means it sends and interprets EMS and also EMS+ messages.
|
|
|
|
External Link to the german product page of SM100: https://www.buderus.de/de/produkte/catalogue/alle-produkte/7607_solarmodul-logamatic-sm100
|
|
|
|
|
|
The following reverse protocol engineering based on a Buderus GB172 heating combined with a water reservoir in one heating circuit. Other combinations, configurations and protocol types are not covered.
|
|
|
|
Also refer to https://github.com/proddy/EMS-ESP/issues/267 for the SM200
|
|
|
|
|
|
### Decoded EMS+ Messages
|
|
|
|
How to interpret the tables below. Take an example telegram:
|
|
```
|
|
EMS+ telegram type
|
|
->| |<-
|
|
30 00 FF 00 02 62 01 FB 01 9E 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 80 00 2B
|
|
data block --> 00 01 02 03 04 06 07 08 09 0A...
|
|
^
|
|
|
|
|
start of data
|
|
```
|
|
|
|
The data starts at the 7th byte straight after the typeID - here `x0262`. Position 0 is the first byte of the data block.
|
|
|
|
|
|
### Telegram overview
|
|
|
|
| EMS+ telegram type | description | schedule | number of data bytes in decimal |
|
|
| - | - | - | - |
|
|
| x0262 | Temperatures | every minute | 26 (max. 24 in one telegram) |
|
|
| x0263 | unknown | every minute | 12 |
|
|
| x0264 | Solar pump modulation | every minute | 17 |
|
|
| x0266 | unknown | every minute | 04 |
|
|
| x0268 | unknown | every minute | 02 |
|
|
| x026A | Solar pump on/off | every minute | 12 |
|
|
| x028E | Solar energy earnings | every hour | 15 |
|
|
|
|
### Telegram details
|
|
|
|
|
|
| Telegram type | data position (0..n) in decimal | description | format |
|
|
| - | - | - | - |
|
|
| x0262 | 0+1 | T1 - Temperature of solar collector `[°C]` | 2 bytes |
|
|
| x0262 | 2+3 | T2 - Temperature of bottom water reservoir 1 `[°C]` | 2 bytes |
|
|
| x0262 | 16+17 | T5 - Temperature of bottom water reservoir 2 `[°C]` | 2 bytes |
|
|
| x0264 | 9 | Solar pump modulation `[%]` | 1 byte |
|
|
| x026A | 10 | PS1 - Solar pump: on=`04` and off=`03` | 1 byte |
|
|
| x026A | 4 | VS2 - Cylinder select value: cyl#2=`04` and cyl#1=`03` | 1 byte |
|
|
| x028E | 2+3 | Solar energy earning last hour `/10` `[Wh]` | 2 byte |
|
|
| x028E | 6+7 | Solar energy earning today `[Wh]` | 2 byte |
|
|
| x028E | 10+11 | Solar energy earning total `/10` `[kWh]` | 2 byte |
|
|
|
|
|
|
### Examples
|
|
|
|
Solar pump status and changes:
|
|
|
|
1.Status solar pump is currently off: see x026A data byte 0A "03" and x0264 data byte 9 "00"
|
|
```
|
|
SM -> all, type 0x026A telegram: 30 00 FF 00 02 6A 03 03 03 00 03 03 03 03 03 00 03 03 (CRC=E5), #data=11
|
|
SM -> all, type 0x0264 telegram: 30 00 FF 00 02 64 00 00 00 04 00 00 FF 00 00 00 0C 0A 64 00 00 00 00 (CRC=53), #data=16
|
|
```
|
|
|
|
2.Status pump is currently on: see x026A data byte 0A "04" and x0264 data byte 9 "1E"
|
|
```
|
|
SM -> all, type 0x026A telegram: 30 00 FF 00 02 6A 03 03 03 00 03 03 03 03 03 00 04 03 (CRC=EB), #data=11
|
|
SM -> all, type 0x0264 telegram: 30 00 FF 00 02 64 00 00 00 04 00 00 FF 00 00 1E 09 08 64 00 00 00 00 (CRC=CD), #data=16
|
|
```
|
|
|
|
3.Solar pump changes from off --> on: see x0264 data byte 9 set at first to "64" and x026A byte 0A is set to "04"
|
|
```
|
|
SM -> all, type 0x0264 telegram: 30 00 FF 09 02 64 64 (CRC=37)
|
|
SM -> all, type 0x026A telegram: 30 00 FF 0A 02 6A 04 (CRC=53)
|
|
|
|
Less then 10 seconds later the pump is throttled to `30%` 0x1E
|
|
|
|
SM -> all, type 0x0264 telegram: 30 00 FF 09 02 64 1E (CRC=4D)
|
|
```
|
|
|
|
4.Solar pump changes from on --> off: see x0264 data byte 9 set to "00" and x026a byte 0A is set to "03"
|
|
```
|
|
SM -> all, type 0x0264 telegram: 30 00 FF 09 02 64 00 (CRC=53)
|
|
SM -> all, type 0x026A telegram: 30 00 FF 0A 02 6A 03 (CRC=54)
|
|
```
|
|
|
|
Solar energy earnings:
|
|
```
|
|
SM -> all, type 0x028E telegram: 30 00 FF 00 02 8E 00 00 0C F3 00 00 06 02 00 00 76 33 (CRC=8A), #data=11
|
|
```
|
|
|
|
### MQTT message format
|
|
|
|
Example of MQTT message:
|
|
```
|
|
{"collectortemp":54.8,"bottomtemp":38.8,"pumpmodulation":30,"pump":"on","energylasthour":136.5,"energytoday":447,"energytotal":3029.4}
|
|
```
|
|
Please note that not all json elements are available after a restart of the ESP! It takes several minutes (up to 1 h) to collect all necessary values
|
|
|
|
### Home Assistant integration
|
|
|
|
Example to integrate values into Home Assistant
|
|
|
|
##### binary_sensors.yaml:
|
|
```
|
|
- platform: mqtt
|
|
name: 'Solar Pump'
|
|
state_topic: 'home/ems-esp/sm_data'
|
|
value_template: '{{ value_json.pump }}'
|
|
payload_on: "on"
|
|
payload_off: "off"
|
|
qos: 1
|
|
payload_available: "online"
|
|
payload_not_available: "offline"
|
|
|
|
```
|
|
|
|
##### sensors.yaml:
|
|
```
|
|
- platform: mqtt
|
|
state_topic: 'home/ems-esp/sm_data'
|
|
name: 'Collector Temperature'
|
|
unit_of_measurement: '°C'
|
|
value_template: '{{ value_json.collectortemp }}'
|
|
qos: 1
|
|
payload_available: "online"
|
|
payload_not_available: "offline"
|
|
|
|
- platform: mqtt
|
|
state_topic: 'home/ems-esp/sm_data'
|
|
name: 'Bottom Temperature'
|
|
unit_of_measurement: '°C'
|
|
value_template: '{{ value_json.bottomtemp }}'
|
|
qos: 1
|
|
payload_available: "online"
|
|
payload_not_available: "offline"
|
|
|
|
- platform: mqtt
|
|
state_topic: 'home/ems-esp/sm_data'
|
|
name: 'Solar Pump modulation'
|
|
unit_of_measurement: '%'
|
|
value_template: '{{ value_json.pumpmodulation }}'
|
|
qos: 1
|
|
payload_available: "online"
|
|
payload_not_available: "offline"
|
|
|
|
- platform: mqtt
|
|
state_topic: 'home/ems-esp/sm_data'
|
|
name: 'Solar Energy Last Hour'
|
|
unit_of_measurement: 'Wh'
|
|
value_template: '{{ value_json.energylasthour }}'
|
|
qos: 1
|
|
payload_available: "online"
|
|
payload_not_available: "offline"
|
|
|
|
- platform: mqtt
|
|
state_topic: 'home/ems-esp/sm_data'
|
|
name: 'Solar Energy Today'
|
|
unit_of_measurement: 'Wh'
|
|
value_template: '{{ value_json.energytoday }}'
|
|
qos: 1
|
|
payload_available: "online"
|
|
payload_not_available: "offline"
|
|
|
|
- platform: mqtt
|
|
state_topic: 'home/ems-esp/sm_data'
|
|
name: 'Solar Energy Total'
|
|
unit_of_measurement: 'kWh'
|
|
value_template: '{{ value_json.energytotal }}'
|
|
qos: 1
|
|
payload_available: "online"
|
|
payload_not_available: "offline"
|
|
|
|
``` |