Skip to content

Latest commit

 

History

History
180 lines (140 loc) · 7.04 KB

SM100.md

File metadata and controls

180 lines (140 loc) · 7.04 KB

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 emsesp/EMS-ESP#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"