BSB-Lan integration

Tags: #<Tag:0x00007f739bfab638>

BSB-Lan is a boiler system bus over lan interface. It consist of an Arduino with a custom board that is connected to the heating system over BSB connection. Here is the git page
BSB-Lan git

On the Arduino runs a server that has multiple interfaces to communicate with. Post requests and MQTT are 2 of them.

I have now finished a basic thermostat integration using the python library bsblan. This will be in hopefully the next release of home-assistant. In the next release I will iterate over this plugin and add more features like:

  • passkey
  • login and password
  • sensors
  • binary sensor (like switching on the hot water boiler if you got that in your config)
  • scanning for available sensors, features. Not all heating system are the same so this way it will hopefully support more out of the box. But to get this to work I need community support. I have only 1 specific heating system.
  • a way to push temperature to the heating system. (if you don’t have a thermostat and a separate temp sensor)
  • if you got multiple heating system connected. (this one will be a bit tricky to test, but with support of Holger we should get this working?)

Here is the old non working legacy component.

Ok it took a bit more time than I expected to get it working nicely.
But finally here is my first custom component!
It only contains a sensor for now. Climate module is the next on my list if all goes well.

It is easy to configure. You need to add only your host ip followed by /JQ and the parameters you want to read.

https://github.com/liudger/BSB-LAN-Component-for-Home-Assistant

The climate component is now ready for testing.
If some has on of these heating system:

  • Atlantic Alféa Extensa + [RVS21.831F] (heat pump)
  • Austria Email LWPK 8 [RVS21.831] (heat pump)
  • Baxi Luna Platinum + [LMS15] (gas-fired)
  • Brötje BBK 22E [LMS14] (gas-fired)
  • Brötje BBK 22F [LMS14] (gas-fired)
  • Brötje BBS Pro Evo 15C [LMU74] (gas-fired)
  • Brötje BSK 20 [LMS14] (gas-fired)
  • Brötje EcoCondens BBS 15E [LMS14] (gas-fired)
  • Brötje EcoCondens BBS 20E [LMS14] (gas-fired)
  • Brötje EcoCondens BBS 28C [LMU7] (gas-fired)
  • Brötje EcoCondens BBS EVO 20G [LMS15] (gas-fired)
  • Brötje EcoSolar Kompakt BMR 20/24 [LMS15] (gas-fired + solar)
  • Brötje EcoTherm Kompakt WMS 12 [LMS 15] (gas-fired)
  • Brötje EcoTherm Kompakt WMS 24 [LMS 15] (gas-fired)
  • Brötje EcoTherm Plus BBS2N.28 [LMU 64] (gas-fired) (by usage of OCI420 via LPB!)
  • Brötje EcoTherm Plus WGB2N.20 [LMU 64] (gas-fired) (by usage of OCI420 via LPB!)
  • Brötje ISR-SSR [RVS63.283]
  • Brötje ISR-ZR1 [RVS46.530]
  • Brötje LogoBloc Unit L-UB 25C [RVS43.122] (oil-fired)
  • Brötje NovoCondens BOB 20 [RVS43.325] (oil-fired)
  • Brötje NovoCondens SOB 26 [RVA63.242] (oil-fired) {LPB_only}
  • Brötje NovoCondens SOB 22C [RVS43.222] (oil-fired)
  • Brötje NovoCondens SOB 26C [RVS43.222] (oil-fired) + EWM [RVS75.390]
  • Brötje NovoCondens WOB 20D [RVS43.325] (oil-fired)
  • Brötje SensoTherm BLW 12B [RVS21.825] (heat pump)
  • Brötje SensoTherm BLW 15B [RVS21.825] (heat pump)
  • Brötje SensoTherm BSW 10E [RVS61.843] (heat pump)
  • Brötje SensoTherm BSW-K [RVS61.843] (heat pump)
  • Brötje TrioCondens BGB 20E [LMS14] (gas-fired)
  • Brötje WBS 14D [LMU74] (gas-fired)
  • Brötje WBS 14F [LMS14] (gas-fired)
  • Brötje WBS 22E [LMS14] (gas-fired)
  • Brötje WGB 15E [LMS14] (gas-fired)
  • Brötje WGB 20C [LMU74] (gas-fired)
  • Brötje WGB-C 20/24H [LMS14] (gas-fired)
  • Brötje WGB EVO 20H [LMS15] (gas-fired)
  • Brötje WGB EVO 15I [LMS15] (gas-fired)
  • Brötje WGB Pro EVO 20C [LMU75] (gas-fired)
  • Brötje WGB S 17/20E EcoTherm Plus [LMS14] (gas-fired)
  • Brötje WGB-U 15H [LMS14] (gas-fired)
  • CTC 380 IC [RVS43.143] (oil-fired)
  • Deville 9981 [RVA53.140] (oil-fired) {PPS_only}
  • Elco Aerotop G07-14 [RVS61.843] (heat pump)
  • Elco Aerotop T07-16 [RVS61.843] (heat pump)
  • Elco Aerotop T10C [RVS61.843] (heat pump)
  • Elco Aquatop 8es [RVS51.843] (corresponds to CTA Optihead OH1-8es) (heat pump)
  • Elco Straton 21 [RVS63.283] (oil-fired)
  • Elco Thision S Plus 13 [LMS14] (gas-fired)
  • Elco Thision S 13.1 [LMU7] (gas-fired)
  • Elco Thision S 17.1 [LMU74.100] & [RVS63.283] (gas-fired)
  • Elco Thision S 25.1 [RSV63.283] (gas-fired) + MM [AVS75.390]
  • Fröling Rendagas Plus [RVA63.244] (gas-fired)
  • Fujitsu Waterstage Comfort 10 [RVS21.827] (heat pump)
  • Fujitsu Waterstage WSHA 050 DA [RVS41.813] (heat pump)
  • Fujitsu Waterstage WSYK 160 DC 9 [RVS21.827] (heat pump)
  • Fujitsu Waterstage WSYP 100 DG 6 [RVS21.831] (heat pump)
  • MHG Procon E 25 HS [LMS14] (gas-fired)
  • Sieger TG11 [RVP54.100] (oil-fired) {PPS_only}
  • Weishaupt WTU-25 G with WRS-CPU B2/E [RVS23.220] (oil-fired) {LPB_only}

I would be happy if you could test it out!

I’d like to test the custom component, but first need some clarification:

  • What bsb-lan software version is recommended?
  • I am currently using the passkey method to query my heating system (http://a.b.c.d/xxxx/), is this supported and how do I need to configure it with the component? Add the key to the host entry like a.b.c.d/xxxx/JQ?

Thanks

Hi Holger,

I have been neglecting this component for a while. Last week I just started updating it again.

The current version isn’t working with the latest home assistant version. They changed the climate system in a few ways. So at home I can’t run the latest home assistant even.

Luckily last weekend I started to update it to make it work with the current dev build and it runs again. I have to do some more testing and will release it in github.

For passkey. I have to implement this and test it. Some parts of the code are there. But there was no testing yet.

The other thing is that I didn’t test it with the latest BSB-Lan firmware. It should work but I am not sure if there were major changes. From my github emails I couldn’t see any warnings from BSB-Lan.

So maybe next weekend I put a release out that is compatible with the current HA. When you want to test it. You need to disable passkey for BSB-Lan. I hope no other persons are on your network. Otherwise you need to wait a little longer.

Thx and regards

About the compatibility with current Home Assistant version, I am gonna write a python lib first to communicate with BSBLan board. This is the required approach for components to communicate with devices. (if I want to submit is to hacs) This will make is also a bit easier and give cleaner code.
So it will take a bit longer than a weekend I suggest. But it will include paskey and other authorizations methods.

No rush. I have built the query and set functionality with a few nodered nodes in the meantime. Was not difficult at all.

Hi Holger,

I got the python-bsblan lib almost ready for release. I just want to check how you are using the bsblan-board. Which parameters are you requesting and setting? Just to make sure that it’s going to work. My baby-lan board is connected to Fujitsu Waterstage system. And I am requesting status of pump and thermostat at 8000 range. And setting temperature and hvac-mode in 700 range. Do you have some specific request?

Regards Willem-Jan

Hi Willem-Jan,

my logging parameters:

JQ=8950,8314,8009,8700,8005,8000,8326,8830,8740 - every 30 seconds
JQ=8741,700,710 - every 60 seconds

parameters I set:

I10000= (current room temperature, every 5 minutes)
S710= (target room temperature)
S700= (mode, e.g. comfort or automatic)

Merry Xmas, Holger

Hi Holger,

You are logging quite a few parameters!
I1000 where do you get this parameter? is JQ=8740 not the same?
When I request this parameter I get an error. Maybe I have to update my BSBLan module?

I’ll have a look how to get more parameters support by the lib. Not sure yet how. But you can request datatype from the parameter so it should be doable.
Passkey should be in there with the first release.

I am now working on how to set it up with HomeAssistant new config-flow. It looks not that hard.
I’ll soon release the python-bsblan lib on pypi. Not sure what the requirements are.

thanks and best wishes for 2020,
WJ

Hi Willem-Jan,

the current room temperature is a special case.

I10000 will set the current room temperature, 8740 will read it. You cannot use 8740 to set the value.

Thanks
Holger

Ah that is that command you do using get request. If you do post request you can send data to set temperature. You can than set parameter 8740 with a value. So I don’t need to bother with i1000.
manual

Have you tried that successfully? For me it does not work and this is in line with what the manual describes:

Send INF-message to parameter with value
Some values can’t be set directly, the controller gets these values by a TYPE_INF-message. As an example, the room temperature of 19.5°C should be transmitted:
http://<ip-address>/I10000=19.5

Hi Holger,

Yes it works perfectly. I use it already for quite some time. No problem setting values this way.
It’s also in their docs.

http://<IP-Adresse>/JS  
Senden: "Parameter", "Value" (nur numerisch), "Type" (0 = INF, 1 = SET)  
Empfangen: "Parameter", "Status" (0 = Fehler, 1 = OK, 2 = Parameter read-only)

I am not sure what that part in the manual means. Maybe it’s old? Or if you want to set it with the other method they describe?

Set value <y> for parameter <x> with optional destination address <z> 
Command for setting values (therefore, write-access must be defined previously in BSB_lan_config.h!). Additionally a destination address can be set by using <z>. If <!z> isn’t used, the standard destination address will be used. 
To set a parameter to ‘off/deactivated’, just use an empty value: http://<ip-address>/S<x>=.

So with node red you could test this code also. It’s the same as you want to request code only you have to get the url with JS

I use the app postman to test out stuff.

10.0.1.60/JS?Parameter=710&Value=19&Type=0

is for example the code you want to set the room temperature to 19 degree.

Type=0 means you want to test it and only get info back if it worked. if you do Type=1 it really sets the value

regards Willem-Jan

Well, I am only referring to the actual room temperature of HK1 (INF 10000, Parameter 8740). Setting the target room temperature via 710 works for me.

Neighter

/JS?Parameter=8740&Value=<value>&Type=0 (return code 2)

nor

/JS?Parameter=10000&Value=<value>&Type=0 (return code 1, sets temperature to 0.0)

works with my version of bsb_lan.

What works reliably and what I’m using is

/I10000=<value>

For all other parameters besides 10000/8740 /JQ and /JS are working.

Hi Holger,

Now I am confused?? 8740 is what the system is reading. Like the current temperature of room1. Why do you want to set this?

And for parameter 10000 this one is for me blanco. There are no values to read or set for me. So I can’t really test this one for now. I shall update my bsblan board so I am sure that isn’t the issue.

So for you param 10000 is the one you need to set for the target room temperature? What is the difference with param 710 for you? You can use 710? So it shouldn’t be a problem to use this instead of i10000 command?

Maybe I just need to finish it first and we can test and see what works?
Or maybe share screenshots of how your system works?

I’ll try to explain.

My heating system is 25% controlled by the outside temperature and 75% controlled by the ACTUAL inside temperature. This is a complex algorithm inside the Broetje heating system.

750 Heizkreis 1 - Raumeinfluss: 75 %

I am simulating a room thermostat - because I don’t have one and for Broetje a room thermostat with wireless is crazy expensive.

So every 5 minutes I send the ACTUAL MINIMUM house temperature (measured by 2 Zigbee temperature sensors in the living room and dining room) to my heating system via /I10000=.

This has to be done frequently, as the heating system is resetting the value after 10 minutes and will then revert back to the outside temperature model.

The target temperature is most of the time not changed, as the heating system will be automatically set to Komfort (when somebody is home) or Automatik (schedule that changes between Komfort (comfort=20.5°C) and Reduziert (reduced=18°C) heating.

I need to send the actual temperature every 5 minutes for the heating system to respect that setting and adjust the power).

This makes it clear. I will try to incorporate the i1000 temperature push. I am not able to test it but sure you can when having the lib ready. unit test covers now around 80 procent of the code. Should be enough for release I guess.

btw. Can’t the bsblan module not have a sensor on the board and send the temperature to the heating system? Maybe ask the developer? It’s connected like a thermostat. So maybe it could?

The board supports additional sensors. However, this is not an option for me, as the heating system and the Arduino with the board are located in the basement of my house. Living room and dining room are one or two floors above.

Hi, just tried a google search with our Brötje BBK 22 F and was really surprised that there has been a component to work with HA.
Is there a chance that it will be updated to newest HA Version?
By the way, what do I need to connect the Brötje heating system? Is this Feature on board the Brötje control circuit?

Best regards from Hamburg
Jörg