BSB-Lan integration

Hi,

Sorry for the late reply.

You should share how you wrote things into your configuration.yaml.

I cannot really advise without seeing the code which produced the error.

Hi Gabor, many thanks for your help - it finally worked ! I’ll have to learn programming automations but this is definetly an important step :slight_smile:

1 Like

This working for me.

 mqtt:
   button:
     - name: DHW push
       unique_id: bsb_lan_dhw_push
       availability_topic: "BSB-LAN/status"
       command_topic: "BSB-LAN"
       payload_press: "S10019=1"
       qos: 0
       retain: false

And my complette mqtt_sensors.yaml for BSB sensors is:

sensor:
  - state_topic: "BSB-LAN/8700"
    name: BSB-LAN Outside temperature
    unique_id: bsb_lan_outside_temperature
    availability_topic: "BSB-LAN/status"
    unit_of_measurement: °C
    device_class: temperature
    
  - state_topic: "BSB-LAN/8740"
    name: BSB-LAN Room temperature
    unique_id: bsb_lan_room_temperature
    availability_topic: "BSB-LAN/status"
    unit_of_measurement: °C
    device_class: temperature
    
  - state_topic: "BSB-LAN/8310"
    name: BSB-LAN Boiler temperature
    unique_id: bsb_lan_boiler_temperature
    availability_topic: "BSB-LAN/status"
    unit_of_measurement: °C
    device_class: temperature
    
  - state_topic: "BSB-LAN/8326"
    name: BSB-LAN Boiler modulation
    unique_id: bsb_lan_boiler_modulation
    availability_topic: "BSB-LAN/status"
    unit_of_measurement: "%"
    device_class: power_factor
    
  - state_topic: "BSB-LAN/8314"
    name: BSB-LAN Return temperature
    unique_id: bsb_lan_return_temperature
    availability_topic: "BSB-LAN/status"
    unit_of_measurement: °C
    device_class: temperature
    
  - state_topic: "BSB-LAN/8830"
    name: BSB-LAN DHW temperature
    unique_id: bsb_lan_dhw_temperature
    availability_topic: "BSB-LAN/status"
    unit_of_measurement: °C
    device_class: temperature
    
select:
  - name: Boiler operating mode
    unique_id: bsb_lan_operating_mode
    state_topic: "BSB-LAN/700"
    command_topic: "BSB-LAN"
    availability_topic: "BSB-LAN/status"
    # Example value: 1 - Automatic
    value_template: >
      {% set mapping = {0: 'Protection', 1: 'Automatic', 2: 'Reduced', 3: 'Comfort'} %}
      {% set idx = value.split() | first | int %}
      {{ mapping[idx] }}
    # Example payload: S700=1
    command_template: >
      {% set mapping = {'Protection': 0, 'Automatic': 1, 'Reduced': 2, 'Comfort': 3} %}
      S700={{ mapping[value] }}
    options:
      - Protection
      - Automatic
      - Reduced
      - Comfort
    icon: mdi:list-box
    
button:
  - name: DHW push
    unique_id: bsb_lan_dhw_push
    availability_topic: "BSB-LAN/status"
    command_topic: "BSB-LAN"
    payload_press: "S10019=1"
    qos: 0
    retain: false
     
number:
  - name: BSB-LAN Comfort temperature
    unique_id: bsb_lan_radiator_comfort_setpoint
    state_topic: "BSB-LAN/710"
    command_topic: "BSB-LAN"
    availability_topic: "BSB-LAN/status"
    command_template: >
     S710={{ value }}
    mode: box
    min: 12
    max: 26
    step: 0.1
    unit_of_measurement: °C
    device_class: temperature
    icon: mdi:radiator
      
  - name: BSB-LAN Reduced temperature
    unique_id: bsb_lan_radiator_reduced_setpoint
    state_topic: "BSB-LAN/712"
    command_topic: "BSB-LAN"
    availability_topic: "BSB-LAN/status"
    command_template: >
     S712={{ value }}
    mode: box
    min: 12
    max: 26
    step: 0.1
    unit_of_measurement: °C
    device_class: temperature
    icon: mdi:radiator-disabled

I’m missing “mqqt:” at the beginning on purpose, because I’m calling yaml from configuration.yaml like this:
mqtt: !include mqtt_sensors.yaml

2 Likes

Hi jirka, please could you share how to use the ‘select’ code in the interface? with a button or what? many thanks

select:
  - name: Boiler operating mode
    unique_id: bsb_lan_operating_mode
    state_topic: "BSB-LAN/700"
    command_topic: "BSB-LAN"
    availability_topic: "BSB-LAN/status"
    # Example value: 1 - Automatic
    value_template: >
      {% set mapping = {0: 'Protection', 1: 'Automatic', 2: 'Reduced', 3: 'Comfort'} %}
      {% set idx = value.split() | first | int %}
      {{ mapping[idx] }}
    # Example payload: S700=1
    command_template: >
      {% set mapping = {'Protection': 0, 'Automatic': 1, 'Reduced': 2, 'Comfort': 3} %}
      S700={{ mapping[value] }}
    options:
      - Protection
      - Automatic
      - Reduced
      - Comfort
    icon: mdi:list-box

Perfect, the Drinking Water Push is working that way.

My next aim is getting the Presence button “Temporary Comfort”
10110 Benutzerdefiniert - Heizbetrieb Heizkreis 1 (TemporÀr)
with Options

  • Reduced
  • Comfort
  • “- - -”
    controlled via Homa Assistant Dashboard.
    It must be similar or close to your
number:
- name: BSB-LAN Comfort temperature
    unique_id: bsb_lan_radiator_comfort_setpoint
    state_topic: "BSB-LAN/710"
    command_topic: "BSB-LAN"
    availability_topic: "BSB-LAN/status"
    command_template: >
     S710={{ value }}
    mode: box
    min: 12
    max: 26
    step: 0.1
    unit_of_measurement: °C
    device_class: temperature
    icon: mdi:radiator

Do you or anybody has an example as well?

Regards,
Joerg

Hello

I wanted to ask if it is possible to make the same adjustment for the second circuit as for the first circuit.

Thank you
Regards
Mariusz

Is this set up through the official integration or through MQTT?

If MQTT, then you need to use 1010, instead of the 710 like as it is visible in the previous post’s example.

If the official integration, then @liudger might be able to give you an answer.

Now I have it done via MQTT but I would like to do it on official integration

Hi Mariusz,

It just that currently I don’t have much time. And I want to check if another project that will control BSBLan device with mqtt could be better. They are working to make bsblan work out of the box with mqttt and the sensors and climate/ hot water will be automatically detected. Than there is no need for this integration. But that project also goes really slow :slight_smile:

This is the configuration.yaml I use to integrate home assistant with my recently acquired BSB-LAN over MQTT. While I am sure there are possible improvement, I am quite happy with its current state. I post it here hoping it might help someone. Some related notes to take into account:

  • All entities are tied together to one MQTT device.
  • I calculate an average house temperature from multiple sensors and the heat pump is configured to adjust heating curve based on it with 50% weight.
  • The heat pump electricity usage might not be accurate. I use a utility meter helper to track daily usage and integrate it into the energy dashboard.
  • The climate and water heater entities work with automations and can be displayed nicely with HA cards.
  • The climate entity uses “cool” for “reduced heating setpoint” which is illogical, but I couldn’t find a better way.
  • All the required line numbers should be exposed in BSB-LAN settings.
mqtt:
  number:
    - name: "Average house temperature"
      unique_id: "bsb_lan_average_house_temperature"
      device:
        connections: [["mac", "AA:BB:CC:DD:EE:FF"]]
        name: "Heat pump"
        manufacturer: "Fujitsu"
        model: "Water stage"
        sw_version: "3.2.2-20230606224119"
        configuration_url: "http://192.168.1.99/"
      availability_topic: "BSB-LAN/status"
      state_topic: "BSB-LAN/8740"
      command_topic: "BSB-LAN"
      unit_of_measurement: "°C"
      command_template: "{{'I10000='+ (value| string)}}"
      retain: true
      
  sensor:
    - name: "Heating electricity usage"
      unique_id: "bsb_lan_heat_pump_electricity_usage"
      device:
        connections: [["mac", "AA:BB:CC:DD:EE:FF"]]
        name: "Heat pump"
        manufacturer: "Fujitsu"
        model: "Water stage"
        sw_version: "3.2.2-20230606224119"
        configuration_url: "http://192.168.1.99/"
      availability_topic: "BSB-LAN/status"
      state_topic: "BSB-LAN/3113"
      unit_of_measurement: "kWh"
      device_class: energy
      state_class: total_increasing
      force_update: true
      value_template: '{{ ((value.split(" ")[0]) | int) }}'
    - name: "Heating circuit 1 status"
      unique_id: "bsb_lan_heat_pump_hc1_status"
      device:
        connections: [["mac", "AA:BB:CC:DD:EE:FF"]]
        name: "Heat pump"
        manufacturer: "Fujitsu"
        model: "Water stage"
        sw_version: "3.2.2-20230606224119"
        configuration_url: "http://192.168.1.99/"
      availability_topic: "BSB-LAN/status"
      state_topic: "BSB-LAN/8000"
      value_template: '{{ ((value.split("-")[1])) }}'
    - name: "Hot water status"
      unique_id: "bsb_lan_dhw_status"
      device:
        connections: [["mac", "AA:BB:CC:DD:EE:FF"]]
        name: "Heat pump"
        manufacturer: "Fujitsu"
        model: "Water stage"
        sw_version: "3.2.2-20230606224119"
        configuration_url: "http://192.168.1.99/"
      availability_topic: "BSB-LAN/status"
      state_topic: "BSB-LAN/8003"
      value_template: '{{ ((value.split("-")[1])) }}'
    - name: "Heat pump status"
      unique_id: "bsb_lan_heat_pump_status"
      device:
        connections: [["mac", "AA:BB:CC:DD:EE:FF"]]
        name: "Heat pump"
        manufacturer: "Fujitsu"
        model: "Water stage"
        sw_version: "3.2.2-20230606224119"
        configuration_url: "http://192.168.1.99/"
      availability_topic: "BSB-LAN/status"
      state_topic: "BSB-LAN/8006"
      value_template: '{{ ((value.split("-")[1])) }}'
      
  climate:
    - name: Heating
      unique_id: "bsb_lan_heat_pump"
      device:
        connections: [["mac", "AA:BB:CC:DD:EE:FF"]]
        name: "Heat pump"
        manufacturer: "Fujitsu"
        model: "Water stage"
        sw_version: "3.2.2-20230606224119"
        configuration_url: "http://192.168.1.99/"
      availability_topic: "BSB-LAN/status"
      payload_on: 1
      payload_off: 0
      modes:
        - auto
        - heat
        - cool
        - 'off'
      mode_state_topic: "BSB-LAN/700"
      mode_state_template: >-
         {% set values = { '0 - Protection':'off', '1 - Automatic':'auto', '2 - Reduced':'cool', '3 - Comfort':'heat'} %}
         {{ values[value] if value in values.keys() else 'off' }}
      mode_command_topic: "BSB-LAN"
      mode_command_template: >-
         {% set values = { 'off':'S700=0', 'auto':'S700=1', 'cool':'S700=2', 'heat':'S700=3'} %}
         {{ values[value] if value in values.keys() else '0' }}
      current_temperature_topic: "BSB-LAN/8740"
      min_temp: 17
      max_temp: 28
      temp_step: 0.5
      temperature_high_command_topic: "BSB-LAN"
      temperature_high_command_template: "{{'S710='+ (value | string)}}"
      temperature_high_state_topic: "BSB-LAN/710"
      temperature_low_command_topic: "BSB-LAN"
      temperature_low_command_template: "{{'S712='+ (value | string)}}"
      temperature_low_state_topic: "BSB-LAN/712"
      
  water_heater:
    - name: Hot water
      unique_id: "bsb_lan_dhw"
      device:
        connections: [["mac", "AA:BB:CC:DD:EE:FF"]]
        name: "Heat pump"
        manufacturer: "Fujitsu"
        model: "Water stage"
        sw_version: "3.2.2-20230606224119"
        configuration_url: "http://192.168.1.99/"
      availability_topic: "BSB-LAN/status"
      modes:
        - "off"
        - "heat_pump"
      payload_on: 1
      payload_off: 0
      min_temp: 30
      power_command_topic: "BSB-LAN"
      power_command_template: "{{'S1600=' + (value | string)}}"
      mode_command_topic: "BSB-LAN"
      mode_command_template: >-
         {% set values = { 'off':'S1600=0', 'heat_pump':'S1600=1'} %}
         {{ values[value] if value in values.keys() else '0' }}
      mode_state_topic: "BSB-LAN/1600"
      mode_state_template: >-
         {% set values = { '0 - Off':'off', '1 - On':'heat_pump'} %}
         {{ values[value] if value in values.keys() else 'off' }}
      temperature_state_topic: "BSB-LAN/1610"
      temperature_command_topic: "BSB-LAN"
      temperature_command_template: "{{'S1610='+ (value| string)}}"
      current_temperature_topic: "BSB-LAN/8830"
      temperature_unit: "C"
      precision: 1.0

  button:
    - name: DHW push
      unique_id: bsb_lan_dhw_push
      device:
        connections: [["mac", "AA:BB:CC:DD:EE:FF"]]
        name: "Heat pump"
        manufacturer: "Fujitsu"
        model: "Water stage"
        sw_version: "3.2.2-20230606224119"
        configuration_url: "http://192.168.1.99/"
      availability_topic: "BSB-LAN/status"
      command_topic: "BSB-LAN"
      payload_press: "S10019=1"
      qos: 0
      retain: false

Credit for https://github.com/ryann72/Home-assistant-tutoriel/blob/5ccbfd46149d42e745a7f9bcc8b8f4bdc67cbf6c/BSB-LAN/tutoriel%20BSB-LAN%20English.md that I used to get started.

3 Likes

Have you had any success integrating immergas boiler to HA? I got Immergas EOLO MİNİ I want to be remote controlled, couldn’t even find protocol its communicating with it’s OEM remote.

1 Like

I have since modified the climate entity to remove the “cool” mode as it doesn’t make sense if there is no cooling circuit. Instead presets are used to indicate the heating mode.

  climate:
    - name: Heating
      unique_id: "bsb_lan_heat_pump"
      device:
        connections: [["mac", "AA:BB:CC:DD:EE:FF"]]
        name: "Heat pump"
        manufacturer: "Fujitsu"
        model: "Water stage"
      availability_topic: "BSB-LAN/status"
      payload_on: 1
      payload_off: 0
      modes:
        - heat
        - 'off'
      preset_modes:
        - protection
        - comfort
        - away
      mode_state_topic: "BSB-LAN/700"
      mode_state_template: >-
         {% set values = { '0 - Protection':'off', '2 - Reduced': 'heat', '3 - Comfort': 'heat'} %}
         {{ values[value] if value in values.keys() else 'heat' }}
      mode_command_topic: "BSB-LAN"
      mode_command_template: >-
         {% set values = { 'off':'S700=0', 'heat':'S700=3'} %}
         {{ values[value] if value in values.keys() else 'S700=3' }}
      preset_mode_state_topic: "BSB-LAN/700"
      preset_mode_command_topic: "BSB-LAN"
      preset_mode_value_template: >-
         {% set values = { '3 - Comfort':'comfort', '2 - Reduced':'away', '0 - Protection':'protection'} %}
         {{ values[value] if value in values.keys() else 'comfort' }}
      preset_mode_command_template: >-
         {% set values = { 'comfort':'S700=3', 'away':'S700=2', 'protection':'S700=0' } %}
         {{ values[value] if value in values.keys() else 'S700=3' }}
      current_temperature_topic: "BSB-LAN/10049"
      min_temp: 17
      max_temp: 28
      temp_step: 0.5
      temperature_high_command_topic: "BSB-LAN"
      temperature_high_command_template: "{{'S710='+ (value | string)}}"
      temperature_high_state_topic: "BSB-LAN/710"
      temperature_low_command_topic: "BSB-LAN"
      temperature_low_command_template: "{{'S712='+ (value | string)}}"
      temperature_low_state_topic: "BSB-LAN/712"
      qos: 2

The only remaining issues I have are due to home assistant’s thermostat card colors: orange is used for the lower temperature target, and blue for the higher temperature target.

Hello all;
Happy to see this post since I just installed an ESP32/BSB-LAN box sending my boiler (Chappee Klista HTE, LMS14 regulator) parameters to MQTT broker and from then being integrated into HA.

My heating system has 2 zones:
zone 1: 1st floor with traditional radiators. Direct circuit.
zone 2: groundfloor with under-floor heating an a 3-way valve. An official and mandatory Chappee probe is associated with this second zone.
I would like to mimic a second (optional) Chappee probe for a better regulation of the 1st zone using my Home Assistant temperature sensor.
Is this feasible ? When I dig into the BSB-LAN webserver parameters the only “setable” parameter associated with zone 1 is the Room temp1 model (variable #8742):

BSB-LAN output (in French, sorry
):

In the LMS14 documentation I find the following definitions:

When there is no room sensor I understand that the room temperature is derived from a “room model” but I do not understand how that works and how sending a value to set 8742 could mimick my Chappee sensor

Here is the relevant part of the doc about room model:

Any help will be appreciated !
Cheers,
Jacques

At my room sensor unit I was able to configure which zone will be controlled. Here it’s possible to activate the sensor for both zones.

There is a very simple way to mimic the sensor of your boiler using any temperature sensor you have in your home (Thank you Frederik, sponsor of the great BSB-LAN project !) . Here is the automation I created to make my boiler think that my 10$ Sonoff sensor coud do as well as the official 200$ Chappee sensor :slight_smile:

- alias: "Publish Sensor Value to MQTT as BSB-LAN topic"
  trigger:
    platform: time_pattern
    minutes: "/5"  # Trigger every 5 minutes
  action:
    - service: mqtt.publish
      data:
        topic: "BSB-LAN"
        payload: "I10000={{ states('sensor.your_sensor_entity_id') }}"

Replace sensor.your_sensor_entity_id by the sensor entity of your choice.
The same trick can be used to feed a temperature for zone 2 (I10001=) or zone 3 (I10002=) or to feed an external temperature (I10003=) or to simulate a presence. Check 6.3 and following sections of the excellent BSB-LAN documentation !
Jacques

NB: those parameters are valid for LMS14 Siemens based regulators. They may differ for other regulators. Check the doc !

And does the heater take those values into account? Is that your experience? Isn’t a setting should be changed to use the room sensor than the room model?

It does the job perfectly and this approach is well documented in the BSB-LAN manual (section 6.3 s.q.q.). Much simpler that trying to play around with the Room model :slight_smile: And I received very helpful suggestions from Frederik (BSB-LAN lead developer) on this alternative approach.

1 Like

Thanks for the pointer. To be honest, I completely missed this, which is exactly why I was asking the original question. That is the setting which has to be changed to activate the “room influence”.

Therefore you have to activate the function ‘room influence’ (e.g. parameter 750 for circuit 1, parameter 1050 for circuit 2) before.