BSB-Lan integration

That’s what I am working on, but if the old component works you could use that to read out extra entities/sensors.
The new one adds climate device to home assistant. So you can easily set room temp with Lovelace thermostat panel

Understand. So currently I´m using the Lovelace panel and the old style to display sensors and values.
Two feature requests/ideas:

  • Add the presence button to Lovelance panel. BSBlan ID S701 / S1001 to switch between “comfort” and “reduced” heating mode
  • Assign Lovelace panel buttons to all (more) heating circuits (e.g. Radiator and Floorheating…)

To design Lovelace ui for the other sensors is yet not in my current scope. If you want to do it:)

My plan is support all devices there are in Home-Assistant. So Climate, Water Heater Switch and Binary Sensors, Sensors.


But this will take some time. What is connected to bsblan board are all different type of heating systems. So not all heating systems support all sensors etc. If the logic in my library is OK the development will pick up speed. (I am not a programmer)

There is no option yet to put the backend of the heating system in a device/platform. Would be cool though. So all the other sensors will be seperate entities. I am not sure if it’s possible to create your own platform?

Hi there,
since i have updated to 0.117, rest sensor is not working anymore.
Is it the same for you guys?

Hi tiger42
can you share homeassitant configuration Rest sensor ?
I try to configure the sensor rest to extract value but not work.
Thank you in advance
Marco

Ok, this is the REST sensor part from my configuration.yaml:

sensor:
  - platform: rest
    name: BSB-LAN Status
    resource: "http://192.168.0.95/JQ=700,1600,8000,8003,6705,710,712,720,721,1610,1612,5400"
    method: POST
    username: !secret bsb_lan_user
    password: !secret bsb_lan_pass
    scan_interval: 5
    value_template: "{{ value_json['6705'].value }}"
    json_attributes:
      - "700"
      - "1600"
      - "6705"
      - "8000"
      - "8003"
      - "710"
      - "712"
      - "720"
      - "721"
      - "1610"
      - "1612"
      - "5400"
    headers:
      Content-Type: application/json
  - platform: template
    sensors:
      bsb_lan_betriebsart:
        friendly_name: BSB-LAN Betriebsart
        value_template: "{% if states('sensor.bsb_lan_status') is defined and states('sensor.bsb_lan_status') != 'unavailable' %}{{ state_attr('sensor.bsb_lan_status', '700')['value'] }}{% else %}{{ states('sensor.bsb_lan_betriebsart') }}{% endif %}"
        attribute_templates:
          desc: "{% if states('sensor.bsb_lan_status') is defined and states('sensor.bsb_lan_status') != 'unavailable' %}{{ state_attr('sensor.bsb_lan_status', '8000')['desc'] }}{% else %}{{ state_attr('sensor.bsb_lan_betriebsart', 'desc') }}{% endif %}"
      bsb_lan_trinkwasserbetrieb:
        friendly_name: BSB-LAN Trinkwasserbetrieb
        value_template: "{% if states('sensor.bsb_lan_status') is defined and states('sensor.bsb_lan_status') != 'unavailable' %}{{ state_attr('sensor.bsb_lan_status', '1600')['value'] }}{% else %}{{ states('sensor.bsb_lan_trinkwasserbetrieb') }}{% endif %}"
        attribute_templates:
          desc: "{% if states('sensor.bsb_lan_status') is defined and states('sensor.bsb_lan_status') != 'unavailable' %}{{ state_attr('sensor.bsb_lan_status', '8003')['desc'] }}{% else %}{{ state_attr('sensor.bsb_lan_trinkwasserbetrieb', 'desc') }}{% endif %}"
      bsb_lan_komfortsollwert:
        friendly_name: BSB-LAN Komfortsollwert
        value_template: "{% if states('sensor.bsb_lan_status') is defined and states('sensor.bsb_lan_status') != 'unavailable' %}{{ state_attr('sensor.bsb_lan_status', '710')['value'] }}{% else %}{{ states('sensor.bsb_lan_komfortsollwert') }}{% endif %}"
        unit_of_measurement: °C
        device_class: temperature
      bsb_lan_reduziertsollwert:
        friendly_name: BSB-LAN Reduziertsollwert
        value_template: "{% if states('sensor.bsb_lan_status') is defined and states('sensor.bsb_lan_status') != 'unavailable' %}{{ state_attr('sensor.bsb_lan_status', '712')['value'] }}{% else %}{{ states('sensor.bsb_lan_reduziertsollwert') }}{% endif %}"
        unit_of_measurement: °C
        device_class: temperature
      bsb_lan_kennlinie_steilheit:
        friendly_name: BSB-LAN Kennlinie Steilheit
        value_template: "{% if states('sensor.bsb_lan_status') is defined and states('sensor.bsb_lan_status') != 'unavailable' %}{{ state_attr('sensor.bsb_lan_status', '720')['value'] }}{% else %}{{ states('sensor.bsb_lan_kennlinie_steilheit') }}{% endif %}"
      bsb_lan_kennlinie_verschiebung:
        friendly_name: BSB-LAN Kennlinie Verschiebung
        value_template: "{% if states('sensor.bsb_lan_status') is defined and states('sensor.bsb_lan_status') != 'unavailable' %}{{ state_attr('sensor.bsb_lan_status', '721')['value'] }}{% else %}{{ states('sensor.bsb_lan_kennlinie_verschiebung') }}{% endif %}"
        unit_of_measurement: °C
        device_class: temperature
      bsb_lan_tww_nennsollwert:
        friendly_name: BSB-LAN TWW Nennsollwert
        value_template: "{% if states('sensor.bsb_lan_status') is defined and states('sensor.bsb_lan_status') != 'unavailable' %}{{ state_attr('sensor.bsb_lan_status', '1610')['value'] }}{% else %}{{ states('sensor.bsb_lan_tww_nennsollwert') }}{% endif %}"
        unit_of_measurement: °C
        device_class: temperature
      bsb_lan_tww_reduziertsollwert:
        friendly_name: BSB-LAN TWW Reduziertsollwert
        value_template: "{% if states('sensor.bsb_lan_status') is defined and states('sensor.bsb_lan_status') != 'unavailable' %}{{ state_attr('sensor.bsb_lan_status', '1612')['value'] }}{% else %}{{ states('sensor.bsb_lan_tww_reduziertsollwert') }}{% endif %}"
        unit_of_measurement: °C
        device_class: temperature
      bsb_lan_tww_dle_komfortsollwert:
        friendly_name: BSB-LAN TWW DLE Komfortsollwert
        value_template: "{% if states('sensor.bsb_lan_status') is defined and states('sensor.bsb_lan_status') != 'unavailable' %}{{ state_attr('sensor.bsb_lan_status', '5400')['value'] }}{% else %}{{ states('sensor.bsb_lan_tww_dle_komfortsollwert') }}{% endif %}"
        unit_of_measurement: °C
        device_class: temperature
      bsb_lan_temperaturspreizung:
        friendly_name: BSB-LAN Temperaturspreizung
        value_template: "{{ (states('sensor.bsb_lan_vorlauftemperatur') | float - states('sensor.bsb_lan_rucklauftemperatur') | float) | round(1) }}"
        unit_of_measurement: °C
        device_class: temperature

As the HTTP query is quite slow on the Arduino (the more values you read out, the slower it gets), I use MQTT to acquire all constantly changing values (mainly temperatures). You need to have a MQTT broker of course and the Arduino configured to use it:

sensor:
  - platform: mqtt
    state_topic: "bsb-lan/10004"
    name: BSB-LAN Außentemperatur
    unit_of_measurement: °C
    device_class: temperature
  - platform: mqtt
    state_topic: "bsb-lan/8703"
    name: BSB-LAN Außentemperatur gedämpft
    unit_of_measurement: °C
    device_class: temperature
  - platform: mqtt
    state_topic: "bsb-lan/8704"
    name: BSB-LAN Außentemperatur gemischt
    unit_of_measurement: °C
    device_class: temperature
  - platform: mqtt
    state_topic: "bsb-lan/8310"
    name: BSB-LAN Vorlauftemperatur
    unit_of_measurement: °C
    device_class: temperature
  - platform: mqtt
    state_topic: "bsb-lan/8314"
    name: BSB-LAN Rücklauftemperatur
    unit_of_measurement: °C
    device_class: temperature
  - platform: mqtt
    state_topic: "bsb-lan/8830"
    name: BSB-LAN Trinkwassertemperatur 1
    unit_of_measurement: °C
    device_class: temperature
  - platform: mqtt
    state_topic: "bsb-lan/8832"
    name: BSB-LAN Trinkwassertemperatur 2
    unit_of_measurement: °C
    device_class: temperature
  - platform: mqtt
    state_topic: "bsb-lan/8326"
    name: BSB-LAN Brennermodulation
    unit_of_measurement: "%"
    icon: "mdi:fire"

For setting parameters I use a parameterizable REST ccommand. Just let me know if you want to have the code for that too.

1 Like

Hi

Have you got a climate card with your rest commands ? what is your code ?

I want to use 2 heating circuits (floor and etage) and heating water circuit so if I understand correctly, it’s not possible with the actual integration ?

Thanks

I do not use a climate card, but individual input fields instead. This is what it looks like:

This is the corresponding lovelace config:

cards:
  - entities:
      - entity: sensor.bsb_lan_betriebsart
        filter:
          include:
            - key: sensor.bsb_lan_betriebsart.desc
              name: Status
        heading_name: ' '
        heading_state: ' '
        type: 'custom:entity-attributes-card'
      - entity: input_number.bsb_lan_komfortsollwert
        name: Komfortsollwert
      - entity: input_number.bsb_lan_reduziertsollwert
        name: Reduziertsollwert
      - entity: input_number.bsb_lan_kennlinie_steilheit
        name: Kennlinie Steilheit
      - entity: input_number.bsb_lan_kennlinie_verschiebung
        name: Kennlinie Verschiebung
      - type: divider
      - entity: sensor.bsb_lan_vorlauftemperatur
        name: Vorlauftemperatur
      - entity: sensor.bsb_lan_rucklauftemperatur
        name: Rücklauftemperatur
    show_header_toggle: false
    type: entities
  - entities:
      - entity: sensor.bsb_lan_vorlauftemperatur
        name: Vorlauftemperatur 6h
      - entity: sensor.bsb_lan_rucklauftemperatur
        name: Rücklauftemperatur 6h
      - entity: sensor.bsb_lan_temperaturspreizung
        name: Temperaturspreizung 6h
    hours_to_show: 6
    refresh_interval: 30
    type: history-graph
  - entities:
      - entity: sensor.bsb_lan_vorlauftemperatur
        name: Vorlauftemperatur 24h
      - entity: sensor.bsb_lan_rucklauftemperatur
        name: Rücklauftemperatur 24h
      - entity: sensor.bsb_lan_temperaturspreizung
        name: Temperaturspreizung 24h
    hours_to_show: 24
    refresh_interval: 30
    type: history-graph
title: Heizkreis
type: vertical-stack

cards:
  - entities:
      - entity: sensor.bsb_lan_trinkwasserbetrieb
        filter:
          include:
            - key: sensor.bsb_lan_trinkwasserbetrieb.desc
              name: Status
        heading_name: ' '
        heading_state: ' '
        type: 'custom:entity-attributes-card'
      - entity: input_number.bsb_lan_tww_nennsollwert
        name: Nennsollwert
      - entity: input_number.bsb_lan_tww_reduziertsollwert
        name: Reduziertsollwert
      - entity: input_number.bsb_lan_tww_dle_komfortsollwert
        name: Durchl'erhitzer Komfortsollwert
      - type: divider
      - entity: sensor.bsb_lan_trinkwassertemperatur_1
        name: Trinkwassertemperatur 1
      - entity: sensor.bsb_lan_trinkwassertemperatur_2
        name: Trinkwassertemperatur 2
    show_header_toggle: false
    type: entities
  - entities:
      - entity: sensor.bsb_lan_trinkwassertemperatur_1
        name: Trinkwassertemperatur 1 6h
      - entity: sensor.bsb_lan_trinkwassertemperatur_2
        name: Trinkwassertemperatur 2 6h
      - entity: switch.gosund_zirkulationspumpe
        name: TWW Zirkulationspumpe 6h
    hours_to_show: 6
    refresh_interval: 30
    type: history-graph
  - entities:
      - entity: sensor.bsb_lan_trinkwassertemperatur_1
        name: Trinkwassertemperatur 1 24h
      - entity: sensor.bsb_lan_trinkwassertemperatur_2
        name: Trinkwassertemperatur 2 24h
      - entity: switch.gosund_zirkulationspumpe
        name: TWW Zirkulationspumpe 24h
    hours_to_show: 24
    refresh_interval: 30
    type: history-graph
title: Trinkwasser
type: vertical-stack

This is the automations.yaml part (the input fields have to be defined before for this to work, of course):

- id: bsb_lan_set_komfortsollwert
  alias: BSB-LAN Komfortsollwert setzen
  description: ''
  trigger:
    - platform: state
      entity_id: input_number.bsb_lan_komfortsollwert
  condition: []
  action:
    - data_template:
        parameter: 710
        value: "{{ states('input_number.bsb_lan_komfortsollwert') }}"
      service: rest_command.bsb_lan_set_parameter
- id: bsb_lan_get_komfortsollwert
  alias: BSB-LAN Komfortsollwert auslesen
  description: ''
  trigger:
    - platform: state
      entity_id: sensor.bsb_lan_komfortsollwert
  condition: []
  action:
    - data_template:
        entity_id: input_number.bsb_lan_komfortsollwert
        value: "{{ states('sensor.bsb_lan_komfortsollwert') | float }}"
      service: input_number.set_value

- id: bsb_lan_set_reduziertsollwert
  alias: BSB-LAN Reduziertsollwert setzen
  description: ''
  trigger:
    - platform: state
      entity_id: input_number.bsb_lan_reduziertsollwert
  condition: []
  action:
    - data_template:
        parameter: 712
        value: "{{ states('input_number.bsb_lan_reduziertsollwert') }}"
      service: rest_command.bsb_lan_set_parameter
- id: bsb_lan_get_reduziertsollwert
  alias: BSB-LAN Reduziertsollwert auslesen
  description: ''
  trigger:
    - platform: state
      entity_id: sensor.bsb_lan_reduziertsollwert
  condition: []
  action:
    - data_template:
        entity_id: input_number.bsb_lan_reduziertsollwert
        value: "{{ states('sensor.bsb_lan_reduziertsollwert') | float }}"
      service: input_number.set_value

- id: bsb_lan_set_kennlinie_steilheit
  alias: BSB-LAN Kennlinie Steilheit setzen
  description: ''
  trigger:
    - platform: state
      entity_id: input_number.bsb_lan_kennlinie_steilheit
  condition: []
  action:
    - data_template:
        parameter: 720
        value: "{{ states('input_number.bsb_lan_kennlinie_steilheit') }}"
      service: rest_command.bsb_lan_set_parameter
- id: bsb_lan_get_kennlinie_steilheit
  alias: BSB-LAN Kennlinie Steilheit auslesen
  description: ''
  trigger:
    - platform: state
      entity_id: sensor.bsb_lan_kennlinie_steilheit
  condition: []
  action:
    - data_template:
        entity_id: input_number.bsb_lan_kennlinie_steilheit
        value: "{{ states('sensor.bsb_lan_kennlinie_steilheit') | float }}"
      service: input_number.set_value

- id: bsb_lan_set_kennlinie_verschiebung
  alias: BSB-LAN Kennlinie Verschiebung setzen
  description: ''
  trigger:
    - platform: state
      entity_id: input_number.bsb_lan_kennlinie_verschiebung
  condition: []
  action:
    - data_template:
        parameter: 721
        value: "{{ states('input_number.bsb_lan_kennlinie_verschiebung') }}"
      service: rest_command.bsb_lan_set_parameter
- id: bsb_lan_get_kennlinie_verschiebung
  alias: BSB-LAN Kennlinie Verschiebung auslesen
  description: ''
  trigger:
    - platform: state
      entity_id: sensor.bsb_lan_kennlinie_verschiebung
  condition: []
  action:
    - data_template:
        entity_id: input_number.bsb_lan_kennlinie_verschiebung
        value: "{{ states('sensor.bsb_lan_kennlinie_verschiebung') | float }}"
      service: input_number.set_value

- id: bsb_lan_set_tww_nennsollwert
  alias: BSB-LAN TWW Nennsollwert setzen
  description: ''
  trigger:
    - platform: state
      entity_id: input_number.bsb_lan_tww_nennsollwert
  condition: []
  action:
    - data_template:
        parameter: 1610
        value: "{{ states('input_number.bsb_lan_tww_nennsollwert') }}"
      service: rest_command.bsb_lan_set_parameter
- id: bsb_lan_get_tww_nennsollwert
  alias: BSB-LAN TWW Nennsollwert auslesen
  description: ''
  trigger:
    - platform: state
      entity_id: sensor.bsb_lan_tww_nennsollwert
  condition: []
  action:
    - data_template:
        entity_id: input_number.bsb_lan_tww_nennsollwert
        value: "{{ states('sensor.bsb_lan_tww_nennsollwert') | float }}"
      service: input_number.set_value

- id: bsb_lan_set_tww_reduziertsollwert
  alias: BSB-LAN TWW Reduziertsollwert setzen
  description: ''
  trigger:
    - platform: state
      entity_id: input_number.bsb_lan_tww_reduziertsollwert
  condition: []
  action:
    - data_template:
        parameter: 1612
        value: "{{ states('input_number.bsb_lan_tww_reduziertsollwert') }}"
      service: rest_command.bsb_lan_set_parameter
- id: bsb_lan_get_tww_reduziertsollwert
  alias: BSB-LAN TWW Reduziertsollwert auslesen
  description: ''
  trigger:
    - platform: state
      entity_id: sensor.bsb_lan_tww_reduziertsollwert
  condition: []
  action:
    - data_template:
        entity_id: input_number.bsb_lan_tww_reduziertsollwert
        value: "{{ states('sensor.bsb_lan_tww_reduziertsollwert') | float }}"
      service: input_number.set_value

- id: bsb_lan_set_tww_dle_komfortsollwert
  alias: BSB-LAN TWW DLE Komfortsollwert setzen
  description: ''
  trigger:
    - platform: state
      entity_id: input_number.bsb_lan_tww_dle_komfortsollwert
  condition: []
  action:
    - data_template:
        parameter: 5400
        value: "{{ states('input_number.bsb_lan_tww_dle_komfortsollwert') }}"
      service: rest_command.bsb_lan_set_parameter
- id: bsb_lan_get_tww_dle_komfortsollwert
  alias: BSB-LAN TWW DLE Komfortsollwert auslesen
  description: ''
  trigger:
    - platform: state
      entity_id: sensor.bsb_lan_tww_dle_komfortsollwert
  condition: []
  action:
    - data_template:
        entity_id: input_number.bsb_lan_tww_dle_komfortsollwert
        value: "{{ states('sensor.bsb_lan_tww_dle_komfortsollwert') | float }}"
      service: input_number.set_value

My rest command has already been posted here:
https://community.home-assistant.io/t/bsb-lan-integration/113501/38?u=tiger42

I tiger42 thank you so much for the code.
it’s possible to share the code for setting parameters whit REST COMMAND?
Thanks
Marco

The code has already been posted… Look at the action: parts in my automations.yml.

Hi,

the rest command work now thanks you !

can we create a HomeKit thermostat with rest command in HA ?

Hi

can we explain me how integrate my second heating system via BSB LAN integration ?

Thanks

Hi
Iam very new at BSB Lan. I use a ESP32 with the BSB-Lan adapter and first off all: It works!
Now I triy to integrate it in my HomeAssistant. I needed to flash the newest Version of BSB Lan, because for the ESP32 I need the wifi integration. SO the HA BSB integration does not work. I tried, buit it doesn’t :wink:

Now I want to use mqtt like tiger42 did.
What do I have to configure in the BSB-LAN adapter to gett mqtt working
MQTT verwenden: Plain text, JSON, Rich Json ???
MQTT IP Adress, Passwort, Username, GeräteID, Topic Prefix – got it!
SOmething else? In the logging section?

Hi Marc,

BSBLan has changed a lot the last few months. So I have to pick up where it is and what is best for HA integration. For now you could follow @tiger42 instructions to get the most out of it.

When I have some time available I am planning te rewrite the integration.
This will be more mqqt based because it will work like local push.
The plan is to have support for the platforms climate , hot water, and maybe some customs stuff.

If someone has interest to get things started let me know. I will enjoy to watch it from the sideline.

2 Likes

I’ve updated the BSB-Lan in Arduino and HA to the latest version, and now I am getting the negative amounts for this component… I’ve tried to sniff the network, and it seems the BSB-Lan itself return the correct values. Where can be the issue? Thanks!

Bsblan firmware has changed a lot so I cannot tell what’s broken.
For example they shuffled the parameters around.
That’s why it’s documented the version number of the firmware you have to install to be able to use this integration. You can still download the firmware version on GitHub that works with the integration.

Version 1.0 is the latest tested

I am spending time once in a while to overhaul the integration. But progress is slow.

2 Likes

Im using also the latest github surce to get it working with esp32.
It would be great if you could update the integration :smiley:

Super, nice! Dont you have documents for the board layout(PCB layout) for BSB-LAN adapter? I saw only schematic, but I dont know ho to design it :frowning:

My BSB-lan adapter is on it’s way and I’ll be using an ESP32, so I’m not sure version 1.0 will work for me. Can I help in getting the integration updated so it’ll work with the current version of the firmware?

I hope to start soon. I think I am going to start a custom component and will make it available on hacs first. This makes development and iterations a bit faster than doing pull request on the core. A lot need to be changed.

1 Like