0% found this document useful (0 votes)
4K views230 pages

Manual BSB LPB LAN Adapter

Uploaded by

Francois CLOT
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4K views230 pages

Manual BSB LPB LAN Adapter

Uploaded by

Francois CLOT
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 230

Manual for the BSB-LPB-LAN Adapter and the

BSB-LAN Software - Printer Friendly Version of


the Site https://1coderookie.github.io/BSB-
LPB-LAN_EN

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 1/230


Table of contents
Back to Introduction

Table of Contents

Users of the outdated setup adapter v2 + Mega: please note appendix D!

Introduction

Quick Start Guide for Arduino Due

Quick Start Guide for ESP32 Boards

1. BSB-LAN: The Hardware

1.1 Adapter
1.1.1 Due Version
1.1.2 ESP32 Version

1.2 Arduino Due


1.2.1 Due + LAN: The LAN Shield
1.2.2 Due + WLAN: The ESP8266-WiFi-Solution

1.3 ESP32
1.3.1 ESP32 With Specific "BSB-LAN ESP32"-Adapter
1.3.1.1 ESP32: NodeMCU "Joy-It"
1.3.1.2 ESP32: Olimex ESP32-EVB & ESP32-PoE
1.3.2 ESP32 With Due-Compatible BSB-LAN-Adapter From V3
1.3.3 ESP32 With Outdated BSB-LAN-Adapter V2

1.4 Raspberry Pi
1.5 Housing

2. BSB-LAN: The Software

2.1 Installation
2.1.1 Installation onto the Due
2.1.2 Installation onto the ESP32
2.1.3 Updates

2.2 Configuration
2.2.1 Configuration via Webinterface
2.2.2 Configuration by Adjusting the Settings Within BSB_LAN_config.h

2.3 Adding Parameters Manually From v2.2

3. BSB-LAN Setup: Connection and Startup

3.1 Connecting the Adapter


3.2 Function Test and First Use

3.3 Create Device-Specific Parameter List


3.4 Debugging and Troubleshooting

4. BSB-LAN: The Webinterface

5. BSB-LAN: Query and Control

5.1 URL Commands

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 2/230


5.2 MQTT
5.3 JSON
5.4 Special Parameters

6. BSB-LAN: Special Functions

6.1 Logging Data


6.2 IPWE Extension
6.3 Transmitting a Room Temperature
6.4 Simulating the Presence Function
6.5 Triggering a Manual DHW-Push

6.6 Changing the Date, Time and Time Programs


6.7 Transmitting an Alternative Outside Temperature
6.8 Integrating Own Code in BSB-LAN
6.9 Using the Webserver Function
6.10 Using the Alternative AJAX Web Interface

6.11 Room Unit Emulation


6.12 Erasing EEPROM Using Pincontacts

7. BSB-LAN Setup: Optional Hardware

7.1 Usage of Optional Sensors: DHT22, DS18B20, BME280


7.1.1 Notes on DHT22 Temperature/Humidity Sensors
7.1.2 Notes on DS18B20 Temperature Sensors
7.1.3 Notes on BME280 Sensors

7.2 Relays and Relayboards


7.3 MAX! Components

7.4 Own Hardwaresolutions


7.4.1 Substitute for a Room Unit (Arduino Uno, LAN Shield, DHT22, Display, Push Button Switch)
7.4.2 Room Temperature Sensor (Wemos D1 mini, DHT22, Display)
7.4.3 Substitute for a Room Unit with UDP Communication
7.4.3.1 UDP with Arduino Uno + LAN Shield
7.4.3.2 UDP with ESP32
7.4.4 Xiaomi Mijia BLE Sensors

7.5 LAN Options for the BSB-LPB-LAN Adapter


7.5.1 Usage of a PowerLAN / dLAN
7.5.2 WLAN: Usage of an Additional Router

8. Integration via Additional Software

8.1 FHEM
8.2 openHAB

8.2.1 openHAB-Binding
8.2.2 openHAB with Javascript Transformation
8.2.3 openHAB with Javascript Transformation, MQTT, Network and Expire
8.3 HomeMatic (EQ3)
8.4 ioBroker

8.5 Loxone

8.6 IP-Symcon
8.7 MQTT, InfluxDB, Telegraf and Grafana

8.8 MQTT and FHEM


8.9 MQTT2 and FHEM

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 3/230


8.10 EDOMI
8.11 Home Assistant

8.12 SmartHomeNG
8.13 Node-RED

8.14 Data Processing Using Bash Script

8.15 Volkszaehler
8.16 Homebridge

8.17 Jeedom

9. Excursus: Reading Out New Parameter Telegrams

10. Excursus: Heating Controllers and Accessories

10.1 Bus Systems of the Heating Controllers: BSB, LPB, PPS


10.1.1 BSB
10.1.2 LPB
10.1.3 PPS

10.2 Detailed Description of the Supported Controllers


10.2.1 LMx Controllers
10.2.1.1 LMU Controllers
10.2.1.2 LMS Controllers
10.2.2 RVx Controllers
10.2.2.1 RVA and RVP Controllers
10.2.2.2 RVS Controllers
10.2.3 Note: Incompatible Systems from Broetje and Elco
10.2.4 Note: Special Case LMU54/LMU64 Controllers
10.2.5 Note: Special Case Weishaupt Heating Systems
10.2.6 Note: Retrofitting an LPB by Using an OCI420 ClipIn

10.3 Expansion- and ClipIn-Modules

10.4 Operating Units


10.5 Conventional Room Units for the Listed Controllers
10.5.1 QAA55 / QAA58
10.5.2 QAA75 / QAA78
10.5.3 QAA74
10.5.4 Broetje IDA
10.5.5 QAA53 / QAA73
10.5.6 QAA50 / QAA70

10.6 Special Accessories: Webserver OZW672 and Servicetool OCI700

10.7 Sensor Types

11. Excursus: Successfully Tested Heating Systems

11.1 Broetje

11.2 Elco
11.3 Other Manufacturers

12. Excursus: Arduino IDE

12.1 Installation
12.1.1 Arduino Due
12.1.2 ESP32

12.2 Serial Monitor

13. Excursus: Reaching BSB-LAN Securely from the Internet

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 4/230


14. Possible Error Messages and their Causes

14.1 Error Message "unknown type xxxxxxxx"

14.2 Error Message "error 7 (parameter not supported)"

14.3 Error Message "query failed"


14.4 Error Message "ERROR: set failed! - parameter is readonly"

14.5 Error Message "decoding error"

15. Problems and their Possible Causes

15.1 Arduino IDE Stops Compiling

15.2 The Red LED of the Adapter Isn't Lit


15.3 The Red LED Is Lit, but a Query Isn't Possible

15.4 Access to the Webinterface Isn't Possible

15.5 No Connection to WiFi Possible


15.6 No Query of Parameters Possible

15.7 Controller Isn't Recognized Correctly


15.8 Heating Circuit 1 Can't Be Controlled

15.9 Room Temperature Can't Be Transmitted to Heating Circuit 1

15.10 Heating Circuit 2 Can't Be Controlled


15.11 Room Temperature Can't Be Transmitted to Heating Circuit 2

15.12 Settings of the Controller Can't Be Changed via Adapter


15.13 Sometimes the Adapter Doesn't React to Queries or SET-Commands

15.14 'Nothing' Happens at the Query of the Logfile

15.15 No 24-Hour Averages Are Displayed


15.16 'Nothing' Happens at the Query of DS18B20/DHT22 Sensors

15.17 The DS18B20 Sensors Are Showing Wrong Values


15.18 The 'Serial Monitor' of the Arduino IDE Doesn't Provide Data

16. FAQ

16.1 Can I Use the Adapter & Software with a Raspbery Pi?
16.2 Can I Connect One Adapter to Two Controllers at the Same Time?

16.3 Can I Connect an Adapter via LPB And Query Different Controllers?
16.4 Is a Multifunctional Input of the Controller Directly Switchable via Adapter?

16.5 Can an Additional Relayboard Be Connected And Controlled by the Ardunio?

16.6 Can I Query the State of a Connected Relay?


16.7 Can I Be Helpful to Add Yet Unknown Parameters?

16.8 Why Do Some Parameters Appear Doubly Within a Complete Query?


16.9 Why Aren't Certain Parameters Displayed Sometimes?

16.10 Why Isn't Access to Connected Sensors Possible?

16.11 I'm Using a W5500 LAN-Shield, What Do I Have to Do?


16.12 Can States Or Values Be Sent As Push-Messages?

16.13 Can (e.g.) FHEM 'Listen' to Certain Broadcasts?


16.14 Why Sometimes Timeout Problems Occur Within FHEM?

16.15 Is There a Module For FHEM?

16.16 Why Aren't Any Values Displayed At Burnerstage 2 Within /K49?


16.17 It Appears to Me That the Displayed Burner-Values of /K49 Aren't Correct.

16.18 What Is the Exact Difference Between /M1 and /V1?

16.19 Can I Implement My Own Code In BSB-LAN?

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 5/230


16.20 Can I Integrate MAX! Thermostats?

16.21 Why Isn't the Adapter Reachable After a Power Failure?


16.22 Why Isn't the Adapter Reachable Sometimes (Without a Power Failure)?

16.23 Why Do 'Query Failed' Messages Occur Sometimes?

16.24 I Don't Find a LPB or BSB Connector, Only L-BUS And R-BUS?!
16.25 Is There An Alternative Besides Using LAN?

16.26 I Am Using The Outdated Setup Adapter v2 + Arduino Mega 2560 - Is There Anything I Have To Take Care Of?
16.27 I Am Getting Error Messages from the Arduino IDE - What Can I Do?

16.28 Connection to the WiFi Network can't be Established

16.29 BSB-LAN often crashes or the WiFi connection is unstable.

16.30 I cannot find the setting for writing the parameters / The "set" button is missing
16.31 Why can't I find the parameter XYZ anywhere?
16.32 The LED flickers, but no connection to the heating is established.
16.33 I Have Further Questions, Who Can I Contact?

17. Further Informations and Sources

Appendix A1: Circuit Diagram BSB-LPB-LAN Adapter v4 (Due version)

Appendix A2: Notes on the Circuit Diagram

A2.1 Short Explanation of the Circuit Diagram


A2.2 Parts List
A2.3 General Notes

Appendix B: Pinouts

B1 Arduino DUE

B2 Joy-It ESP32 NodeMCU


B3 Olimex ESP32-EVB

Appendix C: Changelog BSB-LAN Software

Appendix D: Notes For Users Of The Outdated Setup Adapter v2 + Mega 2560

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 6/230


Back to Introduction
Introduction
This manual was written to make the start and the usage of the BSB-LAN hard- & software easier.

It is suggested to read the manual completely before starting the installation and usage of the adapter and the software.

The copyright belongs to the author of this manual: Ulf Dieckmann.

Jump straight to the TOC

Download the PDF version of this manual

Quick Start Guides for the installation and commissioning of the BSB-LAN setups are available here:

Quick Start Guide for Arduino Due

Quick Start Guide for ESP32 Boards

WATCH OUT:
There is NO WARRANTY or GUARANTEE of any kind that this adapter will NOT damage your heating system!
Any implementation of the steps described here, any replica of the adapter and any use of the hardware and software described is at
your own risk!
None of the contributors or authors can be held liable for any damages of any kind!

BSB-LPB-LAN - A Short Introduction


"BSB-LPB-LAN" is a community based hardware and software project, which allows access to the controllers of different heating systems from
certain manufacturers via PC / laptop / tablet / smartphone.

The project consists of two specific components:

the hardware, which basically is a logic level converter and which is called "BSB-LAN adapter" in the following and

the BSB-LAN software, which has to be flashed onto a compatible microcontroller.

The BSB-LAN adapter converts the 12V bus signals from the heating system to a suitable 3,3V signal for the necessary microcontroller.
The adapter has to be connected to the compatible controller of the heating system and has to be used in conjunction with a compatible
microcontroller (Arduino Due or ESP32).
The microcontroller itself then will be integrated in your home network (either via LAN oder WiFi, depending on the chosen microcontroller).
The controller of the heating system must be equipped with a "Boiler System Bus" (BSB), a "Local Process Bus" (LPB) or a "Point-to-Point
Interface" (PPS). These are mostly heating systems in which a SIEMENS controller is used (or, depending on the heater manufacturer, usually a
branded OEM version).

The BSB-LAN software then converts the logic levels to specific 'bus telegrams'. It basically gives access to the controller of the heating system.
It offers various functions like monitoring values and the state of parameters, logging and (if wanted) controlling and changing settings via a
webinterface.
An optional integration into an existing SmartHome system is also possible. An integration in systems such as FHEM, openHAB, HomeMatic,
ioBroker, Loxone, IP-Symcon, EDOMI, Home Assistant, SmartHomeNG or Node-RED can be done via HTTPMOD, JSON or MQTT.
In addition, the use of the adapter as a standalone logger without LAN/WiFi or internet connection when using a microSD card is also possible.
Furthermore, optional temperature and humidity sensors can be connected and their data can also be logged and evaluated.
You also have the ability to integrate your own code into the BSB-LAN software, which offers a wide range of expansion options.

As a first rough orientation, whether your own heating system is compatible or not, you can search for a connection option for optional room units
in the operating instructions of your heater.
If room units of the QAA55 / QAA75 type are listed as compatible (Broetje also refers to these as "RGB Basic" and "RGT B Top"), then the
adapter can be connected via BSB. This is the case with most oil fired, gas fired and heat pump systems of the last years.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 7/230


If other room units are listed, see the chapter Room Units.
However, accurate information if the adapter could be connected only provides the actual controller name and the manual of the controller.

The following overview shows the most common used controllers of the different heating systems which will work with BSB-LAN.
As a basic rule we can say, that the controller types of the last years which are named with an S at the end (RVS and LMS) are compatible with
BSB-LAN and offer (mostly) the full range of funtionality.
For further and more detailed informations about the different controllers and the connection see the corresponding chapters.

To see a detailed listing of the reported systems which are sucessfully used with BSB-LAN please follow the corresponding link:

Broetje

Elco

Other Manufacturers (e.g. Fujitsu, Atlantic, Weishaupt)

Gas-fired heating systems controllers:

LMU74/LMU75 and LMS14/LMS15, connection via BSB, complete functionality

LMU54/LMU64, connection via PPS, limited functionality

Oil-fired heating systems controllers / solarthermic controllers / zone controllers:

RVS43/RVS63/RVS46, connection via BSB, full functionality

RVA/RVP, connection via PPS (modelspecific sometimes LPB), limited functionality

Heat pump controllers:

RVS21/RVS61, connection via BSB, full functionality

Weishaupt (model WTU):

RVS23, connection via LPB, (nearly) full functionality

The software is available here.

Authors:
Software, schematics v1, first documentation EN, support
up to v0.16:
Gero Schumacher

Software, PCB schematics v1 & v2, first documentation EN, support


since v0.17:
Frederik Holst (bsb [ät] code-it.de)

Debugging, manuals, translations, support


since v0.17:
Ulf Dieckmann (adapter [ät] quantentunnel.de)

Based upon the code and the work of many other users and developers! Thanks!

Further to the TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 8/230


Users of the outdated setup adapter v2 + Mega: please note
appendix D!
Back to TOC
Back to appendix C

Appendix D: Notes For Users Of The Outdated Setup Adapter v2 +


Mega 2560
For users of the outdated setup, the following refers to some questions and points that need clarification or that need to be considered. If further
questions occur, please post your questions in the corresponding thread of the german FHEM forum .
Please understand, however, that we will not answer any questions that may arise, for example, about building an adapter v2 after the
changeover to adapter v3.
PCBs v2 are no longer available, state of the art is the combination adapter v4.x + Due/ESP32.

Note:
It is possible to use the adapter v2 with an ESP32 (after making some small changes). This way, one could use the current version of
BSB-LAN without the need to use a new adapter. Please read chap. 1.3.3 for further informations.

Do I have to switch to the new setup adapter v3/v4 + Due?


No, if you are satisfied with the outdated setup and the range of functions of BSB-LAN has met your requirements so far, you can of course
continue to use the old setup.

Is there anything to consider regarding the BSB-LAN version?


Yes. The last 'officially' tested and recommended version for your setup is version v0.44! Within the zip-file there you'll also find the last
'Mega2560-specific' version of the manual (PDF).

But: It has been shown by several users that even the v1.1 still runs without major restrictions, but due to the lack of memory of the Mega
2560 probably already no longer with all available options that BSB-LAN offers.

Starting from v2.x it is then definitely necessary to deactivate some modules which BSB-LAN offers. Hints concerning this can be found in
chap. 5.2 or in the comments of the file BSB_LAN_config.h. Special attention should be paid to the last points, which offer a comfortable
deactivation of individual modules (e.g. Webconfig, MQTT, IPWE etc.) at central place.

What do I have to consider if I want to use the current v2.x?


As already mentioned you have to adjust the configuration in a way that it fits the smaller memory of the Mega 2560. Besides the already
mentioned deactivation of certain modules you have further possibilities:

1) You can reduce the size of some variables like PASSKEY[] , avg_parameters[] , log_parameters[] , ipwe_parameters[] ,
max_device_list[] for saving RAM (if you don't need as much parameters as maximum possible for example).

2) Within the file BSB_LAN_config.h you find a section at the end of the file where certain functions of BSB-LAN can be deactivated if you
don't use them anyway. Notes regarding this you'll find in the file itself.

3) Creating a controller specific BSB_LAN_defs.h:


There is a perlscript named selected_defs.pl and a Windows executable named selected_defs.exe in the repo that filters the file
BSB_LAN_defs.h for selected device families and creates a specific file for your own controller type. The saving is on average about 20 to
25 kB of flash memory, which can then be used for the (re-)activation of other functions. In case of a controller change (= other device
family) the file must of course be regenerated accordingly.
The script runs under Perl, which is installed by default on Mac and Linux computers, but can also be installed on Windows.

Procedure for creating a controller-specific defs file:

Retrieve parameter 6225 "Device family" via BSB-LAN and note the value.

Before executing, copy the file selected_defs.pl or selected_defs.exe respectively in the same folder, where the file BSB_LAN_defs.h is
located.

Open a terminal, enter the corresponding folder and create the reduced file named BSB_LAN_defs_filtered.h using the Perl script or the

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 9/230


Windows executable, which contains only the parameters relevant for the specific device family/families. If only one controller is
connected, for example with device family 162, the command is
./selected_defs.pl 162 > BSB_LAN_defs_filtered.h or
selected_defs.exe 162 > BSB_LAN_defs_filtered.h respectively.
If you have e.g. two devices on the bus with the device families 162 and 90, you can extend the command by the second value:
./selected_defs.pl 162 90 > BSB_LAN_defs_filtered.h or
selected_defs.exe 162 90 > BSB_LAN_defs_filtered.h respectively.

Move the original file BSB_LAN_defs.h from the "BSB_LAN" directory to a different location. Move the newly created file
BSB_LAN_defs_filtered.h to the directory "BSB_LAN" (if you didn't already create the file within that directory).

Important: Now rename the newly created file to "BSB_LAN_defs.h"!

Is there anything to consider regarding the settings of RX-/TX-pins?


Yes! If you still to test a newer version than v0.44 on the Mega, make sure that you use the corresponding file BSB_LAN_config.h.default
and adjust it accordingly:

With a version of BSB-LAN before v2.x it is absolutely necessary to adapt the line BSB bus(19,18); : The DUE uses (in contrast to the
Mega) the HardwareSerial interface and other RX/TX pins than the Mega, which is already preset here. When used with the Mega, the
line must therefore be changed to BSB bus(68,69); !

With a version of BSB-LAN since v2.x an automatic detection of the used pins is implemented. Therefore BSB-LAN autodetects if a
Mega (= software serial) or a Due (= hardware serial) is used.

Can I continue to use the Adapter v2 on a Due?


No! The reason for this is that neither the adapter v2 nor the Due has an EEPROM, which is necessary for BSB-LAN. So if you want to
benefit from the new functions of BSB-LAN in the future, you have to get an adapter v3/v4 or make it yourself and use it with an Arduino
Due.

Can I 'convert' the adapter v2 to an adapter v3/v4?


No! The primary reason for this is (among other reasons) again the missing EEPROM of the Due.

Can I continue to use the adapter v3/v4 with my previous Mega 2560?
No! Even if it would be possible after some changes to the adapter v3/v4, it would not offer any added value compared to the adapter v2.
New functions of BSB-LAN would still not be able to be used due to the lack of memory of the Mega 2560. So if you want to use the new
adapter v3/v4, then only in combination with an Arduino Due.

Why is there an EEPROM on the v3/v4 board?


The Arduino Due has no EEPROM, but this is necessary for BSB-LAN.

Can I continue to use the LAN-Shield if I change to the Due?


Yes, usually this is possible without any problems. A trouble-free usage of clones can't be guaranteed though.

Can I continue to use my existing housing?


Yes, the Due has the same form factor as the Mega 2560, so the dimensions of the case should fit. However, you will probably have to
adapt your case a bit and add a cutout or a large hole for the middle USB port of the Due ('Programming Port'), so that you can continue to
connect the corresponding USB cable comfortably.

Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 10/230


Introduction
Introduction
This manual was written to make the start and the usage of the BSB-LAN hard- & software easier.

It is suggested to read the manual completely before starting the installation and usage of the adapter and the software.

The copyright belongs to the author of this manual: Ulf Dieckmann.

Jump straight to the TOC

Download the PDF version of this manual

Quick Start Guides for the installation and commissioning of the BSB-LAN setups are available here:

Quick Start Guide for Arduino Due

Quick Start Guide for ESP32 Boards

WATCH OUT:
There is NO WARRANTY or GUARANTEE of any kind that this adapter will NOT damage your heating system!
Any implementation of the steps described here, any replica of the adapter and any use of the hardware and software described is at
your own risk!
None of the contributors or authors can be held liable for any damages of any kind!

BSB-LPB-LAN - A Short Introduction


"BSB-LPB-LAN" is a community based hardware and software project, which allows access to the controllers of different heating systems from
certain manufacturers via PC / laptop / tablet / smartphone.

The project consists of two specific components:

the hardware, which basically is a logic level converter and which is called "BSB-LAN adapter" in the following and

the BSB-LAN software, which has to be flashed onto a compatible microcontroller.

The BSB-LAN adapter converts the 12V bus signals from the heating system to a suitable 3,3V signal for the necessary microcontroller.
The adapter has to be connected to the compatible controller of the heating system and has to be used in conjunction with a compatible
microcontroller (Arduino Due or ESP32).
The microcontroller itself then will be integrated in your home network (either via LAN oder WiFi, depending on the chosen microcontroller).
The controller of the heating system must be equipped with a "Boiler System Bus" (BSB), a "Local Process Bus" (LPB) or a "Point-to-Point
Interface" (PPS). These are mostly heating systems in which a SIEMENS controller is used (or, depending on the heater manufacturer, usually a
branded OEM version).

The BSB-LAN software then converts the logic levels to specific 'bus telegrams'. It basically gives access to the controller of the heating system.
It offers various functions like monitoring values and the state of parameters, logging and (if wanted) controlling and changing settings via a
webinterface.
An optional integration into an existing SmartHome system is also possible. An integration in systems such as FHEM, openHAB, HomeMatic,
ioBroker, Loxone, IP-Symcon, EDOMI, Home Assistant, SmartHomeNG or Node-RED can be done via HTTPMOD, JSON or MQTT.
In addition, the use of the adapter as a standalone logger without LAN/WiFi or internet connection when using a microSD card is also possible.
Furthermore, optional temperature and humidity sensors can be connected and their data can also be logged and evaluated.
You also have the ability to integrate your own code into the BSB-LAN software, which offers a wide range of expansion options.

As a first rough orientation, whether your own heating system is compatible or not, you can search for a connection option for optional room units
in the operating instructions of your heater.
If room units of the QAA55 / QAA75 type are listed as compatible (Broetje also refers to these as "RGB Basic" and "RGT B Top"), then the
adapter can be connected via BSB. This is the case with most oil fired, gas fired and heat pump systems of the last years.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 11/230


If other room units are listed, see the chapter Room Units.
However, accurate information if the adapter could be connected only provides the actual controller name and the manual of the controller.

The following overview shows the most common used controllers of the different heating systems which will work with BSB-LAN.
As a basic rule we can say, that the controller types of the last years which are named with an S at the end (RVS and LMS) are compatible with
BSB-LAN and offer (mostly) the full range of funtionality.
For further and more detailed informations about the different controllers and the connection see the corresponding chapters.

To see a detailed listing of the reported systems which are sucessfully used with BSB-LAN please follow the corresponding link:

Broetje

Elco

Other Manufacturers (e.g. Fujitsu, Atlantic, Weishaupt)

Gas-fired heating systems controllers:

LMU74/LMU75 and LMS14/LMS15, connection via BSB, complete functionality

LMU54/LMU64, connection via PPS, limited functionality

Oil-fired heating systems controllers / solarthermic controllers / zone controllers:

RVS43/RVS63/RVS46, connection via BSB, full functionality

RVA/RVP, connection via PPS (modelspecific sometimes LPB), limited functionality

Heat pump controllers:

RVS21/RVS61, connection via BSB, full functionality

Weishaupt (model WTU):

RVS23, connection via LPB, (nearly) full functionality

The software is available here.

Authors:
Software, schematics v1, first documentation EN, support
up to v0.16:
Gero Schumacher

Software, PCB schematics v1 & v2, first documentation EN, support


since v0.17:
Frederik Holst (bsb [ät] code-it.de)

Debugging, manuals, translations, support


since v0.17:
Ulf Dieckmann (adapter [ät] quantentunnel.de)

Based upon the code and the work of many other users and developers! Thanks!

Further to the TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 12/230


Quick Start Guide for Arduino Due
Back to Introduction

Quick Start Guide for Arduino Due


The following brief instructions do not replace the reading of the detailed manual!
Please also read the respective more detailed explanations in the corresponding chapters.

Caution: Electrostatic charges can cause irreparable damage - ground yourself before starting work!

Prepare the setup by plugging the LAN shield and the adapter onto the Arduino Due, plug in a LAN cable and connect the Arduino setup to your
computer with a USB cable. Make sure you are using the 'Programming Port' of the Due, which is the USB port in the middle, right next to the
power supply.
If your computer does not recognize the Due automatically, you have to install the appropriate driver for your operating system.

The complete setup (Arduino Due + LAN shield + BSB-LPB-LAN adapter v3), belonging cables included.

Now proceed with the following steps:

1. Download and install the latest version of the ArduinoIDE.

2. Download the current version of BSB-LAN.

3. Unzip the downloaded file "BSB_LAN-master.zip" and enter it.

4. Enter the folder "BSB-LAN-master"/"BSB_LAN" and rename the files BSB_LAN_custom_defs.h.default to BSB_LAN_custom_defs.h and
BSB_LAN_config.h.default to BSB_LAN_config.h!

5. Start the ArduinoIDE by double-clicking the file "BSB_LAN.ino" in the BSB_LAN folder.

Check the correct serial port where the Arduino Due is connected to the computer under "Tools/Port".

Set the transfer speed/baud rate to 115200.

| Note | |:-----| | If you encounter problems until here (e.g. the board is not recognized), please read the detailed description in chapter 2.1.1.
|

6. Adjust the settings in the file "BSB_LAN_config.h" according to your wishes and circumstances.
This applies in particular to settings regarding the use of DHCP, a possibly different IP address, and the optional security functions.

When all settings are adjusted, start the flash process by clicking on "Sketch/Upload" or "Sketch/Upload".

| Note | |:-----| | In addition to the adjustment of the file "BSB_LAN_config.h" the adjustment of the configuration of BSB-LAN can also be

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 13/230


done later via web interface. |
| Further hints as well as a description of all configuration options can be found in chapter 2.2! |

7. After finishing the flash process start the Serial Monitor of the Arduino IDE and watch the output which is done when starting the Arduino.
Among other things, the IP that is assigned to the setup when using DHCP is displayed there.

After finishing the startup process, it's advisable to disconnect the power supply of the Arduino , that means removing the board from
the USB port of your computer. This is not mandatory, but recommended for safety reasons.

8. Switch off your heating system so that the controller is no longer power supplied.

Now connect the adapter of the Arduino setup to the controller.


To do this, connect the controller-side connections "CL +" and "CL-" (for BSB use) or "DB" and "MB" (for LPB use) to the identically named
connections of the adapter.
Pay attention to the correct connection: The connected connections must be the same, e.g. "CL +" to "CL +" and "CL-" to "CL-"!

| Note | |:-----| | For detailed instructions on how to connect a controller with PPS connections and illustrations of various controllers and the
corresponding connections to be used, please refer to chapter 3.1! |

9. Switch on the heating system / the controller.

10. Restart the setup by pressing the reset button or restore the power supply of the Arduino setup, ideally with a specific power supply with
connection to the hollow plug socket.
If you do not (yet) have a suitable power supply at hand, you can also supply the Arduino setup with power via the USB socket. This can be
done either via a powerful USB power supply or via your USB port on the computer.
The latter variant is advantageous in that you can use the Serial Monitor of the Arduino IDE in parallel to control the startup behavior of the
setup.

11. Start an internet browser and go to the page of the BSB-LAN web interface.
It can be found at the IP address you previously set in step 6 (the default is "192.168.178.88").
When using DHCP, the IP can be read out from the start sequence of the Arduino Due by using the Serial Monitor of the Arduino IDE.

If everything is installed correctly, you will now have (limited) access to the controller of your heating system. To gain access to all of the
parameters your controller offers, see step 12!

| Note | |:-----| | If -contrary to expectations- errors or problems arise, then in addition to the chapters already mentioned, also read chapters
13, 14 and 15. |

12. You now have to create a device specific file BSB_LAN_custom_defs.h to get access to all of the parameters of your controller! Therefore
please read chap. 3.3 and perform the steps mentioned there!

Have fun with BSB-LAN wish you Frederik and Ulf! :)

Further on to the Quick Start Guide for ESP32 Boards

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 14/230


Quick Start Guide for ESP32 Boards
Back to Quick Start Guide for Arduino Due

Quick Start Guide for ESP32 Boards


The following brief instructions do not replace the reading of the detailed manual!
Please also read the respective more detailed explanations in the corresponding chapters.

Caution: Electrostatic charges can cause irreparable damage - ground yourself before starting work!

Attention: Consider your ESP32 board type in the following instructions!

Joy-It ESP32 NodeMCU :


Plug the NodeMCU on the BSB-LAN adapter and connect the NodeMCU with a USB cable to your computer.
If your computer does not recognize the NodeMCU automatically, you have to install the appropriate driver for your operating system.

The complete setup (Joy-It ESP32 NodeMCU + BSB-LPB-LAN adapter).

Olimex ESP32-EVB & ESP32-PoE:


Plug the BSB-LAN adapter into the Olimex and connect the Olimex with a USB cable to your computer.
When plugging on the adapter board, make sure meticulously that the UEXT1 socket of the board is plugged on exactly in the
middle of the Olimex socket and that all pins of the Olimex have contact! Otherwise, when the adapter is correctly connected to the
heating controller, the LED of the adapter lights up, but no access to the controller is possible.
Also ensure that the circuit board is plugged onto the Olimex in the correct orientation (see photo)!

If your computer does not recognize the Olimex automatically, you have to install the appropriate driver for your operating system.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 15/230


The complete setup: Olimex ESP32-EVB with the plugged on "BSB-LAN ESP32" adapter v4.2.

The complete setup: Olimex ESP32-PoE with the plugged on "BSB-LAN ESP32" adapter v4.4.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 16/230


Now proceed with the following steps:

1. Download and install the latest version of the ArduinoIDE.


Then add the ESP32-SDK via board manager URL (Attention: use SDK 2.0.2 or higher!) and install the ESP32 board libraries in the board
manager. Here you will find detailed step-by-step instructions.

2. Download the current version of BSB-LAN.

3. Unzip the downloaded file "BSB_LAN-master.zip" and enter it.

4. Enter the folder "BSB-LAN-master"/"BSB_LAN" and rename the files BSB_LAN_custom_defs.h.default to BSB_LAN_custom_defs.h and
BSB_LAN_config.h.default to BSB_LAN_config.h!

Open the file "BSB_LAN_config.h" and activate the definition '#define WIFI' if you want to use WiFi. If you are using an Olimex board
and want to use LAN, please leave the definement deactivated: //#define WIFI .

If you want to use WiFi, enter the access data for your WiFi network at the entries
char wifi_ssid[32] = "YourWiFiNetwork"; and
char wifi_pass[64] = "YourWiFiPassword"; .

5. Start the ArduinoIDE by double-clicking the file "BSB_LAN.ino" in the BSB_LAN folder.

Check the correct serial port to which the ESP32 board is connected to the computer under "Tools/Port".

Set the transfer speed/baud rate to 115200

| Attention | |:----------| | Now select the appropriate ESP32 board type under Tools/Board or Tools/Board and adjust the board settings! |

For the Joy-It ESP32-NodeMCU recommended in this manual (or identical clones with an "ESP32-WROOM" chip) the appropriate
board type is "ESP32 Dev Module".
Then select the variant "Default 4MB with spiffs (1.2BM APP/1.5MB SPIFFS)" for "Partition Scheme".

For the recommended Olimex ESP32-EVB & ESP32-PoE please select the entry with the same name from the list.
Then select the variant "Minimal SPIFFS (Large APPS with OTA)" for "Partition Scheme".

| Note | |:-----| | If you encounter problems until here (e.g. that the board is not recognized), please read the detailed description in chapter
2.1.2! |

6. Adjust the settings in the file "BSB_LAN_config.h" according to your wishes and circumstances.
This applies in particular to settings regarding the use of DHCP, a possibly different IP address, and the optional security functions.

When all settings are adjusted, start the flash process by clicking on "Sketch/Upload" or "Sketch/Upload".

| Note | |:-----| | In addition to the adjustment of the file "BSB_LAN_config.h" the adjustment of the configuration of BSB-LAN can also be
done later via web interface. |
| Further hints as well as a description of all configuration options can be found in chapter 2.2! |

7. After finishing the flash process start the Serial Monitor of the Arduino IDE and watch the output which is done when starting the ESP32.
Among other things, the IP that is assigned to the setup when using DHCP is displayed there.

After finishing the startup process, it's advisable to disconnect the power supply of the ESP32 , that means removing the board from the
USB port of your computer. This is not mandatory, but recommended for safety reasons.

8. Switch off your heating system so that the controller is no longer power supplied.

Now connect the adapter of the Arduino setup to the controller.


To do this, connect the controller-side connections "CL +" and "CL-" (for BSB use) or "DB" and "MB" (for LPB use) to the identically named
connections of the adapter.
Pay attention to the correct connection: The connected connections must be the same, e.g. "CL +" to "CL +" and "CL-" to "CL-"!

| Note | |:-----| | For detailed instructions on how to connect a controller with PPS connections and illustrations of various controllers and the
corresponding connections to be used, please refer to chapter 3.1! |

9. Switch on the heating system / the controller.

10. Restart the setup by pressing the reset button or restore the power supply of the ESP32 board setup, ideally with a specific power supply
with connection to the microUSB socket (NodeMCU) or hollow plug socket (Olimex).

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 17/230


If you don't have a suitable power supply at hand (yet), the power can also be supplied via your USB port on the computer.
The latter variant is advantageous in that you can use the Serial Monitor of the Arduino IDE in parallel to control the startup behavior of the
setup.

11. Start an internet browser and go to the page of the BSB-LAN web interface.
It can be found at the IP address you previously set in step 6 (the default is "192.168.178.88").
When using DHCP, the IP can be read out from the start sequence of the Arduino Due by using the Serial Monitor of the Arduino IDE.

If everything is installed correctly, you will now have (limited) access to the controller of your heating system. To gain access to all of the
parameters your controller offers, see step 12!

| Note | |:-----| | If -contrary to expectations- errors or problems arise, then in addition to the chapters already mentioned, also read chapters
13, 14 and 15. |

12. You now have to create a device specific file BSB_LAN_custom_defs.h to get access to all of the parameters of your controller! Therefore
please read chap. 3.3 and perform the steps mentioned there!

Have fun with BSB-LAN wish you Frederik and Ulf! :)

Further on to the Table of Contents

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 18/230


1. BSB-LAN: The Hardware
Back to TOC

1. BSB-LAN: The Hardware


In the following chapters the hardware of the BSB-LAN setup is introduced. On the one hand it is the respective BSB-LAN adapter and on the
other hand the respective microcontroller on which the BSB-LAN software is flashed.

BSB-LAN can be operated with an Arduino Due as well as on an ESP32 together with the specific adapter. The respective platform specific
adapter allows a simple and exact fitting on the corresponding microcontroller. In some cases, a platform-specific adapter can also be used with
the other microcontrollers, but in this case it is not possible to fit the adapter exactly. Further information can be found in the respective note
boxes in the corresponding chapter.
Since there are platform and design specific differences between the compatible microcontrollers (Arduino Due / ESP32 NodeMCU / Olimex
ESP32-EVB), which have to be considered for certain applications (e.g. if further hardware should be connected), the most relevant differences
are briefly presented in the following as a tabular overview.
A possible retrofitting of individual components (such as a microSD card reader for a NodeMCU for example) is not considered here!

Arduino Due + LAN- ESP32 NodeMCU Olimex ESP32- Olimex ESP32-


Function
Shield "JoyIt" EVB PoE

LAN onboard Yes No Yes Yes

WLAN onboard No Yes Yes Yes

OTA update No Yes Yes Yes

microSD card reader onboard Yes No Yes Yes

Free pins very many many 2 (GPIO 13 & 16) many

Relay onboard No No Yes (2) No

Bluetooth onboard No Yes Yes Yes

Power-over-Ethernet No No No Yes

Due-specific adapter can be


Yes Yes Yes Yes
used

ESP-specific adapter can be


No Yes Yes Yes
used

Notes

Especially the few free pins at an Olimex ESP32-EVB, which can be used without problems for the connection of further hardware (like
sensors, relays, pushbuttons for example), may be an exclusion criterion to be considered!

If the internal logging function of BSB-LAN on microSD card is to be used, the NodeMCU should not be used, because the possibly frequent
write cycles when saving the data on the EEPROM chip of the ESP32 can lead to an early failure ("wear out").

Before deciding for one of the mentioned microcontrollers, it is therefore advisable to thoroughly consider the future application and possible
extensions on hardware basis. For this purpose it is recommended to read the manual carefully in advance.

Note regarding the use of a Raspberry Pi

As described in chap. 1.4, connecting the adapter to a Raspberry Pi is possible in principle, but using the BSB-LAN software is not. Apart
from that, we cannot recommend the use of an RPi as a microcontroller for this purpose. In our opinion, the main arguments against this are
price, power consumption and the operating system that has to be maintained.

1.1 Adapter

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 19/230


The BSB-LAN adapter basically is a logic level converter that converts the 12V bus signals into 3.3V signals for the necessary microcontroller.
The bus connections of the adapter are galvanically isolated from the actual electronic circuitry.
The BSB-LAN adapter is available in two different versions. On the one hand as Arduino Due specific version with an EEPROM , on the other
hand as an ESP32 specific version without EEPROM.

Attention

It should be noted at this point that the ESP32-specific adapter version can only be used with an ESP32 due to the missing EEPROM - the
Due-specific version, on the other hand, can also be used with an ESP32 (even if it cannot be plugged in comfortably).

The adapter can be built on your own by experienced users, a corresponding schematic for the Due-compatible version including EEPROM can
be found in Appendix A1 - for the ESP32-compatible version only the EEPROM is omitted, the rest of the circuit is identical.

In addition to the complete self-build, there is the possibility to buy ready-made adapter boards from Frederik Holst (bsb [ät] code-
it.de).
The PCBs available from Frederik can be plugged onto the compatible microcontrollers presented in the following (Arduino Due / Joy-It ESP32-
NodeMCU / Olimex ESP32-EVB) with an exact fit, so that you should consider thoroughly in advance which microcontroller you want to use for
the setup in the further course.

1.1.1 Due Version


The Due-specific version of the BSB LAN adapter has an EEPROM in which the settings of the BSB LAN software (from v2.0) are stored. The
adapter can be conveniently and securely plugged onto the Due.

The BSB-LAN adapter board, Due version, v4.1, top side, unpopulated.

Note

Using the Due-specific adapter on an ESP32 is possible in principle, despite the EEPROM, but the adapter cannot be plugged onto an
ESP32 board without problems, as is the case with a Due. If the adapter should nevertheless be used with an ESP32 board, care must be
taken to ensure that the connections between the adapter and ESP32 are made correctly and reliably.

1.1.2 ESP32 Version


For a specific ESP32 board variant there is a separate BSB-LAN adapter board: "BSB-LAN ESP32".

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 20/230


The "BSB-LAN ESP32" adapter board, v4.2, unpopulated.

This BSB-LAN adapter board is designed for the 30 pin ESP32 NodeMCU board from Joy-It (WROOM32 chip).

The "BSB-LAN ESP32" adapter, v4.2, assembled for the recommended NodeMCU.

In addition, the adapter can also be used with an Olimex ESP32-EVB and an Olimex ESP32-PoE. It can be plugged directly into the ten-pin
UEXT connector of Olimex boards by adding a double-row five-pin connector (2x5 pin, RM 2.54mm) on the bottom of the PCB.

The "BSB-LAN ESP32" adapter, v4.4, assembled for the Olimex boards.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 21/230


The ESP32 specific version of the BSB-LAN adapter has no EEPROM, settings are stored in the flash memory of the ESP32.

Note

Using the ESP32 specific adapter on a Due is not possible due to the missing EEPROM!

1.2 Arduino Due


In general, the use of an original Arduino Due is recommended.
From experience, however, cheap replicas ("clones") of the Arduino Due can also be used, the use of these clones is usually possible without any
problems. But: It should be paid attention if a modified board layout (e.g. changed pin assignments) is described in the prduct description. If this
is the case and you still want to buy it, you may need to make specific adjustments in the file BSB_lan_config.h.

ATTENTION: The GPIOs of the Arduino Due are only 3.3v compatible!

A pinout diagram of the Arduino Due is available in appendix b.

A compatible clone of the Arduino Due.

Notes

Regarding to the tech specs of the Arduino Due, it is recommended to use an external power source (recommended: 7-12V, limits: 6-16V) at
the intended connection of the Arduino (e.g. 9V/1000mA).

If you want to power the Due via USB, please use the "Programming Port".

It's possible to power the Due via the DC-IN and use USB connection at the programming port for connecting it to the computer at the same
time.

You can let the adapter be connected to the controller bus of the heater when flashing the Due.

Make sure that you are using an USB cable of good quality! This applies to the case that you want to power the Due via USB as well as to
the case that you want to connect the Due to your PC for flashing. Especially long and thin cables (e.g. accessories of smartphones) can
cause problems with the power supply and thus the stability of the Due and/or are not always fully wired, so that a use for data transfer is not
possible.

With some Due models/clones it can happen that they do not seem to work properly after an initial start (e.g. after a power failure) and only
work correctly after pressing the reset button. A possible solution for this problem could be to add a capacitor.

1.2.1 Due + LAN: The LAN Shield


In general, the use of an original Arduino LAN shield (v2) is recommended.
From experience, however, cheap replicas ("clones") of these LAN shields can also be used, the use of these clones is usually possible without

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 22/230


any problems. But: It should be paid attention if a modified board layout (e.g. changed pin assignments) is described in the product description. If
this is the case and you still want to buy it, you may need to make specific adjustments in the file BSB_lan_config.h.

There are / have been two different versions of LAN shields available on the market: one with a WIZnet W5100 chip (v1) and one with a W5500
chip (v2). The usage of a v2-shield is recommended, it's also available at the official Arduino store.

A compatible clone of a LAN shield with a W5100 chip.

Note

As a LAN cable one should preferably use a S/FTP type with a minimum length of one metre.

1.2.2 Due + WLAN: The ESP8266-WiFi-Solution


Another option for integrating the adapter setup into your WLAN is connecting an ESP8266 (NodeMCU or Wemos D1) additionally to the Arduino
Due via the six-pole SPI header.
The ESP8266 is supplied with power (+5V) by the Due and basically serves instead of the LAN shield only as an interface to access the Due via
the network. The ESP8266 has to be flashed with a special firmware for this purpose, you can read more about this later in this chapter. The
BSB-LAN software is still installed on the Due.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 23/230


The six-pole SPI header of the Arduino Due which has to be used.

The connections have to be done as follows:

Pin DUE Function Pin ESP8266

SPI 1 MISO (Master Innput Slave Output) D06

SPI 2 VCC (power supply ESP) +5V / Vin

SPI 3 SCK (Serial Clock) D05

SPI 4 MOSI (Master Output Slave Input) D07

SPI 6 GND (power supply ESP) GND

Pin 12 SS (Slave Select) D08

If no further component connected via SPI (e.g. LAN shield, card reader) is used, the connection of "SS" (SlaveSelect, DUE pin 12 = D08 at
ESP8266) can be omitted.
In case of the use of SS the connection can also be made to another pin than pin 12, the corresponding pin must be defined accordingly in the
file BSB_LAN_config.h. In this case, however, it must be ensured that the pin to be used is not one of the protected pins and is not used
elsewhere. It is therefore recommended to leave it at the default setting (pin 12).

The corresponding connectors at the Wemos D1.

It is suitable to remove the LAN shield, place an unpopulated circuit board on the Due and provide it with the appropriate connections. So the
Wemos D1 / NodeMCU can be placed stable onto the Due. Depending on the housing, the height may have to be taken into account.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 24/230


Wemos D1 at an empty circuit board onto the Arduino Due.

Note

However, this solution does not allow data to be logged to a microSD card. If this still should be possible using the WiFi connection, either a
corresponding card module must be connected additionally or the ESP must be connected in parallel to the existing LAN shield. In both
cases, the SS pin must be connected (see pin assignment/connection).
If a parallel usage of LAN shield and ESP8266 is possible without problems has not been tested yet though.

Flashing the ESP8266:


The ESP8266 must be flashed with a special firmware. For the use of the Arduino IDE (or other) it must be ensured that version 2.7.4 of the
corresponding ESP8266 libraries has been installed and chosen by using the board manager.

The required firmware WiFiSpiESP for the ESP8266 is already available as a zip-file in the BSB-LAN repository. The zip-file must be unpacked in
another folder than BSB_lan! The ESP8266 has then to be flashed with the file WiFiSPIESP.ino.

Configuration of BSB-LAN:
To use the WiFi function, the definement #define WIFI must be activated in the file BSB_LAN_config.h. Furthermore, the two variables
wifi_ssid and wifi_pass must be adapted accordingly and the SSID of the WLAN and the password must be entered. These entries can also
be changed afterwards via the web interface.

Notes

When using DHCP, the IP address assigned by the router can be read out in the Serial Monitor of the Arduino IDE when starting the DUE.

When using the ESP WiFi solution, the host name is not WIZnetXYZXYZ, but usually ESP-XYZXYZ, where the digit-letter combination
"XYZXYZ" after "ESP-" is composed of the last three bytes (the last six characters) of the MAC address of the ESP.

When using the ESP WiFi solution, the MAC address of the ESP can't be set on your own.

1.3 ESP32
The BSB-LAN software can also be run on an ESP32. However, it is mandatory to make certain adjustments, which are described in chap. 2.1.2.

Attention, important note

If the ESP32 framework is already installed within the Arduino IDE and you are shown the different ESP32 board variants, please check in
the "Board Manager" under "Tools/Boards" that version 2.0.2 (or higher, if available) is installed.
If the board is not listed, the ESP32 platform must be added to the the Arduino IDE. You find the belonging informations in Chap. 12.1.2.

Basically any ESP32 can be used, but due to the specific board design the use of the following boards is recommended:

ESP32 NodeMCU board from Joy-It

Olimex ESP32-EVB

Olimex ESP32-PoE

These boards are using the ESP32-WROOM32 module.

Attention, important notes

In case you want to use different boards than the recommended ones, always check the specific datasheet and make sure that you are using
pins for RX/TX which are free and safe to use. You must change the settings of the used pins within the file BSB_LAN_config.h then!

Note that the autodetection function within BSB-LAN for the connected controller only works with the recommended boards!

Make sure to use an ESP32-WROOM32 module if you are looking for different ESP32 models than the ones we recommend!
If you want or have to use a WROVER type, you'd either have to use other pins than 16/17 for RX/TX because these pins are used internally
within the WROVER for the SPI PSRAM module or deactivate the usage of PSRAM within the code of BSB-LAN.

1.3.1 ESP32 With Specific "BSB-LAN ESP32"-Adapter

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 25/230


For a specific ESP32 board variant there is a separate BSB-LAN adapter board: "BSB-LAN ESP32".

The "BSB-LAN ESP32" adapter board, v4.2, unpopulated.

This BSB-LAN adapter board is designed for the 30 pin ESP32 NodeMCU board from Joy-It (WROOM32 chip).

The "BSB-LAN ESP32" adapter, v4.2, assembled for the recommended NodeMCU.

The ESP32 adapter version can also be used with an Olimex ESP32-EVB and an Olimex ESP32-PoE. It can be plugged onto the ten pin UEXT
connector of Olimex boards after adding a double row five pin socket (female pinheader, 2x5 pins, grid dimension 2.54mm) to the bottom side of
the PCB (instead of the two 15 female pinheader which have to be used for the ESP32-NodeMCU).

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 26/230


The "BSB-LAN ESP32" adapter, v4.4, assembled for the Olimex boards.

1.3.1.1 ESP32: NodeMCU "Joy-It"

This BSB-LAN adapter board is designed for the 30 pin ESP32 NodeMCU board from Joy-It (WROOM32 chip). A user manual is available for the
board from the manufacturer. There are both the board-specific pinout scheme and a general guide to using ESP32 boards with the Arduino IDE!

The "BSB-LAN ESP32" adapter, v4.2, assembled for the recommended NodeMCU.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 27/230


The Joy-It ESP32-NodeMCU on the "BSB-LAN ESP32" adapter.

If the Joy-It board is not available and another NodeMCU-ESP32 board is used, two things must be taken care of in any case, so that the ESP32-
specific BSB-LAN adapter fits:

1. The board must be a 30 pin ESP32 NodeMCU! There are also 38 pin NodeMCUs - these do not fit!

2. The pinout scheme must be identical to that of the Joy-It board.

Attention, important note

If the ESP32 framework is already installed within the Arduino IDE and you are shown the different ESP32 board variants, please check in
the "Board Manager" under "Tools/Boards" that version 2.0.2 (or higher, if available) is installed.
If the board is not listed, the ESP32 platform must be added to the the Arduino IDE. You find the belonging informations in Chap. 12.1.2.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 28/230


Power supply:
The NodeMCU is powered via the microUSB socket. The power supply should provide minimum 5V(DC)/1A.
If you encounter problems regarding the data transfer or even later during operation, first try another USB cable. There are cables that are pure
charging cables and do not have a data line, and there are also cables that only have very thin strands and can therefore cause problems in
terms of the power supply during operation.

1.3.1.2 ESP32: Olimex ESP32-EVB & ESP32-PoE

The ESP32 adapter version can also be used with an Olimex ESP32-EVB and an Olimex ESP32-PoE. It can be plugged onto the ten pin UEXT
connector of Olimex boards after adding a double row five pin socket (female pinheader, 2x5 pins, grid dimension 2.54mm) to the bottom side of
the PCB (instead of the two 15 female pinheader which have to be used for the ESP32-NodeMCU).
This Olimex board variant offers, among other things, a LAN port and a microSD card reader in addition to the ESP32-based WLAN functionality
and is therefore highly recommended.

The "BSB-LAN ESP32" adapter, v4.4, assembled for the recommended Olimex ESP32-EVB.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 29/230


The Olimex ESP32-EVB with the plugged on "BSB-LAN ESP32" adapter v4.2.

The Olimex ESP32-PoE with the plugged on "BSB-LAN ESP32" adapter v4.4.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 30/230


Attention, important notes

When plugging on the adapter board, make sure meticulously that the UEXT1 socket of the board is plugged on * exactly in the
middle* of the Olimex socket and that all pins of the Olimex have contact! Otherwise, when the adapter is correctly connected to the
heating controller, the LED of the adapter lights up, but no access to the controller is possible.
Also ensure that the circuit board is plugged onto the Olimex in the correct orientation (see photo)!

Additional hardware can only be connected to the GPIO pins 13 (I2C-SDA) and 16 (I2C-SCL) at the Olimex ESP32-EVB.

If the ESP32 framework is already installed within the Arduino IDE and you are shown the different ESP32 board variants, please check in
the "Board Manager" under "Tools/Boards" that version 2.0.2 (or higher, if available) is installed.
If the board is not listed, the ESP32 platform must be added to the the Arduino IDE. You find the belonging informations in Chap. 12.1.2.

Power supply:
The Olimex boards can be powered in two ways: using the hollow plug socket or using the microUSB socket. In either way the power supply
should provide minimum 5V(DC)/1A. The power supply for using the hollow plug socket should have a 5.5/2.1mm (positive pole inside) hollow
plug (the referring part numbers at the Olimex web page are "SY0605E" / "SY0605E-CHINA").
Attention: In exceptional cases it turned out that the 1A of the power supply was not sufficient to guarantee a stable operation of the board.
If problems with the data transfer or later with the operation via microUSB port occur, try another USB cable first. There are cables that are pure
charging cables and do not have a data line, and there are also cables that only have very thin strands and can therefore cause problems in
terms of the power supply during operation.

Using ESP32-adapter version v4.1 on Olimex boards:


Adapter boards that are used on Olimex boards at the UEXT connector and have a BSB-LAN board revision up to and including 4.1 (and only in
this combination) do not start correctly if the power supply was interrupted when the BSB-LAN adapter was plugged in. The reset button must
then also be pressed once after switching on.
To solve this problem, you have to cut (marked yellow) the conductor path from resistor R6 in direction of the UEXT connector (marked red) with
a sharp object (e.g. razor blade/carpet knife/scalpel). It's recommended to check with a multimeter before and after you do this to make sure that
there really isn't a connection anymore between the end of R6 and pin 3 of the UEXT connector after cutting. Instead, a conductive connection
must then be made using a thin wire between this end of R6 to pin 10 of the UEXT connector (below the "U" of "UEXT"; marked green).

BSB-LAN boards from board revision 4.2 are no longer affected by this problem.

1.3.2 ESP32 With Due-Compatible BSB-LAN-Adapter From V3


The previous Due-compatible adapter (from v3) can also be used with an ESP32. The EEPROM of the adapter is not needed/used here and is
accordingly also not to be considered with the wiring.
With the choice of an ESP32 here is no compelling restriction on the Joy-It-board-compatible NodeMCU variant mentioned before, since a 'loose'
wiring or the self-construction of a small adapter board for the more stable admission of the BSB-LAN adapter and the ESP32 is necessary
anyway. However, care should be taken to ensure that the pin numbers/assignments given below match those of the selected ESP32.

The connections are to be made as follows:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 31/230


BSB-LAN adapter from v3 Function ESP32 board

Pin 53 VCC (power supply adapter) 3,3V

GND GND (power supply adapter) GND

TX1 TX (send) Pin 17 (TX2)

RX1 RX (receive) Pin 16 (RX2)

As an example, an "ESP32 D1 R32 developer board" (WROOM32 chip) in the size of an Arduino Uno with a self-made adapter board (Uno-
compatible prototyping board) for the inclusion of the BSB-LAN adapter v3 (Due version) is shown below. Of course, other variants are also
possible, such as with an ESP32 NodeMCU and an appropriately adapted breadboard.

Note

The ESP32 "D1 R32 developer board" shown below I personally can explicitly NOT recommend, because it obviously has much worse
reception properties than other ESP32 boards. Although the router was only a few meters away, it was not possible for me to establish a
stable WLAN connection. When I asked the seller, this impression was confirmed to me stating that the "cause for this is rooted in the
design".

Left the "ESP32 D1 R32" board, right the corresponding selfmade plug-on board for the BSB-LAN adapter v3 (due version).

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 32/230


The complete assembly.

Attention, important note

If the ESP32 framework is already installed within the Arduino IDE and you are shown the different ESP32 board variants, please check in
the "Board Manager" under "Tools/Boards" that version 2.0.2 (or higher, if available) is installed.
If the board is not listed, the ESP32 platform must be added to the the Arduino IDE. You find the belonging informations in Chap. 12.1.2.

1.3.3 ESP32 With Outdated BSB-LAN-Adapter V2


The (now outdated) BSB-LAN adapter v2 which was used in combination with an Arduino Mega2560 can also be operated on an ESP32. In this
way it is possible to benefit from the further development and the new functions of the BSB-LAN software from v2.x without having to purchase a
new adapter. To do this, some changes must be made to the adapter itself, which are described below.

Attention

The steps described below to 'convert' the adapter to 3.3V are only valid for use on an ESP32 - on a Due the adapter v2 cannot be used due
to the missing EEPROM!

To successfully operate the adapter v2 on an ESP32, the adapter must be 'adjusted' to operate with 3.3V. This is already provided for use with a
Raspberry Pi. The following steps need to be taken:

The adapter must be completely assembled. If the adapter is so far only equipped for use with the Arduino Mega 2560, the following
components must be retrofitted:

1x resistor 47kΩ (→ R11)

2x resistor 10kΩ (→ R12, R13)

1x transistor BC557A (→ Q11)

1x transistor BC547A (→ Q12)

The solder jumpers SJ2 and SJ3 are to be closed by a solder point.

The solder jumper SJ1 is to be removed.

Now the adapter is prepared for operation on a 3.3V system.


For connection to the ESP now the "RasPi" contact row must be used and connected to the ESP32 as follows:

BSB-LAN adapter v2 Function ESP32 board

Pin 06 GND (power supply adapter) GND

Pin 08 TX (send) Pin 17 (TX2)

Pin 10 RX (receive) Pin 16 (RX2)

Pin 12 3,3V (power supply adapter) 3,3V

The following picture shows a correspondingly equipped adapter v2. The yellow "X" at SJ1 marks the removed solder jumper (the non-closed
contact), the two yellow outlines at SJ2 and SJ3 mark the solder jumpers to be closed.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 33/230


The adjusted adapter v2 for use with an ESP32.

It is advisable to solder additional pins for the four contacts on the adapter and build yourself a small adapter board from a perforated board and
pin headers, on which the adapter and the ESP32 board can be plugged to ensure a stable setup and a secure connection.

Attention, important note

If the ESP32 framework is already installed within the Arduino IDE and you are shown the different ESP32 board variants, please check in
the "Board Manager" under "Tools/Boards" that version 2.0.2 (or higher, if available) is installed.
If the board is not listed, the ESP32 platform must be added to the the Arduino IDE. You find the belonging informations in Chap. 12.1.2.

1.4 Raspberry Pi
The adapter v3 could also be used in conjunction with a Raspberry Pi. Therefore you have to pay attention to some points:

A usage of the BSB-LAN-Software is NOT possible (see notes below)!

A correspondingly long double-row female connector strip should be used.

The ESP32 adapter v4.4 with the corresponding female connector strip for a RPi.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 34/230


The ESP32 adapter v4.4 plugged onto a RPi3.

Attention

For the usage of the adapter in conjunction with an RPi you have to use a complete different software: "bsb_gateway" by J.
Loehnert!
For any support please contact the author of bsb_gateway!

This manual only refers to BSB-LAN!


We can not and will not provide any support with regard to RPi use!

From our side, the use of the adapter with the above mentioned software was only tested on an RPi 2. We are not able to judge whether it
works properly with more recent RPi versions!

For the usage of the adapter with an RPi at the PPS interface, the Python script PPS-monitor by D. Spinellis can be used.

1.5 Housing
The market offers just a small range of housings which are compatible for an Arduino Due or a ESP32-NodeMCU plus additional shields. If you
search for them, you probably won't find anything. In the case of an Arduino Due, look out for housings which are designed for an Arduino Mega
2560, because it has the same form factor as the Due. Try to find a housing, which can accommodate the whole setup including the LAN shield
though, because many housings are only designed to accommodate the plain Mega. This kind of housing has some cutouts in the top cover to
plug in additional shields, but in that case the LAN shield and the adapter won't be protected at all.

Besides commercial products and creative own built solutions, a 3D printer could be used to create a great housing.
The member "EPo" of the German FHEM forum was so kind to create and offer STL datafiles for a housing.
Thanks a lot!

The STL data files for Due, ESP32-NodeMCU and the Olimex ESP32-EVB housings including the BSB-LAN adapter are already included
in the repository of BSB-LAN (subfolder "schematics".

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 35/230


3D printer model of the housing for the Arduino Due, the LAN-Shield and the adapter.

3D printer model of the housing for the recommended ESP32 NodeMCU and the adapter.

3D printer model of the housing for the Olimex ESP32-EVB and the adapter.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 36/230


3D printer model of the housing for the Olimex ESP32-PoE and the adapter.

Further on to chapter 2
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 37/230


2. BSB-LAN: The Software
Back to TOC
Back to chapter 1

2. BSB-LAN: The Software


In the following chapters the installation and the configuration of the BSB-LAN software is described. A description of the web interface, however,
can be found in chap. 4, a description of the query and control options in chap. 5 and a description of the special functions in chap. 6.

2.1 Installation
The BSB-LAN software must be flashed to the used microcontroller (Arduino Due or ESP32) for installation. This can be done e.g. with the
"Arduino IDE", but of course other programs like "PlatformIO" or "Visual Studio Code" can be used as well.

Note

In this manual it is assumed that the Arduino IDE is used. All descriptions and terms therefore refer to the Arduino IDE.
If you are a beginner and not yet familiar with the Arduino IDE, you will find a description of how to install and configure the Arduino IDE in
chap. 12.

Depending on the used platform (Arduino Due or ESP32) the necessary settings of the Arduino IDE differ. Thus the appropriate board types must
be installed and selected, the settings must be adapted platform-specifically etc. These settings will be mentioned in the following. It is assumed
that the necessary libraries for the respective platform are already installed. If this is not the case, then you find information for this in chap. 12.
Beyond that there are still further things to consider with the installation on the ESP32, which are likewise treated in the appropriate chapter.

2.1.1 Installation onto the Due


The following describes the installation of the BSB-LAN software on an Arduino Due. The description refers to the use of the Arduino IDE. With
the default settings of the BSB-LAN software DHCP is used for the IP address assignment. If you don't want this and want to assign a fixed IP,
please read chap. 2.2.2 and adapt the file BSB_LAN_config.h before flashing!

Note

If you are using Windows, an additional driver installation may be necessary. See the page https://www.arduino.cc/en/Guide/ArduinoDue for
further informations.

It is advisable to proceed with the following steps:

1. Connect the Arduino setup with a USB cable to your computer. Use the 'Programming Port' of the Due, which is the USB port in the 'middle',
placed next to the power supply socket. Both the LAN shield and the BSB-LAN adapter should already be plugged onto the Due beforehand,
but this is not mandatory.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 38/230


*The complete setup (Arduino Due + LAN-Shield + BSB-LPB-LAN-Adapter v3) including the corresponding cables.

2. Download the current BSB-LAN version and unzip the downloaded file BSB-LAN-master.zip.

3. Enter the folder "BSB-LAN-master"/"BSB_LAN" and rename the file BSB_LAN_custom_defs.h.default to BSB_LAN_custom_defs.h and
BSB_LAN_config.h.default to BSB_LAN_config.h!

4. Open the BSB_LAN sketch by double clicking on the file BSB_LAN.ino in the BSB_LAN folder. The corresponding files BSB_LAN_config.h,
BSB_LAN_custom_defs.h and BSB_LAN_defs.h are loaded automatically.

5. Select "Arduino Due (Programming Port)" under "Tools/Board".

| Note | |:-----| | If the board is not listed, you have to add the Atmel SAM Core. Information about this can be found in chap. 12. |

6. Select the correct serial port where the Due is connected to the computer under "Tools/Port".

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 39/230


The settings for the Due in the Arduino IDE.

7. If you want to configure BSB-LAN by customizing the file BSB_LAN_config.h (see chap. 2.2.2), please do so now.

8. Start the flash process and upload the sketch to the Arduino Due by clicking on "Sketch/Upload".

9. After finishing the flash process start the serial monitor of the Arduino IDE and watch the outputs which are generated when starting the
Arduino Due. Among other things, the IP that is assigned to the setup when using DHCP will be diplayed there.

Congratulations - you have installed BSB-LAN!


Now proceed with configuring the BSB-LAN software and the connection and startup of the setup.

Important Note

In order to gain access to all of the parameters your controller offers, a controller specific file BSB_LAN_custom_defs.h must be
created. Afterwards BSB-LAN must be reinstalled with this new file. Therefore please read the chap. 3.3 and perform the steps
mentioned there!

2.1.2 Installation onto the ESP32


In the following the installation of the BSB-LAN software on an ESP32 is described. The description refers to the use of the Arduino IDE. With the
default settings of the BSB-LAN software DHCP is used for the IP address assignment. If you don't want this and want to assign a fixed IP,
please read chap. 2.2.2 and adapt the file BSB_LAN_config.h before flashing!

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 40/230


Note

If the ESP32 board is not recognized by your operating system, you may need to install an additional driver for the USB chip used by the
board.

It is advisable to proceed with the following steps:

1. Connect your ESP32 board with a USB cable to your computer. You may have already plugged the BSB-LAN adapter on or under your
ESP32 board, but this is not mandatory.

2. Download the current BSB-LAN version and unpack the downloaded file BSB-LAN-master.zip.

3. Enter the folder "BSB-LAN-master"/"BSB_LAN" and rename the files BSB_LAN_custom_defs.h.default to BSB_LAN_custom_defs.h and
BSB_LAN_config.h.default to BSB_LAN_config.h!

4. Open the BSB_LAN sketch by double clicking on the file BSB_LAN.ino in the BSB_LAN folder. The corresponding files BSB_LAN_config.h,
BSB_LAN_custom_defs.h and BSB_LAN_defs.h are loaded automatically.

5. Select the corresponding ESP32 board type under "Tools/Board":

For the Joy-It ESP32-NodeMCU (or identical clones with an "ESP32-WROOM" chip) recommended in this manual the appropriate
board type is "ESP32 Dev Module".

For the recommended Olimex ESP32-EVB & ESP32-PoE please select the entry with the same name from the list.

| Notes | |:-----| | If the ESP32 framework is already installed and you see the different ESP32 board variants, please check in the "Board
Manager" under "Tools/Boards" that version 2.0.2 (or higher, if available) is installed.
If the board is not listed, the ESP32 platform must be added in the Arduino IDE. Information about this can be found in Chapter 12.1.2. |

6. Select the correct serial port, where the ESP32 board is connected to the computer, under "Tools/Port".

7. Set the transfer speed/baudrate to 115200 (Attention: In the Arduino IDE usually 921600 is preset for ESP32 boards!)

8. "Partition Scheme": depending on the type of board, you need to choose the specific partition scheme.

For the recommended ESP32-NodeMCU please choose "Default 4MB with spiffs (1.2BM APP/1.5MB SPIFFS)".
The following screenshot shows the configuration for the ESP32-NodeMCU.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 41/230


The settings for the ESP32 NodeMCU in the Arduino IDE.

For the recommended Olimex boards select the variant "Minimal SPIFFS (Large APPS with OTA)".

9. Now click on the tab for the file BSB_LAN_config.h and adjust necessarily the following settings:

Activate the definition #define WIFI in the file BSB_LAN_config.h if you want to use WiFi. If you are using an Olimex board and want to
use LAN, please leave the definement deactivated: //#define WIFI .

If you want to use WiFi, enter the access data for your WiFi network at the entries
char wifi_ssid[32] = "YourWiFiNetwork"; and
char wifi_pass[64] = "YourWiFiPassword"; .

10. If you want to configure BSB-LAN by adapting the file BSB_LAN_config.h (see chap. 2.2.2), please do this now.

11. Start the flash process and upload the sketch to the Arduino Due by clicking on "Sketch/Upload".

After finishing the flash process, start the serial monitor of the Arduino IDE and observe the outputs that occur when the ESP32 is started. Among
other things, the IP that is assigned to the setup when using DHCP will be displayed there.

Notes

If the ESP32 cannot connect to the configured WLAN, it will set up its own access point "BSB-LAN" with the password "BSB-LPB-PPS-LAN"
for 30 minutes. After that, it will reboot and try again to connect to the configured WLAN network.

Although the logging feature also works with the ESP32, it is not recommended to overuse this feature due to wear and tear of the flash
memory. If the Olimex board is to be used, a microSD card can be used instead of the SPIFF flash memory. The usage has to be activated
in the file BSB_LAN_config.h.

Congratulations - you have installed BSB-LAN!


Now proceed with configuring the BSB-LAN software and the connection and startup of the setup.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 42/230


Important Note

In order to gain access to all of the parameters your controller offers, a controller specific file BSB_LAN_custom_defs.h must be
created. Afterwards BSB-LAN must be reinstalled with this new file. Therefore please read the chap. 3.3 and perform the steps
mentioned there!

2.1.3 Updates
Updating the BSB-LAN software is done by the usual flashing of the new version (download as ZIP file, via git or similar), as described in the
previous installation chapters. Please pay attention to the following notes!

For ESP32 based boards (Olimex, NodeMCU) an OTA update ("OverTheAir" update) can be done alternatively (this function is NOT usable with
the Arduino DUE!). For this, the corresponding OTA function must be activated in the web config or the file BSB_LAN_config.h. The belonging
firmware file BSB_LAN_ino.bin can be created in the Arduino IDE under "Sketch / Export compiled binary file...". The file has to be uploaded via
browser to port 8080 of the BSB-LAN IP ( http://<BSB-LAN-IP>:8080 or http://bsb-lan:8080 with activated MDNS).

Notes

When updating to v3.x please do not use any existing files - please install BSB-LAN completely new!
Also note the necessary creation of a controller specific BSB_LAN_custom_defs.h - the procedure is described in chap. 3.3.

If you have made certain changes in the file BSB_LAN_config.h for the new version to be flashed, e.g. the access data for your WLAN or a
fixed IP, which were apparently not accepted after flashing, this is usually due to the fact that the old settings were read from the EEPROM.
To make the new settings effective, set the setting "Read configuration from EEPROM" in the Web configuration once to "Off", save the
change and flash again.
After that the new settings should have become effective, because BSB-LAN has now read them from the file BSB_LAN_config.h and not
from the EEPROM.
After successful check set "Read configuration from EEPROM" again to "On".

The existing and (if necessary) adapted file BSB_LAN_config.h can usually be taken over when updating to a newer version, but it is
advisable to use the current file BSB_LAN_config.h.default instead of the existing file BSB_LAN_config.h. To do this, the file
BSB_LAN_config.h.default must be renamed as before and, if necessary, adapted to the previous settings. This way you can be sure that
you have made a complete update of the BSB-LAN software.

If the adapter is connected to the bus of the heating controller, it can remain connected if the Due/ESP32 is to be flashed again. There is no
need to disconnect the adapter from the controller when updating BSB-LAN.

If you enable the function "check for updates" within the config, newer versions of BSB-LAN will be mentioned at the start page of the
webinterface. This includes development versions also though (and not only 'stable' releases) - so if you only want to use a 'stable' release,
you have to check for that manually at the project page.

2.2 Configuration
The BSB-LAN software can be configured according to individual requirements. The configuration can be done in two ways: by adapting the
BSB_LAN_config.h file and via the web interface. The configuration options are explained in more detail below. The descriptions in chapter 2.2.2
are generally more detailed, so it makes sense to study both chapters in detail.

2.2.1 Configuration via Webinterface


The settings overview or the web configuration interface is in principle self-explanatory, nevertheless the individual points are listed here again
with a short explanation.
For a more detailed explanation of the individual functions, please refer to chap. 2.2.2.

The overview of the web configuration is divided into three columns:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 43/230


For the sake of clarity, a rough category is displayed in the left column (e.g. "General", "Bus", etc.), so that the assignment of the respective
entry is already apparent at first glance.

In the middle column the function is named.

In the right column is the corresponding field, which shows the current entry or setting. The entries from the file BSB_LAN_config.h are taken
over, that means that also with deactivated functions the default settings are visible, so that it becomes clear, how (e.g.) parameters should
be entered. Depending on the type of setting either a pull down menu with the available settings or only a field is displayed.

Important

To apply changed settings, you must finally click on the button "Save parameter" at the bottom!

In the following, the tabular overview of the functions with the (default) settings and the corresponding explanations (unfortunately, the naming of
the left column "Category" must be omitted here for reasons of space and presentation):

Function (default) Setting Explanation

Display
Displays the advanced settings of BSB-LAN (Off/On). For accessing all setting options of
extended Off
BSB-LAN "On" must be selected (and then click on "Save parameters" below).
configuration

Reads the stored configuration from the EEPROM when starting the Due (Off/On).
These settings can deviate from the default settings, which were made in the file
Read config BSB_lan_config.h.
On
from EEPROM If the settings stored in the EEPROM should be overwritten, e.g. during an update, set to
"Off" and save the setting before flashing!
If the setting is "Off", changes will only remain active until the Due is restarted.

Write access of the adapter to the heating controller (Off/Standard/Complete).


If write access to the heating controller should be granted, it is recommended to
select the 'Standard' setting, in which case almost all available parameters can be
Write access
Off written. In contrast to 'Complete', however, some function-critical parameters cannot be
(level)
changed, as they are protected again inside the controller.
The setting 'Complete' should therefore only be selected in exceptional cases and with
caution and a very good knowledge of the controller functionality!

Check for
Off Automatically check for updates of BSB-LAN (Off/On)
updates

OTA update function (OTA = Over The Air) deactivated (Off) / activated (On).
OTA Update Off
For the further procedure for OTA updates please read chap. 2.1.3 Updates.

0 = autoselect. If another pin than the preset RX pin (see file BSB_LAN_config.h) is
RX pin number 0
used, it must be entered here.

0 = autoselect. If another pin than the preset TX pin (see file BSB_LAN_config.h) is
TX pin number 0
used, it must be entered here.

Type BSB Used bustype (BSB/LPB/PPS)

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 44/230


Function (default) Setting Explanation

Own address 66 Own address of the adapter

Destination
0 Destination address for queries
address

PPS only: Users who use the adapter on the PPS interface must make two settings:
First, the mode in which the bus is to be accessed (passive/as room unit) must be
selected. When using a QAA room device, "passive" must be selected here. Then only
the values that go via the bus are displayed in the web interface, writing of values is then
PPS: PPS not possible.
passive
mode If "as room unit" is selected here, values can also be sent to the heating system via the
web interface. The type of the room device to be emulated must then still be selected
(see below). There should then be no other room device on the bus, otherwise both
transmitters send their own values to the heater, so that no consistent operation is
possible.

PPS: QAA
QAA70 PPS only: Type of the room unit that should be imitated (QAA50/QAA70).
model

0 = automatic controller recognition active (recommended setting). In case of a faulty


Device family 0 detection, the device family (output of /6225 ) of the connected controller can be set
here.

0 = automatic controller recognition active (recommended setting). In case of a faulty


Device variant 0 detection, the device variant (output of /6226 ) of the connected controller can be set
here.

URL Passkey -no default setting- Optional security function: "URL Passkey"

HTTP
-no default setting- Optional security function: "User-Pass" (Basic HTTP Auth). Syntax: Username:Password
authentification

DHCP usage On DHCP usage (= automatic allocation of the IP address by the router) (Off/On)

IP address
192.168.178.88 Manual network configuration: fixed IP address
(fixed)

Subnet 255.255.255.0 Manual network configuration: Subnet

Gateway 192.168.178.1 Manual network configuration: IP address of the gateway

DNS Server 192.168.178.1 Manual network configuration: IP address of the DNS server

TCP Port 80 TCP port of the setup

MAC address 00:80:41:19:69:90 (Preset) MAC address of the LAN shield or MAC address of the ESP

Trusted IP
0.0.0.0 Optional security function: "Trusted IP", access is only possible from this IP
address

Trusted IP
0.0.0.0 Optional security function: "Trusted IP", access is only possible from this IP
address

WLAN SSID -no default setting- SSID of the WLAN when using the WiFi-ESP-solution

WLAN
-no default setting- Password of the WLAN when using the WiFi-ESP-solution
password

mDNS
BSB-LAN Hostname
Hostname

Different options for the logging mode (multiple options possible): Write to SD card /
Logging mode -no default setting-
Calculate 24h averages / Send to MQTT broker / Send to UDP

Interval
3600 Loginterval in seconds
(seconds)

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 45/230


Function (default) Setting Explanation

Parameters 8700,8743,8314 Parameters to be logged

Logging of bus telegrams activated (Off/-various options-), the desired setting is to be


Bus telegrams Off
made according to the respective option description.

Parameter 8700,8326 Parameters for the 24h average calculation

Usage Plain Text Plain Text / JSON / Rich JSON

IP address
192.168.178.20 IP-Adresse des MQTT-Brokers
broker

Username User MQTT: Username when using username/password

Password Pass MQTT: Passwort when using username/password

Device ID BSB-LAN Device name (header in JSON payload)

Topic prefix BSB-LAN Topic prefix of the MQTT messages

Pins 0 Used pin(s) for OneWire sensors (DS18B20) (0 = deactivated)

Pins 0 Used pin(s) for DHT22 sensors (0 = deactivated)

Sensoren 0 Amount of connected BME280 sensors

DHW push
0 Room unit emulation: used pin for the DHW push
button: pin

RU1 Room unit 1 emulation: enter the specific parameter number(s) for the optional room
temperature temperature sensor(s) here. Up to five sensors are possible, parameter numbers must
-no default setting-
sensor be separated only with a comma. If more than one sensor is used, an automatic average
parameter will be calculated.

RU1 presence
0 Room unit 1 emulation: used pin for the presence button for HC1
button: pin

RU2 Room unit 2 emulation: enter the specific parameter number(s) for the optional room
temperature temperature sensor(s) here. Up to five sensors are possible, parameter numbers must
-no default setting-
sensor be separated only with a comma. If more than one sensor is used, an automatic average
parameter will be calculated.

RU2 presence
0 Room unit 2 emulation: used pin for the presence button for HC2
button: pin

RU3 Room unit 3 emulation: enter the specific parameter number(s) for the optional room
temperature temperature sensor(s) here. Up to five sensors are possible, parameter numbers must
-no default setting-
sensor be separated only with a comma. If more than one sensor is used, an automatic average
parameter will be calculated.

RU3 presence
0 Room unit 3 emulation: used pin for the presence button for HC3
button: pin

Usage Off Use MAX! devices (Off/On)

IP address
192.168.178.5 IP address of the CUNO/CUNX/modified MAX!Cube
cube

Devices KEQ0502326,KEQ0505080 Serial numbers of the MAX! devices to be used

Usage Off Use IPWE extension (URL/ipwe.cgi) (Off/On)

Parameters 8700,8743,8314 Parameters that should be displayed within the IPWE extension

Usage Serial Use debug function (Off/Serial/Telnet)

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 46/230


Function (default) Setting Explanation

Verbosity
On Verbosity mode activated (Off/On)
mode

Monitor mode Off Monitor mode activated (Off/On)

Display
Displays unknown / not supportet parameters ("error 7 - parameter not supportet")-
unknown On
(On/Off).
parameters

2.2.2 Configuration by Adjusting the Settings Within BSB_LAN_config.h


The BSB-LAN software can be configured by adjusting the settings in the file BSB_LAN_config.h. All settings are listed below in the same way as
they are listed and preset in the file. It is therefore advisable to work through the settings point by point with this manual at hand.

Note

To 'activate' or a definement you have to delete the two slashes in front of the hashtag, to 'deactivate' a definement you have to add two
slashes in front of the hashtag. E.g.:
A deactivated definement: //#define XYZ

An activated definement: #define XYZ

The language of the user interface of the web interface of the adapter as well as the category and parameter designations must be
selected or defined. For "English" the following definition must be selected: #define LANG EN

Starting with BSB-LAN v.042 it is possible to use BSB-LAN in other languages, too, whereby in principle any language can be supported
(only' the corresponding translations have to be created).
Currently available are: Czech (CZ), German (DE), Danish (DK), English (EN), Spanish (ES), Finnish (FI), French (FR), Greek (GR),
Hungarian (HU), Italian (IT), Dutch (NL), Polish (PL), Russian (RU), Swedish (SE), Slovenian (SI) and Turkish (TR). If certain expressions
are not available in the specific language, the English expression is automatically displayed. If this is also not available, the German
expression is finally displayed.

Load configuration settings from EEPROM or from the file BSB_LAN_config.h:

byte UseEEPROM = 1;

According to the default setting, the configuration settings are read from the EEPROM when BSB-LAN is started. As a fallback the variable
can be set to '0', then the settings are read from the file BSB_LAN_config.h.

Network settings:

Note

By default, the usage of DHCP is activated, so you don't have to change any network settings. If you want to use a fixed IP though,
deactivate DHCP and set the IP and the addresses of the Gateway and the Subnet accordingly.

MAC address of the ethernet shield:

byte mac[] = { 0x00, 0x80, 0x41, 0x19, 0x69, 0x90 };

The default MAC address can be kept. A change is usually only necessary if more than one adapter is used (in any case, you should make
sure that each MAC address only occurs once in the network!). In this case, changes should only be made to the last byte (e.g. 0x91, if a
second adapter is used).

| Note | |:-----| | The MAC address which can be set here doesn't apply to the WiFi-ESP-solution! There the MAC address can't be set! | |
The MAC address assigned here also influences the host name (or is a part of it), which is assigned by the router when using DHCP (see
below): The host name consists of the identifier "WIZnet" and the last three bytes of the MAC address. | | For the default MAC address
mentioned above, the host name is thus "WIZnet196990". This host name is usually also displayed as such in the router. In this case the

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 47/230


web interface of BSB-LAN can be reached in the browser under http://wiznet196990 .
If a second adapter is used and the MAC address will be changed to (e.g.)
byte mac[] = { 0x00, 0x80, 0x41, 0x19, 0x69, 0x91 };
the host name is "WIZnet196991" or http://wiznet196991 .|

Ethernet port:

uint16_t HTTPPort = 80;

Port 80 for HTTP is preset.

DHCP:

bool useDHCP = true;

By default DHCP is used. If this is not desired and you want to assign a fixed IP address by yourself, set the variable to false.

| Note | |:-----| | Please see the notes above regarding the hostname based on the MAC address. The IP given by the router will also appear
within the start process of the Arduino Due within the serial monitor of the Arduino IDE. |

IP address:

byte ip_addr[4] = {192,168,178,88};

Fixed IP address of the adapter, if DHCP is not used - please note the commas instead of dots!

| Note | |:-----| | If you want to give the adapter a fixed IP, please make sure that it occurs only once in your network! |

Gateway address:

byte gateway_addr[4] = {192,168,178,1};

IP address of the gateway (usually the one of the router itself) - please note the commas instead of dots!

Subnet:

byte subnet_addr[4] = {255,255,255,0};

Address of the subnet - please note the commas instead of dots!

WiFi:

//#define WIFI

This definement has to be activated if the WiFi function of the ESP8266-WiFi-solution or the ESP32 should be used.

char wifi_ssid[32] = "YourWiFiNetwork";

For the usage of WiFi, YourWiFiNetwork has to be replaced by the SSID of the WiFi network.

char wifi_pass[64] = "YourWiFiPassword";

For the usage of WiFi, YourWiFiPassword has to be replaced by the password of the WiFi network.

#define WIFI_SPI_SS_PIN 12

The SS pin to be used at the DUE when using the ESP8266-WiFi-solution is defined here. It is advisable to leave the default setting. If,
however, another pin should be used, it is essential to ensure that the desired pin is neither used elsewhere nor is included in the list of
protected pins.

| Note | |:-----| | The MAC address can't be set within the WiFi-ESP-solution! |

Using Multicast DNS:

#define MDNS_SUPPORT char mDNS_hostname[32] = "BSB-LAN";

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 48/230


By default the usage of Multicast DNS with the hostname "BSB-LAN" is activated, so that you can find the adaptersetup under this name
within your network.

| Note | |:-----| | mDNS is only available when using LAN, it is not available if you are using the WiFi solution using an ESP8266! |

Aquiring time and date via NTP server:

#define USE_NTP // Disable this in case you don't want to use NTP

const char ntp_server[20] = "pool.ntp.org";

const char local_timezone[30] = "CET-1CEST,M3.5.0,M10.5.0/3";

By default this function is activated.

| Note | |:--------| | Aquiring time and date via NTP server only works with ESP32 boards! |

* NTP settings to acquire exact date and time via network.


* Attention: This only works with ESP32 microcontrollers so far!
* Use pool.ntp.org if your BSB-LAN installation can access the internet.
* Otherwise you may also use your router's address if it can act as a NTP server.
* The default timezone "CET-1CEST,M3.5.0,M10.5.0/3" covers most Central European countries (GMT+1) and takes care of daylight sa
ving.
* Use "EET-2EEST,M3.5.0/3,M10.5.0/4" for Eastern European countries (GMT+2), or
* use "WET0WEST,M3.5.0/1,M10.5.0" for Western European countries (GMT+0).
* See here for a full list of timezones for places all over the world:
* https://github.com/nayarsystems/posix_tz_db/blob/master/zones.csv

Debugging and related settings:

#define DEBUG

The debug module will be compiled (activated by default).

byte debug_mode = 1;

The following debug options are available:

0 - debugging deactivated

1 - send debug messages to the serial interface (e.g. for using the aerial monitor of the Arduino IDE); default setting

2 - send debug messages to a TelNet client instead of the serial interface

byte verbose = 1;

By default the verbose mode is activated (= 1), so that (besides the raw data) the respective plaintext (if available) of parameters and
values is displayed. It is advisable to leave this setting as it facilitates possible trouble shooting. Furthermore, this setting is necessary if
telegrams and command IDs of new parameters should be decoded.

byte monitor = 0;

Bus monitor mode, deactivated by default; set to '1' to activate

bool show_unknown = true;

All parameters including the unknown parameters (error message "error 7 (parameter not supported)") are displayed when querying via
web interface (e.g. when querying a complete category); default setting.
If you want to hide the 'unknown' parameters that are not supported by the controller of your heating system (e.g. when querying a
complete category), you have to set the variable to 'false' ( bool show_unknown = false; ). The parameters are still queried in such a
query (e.g. for a complete category) though.

Security functions:

There are several options to control and protect access to your heating system. However, keep in mind, that even activating all three options are
no guarantee that a versatile intruder with access to your (W)LAN won't be able to gain access. In any case, no encryption of data streams is

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 49/230


provided by the Arduino itself. Use VPN or a SSL proxy if that is a must for you and connect the Arduino wired to the VPN server or SSL proxy.
The following three security options are available within BSB-LAN:

Passkey:

To protect the system from unwanted access from outside, the function of the security key (PASSKEY) can be used (very easy and not
really secure!):

char PASSKEY[64] = "";

To use this function, add a certain sequence of alphanumerical characters as a simple security function, e.g. char PASSKEY[64] = "1234";
→ in this example the passkey is '1234'. If no alphanumerical sequence is set (default), the passkey function remains deactivated.

| Note | |:-----| | If PASSKEY is defined, the URL has to contain the defined passkey as first element, e.g.: URL/1234/ to view the main
website!
Only within the URL of the optional IPWE extension the passkey has NOT to be added! | | Don't forget the trailing slash!. |

Trusted IP:

byte trusted_ip_addr[4] = {0,0,0,0};

byte trusted_ip_addr2[4] = {0,0,0,0};

Within these variables you can define up to two IP addresses from which the access to BSB-LAN will then be possible (e.g. sever of your
home automation system).
If the default setting will not be changed or if the first number is a '0', this function is deactivated (default setting).

User-Pass:

char USER_PASS[64] = "";

Provides a username:password based access (default setting: deactivated). No encryption! Syntax is Username:Password as shown in the
deactivated example:

//char USER_PASS[64] = "User:Password";

Settings for optional sensors:

OneWire temperature sensors (DS18B20):

#define ONE_WIRE_BUS

byte One_Wire_Pin = 0;

If you want to use OneWire temperature sensors (DS18B20), the definition must be activated and the corresponding GPIO-pin number must
be defined.
By default, the module is activated and pin 0 is set (0 = OneWire usage deactivated).

DHT22 sensors:

#define DHT_BUS

uint8_t DHT_Pins[10] = {0};

If you want to use DHT22 sensors (temperature & humidity; max. amount: 10), the definement must be activated and the corresponding
pin(s) must be be defined.

By default, the module is activated and pin 0 is set (0 = DHT usage deactivated).

BME280 sensors:

#define BME280 byte BME_Sensors = 0;

If you want to use BME280 sensors (temperature, humidity & barometric pressure), the definement must be activated and the corresponding
amount of sensors (default 0 = deactivated, maximum 2) must be be defined. The sensors have to be connected to the I2C bus. The
address of the first sensor mus be 0x76, the one of the second sensor 0x77.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 50/230


24h averages:

#define AVERAGES

If you want to create 24h averages from certain parameters, the definement must be activated (default setting).

Further more you have to list the specific numbers of the parameters (up to 40) you want to be calculated. E.g.:

parameter avg_parameters[40] = {
{8700, -1}, // Außentemperatur
{8326, -1} // Brenner-Modulation
};

If an SD card is available, the current values are saved there regularly in order to be able to continue the calculation without gaps after a
restart.

If the average values of the parameters set above are also to be written to a log file and displayed via URL command /DG or sent via
MQTT, for example, they must be listed as special parameters with the numbers 20050-20099 in the parameters to be logged (see below)!
The corresponding logging settings (see below), such as the log interval, then apply to them.

Logging (also to microSD card) and/or usage of MQTT/UDP:

#define LOGGER → The logging module will be compiled.

| Attention | |:----------| | The activated definement is a requirement for logging to a microSD card as well as for using MQTT and UDP! |

In the following, various settings can/should be made:

Sending logdata via UDP broadcast:

#define UDP_LOG_PORT 6502 → Logdata will additionally be send as a UDP broadcast message to port 6502 (default). You can set the
desired UDP port here.

If you are using a microSD card adapter on an ESP32-based board and want to log data to the card (recommended!) instead of the
SPIFFs flash storage, activate the following definement:

//#define ESP32_USE_SD

If 'raw' bus telegrams should be logged, the selection can be specified. The telegrams are stored within the file journal.txt on the
microSD card. By default the logging of these bus messages is deactivated:

int logTelegram = LOGTELEGRAM_OFF;

The following options are available:

LOGTELEGRAM_OFF → no logging of bus telegrams (default setting)

LOGTELEGRAM_ON → all bus telegrams are logged

LOGTELEGRAM_ON + LOGTELEGRAM_UNKNOWN_ONLY → only unknown bus telegrams are logged

LOGTELEGRAM_ON + LOGTELEGRAM_BROADCAST_ONLY → only broadcast telegrams are logged

LOGTELEGRAM_ON + LOGTELEGRAM_UNKNOWNBROADCAST_ONLY → only unknown broadcast telegrams are logged

bool logCurrentValues = false;

The data of the parameters to be logged are stored in the file 'datalog.txt' on the microSD card (deactivated by default). For activating
this function the variable must be set to 'true'.

unsigned long log_interval = 3600;

The desired logging interval in seconds.

| Attention | |:----------| | This interval must also be set for using MQTT, even though if no data should be logged! |

The parameters that should be logged must be listed as follows (destination address -1 means the default destination address):

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 51/230


parameter log_parameters[40] = {
{8700, -1}, // Außentemperatur
{8743, -1}, // Vorlauftemperatur
{8314, -1}, // Rücklauftemperatur

MQTT:

| Note | |:-----| | The parameters that should be queried and the interval for sending the values must be defined within the logger definement
as mentioned above. |

If you want to use MQTT the belonging variables and settings besides the above mentioned settings have to be adjusted:

define MQTT → The MQTT module will be compiled (default setting).

byte mqtt_mode = 0; → MQTT is deactivated (default setting); the following options are available:

1 = send messages in plain text format

2 = send messages in JSON format. Use this if you want a json package of your logging information printed to the mqtt topic

Structure of the JSON payload:


`{"MQTTDeviceID": {"status":{"log_param1":"value1","log_param2":"value2"}, ...}}`

3 = send messages in rich JSON format. Use this if you want a json package of your logging information printed to the mqtt topic

Structure of the rich JSON payload:


`{"MQTTDeviceID": {"id": one_of_logvalues, "name": "program_name_from_logvalues", "value": "query_result", "desc": "enum va
lue description", "unit": "unit of measurement", "error", error_code}}`

byte mqtt_broker_ip_addr[4] = {192,168,1,20}; → IP of the MQTT broker (standard port 1883). Please note the commas insted of
dots!

char MQTTUsername[32] = "User"; → Set username for MQTT broker here or set zero-length string if no username/password is used.

char MQTTPassword[32] = "Pass"; → Set password for MQTT broker here or set zero-length string if no password is used.

char MQTTTopicPrefix[32] = "BSB-LAN"; → Optional: Choose the "topic" for MQTT messages here. If zero-length string here, default
topic name used.

char MQTTDeviceID[32] = "MyHeater"; → Optional: Define a device name to use as header in json payload. If zero-length string here,
"BSB-LAN" will be used.

IPWE:

#define IPWE → The ipwe module will be compiled.


bool enable_ipwe = false;

By default, the usage of the ipwe extension (URL/ipwe.cgi) is deactivated. If you want to use it, set the variable to 'true'.
Define the parameters that should be displayed (max 40):

parameter ipwe_parameters[40] = {
{8700, -1}, // Außentemperatur
{8743, -1}, // Vorlauftemperatur
{8314, -1}, // Rücklauftemperatur
};

MAX! (CUNO/CUNX/modified MAX!Cube):

If you want to use MAX! thermostats, adjust the following settings:

//#define MAX_CUL → activate the definement (deactivated by default)

bool enable_max_cul = false; → set the variable to 'true' (default value: 'false')

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 52/230


byte max_cul_ip_addr[4] = {192,168,178,5}; → Set the IP address of the CUNO/CUNX/modified MAX!Cube - please note the
commas instead of dots!

Define the MAX! thermostats that should be queried (max 20) by entering the 10 digit serial number / MAX! ID:
char max_device_list[20][11] = {
"KEQ0502326",
"KEQ0505080"
};

See chapter 7.3 for further informations about MAX! components.

Define the number of retries for the query command (default value is 3, doesn't need to be changed usually):

#define QUERY_RETRIES 3

Settings of the bus pins and bus type:

RX/TX pinconfiguration:

byte bus_pins[2] = {0,0}; → automatic detection and selection of the used pins (RX,TX)

Possible options:

Hardware serial (since adapter v3) Arduino Due: RX = 19, TX = 18 ( {19,18} ); NodeMCU: 16,17; Olimex EVB 36,17.

Software serial (up to adapter v2 & Arduino Mega 2560): RX = 68, TX = 69 ( {68,69} )

Bus type / protocol:

uint8_t bus_type = 0; → Depending on the connection of the adapter to the controller of your heating system (BSB/LPB/PPS), the
corresponding bus type must be set (default value is 0 = BSB).

Possible options:

0 = BSB

1 = LPB

2 = PPS

Bus settings:

Depending on the bus type, you can/must adjust certain settings:

BSB:

byte own_address = 0x42; → sets own address of the BSB-LAN adapter; default setting is '0x42' = 66, which is 'LAN' in serial monitor

byte dest_address = 0x00; → destination address of the heating system; preset: 0

See chap. 2.1.1 for further informations.

LPB:

byte own_address = 0x42; → own address of the BSB-LAN adapter; preset: segment 4, device 3

byte dest_address = 0x00; → destination address of the heating system; preset: segment 0, device 1

See chap. 2.1.2 for further informations.

PPS:

bool pps_write = 0; → readonly access (default setting)

If you want to enable writing to the controller of the heating system, set the variable to '1'.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 53/230


| Note | |:-----| | Only enable writing if there is no other 'real' room unit such as QAA50/QAA70! |

byte QAA_TYPE = 0x53; → type of the room unit which should be imitated:
0x53 = QAA70 (default setting) 0x52 = QAA50
0x37 = QAA95
0x66 = BMU
0xEA = MCBA/DC225

Detection or fixed setting of the controller type of the heating system:

static const int fixed_device_family = 0;

static const int fixed_device_variant = 0;

By default, the automatic detection of the controller type is active. Usually there is no need to change this setting. However, you can set the
type manually though, but you should only change this if you really know what you are doing! In that case set the variables of
fixed_device_family and fixed_device_variant to your device family and variant (parameters 6225 and 6226).

Read/write access to the controller:

#define DEFAULT_FLAG FL_SW_CTL_RONLY

By default, only read-access to the controller of the heating system is granted for the BSB-LAN adapter. If you want to make all parameters
writeable / settable, then you can adjust this setting within the webinterface of BSB-LAN (menu "settings").

| Note for Mega-user | |:-------------------| | The possibility to configure BSB-LAN via the webinterface doesn't exist within the usage of the
Mega 2560, because the module WEBCONFIG can't be compiled and used due to the limited memory of the Mega. In this case you still
have to grant write access by setting the flag '0': #define DEFAULT_FLAG 0 |

Include own code:

//#define CUSTOM_COMMANDS

This includes commands from the file BSB_lan_custom.h to be executed at the end of each main loop (deactivated by default).

Check for Updates of BSB-LAN:

#define VERSION_CHECK

bool enable_version_check = false;

Check for new versions when accessing BSB-LAN's main page (internet access needed). Doing so will poll the most recent version number
from the BSB-LAN server. This function is deactivated by default; to activate this function, set the variable to 'true'.

| Note | |:-----| | In this process, it is unavoidable that your IP address will be transferred to the server, obviously. We nevertheless mention
this here because this constitutes as 'personal data' and this feature is therefore disabled by default. Activating this feature means you are
consenting to transmitting your IP address to the BSB-LAN server where it will be stored for up to two weeks in the server's log files to allow
for technical as well as abuse analaysis. No other data (such as anything related to your heating system) is transmitted in this process, as
you can see in the source code. |

OTA update (only ESP32):

#define ENABLE_ESP32_OTA

boolean enable_ota_update = false;

OTA update (OTA = OverTheAir) for ESP32 based boards (default: deactivated). To enable this function boolean enable_ota_update =

true; must be set. The belonging firmware file can be created in the Arduino IDE under "Sketch / Export compiled binary...". The file has to
be uploaded to port 8080 of the BSB-LAN IP.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 54/230


"External" webserver:

//#define WEBSERVER

Usage of the "external" web server if definement is active. Please see chapter6.9 for further informations.

Store configuration in EEPROM:

#define CONFIG_IN_EEPROM

Stores the configuration in the EEPROM. If you don't want to use this function, deactivate the definement.

Compile web-based configuration and EEPROM config store module extension:

#define WEBCONFIG

Activates the configuration via webinterface.

Compile JSON-based configuration and EEPROM config store module extension.

#define JSONCONFIG

Variables for future use, no function yet:

#define ROOM_UNIT → compile room unit replacement extension


byte UdpIP[4] = {0,0,0,0}; → destination IP address for sending UDP packets to
uint16_t UdpDelay = 15; → interval in seconds to send UDP packets

#define OFF_SITE_LOGGER → compile off-site logger extension


byte destinationServer[128] = ""; → URL string to periodically send values to an off-site logger
uint16_t destinationPort = 80; → port number for abovementioned server
uint32_t destinationDelay = 84600; → interval in seconds to send values

2.3 Adding Parameters Manually From v2.2


Compared to previous versions of BSB-LAN, you may notice that some parameters now no longer appear in the device-specific parameter list,
even if they seemed to work fine in previous versions.
However, it is still possible to include selected parameters from the parameter list of version 2.2 in the current version.

Note

We strongly recommend to add these parameters, which are not officially supported by the controller manufacturer, only after a thorough
check, especially if these values should also be written!

As a safe number range in which parameters can be added as described below, we recommend 10600 and warm up.

The first step is to download the Release version 2.2 at https://github.com/fredlcore/BSB-LAN/releases.


After unpacking the file, you will find the file BSB_LAN_custom_defs.h.default in the subdirectory BSB_LAN. Open this file with a text editor like
Notepad under Windows or TextEdit under MacOS.
In parallel you also open the file BSB_LAN_custom_defs.h from the current BSB-LAN version you want to use in the Arduino IDE.
When both files are open, look for the parameter number of the parameter you want to add in the BSB_LAN_custom_defs.h.default of version
2.2.

The further steps are explained using the example of the former parameter 701 "Presence button (temporary absence)". This parameter
is now included by default in the device-specific BSB_LAN_custom_defs.h file; it is only missing in the first files created (during the conversion
phase to BSB LAN version 3.x at that time).

Searching for "701" first results in this entry:


const char STR701[] PROGMEM = STR701_TEXT;

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 55/230


Copy this line to the clipboard.
In the file BSB_LAN_custom.defs.h of the current BSB-LAN version you now search for the text const char S and find a number of such entries.
There you insert the above selected line at any position.

If no entry starting with const char is found for a parameter, but an entry corresponding to the pattern #define STR<searched parameter number>

STR<referenced parameter number> , two steps are necessary:


First you copy the line #define STR... into the current BSB_LAN_custom_defs.h file and then you search in the
BSB_LAN_custom_defs.h.default for the referenced parameter number until you find the line for this number that starts with const char S .
Using the parameter number 702 as an example, this line would therefore be found first: #define STR702 STR701 .
Then you search again for the referenced parameter number (in this case 701), so when you search again for this parameter number you would
then find the line const char STR701[] PROGMEM = STR701_TEXT; which you would then copy as well.
It is important that the #define line must be below the const char S... line!
So the result would look like this for parameter 702:

const char STR701[] PROGMEM = STR701_TEXT;


#define STR702 STR701

All other entries where the parameter number is possibly in the position of the referenced parameter in #define lines (like #define STR1301

STR701 ) can be ignored - unless you want to add the parameter number 1301 as well in this case.

Since the parameter 701 is a parameter with selection options, there are also lines starting with #define ENUM701_... . These lines must also be
copied into the current BSB_LAN_custom_defs.h.
In this context another entry appears, which starts with const char ENUM701[] . This and the following lines must also be copied to the current
BSB_LAN_custom_defs.h up to the closing curly bracket:

const char ENUM701[] PROGMEM_LATEST = {


"\x00 " ENUM701_00_TEXT "\0"
"\x01 " ENUM701_01_TEXT "\0"
"\x02 " ENUM701_02_TEXT
};

For purely numeric parameters, which have no selection menu, but e.g. only display a temperature value, this step is omitted, because there is
then no const char ENUM... entry for this.

Finally, we find the actual table entry for parameter 701, which looks like this:
{0x2D3D0572, VT_ENUM, 701, STR701, sizeof(ENUM701), ENUM701, DEFAULT_FLAG+FL_WONLY, DEV_ALL}, .
The corresponding table can be found in the current BSB_LAN_custom_defs.h file at the end of the file. In the third column you always see the
parameter number. Now you go up in this file so far that the parameter is inserted at the correct place. In our example this would be after the line
for parameter 700.

Attention

It is absolutely important to make sure that the parameter is inserted at the right place (and not e.g. before the line for parameter 700 or
somewhere after), because otherwise the parameters will not be listed completely in the category overview!

For some controllers, however, parameter 701 will already be occupied by another function. Newer LMS controllers have stored there e.g. the
function for "temporarily warmer/cooler". However, relocating the new parameter to be added is simple: Select a free parameter number (apart
from the "presence button" function mentioned here, we recommend parameter numbers 10600 and upwards for this purpose) and add the line
{0x2D3D0572, VT_ENUM, 701, STR701, sizeof(ENUM701), ENUM701, DEFAULT_FLAG+FL_WONLY, DEV_ALL},

at the appropriate place in the file. Then you only need to change the parameter number in the third column, e.g. to 10600. The parameter
numbers entered for STR... or ENUM... can, however, remain as they are, since they were chosen in such a way that they do not collide with
the new parameters.
The new, final line would then look like this:
{0x2D3D0572, VT_ENUM, 10110, STR701, sizeof(ENUM701), ENUM701, DEFAULT_FLAG+FL_WONLY, DEV_ALL},

Summarized once again the lines that would have to be copied for the function "Presence key (temporary absence)" to be inserted in the current
version as parameter number 10600:.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 56/230


const char STR701[] PROGMEM = STR701_TEXT;
const char ENUM701[] PROGMEM_LATEST = {.
"\x00 " ENUM701_00_TEXT "\0"
"\x01 " ENUM701_01_TEXT "\0"
"\x02 " ENUM701_02_TEXT
};

And the following line at the correct place:


{0x2D3D0572, VT_ENUM, 10110, STR701, sizeof(ENUM701), ENUM701, DEFAULT_FLAG+FL_WONLY, DEV_ALL},

After that BSB-LAN can be flashed to the microcontroller again and the new command is ready for use.

If you want to change the somewhat unspecific parameter name "presence button (temporary absence)" to e.g. the more appropriate name
"Time program (temporary)", you can do this in the same step. To do this, you would simply change the line
const char STR701[] PROGMEM = STR701_TEXT;

to
const char STR701[] PROGMEM = "Time program (temporary)";

and then flash again. Since all these changes are made in BSB_LAN_custom_defs.h, they are retained even if the BSB LAN software is updated.

If you also want to add the presence button for HC2 (which was 1001 in the v.2.2) as parameter 10111, then the belonging lines would look like
this:
#define STR1001 STR701

and this line at the correct place of the cmdtbl-structure:


{0x2E3E0572, VT_ENUM, 10111, STR1001, sizeof(ENUM701), ENUM701, DEFAULT_FLAG+FL_WONLY, DEV_ALL}, // [-] - Heizkreis 2 - Präsenztaste
(Absenkmodus bis zum nächsten BA-Wechsel laut Zeitplan) ***(virtuelle Zeile)***

Parameters that might be of interest and the lines to copy for them

1602 – DHW State


const char STR1602[] PROGMEM = STR1602_TEXT;

const char ENUM1602[] PROGMEM_LATEST = {

"\x00\x02 " ENUM1602_00_02_TEXT "\0"


"\x02\x02 " ENUM1602_02_02_TEXT "\0"

"\x00\x04 " ENUM1602_00_04_TEXT "\0"

"\x04\x04 " ENUM1602_04_04_TEXT "\0"

"\x00\x08 " ENUM1602_00_08_TEXT "\0"

"\x08\x08 " ENUM1602_08_08_TEXT <br> };


And this line at the correct place of the cmdtbl-structure:
{0x31000212, VT_BIT, 1602, STR1602, sizeof(ENUM1602), ENUM1602, DEFAULT_FLAG, DEV_ALL}, // Status Trinkwasserbereitung

10100 – Burnerstate
#define ENUM10100_01_TEXT ENUM_CAT_34_TEXT

const char ENUM10100[] PROGMEM_LATEST = {

"\x00" // index for payload byte

"\x01\x01 " ENUM10100_01_TEXT "\0"


"\x02\x02 " ENUM10100_02_TEXT "\0"

"\x04\x04 " ENUM10100_04_TEXT "\0"

"\x08\x08 " ENUM10100_08_TEXT "\0"

"\x10\x10 " ENUM10100_10_TEXT "\0"


"\x20\x20 " ENUM10100_20_TEXT "\0"

"\x40\x40 " ENUM10100_40_TEXT "\0"

"\x80\x80 " ENUM10100_80_TEXT

};

And this line at the correct place of the cmdtbl-structure:


{0x053D0213, VT_CUSTOM_BIT, 10100, STR10100, sizeof(ENUM10100), ENUM10100, FL_RONLY, DEV_ALL}, // INFO Brenner

10102 – Info HC1


{0x2D000211, VT_UNKNOWN, 10102, STR10102, 0, NULL, DEFAULT_FLAG, DEV_ALL}, // INFO HK1

10103 – Info HC2


{0x2E000211, VT_UNKNOWN, 10103, STR10103, 0, NULL, DEFAULT_FLAG, DEV_ALL}, // INFO HK2

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 57/230


Parameters that might be of interest and the lines to copy for them

10104 – Info HC3/P


{0x2F000211, VT_UNKNOWN, 10104, STR10104, 0, NULL, DEFAULT_FLAG, DEV_ALL}, // INFO HK3/P

Further on to chapter 3
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 58/230


3. BSB-LAN Setup: Connection and Startup
Back to TOC
Back to chapter 2

3. BSB-LAN Setup: Connection and Startup

3.1 Connecting the Adapter


Caution: Electrostatic charges can cause irreparable damage - ground yourself before starting work!

Basically the connection of the BSB-LPB-LAN adapter to the controller is made in the same way and at the same port where a room unit will be
connected.
To localize the specific port at your controller, please read the manual of your heating system.

In cases where only one BSB port is available at the controller (e.g. RVS21 controller within heat pumps) you can connect the adapter parallel to
an already installed room unit.

Notes

Because BSB is a real bus, you can also connect the adapter in your living area if there's already a wired room unit installed.
If you don't already have a wired room unit, you can still think about if it's maybe easier to put a long thin bus cable to the heater than a LAN
cable.
So it's not necessary at all to connect the adapter exactly at the place where the heater is located.

When connecting or disconnecting the adapter, please make sure that you switched off both units before (Arduino and controller of your
heating system)!

Please make sure you are using the right pins and regard the polarity! A wrong connection might harm your system.

Adapter:
The PCB of the adapter is already labeled with "CL+ / DB" and "CL- / MB".
If you are building an adapter completely by your own, please look at the schematics.

The plain PCB.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 59/230


Fully assembled PCB.

The complete setup (Arduino Due, LAN shield, BSB-LAN adapter), belonging cables included.

BSB:
The connection of the adapter takes places at the already described ports and pins.
Please connect "CL+" (adapter) to "CL+" (controller) and "CL-" (adapter) to "CL-" (controller).

An additional pin "G+" which could be found sometimes at the controller is only for the backlight of a QAA75 room unit (because it offers 12V
constantly) - please make sure that you DON'T use that pin by accident!

LPB:
The connection of the adapter takes places at the already described ports and pins.
Please connect
"DB (adapter)" to "DB (controller)" and
"MB (adapter)" to "MB (controller)".

PPS:
The connection of the adapter takes places at the already described ports and pins.
In most of the cases it's "A6" and "M", therefore please connect
"CL+" (adapter) to "A6" (controller) and
"CL-" (adapter) to "M" (controller).

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 60/230


Connectors:
Both the BSB and LPB ports are double-pole and are labeled different sometimes by certain manufacturers. The most common names are:

BSB port: BSB, FB, BSB & M, CL+ & CL-

LPB port: LPB, DB & MB

The following pictures show some examples of these connectors at different controllers:

BSB (FB with CL+ & CL-) and LPB (DB & MB) at a Broetje ISR-RVS43.222 controller.

Connectors b = BSB (CL+ & CL-) and a = LPB (DB & MB) at a Siemens RVS63.283 controller.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 61/230


BSB at connector "FB" at a LMS1x controller.

BSB at connector "X86" at a RVS21 controller.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 62/230


BSB on the "M2" connector block (behind the plastic cover on the left side of the picture) of a Baxi Luna Platinum.
User "olympia" kindly wrote a manual about how to connect it for the Baxi Luna Platinum and made it available on his GitHub account. Many
thanks for that!

BSB (CL+ & CL-) at the four pin service plug at the front of the operating unit ISR Plus. The (permament) usage of this connector isn't advisable
though.

Notes on connectors

The connection of the cables to the respective contacts should always be done with the specific connectors if available. A general list of the
respective connectors can't be named here though, because some controllers need special connectors.
For the most common three poled "FB" port (connector for the room unit) which is available at most of the controllers, this connector seem to
fit though: Broetje Connector Room Unit ISR, Rast 5- 3pol. = 627528.

BSB / LPB / PPS: If the original connectors are not available, (insulated) 6,3mm cable lugs can be used instead.

Four pin service plug: For the (temporary) connection at the four pin service plug at the front of the operating unit, 2,54mm DuPont
connectors (female) can be used. You can find them (e.g.) at the typical breadboard connection cables or at many cables used within the
internal parts of desktop computer hardware (e.g. internal speaker, fan).

Notes on cables

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 63/230


Notes on cables

LPB: In order to be as protected as possible from interference, the official Siemens document "CE1N2032D Local Process Bus LPB project
planning basics" states that the connection cables for the LPB connection should have a cross-section of 1.5mm² in accordance with LPB
design principles, twisted two-core and shielded (cable length 250m max per bus node, max total length 1000m). However, it is not
mentioned where or how to connect the shield of the cable.

BSB: For the BSB connection, Cu cables with a minimum cross-sectional area of 0.8mm² (up to 20m) should be selected, eg LIYY or LiYCY
2 x 0.8. For cable lengths up to 80m 1mm² should be selected, up to 120m 1,5mm² cross section.

In general, a parallel installation with mains cables should be avoided (interference signals).

Even though these are the official notes, users reported success with cables like phone installation cables, 0.5-0.75mm speaker cables, LAN
cable (where two or three wires are connected together to each connector) and so on. Before you have to buy something new, you probably
can just give it a try and see if you have some cables already at home which will do the job.

3.2 Function Test and First Use


To check if the adapter works correctly and recognizes your controller automatically, it's adviseable to follow these steps:

1. Switch off the controller of the heater and connect the adapter at the right pins to the BSB (or LPB / PPS). Watch the polarity!

2. Switch the controller back on and check if the red LED at the adapter is lit. If you see the LED flackering a little bit from time to time then
that's no malfunction - it schows activity on the bus.

3. Connect the Arduino Due (of course fully assembled with the lan shield and the adapter) via USB (use the "Programming Port" in the center)
with your computer and via LAN with your network.

4. Now start the Arduino IDE, choose the right COM port where the Arduino is connected to and start the serial monitor (menu "Tools" or the
little magnifying glass symbol at the top right corner).

5. If the connected controller has successfully been detected automatically by BSB-LAN it should appear an output in the serial monitor where
the value/number behind "Device family" and "Device variant" is NOT 0.

A correct output looks (e.g.) like that (with different numbers due to a different controller type):

[...]
Device family: 96
Device variant: 100
[...]

The following screenshot shows an output of the serial monitor after a successful start.
The adapter is configured by deafult as "LAN" and queries the parameters 6225 and 6226 initially for autodetection of the controller.
The following lines already are telegrams.
The display of the operating unit of the controller shows the temperature of the boiler unit (here: "Boiler temp actual value") which comes in
periodically as a so called broadcast message (BC).

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 64/230


Note

If only weird character strings appear in the serial monitor, check the baud rate at the lower right corner of the serial monitor window. It
should be set to 115200 baud.

Check if BSB-LAN is accessable


As a first test if you can reach the BSB-LAN server, just enter the specific URL of your BSB-LAN setup (if you are using DHCP, the IP will be
shown during startup within the SerMo). You should reach the start page of BSB-LAN:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 65/230


Next, please proceed with the following chapter.

3.3 Create Device-Specific Parameter List


Note

The procedure described below applies to controllers that are connected to the BSB-LAN setup via BSB or LPB. If you have connected a
controller via PPS, the following is not necessary, because the function /Q is not available for PPS controllers and the creation of a specific
file BSB_LAN_custom_defs.h is not necessary!

There are also restrictions with controllers that are connected via an LPB that has become available through retrofitting the OCI420 bus
module clip in (LMU54/64 and LMU74/75 controllers). Here the corresponding device data should be listed at the beginning, but the
"complete dump" is also not available. If this is also the case with LMS14/15 controllers and the newer OCI345 bus module ClipIn isn't clear
yet.

In the basic version, only very few selected parameters are supported by all controllers (e.g. time, device identification, comfort
temperature heating circuit 1, outdoor temperature). However, in order to get complete access to your specific controller, a suitable
BSB_LAN_custom_defs.h file must first be created, which contains exactly the parameters that your controller has!

To generate the text file needed to create the BSB_LAN_custom_defs.h file, click on the "Controller-specific parameter list" button at the top of the
web interface and then on "Download" at the bottom.

Attention: This query takes a while - please wait until the whole 'complete dump' or download of the text file is finished!

This function now queries all available parameters of the connected controller and saves the result in a text file.
This text file must then be sent to Frederik (bsb(ät)code-it.de), from which the device-specific file BSB_LAN_custom_defs.h for the
connected controller will be generated. Please also specify the language version you want to use for BSB-LAN later (i.e. German or
English).
After you have received this file from Frederik, you have to replace the previous BSB_LAN_custom_defs.h with this one and reflash BSB-
LAN once. Only then you have complete access to all functions of your controller!

Note

The device-specific parameter list should only be called up via the bus system that will be used later!
If there is an LPB network, the device-specific list must also be called up via LPB, as otherwise not all parameters of all controllers will be
transmitted.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 66/230


Note

Once a list has been created, it retains its functionality even when BSB-LAN is updated. It is therefore not necessary to create a new list as
long as no controllers have been replaced or added.

In an LPB network, the category list is taken from the main device. However, parameters from other controllers in the network can be called
up directly by addressing them using the exclamation mark (see URL commands), even if they do not appear in the category list.

Only the parameter definitions of the controller are queried, in no case configuration settings are read, set or changed!

Alternatively, you can find the BSB_LAN_custom_defs.h which was used in previous versions of BSB-LAN in release version 2.2. However,
since this parameter list is missing hundreds of parameters from newer devices and contains a lot of ambiguities and sometimes also errors,
its use is not recommended and should only be done after carefully examining the parameters you want to use.

3.4 Debugging and Troubleshooting


If, contrary to expectations, problems occur and the BSB-LAN setup is not usable, this can have several causes.

As a first step it is always a good idea to check the cabling and see if the red LED on the BSB-LAN adapter is lit.

As a further step it is always useful to connect the microcontroller additionally to the PC and to start the Serial Monitor (SerMo) of the Arduino
IDE. There you can check the startup process. If only cryptic strings appear in the output, check the set baud rate (bottom right). This should be
set to 115200 baud.

If the connected controller is not automatically recognized correctly, there is a "0" at "Device family" and "Device variant", additionally there are
six lines "query failed" in front of "Device family".

Example:

[...]
query failed
query failed
query failed
query failed
query failed
query failed
Device family: 0
Device variant: 0
[...]

Mostly the reason is then a problem of the hardware setup or the cabling, because the parameters 6225 and 6226 could not be retrieved
successfully (error message "query failed"").

Further reasons for malfunctions are listed in chapters 13, 14 and 15.

Further on to chapter 4
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 67/230


4. BSB-LAN: The Webinterface
Back to TOC
Back to chapter 3

4. BSB-LAN: The Webinterface


By accessing the adapters IP ( http://<IP-address> ), the starting page of the webinterface "BSB-LAN Web" is displayed.
If you're using the passkey function ( http://<IP-address>/<passkey>/ ) or additional security options, of course the URL has to be specifically
expanded.

Within the webinterface there are some buttons at the top for an easy and direct access to certain functions:

Heater functions

Sensors

Display log file

Device-specific parameter list

Settings

URL commands

Manual

FAQ

The button "Display log file" will be displayed in black letters, if the logging function isn't active (like shown in the screenshot above). If logging ist
activated, the button is named "Plot log file".

Underneath the header area the installed version of BSB-LAN is shown.


BSB-LAN can check if a newer version is available. If there is a newer version, the link leads to the ZIP file of the repo, so that you can save it
directly from within the webinterface.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 68/230


Note

If you want to use this function, you need to activate it. Please see chapter 2.2.

Heater functions (URL command: /K):


The button "heater functions" displays a list of all categories within the supported controllers (therefore also categories which aren't supported by
certain controller types):

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 69/230


A click on the category name queries all supported parameters and displays them in the webinterface. Parameters which aren't
supported/available within that specific type of controller will be displayed in grey letters and the note "(parameter not supported)":

Note

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 70/230


Note

If you don't want these parameters to be shown, you can deactivate the output (see chap. 2.2). However, they will still be queried though if a
whole category is queried.

Sensors:
If optional sensors are connected and configured correctly, the sensors will be listed after clicking this button.

The following screenshot shows the output of a connected BME280 and five DS18B20 sensors.

Display/Plot log file (URL command: /D and /DG):


If the logging function to the microSD card is set and active, the belonging button is named "Plot log file". Once you click on it, the logfile (file
datalog.txt) will be graphically displayed. If the logging function is deaktivated, the button is named "Display log file" and is shown in black letters.

Mouseover, click and mouse wheel actions within the graphical display provide various control options:

better legibility for value numbers with plot lines close to each other (mouseover on plot)

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 71/230


user can interactively highlight plot lines for improved overview (mouseover on legend entries)

user can interactively disable plot lines for improved overview and vertical scaling (click on legend entries)

added zoom (mousewheel/pinch on plot) and pan capability (drag zoomed-in plot)

Note

To display the logfile graphically it's neccessary to allow the JavaScriptFramework from cdn.jsdelivr.net and d3js.org to work, so please don't
use adblockers on that, if you want to use this function.

Device-specific parameter list (URL command: /Q):


After clicking on "Download" at the end of the displayed text, this function queries all parameters of the connected controller and creates the
belonging textfile with the specific output. This file must be sent to Frederik (bsb(ät)code-it.de) in order to have the belonging file
BSB_LAN_custom_defs.h created for your type of controller. After you received that file from Frederik, you the have to replace the existent file with
this version and flash BSB-LAN again to gain full access to your controller. For further informations please see chap. 3.3.

Settings (URL command: /C):


It shows the webinterface for configuration and an overview of certain functions that have been set.
You get a quick overview of (e.g.) the used version of BSB-LAN, the uptime, the used bus type, the address, the readonly or read/write state of
the adapter, about parameters that are set to log, protected GPIO pins and so on.

URL commands:
The button leads to the chapter URL Commands of this manual, where the URL commands are listed in a short overview. Internetaccess
needed.

Manual:
The button leads to the table of content of this manual. Internetaccess needed.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 72/230


FAQ:
The button leads to the chapter FAQ of this manual. Internetaccess needed.

Further on to chapter 5
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 73/230


5. BSB-LAN: Query and Control
Back to TOC
Back to chapter 4

5. BSB-LAN: Query and Control


Because the webinterface basically is just set 'on top' to achieve access without further programs like FHEM or openHAB, it's possible to access
the functions and parameters with external programs.

5.1 URL Commands


Note

The values and parameters in the following list of the URL commands must be written without the brackets.
E.g.: URL command /<x> for the simple query of parameter 8700 = /8700 .

URL
Effect
Command

/<x> Query value/setting of parameter <x>

/<x>!<addr> Query value/setting of parameter <x> for destination address <addr>

/K<x>!
Query all parameters of category <x> for destination address <addr>
<addr>

/<x>/<y>/<z> Query values/settings of parameters <x>, <y> and <z>

/<x>-<y> Query values/settings of parameters <x> to <y>

/<x>!<addr>-
Query values/settings of parameters <x> to <y> for destination address <addr>
<y>

Disable 24h average calculation temporarily


/A=0 Disables the 24h average calculation temporarily (until the next reboot of the microcontroller). For a complete

deactivation, uncomment all parameters for that function in the file BSB_LAN_config.h.

Change 24h average value calculation of parameters <x>, <y>, <z>


/A=<x>,<y>,
During runtime up to 20 new parameters can be defined for the 24h average calculation. These parameters are kept
<z>
until the next reboot of the microcontroller.

/B0 Reset counter of accumulated burner-runtime and -cycles

/C Configuration page (aka webconfig) of BSB-LAN

/CO Display the configuration of BSB-LAN

Display logfile from the microSD-card

/D or /DD Displays the logfile datalog.txt which contains the values of the logged parameters defined in the file
BSB_LAN_config.h.

Reset both logfiles & create new header

/D0 This command deletes the content of the files datalog.txt and journal.txt and creates a new csv-header for
datalog.txt. This command should be executed before first logging.

/DD0 Remove logfile datalog.txt only

Displays the data from the logfile which are between <a>,<b>
/D<a>,<b>
<a> and <b> have to be set in the format yyyy-mm-dd (e.g. /D2023-04-01,2023-04-30)

/D<n> Displays the newest <n> calender days of the logfile

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 74/230


URL
Effect
Command

Graphical display of the logfile from microSD-card


Shows graphical output (graphs) of the logged values.

Note: If you use Javascript blockers, make sure you allow access to cdn.jsdelivr.net and d3js.org, because the

microcontroller just loads the csv-file into the browser and the D3-framework converts the data. Alternatively,

these frameworks can also be stored and used locally - notes on this can be found in the
*BSB_LAN_config.h.default* file.

If the log file is opened via web interface by clicking on "Display log file", the log data of the most recent n

/DG calendar days (n=DEFAULT_DAYS_TO_PLOT, configurable in BSB_LAN_config.h) is displayed graphically first by

default. Subsequently, controls on the web page can be used to select a different range, depending on the data

contained in the log file.


Mouseover, click and mouse wheel actions within the graphical display provide various control options:

- better legibility for value numbers with plot lines close to each other (mouseover on plot)

- user can interactively highlight plot lines for improved overview (mouseover on legend entries)

- user can interactively disable plot lines for improved overview and vertical scaling (click on legend entries)
- added zoom (mousewheel/pinch on plot) and pan capability (drag zoomed-in plot)

Display logfile journal.txt from the microSD-card

Displays the logfile journal.txt which shows the content of received and transmitted telegrams. This log is useful
/DJ
for debugging and the search for unknown parameters. To use this function, you must enable the LOGGER module in the

file BSB_LAN_config.h and set the first element of the log_parameters array to 30000.

/DJ0 Remove logfile journal.txt only

/DK<n> Deletes the data of the logfile except the last <n> calender days

Display ENUM-values of parameter <x>


At this command the adapter doesn't communicate with the controller, it's a software sided internal function of
/E<x>
BSB-LAN. This command is only available for parameters of the type VT_ENUM, VT_CUSTOM_ENUM, VT_BITS and

VT_CUSTOM_BITS.

GPIO: Query pin <x>


/G<x>
Displays the actual state of GPIO pin <x>, where <y>=0 is LOW and <y>=1 is HIGH.

GPIO: Set pin <x> to HIGH (<y> = 1) or LOW (<y> = 0)


Sets GPIO pin <x> to LOW (<y>=0) or HIGH (<y>=1).
/G<x>=<y>
Reserved pins which shouldn't be allowed to be set can be defined previously at GPIO_exclude in the file

BSB_lan_config.h.

GPIO: Query pin <x> while setting to INPUT

If e.g. a coupling relay is connected to a GPIO pin and the state should just be queried, this command should be
/G<x>,I
used. It sets the GPIO pin to input (default they are set to output) and keeps this as long until it's changed by

using G<x>=<y>. After that, it's set to output again until the next "I" sets it to input again.

Send INF-message to parameter <x> with value <y>

/I<x>=<y> 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.

/JB JSON: Backup of all settable parameters of the controller of the heating system (restore with /JS)

JSON: Query possible values for parameters <x>, <y> and <z> for ENUM type parameters
/JC=<x>,<y>,
The format of the returned data is the same as the command /JK=<x>. Unlike the /JQ command, it does not return the
<z>
current parameter values.

/JI JSON: Display configuration of BSB-LAN

/JK=<x> JSON: Query all parameters of category <x>

/JK=ALL JSON: List all categories with corresponding parameter numbers

/JL JSON: Creates a list of the configuration in JSON format

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 75/230


URL
Effect
Command

/JQ=<x>,<y>,
JSON: Query parameters <x>, <y> and <z>
<z>

/JQ JSON: Query parameters

JSON: Query reset-value of parameter <x>

/JR<x> Within the integrated operational unit of the heating system there are reset options available for some

parameters. A reset is done by asking the system for the reset value and setting it afterwards.

/JS JSON: Set parameters

/JV JSON: Queries the version of the JSON-API. Payload: {"api_version": "major.minor"}

/JW JSON: Reads the list of configuration created with /JL and adjusts the settings.

List all categories


/K At this command the adapter doesn't communicate with the controller, it's a software sided internal function of

BSB-LAN.

Query all parameters and values of category <x>


/K<x> At this command the adapter doesn't communicate with the controller, it's a software sided internal function of

BSB-LAN.

Deactivate logging to microSD-card temporarily


In general, the activation/deactivation of the logging function should be done in the file BSB_lan_config.h before
/L=0,0
flashing the microcontroller. During runtime the logging can be temporarily deactivated by using L=0,0 though, but

it only has an effect until the next reboot of the microcontroller.

Set logging interval to <x> seconds with (optional) logging parameter <y1>,<y2>,<y3>

/L=<x>,<y1>, This command can be used to change the logging interval and the parameters that should be logged during runtime.

<y2>,<y3> All parameters that should be logged have to be set. After a reboot of the microcontroller, again only the

parameters are logged which has been defined in BSB_lan_config.h initially.

Configure logging of bus-telegrams: only broadcasts (<x>=1) or all (<x>=0)

/LB=<x> When logging bus telegrams (log parameter 30000 as the only parameter), only the broadcast messages (<x>=1) or all

telegrams (<x>=0) are logged.

/LD Disable logging of telegrams to journal.txt

/LE Enable logging of telegrams to journal.txt

/LN Forces logging irrespective of current interval and restarts the configured interval at this point of time

Configure logging of bus-telegrams: only unknown (<x>=1) or all (<x>=0)


/LU=<x> When logging bus telegrams (log parameter 30000 as the only parameter), only unknown command ids (<x>=1) or all

telegrams (<x>=0) are logged.

Activate (<x> = 1) or deactivate (<x> = 0) bus monitor mode


By default bus monitor mode is deactivated (<x>=0).

/M<x> When setting <x> to 1, all bytes on the bus are monitored. Each telegram is displayed in hex format with a

timestamp in miliseconds at the serial monitor. The html output isn't affected though.

To deactivate the monitor mode, set <x> back to 0: /M0.

Reset & reboot microcontroller (takes approx. 15 seconds)

/N Reset and reboot of the microcontroller.

Note: Function must be activated in BSB_lan_config.h by #define RESET

Reset & reboot microcontroller (takes approx. 15 seconds) and erase EEPROM

/NE Reset and reboot of the microcontroller with additional erasing of the EEPROM.

Note: Function must be activated in BSB_lan_config.h by #define RESET

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 76/230


URL
Effect
Command

Set bus type/protocol (temporarily): <x> = 0 → BSB / 1 → LPB / 2 → PPS


Changes between BSB (<x>=0), LPB (<x>=1) and PPS (<x>=2). After a reboot of the microcontroller, the initially
/P<x>
defined bus type will be used again. To change the bus type permanently, adjust the setting setBusType config in

BSB_lan_config.h accordingly.

Set bus type/protocol <x>, own address <y>, target address <z> (temporarily)

Temporarily change of the set bus type and addresses:

/P<x>,<y>, <x> = bus type (0 = BSB, 1 = LPB, 2 = PPS),

<z> <y> = own address and

<z> = destination address


Empty values leave the address as it is already set.

/Q Check for unreleased controller-specific parameters

Query reset-value of parameter <x>

/R<x> Within the integrated operational unit of the heating system there are reset options available for some

parameters. A reset is done by asking the system for the reset value and setting it afterwards.

Set value <y> for parameter <x> with optional destination address <z>

/S<x>!<z>= Command for setting values (therefore, write-access must be defined previously in BSB_lan_config.h!). Additionally

<y> 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>=

Displays the user-defined variables if used in BSB_lan_custom.h

For the creation of one’s own subroutines in BSB_lan_config.h two arrays of 20 bytes size, custom_floats[] und
/U
custom_longs[], are available. If used, these can be displayed via URL command /U and can be useful to query own
sensors in BSB_lan_custom.h and display the results on the web-interface via /U.

Activate (<x> = 1) or deactivate (<x> = 0) verbose output mode

The preset verbosity level is 1, so the bus is 'observed' and all data are displayed in raw hex format
additionally.

If the mode should be deactivated, <x> has to be set to 0: /V0


/V<x>
Verbosity mode affects the output of the serial monitor as well as the (optional) logging of bus data to microSD

card. Therefore the card could run out of space quickly, so it's advisable to deactivate the verbosity mode
already in the BSB_lan_config.h: byte verbose = 0

The html output isn't affected by /V1.

With a preceding /W the URL commands C, S and Q return data without HTML header and footer (e.g.: /WC or /WS<x>=
/W
<y!z>); module WEBSERVER has to be compiled!

Query optional MAX!-thermostats

/X Queries and displays the temperatures of optional MAX!-thermostats.


Note: MAX!-components have to be defined in BSB_lan_config.h before!

5.2 MQTT
BSB-LAN supports the MQTT protocol, so the values and settings of the heating controller can be retrieved via MQTT.
To use MQTT with BSB-LAN, it is mandatory that the definition "#define LOGGER" in the file BSB_LAN_config.h is activated. This is already the
case in the default setting.

The parameters to be sent (queried by BSB-LAN, the transmission interval (only one interval possible for all parameters!) and the other MQTT-
specific settings (broker, topic, etc.) are to be set either via web configuration or directly in the file BSB_LAN_config.h. Please refer to the
explanations in the corresponding subchapters of chap. 5.

Examples for an integration of BSB-LAN can be found in the corresponding subchapters of chap. 11.

Note

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 77/230


Note

If you use the MQTT function with fixed logging parameters and logging interval, make sure that you adjust the logging interval (= MQTT
send interval)!
By default 3600 is set here, which means that the parameters are sent every 3600 seconds, so every 60 minutes and thus hourly! So if you
set up your MQTT broker and you wonder why you don't receive values, check the logging interval at first place!

BSB-LAN uses the subtopic "status" below the defined "MQTTTopicPrefix" to publish its online state. Based on the default setting this would be
"BSB-LAN/status". This allows you to track whether BSB-LAN is actually publishing current readings and able to receive commands.
If BSB-LAN is available, the topic contains the value "online", otherwise you'll see "offline". The message is made persistant via the retain-flag,
thus, the subscriber does not have to have the topic subscribed during BSB-LAN startup.
Any restart initiated by the firmware (e.g. the URL-command /N) will immediately set the topic to "offline". Any uncontrolled shutdown (e.g. a
power outage or some firmware flashing) will cause the broker to transmit the offline-message after a (broker specific) timeout.

In addition to (broker-side) pure receiving, it is also possible to query and/or send control commands (URL commands /S and /I) to BSB-LAN
from the broker via MQTT. Of course, BSB-LAN must be granted write access to the controller if one wants to change settings.

The command syntax is:

set <MQTT server> publish <topic> <command>

<MQTT server> = The name of the MQTT server.

<topic> = Default setting is "BSB-LAN", otherwise the defined "MQTTTopicPrefix" in the file BSB_LAN_config.h accordingly. If no topic is
defined (not advisable), "FromBroker" must be taken as topic.

<command> = The query of the specific parameter or the corresponding parameter-specific URL command S or I .

| Attention | |:----------| | Only one query/command is possible at a time, so no parameter ranges can be queried!|

Subsequently BSB-LAN sends back an acknowledgement of receipt ("ACK_\<command>").

Example

The command set mqtt2Server publish BSB-LAN S700=1 sends from the MQTT broker named "mqtt2Server" the command "S700=1" with
the topic "BSB-LAN" and causes a mode switch to automatic mode.

The command set mqtt2Server publish BSB-LAN 700 sends from the MQTT broker named "mqtt2Server" the command "700" with the topic
"BSB-LAN" and causes a query of parameter 700.

Example for Mosquitto

Command for querying parameter 1010 (incl. username & password): mosquitto_pub -h 192.168.178.35 -u USER -P PASSWORD -m "1010" -t
BSB-LAN -d

Command for setting parmeter 1610 to 41° (incl. username & password): mosquitto_pub -h 192.168.178.35 -u USER -P PASSWORD -m

"S1610=41" -t BSB-LAN -d

5.3 JSON
Query of categories:

http://<ip-address>/JK=<xx>

Query of a specific category ( <xx> = number of category)

http://<ip-address>/JK=ALL

Query of all categories (including min. and max.)

Query and set parameters via HTTP POST:

For this the following URL commands have to be used:


http://<ip-address>/JQ to query parameters
http://<ip-address>/JS to set parameters

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 78/230


The following parameters are usable within these URL commands:

http://<ip-address>/JQ
Send: "Parameter"
Receive: "Parameter", "Value", "Unit", "DataType" (0 = plain value (number), 1 = ENUM (value (8/16 Bit) followed by space foll
owed by text), 2 = bit value (bit value (decimal) followed by bitmask followed by text/chosen option), 3 = weekday, 4 = hour:mi
nute, 5 = date and time, 6 = day and month, 7 = string, 8 = PPS time (day of week, hour:minute)), "readonly" (0 = read/write, 1
= read only parameter), "error" (0 - ok, 7 - parameter not supported, 1-255 - LPB/BSB bus errors, 256 - decoding error, 257 -
unknown command, 258 - not found, 259 - no enum str, 260 - unknown type, 261 - query failed), "isswitch" (1 = it VT_ONOFF or VT
_YESNO data type (subtype of ENUM), 0 = all other cases)

http://<ip-address>/JS
Send: "Parameter", "Value", "Type" (0 = INF, 1 = SET)
Receive: "Parameter", "Status" (0 = error, 1 = OK, 2 = parameter read-only)

The query of multiple parameters within one command is also possible:


The command http://<ip-address>/JQ=<x>,<y>,<z> queries the parameters <x>, <y>, <z> .

Example for setting parameters via Linux command line or „Curl for Windows“ with parameter 700 (operating mode heating circuit 1) → set
to 1 (= automatic mode):

Linux command line:

curl -v -H "Content-Type: application/json" -X POST -d '{"Parameter":"700", "Value":"1", "Type":"1"}' http://<ip-address>/JS

Curl for Windows:

curl -v -H "Content-Type: application/json" -X POST -d "{\"Parameter\":\"700\", \"Value\":\"1\", \"Type\":\"1\"}" http://<ip-a


ddress>/JS

User "hacki11" developed a detailed and interactive documentation of the JSON API.
Thanks a lot!

Note for developers

The API can be tested on your own system using Postman. To do this you have to add the URL
https://raw.githubusercontent.com/fredlcore/bsb_lan/master/openapi.yaml in File/Import/Link and (if necessary) change the specific settings
like address, basic auth data etc.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 79/230


In addition to the descriptions including examples of the individual commands, all informations about the types, formats, possible values, etc. sre
also listed.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 80/230


Notes

JSON commands can also be used via Linux command line or "Curl for Windows". In the above mentioned interactive API documentation,
the corresponding Curl commands can be generated and then copied for further use (the IP must be adjusted). To do this, proceed as
follows:
1. Click on the desired operation, e.g. "/JQ={parameterIds}".
2. Click on "Try it out" on the right side of the window.
3. Enter the desired parameter(s) (in the example shown below: 700,8300).
4. Click on "Execute".
In the "Responses" field you will see the URL and Curl commands you can copy.

Attention: The character combination %2C when listing multiple parameters is inserted by Swagger instead of the comma. If you want to
copy and use the URL/Curl commands, please replace each %2C with a , (comma)!

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 81/230


The output of the URL/Curl command.

5.4 Special Parameters & Number Ranges


Since BSB-LAN version 3.x, certain functions had to be implemented as special parameters using parameter numbers 10000 and upwards. The
following list shows these parameters including the number and the belonging function. Depending on the type of command, you either have to
use a SET or INF command (write access has to be granted), see the mentioned chapters for further informations.

Parameter Number Function Command Type

10000 Room Temperature HC1 INF - see chap. 6.3

10001 Room Temperature HC2 INF - see chap. 6.3

10002 Room Temperature HC3 INF - see chap. 6.3

10019 Manual DHW Push SET - see chap. 6.5

10110 Presence Button HC1 (temporary heating mode change) SET - see chap. 6.4

10111 Presence Button HC2 (temporary heating mode change) SET - see chap. 6.4

10112 Presence Button HC3 (temporary heating mode change) SET - see chap. 6.4

Number Ranges

The following overview shows how the number ranges are divided or assigned.

Number Range Usage

0-9999 Parameters of the controller

10000-10019 Functions of the room unit (room temperature & DHW push)

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 82/230


Number Range Usage

10020-10099 Originally parameters without numbers from the controller

10100-10109 Broadcast parameters

10110-10129 Presence button (temporary change of heating mode)

10200-10999 Range for manually added parameters

20100-20199 Sensors: DHT22

20200-20299 Sensors: BME280

20300-20499 Sensors: DS18B20

20500-20699 MAX! sensors/components

Further on to chapter 6
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 83/230


6. BSB-LAN: Special Functions
Back to TOC
Back to chapter 5

6. BSB-LAN: Special Functions

6.1 Logging Data


Insert a FAT32-formatted microSD card into the memory card slot of the ethernet shield before powering up the microcontroller.

Before flashing, activate the definement #define LOGGER in the file BSB_LAN_config.h, add the parameters to be logged to the variable
log_parameters and determine the log interval with the variable log_interval . Please also note the corresponding points in chapter 5.1.
Later, during the runtime, both the interval and the logging parameters can be changed by using the command "/L=[Interval],[Parameter1],...,

[Parameter20]" .

If an Olimex ESP32-EVB is used (or a microSD card adapter is used on an ESP32-based board) and the logged values are to be written to the
microSD card instead of the flash memory (which is highly recommended!), then the following definition must be activated in the
BSB_LAN_config.h file: #define ESP32_USE_SD .

All data is stored within the file datalog.txt on the card in csv format. Thus the data can easily be imported in Excel or OpenOffice Calc.

The file contents can be viewed with the URL command /D , a graphical representation of the log files is done by /DG .

To delete and rebuild the file datalog.txt, use the URL command /D0 .

The URL command /D0 should also be executed on first use! This will initiate the file with the appropriate CSV header.

Notes

Occasionally it may happen that certain microSD cards are not easily recognized by the LAN shield. If an error occurs, you'll get a warning
message. In that case please try a different card which is as up to date as possible.

Please note that the microcontroller is not an exact clock. Even if the interval has been set up to e.g. 60 seconds, the time displayed in the
file (which is received by the heating control) possibly will differ - this can take up to a second per minute.
If an exact log time is absolutely necessary, you can measure the average time difference between the microcontroller time and the real time
and adjust the log interval accordingly (e.g. set 59 seconds instead of 60 seconds).

In addition to the use of complex systems such as FHEM and the specific logging solutions, you can e.g. execute the following command
periodically (for example via cron job):

DATE=`date +%Y%m%d%H%M%S`; wget -qO- http://192.168.178.88/8310/720/710 | egrep "(8310|720|710)" | sed "s/^/$DATE /" >> log.txt

The log file log.txt resulting from this example contains the recorded values of parameters 8310, 720 and 710.
Later you can sort the log file based on the parameter numbers, use the command \'sort\' for this:

sort -k2 log.txt

6.2 IPWE Extension


The IPWE extension offers the presentation of various previously defined parameters by the usage of just one short URL. To access this table
overview, the following URL has to be used:
<ip-address>/ipwe.cgi .

Note

If the optional security function of the passkey is used, the passkey has NOT to be added within the URL in this case!

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 84/230


Example of an IPWE output.

To use the function of the IPWE extension, one has to make two settings in the file BSB_LAN_config.h before flashing the microcontroller:

The definement #define IPWE has to be active.

The desired parameters which should be displayed have to be listed.

Additionally to the set parameters, the values of optional connected sensors (DHT22 / DS18B20) will be listed automatically.
If DS18B20 sensors are connected, the specific sensor id of each sensor will also be displayed. You can see this in the last row of the IPWE
example above, the specific sensor id of the one and only connected DS18B20 sensor is "284c453d07000082".

Notes

If there are -by accident- parameters defined which aren't supported by the specific heating system, the non-existent values will be displayed
as "0.00". So don't get that wrong - it doesn't mean, that that specific value is "0.00"! Before you define the parameters, it's best to check
before and make sure, that the heating system really offers these parameters.

Because the IPWE extension was originally designed to implement values of a specific wireless weather station, there will be some columns
which doesn't seem to make sense, like "Windgeschwindigkeit" (wind speed) or "Regenmenge" (amount of rain water) - you can just ignore
that. Basically, there are just two columns which are relevant for the normal parameters: "Beschreibung" and "Temperatur", because here
you can find the name of the parameter and the belonging value.

The states of certain parameters aren't shown in clear text, only in numerical values. In the above example you can see this e.g. in the row
with the parameter "1. Brennerstufe T1": There doesn't appear "Ein" (on), it only shows the value "255" - which means "Ein" (on).

6.3 Transmitting a Room Temperature


By using an INF-message, a room temperature can be transmitted to the controller.
Therefore you have to activate the function 'room influence' (e.g. parameter 750 for circuit 1, parameter 1050 for circuit 2) before.
Write-access has to be granted for BSB-LAN.
The room temperatures have to be sent regularly in a 'short' interval, like every one or two minutes.

Note

This parameter can't be queried.

The following parameters have to be used:

10000 = heat circuit 1

10001 = heat circuit 2

10002 = heat circuit 3/P

Example:
This command transmits a room temperature of 19.5°C to the circuit 1: http://<ip-address/I10000=19.5

Excursus: room influence regarding the room temperature


FHEM forum user "freetz" has decoded the model behind the "room influence" (parameter 750), so that the effects on the flow temperature
became more clear. Thanks a lot for this!

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 85/230


His article (German language) as well as an Excel spreadsheet can be found here.

6.4 Simulating the Presence Function


The function of the presence button (which can be found at the room units) is implemented as the parameter "Heating mode (temporary)" with the
special parameters

10110 = heating circuit 1

10111 = heating circuit 2

10112 = heating circuit 3

and has to be executed as a SET-command.

This function can be used in automatic mode to switch between comfort and reduced heating modes within the time program. The respective
switchover is valid until the next switchover takes place according to the time program (or by using the presence button again).

With an active automatic operationg mode one has to use


http://<ip-address>/S<parameter>=1 to change to the heating mode 'reduced' and
http://<ip-address>/S<parameter>=2 to the change to the heating mode 'comfort'.

Example:
The command <URL>/S10110=2 switches HC1 to the heating mode 'comfort' within the operating mode 'automatic', <URL>/S10110=1 switches HC1
to the heating mode 'reduced'.

Notes

The above listed parameters must be writeable, therefore BSB-LAN needs write-access (see chap. 2.2).

These special parameters (10110, 10111, 10112) can not be queried!

The function of the presence button is only available when the heater is in operating mode 'automatic'!

The respective change is valid until the next changeover of the heating mode according to the time program.

For users of BSB-LAN version v3.x, in whose controller-specific file BSB_LAN_custom_defs.h this command is not yet implemented, it can
be added manually afterwards. A corresponding description of the necessary steps can be found in chap. 2.3.

6.5 Triggering a Manual DHW-Push


Within many controllers there is a (nearly) undocumented function available: a manual DHW push. To initiate a manual DHW push, one has to
press and hold the DHW-mode-button at the operational unit. After approx. three seconds a message appears at the display and the heating
process starts.

With some controllers this function can also be used with BSB-LAN using a SET-command: http://<ip-address>/S10019=1 - of course the
parameter 10019 must be made settable before (see chapter 2.2).

6.6 Changing the Date, Time and Time Programs


Changing the date, time and time programs is only possible by using a special URL command, it is not possible via webinterface.
To use this feature, BSB-LAN needs write access (see chapter 2.2).

Changing the date and time


The following URL command sets the date to the fourth of january 2019 and the time to 08:15pm:
/S0=04.01.2019_20:15:00
Using this function it is possible to sychronize the time with (e.g.) a NTP time server.

Changing time programs


The following URL command sets the time program for wednesday at heating circuit 1 (parameter 502) to 05:00am-10:00pm:
/S502=05:00-22:00_xx:xx-xx:xx_xx:xx-xx:xx

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 86/230


Deleting a time program
To delete a time program, you must enter "128:00" as the time.
So if, for example, three time programs have been set for Tuesday and you only want to keep the first one from 5-22h, the following command
must be used:
/S502=05:00-22:00_128:00-128:00_128:00-128:00

6.7 Transmitting an Alternative Outside Temperature


Certain specific controller types allow the usage of different wireless components. Amongst other things there is also a wireless outside
temperature sensor available. Within these compatible controllers it is possible to use BSB-LAN to transmit an alternative outside temperature.

Until now it seems that only controllers of the types LMS and RVS are compatible. Older types of controllers (e.g. LMU and RVA) don't seem to
be compatible.

For using this function the wired temperature sensor has to be deconnected from the controller. The transmission of the alternative outside
temperature has to be done regularly within a time windows of (approx.) max. 10 minutes, but it is adviseable to transmit the value every 60 to
120 seconds.

To use this function, BSB-LAN needs write access (see chap. 5). The outside temperature has to be transmitted as an INF message (with the
virtual parameter 10003) using the URL command
<ip-address>/I10003=xx

where xx is the outside temperature in °C (degrees celcius); fractional values are possible.

Example:
With <ip-address>/I10003=16.4 the outside temperature of 16.4°C is transmitted; <ip-address>/I10003=9 transmits 9°C.

6.8 Integrating Own Code in BSB-LAN


BSB-LAN offers the possibility to integrate your own code.
For this purpose, the corresponding definition in the file BSB_lan_config.h must be activated and the code must be added in the files
BSB_lan_custom.h , BSB_lan_custom_global.h and BSB_lan_custom_setup.h .
Examples can be found in the "custom_functions" folder.
Please read the corresponding Readme for more information.

FHEM-Forumuser "Scherheinz" has provided another example (see forum post).


Many thanks for this!

In the following the above mentioned example:


Description:
"Every 20 seconds the battery voltage is read in via a voltage divider. Then a moving average is calculated from the last 10 values and forwarded
to FHEM via MQTT" (quote from the above linked post).

Integration:
The following code must be inserted into the file BSB_lan_custom_global.h :

const int akkuPin = A0;


int akkuWert = 0;
float akkuSpg = 12.00;
char tempBuffer[100];
int j;

void Filtern(float &FiltVal, int NewVal, int FF){ //gleitender Mittelwert bilden aus den 10 letzten Werten
FiltVal= ((FiltVal * FF) + NewVal) / (FF +1);
}

The following code must be inserted into the file BSB_lan_custom.h :

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 87/230


if (custom_timer > custom_timer_compare + 20000) { // alle 20 Sekunden
custom_timer_compare = millis();

akkuWert = analogRead(akkuPin); // Spannung messen

akkuWert = map(akkuWert, 500, 1023, 0, 150); // umwandeln auf 0 - 15V


akkuWert = akkuWert / 10.00;

Filtern(akkuSpg, akkuWert, 9); //gleitender Mittelwert bilden aus den 10 letzten Werten
if (j++ > 10) akkuWert=1; // nach 10 Werten Sprung auf 1

if (!MQTTClient.connected()) {
MQTTClient.setServer(MQTTBroker, 1883);
int retries = 0;
while (!MQTTClient.connected() && retries < 3) {
MQTTClient.connect("BSB-LAN", MQTTUser, MQTTPass);
retries++;
if (!MQTTClient.connected()) {
delay(1000);
DebugOutput.println(F("Failed to connect to MQTT broker, retrying..."));
}
MQTTClient.publish("AkkuSpannung",dtostrf(akkuSpg, 6, 1, tempBuffer));
MQTTClient.disconnect();
}
}
}

6.9 Using the Webserver Function


The webserver function has been developed and added by the user "dukess", who also gave the following informations about the
usage.
Thanks a lot!

By activating the belonging definement '#define webserver' within BSB_LAN_config.h, BSB-LAN can act as a webserver which even supports
static compression. For using that function, a few points must be noticed:

All files are / must be stored on the microSD card, but files can be placed in different directories and subdirectories though. E.g.:
http://<bsb-lan-ip-address>/foo/bar.html gets the file bar.html from the directory foo of the microSD card.

Only static content is supported.

Supported file types are: html, htm, css, js, xml, txt, jpg, gif, svg, png, ico, gz.

The web server supports the following headers: ETag, Last-Modified, Content-Length, Cache-Control.

As already mentioned, the web server supports static compression. If possible (if the client's browser supports gzip), it's always trying to
deliver gzipped content (e.g. /d3d.js.gz for the URL /d3d.js).

The following examples show the usage:

If there's no file named index.html located in the root directory of the microSD card, the regular web interface of BSB-LAN will be displayed
by the query of the URL http://<ip-address>/ .

If there's a file named index.html located in the root directory of the microSD card, that file will be displayed by the query of the URL
http://<ip-address>/ instead of the regular webinterface of BSB-LAN.

If the file index.html is located in a subdirectory of the microSD card, that file will only be displayed when the complete URL will be queried:
http://<ip-address>/foo/bar/index.html . If (in this case) only http://<ip-address>/foo/bar/ would be queried, the regular webinterface of
BSB-LAN would still be displayed, because directory listing or URL rewriting isn't implemented in the special webserver function.

Note

If you are using the PASSKEY function, you have to add the passkey to the URL.

6.10 Using the Alternative AJAX Web Interface


The AJAX webserver function has also been developed and added by the user "dukess".
Please see the informations in his AJAX repo for usage.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 88/230


Thanks a lot!

6.11 Room Unit Emulation


With the setup of the BSB-LAN adapter a room unit can be emulated, therefore additional hardware is needed.

The following functions are implemented in the code:

Integration fo connected sensors for measuring and transmitting the room temperature(s) to the desired heating circuit(s),

triggering a DHW push by using a pushbutton and

using the presence function for the heating circuits 1-3 by using a pushbutton (automatic detection of the present state with the
corresponding change between comfort and reduced mode in the automatic mode).

To use the functions, the corresponding entries must be made in the configuration. This can be done either by changes in the file
BSB_LAN_config.h or via the web interface (menu item "Settings").

In the following some notes about each function.

Room temperature

Up to five connected sensors can be specified for the room temperature measurements.

If more than one sensor is used, an average value is automatically calculated and transmitted to the heating controller.

To assign the respective sensors to the desired heating circuits, the specific parameter numbers of the respective sensors must be entered.
An overview of the connected sensors together with the associated parameter number can be found in the category "One Wire, DHT & MAX!
Sensors" (menu item "Heating functions" or by clicking on the menu item "Sensors").

When entering several sensors for one HC, the parameter numbers are only to be separated from each other by a comma, no space may be
used after the comma.

Pushbutton for TWW push and presence button function

The GPIO pins used for connecting the pushbuttons (one pin per pushbutton) must be set in the configuration.

DIGITAL pins must be used!

Please make sure that you do not use any other pins (e.g. those of connected sensors)! For Due-users: explicitly don't use the pins 12, 16-
21, 31, 33, 53!

The pushbuttons are to be connected microcontroller-typically for HIGH, that means you must connect a pull-down resistor (approx.
100kOhm) additionally to the respective pin.

You can find a pinout diagram of the Due in appendix B.

If you are not sure how to connect a pushbutton to an microcontroller for HIGH, please have a look at the internet, where you can find
countless examples.
Nevertheless, it should be briefly mentioned here how to proceed:

The push button with the two connectors A and B has to be connected at one connector (A) to the desired GPIO digital pin of the Due.

Additionaly, to the same terminal of the pushbutton (A) the pull-down resistor has to be connected, which in turn has to be connected to
GND of the Due.
This is important, the use of the resistor must not be omitted! Due to the pull-down resistor a defined potential is applied to the GPIO
when the button is not operated and the so-called 'floating' of the input is prevented. If the pull-down is not used and the input would
'float', unwanted level changes could occur at the pin, which in turn would result in the respective function (DHW push or heating mode
switchover) being triggered unintentionally.

The other pin of the button (B) is connected to a 3.3V pin of the Due.
Caution: The inputs of the Due are only 3.3V tolerant, so don't ever connect the pushbutton to a 5V pin of the Due!
If the button is pressed now, the circuit is closed - the signal is recognized as HIGH and the respective command (TWW push/presence
button) is triggered.

Additional note: If you disconnect the pushbutton(s) (e.g. because you don't want to use them anymore) make sure that you set the

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 89/230


belonging pin to "0" again and save the changed configuration, so that no floating could occur at that previously used pin!

6.12 Erasing EEPROM Using Pincontacts


In principle, the EEPROM can be erased via the web interface with the command /NE. However, in certain situations (e.g. if no access to the web
interface is possible) it may be necessary to delete the EEPROM without using the URL command.

For this, the following pins must be connected to each other when starting or rebooting the device:

Due: pins 31 & 33

ESP32: pins 18 and GND

Olimex: pins 34 and GND

After successful erase, the LED of the Arduino/ESP32 flashes for four seconds.
At restart the (pre-)settings from the file BSB_LAN_config.h are taken over, an adjustment can be done afterwards as usual via (e.g.) the web
interface.

The above mentioned pins for erasing can also be set individually in the file BSB_LAN_config.h via the definition #define EEPROM_ERASING_PIN XX

if required.

Alternatively, the microcontroller can also be connected via the serial interface and the character string /NE can be sent via the serial monitor, if
necessary with a preceding passkey (e.g. /1234/NE ). Then the EEPROM will also be erased.

ESP32 users can also set the entry "Erase All Flash Before Sketch Upload" in the ArduinoIDE under "Tools" to "Enabled", then the entire flash
area is erased once before the upload.

Further on to chapter 7
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 90/230


7. BSB-LAN Setup: Optional Hardware
Back to TOC
Back to chapter 6

7. BSB-LAN Setup: Optional Hardware


The BSB-LAN setup can be extended in its range of functions by optional hardware. In the following some components such as sensors and
relays as well as further hardware solutions are presented.

If you have implemented your own interesting project that works with the BSB-LAN setup and extends its functionality and you would like to share
it with other users, please contact me (Ulf) by email (adapter (at) quantentunnel.de)!

ATTENTION, important note:

When connecting optional hardware like sensors, relays etc. to the Arduino Due or the specific ESP32 board you have to make sure that
the used pin is not used elsewhere or is not already used internally! Information about the pin assignement can be found in the
respective pinout scheme of the specific Arduino-/ESP-board. Also pay attention to the serial pins of the adapter and additional components
like a LAN-shield, a relay-shield etc.

7.1 Usage of Optional Sensors: DHT22, DS18B20, BME280


There is the possibility to connect additional sensors directly to certain pins of the adapter or the microcontroller:

DHT22 (temperature, humidity; parameter numbers 20100-20199)

DS18B20 (OneWire sensor: temperature; parameter numbers 20300-20399)

BME280 (temperature, humidity, pressure; parameter numbers 20200-20299)

The necessary libraries for the Arduino IDE are already included in the repository of the BSB-LAN software.

If you are using an ESP32 board, there is also a (unofficial) possibility to use Xiaomi Mijia BLE sensors. Please see chap. 7.4.4 for further
informations.

Notes

In the default configuration of BSB-LAN "Pin 0" is set for all sensors. This corresponds program-internally to the deactivation of this function
and designates not the pin GPIO0! After connecting a sensor the corresponding pin must be set in the configuration of BSB-LAN - for this
the GPIO pin number must be entered (e.g. 7 for the connection of a sensor to GPIO7). The localizations and designations of the pins are
to be taken from the board-specific pinout scheme.

Usually, the sensors can be connected to GND and +3,3V of the adapter/microcontroller (by usage of the necessary additional pullup-resistors!).
For the usage of these sensors, one has to activate the belonging definements in the file BSB_LAN_config.h and has to set the specific pins
which are used for DATA (also see chapter 5). Make sure you don't use any of the protected pins listed in the file BSB_LAN_config.h!

After successful installation you can access the values of the sensors either by clicking at the button "sensors" at the top of the webinterface, by
clicking at the category "One Wire, DHT & MAX! Sensors" or by using the url command with the specific number of that category.

Besides that, they are also displayed in the IPWE extension by default, which can be accessed by using the URL <ip-address>/ipwe.cgi . For
using the IPWE extension, one has to activate the belonging definement in the file BSB_lan_config.h though.

If you want to log the measured values or if you want to create 24h average calculations, you can realize that by adjusting the belonging
parameters in the file BSB_LAN_config.h.

7.1.1 Notes on DHT22 Temperature/Humidity Sensors


DHT22 sensors are often advertised as "1 wire", but they are NOT part of the real OneWire bus system by Maxim Integrated and aren't
compatible with these components.
Furthermore they are not even part of any real bus system, because the sensors don't have any specific sensor id and can't be connected to the

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 91/230


same DATA-pin if you are using more than one sensor.

Usually these sensors have four pins, but only three of these are connected internally. Most in the time it's the third pin from the left (when viewed
from the front) which isn't connected, but you should verify this before soldering.
The most common pinout is:

Pin 1 = VCC (+)

Pin 2 = DATA

Pin 3 = usually not connected

Pin 4 = GND (-)

When you connect the sensor, an additional pullup resistance has to be placed between VCC (pin 1) and DATA (pin 2) which should be in the
range between 4,7kΩ to 10kΩ. In most cases a value of 10kΩ is suggested, but this should be determined individually (especially if any problems
with the sensor occur).

Please note:

If more than one DHT22 sensor should be used, you have to use an own pin at the microcontroller for each DATA pin of the sensor.
Furthermore you have to define them in the file BSB_LAN_config.h.

Besides the 'plain' sensors there are models which are already soldered onto a little circuit board, where the three necessary pins are lead out
and labeled. The following picture shows one of these types with the identical sensor AM2302.

The query of the sensors/measured values can be done either via direct parameter call ( URL/20100-20199 ) or by calling the corresponding
category. The following screenshot shows the web output of a connected DHT22 sensor.

Display of the measured values of a DHT22 in the web interface (category "One Wire, DHT & MAX! Sensors").

Note:

You can find various tutorials and examples within the internet about the installation and usage of DHT22 sensors.

7.1.2 Notes on DS18B20 Temperature Sensors

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 92/230


Sensors of the type DS18B20 are 'real' 1-wire/OneWire components of Maxim Integrated (initially Dallas Semiconductor).
Each sensors has a unique internal sensor id which allows the clear identification of a certain sensor within a more complex installation of the
bus system - if you wrote down the specific id for each sensor.
Besides the regular TO-92 type they are also available as waterproof capsuled types, which already have a cable connected.

Especially for the usage within heating system installations the capsuled type is very interesting, because you can realize an individual (and
waterproof!) installation easily and const-effective.

The query of the sensors/measured values can be done either via direct parameter call ( URL/20300-20399 ) or by calling the corresponding
category. The following screenshot shows the web output of four DS18B20 sensors connected to pin 7.

Display of the measured values of four DS18B20 in the web interface (category "One Wire, DHT & MAX! Sensors").

Note:

If you are using DS18B20 sensors, the specific sensor id of each sensor will also be listed within the output of the category sensors (and the
output of the IPWE extension, if used). Especially if more than one sensor will be added to the system, these unique sensor ids are
necessary to identify a specific sensor later. So if you integrate BSB-LAN and/or these sensors in your home automation software, you
should consider this (e.g. use RegEx on the sensor ids).

It's adviseable to read out the sensor id (e.g. by using /K49) and label each sensor, so that you don't get confused later. For this, you can
raise or lower the temperature of one sensor (e.g. hold it in your hand) and query the category sensors again after a certain time. Now you
can see the changed value of one sensor and write down the specific sensor id.

Besides that, if any sensor will be exchanged or added, most of the time the displayed order (within the output of the category sensors or the
IPWE extension) of the sensors will change also, because internally they are listed following the specific sensor ids. So if you only adjust the
reading following the order and name the sensors like that, it can happen, that the belonging name doesn't show the correct sensor
anymore. The following screenshots show this circumstance.

If any changes within the installation of the sensors occur (e.g. if you exchange, add or remove something), you have to reboot the Arduio,
so that the sensors will be initially read out and added to the software.

Notes on the electrical installation:


Each sensor usually offers three pins: VCC, DATA and GND.
Within the capsuled types, the colors of belonging wires are often as follows:

Red = VCC (+3,3V)

Yellow = DATA

Black = GND (-)

If you are using more than one sensor and/or larger cable lengths, it's advisable to add a 100nF ceramic capacitor (and maybe also an

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 93/230


addditional 10µF tantal capacitor) for each sensor. The capacitors should be added as close as possible to the sensor and need to be connected
between GND and VCC so that a brownout at the time of the query will be compensated.

Besides the (optional but advisable) usage of capacitors, you have to use a pullup resistance (only one!) at the output of the
adapter/microcontroller and place it between DATA and VCC (+3,3V). If you are using more than one sensor and/or larger cable lengths, you
probably have to evaluate the correct dimension of the resistor, which can be smaller than the 4,7kΩ which is suggested most of the times.

Furthermore, in more complex or larger installations, it seems in individual cases that the voltage supply with the 3.3V of the Due does not always
allow a problem-free operation of the sensors. Since these OneWire sensors are "open drain", they can also be operated with 5V of the Due,
which seems to result in a more stable operation. However, it must then be ensured that the 5V is never applied to the GPIO of the Due!
For the installation this means that VCC of the sensors is connected to the 5V pin of the Due, but the PullUp resistor to be used must be placed
between DATA and a 3.3V pin of the Due!

Notes:

If you are using the mentioned capsuled and already wired types, it's usually sufficient to place the capacitors where the wires will be
connected. So you don't have to cut the wires at the capsule to place the capacitor there (according to experience, at least with the types
which come with a cable length of 1m or 3m it's not necessary).

In contrary to ceramic capacitors you have to pay attention to the correct polarity if you are using additional tantal capacitors!

It's not advisable to use the 'parsite power mode'.

It's advisable to use a shielded cable for the connection. The shield should be connected to GND at one end of the cable.

To minimize the risk of electrical interference, try not to lead the cable parallel to power cords. Besides that, you can also add a ferrite ring to
minimize the risk of electrical interference which maybe can come from the power supply of the microcontroller. Just lead the cable a few
times through the ferrite ring.

If you have to use larger cable lengths, it's necessary to pay attention to the correct network topology. Have a look at the tutorial which was
written from the manufacturer: "Guidelines for Reliable Long Line 1-Wire Networks".

Note:
You can find various tutorials and examples within the internet about the installation and usage of DS18B20 sensors.

Summary of needed parts for an installation:

three-wired cable (if shielded, connect the shield at one end to GND)

one pullup resistance 4,7kΩ or maybe smaller, positioned between VCC and DATA at the adapter/microcontroller

ceramic capacitor 100nF, one for each sensor, positioned between VCC and GND close to the sensor

optional: tantal capacitor 10µF, one for each sensor (additional to the ceramic capacitor!), positioned between VCC and GND close to the
sensor (please pay attention to the correct polarity!)

optional: screw terminals, circuit board, housing, ...

Notes for the usage within your heating system installation:

If you want to use the capsuled types of sensors, especially within bigger installations it can be adviseable to use the version with 3m cable
instead of 1m cable. They are only a little bit more expensive but offer a greater freedom of movement when you want to place the sensors.

If you want to place the sensors at some pipes, it's adviseable to create a little bed made of thermal paste for the contact area. Fasten the
sensor with a metal pipe clamp to the pipe and also fasten the cable itself with a cable tie, so that tensile forces won't work on the sensor
itself and that the sensors stays in place. Of course you need to place the sensor between the pipe an the insulation and close the insulation
after you are done with the installation. If there is no pipe insulation it's advisable to -at least- cover the sensor with a piece of insulation, so
that it's not affected by any cold air or so.

In general, the sensors should me mounted one or two meters away from a heat source, so that they aren't affected by that.

Please note:
Already installed sensors which belong to the heating system (e.g. sensors for a warm water tank or a heating buffer tank) are always
more important than any sensor for your home automation system! The given installation of your existent heating system should never
be adversely affected by any optional installed DS18B20 sensor!

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 94/230


Construction plan:
If you want to set up an installation with more than one sensor and the common capsuled sensors with 1m or 3m cable length, you can build a
little 'distribution box'. For this, you can solder the connection wires of the sensors and the belonging capacitors in line onto a circuit board. If you
use screw terminals instead of soldering the sensors straight to the board, you can easily add or exchange sensors later. At the 'beginning' of this
board, you connect the cable which leads to the adapter/microcontroller. The following pictures show two of these little 'distribution boxes' I made
- they work perfectly.

7.1.3 Notes on BME280 Sensors


Sensors of the BME280 type offer three (or five) measured variables: Temperature, humidity (plus the calculated absolute humidity) and air
pressure (plus the calculated altitude). They are small, usually uncomplicated to connect and provide (sufficiently) accurate measurement results.
Up to two sensors of the type BME280 can be connected to the I2C bus of the microcontroller (also to the deprecated Arduino Mega
2560).
To use them, the corresponding definition in the file BSB_LAN_config.h must be activated and the number of connected sensors must be defined
(see chapter 2.2.2).

Notes

In principle BME280 can also be connected to an SPI, but not at the microcontroller of our BSB-LAN setup!

If you need more than two BME280 sensors, you can use an I2C multiplexer TCA9548A for that.

You can also use a BMP280. It doesn't offer humidity measurements though, so we recommend using a BME280.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 95/230


A BME280 sensor on a typical breakout board (clone); left = front, right = back.

The following points must be observed:

Make sure that the sensor is of type BME280 (and not e.g. a BMP280, BMP180,..).

Make sure that you use a module that already has pull-up resistors on the breakout board (like on the picture above). If your variant does not
have pull-up resistors installed, you have to add them when connecting it to the microcontroller (approx. 10kOhm, connect between SDA
and 3.3V and between SCL and 3.3V)!

Make sure that the first sensor has the I2C address 0x76! This is usually the case with the module shown above.

The second sensor must get the address 0x77. How to do this on the module shown above is described below.

Make sure you connect the sensor to the 3.3V pin of the microcontroller! The module shown above has a voltage regulator and level shifter
built in, so in this case you could connect it to 5V - but to make sure that there is never 5V at SDA/SCL, you should always prefer to connect
it to 3.3V.

Connection

The breakout board is usually already clearly labeled, so the connections can be clearly identified here.
Depending on the microcontroller used, a different I2C connector must be used:

The Arduino Due has two I2C bus connections: SDA/SCL at pins 20/21 and SDA1/SCL1. Care must be taken to use the SDA1 & SCL1
connectors, as the BSB-LAN adapter already uses the SDA/SCL connectors. SDA1/SCL1 are located next to the "AREF" pin. They are
usually covered by the LAN-Shield and are not carried out upwards to/through the LAN shield. However, they are accessible below the LAN
shield directly on the Due. For an exact positioning of SDA1/SCL1 please have a look at the pinout diagram in appendix B.

The Arduino Mega 2560, on the other hand, has only one I2C bus connector: SDA/SCL on pins 20/21. This is not occupied by the old
adapter v2, the connector can be used for the BME280.

The wiring has to be done as follows:

BME280 DUE Mega2560

VIN 3,3V 3,3V

GND GND GND

SDA SDA1 SDA 20

SCL SCL1 SCL 21

Addressing

Common breakout boards like the BME280 module shown above have three solder pads on the front side below the actual sensor, where usually
the left and the middle solder pad are connected by a conducting path. This usually corresponds to the address 0x76. The following picture
shows this connection circled in yellow.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 96/230


Address 0x76: trace between the left and the middle solder point.

If you want to connect a second sensor in parallel, you have to cut this conducting path carefully(!) and conscientiously with a fine sharp object
(e.g. cutter, scalpel). After that the right and the middle pin have to be connected by some solder. The following picture shows the necessary
steps: the red line on the left marks the necessary 'cut' on the board, the green line on the right marks the connection to be made afterwards
using solder.

Address 0x77: The red line marks the cut trace, the green line marks the new connection to be made.

Readout

The measured values of the connected BME280(s) can be read out as usual, e.g. by calling up the category "One Wire, DHT & MAX! Sensors"
under "Heating Functions", by a direct click on the button "Sensors" or also by entering the specific parameter numbers. BME280 sensors can be
found in the number range 'URL/20200-20299'. If a logging, a display within the IPWE extension etc. should be done, the specific parameter
numbers of the desired measured values of the respective sensor have to be used.
The following screenshot shows the corresponding display of a BME280 within the category "One Wire, DHT & MAX! sensors".

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 97/230


Display of the measured values of a BME280 in the web interface (category "One Wire, DHT & MAX! Sensors").

7.2 Relays and Relayboards


In principle it's possible and already provided in the BSB-LAN software as a function with the variants of the URL command /G that additional
relays or relay boards can be connected to the Arduino/ESP32 and controlled with BSB-LAN. In this way not only consumers can be switched,
but also states of connected consumers can be queried.

A single and a 4-channel relaymodule for the usage with an microcontroller.

The often cheap relaymodules available for the usage with an microcontroller are often already supplied with a relay which can handle high
voltage like 125V or 230V. However, due to poor quality or just an overload, different risky damage can occur. Because of that one should
consider to (additionally) use common couple or solid state relays which are used by electricians. in that case one should see the specific data
sheet to confirm that the electrical current of the microcontroller is strong enough to trigger the swithcing process of the relay.

Attention

Electrical installations should only be done by an electrician! High voltage like 230V or 125V can be deadly! It's adviseable to already
include an electrician at the state of planning.

Before using a relay/relay board, make sure that it is suitable for the desired task! For the switchable multifunctional inputs of the
heating controllers, for example, it is often required that the relay is suitable for low voltage or current - not all relays meet this criterion!

It is NOT possible to connect the microcontroller directly with the multifunctional inputs of the controller!

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 98/230


A common coupling relay. At this specific type, the corresponding pins at the microcontroller have to be connected with "14" and "13".

Example

If the controller of a solarthermic installation isn't already connected with the controller of the heating system, it's possible to query the state
of the pump by installing a coupling relay parallel to the pump and connect the other 'side' of the relay with the specific pins of the
microcontroller. Now you can query the state of the relay and therefore the state of the pump with the microcontroller.

7.3 MAX! Components


BSB-LAN is already prepared for the usage of MAX! heating system components. MAX! thermostats that shall be included into BSB-LAN, have to
be entered with their serial number (printed on a small label, sometimes in the battery compartment) in the file BSB_LAN_config.h into the array
max_device_list[] . After starting BSB-LAN, the pairing button has to be pressed on the thermostats in order to establish a connection between
BSB-LAN and the thermostats.

In BSB_LAN_custom.h you can use the following variables for using MAX! devices:

custom_timer

This variable is set to the value of millis() with each iteration of the loop() function.

custom_timer_compare

This variable can be used in conjunction with custom_timer to create timed executions of tasks, for example to execute a function every x
milliseconds.

In addition to that, all global variables from BSB_LAN.ino are available. In regard to MAX! functionality, these are most notably:

max_devices[]

This array contains the DeviceID of each paired MAX! device. You can use this for example to exclude specific thermostats from
calculations etc.

max_cur_temp[]

This array contains the current temperature of each thermostat. However, only temperatures from wall thermostats are reliable because they
transmit their temperature constantly and regularly. Other thermostats do this only when there is a change in the valve opening or upon a
new time schedule.

max_dst_temp[]
This array contains the desired temperature of each thermostat.

max_valve[]
This array contains the current valve opening of a thermostat (wall thermostats only carry this value when they are paired with a heater
thermostat).

The order inside of these arrays is always the same, i.e. if max_devices[3] is wall thermostat with ID xyz in the living room, then
max_cur_temp[3] contains the current temperature in the living room, max_dst_temp[3] the desired temperature in the living room etc.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 99/230


The order inside max_devices[] depends on how the devices have been paired with BSB-LAN and remains the same after restarts of BSB-LAN
since they are stored in EEPROM until this is erased by calling http://<IP-Adresse>/NE . However, one should not completely rely on this and
rather compare the ID stored in max_device[] for example when planning to ignore a specific thermostat in some kind of calculations. You can
obtain this ID from the second column of http://<IP-Adresse>/X (take note that this is not the same as the ID printed on the label) or by clicking
on the button "Sensors" at the top of the webinterface.

Display of connected MAX! sensors within the output of the category "One Wire, DHT & MAX! Sensors").

Important note for those users who use a Max!Cube that has been flashed to CUL/CUNO (see information here):
If BSB-LAN was not running (or was busy otherwise) when the CUNO was set up, then you have to press the pairing button again on these
devices, because only in that specific pairing process the ID printed on the devices label is sent together with the internally used device ID (and is
also used by FHEM).

You can also use the MAX! thermostats to calculate a weighted or average current or desired temperature (see here for configuring MAX devices
under FHEM and here for using the average temperature in FHEM).

FHEM forum user „Andreas29" has created an example on how to use MAX! thermostats with BSB-LAN without using FHEM. A detailed
description can be found in this forum post here. The "Arduino room controller light" is described in chapter 12.6.2.

7.4 Own Hardwaresolutions


The following solutions have been developed by BSB-LAN users. They should not only be a stimulation for re-building but also an example what's
possible with additional own built hardware solutions in combination with BSB-LAN.

If you also created something by your own of which you think that it could be interesting for other users, please feel free to contact me (Ulf) via
email at adapter (at) quantentunnel.de , so that I eventually can present it here in the manual. Thanks!

7.4.1 Substitute for a Room Unit (Arduino Uno, LAN Shield, DHT22, Display, Push Button Switch)
The member „Andreas29" of the German FHEM forum has built a substitute for a room unit, based on an Arduino Uno. Besides the data from a
DHT22 sensor, the current state of function of the heating system is displayed on a 4x20 LCD. With a little push button he imitates the function of
the presence button of a common room unit.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 100/230


The 'inside' of his substitute of a room unit.

The display of his own built room unit.

A more detailed description including the circuit diagram and the software is available here in the German FHEM forum.

Also, he expanded the functionality and implemented push messaging for certain error cases. The description and the software can be found here
in the German FHEM forum.

7.4.2 Room Temperature Sensor (Wemos D1 mini, DHT22, Display)


The member „Gizmo_the_great" of the FHEM forum has built a room temperature sensor based on a Wemos D1 mini and a DHT22 sensor. The
current temperatures on the heating circuits 1 and 2 are additionally displayed at an OLED display. The Wemos D1 ist running ESPeasy.

A more detailed description of his project you can find in his GitHub Repo.

7.4.3 Substitute for a Room Unit with UDP Communication

7.4.3.1 UDP with Arduino UNO + LAN Shield

FHEM forum member "fabulous" has built a substitute for a room unit based on the above-mentioned variant of user "Andreas29", which
communicates with the BSB LAN adapter via UDP. An Arduino Uno including LAN shield, a 20x4 LCD and a push button are used. A detailed
description and the corresponding code can be found here.

7.4.3.2 UDP with ESP32

BSB-LAN user "-cr " has extended the above mentioned variant of user "fabulous" and adapted it to an ESP32 including ssd1306 display. His
project BSBmonCR allows among other things a graphical display of selected parameters over time and a presence detection. In addition, it is
even possible to do without a display, since the graphical representation can also be accessed via http and logging to a Dropbox account is also
possible.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 101/230


The finished setup including the case.

Graphical representation of three parameters over time.

The detailed description can be found in his GitHub repository.

7.4.4 Xiaomi Mijia BLE Sensors

Attention

The following solution is not an 'official' version of BSB-LAN!


Therefore it lacks certain functions and we can't give any support for it!
If questions arise, you can post them in this discussion thread though.

The possible integration of Xiaomi Mijia BLE sensors described in the following only works with ESP32 boards!

User DukeSS developed the support for BLE (bluetooth low energy) sensors within a special version of BSB-LAN and offers it in his
GitHub repository.
Many thanks!

If you are using an ESP32 board, you can use an alternative branch which offers support for BLE sensors .
With this, you can use different BLE sensors, here you can see a list of the supported types.
This solution has been tested with Xiaomi Mijia BLE sensors of the type LYWSD03MMC.

At this point only unencrypted messages are supported, so you have to use an alternative firmware for the sensors. For the mentioned Xiaomi
Mijia BLE sensors of the type LYWSD03MMC you can find it here.

The limitations within this solution right now are e.g. that the OTA functionality won't work, because the BLE implementation takes too much
memory.

To use that function, you have to adjust two settings within the configuration of that special BSB-LAN version:

Activate EnableBLE to enable the BLE scan.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 102/230


Add the MAC addresses of the desired BLE sensors within BLE_sensors_macs .
Devices which aren't listed here will be ignored. The order in this listing affects the order in the category of the output.
At the moment you can add up to 40 sensors (parameter numbers: NN20900-20199).
A listing of all BT devices found can be displayed through the URL command /CO (if EnableBLE is activated).

7.5 LAN Options for the BSB-LPB-LAN Adapter


Even though the wired LAN connection is definitely the best option for integrating BSB-LAN into your network, it could be necessary to create an
alternative way of connection, because a full-range wired connection (bus cable or LAN cable) just isn't possible.

7.5.1 Usage of a PowerLAN / dLAN


The use of powerline adapters for expanding the LAN is an option, which could be the best and most reliable solution.
However, sometimes powerline installations can cause trouble because of possible interferences they may cause. If you have separated phases
within your electrical installation, it may just not work though. In that case ask an electrician about a phase coupler that he may could install.

7.5.2 WLAN: Usage of an Additional Router


Another option is to connect the Arduino Due's ethernet shield via LAN with an old WLAN router (e.g. an old FritzBox) and integrate the router in
your network via WLAN as a client. The speed of transmission usually is fast enough for the use of BSB-LAN. If the WLAN signal is weak, you
can probably try to change the antennas and mount bigger ones.

In addition to the use of a 'normal' router, there are small devices on the market that offer a RJ45 jack and a WLAN client or a WLAN client
bridge mode. These devices connect to the network via WLAN (like the FritzBox solution described above). The Arduino can be connected via
LAN cable to the device. These kinds of devices are often very small and can be plugged in a power outlet, so that the installation of the
hardware can usually be done quite easily.

However, a stable and reliable WLAN connection should be achieved. Especially, if you are using additional smart home software to create
logfiles, if you are using additional hardware like thermostats or if you want to control and influence the behaviour of your heating system.

Further on to chapter 8
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 103/230


8. Integration via Additional Software
Back to TOC
Back to chapter 7

8. Integration via Additional Software


Note:
The code examples and/or modules presented in the following subchapters may not yet have been adapted to the changes that
accompanied the changeover of the BSB-LAN version to the v3.x. It may therefore be that some examples can no longer be adopted
1:1, but must be adapted (e.g.: the URL command /T isn't available anymore in BSB-LAN v3.x but can still be found in some examples
listed below).
If you should discover a code example or a module, which is not executable in the represented form with the current BSB-LAN version
v3.x, then please inform the author of the example/module and (if possible) send me an adapted version of that example, so that I can
place the corrected version here.
Thanks.

Because the adapter is just an interface which makes it possible to gain access to the controller of the heating system, it is of course possible to
use external programs in addition to BSB-LAN. By this you can integrate your heating system in complex home automation systems and e.g.
create comprehensive logfiles and realize their graphical output.

Due to the many different software solutions out there, neither a comprehensive presentation, nor a comprehensive description about the
integration in specific programs can be given here. Also the whole topic about heating systems in general and how to optimize their functionality
can not be treated here.
However, the following subchapters supported by kind users offer some example code and scripts for some common software solutions to show
you how the integration of BSB-LAN works. Hopefully this will be helpful for your first steps.

If any question about these example scripts arises, please try to find the answer by yourself (e.g. in a specific forum). Maybe the author of the
specific example may also be willing to help you, so you can try to contact him, but please don't send me (Ulf) any questions about these topics.

If you are a programmer or a user of a system which isn't already mentioned here and you want to contribute an example script to make the first
steps easier for other users, of course you can contact me by email!

At this point, there's just one advise I'd like to give you: always make sure, that the whole process of heat generation and the whole functionality
of your heating system will still work without any problems in the case that your home automation system may be faulty or without functionality at
all! Every intervention you may want to trigger with this system should not have any impact on the basic functionality of your heating system.
Keep in mind that it's (in most of the cases) still a certain kind of controlled explosion and a burning process which generates the heat!

Notes:
Of course the following examples always have to be adjusted to your individual needs and settings. Especially the correct IP, probably activated
security options and the setting that gives BSB-LAN writeable access should be mentioned here (see chapter 5 for the specific options).

8.1 FHEM
The following example scripts for the FHEM integration using HTTPMOD were contributed by FHEM forum member „freetz".
Thanks a lot!

To gain access to the adapter via FHEM, you can use the module HTTPMOD.

Example script for the query of parameters and the transmission of the room temperature:

The example script queries the parameters 8700, 8743 and 8314 every 300 seconds. It assigns them to the device \"THISION\" (name of the
heating system) and the readings \"Aussentemperatur\", \"Vorlauftemperatur\" und \"Ruecklauftemperatur\".

Furthermore it provides a reading \"Istwert\" which can be set via FHEM to transmit the current room temperature to the heating system
(parameter 10000).

Last but not least it calculates the difference between \"Vorlauftemperatur\" and \"Rücklauftemperatur\" and assigns this difference to the reading
\"Spreizung\".

Please note:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 104/230


The RegEx-conditions must match from the beginning of the string (therefore the number of the parameter, e.g. 8700).

There seems to be a problem within the HTTPMOD-module and readings which start with "0" ( reading0Name and reading0Regex ), so please
start the readings counting from "1".

define THISION HTTPMOD http://192.168.178.88/8700/8743/8314 300


attr THISION userattr reading1Name reading1Regex reading2Name reading2Regex reading3Name reading3Regex readingOExpr set1Name set1URL
attr THISION event-on-change-reading .*
attr THISION reading1Name Aussentemperatur
attr THISION reading1Regex 8700 .*:[ \t]+([-]?[\d\.]+)
attr THISION reading2Name Vorlauftemperatur
attr THISION reading2Regex 8743 .*:[ \t]+([-]?[\d\.]+)
attr THISION reading3Name Ruecklauftemperatur
attr THISION reading3Regex 8314 .*:[ \t]+([-]?[\d\.]+)
attr THISION readingOExpr $val=~s/[\r\n]//g;;$val
attr THISION set1Name Istwert
attr THISION set1URL http://192.168.178.88/I10000=$val
attr THISION timeout 5
attr THISION userReadings Spreizung { sprintf("%.1f",ReadingsVal("THISION","Vorlauftemperatur",0)-ReadingsVal("THISION","Ruecklaufte
mperatur",0));; }

With that example the readings are displayed as numerical values. If you want them to be displayed in plain text like it's done within the
webinterface of BSB-LAN, you have to adjust the regular expressions according to that. The following example shows for the parameters '700 -
Betriebsart' and '8000 - Staus Heizkreis 1'.

attr THISION reading4Name Betriebsart


attr THISION reading4Regex 700 .*-[ \t]+(.*)
attr THISION reading5Name Status Heizkreis 1
attr THISION reading5Regex 8000 .*-[ \t]+(.*)

The numbering of the previously listed readings are continued with this, the readings should be added to the line 'attr THISION userattr'.
Furthermore the URL has to be expanded with the parameters 700 and 8000. At the end it looks like this:

define THISION HTTPMOD http://192.168.178.88/8700/8743/8314/700/8000 300


attr THISION userattr reading1Name reading1Regex reading2Name reading2Regex reading3Name reading3Regex reading4Name reading4Regex re
ading5Name reading5Regex readingOExpr set1Name set1URL
attr THISION event-on-change-reading .*
attr THISION reading1Name Aussentemperatur
attr THISION reading1Regex 8700 .*:[ \t]+([-]?[\d\.]+)
attr THISION reading2Name Vorlauftemperatur
attr THISION reading2Regex 8743 .*:[ \t]+([-]?[\d\.]+)
attr THISION reading3Name Ruecklauftemperatur
attr THISION reading3Regex 8314 .*:[ \t]+([-]?[\d\.]+)
attr THISION reading4Name Betriebsart
attr THISION reading4Regex 700 .*-[ \t]+(.*)
attr THISION reading5Name Status Heizkreis 1
attr THISION reading5Regex 8000 .*-[ \t]+(.*)
attr THISION readingOExpr $val=~s/[\r\n]//g;;$val
attr THISION set1Name Istwert
attr THISION set1URL http://192.168.178.88/I10000=$val
attr THISION timeout 5
attr THISION userReadings Spreizung { sprintf("%.1f",ReadingsVal("THISION","Vorlauftemperatur",0)-ReadingsVal("THISION","Ruecklaufte
mperatur",0));; }

Example script for the query and control of a connected relay board:

The following script is an example for a FHEM configuration, where the three relay ports named \"Heater\", \"Fan\" and \"Bell\" are queried and
controlled, with the relays connected to the GPIO pins 7, 6 and 5.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 105/230


define EthRelais HTTPMOD http://192.168.178.88/G05/G06/G07 30
attr EthRelais userattr reading1Name reading1Regex reading2Name reading2Regex reading3Name reading3Regex readingOExpr readingOMap se
t1Name set1URL set2Name set2URL set3Name set3URL setIMap setParseResponse:0,1 setRegex
attr EthRelais event-on-change-reading .*
attr EthRelais reading1Name Heater
attr EthRelais reading1Regex GPIO7:[ \t](\d)
attr EthRelais reading2Name Fan
attr EthRelais reading2Regex GPIO6:[ \t](\d)
attr EthRelais reading3Name Bell
attr EthRelais reading3Regex GPIO5:[ \t](\d)
attr EthRelais room Heizung
attr EthRelais set1Name Heater
attr EthRelais set1URL http://192.168.178.88/G07=$val
attr EthRelais set2Name Fan
attr EthRelais set2URL http://192.168.178.88/G06=$val
attr EthRelais set3Name Bell
attr EthRelais set3URL http://192.168.178.88/G05=$val
attr EthRelais setParseResponse 1
attr EthRelais setRegex GPIO[0-9]+:[ \t](\d)
attr EthRelais timeout 5

8.2 openHAB
When using openHAB >v2.5.4, you can implement BSB-LAN using the specific binding - for openHAB versions earlier than v2.5.4 there doesn't
exist a binding. With these older versions you have to use e.g. the bindings for HTTPMOD and Javascript Transformation to read and set
parameters.
Logging can be realized by (e.g.) InfluxDB and visualisation by (e.g.) Grafana.

8.2.1 openHAB-Binding
BSB-LAN user „hypetsch“ developed a binding for openHAB, which is officially part of openHAB since v2.5.4!
Thanks a lot!

8.2.2 openHAB with Javascript Transformation


The example scripts for the openHAB integration were contributed by FHEM forum member „acfischer42". Based on that, user "sihui"
contributed two corrections/suggestions for a change and the script to display the values in a sitemap.
Thanks a lot!

NOTE:
The neccessary addons like the the Javascript Transformations have to be installed previously!

Example of an item configuration:

Number hz_aussentemp "Aussentemperatur [%.1f °C]" <temperature> (Heizunglog) { http="<[http://192.168.178.88/8700:60000:JS(bsbinput.


js)]" }
String hz_700 "Heizkreis 1 Betriebsart [%s]" <temperature> (Heizunglog){ http="<[http://192.168.178.88/700:1000:JS(bsbinput_string.j
s)]" }

The following Javascript has to be put as bsbinput.js in the folder transform.

Example script for the query of parameters which report a value (bsbinput.js):

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 106/230


(function(i) {
var outputres;
var results = [];
value1 = i;
// define regex to search for the line in the http response
var regEx = 'input type=text id=\'value[0-9]+\' VALUE=\'[-]*[0-9]+\.[0-9]+';
var re = new RegExp(regEx, 'gim');

do {
match = re.exec(value1);
if (match){
results.push(match[0]);
}
} while (match);

outputres = results[0]
//extract actual value from the output
var output=outputres.substr(outputres.indexOf("VALUE='")+7,outputres.length);
return output;
})(input)

Example script for a direct query of enum-values (bsbinput_string.js):

(function(i) {
var outputres;
var results = [];
value1 = i;
// define regex to search for the line in the http response
var regEx = '<option value=\'[0-9]+\' SELECTED>.*</option>';
var re = new RegExp(regEx, 'gim');

do {
match = re.exec(value1);
if (match){
results.push(match[0]);
}
} while (match);

outputres = results[0]
//extract actual value from the output
var l=outputres.indexOf("</o")-outputres.indexOf(">")-1
var output=outputres.substr(outputres.indexOf(">")+1,l);
return output;
})(input)

Writing data is done via rules:

rule "RoomTemp"

when
Item iSet_temp changed
then
sendHttpGetRequest("http://192.168.178.88/I10000="+iSet_temp.state.toString)
end

Display of values in a sitemap (BasicUI, ClassicUI, iOS und Android App):

sitemap demo label="Mein BSB LAN" {


Frame label="Heizung" {
Text item=hz_aussentemp
Text item=hz_700
}
}

8.2.3 openHAB with Javascript Transformation, MQTT, Network and Expire


Based on the previous example, FHEM forum member „sihui" (GitHub: sihui62) wrote an expanded example.
Thanks a lot!

NOTE:
The neccessary addons like the the Javascript Transformation, MQTT, Network and Expire have to be installed previously!

The following example is shown as a sitemap in BasicUI like in the following screenshot:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 107/230


Example of an item configuration (/items/bsblan.items):

Number hz_mode_cmd <heating> //change heating mode


String hz_mode_state <heating> { http="<[http://192.168.178.88/700:10000:JS(bsbinput_string.js)]" } //read heating mode from BSB LAN
Adapter
Number hz_temperature_cmd <temperature> //change target temperature
Number hz_temperature_state <temperature> { http="<[http://192.168.178.88/8741:15000:JS(bsbinput.js)]" } //read current target tempe
rature from BSB LAN Adapter
String hz_status <heating> { http="<[http://192.168.178.88/8000:20000:JS(bsbinput_string.js)]" } //read current heating status from
BSB LAN Adapter
String hz_status_water <water> { http="<[http://192.168.178.88/8003:25000:JS(bsbinput_string.js)]" } //read current hot water status
from BSB LAN Adapter
Switch hz_mode_komfort <switch> { expire="1s,command=OFF" } //ONLY if Parameter 48 is available on your controller: set temporary Ko
mfort state during Automatik mode, switch item to OFF after one second (momentary switch)
Switch hz_mode_reduziert <switch> { expire="1s,command=OFF" } //ONLY if Parameter 48 is available on your controller: set temporary
Reduziert state during Automatik mode, switch item to OFF after one second (momentary switch)
Number hz_temperature_rgt <temperature> { http="<[http://192.168.178.88/8740:25000:JS(bsbinput.js)]" } //read current room temperatu
re for remote RGT from BSB LAN Adapter
Number hz_fan_speed <fan> { http="<[http://192.168.178.88/8323:30000:JS(bsbinput.js)]" } //read current fan speed from BSB LAN Adapt
er
Number hz_aussentemp <temperature> { http="<[http://192.168.178.88/8700:20000:JS(bsbinput.js)]" } //read current outside temperature
from BSB LAN Adapter via Javascript Transformation (not used here)
Number hz_kitchen_maxActual "MAX! Küche [%.1f °C]" {channel="max:thermostat:KEQ0565026:KEQ0648949:actual_temp"} //read temperature f
rom MAX!
Number BSBLAN_Aussentemp <temperature> { channel="mqtt:topic:bsblan:aussentemp" } //read current outside temperature from BSB LAN Ad
apter via MQTT2
Number BSBLAN_Vorlauftemp <temperature> { channel="mqtt:topic:bsblan:vorlauftemp" } //read current flow temperature from BSB LAN Ada
pter via MQTT2
Number BSBLAN_Ruecklauftemp <temperature> { channel="mqtt:topic:bsblan:ruecklauftemp" } //read current return temperature from BSB L
AN Adapter via MQTT2
Switch bsb_lan_presence <presence> { channel="network:pingdevice:192_168_178_88:online" } //check online status of BSB LAN through N
etwork binding
Number hz_mode_party <party> //enable or disable Party mode for 1-5 hours

The following Javascript has to be put as bsbinput.js in the folder transform.

Example script for the query of parameters which report a value (/transform/bsbinput.js):

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 108/230


(function(i) {
var outputres;
var results = [];
value1 = i;
// define regex to search for the line in the http response
var regEx = 'input type=text id=\'value[0-9]+\' VALUE=\'[-]*[0-9]+\.[0-9]+';
var re = new RegExp(regEx, 'gim');

do {
match = re.exec(value1);
if (match){
results.push(match[0]);
}
} while (match);

outputres = results[0]
//extract actual value from the output
var output=outputres.substr(outputres.indexOf("VALUE='")+7,outputres.length);
return output;
})(input)

Example script for a direct query of enum-values (/transform/bsbinput_string.js):

(function(i) {
var outputres;
var results = [];
value1 = i;
// define regex to search for the line in the http response
var regEx = '<option value=\'[0-9]+\' SELECTED>.*</option>';
var re = new RegExp(regEx, 'gim');

do {
match = re.exec(value1);
if (match){
results.push(match[0]);
}
} while (match);

outputres = results[0]
//extract actual value from the output
var l=outputres.indexOf("</o")-outputres.indexOf(">")-1
var output=outputres.substr(outputres.indexOf(">")+1,l);
return output;
})(input)

Writing and reading data is done via rules (/rules/bsblan.rules):

var Timer PartyModeTimer = null //initialize a timer for party mode

rule "HeatingTempTarget" //change target temperature


when
Item hz_temperature_cmd changed
then
sendHttpGetRequest("http://192.168.178.88/S710="+hz_temperature_cmd.state.toString)
end

rule "HeatingMode" //change heating mode


when
Item hz_mode_cmd changed
then
sendHttpGetRequest("http://192.168.178.88/S700="+hz_mode_cmd.state.toString)
end

rule "UpdateHeatingMode" //reflect manual RGT remote changes on UI


when
Item hz_mode_state changed
then
hz_mode_cmd.postUpdate(transform("MAP","heatingmode.map",hz_mode_state.state.toString))
end

rule "SetModeKomfort" //set mode temporary to Komfort during Automatik mode


when
Item hz_mode_komfort changed to ON
then
sendHttpGetRequest("http://192.168.178.88/S701=0")
end

rule "SetModeReduziert" //set mode temporary to Reduziert during Automatik mode


when
Item hz_mode_reduziert changed to ON
then
sendHttpGetRequest("http://192.168.178.88/S701=1")
end

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 109/230


end

rule "SetPartyMode" //extends heating Komfort time for 1-5 hours


when
Item hz_status changed
then
// to do: read shutdown times for Absenkung Reduziert dynamically from BSB LAN Adapter
if (hz_status.state.toString=="Absenkung Reduziert" && (now.getHourOfDay()>=22 && (now.getHourOfDay()<=23))) { //only trigger ru
le content during normal Reduziert shutdown times
switch (hz_mode_party.state) {
case 1: {
if(PartyModeTimer!==null) {
PartyModeTimer.cancel
PartyModeTimer = null
}
PartyModeTimer = createTimer(now.plusHours(1)) [ |
hz_mode_cmd.sendCommand(1)
logInfo("BSBLAN","Party Mode disabled")
]
hz_mode_cmd.sendCommand(3)
hz_mode_party.postUpdate(0)
logInfo("BSBLAN","Party Mode 1h")
}
case 2: {
if(PartyModeTimer!==null) {
PartyModeTimer.cancel
PartyModeTimer = null
}
PartyModeTimer = createTimer(now.plusHours(2)) [ |
hz_mode_cmd.sendCommand(1)
logInfo("BSBLAN","Party Mode disabled")
]
hz_mode_cmd.sendCommand(3)
hz_mode_party.postUpdate(0)
logInfo("BSBLAN","Party Mode 2h")
}
case 3: {
if(PartyModeTimer!==null) {
PartyModeTimer.cancel
PartyModeTimer = null
}
PartyModeTimer = createTimer(now.plusHours(3)) [ |
hz_mode_cmd.sendCommand(1)
logInfo("BSBLAN","Party Mode disabled")
]
hz_mode_cmd.sendCommand(3)
hz_mode_party.postUpdate(0)
logInfo("BSBLAN","Party Mode 3h")
}
case 4: {
if(PartyModeTimer!==null) {
PartyModeTimer.cancel
PartyModeTimer = null
}
PartyModeTimer = createTimer(now.plusHours(4)) [ |
hz_mode_cmd.sendCommand(1)
logInfo("BSBLAN","Party Mode disabled")
]
hz_mode_cmd.sendCommand(3)
hz_mode_party.postUpdate(0)
logInfo("BSBLAN","Party Mode 4h")
}
case 5: {
if(PartyModeTimer!==null) {
PartyModeTimer.cancel
PartyModeTimer = null
}
PartyModeTimer = createTimer(now.plusHours(5)) [ |
hz_mode_cmd.sendCommand(1)
logInfo("BSBLAN","Party Mode disabled")
]
hz_mode_cmd.sendCommand(3)
hz_mode_party.postUpdate(0)
logInfo("BSBLAN","Party Mode 5h")
}
}
}
end

rule "ConsiderRoomTempFromKitchen" //feed external temperatures to controller, for example MAX!


when
Item hz_kitchen_maxActual changed
then
sendHttpGetRequest("http://192.168.178.88/I10000="+hz_kitchen_maxActual.state.toString)
end

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 110/230


Transformation of number values to readable text (/transform/heatingmode.map):

Automatik=1
Reduziert=2
Komfort=3
Schutzbetrieb=0

Display of the values in a sitemap (/sitemaps/bsblan.sitemap, e.g. for BasicUI, ClassicUI, iOS and Android App):

sitemap bsblan label="Mein BSB LAN"


{
Frame {
Text label="Heizung" icon="heating"
{
Text item=hz_mode_state label="IST Betriebsart [%s]"
Selection item=hz_mode_cmd label="SOLL Betriebsart [%s]" mappings=[1="Automatik",3="Komfort",2="Reduziert"]
Text item=hz_temperature_state label="Gesetzte Temperatur [%.1f °C]"
Setpoint item=hz_temperature_cmd label="SOLL Temperatur [%.1f °C]" minValue=16 maxValue=24 step=0.5
Text item=hz_status label="Status Heizung [%s]"
Text item=hz_status_water label="Status Wasser [%s]"
Switch item=hz_mode_komfort label="Präsenz Komfort"
Switch item=hz_mode_reduziert label="Präsenz Reduziert"
Selection item=hz_mode_party label="Partymodus [%s]" mappings=[0="Aus",1="1h",2="2h",3="3h",4="4h",5="5h"]
Text item=hz_temperature_rgt label="Raumtemperatur RGT [%.1f °C]"
Text item=hz_kitchen_maxActual label="MAX! Küche [%.1f °C]"
Text item=BSBLAN_Aussentemp label="Aussentemperatur [%.1f °C]"
Text item=BSBLAN_Vorlauftemp label="Vorlauftemperatur [%.1f °C]"
Text item=BSBLAN_Ruecklauftemp label="Rücklauftemperatur [%.1f °C]"
Text item=bsb_lan_presence label="BSB LAN Online Status [%s]"
Text item=hz_fan_speed label="Gebläsedrehzahl [%d U/min]"
}
}
}

8.3 HomeMatic (EQ3)


The following example scripts are written by FHEM forum member „Bratmaxe".
After that, the example scripts of "PaulM" are listed.
Thanks a lot!

Example script for a query:

There are only 6 parameters need to be set:


CuxGeraetAbfrage = Device address of the CuxD execute device, which does the queries
CuxGeraetLogging = Device address of the CuxD execute device, which does the logging (emptyr==deactivated)
IPAdresseBSB = IP-address of the BSB-LPB-LAN-adapter
Wort = Number of the desired parameter: e.g. outside temperature = 8700
Variablename = Name of the system variable in the CCU
Durchschnitt24h = true == Durchschnittswert 24h holen, false == aktuellen Wert holen

It's not necessary to create a variable before, that's done by the script.
The type of the variable (number, bool, value list) will be adjusted automatically to the queried parameter.

! BSB-Adapter Wert abfragen by Bratmaxe


! 29.10.2018 - V0.1 - Erste Version

string CuxGeraetAbfrage = "CUX2801001:1"; ! GeräteAdresse des CuxD Execute Gerätes, welches die Abfragen ausführt
string CuxGeraetLogging = "CUX2801001:1"; ! GeräteAdresse des CuxD Execute Gerätes, welches das Logging ausführt, Leer ("") lassen,
wenn kein Cuxd-Highcharts Logging gewünscht
string IPAdresseBSB = "192.168.178.100"; !IP_Adresse des BSB-Adapters
string Wort = "8700"; !Parameternummer: Beispiel Außentemperatur = 8700, Betriebsmodus = 700
string Variablename = "Wetter_Temperatur_Heizung"; ! Name der Systemvariable
boolean Durchschnitt24h = false; ! true = Durchschnittswert holen, false = aktuellen Wert holen - diese muss vorher in der BSB_lan_c
onfig.h konfiguriert wurden sein!!!

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!Ab hier keine Anpassungen mehr notwendig!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! URL Zusammenführen
string url="";
if (Durchschnitt24h) { url="http://" # IPAdresseBSB # "/A" # Wort; }
else { url="http://" # IPAdresseBSB # "/" # Wort; }
! Variable anlegen, wenn nicht vorhanden:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 111/230


! Variable anlegen, wenn nicht vorhanden:
object svObject = dom.GetObject(Variablename);
object svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
if (!svObject)
{
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject.Name(Variablename);
svObject.Internal(false);
svObject.Visible(true);
}

! Werte holen
dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_SETS").State("wget --tries=5 --timeout=20 --quiet --output-document=- '"# url #"'")
;
dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_RETS").State();

! Prüfe, ob eine Ausgabe vorhanden ist, sonst z.B. IP-Adresse falsch, oder Netzwerkfehler
if (stdout != null && stdout != "")
{
! Ausgabe filtern
integer pos = (stdout.Find(Wort# " "));
if (pos == -1)
{
WriteLine("Position vom Wort '" # Wort # "' konnte nicht ermittelt werden");
}

stdout = stdout.Substr(pos, stdout.Length());


pos = stdout.Find("/td");
stdout = stdout.Substr(0, pos);

! Sonderzeichen ersetzen
if (stdout.Contains("&deg;")){ stdout = stdout.Replace("&deg;","°"); }
if (stdout.Contains("&#037;")){ stdout = stdout.Replace("&#037;","%"); }
stdout = stdout.ToLatin();
!WriteLine("Nach Sonderzeichenumwandlung: " # stdout); !Debug: Welchen Wert hat stdout aktuell

! Systemvariabel Info ermitteln


string Info = stdout.Substr(0,stdout.Find(":"));
!Info = Info.Substr(Wort.Length(), stdout.Length()); !Parameterzahl vor der Info entfernen
!WriteLine("DPInfo = " # Info); !Debug: Welcher DPInfo-Wert wurde gefunden

! Systemvariabel Wert ermitteln


string Wert = stdout.Substr(stdout.Find(": ") + 2,stdout.Length());
Wert = Wert.Substr(0,Wert.Find(" "));
!WriteLine("Wert = " # Wert); !Debug: Welcher Wert wurde gefunden

! Systemvariabel Einheit ermitteln


string Einheit = stdout.Substr(stdout.Find(Info) + Info.Length() + 1, stdout.Length());
Einheit = Einheit.Substr(Einheit.Find(Wert) + Wert.Length() + 1,Einheit.Length());
Einheit = Einheit.RTrim();
if (Einheit.Contains("- ")) { Einheit = ""; }
!WriteLine("Einheit = " # Einheit); !Debug: Welche Einheit wurde gefunden

! Systemvariable Typ und Werte setzen


svObject.DPInfo(Info);
svObject.ValueUnit(Einheit);

! Enums des Parameters ermitteln, wenn vorhanden


url="http://" # IPAdresseBSB # "/E" # Wort;

dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_SETS").State("wget --tries=5 --timeout=20 --quiet --output-document=- '"# url #


"'");
dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_QUERY_RET").State(1);
stdout = dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_RETS").State();
! Prüfe, ob es sich um einen Parameter mit Enum-Werten handelt.
if (!stdout.Contains("FEHLER: Falscher Typ!"))
{
! Setzen des Systemvariabel Wertetyp und Ermitteln der Enum-Werte des Parameters
stdout = (stdout.Substr(stdout.Find("0 - "), stdout.Length())).ToLatin();
string value = "";
string newvalues = "";
integer inewvalues=0;
foreach (value, stdout.Split("\r"))
{
if (value.Contains(" - "))
{
if (newvalues == "") { newvalues = newvalues # value.Substr(value.Find(" - ") + 3,value.Length()); }
else { newvalues = newvalues # ";" # value.Substr(value.Find(" - ") + 3,value.Length()); }
inewvalues = inewvalues + 1;
}
}

svObject.ValueType(ivtInteger);
svObject.ValueSubType(istEnum);
svObject.ValueList(newvalues);
!prüft, ob der ermittelte Wert innerhalbe der möglichen Werte liegt
BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 112/230
!prüft, ob der ermittelte Wert innerhalbe der möglichen Werte liegt
if (Wert < inewvalues) { if (Wert != svObject.Value()) { svObject.State(Wert); } }
else { WriteLine("Der ermittelte Wert entspricht keinem gültigen Enum-Wert. Bitte Ausgabe prüfen!") }
}
elseif (Einheit.Contains("- Aus") || Einheit.Contains("- Ein"))
{
! Setzen des Systemvariabel Wertetyp
svObject.ValueType(ivtBinary);
svObject.ValueSubType(istBool);
svObject.ValueName0("Aus");
svObject.ValueName1("Ein");
if (Wert != svObject.Value()) { svObject.State(Wert); }
}
elseif (Einheit.Contains("°"))
{
! Setzen des Systemvariabel Wertetyp
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.ValueMin(-50);
svObject.ValueMax(100);
if (Wert != svObject.Value()) { svObject.State(Wert); }
}
elseif (Einheit.Contains("%"))
{
! Setzen des Systemvariabel Wertetyp
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.ValueMin(0);
svObject.ValueMax(100);
if (Wert != svObject.Value()) { svObject.State(Wert); }
}
else
{
! Setzen des Systemvariabel Wertetyp
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
if (Wert != svObject.Value()) { svObject.State(Wert); }
}
dom.RTUpdate(0); ! Interne Aktualisierung der Systemvariabelen

! Logging
if (CuxGeraetLogging != "") { dom.GetObject("CUxD."#CuxGeraetLogging#".LOGIT").State(dom.GetObject(ID_SYSTEM_VARIABLES).Get(V
ariablename).Name()#";"#dom.GetObject(ID_SYSTEM_VARIABLES).Get(Variablename).Value()); }
}

Script for setting parameters:

Create a program where all system variables that should be observed are associated with ODER and bigger than or equal with 0 and "bei
Aktualisierung auslösen" (triggered by actualisation).
Example:

WENN Variablename größer oder gleich 0 "bei Aktualisierung auslösen"


DANN Dieses SKRIPT sofort ausführen

This variable need to include the value of the parameter in the info first (will be named by the read-out-script from above automatically). Example:
700 heating circuit 1 - operating mode
The number of the parameter will be detected automatically from the system variable 'Info'.
If the variable will be changed, the changed value will be send and actualized to the adapter automatically!

! BSB-Adapter Wert setzen by Bratmaxe


! 29.10.2018 - V0.1 - Erste Version

! Funktionsbeschreibung:
! Ein Programm, wo alle Systemvariabeln die Überwacht werden sollen mit ODER Verknüpft und größer oder gleich 0 und "bei Aktualisie
rung auslösen" , anlegen.
! Beispiel:
! WENN Variablename größer oder gleich 0 "bei Aktualisierung auslösen"
! DANN Dieses SKRIPT sofort ausführen
! die Variable muss in der Info zuerst den Parameter-Wert enthalten (wird von meinem Auslese Skript automatisch so benannt. Beispiel
: 700 Heizkreis 1 - Betriebsart
! Die Parameternummer wird dann automatisch aus der Systemvariable Info ermittelt.
! Wird die Variable geändert, so wird der geänderte Wert automatisch an den BSB-Adapter übermittelt und aktualisiert!

string CuxGeraetSetzen = "CUX2801001:12"; ! GeräteAdresse des CuxD Execute Gerätes


string IPAdresseBSB = "192.168.2.200"; !IP_Adresse des BSB-Adapters

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!Ab hier keine Anpassungen mehr notwendig!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! Hole Auslösende Variabel

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 113/230


! Hole Auslösende Variabel
var source = dom.GetObject("$src$"); !Funktioniert nur beim automatischen Aufruf
! Zum manuellen Aufruf/testen nächste Zeile einkommentieren
!source = dom.GetObject(ID_SYSTEM_VARIABLES).Get("VARIABLENAMEN");

if (source)
{
! Wort ermitteln
string Wort = source.DPInfo().ToString().Substr(0,source.DPInfo().Find(" "));
!WriteLine("Wort: "#Wort);
if (Wort != null && Wort != "")
{
string Wert = source.Value().ToString();
!WriteLine("Wert: "#Wert);
if (Wert != null && Wert != "")
{
! Anweisung senden
string urlset="http://" # IPAdresseBSB # "/S" # Wort # "=" # Wert;
dom.GetObject("CUxD." # CuxGeraetSetzen # ".CMD_SETS").State("wget -t 5 -T 20 -q -O - '"# urlset #"'");
dom.GetObject("CUxD." # CuxGeraetSetzen # ".CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD." # CuxGeraetSetzen # ".CMD_RETS").State();
if (stdout != null && stdout != "")
{
if (stdout.Contains("FEHLER: "))
{
stdout = stdout.Substr(stdout.Find("FEHLER: "), stdout.Length());
stdout = stdout.Substr(0, stdout.Find("/td"));
WriteLine("Fehlermeldung: "# stdout);
WriteLine("Wurde der BSB-Adapter zum Schreiben berechtigt? Handbuch Seite 26 beachten...");
}
else
{
! Kontrollabfrage
string url="http://" # IPAdresseBSB # "/" # Wort;
dom.GetObject("CUxD." # CuxGeraetSetzen # ".CMD_SETS").State("wget -t 5 -T 20 -q -O - '"# url #"'");
dom.GetObject("CUxD." # CuxGeraetSetzen # ".CMD_QUERY_RET").State(1);
stdout = dom.GetObject("CUxD." # CuxGeraetSetzen # ".CMD_RETS").State();

! Ausgabe filtern
integer pos = (stdout.Find("tr td \r\n" # Wort # " ") + 9);
stdout = stdout.Substr(pos, stdout.Length());
pos = stdout.Find("/td");
stdout = stdout.Substr(0, pos);

! Sonderzeichen ersetzen
if (stdout.Contains("&deg;")){ stdout = stdout.Replace("&deg;","°"); }
if (stdout.Contains("&#037;")){ stdout = stdout.Replace("&#037;","%"); }
!WriteLine("Nach Sonderzeichenumwandlung: " # stdout); !Debug: Welchen Wert hat stdout aktuell

! Systemvariabel oldWert ermitteln


string oldWert = stdout.Substr(stdout.Find(": ") + 2,stdout.Length());
oldWert = oldWert.Substr(0,oldWert.Find(" "));
!WriteLine("oldWert = " # oldWert.ToFloat()); !Debug: Welcher oldWert wurde gefunden
!WriteLine("newWert = " # Wert.ToFloat()); !Debug: Welcher oldWert wurde gefunden

if (Wert.ToFloat() != oldWert.ToFloat()) { WriteLine("Fehler: Werte stimmen nach setzen nicht überein!"); }


else { WriteLine("Wert wurde erfolgreich gesetzt"); }
}
}
else { WriteLine("Keine Ausgabe gefunden. IP-Adresse und Verkabelung prüfen."); }
}
else { WriteLine("Der neue Wert konnte nicht ermittelt werden."); }
}
else { WriteLine("Wort konnte nicht ermittelt werden, Steht der Wert in der SystemvariableInfo am Anfang gefolgt von einem Leerz
eichen?"); }
}
else { WriteLine("Auslösende Variable nicht erkannt! - Skript wird nicht ausgeführt."); }

Query of the errors of the controller to realize a notification if an error occurs:

! BSB-Adapter Wert abfragen Fehlercodes by Bratmaxe


! 05.11.2018 - V0.1 - Erste Version

string CuxGeraetAbfrage = "CUX2801001:1"; ! GeräteAdresse des CuxD Execute Gerätes, welches die Abfragen ausführt
string IPAdresseBSB = "192.168.178.100"; !IP_Adresse des BSB-Adapters
string Variablename = "Heizung_Fehlercodes"; ! Name der Systemvariable
integer AnzahlFehler = 10;

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!Ab hier keine Anpassungen mehr notwendig!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! Parameter Zusammenbauen
integer i =0;
string Woerter ="";
while (i < AnzahlFehler)
{
BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 114/230
{
if (Woerter != "")
{
Woerter = Woerter + "," + ((6801) + (10 * i)).ToString();
}
else { Woerter = Woerter + ((6801) + (10 * i)).ToString(); }
i = i + 1;
}

! URL Zusammenführen
string Ergebnis = "";
string Wort = "";

foreach(Wort, Woerter.Split(","))
{
string url="http://" # IPAdresseBSB # "/" # ((Wort.ToInteger() - 1).ToString());

! Werte holen
dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_SETS").State("wget --tries=5 --timeout=20 --quiet --output-document=- '"# url #
"'");
dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_RETS").State();

! Prüfe, ob eine Ausgabe vorhanden ist, sonst z.B. IP-Adresse falsch, oder Netzwerkfehler
if (stdout != null && stdout != "")
{
! Ausgabe filtern
integer pos = (stdout.Find((Wort.ToInteger() - 1).ToString() # " "));
stdout = stdout.Substr(pos, stdout.Length());
pos = stdout.Find("/td");
stdout = stdout.Substr(0, pos);

! Sonderzeichen ersetzen
if (stdout.Contains("°")){ stdout = stdout.Replace("°","°"); }
if (stdout.Contains("%")){ stdout = stdout.Replace("%","%"); }
stdout = stdout.ToLatin();
Ergebnis = Ergebnis # stdout.RTrim() # "\n\r";
}

url="http://" # IPAdresseBSB # "/" # Wort;


dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_SETS").State("wget --tries=5 --timeout=20 --quiet --output-document=- '"# url #
"'");
dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_QUERY_RET").State(1);
stdout = dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_RETS").State();

! Prüfe, ob eine Ausgabe vorhanden ist, sonst z.B. IP-Adresse falsch, oder Netzwerkfehler
if (stdout != null && stdout != "")
{
! Ausgabe filtern
integer pos = (stdout.Find(Wort# " "));
stdout = stdout.Substr(pos, stdout.Length());
pos = stdout.Find("/td");
stdout = stdout.Substr(0, pos);

! Sonderzeichen ersetzen
if (stdout.Contains("°")){ stdout = stdout.Replace("°","°"); }
if (stdout.Contains("%")){ stdout = stdout.Replace("%","%"); }
stdout = stdout.ToLatin();
Ergebnis = Ergebnis # stdout.RTrim() # "\n\r\n\r";
}
}

!Wenn noch keine Systemvarible vorhanden, diese anlegen


object svObject = dom.GetObject(Variablename);
object svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
if (!svObject)
{
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObject.Name(Variablename);
svObject.ValueType(ivtString);
svObject.ValueSubType(istChar8859);
svObject.DPInfo("Die letzen 20 Fehlercodes der Heizung");
svObject.Internal(false);
svObject.Visible(true);
dom.RTUpdate(0);
}

if (Ergebnis.ToLatin() != svObject.Value().ToLatin()) { svObject.State(Ergebnis); }

Query of parameters and additionally connected DS18B20 temperature sensors, using the specific sensor ids and the query of /T:

! BSB-Adapter Wert abfragen by Bratmaxe


! 29.10.2018 - V0.1 - Erste Version
! 11.11.2019 - V0.2 - Auslesen von Temperatursensoren hinzugefügt

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 115/230


! 11.11.2019 - V0.2 - Auslesen von Temperatursensoren hinzugefügt
! 15.11.2019 - V0.3 - Änderung der Ausleseart der Temperatursensoren mithilfe der ID

string CuxGeraetAbfrage = "CUX2801001:11"; ! GeräteAdresse des CuxD Execute Gerätes, welches die Abfragen ausführt
string CuxGeraetLogging = "CUX2801001:10"; ! GeräteAdresse des CuxD Execute Gerätes, welches das Logging ausführt, Leer ("") lassen,
wenn kein Cuxd-Highcharts Logging gewünscht
string IPAdresseBSB = "192.168.178.88"; !IP_Adresse des BSB-Adapters
string Wort = "T"; !Parameternummer: Beispiel Außentemperatur = 8700, Betriebsmodus = 700, eigene Temperatursensoren = T
string TemperatursensorID = "28aa44085414010b"; !Wenn Wort = "T", dann hier die ID des auszulesenden Temperatursensors eingeben, wir
d sonst ignoriert!
string Variablename = "Wetter_Temperatur"; ! Name der Systemvariable
boolean Durchschnitt24h = false; ! true = Durchschnittswert holen, false = aktuellen Wert holen - diese muss vorher in der BSB_lan_c
onfig.h konfiguriert wurden sein!!! (Bei Wort = T wird dieser Parameter ignoriert)

!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!Ab hier keine Anpassungen mehr notwendig!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

! URL Zusammenführen
string url="";
if (Durchschnitt24h && Wort != "T")
{
url="http://" # IPAdresseBSB # "/A" # Wort;
}
else
{
url="http://" # IPAdresseBSB # "/" # Wort;
}

! Variable anlegen, wenn nicht vorhanden:


object svObject = dom.GetObject(Variablename);
object svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
if (!svObject)
{
svObject = dom.CreateObject(OT_VARDP);
svObjectlist.Add(svObject.ID());
svObjectlist = dom.GetObject(ID_SYSTEM_VARIABLES);
svObject.Name(Variablename);
svObject.Internal(false);
svObject.Visible(true);
}

! Werte holen
dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_SETS").State("wget --tries=5 --timeout=20 --quiet --output-document=- '"# url #"'")
;
dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_RETS").State();

! Prüfe, ob eine Ausgabe vorhanden ist, sonst z.B. IP-Adresse falsch, oder Netzwerkfehler
if (stdout != null && stdout != "")
{
integer pos = (stdout.Find(Wort# " "));

! Ausgabe filtern
if (Wort == "T")
{
pos = (stdout.Find(TemperatursensorID # ": "));
}

if (pos == -1)
{
WriteLine("Position vom Wort '" # Wort # "' konnte nicht ermittelt werden");
}

stdout = stdout.Substr(pos, stdout.Length());


pos = stdout.Find("/td");
stdout = stdout.Substr(0, pos);

! Sonderzeichen ersetzen
if (stdout.Contains("&deg;")){ stdout = stdout.Replace("&deg;","°"); } !& d e g ; ohne Leerzeichen
if (stdout.Contains("%")){ stdout = stdout.Replace("%","%"); } !& # 0 3 7 ; ohne Leerzeichen
!WriteLine("Nach Sonderzeichenumwandlung: " # stdout); !Debug: Welchen Wert hat stdout aktuell

! Systemvariabel Info ermitteln


string Info = "";
if (Wort == "T")
{
Info = "SensorID: " + TemperatursensorID;
}
else
{
Info = stdout.Substr(0,stdout.Find(":"));
}
!Info = Info.Substr(Wort.Length(), stdout.Length());
!WriteLine("DPInfo = " # Info); !Debug: Welcher DPInfo-Wert wurde gefunden

! Systemvariabel Wert ermitteln


string Wert = stdout.Substr(stdout.Find(": ") + 2,stdout.Length());

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 116/230


Wert = Wert.Substr(0,Wert.Find(" "));
!WriteLine("Wert = " # Wert); !Debug: Welcher Wert wurde gefunden

! Systemvariabel Einheit ermitteln


string Einheit = stdout.Substr(stdout.Find(Info) + Info.Length() + 1, stdout.Length());
Einheit = Einheit.Substr(Einheit.Find(Wert) + Wert.Length() + 1,Einheit.Length());
Einheit = Einheit.RTrim();
if (Einheit.Contains("- ")) { Einheit = ""; }
!WriteLine("Einheit = " # Einheit); !Debug: Welche Einheit wurde gefunden

! Systemvariable Typ und Werte setzen


svObject.DPInfo(Info);
svObject.ValueUnit(Einheit);

! Enums des Parameters ermitteln, wenn vorhanden


url="http://" # IPAdresseBSB # "/E" # Wort;

dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_SETS").State("wget --tries=5 --timeout=20 --quiet --output-document=- '"# url #


"'");
dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_QUERY_RET").State(1);
stdout = dom.GetObject("CUxD." # CuxGeraetAbfrage # ".CMD_RETS").State();
! Prüfe, ob es sich um einen Parameter mit Enum-Werten handelt.
if (!stdout.Contains("FEHLER: Falscher Typ!"))
{
! Setzen des Systemvariabel Wertetyp und Ermitteln der Enum-Werte des Parameters
stdout = (stdout.Substr(stdout.Find("0 - "), stdout.Length())).ToLatin();
string value = "";
string newvalues = "";
integer inewvalues=0;
foreach (value, stdout.Split("\r"))
{
if (value.Contains(" - "))
{
if (newvalues == "") { newvalues = newvalues # value.Substr(value.Find(" - ") + 3,value.Length()); }
else { newvalues = newvalues # ";" # value.Substr(value.Find(" - ") + 3,value.Length()); }
inewvalues = inewvalues + 1;
}
}

svObject.ValueType(ivtInteger);
svObject.ValueSubType(istEnum);
svObject.ValueList(newvalues);
!prüft, ob der ermittelte Wert innerhalbe der möglichen Werte liegt
if (Wert < inewvalues) { if (Wert != svObject.Value()) { if (Wert != "") { svObject.State(Wert); }} }
else { WriteLine("Der ermittelte Wert entspricht keinem gültigen Enum-Wert. Bitte Ausgabe prüfen!") }
}
elseif (Einheit.Contains("- Aus") || Einheit.Contains("- Ein"))
{
! Setzen des Systemvariabel Wertetyp
svObject.ValueType(ivtBinary);
svObject.ValueSubType(istBool);
svObject.ValueName0("Aus");
svObject.ValueName1("Ein");
if (Wert != svObject.Value()) { if (Wert != "") { svObject.State(Wert); } }
}
elseif (Einheit.Contains("°"))
{
! Setzen des Systemvariabel Wertetyp
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.ValueMin(-50);
svObject.ValueMax(100);
if (Wert != svObject.Value()) { if (Wert != "") { svObject.State(Wert); } }
}
elseif (Einheit.Contains("%"))
{
! Setzen des Systemvariabel Wertetyp
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
svObject.ValueMin(0);
svObject.ValueMax(100);
if (Wert != svObject.Value()) { if (Wert != "") { svObject.State(Wert); } }
}
else
{
! Setzen des Systemvariabel Wertetyp
svObject.ValueType(ivtFloat);
svObject.ValueSubType(istGeneric);
if (Wert != svObject.Value()) { if (Wert != "") { svObject.State(Wert); } }
}
dom.RTUpdate(0); ! Interne Aktualisierung der Systemvariabelen

! Logging
if (CuxGeraetLogging != "") { dom.GetObject("CUxD."#CuxGeraetLogging#".LOGIT").State(dom.GetObject(ID_SYSTEM_VARIABLES).Get(V
ariablename).Name()#";"#dom.GetObject(ID_SYSTEM_VARIABLES).Get(Variablename).Value()); }
}

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 117/230


The following HomeMatic-scripts are developed by FHEM forum member „PaulM".
Thanks a lot!

For implementation in HomeMatic the usage of CuxD and wget is a good option.

Example for the query of the parameter '8326 burner modulation' by using CuxD:

! Skriptanfang:
! BSB-Abfrage
string url='http://192.168.178.88/8326'; !IP anpassen
! WriteLine("URL: " # url); !nur Kontrolle
! --timeout=seconds ! während der Dauer der Abfrage werden von der CCU
! keine anderen Skripte ausgeführt !!!
! siehe CUxD-Handbuch 5.8.2 System.Exec
! dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State
! ("wget -t 5 -T 20 -q -O - '"# url #"'"); ! abgekürzte Wget Syntax
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget --tries=5 --timeout=20 --quiet --output-document=- '"# url #"'");
! ausführliche Wget Syntax
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
! WriteLine("Antwort: " # stdout);
! Beim stdout den ueberfluessigen Vorspann entfernen
integer laenge = stdout.Length();
integer pos = stdout.Find("body");
! ab hier kommen auswertbare Informationen
pos = pos + 10;
stdout = stdout.Substr(pos, (laenge - pos));
! wenn Rückmeldung mit allen Daten angezeigt werden soll,
! Ausrufezeichen nächste Zeile entfernen
! WriteLine("Antwort ohne Vorspann: " # stdout);
string wort = "8326"; !Brennermodulation
integer laenge = wort.Length();
! WriteLine("laenge: " # laenge); zum Testen für andere Parameter
! für Skripttest Ausrufezeichen entfernen
integer pos = stdout.Find(wort);
! WriteLine("pos:" #pos);
pos = pos + 39; !bei anderen Parametern meist zwischen 25 und 50
string daten = stdout.Substr((pos + laenge +1), 100);
! WriteLine("daten :"#daten);
integer pos = daten.Find(wort);
daten = daten.Substr(0, (pos));
integer zahl = daten.ToFloat();
! keine Prüfung, da auch 0 sein kann
dom.GetObject("H_Brennermodulation").State(zahl);
WriteLine("H_Brennermodulation: "#zahl);
! nur für Chart CUxD
dom.GetObject("CUxD.CUX2801001:1.LOGIT").State
("H_Brennermodulation"#";"#zahl);
WriteLine("Hallo Welt!");
! Skriptende:

Example for setting the mode to comfort with ‚S700=3' using CuxD:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 118/230


! Skriptanfang:
! Heizung KOMFORT (=AN - keine Nachtabsenkung)
! Anweisung senden
string urlset ='http://192.168.178.88/S700=3'; !IP anpassen
WriteLine("Befehl: " # urlset);
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State
("wget -t 5 -T 20 -q -O - '"# urlset #"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
! Kontrollabfrage
string url='http://192.168.178.88/700'; !IP anpassen
! WriteLine("URL: " # url);
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State
("wget -t 5 -T 20 -q -O - '"# url #"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
! WriteLine("Antwort: " # stdout);
! Beim stdout den ueberfluessigen Vorspann entfernen
integer laenge = stdout.Length();
integer pos = stdout.Find("body");
pos = pos + 10;
stdout = stdout.Substr(pos, (laenge - pos));
! wenn Rückmeldung mit allen Daten angezeigt werden soll,
! Ausrufezeichen nächste Zeile entfernen
! WriteLine("Antwort ohne Vorspann: " # stdout);
string wort = "700"; !Heizbetrieb
integer laenge = wort.Length();
! WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
! WriteLine("pos:" #pos);
pos = pos + 28;
! WriteLine("pos: " # pos);
string daten = stdout.Substr((pos + laenge +1), 100);
! WriteLine("daten :"#daten);
string substring = daten.Substr(0, 1);
integer zahl = substring.ToInteger();
WriteLine("aktueller Heizbetrieb (0 bis 3): " # zahl);
if (zahl == 0) {dom.GetObject('H_Heizbetrieb').State("Heizung AUS");}
if (zahl == 1) {dom.GetObject('H_Heizbetrieb').State("Heizung Automatik");}
if (zahl == 2) {dom.GetObject('H_Heizbetrieb').State("Heizung Nachtabsenkung");}
if (zahl == 3) {dom.GetObject('H_Heizbetrieb').State("Heizung Komfort");}
! nur für Chart CUxD
!dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("H_Heizbetrieb"#";"#zahl);
! alle Werte aktualisieren
var programObj = dom.GetObject("Heizungswerte abfragen");
! Programmnamen ggf. anpassen
programObj.ProgramExecute();
WriteLine("Hallo Welt!");
! Skriptende:

Query and save as a system variable:


Vacation mode from-to / setback level (632/633/648)
Heating and hot water operation (700/1600/8700/8326/8743/8314/8830)
Transfer of the room temperature measured by a One-Wire sensor to the BOD (I10000)
Logging (for evaluations with CUxD Highcharts)

!Heizung Abfrage V17 mit CUxD 2018-02-17

!wget mit ausführl. Syntax 2018-02-17


!inkl. Daten Ferienbetrieb und -niveau 2018-01-31

!Prüfung of Rückgabewerte ungleich Null


!auch senden an CUxD-Geräte Tempsens_H_*

!H_Trinkwassertemperatur korrigiert +1.3 2017-08-11


!mit Übertrag der Raumtemperatur an die Heizung Parameter 8740 2017-05-13
!mit OneWire Sensoren 2017-04-26

!als Systemvariablen sind in Homematic angelegt:


!H_Ferien_Beginn Zeichenkette
!H_Ferien_Ende Zeichenkette
!H_Ferienniveau Zeichenkette

!H_Aussentemperatur Zahl
!H_Brennermodulation Zahl
!H_Vorlauftemperatur Zahl
!H_Kesselruecklauftemperatur Zahl
!H_Trinkwassertemperatur Zahl
!H_Heizbetrieb Zeichenkette
!H_Trinkwasserbetrieb Zeichenkette

!632 Beginn Ferienbetrieb TT.MM


!633 Ende Ferienbetrieb TT.MM

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 119/230


!633 Ende Ferienbetrieb TT.MM
!648 Frostschutz / Reduziert

string url='http://192.168.10.13/632/633/648/700/1600/8700/8326/8743/8314/8830/T';

!WriteLine("URL: " # url);

!--timeout=seconds ! während der Dauer der Abfrage werden von der CCU keine anderen Skripte ausgeführt
! CUxD-Handbuch 5.8.2 System.Exec "Es ist zu beachten, dass die Verarbeitung des HM-Scripts erst fortgesetzt wird, nachdem das aufge
rufene Programm beendet wurde. Während dieser Zeit werden keine anderen HM-Scripts ausgeführt!"

!dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -t 30 -q -O - '"# url #"'"); ! abgekürzte Wget Syntax


dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget --tries=5 --timeout=20 --quiet --output-document=- '"# url #"'"); ! ausführ
liche Wget Syntax
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
!WriteLine("Antwort: " # stdout);

!Beim stdout den ueberfluessigen Vorspann entfernen


integer laenge = stdout.Length();
integer pos = stdout.Find("body");
pos = pos + 10;
stdout = stdout.Substr(pos, (laenge - pos));
!wenn Rückmeldung mit allen Daten angezeigt werden soll, Ausrufezeichen nächste Zeile entfernen
!WriteLine("Antwort ohne Vorspann: " # stdout);

string wort = "632"; !Ferien Heizkreis 1 Beginn TT.MM


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 48;
!WriteLine("pos: " # pos);
string daten = stdout.Substr((pos + laenge +1), 13);
daten = daten.Substr(2,5);
!WriteLine("daten :"#daten);
dom.GetObject('H_Ferien_Beginn').State("Ferien ab: ???"); ! setzt vorherigen Wert zurück
dom.GetObject('H_Ferien_Beginn').State("Ferien ab: "# daten);
var temp = dom.GetObject('H_Ferien_Beginn').Value();
WriteLine("Ferien Heizkreis 1 Beginn TT.MM: " # temp);

string wort = "633"; !Ferien Heizkreis 1 Ende TT.MM


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 48;
!WriteLine("pos: " # pos);
string daten = stdout.Substr((pos + laenge +1), 15);
daten = daten.Substr(0,5);
!WriteLine("daten :"#daten);
dom.GetObject('H_Ferien_Ende').State("Ferien bis: ???"); ! setzt vorherigen Wert zurück
dom.GetObject('H_Ferien_Ende').State("Ferien bis: "# daten);
var temp = dom.GetObject('H_Ferien_Ende').Value();
WriteLine("Ferien Heizkreis 1 Ende TT.MM: " # temp);

string wort = "648"; !Betriebsniveau Ferien


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 48;
!WriteLine("pos: " # pos);
string daten = stdout.Substr((pos + laenge +1), 15);
daten = daten.Substr(0,12);
!WriteLine("daten :"#daten);
dom.GetObject('H_Ferienniveau').State("Ferienniveau: ???"); ! setzt vorherigen Wert zurück
dom.GetObject('H_Ferienniveau').State("Ferienniveau: "# daten);
var temp = dom.GetObject('H_Ferienniveau').Value();
WriteLine("Betriebsniveau Ferien: " # temp);

string wort = "700"; !Heizbetrieb


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 28;
!WriteLine("pos: " # pos);
string daten = stdout.Substr((pos + laenge +1), 100);
!WriteLine("daten :"#daten);
string substring = daten.Substr(0, 1);
integer zahl = substring.ToInteger();
!WriteLine("zahl: " # zahl);
if (zahl == 0) {dom.GetObject('H_Heizbetrieb').State("Heizung AUS");}
if (zahl == 1) {dom.GetObject('H_Heizbetrieb').State("Heizung Automatik");}
if (zahl == 2) {dom.GetObject('H_Heizbetrieb').State("Heizung Nachtabsenkung");}
if (zahl == 3) {dom.GetObject('H_Heizbetrieb').State("Heizung Komfort");}

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 120/230


! nur für Chart CUxD
!dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("H_Heizbetrieb"#";"#zahl);

string wort = "1600"; !Trinkwasserbetrieb


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 35;
string daten = stdout.Substr((pos + laenge +1), 100);
!WriteLine("daten :"#daten);
string substring = daten.Substr(0, 1);
integer zahl = substring.ToInteger();
!WriteLine("zahl: " # zahl);
if (zahl == 0) {dom.GetObject('H_Trinkwasserbetrieb').State("Warmwasserbetrieb - AUS");}
if (zahl == 1) {dom.GetObject('H_Trinkwasserbetrieb').State("Warmwasserbetrieb - EIN");}

! nur für Chart CUxD


!dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("H_Trinkwasserbetrieb"#";"#zahl);

string wort = "8700"; !Aussentemperatur


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 41;
string daten = stdout.Substr((pos + laenge +1), 100);
!WriteLine("daten :"#daten);
integer pos = daten.Find(wort);
daten = daten.Substr(0, (pos));
integer zahl = daten.ToFloat();
!Korrektur des angezeigten Wertes auf das Niveau der übrige Thermometer
if (zahl<>0)
{
zahl = zahl - 3.5;
dom.GetObject("H_Aussentemperatur").State(zahl);
WriteLine("H_Aussentemperatur: "#zahl);

! nur für Chart CUxD


dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("H_Aussentemperatur"#";"#zahl);

! für CUxD Gerät Tempsens_H_Aussen


dom.GetObject("CUxD.CUX9002012:1.SET_TEMPERATURE").State(zahl);
}

string wort = "8326"; !Brennermodulation


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 39;;
string daten = stdout.Substr((pos + laenge +1), 100);
!WriteLine("daten :"#daten);
integer pos = daten.Find(wort);
daten = daten.Substr(0, (pos));
integer zahl = daten.ToFloat();
!keine Prüfung, da auch 0 sein kann
dom.GetObject("H_Brennermodulation").State(zahl);
WriteLine("H_Brennermodulation: "#zahl);

! nur für Chart CUxD


dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("H_Brennermodulation"#";"#zahl);

string wort = "8743"; !Vorlauftemperatur 1:


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 45;
string daten = stdout.Substr((pos + laenge +1), 100);
!WriteLine("daten :"#daten);
integer pos = daten.Find(wort);
daten = daten.Substr(0, (pos));
integer zahl = daten.ToFloat();
if (zahl<>0)
{
dom.GetObject("H_Vorlauftemperatur").State(zahl);
WriteLine("H_Vorlauftemperatur: "#zahl);

! nur für Chart CUxD


dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("H_Vorlauftemperatur"#";"#zahl);

! für CUxD Gerät Tempsens_H_KesselVor


dom.GetObject("CUxD.CUX9002014:1.SET_TEMPERATURE").State(zahl);
}

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 121/230


}

string wort = "8314"; !Kesselrücklauftemperatur


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 52;
string daten = stdout.Substr((pos + laenge +1), 100);
!WriteLine("daten :"#daten);
integer pos = daten.Find(wort);
daten = daten.Substr(0, (pos));
integer zahl = daten.ToFloat();
if (zahl<>0)
{
dom.GetObject("H_Kesselruecklauftemperatur").State(zahl);
WriteLine("H_Kesselruecklauftemperatur: "#zahl);

! nur für Chart CUxD


dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("H_Kesselruecklauftemperatur"#";"#zahl);

! für CUxD Gerät Tempsens_H_KesselRue


dom.GetObject("CUxD.CUX9002013:1.SET_TEMPERATURE").State(zahl);
}

string wort = "8830"; !Trinkwassertemperatur


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 48;
string daten = stdout.Substr((pos + laenge +1), 100);
!WriteLine("daten :"#daten);
integer pos = daten.Find(wort);
daten = daten.Substr(0, (pos));
integer zahl = daten.ToFloat();
!Korrektur relativ zur Kesselvorlauftemperatur
if (zahl<>0)
{
zahl = zahl + 1.3;
dom.GetObject("H_Trinkwassertemperatur").State(zahl);
WriteLine("H_Trinkwassertemperatur "#zahl);

! nur für Chart CUxD


dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("H_Trinkwassertemperatur"#";"#zahl);

! für CUxD Gerät Tempsens_H_Trinkw


dom.GetObject("CUxD.CUX9002015:1.SET_TEMPERATURE").State(zahl);
}

!Übertrag der Raumtemperatur Esszimmer ...4d6 an die Heizung als Parameter 8740

real temp = dom.GetObject("T_Innentemperatur_Esszimmer").Value();


temp = temp.ToString();

string urlset = 'http://192.168.10.13/I10000='# temp;


!WriteLine("url " # urlset);

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -t 30 -q -O - '"# urlset #"'");


dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
!WriteLine("stdout: " # stdout);

!Abfrage, ob Setzen des Wertes ok


string url='http://192.168.10.13/8740';

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -t 30 -q -O - '"# url #"'");


dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
!WriteLine("stdout: " # stdout);

string wort = "8740"; !Raumtemperatur 1


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 42;
string daten = stdout.Substr((pos + laenge +1), 5);
!WriteLine("daten :"#daten);
integer pos = daten.Find(wort);
daten = daten.Substr(0, (pos));
!integer zahl = daten.ToFloat();
WriteLine("an die Heizung übertragene Raumtemperatur (8740) "#daten #"°C");

WriteLine("Hallo Welt!");

Commands to change the mode of the heater:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 122/230


So that syntax-safe instructions can be given from CCU to BSB (important e.g. also if no direct access to the BSB adapter is possible via VPN).

Heating OFF (= frost protection mode):

!Heizung AUS (=Frostschutzbetrieb) 2017-03-09

string urlset ='http://192.168.10.13/S700=0';


WriteLine("Befehl: " # urlset);

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -t 30 -q -O - '"# urlset #"'");


dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

string url='http://192.168.10.13/700';

WriteLine("URL: " # url);

!--timeout=seconds

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -t 30 -q -O - '"# url #"'");


dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
WriteLine("Antwort: " # stdout);

!Beim stdout den ueberfluessigen Vorspann entfernen


integer laenge = stdout.Length();
integer pos = stdout.Find("body");
pos = pos + 10;
stdout = stdout.Substr(pos, (laenge - pos));
!wenn Rückmeldung mit allen Daten angezeigt werden soll, Ausrufezeichen nächste Zeile entfernen

!Werte aktualisieren
var programObj = dom.GetObject("Heizungswerte abfragen");
programObj.ProgramExecute();

WriteLine("Antwort ohne Vorspann: " # stdout);


WriteLine("Hallo Welt!");

Heating automatic (= ON - with night setback):

!Heizung Automatik (=AN - mit Nachtabsenkung) 2017-03-09

!http://192.168.10.13/Passwort/S700=0 (Schutzbetrieb)
!http://192.168.10.13/Passwort/S700=1 (Automatik)
!http://192.168.10.13/Passwort/S700=2 (Reduziert)
!http://192.168.10.13/Passwort/S700=3 (Komfort)

string urlset ='http://192.168.10.13/S700=1';


WriteLine("Befehl: " # urlset);

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -t 30 -q -O - '"# urlset #"'");


dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

string url='http://192.168.10.13/700';

WriteLine("URL: " # url);

!--timeout=seconds

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -t 30 -q -O - '"# url #"'");


dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
WriteLine("Antwort: " # stdout);

!Beim stdout den ueberfluessigen Vorspann entfernen


integer laenge = stdout.Length();
integer pos = stdout.Find("body");
pos = pos + 10;
stdout = stdout.Substr(pos, (laenge - pos));
!wenn Rückmeldung mit allen Daten angezeigt werden soll, Ausrufezeichen nächste Zeile entfernen
WriteLine("Antwort ohne Vorspann: " # stdout);

!Werte aktualisieren
var programObj = dom.GetObject("Heizungswerte abfragen");
programObj.ProgramExecute();

WriteLine("Hallo Welt!");

Heating COMFORT (= ON - no night setback) :

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 123/230


!Heizung KOMFORT (=AN - keine Nachtabsenkung) 2017-03-09

!http://192.168.10.13/Passwort/S700=0 (Schutzbetrieb)
!http://192.168.10.13/Passwort/S700=1 (Automatik)
!http://192.168.10.13/Passwort/S700=2 (Reduziert)
!http://192.168.10.13/Passwort/S700=3 (Komfort)

! Anweisung senden
string urlset ='http://192.168.10.13/S700=3';
WriteLine("Befehl: " # urlset);

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -t 30 -q -O - '"# urlset #"'");


dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

! Kontrollabfrage
string url='http://192.168.10.13/700';

WriteLine("URL: " # url);

!--timeout=seconds

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -t 30 -q -O - '"# url #"'");


dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
WriteLine("Antwort: " # stdout);

!Beim stdout den ueberfluessigen Vorspann entfernen


integer laenge = stdout.Length();
integer pos = stdout.Find("body");
pos = pos + 10;
stdout = stdout.Substr(pos, (laenge - pos));
!wenn Rückmeldung mit allen Daten angezeigt werden soll, Ausrufezeichen nächste Zeile entfernen
WriteLine("Antwort ohne Vorspann: " # stdout);

!alle Werte aktualisieren


var programObj = dom.GetObject("Heizungswerte abfragen");
programObj.ProgramExecute();

WriteLine("Hallo Welt!");

Heating REPLACEMENT (continuously, i.e. also during the day!):

!Heizung Nachtabsenkung (dauernd, d.h. auch tagsüber Nachtabsenkung) 2017-03-09

!http://192.168.10.13/Passwort/S700=0 (Schutzbetrieb)
!http://192.168.10.13/Passwort/S700=1 (Automatik)
!http://192.168.10.13/Passwort/S700=2 (Reduziert)
!http://192.168.10.13/Passwort/S700=3 (Komfort)

string urlset ='http://192.168.10.13/S700=2';


WriteLine("Befehl: " # urlset);

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -t 30 -q -O - '"# urlset #"'");


dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();

string url='http://192.168.10.13/700';

WriteLine("URL: " # url);

!--timeout=seconds

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -t 30 -q -O - '"# url #"'");


dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
WriteLine("Antwort: " # stdout);

!Beim stdout den ueberfluessigen Vorspann entfernen


integer laenge = stdout.Length();
integer pos = stdout.Find("body");
pos = pos + 10;
stdout = stdout.Substr(pos, (laenge - pos));
!wenn Rückmeldung mit allen Daten angezeigt werden soll, Ausrufezeichen nächste Zeile entfernen
WriteLine("Antwort ohne Vorspann: " # stdout);

!Werte aktualisieren
var programObj = dom.GetObject("Heizungswerte abfragen");
programObj.ProgramExecute();

WriteLine("Hallo Welt!");

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 124/230


Query of the daily averages /A and saving it as a system variable:

!Heizung Abfrage Tagesdurchschnitte V5 2017-10-07

!Raumtemperatur Ist und Trinkwassertemperatur ergänzt


!Variablen reduziert

!als Systemvariablen sind in Homematic angelegt:


!H_Aussentemperatur_24h Zahl 8700
!H_Brennermodulation_24h Zahl 8326
!H_Vorlauftemperatur_24h Zahl 8743
!H_Kesselruecklauftemperatur_24h Zahl 8314

!H_Raumtemperatur_Ist_24h Zahl 8740


!H_Raumtemperatur_Soll_24h ???
!H_Trinkwassertemperatur_24h Zahl 8830

string url='http://192.168.10.13/A';

WriteLine("URL: " # url);

!--timeout=seconds

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -t 30 -qO- '"# url #"'");


dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
!WriteLine("Antwort: " # stdout);

!Beim stdout den ueberfluessigen Vorspann entfernen


integer laenge = stdout.Length();
integer pos = stdout.Find("body");
pos = pos + 10;
stdout = stdout.Substr(pos, (laenge - pos));
!wenn Rückmeldung mit allen Daten angezeigt werden soll, Ausrufezeichen nächste Zeile entfernen
WriteLine("Antwort ohne Vorspann: " # stdout);

!----------------------------------------------------------------------------

string wort = "8700"; !Aussentemperatur


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 20;
string daten = stdout.Substr((pos + laenge +1), 100);
!WriteLine("daten :"#daten);
integer pos = daten.Find(wort);
daten = daten.Substr(0, (pos));
integer zahl = daten.ToFloat();
!Korrektur des angezeigten Wertes auf das Niveau der übrige Thermometer
zahl = zahl - 3.5;
dom.GetObject("H_Aussentemperatur_24h").State(zahl);
WriteLine("H_Aussentemperatur_24h: "#zahl);

! nur für Chart CUxD


!dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("H_Aussentemperatur_24h"#";"#zahl);

!----------------------------------------------------------------------------

string wort = "8326"; !Brennermodulation


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 21;
string daten = stdout.Substr((pos + laenge +1), 100);
!WriteLine("daten :"#daten);
integer pos = daten.Find(wort);
daten = daten.Substr(0, (pos));
integer zahl = daten.ToFloat();
dom.GetObject("H_Brennermodulation_24h").State(zahl);
WriteLine("H_Brennermodulation_24h: "#zahl);

! nur für Chart CUxD


!dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("H_Brennermodulation_24h"#";"#zahl);

!----------------------------------------------------------------------------

string wort = "8743"; !Vorlauftemperatur 1:


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 23;
string daten = stdout.Substr((pos + laenge +1), 100);
!WriteLine("daten :"#daten);
integer pos = daten.Find(wort);
BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 125/230
integer pos = daten.Find(wort);
!daten = daten.Substr(0, (pos));
integer zahl = daten.ToFloat();
dom.GetObject("H_Vorlauftemperatur_24h").State(zahl);
WriteLine("H_Vorlauftemperatur_24h: "#zahl);

! nur für Chart CUxD


!dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("H_Vorlauftemperatur_24h"#";"#zahl);

!----------------------------------------------------------------------------

string wort = "8314"; !Kesselrücklauftemperatur


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 33;
string daten = stdout.Substr((pos + laenge +1), 100);
!WriteLine("daten :"#daten);
integer pos = daten.Find(wort);
daten = daten.Substr(0, (pos));
integer zahl = daten.ToFloat();
dom.GetObject("H_Kesselruecklauftemperatur_24h").State(zahl);
WriteLine("H_Kesselruecklauftemperatur_24h: "#zahl);

! nur für Chart CUxD


!dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("H_Kesselruecklauftemperatur_24h"#";"#zahl);

!----------------------------------------------------------------------------

string wort = "8740"; !Raumtemperatur 1


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 21;
string daten = stdout.Substr((pos + laenge +1), 100);
!WriteLine("daten :"#daten);
integer pos = daten.Find(wort);
daten = daten.Substr(0, (pos));
integer zahl = daten.ToFloat();
dom.GetObject("H_Raumtemperatur_Ist_24h").State(zahl);
WriteLine("H_Raumtemperatur_Ist_24h: "#zahl);

! nur für Chart CUxD


!dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("H_Raumtemperatur_Ist_24h"#";"#zahl);

!----------------------------------------------------------------------------
string wort = "8830"; !Trinkwassertemperatur
integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 28;
string daten = stdout.Substr((pos + laenge +1), 100);
!WriteLine("daten :"#daten);
integer pos = daten.Find(wort);
daten = daten.Substr(0, (pos));
integer zahl = daten.ToFloat();
dom.GetObject("H_Trinkwassertemperatur_24h").State(zahl);
WriteLine("H_Trinkwassertemperatur_24h: "#zahl);

! nur für Chart CUxD


!dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("H_Trinkwassertemperatur_24h"#";"#zahl);

WriteLine("Hallo Welt!");

Query connected DS18B20 temperature sensors and save the output as a system variable:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 126/230


!Temperatursensoren Abfrage CUxD 2017-10-13 (Auszug)

!als Systemvariablen sind in Homematic angelegt:


!28ff99e890160456 T_Aussentemperatur_Nord
!28ffff85901604d6 T_Innentemperatur_Esszimmer

string url='http://192.168.10.13/ipwe.cgi';

!WriteLine("URL: " # url);

!--timeout=seconds

dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -t 30 --timeout=20 -q -O - '"# url #"'");


dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
var stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
!WriteLine("Antwort: " # stdout);

!Beim stdout den ueberfluessigen Vorspann entfernen


integer laenge = stdout.Length();
integer pos = stdout.Find("body");
pos = pos + 10;
stdout = stdout.Substr(pos, (laenge - pos));
!wenn Rückmeldung mit allen Daten angezeigt werden soll, Ausrufezeichen nächste Zeile entfernen
!WriteLine("Antwort ohne Vorspann: " # stdout);

string wort = "28ff99e890160456"; !T_Aussentemperatur_Nord


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 11;
string daten = stdout.Substr((pos + laenge +1), 100);
!WriteLine("daten :"#daten);
integer pos = daten.Find(wort);
daten = daten.Substr(0, (pos));
integer zahl = daten.ToFloat();
if (zahl<>0)
{
WriteLine("T_Aussentemperatur_Nord gemessen: "#zahl);
dom.GetObject("T_Aussentemperatur_Nord").State(zahl);
! nur für Chart CUxD
dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("T_Aussentemperatur_Nord"#";"#zahl);
}

string wort = "28ffff85901604d6"; !T_Innentemperatur_Esszimmer


integer laenge = wort.Length();
!WriteLine("laenge: " # laenge);
integer pos = stdout.Find(wort);
!WriteLine("pos:" #pos);
pos = pos + 11;
string daten = stdout.Substr((pos + laenge +1), 100);
!WriteLine("daten :"#daten);
integer pos = daten.Find(wort);
daten = daten.Substr(0, (pos));
integer zahl = daten.ToFloat();
if (zahl<>0)
{
dom.GetObject("T_Innentemperatur_Esszimmer").State(zahl);
WriteLine("T_Innentemperatur_Esszimmer: "#zahl);
! nur für Chart CUxD
dom.GetObject("CUxD.CUX2801001:1.LOGIT").State("T_Innentemperatur_Esszimmer"#";"#zahl);
}

WriteLine("Hallo Welt!");

8.4 IoBroker
BSB-LAN-User „hacki11“ developed an adapter for ioBroker, which he kindly made available in his GitHub-Repo.
Thanks a lot!

The following examples for ioBroker integration were written by FHEM forum member „Thomas_B".
Thanks a lot!

Query parameters/values and display them:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 127/230


Add a 'Parser' instance under 'ioBroker Admin → Adapter':

Afterwards under 'ioBroker Admin → Instances' open the added Open adapter instance 'parser.0' for configuration:

There click on the '+', then under 'Name' assign the name 'TWW_nominal_setpoint'. Under 'URL or filename' enter the IP of the BSB-LAN adapter
including parameter number. Afterwards click on the Edit' icon.

The input mask opens, in which the following string must be entered under 'RegEx'. string must be entered:

asser\s+-\s+TWW Nennsollwert\:\s+(\d{2}.\d)

After that the input mask can be closed with 'Save'.

The query interval can be set as required, then click on 'Save and close'. Save and close'. The adapter configuration is finished.

Under 'ioBroker Admin → Objects' you will now find the folder 'parser.0' and the data names created under the instance 'parser.0' and their
values:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 128/230


The values can be displayed under VIS by means of a 'Basic-Number' widget with with the following settings:

Widget code to import:

[{"tpl":"tplValueFloat","data":{"oid":"parser.0.TWW_Nennsollwert","visibility-cond":"==","visibility-val":1,"is_comma":"true","fact
or":"1","html_append_singular":" ºC","html_append_plural":" ºC","gestures-offsetX":0,"gestures-offsetY":0,"is_tdp":false,"signals-c
ond-0":"==","signals-val-0":true,"signals-icon-0":"/vis.0/bluefox_ehome/lowbattery.png","signals-icon-size-0":0,"signals-blink-0":fa
lse,"signals-horz-0":0,"signals-vert-0":0,"signals-hide-edit-0":false,"signals-cond-1":"==","signals-val-1":true,"signals-icon-1":"
/vis.0/bluefox_ehome/lowbattery.png","signals-icon-size-1":0,"signals-blink-1":false,"signals-horz-1":0,"signals-vert-1":0,"signals-
hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-icon-2":"/vis.0/bluefox_ehome/lowbattery.png","signals-icon-s
ize-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signals-hide-edit-2":false,"visibility-groups-action":"hide
","lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-position-horz":"ri
ght","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-color":"","lc-color
":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"digits":"1"},"style":{"le
ft":"398px","top":"428px","width":"59px","height":"18px","color":"white","text-align":"right","font-family":"Arial, Helvetica, sans
-serif","font-style":"normal","font-variant":"normal","font-weight":"bold","font-size":"","z-index":"20"},"widgetSet":"basic"}]

Create a button switch:

First create an empty script 'Heating Automatic Switch':

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 129/230


Then create a Blocky script 'Heizung Automatik script' with the following content. (the following code can be imported into Blocky):

on({id: "javascript.0.scriptEnabled.Heizung_Automatik_Schalter", change: "ne"}, function (obj) {


var value = obj.state.val;
var oldValue = obj.oldState.val;
for (var count = 0; count < 5; count++) {
try {
require("request")('http://<IP des BSB-LAN Adapters>/S700=1').on("error", function (e) {console.error(e);});
} catch (e) { console.error(e); }
console.log("request: " + 'http:// ://<IP des BSB-LAN Adapters>//S700=1');
}
});

Then create a 'jqui -- Button State' widget in VIS:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 130/230


In the properties under 'Switch' specify the initially created empty script in the properties:

This allows the 'Automatic heating' operating mode to be switched on.

So that the switch state is visualized by


or accordingly, you have to add the following signal images have to be added to the widget, where the images "on.png" and "off.png" have to
be saved in the directory path.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 131/230


Widget code to import:

[{"tpl":"tplJquiButtonState","data":{"oid":"javascript.0.scriptEnabled.Heizung_Automatik_Schalter(2)","g_fixed":false,"g_visibility"
:false,"g_css_font_text":true,"g_css_background":true,"g_css_shadow_padding":false,"g_css_border":false,"g_gestures":false,"g_signal
s":true,"g_last_change":false,"visibility-cond":"==","visibility-val":1,"visibility-groups-action":"hide","buttontext":"Heizung Auto
matik (AN)","signals-cond-0":"==","signals-val-0":"Betriebsart: 1 - Automatik","signals-icon-0":"/vis.0/main/img/on.png","signals-ic
on-size-0":"33","signals-blink-0":false,"signals-horz-0":"-1","signals-vert-0":"6","signals-hide-edit-0":false,"signals-cond-1":"!="
,"signals-val-1":"Betriebsart: 1 – Automatik","signals-icon-1":"/vis.0/main/img/off.png","signals-icon-size-1":"20","signals-blink-1
":false,"signals-horz-1":"2","signals-vert-1":"17","signals-hide-edit-1":false,"signals-cond-2":"==","signals-val-2":true,"signals-
icon-2":"/vis/signals/lowbattery.png","signals-icon-size-2":0,"signals-blink-2":false,"signals-horz-2":0,"signals-vert-2":0,"signal
s-hide-edit-2":false,"lc-type":"last-change","lc-is-interval":true,"lc-is-moment":false,"lc-format":"","lc-position-vert":"top","lc-
position-horz":"right","lc-offset-vert":0,"lc-offset-horz":0,"lc-font-size":"12px","lc-font-family":"","lc-font-style":"","lc-bkg-c
olor":"","lc-color":"","lc-border-width":"0","lc-border-style":"","lc-border-color":"","lc-border-radius":10,"lc-zindex":0,"value":
"","signals-oid-1":"parser.0.Betriebsart","signals-oid-0":"parser.0.Betriebsart"},"style":{"left":"14px","top":"426px","width":"219p
x","height":"27px","z-index":"1","font-size":"x-small"},"widgetSet":"jqui"}]

The inclusion of the respective values at 'Object ID [0]' and 'Object ID [1]' ('parser.0.mode') is explained below.

Query the mode of the heater:

In the adapter configuration for 'parser.0' create a rule called 'mode', then enter the IP (including the parameter number) of the of the BSB LAN
adapter and open it for editing.

Enter the following syntax under 'RegEx':

(\w+:\s+\d\s+-\s+\w+)

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 132/230


8.5 Loxone
The Loxone examples come from FHEM forum member „Loxonaut".
Thanks a lot!

Parameter query:
Querying parameters is done in Loxone using virtual HTTP inputs and the JSON function of BSB-LAN (URL command /JQ= ). A more detailed
description of the virtual HTTP inputs and the commands can be found in the Loxone documentation and in the Loxone Wiki.

Attention: The development of the JSON function in BSB-LAN is not yet finalized, changes may occur at any time. The configuration must then be
adapted accordingly.

The following example shows the setup using the parameter "8700 outdoor temperature".

To add a virtual HTTP input, the line "Virtual inputs" must first be selected in the "Peripherals" window. Now click on the "Virtual HTTP input"
button that appears at the top:

In the properties you enter the name and the corresponding values (for the query cycle you should choose an appropriate value), the URL of the
BSB-LAN adapter is extended by the command
/JQ=8700

for the query of the outside temperature:

Then add a virtual HTTP input command to the virtual HTTP input:

Here you define what should be read from the JSON export. The JSON export is structured as follows:

{
"8700": {
"name": "Aussentemperatur","value": "16.6",
"unit": "&deg;C",
"desc": "",
"dataType": 0
}
}

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 133/230


By means of Loxone command recognition
value": "\v

the value at "value" of the JSON export is read:

Under "Visualization" in the properties, a designation should be entered for "Category" and "Room" so that the later display in the Loxone app
functions accordingly (here: outdoor area, weather). The now read values of the outdoor temperature sensor can then be displayed in the Loxone
app and the statistics can be visualized via graph.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 134/230


Note:
Setting parameters/values could be possible analogous to the above example with the function "virtual output" and the URL command /JS
(JSON) or via regular URL command /S<x>=<y> (see corresponding chapter), but has not been tested yet.

8.6 IP-Symcon
The BSB-LAN users „sokkederheld" and „Joachim" presented their IPS scripts plus screenshots in the Symcon forum: here and here.
Thanks a lot!

8.7 MQTT, InfluxDB, Telegraf and Grafana


A well documented example by BSB-LAN user „cubase" for the usage of MQTT, InfluxDB, Telegraf and Grafana is available here.
Thanks a lot!

BSB-LAN user Ronald also wrote a well documented example, you can find it here (German language).
Thanks a lot!

8.8 MQTT and FHEM


The following example is written by FHEM forum member „mifh".
Thanks a lot!

The following example script uses the integrated MQTT server of FHEM and is written for a gas fired burner including the calculation of the
heating power. So the last part isn't neccessary for / available within oil fired burners, heat pumps and so on.

Configuration of the MQTT server of FHEM:

define MQTT_TST MQTT2_SERVER 1883 global


define MQTT_2 MQTT <IP-Adresse>:1883

Display heater as a MQTT device in FHEM:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 135/230


define Hzg_Therme MQTT_DEVICE
attr Hzg_Therme IODev MQTT_2
attr Hzg_Therme alias Brötje Heizung
attr Hzg_Therme group Heizung
attr Hzg_Therme room Heizung
attr Hzg_Therme subscribeReading_Kesseltemperatur Zuhause/Heizungsraum/BSB-LAN/8310
attr Hzg_Therme subscribeReading_Ruecklauftemperatur Zuhause/Heizungsraum/BSB-LAN/8314
attr Hzg_Therme subscribeReading_Geblaesedrehzahl Zuhause/Heizungsraum/BSB-LAN/8323
attr Hzg_Therme subscribeReading_Brennermodulation Zuhause/Heizungsraum/BSB-LAN/8326
attr Hzg_Therme subscribeReading_BetriebsstundenStufe1 Zuhause/Heizungsraum/BSB-LAN/8330
attr Hzg_Therme subscribeReading_StartzaehlerBrenner Zuhause/Heizungsraum/BSB-LAN/8331
attr Hzg_Therme subscribeReading_BetriebsstundenHeizbetrieb Zuhause/Heizungsraum/BSB-LAN/8338
attr Hzg_Therme subscribeReading_BetriebsstundenTWW Zuhause/Heizungsraum/BSB-LAN/8339
attr Hzg_Therme subscribeReading_Gesamt_Gasenergie_Heizen Zuhause/Heizungsraum/BSB-LAN/8378
attr Hzg_Therme subscribeReading_Gesamt_Gasenergie_TWW Zuhause/Heizungsraum/BSB-LAN/8379

attr Hzg_Therme subscribeReading_Aussentemperatur Zuhause/Heizungsraum/BSB-LAN/8700


attr Hzg_Therme subscribeReading_DrehzahlHeizkreispumpe Zuhause/Heizungsraum/BSB-LAN/8735

attr Hzg_Therme stateFormat {sprintf("Leistung: %.1f kW",ReadingsVal($name,"Leistung",0))}


attr Hzg_Therme verbose 3 Hzg_Therme

define Hzg_Therme_NF1 notify Hzg_Therme:Geblaesedrehzahl.* {setHzgLeistung()}

The notify uses a perl function in 99_myUtils.pm to create the reading "Leistung":

sub setHzgLeistung{
my $drehzahl=ReadingsVal("Hzg_Therme", "Geblaesedrehzahl",0);
my $leistung;
if ($drehzahl > 0) {
$leistung = ($drehzahl- 1039.1)/383.1; # Heizungspezifische Parameter
}
else {
$leistung = 0;
}
fhem("setreading Hzg_Therme Leistung $leistung");
}

8.9 MQTT2 and FHEM


The following example was written by FHEM forum member „FunkOdyssey".
Thanks a lot!

This example uses the integrated MQTT2 server in FHEM, after the successful configuration the readings are displayed automatically.

Configure the MQTT2 server following the command reference of FHEM:

defmod mqtt2Server MQTT2_SERVER 1883 global


attr mqtt2Server autocreate 1

As soon as you set the IP of the FHEM server in the file BSB_lan_config.h, the MQTT2 device with the readings appears:

defmod MQTT2_BSB_LAN MQTT2_DEVICE BSB_LAN


attr MQTT2_BSB_LAN IODev mqtt2Server
attr MQTT2_BSB_LAN readingList BSB_LAN:BSB/8314:.* Kesselruecklauftemperatur\
BSB_LAN:BSB/8700:.* Aussentemperatur\
BSB_LAN:BSB/8323:.* Geblaesedrehzahl\
BSB_LAN:BSB/8324:.* Brennergeblaesesollwert\
BSB_LAN:BSB/700:.* Betriebsart\
...

*The following example was written by the member "Luposoft" of the FHEM forum. You can see the original post here.
Thanks a lot!

define mqtt2Server MQTT2_SERVER 1883 global

define MQTT2_BSB_LAN MQTT2_DEVICE BSB_LAN

define FileLog_MQTT2 FileLog ./log/%V-%G-MQTT2.log MQTT2_BSB_LAN

This publish output sends the MQTT telegram to the world undirected, without knowing if anyone is listening (a basic principle of MQTT).

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 136/230


set mqtt2Server publish BSB-LAN S5890=0 → Output of the control command (some also need an I instead of the S) and our Arduino listens
exactly to BSB-LAN (at least in the default config).

The corresponding entries in FileLog_MQTT2:


2021-02-03_16:56:28 MQTT2_BSB_LAN MQTT: ACK_S5890=0 → Here BSB-LAN confirms the reception.
2021-02-03_16:56:29 MQTT2_BSB_LAN BSB-LAN_5890: 0 - Kein → This is the output after the query of the heater.

set mqtt2Server publish BSB-LAN 5890 → Simple query.


2021-02-04_13:24:15 MQTT2_BSB_LAN MQTT: ACK_5890 → Here BSB-LAN confirms the reception.
2021-02-04_13:24:16 MQTT2_BSB_LAN BSB-LAN_5890: 1 - Zirkulationspumpe Q4 → This is the output after querying the heater.

8.10 EDOMI
The following example comes from BSB-LAN-User Lutz.
Thanks a lot!

The query of values from BSB-LAN is done by means of the created logic block 19001820.

The module accesses the gateway via the JSON interface of BSB LAN and returns the corresponding values depending on the specified
parameter.

The following input values are to be entered:


E1 = Trigger, not equal to zero
E2 = IP address BSB-LAN gateway
E3 = Parameter, e.g. value 8700 for outdoor temperature
E4 = Log level

As a result EDOMI receives the following values back:


A1 = Name of the parameter, e.g. "Outdoor temperature".
A2 = Value of the parameter, e.g. "10,5".
A3 = Unit of the parameter, e.g. "°C".
A4 = Description of A2, if output as code.
A5 = Concatenation of A1 to A4

The values A1 to A5 can then be further processed via other blocks. In this example, the outdoor temperature is written to an internal
communication object in order to output the contents in the Visu, for example, or the values for the operating time are stored in a data archive in
order to determine running times of the heating system from them later.

8.11 Home Assistant


ATTENTION

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 137/230


ATTENTION

Home Assistant from version 2024.2.0 does not support self-configured (MQTT) entities that use the device name in the name!

BSB-LAN-User herr.vorragend has created a detailed description for the integration into HomeAssistant via MQTT.
Thanks a lot!

The following description shows how BSB-LAN can be integrated into Home Assistant via MQTT and without additional automation workarounds.
This method does not require a REST API and writes configuration changes directly to the heating controller using the available on-board means.

It is advisable to work with Packages at this point. This way all configurations of all domains can be managed and edited in one YAML file.

As follows many different single values can be summarized in a Climate entity.


Thus, one can immediately recognize the current operating mode, the current set temperature as well as the actual temperature. In addition, the
values can also be written back to the therme directly via the graphical user interface.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 138/230


mqtt:
climate:
- name: "BSB-LAN Heizungstherme"
unique_id: bsb_lan_climate_heizungstherme
availability_topic: "BSB/status"
payload_on: 1
payload_off: 0
modes:
- auto
- heat
- cool
- "off"
mode_state_topic: "BSB/700"
mode_state_template: >-
{% set values = { '0 - Schutzbetrieb':'off', '1 - Automatik':'auto', '2 - Reduziert':'cool', '3 - Komfort':'heat'} %}
{{ values[value] if value in values.keys() else 'off' }}
mode_command_topic: "BSB"
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/8740"
current_temperature_template: >-
{% if value == '---' %}
{{ 'None' }}
{% else %}
{{ value }}
{% endif %}
min_temp: 17
max_temp: 24
temp_step: 0.1
temperature_state_topic: "BSB/710"
temperature_command_topic: "BSB"
temperature_command_template: "{{'S710='+ (value| string)}}"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

There are several possibilities for the manual drinking water push. Either via the switch domain or just a button that triggers the DHW push. Since
there is no feedback from the therme, the button is probably the better solution. The switch will never know in which status the drinking water
push is currently.

switch:
- name: "BSB-LAN Manueller TWW-Push"
unique_id: bsb_lan_switch_manueller_tww_push
state_topic: "BSB/10019"
command_topic: "BSB"
payload_on: "S10019=1"
payload_off: "S10019=0"
state_on: "1 - Ein"
state_off: "0 - Aus"
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

button:
- name: BSB-LAN Trinkwasserpush #war in v2.x noch 1603
unique_id: bsb_lan_button_trinkwasserpush
command_topic: "BSB"
payload_press: "S10019=1"
qos: 0
retain: false
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

If you want to use not only the Climate entity, but also Select entities for the operating mode, this is done as follows:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 139/230


select:
- name: BSB-LAN Betriebsart # Heizkreis 1
unique_id: bsb_lan_select_betriebsart
state_topic: "BSB/700"
command_topic: "BSB"
value_template: >
{% set mapping = {0: 'Schutzbetrieb', 1: 'Automatik', 2: 'Reduziert', 3: 'Komfort'} %}
{% set idx = value.split() | first | int %}
{{ mapping[idx] }}
command_template: >
{% set mapping = {'Schutzbetrieb': 0, 'Automatik': 1, 'Reduziert': 2, 'Komfort': 3} %}
S700={{ mapping[value] }}
options:
- Schutzbetrieb
- Automatik
- Reduziert
- Komfort
icon: mdi:list-box
availability_topic: "BSB/status"
entity_category: "config"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

States can be indicated very well via binary sensors:

binary_sensor:
- name: BSB-LAN Kesselpumpe Q1
state_topic: "BSB/8304"
payload_on: "255 - Ein"
payload_off: "---"
unique_id: bsb_lan_kesselpumpe_q1
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Zustand Trinkwasserpumpe


state_topic: "BSB/8820"
payload_on: "255 - Ein"
payload_off: "0 - Aus"
unique_id: bsb_lan_zustand_trinkwasserpumpe
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

The number domains are extremely useful if you want to write numeric values directly back to the Therme via MQTT:

number:
- name: BSB-LAN Heizkreis Komfortsollwert # Heizkreis 1 - Komfortsollwert
unique_id: bsb_lan_heizkreis_komfortsollwert
state_topic: "BSB/710"
command_topic: "BSB"
command_template: "S710={{ value }}"
mode: slider
min: 12
max: 26
step: 0.1
unit_of_measurement: °C
device_class: temperature
icon: mdi:temperature-celsius
availability_topic: "BSB/status"
entity_category: "config"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 140/230


}

- name: BSB-LAN Heizkreis Reduziertsollwert # Heizkreis 1 - Raumtemperatur-Reduziertsollwert


unique_id: bsb_lan_heizkreis_reduziertsollwert
state_topic: "BSB/712"
command_topic: "BSB"
command_template: "S712={{ value }}"
mode: slider
min: 12
max: 26
step: 0.1
unit_of_measurement: °C
device_class: temperature
icon: mdi:temperature-celsius
availability_topic: "BSB/status"
entity_category: "config"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN TWW Nennsollwert # Trinkwassertemperatur-Nennsollwert


unique_id: bsb_lan_tww_nennsollwert
state_topic: "BSB/1610"
command_topic: "BSB"
command_template: "S1610={{ value }}"
mode: slider
min: 40
max: 65
step: 0.5
unit_of_measurement: °C
device_class: temperature
icon: mdi:temperature-celsius
availability_topic: "BSB/status"
entity_category: "config"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN TWW Reduziertsollwert # Trinkwassertemperatur-Reduziertsollwert


unique_id: bsb_lan_tww_reduziertsollwert
state_topic: "BSB/1612"
command_topic: "BSB"
command_template: "S1612={{ value }}"
mode: slider
min: 40
max: 65
step: 0.5
unit_of_measurement: °C
device_class: temperature
icon: mdi:temperature-celsius
availability_topic: "BSB/status"
entity_category: "config"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN TWW Nennsollwertmaximum # Trinkwassertemperatur-Nennsollwertmaximum


unique_id: bsb_lan_tww_nennsollwertmaximum
state_topic: "BSB/1614"
command_topic: "BSB"
command_template: "S1614={{ value }}"
mode: slider
min: 40
max: 65
step: 0.5
unit_of_measurement: °C
device_class: temperature
icon: mdi:temperature-celsius
availability_topic: "BSB/status"
entity_category: "config"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 141/230


}

- name: BSB-LAN Heizkennlinien-Steilheit


unique_id: bsb_lan_heizkennlinien_steilheit
state_topic: "BSB/720"
command_topic: "BSB"
command_template: "S720={{ value }}"
mode: slider
min: 0.1
max: 2.0
step: 0.01
availability_topic: "BSB/status"
entity_category: "config"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Heizkennlinien-Parallelverschiebung


unique_id: bsb_lan_heizkennlinien-parallelverschiebung
state_topic: "BSB/721"
command_topic: "BSB"
command_template: "S721={{ value }}"
mode: slider
min: 0
max: 2
step: 0.1
unit_of_measurement: °C
device_class: temperature
availability_topic: "BSB/status"
entity_category: "config"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

Adding the usual sensors:

sensor:
- name: "BSB-LAN Aussentemperatur"
state_topic: "BSB/8700"
unique_id: bsb_lan_aussentemperatur
unit_of_measurement: °C
device_class: temperature
state_class: measurement
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: "BSB-LAN Aussentemperatur gedaempft"


state_topic: "BSB/8703"
unique_id: bsb_lan_aussentemperatur_gedaempft
unit_of_measurement: °C
device_class: temperature
state_class: measurement
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: "BSB-LAN Außentemperatur gemischt"


state_topic: "BSB/8704"
unique_id: bsb_lan_aussentemperatur_gemischt
unit_of_measurement: °C
device_class: temperature
state_class: measurement
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 142/230


name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Kesseltemperatur-Istwert


state_topic: "BSB/8310"
value_template: >-
{% if value == '---' %}
{{ '0.0' | float }}
{% else %}
{{ value }}
{% endif %}
unique_id: bsb_lan_kesseltemperatur_istwert
unit_of_measurement: °C
device_class: temperature
state_class: measurement
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Kesseltemperatur-Sollwert


state_topic: "BSB/8311"
value_template: >-
{% if value == '---' %}
{{ '0.0' | float }}
{% else %}
{{ value }}
{% endif %}
unique_id: bsb_lan_kesseltemperatur_sollwert
unit_of_measurement: °C
device_class: temperature
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Kesselschaltpunkt


state_topic: "BSB/8312"
value_template: >-
{% if value == '---' %}
{{ '0.0' | float }}
{% else %}
{{ value }}
{% endif %}
unique_id: bsb_lan_kesselschaltpunkt
unit_of_measurement: °C
device_class: temperature
state_class: measurement
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Ruecklauftemperatur-Istwert # Kesselrücklauftemperatur


state_topic: "BSB/8314"
unique_id: bsb_lan_ruecklauftemperatur_istwert
unit_of_measurement: °C
device_class: temperature
state_class: measurement
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Trinkwassertemperatur-Istwert Oben #B3


state_topic: "BSB/8830"
unique_id: bsb_lan_trinkwassertemperatur_istwert_oben
unit_of_measurement: °C
device_class: temperature
state_class: measurement

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 143/230


state_class: measurement
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Trinkwassertemperatur-Sollwert


state_topic: "BSB/8831"
unique_id: bsb_lan_trinkwassertemperatur_sollwert
unit_of_measurement: °C
device_class: temperature
state_class: measurement
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Geblaesedrehzahl


state_topic: "BSB/8323"
unique_id: bsb_lan_geblaesedrehzahl
state_class: measurement
unit_of_measurement: "rpm"
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Brennergeblaesesollwert


state_topic: "BSB/8324"
unit_of_measurement: "rpm"
unique_id: bsb_lan_brennergeblaesesollwert
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Aktuelle Geblaeseansteuerung


state_topic: "BSB/8325"
unique_id: bsb_lan_aktuelle_geblaeseansteuerung
unit_of_measurement: "%"
icon: "mdi:fire"
state_class: measurement
device_class: power_factor
availability_topic: "BSB/status"
value_template: >-
{% if value == '---' %}
{{ '0.0' | float }}
{% else %}
{{ value }}
{% endif %}
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Brennermodulation


state_topic: "BSB/8326"
unique_id: bsb_lan_brennermodulation
unit_of_measurement: "%"
icon: "mdi:fire"
state_class: measurement
device_class: power_factor
availability_topic: "BSB/status"
value_template: >-
{% if value == '---' %}
{{ '0.0' | float }}
{% else %}
{{ value }}
{% endif %}
device:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 144/230


device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Raumtemperatur-Istwert


state_topic: "BSB/8740"
value_template: >-
{% if value == '---' %}
{{ 'None' }}
{% else %}
{{ value }}
{% endif %}
unique_id: bsb_lan_raumtemperatur_istwert
unit_of_measurement: °C
device_class: temperature
state_class: measurement
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Raumtemperatur-Sollwert


state_topic: "BSB/8741"
value_template: >-
{% if value == '---' %}
{{ 'None' }}
{% else %}
{{ value }}
{% endif %}
unique_id: bsb_lan_raumtemperatur_solltwert
unit_of_measurement: °C
device_class: temperature
state_class: measurement
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Raumtemperatur Modell


state_topic: "BSB/8742"
value_template: >-
{% if value == '---' %}
{{ 'None' }}
{% else %}
{{ value }}
{% endif %}
unique_id: bsb_lan_raumtemperatur_modell
unit_of_measurement: °C
device_class: temperature
state_class: measurement
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Vorlauftemperatur-Sollwert


state_topic: "BSB/8744"
value_template: >-
{% if value == '---' %}
{{ '0.0' | float }}
{% else %}
{{ value }}
{% endif %}
unique_id: bsb_lan_vorlauftemperatur_sollwert
unit_of_measurement: °C
device_class: temperature
state_class: measurement
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 145/230


name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Schienenvorlauftemperatur-Istwert


state_topic: "BSB/8950"
unique_id: bsb_lan_schienenvorlauftemperatur_istwert
unit_of_measurement: °C
device_class: temperature
state_class: measurement
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Schienenvorlauftemperatur-Sollwert


state_topic: "BSB/8951"
value_template: >-
{% if value == '---' %}
{{ '0.0' | float }}
{% else %}
{{ value }}
{% endif %}
unique_id: bsb_lan_schienenvorlauftemperatur_sollwert
unit_of_measurement: °C
device_class: temperature
state_class: measurement
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Status Heizkreis


state_topic: "BSB/8000"
value_template: "{{value | regex_findall_index('-[ \t]+(.*)')}}"
unique_id: bsb_lan_status_heizkreis
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Status Trinkwasserbetrieb


state_topic: "BSB/8003"
value_template: "{{value | regex_findall_index('-[ \t]+(.*)')}}"
unique_id: bsb_lan_status_trinkwasserbetrieb
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Status Kessel


state_topic: "BSB/8005"
value_template: "{{value | regex_findall_index('-[ \t]+(.*)')}}"
unique_id: bsb_lan_status_kessel
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Status Brenner


state_topic: "BSB/8009"
value_template: "{{value | regex_findall_index('-[ \t]+(.*)')}}"
unique_id: bsb_lan_status_brenner
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 146/230


name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Drehzahl Kesselpumpe


state_topic: "BSB/8308"
value_template: >-
{% if value == '---' %}
{{ '0.0' | float }}
{% else %}
{{ value }}
{% endif %}
unique_id: bsb_lan_drehzahl_kesselpumpe
state_class: measurement
unit_of_measurement: "%"
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

# ================================
# FEHLERHISTORIE 1
# ================================

- name: BSB-LAN Historie01 DatumZeit


state_topic: "BSB/6800"
unique_id: bsb_lan_historie01_datumzeit
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Historie01 Fehlercode


state_topic: "BSB/6803"
unique_id: bsb_lan_historie01_fehlercode
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Historie01 SW Diagnosecode


state_topic: "BSB/6805"
unique_id: bsb_lan_historie01_sw_diagnosecode
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN Historie01 FA Phase


state_topic: "BSB/6806"
unique_id: bsb_lan_historie01_faphase
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

- name: BSB-LAN SW Diagnosecode


state_topic: "BSB/6705"
unique_id: bsb_lan_sw_diagnosecode
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 147/230


manufacturer: "Github",
}

- name: BSB-LAN Brennerstarts Stufe 1 # Startzähler 1.Stufe


unique_id: bsb_lan_brennerstarts_stufe1
state_topic: "BSB/8331"
availability_topic: "BSB/status"
device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

In addition to the MQTT sensors above, one could still calculate the spread using a template sensor:

template:
- sensor:
- name: bsb_lan_temperaturspreizung
unique_id: bsb_lan_temperaturspreizung
state: "{{ (states('sensor.bsb_lan_kesseltemperatur_istwert') | float(0) - states('sensor.bsb_lan_ruecklauftemperatur_istwer
t') | float(0) ) | round(1) }}"
unit_of_measurement: °C
device_class: temperature

Sidenote:
The following lines were added here for all configurations. This looks unusual and only causes many redunant lines of code. But it has the
advantage that all entities in Home Assistant are merged to one device.

device:
{
identifiers: ["00000002"],
name: "Heizung",
model: "Arduino Due",
manufacturer: "Github",
}

So you can delete it, but then there are only many single entities.
The following screenshots show the display in HomeAssistant.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 148/230


BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 149/230
BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 150/230
BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 151/230
BSB-LAN user Yann wrote a detailed description for HomeAssistant and Mosquitto, you can find it here.
This description is also available in French.
Thanks a lot!

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 152/230


BSB-LAN user tiger42 has described an integration possibility using JSON and MQTT in the HomeAssistant forum.
In addition, he has written an embedding example for this manual, which is shown below.
Thanks a lot!

The following examples demonstrate how it is possible to integrate BSB-LAN into Home Assistant individually by defining sensor and switch
entities by yourself. As always when it comes to Home Assistant, the same applies here: There are many ways to reach your goal, there is no
"one" best solution. Therefore all examples are to be seen as a suggestion for further development.

A comprehensive BSB-LAN dashboard in Home Assistant could look like this, for example:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 153/230


All of the following code snippets must be inserted into the configuration.yaml file unless otherwise specified. If you have split your configuration
and, for example, moved the sensor definitions into a sensors.yaml file, the changes must be made there accordingly of course.

MQTT sensor
Reading out data via MQTT is recommended for all values that change continuously, such as temperature values. The prerequisite for this is, of
course, that you use an MQTT broker and the values to be read out are all published via MQTT.

Example for a sensor, which reads out the supply temperature of the heating circuit:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 154/230


mqtt:
sensor:
- state_topic: "bsb-lan/8310"
name: BSB-LAN Vorlauftemperatur
unit_of_measurement: °C
device_class: temperature

This sensor will appear in Home Assistant under the name sensor.bsb_lan_flow_temperature.

REST sensor & JSON


If you do not want to or cannot use MQTT, values can also be read out using a REST sensor and JSON.

The following sensor definition creates a sensor for reading out various heating parameters that rarely or almost never change (operating mode,
comfort setpoint, etc.). The state (value) of the sensor contains the "SW diagnostic code" in this example, all other values are set as attributes of
the sensor. The sensor makes a request against BSB-LAN every 60 seconds.

sensor:
- platform: rest
name: BSB-LAN Status
resource: "http://<BSB-LAN-IP>/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: 60
value_template: "{{ value_json['6705'].value }}"
json_attributes:
- "700"
- "1600"
- "6705"
- "8000"
- "8003"
- "710"
- "712"
- "720"
- "721"
- "1610"
- "1612"
- "5400"

The sensor appears in Home Assistant with the name sensor.bsb_lan_status.

To make the attributes of this sensor available as separate sensors to be comfortably integrated in the UI, further definitions are necessary.
Shown in the following example using parameters 700 (operating mode) and 1610 (TWW nominal setpoint):

sensor:
- platform: template
sensors:
bsb_lan_betriebsart:
unique_id: 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_at
tr('sensor.bsb_lan_status', '8000')['desc'] }}{% else %}{{ state_attr('sensor.bsb_lan_betriebsart', 'desc') }}{% endif %}"
bsb_lan_tww_nennsollwert:
unique_id: 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

The if queries in the code ensure that the sensors keep their previous value even if the "BSB-LAN Status" sensor is temporarily unavailable (e.g.
when HA is restarting). The above example would create the sensors sensor.bsb_lan_operating_mode and sensor.bsb_lan_tww_setpoint in
Home Assistant.

Setting parameters using REST sensor & JSON


For setting values, it is recommended to first define a general parameterizable RESTful command:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 155/230


rest_command:
bsb_lan_set_parameter:
url: http://<BSB-LAN-IP>/JS
method: POST
username: !secret bsb_lan_user
password: !secret bsb_lan_pass
# parameter "type": 1 = SET (default), 0 = INF
payload: '{"parameter":"{{ parameter }}", "value":"{{ value }}", "type":"{% if type is defined %}{{ type }}{% else %}1{% endif %
}"}'

This creates a service named rest_command.bsb_lan_set_parameter. This service can now be used to set any parameter.

The following example creates a switch that can be used to turn the automatic mode of the heater on and off:

switch:
- platform: template
switches:
bsb_lan_betriebsart_automatik:
friendly_name: BSB-LAN Betriebsart Automatik
value_template: "{{ is_state('sensor.bsb_lan_betriebsart', '1') }}"
turn_on:
service: rest_command.bsb_lan_set_parameter
data:
parameter: 700
value: 1
turn_off:
service: rest_command.bsb_lan_set_parameter
data:
parameter: 700
value: 0

In Home Assistant this switch can now be used as switch.bsb_lan_operating_mode_automatic. If it is activated, the value 1 ("automatic") is set
for parameter 700, deactivating it sets the value 0 ("protection mode"). As you can see, the switch uses the sensor
sensor.bsb_lan_operating_mode defined above to determine its current state (on/off).

The following code creates two automations, which can be used as a basis for an input field for setting the TWW nominal setpoint. The input field
will also show the currently set value of course. Note: The code must be inserted into the automations.yaml file! You must have created the
input field manually in the interface under "Configuration/Helpers" before:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 156/230


Alternatively the same in YAML:

input_number:
bsb_lan_tww_nennsollwert:
name: BSB-LAN TWW Nennsollwert Input
icon: mdi:thermometer
mode: box
min: 20
max: 65
step: 0.5
unit_of_measurement: °C

The file automations.yaml:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 157/230


- id: bsb_lan_set_tww_nennsollwert
alias: BSB-LAN TWW Nennsollwert setzen
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
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(0) }}"
service: input_number.set_value

The first trigger listens to a change in the input field and sets the heater paramater accordingly using the REST command defined above. The
second trigger responds to a change of the parameter coming from the heater and updates the content of the input field accordingly.

BSB-LAN is now an official Home-Assistant integration maintained by Willem-Jan.


Documentation of the integration can be found here.
The initial support is only for basic thermostat support in home-assistant.
Thanks a lot!

The previous solution was expanded by BSB-LAN user Florian for being able to control two controllers and four heating circuits. He
made his solution available in his GitHub Repo.
Thanks a lot!

Attention

The above mentioned integration is currently only compatible with BSB-LAN version 1.0, NOT with the current version! For the integration of
the current BSB-LAN version it is therefore recommended to use the following integration options via MQTT or JSON.

8.12 SmartHomeNG
BSB-LAN-User Thomas wrote a plugin for SmartHomeNG and made it available in his GitHub Repo.
Thanks a lot!

8.13 Node-RED
BSB-LAN user Konrad wrote a module for Node-RED which makes it easy to implement BSB-LAN.
Thanks a lot!

BSB-LAN user n300 has written a "queuing flow" extension for the above-mentioned Node-RED module. This avoids timeouts and/or
connection refuses (ECONNECTREFUSE) caused by simultaneous requests as far as possible, since requests are now processed in
chronological order. The flow and a more detailed description can be found here.
Thanks a lot!

8.14 Data Processing Using Bash Script


BSB-LAN user Karl-Heinz has written two bash scripts that can be used under Linux to read data from the heating controller and
display it graphically using gnuplot.
Thanks a lot!

Karl-Heinz's solution is interesting for those users who do not (want to) use complex home automation software to retrieve data from the heating

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 158/230


controller under Linux and display it graphically. He kindly provides the scripts in his GitHub repo.

8.15 Volkszaehler
BSB-LAN user Michael has written a script to include BSB-LAN data in the Volkszaehler project. He provides the script including a
description in his GitHub repo.
Thanks a lot!

8.16 Homebridge
BSB-LAN user Michael has written a plugin for Homebridge that allows an easy integration of BSB-LAN.
Thanks a lot!

8.17 Jeedom
BSB-LAN-User bernard-dandrea has written a plugin for Jeedom (description in French) that allows an easy integration of BSB-LAN.
Thanks a lot!

Further on to chapter 9
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 159/230


9. Excursus: Reading Out New Parameter Telegrams
Back to TOC
Back to chapter 8

9. Excursus: Reading Out New Parameter Telegrams


If your heating system has parameters which aren't implemented in BSB-LAN yet, you can help us to make BSB-LAN even better. For that you
have to use the serial monitor of the ArduinoIDE and read out the specific telegram / command ID of each parameter including the state or value
which is present at the time you are getting that command ID and the different options (if available). Here are some instructions and explanations
how to do it, please read it completely before you start.

To now read out the telegram / command ID of a new parameter, all you need is to connect your microcontroller to a Laptop/PC via USB while it
is connected to your heating system and follow these steps (BSB only, LPB is similar, but telegram structure is a bit different):

Start the Arduino IDE and turn on the serial monitor.

Enable logging to the serial console and turn on verbose output with URL-Parameter /V1 (if you deactivated the verbose mode in the file
BSB_lan_config.h before) on the microcontroller, e.g. http://192.168.178.88/V1. Alternatively, you can log bus telegrams to SD card by using
(only) logging parameter 30000 (see logging section above) and set variable log_unknown_only to 1 (URL command /LU=1) and follow
logging entries with URL command /D.

On the heating system, switch to the parameter you want to analyze (using the command wheel, arrows or whatever input mode your
heating system has).

Wait for "silence" on the bus and then switch forward one parameter and then back again to the parameter you want. You should now have
something like this on the log:

DSP1->HEIZ QUR 113D305F


DC 8A 00 0B 06 3D 11 30 5F AB EC
HEIZ->DSP1 ANS 113D305F 00 00
DC 80 0A 0D 07 11 3D 30 5F 00 00 03 A1
DSP1->HEIZ QUR 113D3063
DC 8A 00 0B 06 3D 11 30 63 5C 33
HEIZ->DSP1 ANS 113D3063 00 00 16
DC 80 0A 0E 07 11 3D 30 63 00 00 16 AD 0B

The first four lines are from the parameter you switched forward to, the last four lines are from the parameter you want to analyze (doing the
switching back and forth only makes sure that the last message on the bus is really the parameter you are looking for). Instead of DSP1 you
might see RGT1, depending on what device you are using to select the parameter.
Note:
If the parameter you want to read out has different optional setting between which you can choose, you should try to read out the command
ID for each option. For that you (usually) have to change the optional setting and confirm the change by pressing the OK-button. But:
Please only do this if you are sure that these settings are not critical for the function of your heating system or your installation! If you change
the settings, then you also have to write down the specific name for the chosen option where the command ID belongs to. At the end you
should go back to the preset setting. If the parameter you are decoding has a unit like degrees, volt or so, please also write that one down.

Important:
Write down the command ID with the specific name and unit (if available) of the new function. If you also read out the different optional settings
for a new parameter, don't forget to also write it down. In the end you should have a list which exactly shows the specific command ID together
with the name of the parameter, the state or shown value at the time you read it out and (if available) the unit (like degrees or so). The same goes
for the optional settings. Your work will be useless if e.g. you just write down the command ID togehter with the name of the new parameter -
because then we still don't know what the specific command ID means (in terms like on/off etc.).

Further on to chapter 10
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 160/230


10. Excursus: Heating Controllers and Accessories
Back to TOC
Back to chapter 9

10. Excursus: Heating Controllers and Accessories


In general BSB-LAN works with controllers built by SIEMENS which are supported with a BSB and/or a LPB. These controllers are branded and
used by different manufacturers of heating systems (e.g. Broetje, Elco). Please read the manual of your heating system to find out if the controller
offers a BSB and/or LPB.

Clarification:
Whenever I'm talking about the "controller", I mean the so called "BMU" (boiler management unit). That's the device with all the electronics inside,
which controls the whole function of the heating system and which is located inside the housing of the heating system. At this device the sensors,
pumps and the operating and room units are connected to.
The 'operating unit' and the optional room units are the devices located outside at the housing of the heating system, the ones with a display and
some buttons to interact with the BMU/controller.

Note:
Some recent models of Broetje don't have a BSB and are NOT compatible with BSB-LAN. Please see chapter 10.2.3 for further
informations.

10.1 Bus Systems of the Heating Controllers: BSB, LPB, PPS


BSB (Boiler System Bus), LPB (Local Process Bus) and PPS (point to point connection) are different types of bus systems (well, PPS isn't really
a bus though). They aren't compatible between each other, so e.g. you can't connect a BSB unit to a LPB.
Every of the controllers mentioned in this manual which are versions of RVS and LMS (and LMU7x) have at least one BSB port to offer. LPB isn't
available at each type of these controllers, but for the usage of BSB-LAN it's not necessary - just use the BSB.
PPS isn't used anymore at younger controllers, mostly old ones like RVA, RVP or LMU5x/6x are based on this type of connection system.

In the following subchapters I'll give a short overview of the main aspects and differences of these bus/connection systems.

BSB (Boiler System Bus) and LPB (Local Process Bus) are two different bus types, which can be divided into two different usage purposes:

1. The BSB is a 'local' bus, where e.g. parts like the operating unit or a room unit are connected to the controller of the heating system. It offers
'local' access to the controller.

2. The LPB is a bus, which offers access across connected controllers (if the installation was set up right!). Using the LPB you could e.g.
connect two or more heating units to realize a burner cascade or to connect the controller of you heating system with the controller of your
solarthermic system.
If you have an existing installtion like that you could connect the BSB-LPB-LAN adapter to one of the mentioned controllers and would have
access to certain parameters of both controllers. in that case you would have to pay attention to use the correct bus address of the units to
make sure you reach the desired controller.

Even though it's possible to use one adapter in an existing LPB structure with different controllers and query each controller by its own address,
it's advisable to use one adapter-setup (microcontroller + adapter) for each controller if they also offer a BSB port. It's just more comfortable
because you wouldn't have to change the destination address every time you want to query another controller.

10.1.1 BSB
The BSB (Boiler System Bus) is basically a 'local' bus. By 'local' in this case, I mean the specific controller that is used in the heat generator.

The control panel, room units and expansion modules, for example, are connected to the BOD. These devices then have 'local' access to the
controller. If the BSB-LAN setup is connected to the BSB, all bus devices of this controller can be accessed due to the unique addressing.

The BSB is available at the following presented controllers of the TYps RVS, LMS1x as well as LMU7x. If your controller has a BSB and an LPB
connection and no other controller via LPB (e.g. another heat generator in a cascade connection, a solar system controller or similar) and you
only want access to this one controller, then the connection of the BSB-LAN setup to the BSB connection is recommended.

Addressing Because of the bus structure, each participant gets a specific address. The following addresses are already defined:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 161/230


bus address device address device (name in the serial monitor)

0x00 0 controller itself („HEIZ“)

0x03 3 expansion module 1 („EM1“) / mixer-ClipIn AGU

0x04 4 expansion module 2 („EM2“) / mixer-ClipIn AGU

0x06 6 room unit 1 („RGT1: QAA55, QAA75, IDA“)

0x07 7 room unit 2 („RGT2: QAA55, QAA75“)

0x08 8 room unit 3/P and/or OCI700 servicetool („RGT3“)

0x0A 10 operating unit (with display) 1 („DSP1“)

0x0B 11 service unit (QAA75 defined as service unit) („SRVC“)

0x0C 12 operating unit (with display) 2 („DSP2“)

0x0D 13 operating unit (with display) 3 („DSP3“)

0x31 49 OZW672 webserver

0x32 50 (presumably) wireless receiver („FUNK“)

0x36 54 Remocon Net B („REMO")

0x42 66 BSB-LPB-LAN adapter („LAN“)

0x7F 127 broadcast message („INF“)

Note:
The preset bus address 0x42 of the BSB-LPB-LAN adapter is the BSB device address 66. This address is set in the file BSB_LAN_config.h .

10.1.2 LPB
The LPB (Local Process Bus) is an 'overlapping' bus for the use of several connected controllers in a communication-capable network.

Via the LPB, several controllers can be connected to each other and (if the parameters are set correctly) they can share certain values or
influence each other (like sending a telegram for starting the burner).
In this way, for example, a cascade circuit of several burners can be realized or a gas or oil heating system can be 'connected' (in terms of control
technology) with a solar system or a solid fuel boiler.
The correct installation and connection of the individual components and the correct set up of the respective controllers should normally already
be done by the installer of the heating system.

A comprehensive query of values or parameters of two or more controllers in the LPB network via the BSB-LAN setup can be done by adding the
specific address of the bus participant.

The specific technical data, performance characteristics and requirements for corresponding installations and parameterizations with regard to
the device and segment addresses can be found in the respective technical documentation of the manufacturers.
Since the installation, which can be quite complex, is usually already carried out by the respective installer during installation, no further special
features are discussed here.
For the interested user, two documents from "Siemens Building Technologies - Landis & Staefa Division" are recommended:

CE1N2030D Local Process Bus LPB System Basics

CE1N2032D Local Process Bus LPB project planning basics

Addressing
The addressing within the LPB is different than the one within the BSB. Basically there are two 'addresses': an address of a segment and an
address of a unit. Both have different meanings. Because the topic LPB is pretty complex, please search for further informations by yourself.
Especially the documents about the LPB of "Siemens Building Technologies - Landis & Staefa Division" should be regarded as they are the main
sources for these informations.

Note:

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 162/230


The preset bus address 0x42 of the BSB-LPB-LAN adapter is the LPB segment address 4 with device address 3. This address is set in the file
BSB_LAN_config.h . Usually it can be left to the default setting and doesn't need to be changed.

10.1.3 PPS
Right now, the PPS will just be mentioned really short here, because it's only available at old controllers and therefore not relevant for most of the
users. As already said, PPS is not a real bus. It's more a point-to-point communication protocol for the usage of connecting a room unit to a
controller for example. So if you have an old heating system like a Broetje WGB 2N.x and you have (or can connect) a room unit like a QAA50 or
QAA70, then you are using PPS.
The adapter has to be connected the same way the room unit would have to be. Please read the manual of your heating system to find out about
that. In most cases though the two pins of the connectors at the controller are labeled as "A6" and "MD" (or just "M"). In that case, you have to
connect "A6" to "CL+" and "MD"/"M" to "CL-" of the adapter.

Connectors "A6" and "MD" at a Siemens RVA53 controller.

The functionality of this 'bus' is very limited, so you probably only have a dozen of parameters available. In the webinterface of BSB-LAN you
only have access to the category "PPS-Bus".

Note:
If there's already a room unit like QAA70 connected to the controller, BSB-LAN only can read values. If you want BSB-LAN to be able to set
certain values, you would have to disconnect the room unit for the time you want to have the BSB-LAN adapter connected!
Please take notice of the comments at the specific PPS definements in the file BSB_LAN_config.h when using PPS!

Important note for users of the old (retired) setup adapter v2 + Arduino Mega 2560:
Because of the time-critical communication of the PPS, it is recommended to adjust the setup for using the hardware serial. Therefore the
following adaptions have to be done:

The adapter has to be fully assembled.

Only the solder jumer SJ1 has to be set.

The adapter has to be plugged in one pinrow towards the center of the the arduino.

The configuration has to be changed: set the pins within the variable "BSBbus" to 19 (RX) and 18 (TX) (instead of "68,69").

10.2 Detailed Description of the Supported Controllers


The following list of controllers and descriptions should give a short overview of a selection of devices already supported by BSB-LAN and their
rudimentary differences. The different controller-specific availability of special parameters will not further received. It should be noted, however,
that via BSB-LAN several parameters are available which aren't available by the regular operating unit of the heating system itself.

The entire range of functions of the respective controller types is generally available via BSB-LAN. However, this is naturally different with regard
to the available parameters: A controller of the latest generation has more parameters and setting options than a controller of the oldest
generation. However, this does not necessarily make the heating system more inefficient or make it 'outdated' and unusable per se! By using
BSB-LAN, even the oldest supported controller usually can be made a little 'smarter' and integrated into the home automation system though.

Note

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 163/230


Note

In the following, the basic controller series such as LMU, LMS, RVS are roughly introduced. This is only intended to provide a basic
understanding and overview of the different controller series.
As a further subdivision, the two digits after the letter combination are usually also used, e.g. "RVS43.xxx". However, in order to keep the
scope of this chapter manageable, a further, more detailed subdivision of the respective controller series with the complete controller
designation, e.g. "RVS43.222/xyz" or "RVS43.325/xyz" and their specific differences to each other will be omitted as far as possible.
If more detailed, controller-specific information on the respective controller type is required, the relevant instructions of the heating
manufacturer should be consulted. If these are not available or not comprehensive enough, it is recommended to search for the manuals of
the controller manufacturer "Siemens Albatros" by specifying the complete controller identification.

10.2.1 LMx Controllers


The following subchapters are about the LMU and LMS controller types. These seem to be used within gas fired heating systems.

10.2.1.1 LMU Controllers

Controllers of the series LMU54/LMU64 are installed in older systems, they are out of date. These controllers are based upon the OpenTherm
protocol which is incompatible with the BSB-LAN project - they do not have BSB/LPB/PPS. This type of controller can be retrofitted with LPB by
means of a ClipIn module (OCI420) though.

An LMU64 controller with an installed OCI420 ClipIn module.

Using BSB-LAN with these controller models is, according to experience, only possible to a limited extent. More detailed information can be
found in chapter 10.2.4.
For retrofitting LPB with a ClipIn module (OCI420), please see chapter 10.2.6.

Controllers of the series LMU74/LMU75 appear to be the successors of the LMU54/LMU64 controller series and are also no longer installed.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 164/230


An LMU7x controller.

The LMU7x controller type usually just offers BSB connection. If needed, LPB needs to be retrofitted using a ClipIn module (OCI420) (this is not
necessary for using BSB-LAN though!).

The control unit usually is a variant of the Siemens AVS37.294 (so called "ISR Plus" whithin Broetje).

Usually NTC10k (QAD36, QAZ36) and NTC1k (QAC34 = outdoor temperature sensor) are used as sensors.

10.2.1.2 LMS Controllers

Controllers of the series LMS seem to be the successors of the LMU series and thus the current controller generation.

The (functional) difference between the LMS14 and the LMS15 seems to be the "Sitherm Pro" application to optimize the overall combustion
process, which apparently only the LMS15 controller seems to offer.

The LMS controller type usually just offers a BSB connection. If needed, LPB can be retrofitted using a ClipIn module (OCI345) (this is not
necessary for using BSB-LAN though!).

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 165/230


An LMS15 controller.

The operating unit usually is a variant of the Siemens AVS37.294 (so called "ISR Plus" whithin Broetje).

Usually NTC10k (QAD36, QAZ36) and NTC1k (QAC34 = outdoor temperature sensor) are used as sensors.

10.2.2 RVx Controllers


The following subchapters are about the RVA, RVP and RVS (current one) controller types. These seem to be used within oil fired heating
systems, heat pumps and different 'standalone' systems (like solar or zone controllers).

10.2.2.1 RVA and RVP Controllers

Controllers of the type RVA seem to belong to the previous controller generation and, depending on the model, only offer a PPS (RVA53) or a
PPS and a LPB connection (RVA63) but no BSB.
As an (included) operating unit usually a variant of the so called "Eurocontrol" (Broetje) is installed.

An RVA53 controller.

Frontside view: Operating unit of a RVA53 controller.

Controllers of the type RVP seem to be even older than RVA controllers and only offer a PPS interface.

10.2.2.2 RVS Controllers

Controllers of the type RVS seem to be the current controller generation.


They usually offer both a LPB and several BSB connections.
Exceptions seem to be the controllers of the series RVS21, RVS41, RVS51, RVS61 and RVS23:

RVSx1 controllers are used within heat pumps, the RVS21 seems to offer only a BSB connector.

RVS23 controllers are used on a particular Weishaupt model (WTU) and seem to only offer a LPB. These controllers seem to be labeled by
Weishaupt as "WRS-CPU Bx". Further information on this controller model can be found in [chapter 3.5] (chap03.md#35-special-case-
weishaupt-heating-systems).

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 166/230


The operating unit usually is a variant of the Siemens AVS37.294 (so called "ISR Plus" whithin Broetje).

Usually NTC10k (QAD36, QAZ36) and NTC1k (QAC34 = outdoor temperature sensor) are used as sensors.

The following gives a short overview of the main RVS controller types.

RVS21.xxx
The RVS21 is the type of controller which is used in heatpumps. It offers BSB and a pair of connectors for an optional room unit.

An RVS21 controller.

If needed, LPB can be retrofitted using a ClipIn module (OCI345) (this is not necessary for using BSB-LAN though!).

RVS41.xxx
The RVS41 is another type of controller which is used within heat pumps. it offers BSB and LPB and seems to be pretty identical to the RVS43
(at least judging by the look of it).

RVS43.xxx
The RVS43 is the series that is used, for example, in oil condensing boilers, the Broetje pellet boiler SPK, the Broetje cascade controller "ISR-
BCA" and the Broetje heating system manager "ISR-HSM"; some manufacturers (e.g. Boesch) also use this controller type in heat pumps.
However, depending on the respective heat generator or device (e.g. BCA, HSM), there are model-specific differences with regard to the
connections and the scope of functions.

RVS43 series controllers are usually equipped with (at least) one BSB and one LPB connection.
The number of connectors and functions could be expanded with an AVS75 expansion module.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 167/230


An RVS43.222 controller.

The model RVS43.325 is designated by Broetje as a replacement controller and can be used, among others, for oil condensing systems of the
series BOB, SOB, WOB and the pellet heater SPK. In direct comparison to the RVS43.222 shown above from a Broetje SOB C for example, this
controller has additional connections. In case that this controller type should be used as a replacement, it must be parameterized accordingly
depending on the heating model. Further informations about this can be found within the specific replacement manual.

RVS46.xxx
The RVS46 is a small zone controller, which offers one (ZR1) or two (ZR2) connections for a pump/heating circuit. The RVS46 can control
zones/circuits by it's own, or integrated in the system via LPB connection to a main controller. It offers BSB and LPB.

The 'small' zone controller ZR1.

The ZR1/2 is not designed for controlling the whole functionality of e.g. a complete oil fired burner.

RVS51.xxx
The RVS51 is the 'bigger' type of controller which is used in heatpumps. It offers BSB and LPB and seems to be pretty identical to the RVS63 (at
least judging by the look of it).

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 168/230


An RVS51.843 controller.

RVS61.xxx
The RVS61 is the 'bigger' type of controller which is used in heatpumps. It offers BSB and LPB and seems to be pretty identical to the RVS63 (at
least judging by the look of it).

RVS63.xxx
The RVS63 seems to be the 'biggest' controller with the most connectors and functions. Basically he is designed to control systems which are
more complex, e.g. additionally solar thermic systems or an integrated oven. Therefore it is named "Solar System Controller" within Broetje.
The RVS63 can already be built in within complex heating systems or it could optionally added. In that case it comes with an external housing
and must be connected via LPB to the already existing controller. In that case, all the sensors, pumps etc. of the main system have to be
connected to the RVS63, because it becomes the 'main' controller for the whole system.

An RVS63 controller.

The RVS65.xxx seems to be pretty identical to the RVS63 and -until now- was reported only once by a user as being a wall-mounted "Solar
System Controller" from Broetje.

10.2.3 Note: Incompatible Systems from Broetje and Elco


It should be noted that the heating manufacturers introduced new device models to the market. According to current knowledge this type of
controller is NOT compatible with BSB-LAN.

Within Broetje these seem to be the heating system series

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 169/230


WGB-K, WGB 14.1/22.1/28.1/38.1 (gas fired),

WHC, WHS, WLC, WLS (gas fired),

BOK (oil fired),

BLW Split-P, BLW Split C and BLW Split-K C (heat pump).

Within Elco it seems to be the heating system series "Thision Mini".

These systems seem to have 'IWR CAN'-based controllers built in (at the heater unit "IWR Alpha", room unit "IWR IDA"), which have neither a
LPB nor a BSB.

The following image of a WLC24 board shows the existing connections.

Connectors of the new controller model at a Broetje WLC24 - this controller is incompatible with BSB-LAN!

In addition to a service socket (probably IWR CAN) there are not further documented 'L-Bus' and 'R-Bus'.
At the 'R-bus' (room unit bus) either a room thermostat (on / off) or the new 'smart' room unit "Broetje IDA" can be connected.

WATCH OUT:
At none of these connectors the BSB-LPB-LAN adapter can be connected!

10.2.4 Note: Special Case LMU54/LMU64 Controllers


LMU54 / LMU64 controllers are based on OpenTherm, which has different bus specifications and also a different communication protocol.
Therefore, OpenTherm is not compatible with BSB-LAN.
However, often there is a possibility to connect this controller type anyway: as with the BSB controllers LMU7x and LMS1x, it is possible to retrofit
a LPB by means of a so-called ClipIn module (OCI420). At this turn, the adapter can be connected.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 170/230


An LMU64 controller with an installed OCI420 ClipIn module.

However, the functionality of this type of controller (even when using BSB-LAN) is relatively limited and also dependent to a certain extent on the
software version of the controller (tested with LMU64, SW v2.08 vs. SW v3.0 vs SW v3.03): controllers with SW from v3.0 seem to offer more
functions (controllable via BSB-LAN) than controllers with SW <v3.0. In particular, the two setpoint temperature parameters 709 and 711 should
be mentioned here. On their basis the burner behavior could be determined to a certain extent - these can only be used or changed with SW
from v3.0. (Note: There is still an attempt if the burner behavior can be satisfactorily influenced by relays on another contact, but up to now we
didn't find a solution for that.)

However, according to current knowledge, parameters such as outside temperature, boiler temperature, DHW temperature, flow temperature,
etc. can be accessed within all mentioned software versions.

To be fair, it must be said here that the additional financial expense for purchasing an OCI420 LPB-ClipIn module may not be 'worthwhile'.
However, this depends on the pursued goal. If you only want to log temperatures to get a rough overview of the actual state of the heating
system, a more reasonable solution with a corresponding DS18B20 temperature sensor installation would be sufficient. If you want to be able to
e.g. query the error log of the controller, then you'll need the additional OCI420+BSB-LAN setup.
However, it has to be said clearly again that 'controlling' of the beahviour of the burner is only possible in a very limited way (if it's possible at all).

Hints for connection and configuration of an OCI420-ClipIn are given in chapter 10.2.6.

The following is an example of a complete query of an LMU64 with SW v3.03 (the 'latest' version with the most parameters available) - this gives
you an impression of what can be retrieved via BSB-LAN at best.

1 Uhrzeit und Datum - Uhrzeit: 12:30:55


2 Uhrzeit und Datum - Tag/Monat: 24.01.
3 Uhrzeit und Datum - Jahr: 2022
70 Bedieneinheit - Geräte-Version Bedienteil: 30.3
701 Heizkreis 1 - Präsenztaste (temporäre Abwesenheit): ---
709 Heizkreis 1 - Komfortsollwert Minimum: 10.0 °C
711 Heizkreis 1 - Komfortsollwert Maximum: 30.0 °C
720 Heizkreis 1 - Kennlinie Steilheit: 18
721 Heizkreis 1 - Kennlinie Verschiebung: 0.0 °C
730 Heizkreis 1 - Sommer-/ Winterheizgrenze: 21 °C
734 Heizkreis 1 - Raumsollabsenkung mit Schaltuhr: 10.0 °C
781 Heizkreis 1 - Schnellabsenkung Faktor: 4
850 Heizkreis 1 - Estrichfunktion: 0 - Aus
884 Heizkreis 1 - Drehzahlstufe Auslegungspunkt: 17
885 Heizkreis 1 - Pumpe-PWM Minimum: 41 %
886 Heizkreis 1 - Norm Außentemperatur: -20 °C
887 Heizkreis 1 - Vorlaufsoll Norm Außentemperatur: 72.0 °C
888 Heizkreis 1 - dt Überhöhungsfaktor: 25.0 %
889 Heizkreis 1 - Filterzeitkonstant Drehzahlregler: 99 %
891 Heizkreis 1 - dT Vorhaltezeit Tv: 0 s
892 Heizkreis 1 - dT Nachstellzeit Tv: 50 s
893 Heizkreis 1 - dT Abtastfaktor: 10
894 Heizkreis 1 - dT Spreizung Norm Außentemperatur: 20.0 °C
BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 171/230
894 Heizkreis 1 - dT Spreizung Norm Außentemperatur: 20.0 °C
895 Heizkreis 1 - dT Spreizung Maximum: 20.0 °C
1001 Heizkreis 2 - Präsenztaste (temporäre Abwesenheit): ---
1020 Heizkreis 2 - Kennlinie Steilheit: 14
1021 Heizkreis 2 - Kennlinie Verschiebung: 0.0 °C
1130 Heizkreis 2 - Mischerüberhöhung: 10.0 °C
1134 Heizkreis 2 - Antrieb Laufzeit: 150 s
1150 Heizkreis 2 - Estrichfunktion: 0 - Aus
1301 Heizkreis 3/P - Präsenztaste (temporäre Abwesenheit: ---
1603 Trinkwasser - Manueller TWW-Push: Aus
1614 Trinkwasser - TWW Nennsollwert Maximum: 2.2 °C
1615 Trinkwasser - TWW Reduziertsollwert Minimum: 0.3 °C
2210 Kessel - Sollwert Minimum: 20.0 °C
2212 Kessel - Sollwert Maximum: °C 000084 - decoding error
2215 Kessel - Max. Regeldifferenz ohne Abbruch der Mindestpause (°K): 60.0 °C
2250 Kessel - Pumpennachlaufzeit: 10 min
2440 Kessel - Gebläse-PWM Hz Maximum: 70 %
2441 Kessel - Gebläsedrehzahl Hz Maximum: 5400 U/min
2442 Kessel - Gebläse-PWM Reglerverzögerung: 19 %
2443 Kessel - Gebläse-PWM Startwert DLH: 40 %
2444 Kessel - Leistung Minimum: 4.0 kW
2445 Kessel - Nennleistung Kessel: 15.0 kW
2451 Kessel - Brennerpausenzeit Minimum: 120 s
2452 Kessel - Schaltdifferenz Brennerpause: 30.0 °C
2453 Kessel - Reglerverzögerung Dauer: 60 s
2454 Kessel - Schaltdifferenz ein HK: 4.0 °C
2455 Kessel - Schaltdifferenz aus Min HK: 5.0 °C
2456 Kessel - Schaltdifferenz aus Max HK: 7.0 °C
2458 Kessel - Einschwingzeit TWW Max: 3 min
2459 Kessel - Sperrzeit dynamische Schaltdifferenz: 0 s
2471 Kessel - Pumpennachlaufzeit HK: 10 min
2472 Kessel - Pumpennachlauftemperatur TWW: 72.0 °C
2473 Kessel - Abgastemperatur Leistungsreduktion: 80 °C
2521 Kessel - Frostschutz Einschalttemperatur: 5.0 °C
2522 Kessel - Frostschutz Ausschalttemperatur: 10.0 °C
2547 Kessel - Abtastintervall DLH: 0.2 s
2730 Sitherm Pro - Ionisationsstrom: 131.80 µA
2792 Wärmepumpe - Pumpendrehzahl Minimum: 41 %
3810 Solar - Temperaturdifferenz ein: 8.0 °C
3811 Solar - Temperaturdifferenz aus: 4.0 °C
3812 Solar - Ladetemperatur Min TWW-Speicher: 30.0 °C
3831 Solar - Mindestlaufzeit Kollektorpumpe: 60 s
3840 Solar - Kollektortemperatur Frostschutz: 0.0 °C
3850 Solar - Kollektorüberhitzschutz: 120.0 °C
5019 Trinkwasserspeicher - TWW Nachladeüberhöhung Schichtenspeicher: 5.0 °C
5020 Trinkwasserspeicher - TWW Vorlaufsollwertüberhöhung: 18.0 °C
5050 Trinkwasserspeicher - TWW Ladetemperatur Maximum: 80.0 °C
5055 Trinkwasserspeicher - TWW Rückkühltemperatur: 80.0 °C
5100 Trinkwasserspeicher - TWW Pumpe-PWM Durchladung: 18 %
5126 Trinkwasserspeicher - Mischer Nachstellzeit Tn: 100 s
5400 Trinkwasser Durchlauferhitzer - Komfortsollwert: 45.0 °C
5420 Trinkwasser Durchlauferhitzer - Vorlauf-Sollwertüberhöhung: °C 0024 - decoding error
5430 Trinkwasser Durchlauferhitzer - Einschaltdifferenz im BW-Betrieb (Fühler 1): 4.0 °C
5431 Trinkwasser Durchlauferhitzer - Min. Ausschaltdifferenz im BW-Betrieb (Fühler 1): 2.0 °C
5450 Trinkwasser Durchlauferhitzer - Schwelle zum Beenden einer BW-Zapfung bei DLH: 0.20313 K/s
5451 Trinkwasser Durchlauferhitzer - Schwelle für Bw-Zapfung bei DLH in Komfort: -0.20313 K/s
5452 Trinkwasser Durchlauferhitzer - Schwelle für Bw-Zapfung bei Dlh in Heizbetrieb: -0.29688 K/s
5453 Trinkwasser Durchlauferhitzer - Sollwertkorrektur bei Komfortregelung mit 40°C (°K): 0.0 °C
5454 Trinkwasser Durchlauferhitzer - Sollwertkorrektur bei Komfortregelung mit 60°C (°K): 0.0 °C
5455 Trinkwasser Durchlauferhitzer - Sollwertkorrektur bei Auslaufregelung mit 40°C (°K): 0.0 °C
5456 Trinkwasser Durchlauferhitzer - Sollwertkorrektur bei Auslaufregelung mit 60°C (°K): 0.0 °C
5480 Trinkwasser Durchlauferhitzer - Komfortzeit ohne Hz-Anforderung: min 000000 - unknown type
5481 Trinkwasser Durchlauferhitzer - Komfortzeit mit Hz-Anforderung: 0 min
5482 Trinkwasser Durchlauferhitzer - Zeit TWW-FlowSwitch geschlossen: 0 s
5483 Trinkwasser Durchlauferhitzer - Zeit TWW-Komfort FlowSwitch geschlossen: 0 s
5486 Trinkwasser Durchlauferhitzer - Reglerverzögerung bei Takten in DLH Auslaufbetrieb: 0 s
5487 Trinkwasser Durchlauferhitzer - Pumpennachlauf Komfort in Minuten: 255 min
5488 Trinkwasser Durchlauferhitzer - Pumpennachlauf Komfort in Sekunden: s 0000000000 - decoding error
5701 Konfiguration - Hydraulisches Schema: 58
5732 Konfiguration - TWW Pumpenpause Umsch UV: 4 s
5733 Konfiguration - TWW Pumpenpause Verzögerung: 1 s
5761 Konfiguration - Zubringerpumpe Q8 Bit 0-3: 00000000 Zonen mit ZubringerpumpeHK1 mit ZubringerpumpeHK2 mit ZubringerpumpeTWW
mit Zubringerpumpe
5920 Konfiguration - Programmierbarer Ausgang K2: 0 - Default, Keine Funktion
5922 Konfiguration - Relaisausgang 1 RelCl: 0 - Default, Keine Funktion
5923 Konfiguration - Relaisausgang 2 RelCl: 0 - Default, Keine Funktion
5924 Konfiguration - Relaisausgang 3 RelCl: 0 - Default, Keine Funktion
5926 Konfiguration - Relaisausgang 1 SolCl: 0 - Default, Keine Funktion
5927 Konfiguration - Relaisausgang 2 SolCl: 0 - Default, Keine Funktion
5928 Konfiguration - Relaisausgang 3 SolCl: 0 - Default, Keine Funktion
5950 Konfiguration - Funktion Eingang H1: 0 - Default
5973 Konfiguration - Funktion Eingang RelCl: 0 - Keine Funktion
5975 Konfiguration - Externer Vorlaufsollwert Maximum: 100.0 °C
5976 Konfiguration - Externe Leistungsvorgabe Schwelle: 5 %
5978 Konfiguration - Funktion Eingang SolCl: 0 - kein
6089 Konfiguration - Mod Pumpe Drehzahlstufen: 30
6092 Konfiguration - Mod Pumpe PWM: 3 %
6093 Konfiguration - Mod Pumpe PWM Max: 85 %

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 172/230


6093 Konfiguration - Mod Pumpe PWM Max: 85 %
6127 Konfiguration - Pumpen/Ventilkick Dauer: 5 s
6140 Konfiguration - Wasserdruck Maximum: 2.5 bar
6141 Konfiguration - Wasserdruck Minimum: 0.7 bar
6143 Konfiguration - Wasserdruckschwelle für Kessel und Pumpe aus: 0.5 bar
6144 Konfiguration - Schaltdifferenz Wasserdruck: 0.3 bar
6146 Konfiguration - Druckwert 3.5V: 0.0 bar
6220 Konfiguration - Software-Version: 30.3
6222 Konfiguration - Gerätebetriebsstunden: 19042 h
6223 Konfiguration - Bisher unbekannte Geräteabfrage: 003A - decoding error
6224 Konfiguration - Geräte-Identifikation: LMU54/64
6225 Konfiguration - Gerätefamilie: 64
6226 Konfiguration - Gerätevariante: 100
6227 Konfiguration - Objektverzeichnis-Version: 202.0
6229 Konfiguration - EEPROM-Version: 15.0
6230 Konfiguration - KonfigRg0 Bit 0-7: 00100011 Fühlerunterbruch Rücklauffühler unterdrückenFühlerunterbruch Rücklauffühler ausg
ebenFühlerunterbruch Trinkwasserfühler unterdrückenFühlerunterbruch Trinkwasserfühler ausgebenFühlerunterbruch Abgastemperaturfühler
unterdrückenFühlerunterbruch Abgastemperaturfühler ausgebenFühlerunterbruch Außentemperaturfühler unterdrückenFühlerunterbruch Auße
ntemperaturfühler ausgebenFühlerunterbruch Wasserdruckfühler unterdrückenFühlerunterbruch Wasserdruckfühler ausgebenFühlerunterbruch
Vorlauffühler unterdrückenFühlerunterbruch Vorlauffühler ausgebenFühlerunterbruch Fühler am ClipIn unterdrückenFühlerunterbruch Füh
ler am ClipIn ausgeben
6240 Konfiguration - KonfigRg1 Bit 0-7: 00110100 Vorrang Trinkwasser: absolutVorrang Trinkwasser: gleitendVorrang Trinkwasser: ke
inKlemmenbelegung X10-02: RTKlemmenbelegung X10-02: SchaltuhrKlemmenbelegung X10-01: RTKlemmenbelegung X10-01: SchaltuhrAnlagenfrosts
chutz ausAnlagenfrostschutz einWirkung Schaltuhr an X10-01: HeizkreisWirkung Schaltuhr an X10-01: TWWBetriebsart des Heizkreises bei
Modemfunktion: StandbyBetriebsart des Heizkreises bei Modemfunktion: Reduziert
6250 Konfiguration - KonfigRg2 Bit 0-7: 10000000 Pumpennachlauf TWW in den HeizkreisPumpennachlauf TWW in den TWW-WärmetauscherKo
mforttemperaturniveau wie AuslauftemperaturKomforttemperaturniveau wie BereitschaftstemperaturKomfort PID Regelungsfühler: Kesselvor
laufKomfort PID Regelungsfühler: TWW-FühlerKomfort PID Regelungsfühler: KesselrücklaufFühleranordnung Schichtenspeicher SSP: KVFFühl
eranordnung Schichtenspeicher SSP: KRF, nicht bei SSPFühleranordnung Schichtenspeicher SSP: KRF, nur SSP
6270 Konfiguration - KonfigRg4 Bit 0-7: 01000000 Zubringerfunktion Q8: ausZubringerfunktion Q8: einGebäudebauweise: leichtGebäude
bauweise: schwerAnschlussklemme TW-Thermostat: Fühler an X10/TWFAnschlussklemme TW-Thermostat: Thermostat an X10/TWFKonfiguration 3-
Wege-Ventil: keinKonfiguration 3-Wege-Ventil: MagnetventilKonfiguration 3-Wege-Ventil: MotorventilKonfiguration 3-Wege-Ventil: Motor
ventil invers
6280 Konfiguration - KonfigRg5 Bit 0-7: 00000111 Wassermangelsicherung Strömungswächter->StörstellungWassermangelsicherung Strömu
ngswächter->StartverhinderungWassermangelsicherung Wasserdruckwächter->StörstellungWassermangelsicherung Wasserdruckwächter->Startve
rhinderungWassermangelsicherung Drehzahlbegrenzung ausWassermangelsicherung Drehzahlbegrenzung einBits 3-7: Grundeinstellung; nicht
verändern!
6290 Konfiguration - KonfigRg6 Bit 0-7: 11100000 Initialisierung ISR: Sofortige Übernahme der Stellgröße nach FreigabeInitialisie
rung ISR: Stoßfreier Übergang nach FreigabeVerriegelung Fremd-Room Units: ausVerriegelung Fremd-Room Units: einQuelle BW-Sollwert: R
UQuelle BW-Sollwert: HMISperrsignalberechnung deaktiviertSperrsignalberechnung aktiviertSchnelle Wechsel der Drehzahlgrenzen: Normal
e AbarbeitungSchnelle Wechsel der Drehzahlgrenzen: BeschleunigtInitialisierung ISR: Nur bei BetriebsartwechselInitialisierung ISR: I
mmer bei BrennerstartPWM-Gebläserampen: ausPWM-Gebläserampen: ein
6300 Konfiguration - KonfigRg7 Bit 0-7: 00001111 Heizkreispumpe: stufigHeizkreispumpe: modulierendDelta-T-Begrenzung: ausDelta-T-
Begrenzung: einDelta-T-Überwachung: ausDelta-T-Überwachung: einAnlagenvolumen: kleinAnlagenvolumen: mittelAnlagenvolumen: großDelta-
T-Überwachung im Reduziert-Betrieb: ausDelta-T-Überwachung im Reduziert-Betrieb: einReglerverzögerung: nur im Heizbetrieb aktivRegle
rverzögerung: in allen Betriebsarten aktivPumpe Q1 Modulation in Systemen 51,54,55,67,70,71: ausPumpe Q1 Modulation in Systemen 51,5
4,55,67,70,71: ein
6310 Konfiguration - KonfigRg8 Bit 0-7: 00000000 Sekundärtauscher: PlattenwärmetauscherSekundärtauscher: Wendelwärmetauscher prim
ärseitigSekundärtauscher: Wendelwärmetauscher sekundärseitig1. Maximum Durchlauferhitzer-Regelung: auswerten1. Maximum Durchlauferhi
tzer-Regelung: ignorierenDurchlauferhitzer Anfrage über DLH1 Sensor oder Flow-SwitchDurchlauferhitzer Anfrage nur über Flow-SwitchPo
sition von Verteilventil nach Durchlauferhitzer: LetztePosition von Verteilventil nach Durchlauferhitzer: Heizposition
6330 Konfiguration - KonfigRg10 Bit 0-7: 00000000 Kesselpumpe bei Brennersperre: keine AbschaltungKesselpumpe bei Brennersperre:
AbschaltungBrennersperre nur bei HeizanforderungBrennersperre nur bei Heiz- und TWW-AnforderungDurchlauferhitzertaktschutz durch Tem
peraturerhöhung: ausDurchlauferhitzertaktschutz durch Temperaturerhöhung: einPosition des TWW-Speichers: vor hydraulischer WeichePos
ition des TWW-Speichers: nach hydraulischer WeicheZubringerpumpe bei Brennersperre: keine AbschaltungZubringerpumpe bei Brennersperr
e: AbschaltungGebläseabschaltung bei Heizanforderung: FreigabeGebläseabschaltung bei Heizanforderung: keine FreigabePumpennachlauf T
WW bei weiteren Wärmeanforderungen: UnterdrückenPumpennachlauf TWW bei weiteren Wärmeanforderungen: Durchführen
6343 Konfiguration - Bisher unbekannte Geräteabfrage: 0001260096 - unknown type
6344 Konfiguration - Hersteller-ID (letzten vier Bytes): 1012140155
1012140155
6600 LPB-System - Geräteadresse: 00.01
6604 LPB-System - Busspeisung Funktion: 1 - Automatisch
6605 LPB-System - Busspeisung Status: 255 - Ein
6610 LPB-System - Anzeige Systemmeldungen: 255 - Ja
6625 LPB-System - Trinkwasserzuordnung: 0 - Lokale Heizkreise
6640 LPB-System - Uhrbetrieb: 2 - Slave mit Fernverstellung
6650 LPB-System - Außentemperatur Lieferant: 00.01
6699 LPB-System - Software Version Einschub: 0.7
6701 Fehler - Unknown command: 0000 - unknown type
6705 Fehler - SW Diagnosecode: 0 - not found
6800 Fehler - Historie 1: 5
6803 Fehler - Historie 1 Fehlermeldung: 153 - Entriegelungstaste wurde betätigt
6805 Fehler - SW Diagnosecode 1: 259
6806 Fehler - FA Phase 1: 0 - Standby
6810 Fehler - Historie 2: 4
6813 Fehler - Historie 2: 133 - Keine Flammenbildung nach Ablauf der Sicherheitszeit
6815 Fehler - SW Diagnosecode 2: 102 - Uhrzeitmaster ohne Gangreserve (LPB)
6816 Fehler - FA Phase 2: 14 - not found
6820 Fehler - Historie 3: 0
6823 Fehler - Historie 3 Fehlermeldung: 0 - kein Fehler
6825 Fehler - SW Diagnosecode 3: 0 - not found
6826 Fehler - FA Phase 3: 0 - Standby
6830 Fehler - Historie 4: 0
6833 Fehler - Historie 4 Fehlermeldung: 0 - kein Fehler
6835 Fehler - SW Diagnosecode 4: 0 - not found
6836 Fehler - FA Phase 4: 0 - Standby
6840 Fehler - Historie 5: 0
6843 Fehler - Historie 5 Fehlermeldung: 0 - kein Fehler
6845 Fehler - SW Diagnosecode 5: 0 - not found
BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 173/230
6845 Fehler - SW Diagnosecode 5: 0 - not found
6846 Fehler - FA Phase 5: 0 - Standby
7001 Wartung/Sonderbetrieb - Meldung: 0
7010 Wartung/Sonderbetrieb - Quittierung Meldung: 1 - Ein
7011 Wartung/Sonderbetrieb - Repetitionszeit Meldung: 14 Tage
7040 Wartung/Sonderbetrieb - Repetitionszeit Meldung: h 0001499700 - decoding error
7041 Wartung/Sonderbetrieb - Brennerstunden seit Wartung: h 0002255100 - decoding error
7042 Wartung/Sonderbetrieb - Brennerstarts Intervall: 0
7043 Wartung/Sonderbetrieb - Brennerstarts seit Wartung: 400
7044 Wartung/Sonderbetrieb - Wartungsintervall: 6000 h
7045 Wartung/Sonderbetrieb - Zeit seit Wartung: 0 Monate
7050 Wartung/Sonderbetrieb - Gebläsedrehzahl Ion Strom: 4000 U/min
7051 Wartung/Sonderbetrieb - Meldung Ion Strom: 0
7700 Ein-/Ausgangstest - Relaistest: 0 - Kein Test
8310 Diagnose Erzeuger - Kesseltemperatur: 76.0 °C
8311 Diagnose Erzeuger - Kesselsollwert: 2.3 °C
8314 Diagnose Erzeuger - Kesselrücklauftemperatur Ist: 57.5 °C
8321 Diagnose Erzeuger - Aktuelle Regeldifferenz: 4.4 °C
8324 Diagnose Erzeuger - Brennergebläsesollwert: 0 U/min
8325 Diagnose Erzeuger - PWM Drehzahlregler (Proz): 0 %
8326 Diagnose Erzeuger - Brennermodulation: 0 %
8329 Diagnose Erzeuger - Ionisationsstrom: 0.00 µA
8336 Diagnose Erzeuger - Betriebsstunden Brenner: 19042 h
8337 Diagnose Erzeuger - Startzähler Brenner: 3467
8338 Diagnose Erzeuger - Betriebsstunden Heizbetrieb: 57508 h
8339 Diagnose Erzeuger - Betriebsstunden TWW: 2680 h
8340 Diagnose Erzeuger - Betriebsstunden externe Wärmeanforderung: 0 h
8530 Diagnose Erzeuger - Betriebsstunden Solarertrag: 0 h
8700 Diagnose Verbraucher - Außentemperatur: 6.5 °C
8705 Diagnose Verbraucher - Außentemperatur LPB: --- °C
8741 Diagnose Verbraucher - Raumsollwert 1: 30.0 °C
8750 Diagnose Verbraucher - Mod Pumpe Sollwert: 60 %
8773 Diagnose Verbraucher - Vorlauftemperatur 2: 36.0 °C
8830 Diagnose Verbraucher - Trinkwassertemperatur 1: --- °C
8831 Diagnose Verbraucher - Trinkwassersollwert: 55.0 °C
8832 Diagnose Verbraucher - Trinkwassertemperatur 2: 52.0 °C
8950 Diagnose Verbraucher - Schienenvorlauftemperatur: 77.5 °C
8952 Diagnose Verbraucher - Schienenrücklauftemperatur: 58.0 °C
9500 Feuerungsautomat - Vorlüftzeit: 3.0 s
9502 Feuerungsautomat - Gebläseansteuerung Vorlüftung: 40 %
9504 Feuerungsautomat - Solldrehzahl Vorlüftung: 3500 U/min
9510 Feuerungsautomat - Gebläseansteuerung Zündung: 40 %
9512 Feuerungsautomat - Solldrehzahl Zündung: 3500 U/min
9520 Feuerungsautomat - Gebläseansteuerung Betrieb. Min: 14 %
9522 Feuerungsautomat - Gebläseansteuerung Betrieb. Max: 70 %
9524 Feuerungsautomat - Solldrehzahl Betrieb Min: 1450 U/min
9527 Feuerungsautomat - Solldrehzahl Betrieb Max: 5400 U/min
9540 Feuerungsautomat - Nachlüftzeit: 2.0 s
9560 Feuerungsautomat - Gebläseansteuerung Durchladung: 24.0 %
9563 Feuerungsautomat - Solldrehzahl Durchladung: 3950 U/min

10.2.5 Note: Special Case Weishaupt Heating Systems


Some Weishaupt devices (see list of successfully tested devices: Weishaupt WTU with WRS-CPU control unit) have RVS23 controllers installed.
This controller type has a LPB on which the existing installation of Weishaupt systems is already based: room units, operating units and extension
modules are already connected to each other via LPB. The adapter can also be connected to this LPB, but it must be correctly integrated into the
existing LPB installation. In general, this isn't a problem with the default LPB address of the adapter (segment 4, device address 3), but it should
be checked again if there are any communication problems.

The Weishaupt devices also seem to have a service socket in addition to the regular operating unit, with two of the four pins provided and led
out. According to the statement of a Weishaupt user (Thanks to BSB-LAN user Philippe!), the upper one of the two pins seems to be MB and the
lower one seems to be DB.

10.2.6 Note: Retrofitting an LPB by Using an OCI420 ClipIn


If an OCI420 should be connected and used with a LMU controller (LMU64/LMU7x), the installation and the connection must be made in
accordance with the respective operating instructions.

There are, however, a few key points that usually can't be found in the operating instructions although they are necessary for a successful
operation. This mainly concerns the settings that have to be made for the LPB power supply. Furthermore, the LPB device address 1 with
segment address 0 must be set and the setting as the time master has to be made.
As always, the following information comes without any guarantee!

If you follow the instructions on the OCI420, you will most likely encounter error 81, which means "short circuit in the LPB bus or no LPB bus
power supply". If the OCI420 has been connected correctly, the LPB bus power must be activated in this case. The parameter is "LPBKonfig0".

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 174/230


The following settings are described for controllers of type LMU64. Except for the parameter numbers, the settings of the bits are identical for
other LMx controllers.
For the LMU64, the relevant parameter has the number 604 (for LMU74: parameter number 6006). Here are eight bits (604.0 to 604.7) available
to be set as follows (where "0" = OFF and "1" = ON):

604.0 = 0 → time master


604.1 = 1 → time master
604.2 = 1 → distributed bus supply AUTOMATIC
604.3 = 1 → status LPB bus supply: 1 = active
604.4 = 1 → event behavior allowed
604.5 = 0 → domestic hot water allocation
604.6 = 0 → domestic hot water allocation
604.7 = 0 → no priority of LMU request before external power specification

If you call up the 'overview' of the LPBKonfig0 settings, however, the bit order is displayed from back to front (from bit 7 to bit 0!) and should be
as follows after the successful setting: 00011110.
Furthermore, the following settings have to be made:

605 LPB device address = 1


606 LPB segment address = 0

After successful setting, no error code should occur and the red LED on the OCI420 should flash at a regular interval.
If, on the other hand, error 82 is displayed, the LPB addresses must be checked, since in this case there is an LPB address collision (which,
however, should not occur with the above settings and the default address of BSB-LAN).

10.3 Expansion- and ClipIn-Modules


If the available connectors and the range of function of the specific controller aren't enough (e.g. retrofitting of a solarthermic system), one can
expand the system by using an expansion- or ClipIn-module. An expansion module offers connectors for (e.g.) a pump circuit and the belonging
sensors.
These modules are being connected at the main controller by using a special bus cable and the dedicated connector. Internally they are
communicating with the controller via BSB (an exception seems to be the used controller type within the named Weishaupt heating systems). The
parameterization takes places via the operating unit of the connected controller.
Therefore, access to an extension module is only possible via the specific parameters within the main controller. Because the expansion modules
are listed within a query of ip/Q , I'll present the two main types really short in the follwing.

Note:
If you want to retrofit an expansion module, of course see the specific manual of your heating system for further informations and call a heating
engineer for the installation.

Expansion modules of the type AVS75.xxx are used within the RVS and LMS controller types. The bus connection usually takes places via the
connector "Bus-EM".

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 175/230


Expansion module AVS75.390.

Expansion modules for LMU controller types are named "ClipIn-module". There seem to be different types for the specific needs (e.g. relay
module, solar module). In general, the main appelation seems to be AGU2.5x (where the "x" seems to label the respective version), the bus
connection usually takes place via the connector "X50".

ClipIn-module AGU2.55.

10.4 Operating Units


The operating unit (located at the heating system itself) within the systems of the recent years (with controller types LMU7x, LMS1x, RVS) usually
are types of the AVS37.xxx. They look pretty much the same within the different manufacturers, within specific systems (e.g. heat pumps) certain
buttons or functions can differ though.
If you compare the look of the AVS37 operating unit and the QAA75.61x room unit, you can see that they actually also look pretty identical and

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 176/230


the usage of both devices is also almost the same. In most cases the heater sided operating unit constantly shows the temperature of the heating
device and the room unit shows the room temperature. Both units spread these values regularly (approx. every 10 seconds) over the BSB as a
broadcast (INF-message).

A typical operating unit AVS37.

The successor to the AVS37 model is the AVS74.xxx. It is equipped with a 3.8" LCD display and a rotary/push knob with which all settings are
made. It is also used as a room unit under the designation QAA74.

An AVS74 operating unit.

Recently some manufacturers are using a new type of operating unit though, it's called QAA75.91x. It seems to be possible to detach these units
from the heater itself and -by using an optional connection setup- to install them in your living area. In that case they are still working as the main
operating unit for the controller, but with the additional benefits of a room unit.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 177/230


A QAA75.91x operating unit.

In addition, there has recently been another model, the AVS77.xxx. This operation unit has so far only been reported to us from a user with a
certain Baxi heating system (Baxi Luna Duo Tec MP). This unit offers (among other) buttons for changing the DHW and HC target temperature in
small steps (degrees), but no longer has a rotary knob.

An AVS77.xxx operating unit.

Note

It seems that changing the operating mode using the DHW/HC button (in the center of the operating unit) for certain modes has the
consequence that changing it via BSB-LAN and the 'regular' parameters 1600 (DHW) and 7xx (HC) is no longer possible if an operating
mode other than "both" has been selected by using the mentioned key. The function of this new key is not (yet) implemented in BSB-LAN. If
a change of the operating modes via BSB-LAN is desired, it must be ensured that the operating mode is set to "both" by using the mentioned
key.

10.5 Conventional Room Units for the Listed Controllers


The following briefly describes the different room units. These are also manufactured by SIEMENS and branded by the different heating
manufacturers. Thus, they can be used across manufacturers, e.g. a corresponding QAA room unit of Elco can be used on a Broetje heater (of
course, always provided that it is the right type of room unit). It's not yet known if there are certain restrictions in individual cases.

As optional 'local' accessory parts of the heating system, they are connected to the BSB. That's why the connector for room units is what you are
looking for, when you want to connect the adapter. So if you connect a room unit and adjusted the settings of the specific parameters (e.g. usage
and influence of the room unit and room temperature), you can directly access the measured room temp. If you don't have an external room unit,
but you can or want to measure your room temperature(s) in a different way, then you can imitate a room unit by transmitting these measured
temperatures via BSB-LAN to the controller and influence the behaviour. For that, look up the function itself and the description of the URL

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 178/230


command /Ixxx=yyy .

The following description starts with the room units for the current heating system controllers (RVS and LMS), which are also fully supported by
BSB-LAN (so called "Broetje ISR").

Note: It seems as if the product portfolio has been supplemented with new room units and other accessories. On occasion, I'll add relevant
products here.

10.5.1 QAA55 / QAA58


The QAA55 is the 'smallest' and most affordable ISR room unit model. At Broetje it is called "RGB B", sometimes it is also called "Basic Room
Unit", "ISR RGB" or similar. It is quite limited in functionality and is basically 'just' a room temperature sensor with a few additional operating
options.

The QAA 55 room unit.

In addition to the optional measurement of the room temperature, it offers a presence button and the options for switching the operating mode
and for changing the room set temperature. It only has a small LCD display that shows the current room temperature. It is connected via a two-
pole cable to the BSB.

The QAA58 is the wireless version of the QAA55. It is battery operated, the AVS71.390 radio frequency receiver (868 MHz frequency) must in
turn be connected to the X60 connection of the boiler controller via cable.

10.5.2 QAA75 / QAA78


The QAA75.61x is the 'big' ISR room unit. In addition to the integrated temperature sensor, it has the full functionality of the boiler-side control
unit. In addition, there is a presence button and a manual DHW push can be triggered by pressing the DHW mode button for a longer time.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 179/230


The QAA75.61x room unit.

At Broetje the QAA75.61x is called "room unit RGT", sometimes it is also called "room unit RGT B Top", "ISR RGT" or similar. It is also connected
by cable to the BSB, with a third connection for the optional backlight available (terminal "G +" on the controller).

The QAA78.61x is the wireless version of the QAA75.61x. It is battery operated, the AVS71.390 radio frequency receiver (868 MHz frequency)
must in turn be connected to the X60 connection of the boiler controller via cable. The above named "RGT" is extended by an "F" at Broetje, so
it's "RGTF".

Note:
At this point it has to be mentioned, that obviously two different versions of the QAA75 are available: the already mentioned room unit QAA75.61x
and the different looking QAA75.91x.
Whenever I'm referring to the "QAA75" in this manual, I mean the above described model QAA75.61x.

The QAA75.91x seems to offer the same functionality like the QAA75.61x, but it seems to be used only with some types of heating systems by
certain manufacturers (e.g. Broetje WMS/WMC C, BMK B, BMR B and Baxi Luna Platinum+). At these types of heating systems, it seems to be
used as the operating unit which is located at the housing of the heating system itself, but (in conjunction with an optional adapter, e.g. Broetje
"ISR RGA") could also be used as a room unit. In that case it seems to be still used as the operating unit, just with the additional benefit of the
functions of a room unit.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 180/230


A QAA75.91x operating unit, with optional equipment useable as a room unit.

10.5.3 QAA74
The QAA74 is a pretty new type of room unit at the market, which should/will replace the QAA75 in long term. At Broetje it's called "ISR RGP"
(room unit premium), at Siemens "UI400". It is equipped with a 3,8" LCD display and a turn/push button for control purposes. Within some
specific types of heating system, it's also used as the main operating unit, named AVS74.

10.5.4 Broetje IDA


The "Broetje IDA" is a room unit which, in addition to an integrated temperature sensor and some functions, also offers a certain range of
functions for controlling the heating system via app with a smartphone. A presence button is not available.

IDA is integrated into the domestic WLAN and requires Internet access, if you want to control the unit via app. In the case of purely local use of
the room unit (without remote access via the app), no WLAN access is required. Incidentally, the WLAN access also updates the IDA firmware.
An interesting analysis of the traffic was made here by FHEM forum member "freetz".

For connection to the BSB of the boiler controller, a BSB interface (GTW17) must be connected. Interested user must look for "ISR IDA" in this
case, so that the GTW17 is included in the package.
For controllers with the communication protocol OpenTherm (e.g. the older controller generation Broetje LMU6x), the OT interface (GTW16) must
be used.
IWR-CAN-based controllers (see chapter 3.3) can directly be connected to the service dongle GW05 (WLAN gateway).

The exact functionality and installation steps of IDA are to be taken from the corresponding instructions of the manufacturer.

The parallel use of IDA and BSB-LAN is possible in principle, however, due to the report of a user ( Thanks to FHEM-Foums member "mifh"!) a
few restrictions regarding the functional scope of BSB-LAN are known:
If IDA is connected to the BSB, then it is the master for the settings or values of

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 181/230


time and date,

heating or switching programs and the

room temperature.
If these settings / values are changed via BSB-LAN, they will be overwritten with the settings / values from IDA after a short time.
It is thus no longer possible, for example, to detect the room temperatures from different rooms and to transmit them to the controller via
BSB-LAN, since IDA overwrites this.

The function of the presence button via BSB-LAN should still be available.

10.5.5 QAA53 / QAA73


The room units QAA 53 and QAA 73 also differ in their functional scope. They are used in the OpenTherm-based LMU6x controllers.
Further information on these room units can be found in the corresponding instructions.

10.5.6 QAA50 / QAA70


In principle, the QAA50 and QAA70 also have the same difference in functionality. These room units are used in the old controller generations,
which offers only one PPS connector. When using the adapter parallel to an already existing room unit it's only possible to read values via BSB-
LAN. In that case no values and settings of the heating controller can be changed via BSB-LAN.

A QAA70 room unit.

Further information on these room units can be found in the corresponding instructions.

10.6 Special Accessories: Webserver OZW672 and Servicetool OCI700


For the sake of completeness there should two commercial solutions be mentioned, which offer access to the controller of the heating system.
Thats the webserver OZW672 and the servicetool OCI700.

The webserver OZW672 (Broetje: "ISR OZW") is connected via bus cable to the controller and with a LAN cable to the network (and, if desired,
also to the internet). If desired, one could connect with the fee-based dataportal of Broetje and offers remote access (via PC, tablet or
smartphone+app) to the controller.

The OCI700 is the servicetool used by the installation engineer. It is connected to a local computer running a special software and offers an
overview of the settings of the controller.

10.7 Sensor Types

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 182/230


Note

The following list does not replace the specific description of the used plant-specific sensor types! It only serves as an illustration and is
intended to show that, for example, it may also be possible to use more cost-effective, universal contact sensors as flow or return sensors!
When replacing sensors or expanding the system with additional sensors, it is therefore always necessary to check the specific system
documentation to see which sensors are used for the specific system!

The current controller series use (labeled) Siemens sensors, which can be roughly divided into two different sensor types as follows:

the outdoor temperature sensor QAC34 is a sensor of the type NTC 1k Ohm (NTC 1000 Ohm resistance at 25°C, resistance characteristic
decreasing with approx. 4%/K at increasing temperature, measuring range -50...70°C, tolerance +/- 1K),

the other sensors QAD36, QAL36, QAK36, QAR34, QAZ36 are sensors of the type NTC 10k Ohm (NTC 10k Ohm resistance at 25°C;
resistance characteristic decreasing with increasing temperature).
However, these sensors differ, among other things, in their design and the measuring range of the sensor element used, even within a
product category (e.g. QAD36 in the BMU or collector sensor version), so that it is not always possible to replace them with universal and
more cost-effective standard sensors of the type NTC 10k Ohm (at 25°C). However, especially in the case of two or three sensor
types/applications, the use of more cost-effective standard sensors of the NTC 10k Ohm (at 25°C) type is possible in principle, so these are
briefly described below.

Siemens QAD36 / Broetje UAF6C


The QAD36 is a so-called "contact sensor" (Broetje: "Universal contact sensor UAF6C") and can be used as a flow and return sensor for
subsequent expansion. The sensor is housed in a casing that is mounted on the corresponding pipe (e.g. flow) and measures the temperature of
the medium indirectly via the temperature of the pipe wall. As measuring element a NTC 10k Ohm (at 25°C) with a measuring range of -
30...125°C, a tolerance of +/- 0,5K and a time constant of 6s is used.

The Siemens QAD36 contact sensor, called "Universal contact sensor UAF6C" at Broetje.

As a cost-effective alternative to this sensor, a universal NTC 10k Ohm (at 25°C) pipe contact sensor can be used. These standard sensors are
available in various versions, all of which have a concave bulge on one side of the metal sleeve, which makes it easier to attach the sensor to a
pipe and increases the heat-transferring surface. In my opinion, the version with a brass sleeve and an additional, slightly bent brass strip is
recommended here, since this version can be pushed well under a pipe insulation due to its slim design, the bending radius of the brass strip can
be adapted somewhat to the pipe, and the brass conducts the heat well.
It is recommended to use a corresponding heat conductive paste for the contact surface. To prevent slipping, it is advisable to fix it with a cable
tie or hose clamp.

Siemens QAZ36 / Broetje KF ISR


The QAZ36 in the solar collector sensor version (Broetje: "ISR collector sensor / KF ISR") is an immersion sensor with an approx. 1.5m long
silicone cable. The sensor element is a NTC 10k Ohm (at 25°C) with a measuring range of -30...200°C, a tolerance of +/- 0,5K and a time
constant of approx. 30s. The diameter of the sleeve is 6mm, the length is 40.5mm.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 183/230


A Siemens QAZ36 collector sensor, called "ISR collector sensor / KF ISR" at Broetje.

Due to the higher ambient temperatures, it is essential to pay attention to the higher measuring range and the silicone cable when using a less
expensive NTC 10k Ohm (at 25°C) standard sensor - PVC cable types are not suitable!

Siemens QAZ36 / Broetje UF6C


The QAZ36 in the version as immersion sensor with PVC cable (Broetje: "Universal immersion sensor UF6C" with 6m long PVC cable) is used
e.g. for buffer or domestic hot water tanks. The sensor element is an NTC 10k Ohm (at 25°C) with a measuring range of 0...95°C, a tolerance of
+/- 0,5K and a time constant of approx. 30s. The diameter of the sleeve is 6mm, the length is 40.5mm.

A Siemens QAZ36 immersion sensor, called "Universal immersion sensor UF6C" at Broetje.

This sensor can also be replaced by a corresponding less expensive standard sensor of the type NTC 10kOhm (at 25°C).

Attention

The above-mentioned 'immersion sensors' are not suitable for direct immersion in liquid media! The name refers to the use in so-called
'immersion sleeves', such as those found in buffer or domestic hot water tanks.

*For older controller types, other sensor types may be used, which can be recognized by the product designation (for the outdoor
temperature sensors, for example, these are "QAC21" and "QAC31") - these sensors have other resistance values and characteristics and
must not be confused with the above-mentioned sensor types!
Information on the sensor types used can be found in the specific system documentation.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 184/230


Further on to chapter 11
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 185/230


11. Excursus: Successfully Tested Heating Systems
Back to TOC
Back to chapter 10

11. Excursus: Successfully Tested Heating Systems


The following chapters are giving an overview of heating systems which have been successfully tested with BSB-LAN and reported by the users.
Because not every user reports his heating system, it can be assumed that in practise even more systems work successfully with the BSB-LPB-
LAN adapter and the BSB-LAN software.

11.1 Broetje
Broetje BBK 22E [LMS14] (gas fired) {BSB}

Broetje BBK 22F [LMS14] (gas fired) {BSB}

Broetje BBK EVO 22I [LMS15] (gas fired) {BSB}

Broetje BBS EVO 20H [LMS15] (gas fired) {BSB}

Broetje BBS Pro Evo 15C [LMU74] (gas fired) {BSB}

Broetje BGB 50 H [LMS14]

Broetje BGB EVO 15H [LMS15] (gas fired) {BSB}

Broetje BGB EVO 20H [LMS15] (gas fired) {BSB}

Broetje BGB EVO 20I [LMS15] (gas fired) {BSB}

Broetje BMR 20/24 [LMS14] (gas fired) {BSB}

Broetje BMR 220 SSP (LMS15)

Broetje BSK 15 [LMS14] (gas fired) {BSB}

Broetje BSK 20 [LMS14] (gas fired) {BSB}

Broetje EcoCondens BBS 2N (LMU64 + OCI420) (gas fired) {LPB via OCI420}

Broetje EcoCondens BBS 15E [LMS14] (gas fired) {BSB}

Broetje EcoCondens BBS 20E [LMS14] (gas fired) {BSB}

Broetje EcoCondens BBS 28C [LMU7] (gas fired) {BSB}

Broetje EcoCondens BBS EVO 20G [LMS15] (gas fired) {BSB}

Broetje EcoCondens BBS EVO 20H [LMS15] (gas fired) {BSB}

Broetje EcoCondens Kompakt BBK 22D [LMU7] (gas fired) {BSB}

Broetje EcoCondens Kompakt BMK 20/24 RSP 160 [LMS15] (gas fired) {BSB}

Broetje EcoSolar Kompakt BMR 20/24 [LMS15] (gas fired + solar) {BSB}

Broetje EcoTherm Kompakt WBC 22/24 [LMU64 + OCI420] (gas fired) {LPB via OCI420}

Broetje EcoTherm Kompakt WMC 20/33 [LMS15] (gas fired) {BSB}

Broetje EcoTherm Kompakt WMS 12 [LMS 15] (gas fired) {BSB}

Broetje EcoTherm Kompakt WMS 24 [LMS 15] (gas fired) {BSB}

Broetje EcoTherm Plus WGB20 [LGM11.34C2590] (gas fired) {PPS}

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 186/230


Broetje EcoTherm Plus BBS2N.28 [LMU 64] (gas fired) {+ OCI420 via LPB}

Broetje EcoTherm Plus WGB2N.20 [LMU 64] (gas fired) {+ OCI420 via LPB}

Broetje EcoTherm Plus WGB 15-38H [LMS14] (gas fired) {BSB}

Broetje EcoTherm Plus WGB EVO 15H [LMS15] (gas fired) {BSB}

Broetje EcoTherm Plus WGB-M EVO 20H [LMS15] (gas fired) {BSB}

Broetje EuroCondens BBS EVO 15H [LMS15] (gas fired) {BSB}

Broetje Eurocontrol KM (RVA63) (LPB/PPS)

Broetje ISR-SSR [RVS63.283] (solar system controller) {BSB}

Broetje ISR-ZR1, ZR2 [RVS46.530] (zone controller) {BSB}

Broetje LogoBloc Unit L-UB 17C [RVS43.122] (oil fired) {BSB}

Broetje LogoBloc Unit L-UB 25C [RVS43.122] (oil fired) {BSB}

Broetje LOGOBLOC-Unit L-UG (RVA53) (PPS)

Broetje NovoCondens BOB 20 [RVS43.325] (oil fired) {BSB}

Broetje NovoCondens BOB 20B [RVS43] (oil fired) {BSB}

Broetje NovoCondens BOB 25 [RVS43] (oil fired) {BSB}

Broetje NovoCondens BOB 25B [RVS43] (oil fired) {BSB}

Broetje NovoCondens SOB 22 [RVA63.242] (oil fired) {PPS}

Broetje NovoCondens SOB 26 [RVA63.242] (oil fired) {PPS}

Broetje NovoCondens SOB 22C [RVS43.222] (oil fired) {BSB}

Broetje NovoCondens SOB 26C [RVS43.222] (oil fired) + EWM [RVS75.390] {BSB}

Broetje NovoCondens WOB 20D [RVS43.325] (oil fired) {BSB}

Broetje SensoTherm BLW Split B [RVS21] (heat pump) {BSB}

Broetje SensoTherm BLW Split 16 B [RVS21] (heat pump) {BSB}

Broetje SensoTherm BLW 12B [RVS21.825] (heat pump) {BSB}

Broetje SensoTherm BLW 15B [RVS21.825] (heat pump) {BSB}

Broetje SensoTherm BSW K [RVS61.843] (heat pump) {BSB}

Broetje SensoTherm BSW 6 A [RVS51] (heat pump) {BSB}

Broetje SensoTherm BSW 8 K [RVS61] (heat pump) {BSB}

Broetje SensoTherm BSW 13 E [RVS61] (heat pump) {BSB}

Broetje SGB 170E

Broetie SGB 215E

Broetje SGB 260H [LMS14] (gas fired) {BSB}

Broetje SPK 14 B [RVS43] (pellet) {BSB}

Broetje TrioCondens BGB 15-38E [LMS14] (gas fired) {BSB}

Broetje TrioCondens BGB 20E [LMS14] (gas fired) {BSB}

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 187/230


Broetje TrioCondens BGB 28E [LMS14] (gas fired) {BSB}

Broetje WBC 22/24 [RVS43.345] (gas fired) {BSB}

Broetje WBS 14D [LMU74] (gas fired) {BSB}

Broetje WBS 14F [LMS14] (gas fired) {BSB}

Broetje WBS 22 [LMS14] (gas fired) {BSB}

Broetje WBS 22D [LMU74] (gas fired) {BSB}

Broetje WBS 22E [LMS14] (gas fired) {BSB}

Broetje WGB 15E [LMS14] (gas fired) {BSB}

Broetje WGB 20C [LMU74] (gas fired) {BSB}

Broetje WGB 20E [LMS14] (gas fired) {BSB}

Broetje WGB 20I [LMS15] (gas fired) {BSB}

Broetje WGB 28E [LMS14] (gas fired) {BSB}

Broetje WGB 70E [LMS14] (gas fired) {BSB}

Broetje WGB 50H [LMS14] (gas fired) {BSB}

Broetje WGB-C 20/24H [LMS14] (gas fired) {BSB}

Broetje WGB 20 Eco [LMS15] (gas fired) {BSB}

Broetje WGB EVO 15H [LMS15] (gas fired) {BSB}

Broetje WGB EVO 15I [LMS15] (gas fired) {BSB}

Broetje WGB EVO 20 [LMS15] (gas fired) {BSB}

Broetje WGB EVO 20H [LMS15] (gas fired) {BSB}

Broetje WGB EVO 20I [LMS15] (gas fired) {BSB}

Broetje WGB EVO 28H [LMS15] (gas fired) {BSB}

Broetje WGB EVO 38I [LMS15] (gas fired) {BSB}

Broetje WGB-K EVO 20/28I [LMS15] (gas fired) {BSB}

Broetje WGB-M EVO 20H [LMS15] (gas fired) {BSB}

Broetje WGB-M EVO 20I [LMS15] (gas fired) {BSB}

Broetje WGB Pro EVO 15C [LMU75] (gas fired) {BSB}

Broetje WGB Pro EVO 20C [LMU75] (gas fired) {BSB}

Broetje WGB S 17/20E EcoTherm Plus [LMS14] (gas fired) {BSB}

Broetje WGB-U 15H [LMS14] (gas fired) {BSB}

Broetje WGB-U 15I [LMS14] (gas fired) {BSB}

Broetje WGB-U 20I [LMS14] (gas fired) {BSB}

Broetje WMC 20/33 [LMS15] (gas fired) {BSB}

Broetje WMS 12B [LMS15] (gas fired) {BSB}

Broetje WMS 12C [LMS15] (gas fired) {BSB}

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 188/230


The new models WLS/WLC and BOK by Broetje are NOT compatible with BSB-LAN!

11.2 Elco
Elco Aerotop G07-14 [RVS61.843] (heat pump) {BSB}

Elco Aerotop S [RVS61] (heat pump) {BSB}

Elco Aerotop T07-16 [RVS61.843] (heat pump) {BSB}

Elco Aerotop T10C [RVS61.843] (heat pump) {BSB}

Elco Aquatop 8es [RVS51.843] (heat pump) {BSB}

Elco Aquatop S08 [RVS61.843] (heat pump) {BSB}

Elco Aquatop S14 [RVS61.843] (heat pump) {BSB}

Elco Aquatop T06C [RVS61.843] (heat pump) {BSB}

Elco Aquatop T10C [RVS61.843] (heat pump) {BSB}

Elco Rendamax R601 (LMS14)

Elco Straton 17 [RVS63] (oil fired) {BSB}

Elco Straton 21 [RVS63.283] (oil fired) {BSB}

Elco Straton S [RVS63] (oil fired) {BSB}

Elco Straton S 21.2 [RVS43.345] (oil fired) {BSB}

Elco Thision 25S [RVS63] ] (gas fired) {BSB}

Elco Thision 9 [LMU7] (gas fired) {BSB}

Elco Thision S Plus 13 [LMS14] (gas fired) {BSB}

Elco Thision S Plus 19 [LMS14] (gas fired) {BSB}

Elco Thision S Plus 24 [LMS14] (gas fired) {BSB}

Elco Thision S Plus 24 Compact [?] (gas fired) {BSB}

Elco Thision S Plus Combi 24 [LMS14] (gas fired) {BSB}

Elco Thision S9.1 [LMU7] (gas fired) {BSB}

Elco Thision S13.1 E [LMU7x] (gas fired) {BSB}

Elco Thision S17.1 [LMU74] (gas fired) {BSB}

Elco Thision S17.1 [RVS63.283] (gas fired) {BSB}

Elco Thision S25.1 [RSV63.283] (gas fired) + MM [AVS75.390] {BSB}

Elco Trigon S Plus 19 [LMS14] (gas fired) {BSB}

11.3 Other Manufacturers


ATAG Q38CR [LMS14] (gas fired) {BSB}

Atlantic Alféa Evolution [RVS21] (heat pump) {BSB}

Atlantic Alféa Evolution 2 [RVS21] (heat pump) {BSB}

Atlantic Alféa Excellia A.I.TRI 16 [RVS21] (heat pump) {BSB}

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 189/230


Atlantic Alféa Excellia Duo [RVS21] (heat pump) {BSB}

Atlantic Alféa Extensa + [RVS21] (heat pump) {BSB}

Atlantic Alféa Extensa 6+ [RVS21] (heat pump) {BSB}

Atlantic Alféa Extensa AOYA 18 LALL / AOYA 30 LBTL [RVS21] (heat pump) {BSB}

Atlantic Alféa Extensa Duo [RVS21] (heat pump) {BSB}

Atlantic Alféa Extensa Duo R32 [RVS21] (heat pump) {BSB}

Atlantic Alféa Extensa Duo + [RVS21] (heat pump) {BSB}

Atlantic Alféa Extensa Duo AI 32 [RVS21] (heat pump) {BSB}

Atlantic Alféa S [RVS41] (heat pump) {BSB}

Atlantic Axeo Condens 5025 (RVS13)

Atlantic Hynea hybrid duo gaz (RVS21)

Atlantic Navistem B2000/B2100 (RVS63)

Atlantic Navistem B3000/B3100 (LMS14)

Atlantic Perfinox condens Duo 5024 [LMS14] (Gasbrenner) {BSB}

Atlantic Varmax

Austria Email LWP AI 8 (RVS21)

Austria Email LWP 11 HT Eco (RVS21)

Austria Email LWPK 8 [RVS21] (heat pump) {BSB}

Baxi Block Kondens 18 [RVS13] (oil fired) {BSB}

Baxi Luna Duo Tec MP [LMS14] (heat pump) {BSB}

Baxi Luna Platinum 1.18 [LMS15] (gas fired) {BSB}

Baxi Luna Platinum+ [LMS15] (gas fired) {BSB}

Baxi Luna Platinum+ 1.12GA [LMS15] (gas fired) {BSB}

Baxi Luna Platinum+ 1.32GA [LMS15] (gas fired) {BSB}

Baxi Luna Platinum+ 24 [LMS15] (gas fired) {BSB}

Boesch (unknown type) [RVS63] (heat pump] {BSB}

Boesch SLS10 [RVS43] (heat pump] {BSB}

Boesch SLS14-RA21E [RVS43] (heat pump) {BSB}

Boesch SWP8-RX33 [RVS43] (heat pump) {BSB}

Chappée Luna Platinum + 1.24 [LMS15] (gas fired) {BSB}

Chappée Klista + HTE C 24 [LMS14] (gas fired) {BSB}

Chappée Luna Platinum Duo 3.24 HTE [LMS15] (gas fired) {BSB}

CTA Optiheat 1-5es [RVS61] (heat pump) {BSB}

CTA Optiheat 1-18es [RVS61] (heat pump) {BSB}

CTC 380 IC [RVS43.143] (oil fired) {BSB}

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 190/230


District Heating [RVD230] {LPB}

Deville 9942 [RVA53] (?) (PPS)

Deville 9981 [RVA53.140] (oil fired) {PPS}

EVI HEAT Combi-7 [RVA43] (heat pump) {LPB}

Froeling Rendagas Plus [RVA63.244] (gas fired) {LPB}

Fujitsu Waterstage Comfort 10 [RVS21.827] (heat pump) {BSB}

Fujitsu Waterstage Comfort WCC10-300a [RVS21.831] (heat pump) {BSB}

Fujitsu Waterstage DUO WGYA 100 DG 6 [RVS21.831] (heat pump) {BSB}

Fujitsu Waterstage WOHA060 LFCA [RVS21] (heat pump) {BSB}

Fujitsu Waterstage WSHA 050 DA [RVS41.813] (heat pump) {BSB}

Fujitsu Waterstage WSYA 100 DG 6 [RVS21.831] (heat pump) {BSB}

Fujitsu Waterstage WSYK 160 DC 9 [RVS21.827] (heat pump) {BSB}

Fujitsu Waterstage WSYK 160 DG 9 [RVS21.831] (heat pump) {BSB}

Fujitsu Waterstage WSYP 100 DG 6 [RVS21.831] (heat pump) {BSB}

Geminox Thrs 19 [LMS14] (gas fired) {BSB}

General Waterstage (aka Fujitsu Waterstage) WC13F / WOC13RIYF [RVS21] (heat pump) {BSB}

General WGHA 100DG [RVS21] (heat pump) {BSB}

Gruenenwald GREENHEAT GH10 ZP 41 E [RVA63] (heat pump) [+ RVA46] {PPS/LPB}

HANSA SND 30TK [RVS13] (oil fired) {BSB}

Herz Commotherm 5 DeLuxe (RVS61)

Interdomo Domostar GBK 25 H/SH [LMS15] (gas fired) {BSB}

MAN MHG Ecostar 200 [RVS53] (oil fired) {BSB}

MHG Ecostar 200 [RVS53] (oil fired) {BSB}

MHG Ecostar 755 [RVS63] (oil fired) {BSB}

MHG Procon E25 [LMS14] (gas fired) {BSB}

MHG Procon E 25 HS [LMS14] (gas fired) {BSB}

Oilon SHx 11 [RVS61] (heat pump) {BSB}

Olymp SHS 730 [RVS63] (oil fired) {BSB}

Olymp WHS 500 [RVS61] (heat pump) {BSB}

Palazzetti Choro Sistema Calore [RVS63] {BSB}

Sieger TG11 [RVP54.100] (oil fired) {PPS}

Šildymo Technologijų Centras ŠTC STC9 [RVS51] (heat pump) {BSB}

Sixmadun TG11 BE [RVA63] (?) {PPS/LPB}

SSP Proburner 25 [RVS43] (wood) {BSB}

Termomax Termo ÖV Color 35/E [RVA63.2424] (oil fired) {LPB}

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 191/230


Thermics Energie 9PWW [RVS61] (heat pump) {BSB}

Thermital TBox Clima TOP [RVS63] (gas fired + solar + pellet stove) {BSB/LPB}

Tifell Biofell 30 BV (RVS63)

Tifell Biofell 30 M (RVS63)

Tifell Biofell 30 TI (RVS63)

Tifell Biofell SUN 30 TI (RVS63)

Tifell Biofell 50 S (RVS63)

Tifell Biofell 50 BV (RVS63)

Tifell Biofell 50 TI (RVS63)

Tifell Biofell 50 SUN TI (RVS63)

Viessmann Vitotwin 300-W {BSB}

WAMAK AiWa 8 Outdoor (RVS21)

Wamak DB 11 [RVS21.826F] (heat pump) {BSB}

Weishaupt WTU 15 S [WRS-CPU-B1 = RVS23] (oil fired) {LPB}

Weishaupt WTU 25 G [WRS-CPU B2/E = RVS23] (oil fired) {LPB}

Weishaupt WTU 25 G [WRS-CPU-B3 = RVS23] (oil fired) {LPB}

Weishaupt WTU 25 S [WRS-CPU-B3 = RVS23] (oil fired) {LPB}

Weishaupt WTU 30 S [WRS-CPU-B1 = RVS23] (oil fired) {LPB}

Further on to chapter 12
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 192/230


12. Excursus: Arduino IDE
Back to TOC
Back to chapter 11

12. Excursus: Arduino IDE


In the following, the use of the Arduino IDE v1.x and the installation of the required board libraries for the Arduino Due and the ESP32 will be
briefly described.
Finally, the use of the Serial Monitor (SerMo) of the Arduino IDE is briefly presented, which can be used to e.g. observe the startup behavior of
the Arduino Due/ESP32, and to identify any errors which may occur more easily.

12.1 Installation
Installation of the Arduino IDE

Download and install the latest version of the Arduino IDE from https://www.arduino.cc/en/Main/Software for your operating system (Windows,
Mac and Linux version available).

12.1.1 Arduino Due


Installation of the Specific Libraries

1. Start the Arduino IDE and open the "Board Manager" under "Tools/Board".

2. In the dialog box that opens, type "Arduino SAM Boards" in the search line at the top where the Due is included.

3. Click on the entry "Arduino SAM Boards (32-bits ARM Cortex-M3) by Arduino" and then on the "Install" button.

The correctly installed SAM framework (ARM Cortex-M3) for the Arduino Due in the board manager.

Now you should be able to find and select the Due in the listing at "Tools/Board".

12.1.2 ESP32
Installation of the Specific Libraries

1. Start the Arduino IDE and click on "File/Preferences" (Shortcut: Ctrl+Comma).

2. In the dialog window that opens now insert the following link in the input field at the bottom of "Additional board manager URLs":
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json . If there are already one or more URLs in
the field, the additional entry can simply be added to the existing entries separated by a comma.

3. Then click on "OK".

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 193/230


The "Preferences" dialog box with the added link in the "Additional board manager URLs" line.

4. Next, open the "Board Manager" under "Tools/Board".

5. In the dialog box that opens, type "ESP32" in the search line at the top.

6. Then search for the entry "esp32 by Espressif Systems".

7. Click on the entry, select version 2.0.2 (or higher if available) and then click on the "Install" button. If you have a version lower than 2.0.2
installed, please update to 2.0.2 (or higher).

The correctly installed ESP32 framework in the board manager.

Now you should be able to find and select the ESP32 board in the listing at "Tools/Board".

12.2 Serial Monitor


Using the Serial Monitor

The Serial Monitor (short: SerMo) is a useful tool to observe e.g. the startup behavior and the data traffic of the microcontroller. So it is possible
to find errors or to record unknown telegrams.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 194/230


To use the SerMo please proceed as follows:

Connect your BSB-LAN setup via USB to your computer.

Start the Arduino IDE by double clicking on the file BSB_LAN.ino.

Now select your board type, port etc. accordingly.

Now start the "Serial Monitor". This can be done either via "Tools/Serial Monitor" (Shortcut: Ctrl+Shift+M) or simply by clicking on the
magnifying glass icon in the upper right corner of the Arduino IDE toolbar.

The moment you start the Serial Monitor, the connected microcontroller (Due/ESP32) will be restarted.

If you have configured everything correctly, you can observe the startup process and the sending and receiving of telegrams (an exemplary
output can be found at the end of this chapter).
However, if only illegible cryptic characters appear, check the setting of the transmission rate: this is at the bottom right and should be set to
115200 baud.

It is also a good idea to check "Timestamp" and to set "Both NL and CR" in the field to the left of the transmission rate.

The bottom line of the SerMo with the corresponding settings.

If you send URL commands via the web interface, for example, you will see the corresponding commands or telegrams in the SerMo output.
Regularly arriving INF telegrams are broadcasts that are sent by the heating controller or by the connected control unit and possibly also by an
additional room device. The boiler temperature is sent from the control unit approximately every ten seconds, and the room temperature is usually
sent from a room unit.

If you now call up a certain parameter on the control unit, for example, then this parameter and the corresponding value are not only shown on
the display of the control unit, but also in SerMo. In this way, for example, unknown, new parameters of a heating controller and their associated
telegrams can be decoded (see chap. 09).

Note:
If you contact us (Frederik and me, Ulf) with questions or problems, you will most likely get a request to send a "SerMo log". This means that you
should create a log of the SerMo output.
To do this, uncheck "Autoscroll" at the bottom left of the SerMo window (so that the output doesn't scroll regularly) and then select the desired
lines with the mouse. With copy&paste you can paste the output into a text editor and save the file as txt-file (or post it in the forum pasted in
codetags).

The following is an example of a SerMo output of a successful start of a BSB LAN setup with an Arduino Due and a connected RVS43 controller
including INF messages of the connected control unit, which sends the boiler temperature as a broadcast approx. every ten seconds:

12:25:46.361 -> READY


12:25:46.388 -> Reading EEPROM
12:25:47.084 -> Reading done.
12:25:47.084 -> EEPROM schema v.5 Program schema v.5
12:25:47.084 -> Address EEPROM option 0: 0
12:25:47.084 -> Address EEPROM option 1: 1
12:25:47.084 -> Address EEPROM option 2: 2
12:25:47.084 -> Address EEPROM option 3: 6
12:25:47.084 -> Address EEPROM option 4: 226
12:25:47.084 -> Address EEPROM option 5: 306
12:25:47.084 -> Address EEPROM option 6: 490
12:25:47.118 -> Address EEPROM option 7: 491
12:25:47.118 -> Address EEPROM option 8: 492
12:25:47.118 -> Address EEPROM option 9: 493
12:25:47.118 -> Address EEPROM option 10: 494
12:25:47.118 -> Address EEPROM option 11: 495
12:25:47.118 -> Address EEPROM option 12: 499
12:25:47.118 -> Address EEPROM option 13: 500
12:25:47.118 -> Address EEPROM option 14: 660
12:25:47.118 -> Address EEPROM option 15: 661
12:25:47.118 -> Address EEPROM option 16: 665
12:25:47.118 -> Address EEPROM option 17: 825
12:25:47.118 -> Address EEPROM option 18: 831
12:25:47.118 -> Address EEPROM option 19: 832
12:25:47.118 -> Address EEPROM option 20: 836
12:25:47.151 -> Address EEPROM option 21: 840
12:25:47.151 -> Address EEPROM option 22: 844
12:25:47.151 -> Address EEPROM option 23: 848
12:25:47.151 -> Address EEPROM option 24: 850

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 195/230


12:25:47.151 -> Address EEPROM option 24: 850
12:25:47.151 -> Address EEPROM option 25: 854
12:25:47.151 -> Address EEPROM option 26: 858
12:25:47.151 -> Address EEPROM option 27: 922
12:25:47.151 -> Address EEPROM option 28: 986
12:25:47.151 -> Address EEPROM option 29: 987
12:25:47.151 -> Address EEPROM option 30: 988
12:25:47.151 -> Address EEPROM option 31: 998
12:25:47.151 -> Address EEPROM option 32: 999
12:25:47.239 -> Address EEPROM option 33: 1159
12:25:47.239 -> Address EEPROM option 34: 1160
12:25:47.239 -> Address EEPROM option 35: 1164
12:25:47.239 -> Address EEPROM option 36: 1165
12:25:47.239 -> Address EEPROM option 37: 1166
12:25:47.239 -> Address EEPROM option 38: 1167
12:25:47.239 -> Address EEPROM option 39: 1171
12:25:47.239 -> Address EEPROM option 40: 1203
12:25:47.239 -> Address EEPROM option 41: 1235
12:25:47.239 -> Address EEPROM option 42: 1267
12:25:47.239 -> Address EEPROM option 43: 1299
12:25:47.239 -> Address EEPROM option 44: 1301
12:25:47.239 -> Address EEPROM option 45: 1302
12:25:47.239 -> Address EEPROM option 46: 1303
12:25:47.239 -> Address EEPROM option 47: 1304
12:25:47.239 -> Address EEPROM option 48: 1336
12:25:47.239 -> Address EEPROM option 49: 1400
12:25:47.239 -> Address EEPROM option 50: 1420
12:25:47.239 -> Address EEPROM option 51: 1440
12:25:47.239 -> Address EEPROM option 52: 1460
12:25:47.239 -> Address EEPROM option 53: 1461
12:25:47.239 -> Address EEPROM option 54: 1462
12:25:47.239 -> Address EEPROM option 55: 1463
12:25:47.239 -> Size of cmdtbl1: 29568
12:25:47.239 -> Size of cmdtbl2: 38616
12:25:47.239 -> Size of cmdtbl3: 26496
12:25:47.239 -> free RAM: 81703
12:25:47.239 -> Init One Wire bus...
12:25:47.239 -> numSensors: 0
12:25:47.239 -> PPS settings:
12:25:47.239 -> Starting SD..failed
12:25:52.197 -> 192.168.178.37
12:25:52.197 -> 255.255.255.0
12:25:52.197 -> 192.168.178.1
12:25:52.197 -> Waiting 3 seconds to give Ethernet shield time to get ready...
12:25:52.197 -> Calculating free space on SD...0 MB free
12:25:55.387 -> Start network services
12:25:55.751 -> LAN->HEIZ QUR 6225 Konfiguration - Gerätefamilie:
12:25:55.751 -> DC C2 00 0B 06 3D 05 00 02 52 88
12:25:55.751 -> HEIZ->LAN ANS 6225 Konfiguration - Gerätefamilie: 96
12:25:55.784 -> DC 80 42 0E 07 05 3D 00 02 00 00 60 5E 3E
12:25:55.784 -> #6225: 96
12:25:55.950 -> LAN->HEIZ QUR 6226 Konfiguration - Gerätevariante:
12:25:55.950 -> DC C2 00 0B 06 3D 05 00 03 42 A9
12:25:55.983 -> HEIZ->LAN ANS 6226 Konfiguration - Gerätevariante: 100
12:25:55.983 -> DC 80 42 0E 07 05 3D 00 03 00 00 64 68 0E
12:25:55.983 -> #6226: 100
12:25:55.983 -> Device family: 96
12:25:55.983 -> Device variant: 100
12:25:55.983 ->
12:25:55.983 -> Setup complete
12:26:00.698 -> DSP1->HEIZ QUR 8310 Diagnose Erzeuger - Kesseltemperatur:
12:26:00.698 -> DC 8A 00 0B 06 3D 0D 05 19 4F 8C
12:26:00.764 -> HEIZ->DSP1 ANS 8310 Diagnose Erzeuger - Kesseltemperatur: 41.0 &deg;C
12:26:00.797 -> DC 80 0A 0E 07 0D 3D 05 19 00 0A 41 08 A5
12:26:10.889 -> DSP1->HEIZ QUR 8310 Diagnose Erzeuger - Kesseltemperatur:
12:26:10.889 -> DC 8A 00 0B 06 3D 0D 05 19 4F 8C
12:26:10.989 -> HEIZ->DSP1 ANS 8310 Diagnose Erzeuger - Kesseltemperatur: 41.0 &deg;C
12:26:10.989 -> DC 80 0A 0E 07 0D 3D 05 19 00 0A 41 08 A5
12:26:21.116 -> DSP1->HEIZ QUR 8310 Diagnose Erzeuger - Kesseltemperatur:
12:26:21.116 -> DC 8A 00 0B 06 3D 0D 05 19 4F 8C
12:26:21.182 -> HEIZ->DSP1 ANS 8310 Diagnose Erzeuger - Kesseltemperatur: 41.0 &deg;C
12:26:21.215 -> DC 80 0A 0E 07 0D 3D 05 19 00 0A 41 08 A5

Further on to chapter 13
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 196/230


13. Excursus: Reaching BSB-LAN Securely from the Internet
Back to TOC
Back to chapter 12

13. Excursus: Reaching BSB-LAN Securely from the Internet


This section describes the basic possibilities for securely reaching BSB-LAN from the Internet. Due to the large number of available routers, only
the most important steps can be described here. For further details, please consult the manual of the respective router. We cannot offer support
for the setup of these steps, please ask for advice in appropriate internet forums.

Basic requirement: Set up (sub-)domain with dynamic DNS


To enable external access, you need your own (sub-)domain that can be reached from the Internet via a dynamic DNS service. Some router or
NAS providers like AVM or Synology offer such a service directly for their customers, otherwise you have to have your own domain (e.g. my-

home.com ), where you then set up a subdomain (here in the example bsb-lan.my-home.com ), which then has to be configured accordingly
together with the dynamic DNS provider.

Variant 1: Virtual Private Network (VPN)


Many routers provide a server for a virtual private network (VPN) out of the box. This is the most secure variant, because in this way other access
to the home network is generally blocked. If such a VPN server is set up and activated on the router, for example, you can access BSB-LAN with
a VPN-capable device in the same way as you would otherwise, i.e. normally via your home IP address.
The disadvantage, however, is that it is not possible to access BSB-LAN without a VPN-enabled device. Likewise, the Internet access with which
one uses the Internet while on the road may be configured in such a way that VPN is not possible. In these cases, there is then no way to access
the home resources.

Variant 2: Reverse Proxy


A reverse proxy offers, among other things, the possibility to reach several devices in the home network via a single, externally visible device
running a reverse proxy server. The following steps are necessary for this:

1. Set up port forwarding


Port forwarding must be set up on the local network for the device running the reverse proxy. In order to secure this access via SSL/TLS,
port 443 must be used for this purpose. Please note that it may not be possible to access the actual router via port 443. With some routers,
however, the SSL port can be changed, so that this need not be a fundamental problem. For the use of SSL/TLS / port 443, of course, an
appropriate (possibly self-signed) certificate must be installed on the device. Many router or NAS manufacturers already offer the installation
of free Let's Encrypt certificates.

2. Installing and setting up the reverse proxy


The device on which the reverse proxy runs can be any computer that is permanently accessible, e.g. a file server/NAS. The reverse proxy
server is installed and set up on this machine. If you use a Synology NAS for this purpose, such a function is already built in from DSM 7
(see Control Panel / Login Portal / Advanced).
You now configure the reverse proxy so that it accepts requests for the selected (sub)domain via HTTPS(!) on port 443 and then forwards
them via HTTP(!) to port 80 of the BSB-LAN adapter. The way back is then exactly the other way round: From BSB-LAN via unsecured
HTTP to the reverse proxy and from there via HTTPS back out to the Internet.
Now BSB-LAN can be reached directly via the HTTPS call of the (sub)domain. It is now recommended to enable HTTP authentication in
BSB-LAN in any case, otherwise everyone would have access to BSB-LAN.

Further on to chapter 14
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 197/230


14. Possible Error Messages and their Causes
Back to TOC
Back to chapter 13

14. Possible Error Messages and their Causes

14.1 Error Message "unknown type \<xxxxxxxx>"


This error states that there are no conversion instructions for this parameter is present to convert the raw data in a corresponding unit (time,
temperature, percent, pressure, etc.).

To solve this problem, the respective telegram / command ID of the relevant parameter and the associated value should be read out and
reported. Should there be multiple setting options for one parameters available, each option must also be read out, so that a clear assignment
can take place. See chap. 9 for further instructions.

14.2 Error Message "error 7 (parameter not supported)"


The associated Command ID is not recognized or the corresponding parameter is not supported by the controller (e.g. specific parameters
related to a gas fired heater are not available at an oil fired heater).

Error messages of this type are hidden by default since v0.41 (but will still be queried within a complete query for example). If you still want them
to be displayed, you have to comment out the definement #define HIDE_UNKNOWN in the file BSB_lan_config.h (so that it looks like //#define

HIDE_UNKNOWN ).

To check whether the Command ID in principle is supported by the controller but not yet released for your specific device family, please execute
the URL command /Q (also see chapter 8.2.5). If any 'error 7'-messages appear with this query, please report them with the complete output of
/Q.

14.3 Error Message "query failed"


This message appears when no response from the controller comes upon the request of the adapter.

Possible causes are mostly to be found on the hardware side (e. g. faulty RX and/or TX connection, wrongly installed components or even a
timeout due to a switched off or not connected controller).

14.4 Error Message "ERROR: set failed! - parameter is readonly"


This message appears, when you are trying to adjust settings or when you are trying to send (e. g.) values like room temperature via BSB-LAN
but didn't change the preset read-only state of BSB-LAN.

You have to grant write access to BSB-LAN.

14.5 Error Message "decoding error"


The error message "decoding error" means, that the parameter and the command id are known or match, but that the data packet doesn't
correspond to the known decoding. The reason for this could be a different length or a different unit.

To update this for the specific type of controller / heating system, the belonging data packet, the exact value and the specific unit is needed.
Please see chap. 9 for further instructions.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 198/230


Further on to chapter 15
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 199/230


15. Problems and their Possible Causes
Back to TOC
Back to chapter 14

15. Problems and their Possible Causes

15.1 Arduino IDE Stops Compiling


There are many possible errors which could be the reason that the Arduino IDE doesn't successfully compile and stops with an error, e.g. wrong
board type/connection/speed chosen. However, there are three types of errors while trying to compile for an ESP32 based board which should
be mentioned here:

The error mentions something about "WiFiSPI"?


→ If on ESP32, remove the WiFiSPI folder from the folder src - see step 5 in chap. 2.1.2.

The error mentions something about "ArduinoMDNS"?


→ If on ESP32, remove the ArduinoMDNS folder from the folder src - see step 5 in chap. 2.1.2.

The error mentions something about "EEPROMClass"?


→ Make sure you have the correct ESP32 framework installed (1.0.6 is too old) - see chap. 12.1.2.

15.2 The Red LED of the Adapter Isn't Lit


Controller is switched off

Adapter isn't connected with the controller via BSB or LPB

Adapter is incorrectly connected to the controller (CL+/CL- or DB/MB interchanged)

Probably hardware fault of the adapter (defect component, eroor in the construction

Probably loose contact at the bus connector (Rx/Tx or CL+/CL-)

15.3 The Red LED Is Lit, but a Query Isn't Possible


Probably adapter is connected wrong (usage of G+ instead of CL+)

Probably loose contact at the bus connector (Rx/Tx or CL+/CL-)

Probably wrong pin setting (Rx/Tx)

Probably confused the transistors Q1/Q2

Probably cold solder joints

See subchapter „No Query of Parameters Possible"

15.4 Access to the Webinterface Isn't Possible


Adapter doesn't have any/sufficient/unreliable power supply

Adapter or LAN shield isn't connected to the LAN

IP and/or MAC address of the adapter isn't correct

Security functions passkey , TRUSTED_IP and/or USER_PASS_B64 activated/deactivated → URL not adjusted, access from wrong IP etc.

Check router and/or firewall settings

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 200/230


Access after power failure and/or restart of the microcontroller isn't possible → press reset button at the microcontroller

Usage of a microSD card for logging → format as FAT32, execute URL command /D0 , maybe try a different card and/or smaller capacity
→ see chapter 9.1

(Adapter,) LAN shield and/or Arduino/microcontroller is faulty (→ sometimes diffuse problems occured within the usage of cheap clones,
maybe try other/original units)

15.5 No Connection to WiFi Possible


Please check whether the definement #define WIFI is active, i.e. the trailing slashes have been removed. An indication that the definement is not
active are these error messages in the serial monitior right after booting:

E (1229) esp.emac: emac_esp32_init(349): reset timeout


E (1229) esp_eth: esp_eth_driver_install(214): init mac failed

Furthermore, BSB-LAN can not connect to hidden WiFi networks. The only way to do this is by entering the BSSID of the WiFi network into the
variable bssid in the configuration file BSB_LAN_config.h .

15.6 No Query of Parameters Possible


See subchapter „The Red LED of the Adapter Isn't Lit"

See subchapter „The Red LED Is Lit, but a Query Isn't Possible"

See subchapter „Access to the Webinterface Isn't Possible"

Rx and/or Tx assignment isn't correct, pinout and/or connection of the adapter doesn't fit to the settings in BSB_lan_config.h

Wrong bus type (BSB/LPB)

15.7 Controller Isn't Recognized Correctly


See subchapter „The Red LED Is Lit, but a Query Isn't Possible"

See subchapter „No Query of Parameters Possible"

Controller is switched off

Controller was switched on after the microcontroller (automatic detection of the controller doesn't work in that case) → restart the
microcontroller

Controller is not or not in the right way connected with the adapter

Device family and variant of the controller isn't known yet → check http://<IP-Adresse>/6225/6226 and report the output

15.8 Heating Circuit 1 Can't Be Controlled


Adapter probably defined as room unit 2

15.9 Room Temperature Can't Be Transmitted to Heating Circuit 1


Adapter probably defined as room unit 2

Possible access of the adapter is readonly → write access must be granted (webconfig /C : "write access" must be set to "standard" or
"complete")

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 201/230


15.10 Heating Circuit 2 Can't Be Controlled
Adapter probably defined as room unit 1

15.11 Room Temperature Can't Be Transmitted to Heating Circuit 2


Adapter probably defined as room unit 1

Possible access of the adapter is readonly → write access must be granted (webconfig /C : "write access" must be set to "standard" or
"complete")

15.12 Settings of the Controller Can't Be Changed via Adapter


Possible access of the adapter is readonly → write access must be granted (webconfig /C : "write access" must be set to "standard" or
"complete")

15.13 Sometimes the Adapter Doesn't React to Queries or SET-Commands


The microcontroller doesn't have multitasking capability - wait until a query is done (e.g. especially extensive queries of many parameters,
whole categories or a big logfile may take quite a long time)

15.14 'Nothing' Happens at the Query of the Logfile


No microSD card is inserted in the slot

Logging to microSD card was or is deactivated

The logfile can get quite big, a query may take quite a long time

The graphical display ( http://<IP-Adresse>/DG ) of the logfile can't occur because of JavaScript-blockers within the browser

15.15 No 24-Hour Averages Are Displayed


The specific definement isn't activated

No parameters for the calculation of the 24h-averages are set

15.16 'Nothing' Happens at the Query of DS18B20/DHT22 Sensors


There are no sensors connected

The specific definements aren't activated

The pinout isn't set correctly

The sensors are faulty or defect

15.17 The DS18B20 Sensors Are Showing Wrong Values


Check power supply and whole installation (check size of the pullup-resistor, use capacitors, check wiring, use correct topology etc.)

15.18 The 'Serial Monitor' of the Arduino IDE Doesn't Provide Data
Adapter isn't (additionally) connected via USB to your computer

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 202/230


Wrong COM port or type of microcontroller board is chosen

Wring baud rate is set → set to 115200 baud

Adapter isn't connected to the controller and/or controller is switched off → see subchapters above

Further on to chapter 16
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 203/230


16. FAQ
Back to TOC
Back to chapter 15

16. FAQ
16.1 Can I Use the Adapter & Software with a Raspbery Pi?
Yes and no.
The adapter itself can be used in conjuction with a Raspberry Pi, if you use certain parts. Please see the following chapters for further
informations: chap. 1.4 and appendix a2.2.

The BSB-LAN software can NOT be used with a RPi, it is only usable with the described microcontrollers. Further informations are
available in chap. 1.4.

16.2 Can I Connect One Adapter to Two Controllers at the Same Time?
No, this isn't possible. If you want to connect the hardware setup (microcontroller + adapter) to the BSB of the controllers, you have to use one
hardware setup for each controller. If the contollers are already connected via LPB though, please see the following FAQ.

16.3 Can I Connect an Adapter via LPB And Query Different Controllers?
Yes, if the existing controllers are already connected with each other via LPB. This LPB setup of the controllers already has to work without any
problems, so the setup has to be done correctly (e.g. device and segment addresses have to be set right).
For querying data of each controller, the specific address has to be set within BSB-LAN. See chapter 5.1 for further informations.

16.4 Is a Multifunctional Input of the Controller Directly Switchable via


Adapter?
No!

The multifunctional inputs of the controllers (e.g. H1, H2, H3 etc.) are not connectable directly to the adapter/microcontroller!

These inputs must be switched potential free, so you have to use a relay in conjunction with the adapter/microcontroller. See chapter 7.2 for
further informations.

16.5 Can an Additional Relayboard Be Connected And Controlled by the


microcontroller?
Yes. See chapter 7.2 for further informations.

16.6 Can I Query the State of a Connected Relay?


Yes. See the specific URL command in chapter 5.1.

16.7 Can I Be Helpful to Add Yet Unknown Parameters?


Yes! Please see chapter 9 for further instructions.

16.8 Why Do Some Parameters Appear Doubly Within a Complete Query?

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 204/230


When you do a complete query of all parameters via URL command ( http://<ip-address>/0-10000 ) it can happen, that some parameters or
program numbers are displayed doubly in the output. This happens because the same command id can occur within different parameters.
Anyway, this doesn't have any negative influence the functionality in any way.

16.9 Why Aren't Certain Parameters Displayed Sometimes?


First of all, not all of the parameters which are known by BSB-LAN are available within every type of controller. Certain parameters which are
controller / heating system specific just aren't available. E.g.: specific paramaters of a gas-fired heating system aren't available within an oil-fired
system.

Besides that, if the controller has been powered on after the microcontroller already started, the automatic detection of the connected controller
doesn't work. In this case just restart the microcontroller, so that the connected controller can be recognized by BSB-LAN.

If still certain parameters don't appear which are available via the operational unit of the heating system, please do a query of /Q (see chapter
3.3).
If the desired parameters still don't appear there (reported as 'error 7' parameters), please follow the instructions in chapter 10.

16.10 Why Isn't Access to Connected Sensors Possible?


If you connected DHT22 and/or DS18B20 sensors correctly to the adpater/microcontroller but the corresponding link in the webinterface doesn't
work, you probably didn't adjust the belonging parameter in the file BSB_LAN_config.h.
See the description in the file BSB_LAN_config.h and the chapter [7.1]chap07.md#71-usage-of-optional-sensors-dht22-ds18b20-bme280).

16.11 I'm Using a W5500 LAN-Shield, What Do I Have to Do?


Make sure you are using the latest ethernet library within the Arduino IDE (min. version 2.0).

16.12 Can States Or Values Be Sent As Push-Messages?


No, not by only using BSB-LAN. For this, you have to use additional software (e.g. FHEM) to query the desired parameters and process the data.

16.13 Can (e.g.) FHEM 'Listen' to Certain Broadcasts?


Well, FHEM can 'listen' - but BSB-LAN can't send any messages by itself.

16.14 Why Sometimes Timeout Problems Occur Within FHEM?


This could be due to the length of the send / receive process. You should calculate the timeout value in FHEM in the way, that you estimate
approx. two seconds for a query and one second for a setting of a parameter.

Besides that it could be helpful to put as many BSB-LAN specific readings as possible in one group for a query, so that collisions could be
avoided.

16.15 Is There a Module For FHEM?


Yes and no. The member „justme1968" develops a module: https://forum.fhem.de/index.php/topic,84381.0.html
But: the development isn't done yet, so that an unproblematic and reliable usage can't be guaranteed at this time.

16.16 Why Aren't Any Values Displayed At Burnerstage 2 Within /K49?


If you are using a gas-fired heating system, it's most likely modulating and doesn't even have a two-staged burning system. These systems
mostly are only available within oil-fired heating systems. But even within these systems not all controllers spread the differentiation between
stage one and two over the bus by broadcast messages, so that BSB-LAN doesn't recognize either it's stage one or two which is active.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 205/230


16.17 It Appears to Me That the Displayed Burner-Values of /K49 Aren't
Correct.
This could be. The specific starts and runtimes are determined by the detection of the belonging broadcasts sent by the controller. Sometimes it
can occur that a broadcast doesn't reach the other bus members, e.g. when a query is done at the same time.

16.18 What Is the Exact Difference Between /M1 and /V1?


Please see the descriptions of the monitor mode (/M) and the verbose mode (/V) in chapter 5.1.

16.19 Can I Implement My Own Code In BSB-LAN?


Yes, for this you can and should use the designated file BSB_LAN_custom.h. Here you can add own code which will be initiated at each loop
function.

16.20 Can I Integrate MAX! Thermostats?


Yes, that's possible. You have to activate and adjust the specific definement in the file BSB_LAN_config.h.
For further informations see the corresponding chapter 7.3.

16.21 Why Isn't the Adapter Reachable After a Power Failure?


This behaviour was noticed sometimes, the reason is unclear. Just press the reset button of the microcontroller, after that everything should work
fine again. If this happens more often at your home, you can probably add a little emergency power supply to prevent this.

16.22 Why Isn't the Adapter Reachable Sometimes (Without a Power Failure)?
This problem only occured in rare cases, there is no clear solution for this behaviour. The only solution was a reset and reboot of the
microcontroller.

16.23 Why Do 'Query Failed' Messages Occur Sometimes?


If this occurs within a system which is usually working fine, then it could probably be due to hardware issues.

16.24 I Don't Find a LPB or BSB Connector, Only L-BUS And R-BUS?!
In this case you have a controller which isn't compatible with BSB-LAN - please DON'T try to connect the adapter!
You can see chapter 10.2.3 for further informations.

16.25 Is There An Alternative Besides Using LAN?


Yes, please see chapter 1.2.2 and capter 7.5.2 if you are already using the Due setup. If you don't have any hardware yet, you could also think
about using an ESP32.

16.26 I Am Using The Outdated Setup Adapter v2 + Arduino Mega 2560 - Is


There Anything I Have To Take Care Of?
Yes! Please see appendix D.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 206/230


16.27 I Am Getting Error Messages from the Arduino IDE - What Can I Do?
Error messages from the Arduino IDE can be various and have different reasons, so we can't go into this in detail here. In this case you should
check all settings regarding port, board type etc. If Google does not provide any further information, you can also ask in the forum.
As an example, here is a type of error message that occurs when the wrong board type is set when using an Arduino DUE:

BSB_lan:802:27: error: 'pgm_read_byte_far' was not declared in this scope

uint8_t second_char = pgm_read_byte_far(enum_addr + page + 1);

^~~~~~~~~~~~~~~~~

16.28 Connection to the WiFi Network can't be Established.


In this case, the WLAN access data entered in the BSB_LAN_config.h file must always be checked. Also check the other network settings.
If necessary, the router configuration must also be checked to see whether new WiFi devices are allowed to register.
However, if the following two error messages occur when starting an ESP32-based microcontroller where you want to use WiFi

E (1593) esp.emac: emac_esp32_init(349): reset timeout


E (1594) esp_eth: esp_eth_driver_install(214): init mac failed

then the #define WIFI definition in the BSB_LAN_config.h file was not activated. To activate it, the two slashes // in front of it must be removed
and BSB-LAN must be flashed again (see also chapter 2.2.2).

16.29 BSB-LAN often crashes or the WiFi connection is unstable.


Problems with crashes or unstable WiFi are often (also) due to insufficient power supply. With the Olimex boards, this is occasionally This has
also occasionally occurred with the Olimex boards when powered via the DC socket; a power supply via the USB interface was more stable in
these cases.

16.30 I cannot find the setting for writing the parameters / The "set" button is
missing
The write mode must be allowed in the web-based configuration; to do this, the advanced settings in the web interface must first be activated.

16.31 Why can't I find the parameter XYZ anywhere?


BSB-LAN can only display the parameters that are also available as such on the heating controller. Please only submit a support request if a
parameter number is displayed on the controller but does not appear in BSB-LAN.

16.32 The LED flickers, but no connection to the heating is established.


Check the correct orientation of the circuit board and its central position, especially with the Olimex.

16.33 I Have Further Questions, Who Can I Contact?


The best option is to create an account at the german FHEM forum ( https://forum.fhem.de/) and ask your questions in the specific BSB-LAN
thread: https://forum.fhem.de/index.php/topic,29762.0.html.

Further on to chapter 17

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 207/230


Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 208/230


17. Further Informations and Sources
Back to TOC
Back to chapter 16

17. Further Informations and Sources


A lively exchange regarding the here presented hardware and software takes place in the following forum:
https://forum.fhem.de/index.php/topic,29762.0.html
This is also a good place for questions, exchange of experience and support, including informations about updates.

All documentation for the hardware and software presented here as well as the different software versions can be found here.
This manual is also available here as a PDF version.

The software and related documentation for the use of the here presented adapter in conjunction with a Raspberry Pi 2 is available here.

For the use of the adapter with an RPi at the PPS interface the Python script "PPS-monitor" can be used.

The initial idea of connecting some kind of adapter for gaining access via BSB/LPB and the process that led to this solution can be found here
and here.

As a relatively extensive source with many parameter descriptions the "Brötje System Manual ISR Plus" is recommended to read. Besides
numerous other and model-specific instructions it's like a basic 'reference' for the parameter definitions.

For informations about the different controllers it's always worthy searching for "Albatros 2".

In-depth informations such as specifications and technical requirements of the bus types can be found in the respective documents of the
manufacturer. Especially regarding the LPB, two documents from "Siemens Building Technologies - Landis & Staefa Division" are recommended:

CE1N2030D Local Process Bus LPB system basics

CE1N2032D Local Process Bus LPB Configuration Basics

Regarding the installation and usage of DHT22 and OneWire sensors such as the DS18B20 there are numerous sources of information.
Especially the official DataSheets of the manufacturers should be read. Besides the already mentioned documents in the specific chapters, there
are many free tutorials, example installations and scripts available throughout the internet.

Further on to appendix A1
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 209/230


Appendix A1: Circuit Diagram BSB-LPB-LAN Adapter v4 (Due
version)
Back to TOC
Back to chapter 17

Appendix A1: Circuit Diagram BSB-LPB-LAN Adapter v4 (Due


version)
Note: The circuit diagram for the ESP32 version is basically the same like the one for the Due, just the EEPROM isn't needed.

Further on to appendix A2

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 210/230


Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 211/230


Appendix A2: Notes on the Circuit Diagram
Back to TOC
Back to appendix A1

Appendix A2: Notes on the Circuit Diagram


Note: The circuit diagram for the ESP32 version is basically the same like the one for the Due, just the EEPROM isn't needed.

A2.1 Short Explanation of the Circuit Diagram


D1 = LED (red)
D2 = Diode
EEPROM = EEPROM
OK(x) = Optocouplers
Q(x) = Transistor
R(x) = Resistor

ARD = Arduino
RPI = Raspberry Pi

CL+/- = BSB connectors


DB/MB = LPB connectors

TXD = Digital pin: transmit


RXD = Digital pin: receive

A2.2 Parts List


Amount Component Label Illustration Note

operating voltage max. 2,8V, reverse voltage 5V


1 LED (red) D1
Observe alignment!

1 Diode 1N4148 D2 Observe alignment!

not needed for the ESP32 version of the PCB


1 EEPROM 24LC32A-I/P EEPROM
Observe alignment!

2 Optocoupler 4N25 OK1, OK2 Observe alignment!

Attention: do not confuse with Q2!


1 Transistor BC547 Q1
Observe alignment!

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 212/230


Amount Component Label Illustration Note

Attention: do not confuse with Q1!


1 Transistor BC557 Q2
Observe alignment!

3 Resistor 330kΩ R1, R4, R7 orange, orange, black, orange, brown

1 Resistor 1.5kΩ R2 brown, green, black, brown, brown

1 Resistor 300Ω R3 orange, orange, black, black, brown

2 Resistor 4.7kΩ R5, R6 yellow, violet, black, brown, brown

1 Connector CL+/CL grid dimension 5,08mm

Arduino Due:
Pin header (male, grid dimension 2,54mm), optional IC sockets for optocouplers and/or EEPROM..

For the usage of the adapter v4 in conjunction with an Arduino Due you basically only need to assemble the pins for RX1, TX1, SDA, SCL, GND
and pin 53. Other pins could be assembled due to a better stability and/or other usage.

Absolutely necessary pins for the usage in conjunction with an Arduino Due.

Raspberry Pi:
Female pinheader (double row, grid dimension 2,54mm), optional IC sockets for optocouplers and/or EEPROM..

For the usage of the adapter v4 in conjunction with a Raspberry Pi you have to put your attention on different things, which are collectively
named within the chapter 12.9.

ESP32:
Female pinheader (grid dimension 2,54mm; ESP32: single row; Olimex: double row 2x5), optional IC sockets for optocouplers..

For the use of the ESP32 specific adapter v4 on the recommended ESP32 NodeMCU from Joy-It only the pins RX2, TX2, GND and 3.3V are
needed and must be equipped with corresponding pin headers. However, for stability reasons it is recommended to equip both sides completely
with one row of pin headers each.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 213/230


The unpopulated ESP32 specific adapter board.

A2.3 General Notes


Important: Before soldering, study the circuit diagram attentively!

The following instructions do not replace any fundamental electronic knowledge, but maybe one or two of these hints could be helpful for
electronics beginners.

Generally it is helpful to position the components, bend the 'legs' of them a little bit to hold them in position on the board and check again the
positioning of each component. Start with the smallest parts first. Pay attention to the correct alignment of parts like diodes, transistors and ICs! If
everything seems fine, you can turn around the board and start soldering. Be careful that you just solder where you should so that you don't
produce shortcuts by accident.
A previous breadboard test setup (if you don't use the PCB) of course could be an option, though due to non-exclude problem sources (usage of
a wrong plug row, possible loose contacts and so on) not necessarily recommended.

Please make sure that the components do not get too hot during soldering, since they can be damaged. Therefore it is appropriate to use
corresponding IC sockets for the optocoupler ICs and the EEPROM. Once you are done with the soldering, you can just plug in the ICs. Pay
attention to the correct alignment of the sockets and optocouplers/EEPROM as well as of the diodes and transistors!

Before putting the adapter into operation, it is advisable to thoroughly check the assembly again and (if possible) measure the circuit with a
multimeter. Cold solder joints, accidentally bridged contacts and so on can cause inexplicable and difficult to diagnose misconduct of the
adapater up to an eventual controller defect!

Good luck!

Further on to appendix B
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 214/230


Appendix B: Pinouts
Back to TOC
Back to appendix A2

Appendix B: Pinouts

B1 Arduino DUE
The following 'inofficial' Arduino DUE pinout diagram was made by Rob Gray.
It is also directly available as a PDF.
Many thanks for that great work!

Note: Please note that the pinout of some cheap clones may vary from the original pinout!

The 'official' pinout diagram from Arduino.cc is also available as a PDF.

Here you can find the GPIO numbers with the corresponding pin names which are printed onto the Due.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 215/230


B2 Joy-It ESP32 NodeMCU
The pinout scheme for the Joy-It ESP32 NodeMCU is depicted within the manual of the manufacturer.

B3 Olimex ESP32-EVB
The pinout scheme for the Olimex ESP32-EVB is depicted within the schematics from the manufacturer. The following figure shows the
corresponding section and refers to the 40-pin header.

Pinout of the 40-pin header of the Olimex ESP32-EVB.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 216/230


Further on to appendix C
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 217/230


Appendix C: Changelog BSB-LAN Software
Back to TOC
Back to appendix B

Appendix C: Changelog BSB-LAN Software


Version 2.2

ATTENTION: Several variables in BSB_LAN_config.h.default have changed their variable type, it's probably best to re-create your
BSB_LAN_config.h from scratch.

Parameter numbers are now floating point (i.e. XXXX.Y) because some parameters contain two different kinds of information. These are
now shown in decimal increments of 0.1. You can still qurey the "main" parameter via XXXX (without .Y)

Lots of bugfixes and new data types

Device-specific parameter lists supported

Version 2.1

Many new parameters for LMU64

ATTENTION: New categories for LMU64 and RVD/RVP controllers due to their different numbering schemes. Will be filled over time. PPS
and sensor categories have moved up by two.

ESP32: OTA now uses system-wide HTTP AUTH authentication credentials

Improved built-in chart display (/DG), new configuration definement #define USE_ADVANCED_PLOT_LOG_FILE - thanks to Christian
Ramharter

Lots of bugfixes

Version 2.0

ATTENTION: LOTS of new functionalities, some of which break compatibility with previous versions, so be careful and read all the docs if
you make the upgrade!

ATTENTION: Added and reorganized PPS parameters, almost all parameter numbers have changed!

ATTENTION: Change of EEPROM layout will lead to loading of default values from BSB_LAN_config.h! You need to write settings to
EEPROM in configuration menu again!

ATTENTION: Folder locations and filenames have been adjusted for easier installation! If you update your installation, please take note that
the configuration is now in BSB_LAN_config.h (LAN in caps), and no longer in BSB_lan_config.h (lower-caps "lan")

ATTENTION: HTTP-Authentication configuration has changed and now uses plain text instead of Base64 encoded strings!

Thanks to GitHub user do13, this code now also compiles on a ESP32, tested on NodeMCU-ESP32, Olimex ESP32-POE and Olimex
ESP32-EVB boards. ESP32 code uses SDK version 2.0.2, please take note when configuring Arduino IDE!

OTA Updates now possible for ESP32-based devices

Support for special PPS devices (based on DC225/Honeywell MCBA) added

Webinterface allows for configuration of most settings without the need to re-flash, also split into basic and extended configuration

Added better WiFi option for Arduinos through Jiri Bilek's WiFiSpi library, using an ESP8266-based microcontroller like Wemos D1 mini or
LoLin NodeMCU. Older WiFi-via-Serial approach no longer supported.

Added MDNS_SUPPORT definement in config so that BSB-LAN can be discovered through mDNS

If BSB-LAN cannot connect to WiFi on ESP32, it will set up its own access point "BSB-LAN" with password "BSB-LPB-PPS-LAN" for 30
minutes. After that, it will reboot and try to connect again.

New MQTT functions, including allowing any parameter to be set by an MQTT message and actively query any parameter once by sending

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 218/230


an MQTT message

Added support for BME280 sensors

Setting a temporary destination address for querying parameters by adding !x (where x is the destination id), e.g. /6224!10 to query the
identification of the display unit

URL commands /A, /B, /T and /JA have been removed as all sensors can now be accessed via parameter numbers 20000 and above as
well as (currently) under new category K49.

New categories added, subsequent categories have been shifted up

HTTP Authentification now uses clear text username and password in configuration

PPS users can now send time and day of week to heater

Lots of new parameters added

URL command /JR allows for querying the standard (reset) value of a parameter in JSON format

URL command /JB allows for backing up parameters to JSON file

New library for DHT22 should provide more reliable results

Consolidated data and value types: New data types VT_YEAR, VT_DAYMONTH, VT_TIME as subsets of VT_DATETIME for parameters 1-
3, replacing VT_SUMMERPERIOD and adjusting VT_VACATIONPROG. New value types DT_THMS for time consisting of
hour:minutes:seconds

MQTT: Use MQTTDeviceID as a client ID for the broker, still defaults to BSB-LAN. ATTENTION: Check your config if you're broker relies on
the client ID in any way for authorization etc.

Version 1.1

ATTENTION: DHW Push ("Trinkwasser Push") parameter had to be moved from 1601 to 1603 because 1601 has a different "official"
meaning on some heaters. Please check and change your configuration if necessary

ATTENTION: New categories added, most category numbers (using /K) will be shifted up by a few numbers.

/JA URL command outputs average values

Many new parameters decoded

New parameters for device families 25, 44, 51, 59, 68, 85, 88, 90, 96, 97, 108, 134, 162, 163, 170, 195, 209, 211

Improved mobile display of webinterface

Added definement "BtSerial" for diverting serial output to Serial2 where a Bluetooth adapter can be connected (5V->5V, GND->GND, RX-
>TX2, TX->RX2). Adapter has to be in slave mode and configured to 115200 bps, 8N1.

Lots of added Polish translations

New data types VT_BYTE10, VT_SPF

Bugfix for PPS bus regarding display of heating time programs

Bugfix for MQTT

Version 1.0

/JI URL command outputs configuration in JSON structure

/JC URL command gets list of possible values from user-defined list of functions. Example: /JC=505,700,701,702,711,1600,1602

Logging telegrams (log parameter 30000) now writes to separate file (journal.txt). It can be reset with /D0 (same time with datalog.txt)
command and dumped with /DJ command.

removed WIFI configuration as it is no longer applicable for the Due

lots of new parameters for various device families

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 219/230


Code optimization and restructuring, general increase of speed

new schemativs for board layout V3

lots of bugfixes

Version 0.44

Added webserver functionality via SD card and various other improvements from GitHub user dukess

Added JSON output for MQTT

mobile friendlier web interface

more parameters and device families

last version completely tested on Mega 2560. Future versions may still run on the Mega, but will only be tested on the Arduino Due.

Version 0.43

Added support for HardwareSerial (Serial1) connection of the adapter. Use RX pin 19 in bus() definition to activate. See manual/forum for
hardware details.

Added definement DebugTelnet to divert serial output to telnet client (port 23, no password) in BSB_lan_config.h

Added possibility to control BSB-LAN (almost?) completely via USB-serial port. Most commands supported like their URL-counterparts, i.e.
//xxx to query parameter xxx or //N to restart Arduino.

Changed default device ID from 6 (room controller "RGT1") to unused ID 66 ("LAN")

Many new parameters, please run /Q to see any possible changes for your device family and report back to us!

Added global variables (arrays of 20 bytes) custom_floats[] and custom_longs[] for use with BSB_lan_custom.h, for example to read sensors
etc. Output of these variables is done via new URL command /U

Added device families 23 and 29 (Grünenwald heaters)

Added device families 49, 52, 59 (Weishaupt heaters)

Added device fmilies 91, 92, 94, 118, 133, 136, 137, 165, 184, 188 (various controllers like QAA75 or AVS37)

Added device family 171 (Bösch wood pellet system)

Added device family 172 (SensoTherm BLW Split B (RVS21.826F/200))

Added device families 186 and 164 (Olymp WHS-500)

Added device family 195 variant 2 (Thision 19 Plus / LMS14.111B109)

Including DHT, 1Wire and burner status parameters (>20000) to MQTT

English is now default language

Updated various translations

Added STL files to print a case with a 3D printer (thanks to FHEM user EPo!)

Moved all sensors to /T , /H is now no longer used

New virtual parameters 702/703 for Weishaupt room controller

New virtual parameter 10003 to set outside temperature on newer systems

Added text descriptions for error phases (6706 ff.)

/Q is now more comprehensive

New data types VT_CUSTOM_ENUM and VT_CUSTOM_BYTE to extract information from non-standard telegrams (such as 702/703)

Bugfix: DHCP (ethernet) implementation

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 220/230


Version 0.42

Added localization! Now you can help translate BSB-LAN into your language! Simply copy one of the language files from the localization
folder (LANG_DE.h is the most complete) and translate whatever you can. Non-translated items will be displayed in German. Attention:
Language definition in BSB_lan_config.h is now #define LANG For example: #define LANG DE

Added export to MQTT broker, use log_parameters[] in BSB_lan_config.h to define parameters and activate MQTTBrokerIP definement.

Added support for WiFi modules such as an ESP8266 or a Wemos Mega connected to Serial3 (RX:15/TX:14) of the Arduino. The ESP8266
has to be flashed with the AT firmware from Espressif to work. Please take note that WiFi over serial is by design much slower (only
115kpbs) than "pure" TCP/IP connections.

Added new category "34 - Konfiguration / Erweiterungsmodule". All subsequent categories move one number up!

Lots of new parameters coming from device family 123, please run /Q to see if some parameters also work for your heater!

Lots of new yet unknown parameters through brute force querying :) (parameter numbers 10200 and above)

Added further PPS-Bus commands, moved parameter numbers to 15000 and above

Default PPS mode now "listening". Use third parameter of bus definition to switch between listening and controlling, 1 stands for controlling,
everything else for listening, i.e. BSB bus(68,67,1) sends data to the heater, BSB bus(68,67) only receives data from heater / room
controller. You can switch between modes at run-time with URL command /P2,x where x is either 1 (for controlling) or not 1 (for listening
only)

Fixed bug that crashed PPS bus queries

Stability improvements for PPS bus

Improved graph legend when plotting several parameters

Added JSON export; query with /JQ=a,b,c,d... or push queries to /JQ or push set commands to /JS

Logging of MAX! parameters now possible with logging parameter 20007

Added Waterstage WP device family (119)

Added WHG Procon device family (195)

Added unit to log file as well as average output

Rewrote device matching in cmd_tbl to accomodate also device variant (Gerätevariante). Run /Q to see if transition has worked for your
device!

Added BSB_lan_custom_setup.h and BSB_lan_custom_global.h for you to add individual code (best used in conjunction with
BSB_lan_custom.h)

Marked all (known) OEM parameters with flag FL_OEM. OEM parameters are set by default as read-only. To make them writeable, change
FL_OEM from 5 to 4 in BSB_lan_defs.h

Increased performance for querying several parameters at once (similar to category query)

Added config option to define subnet.

/Q no longer needs #define DEBUG

Bugfix ENUM memory adressing

Bugfix in reset function (/N), clear EEPROM during reset with /NE

Added favicon.ico

Split of cmdtbl into cmdtbl1 and cmdtbl2 due to Arduino's(?) limit of 32kB size of struct, opening up more space for new parameters.

Version 0.41

Interim release containing all changes from 0.42 above, except locaization, i.e. all text fragments are still part of the main code.

Version 0.40 -- 21.01.2018

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 221/230


Implemented polling of MAX! heating thermostats, display with URL command /X. See BSB_lan_custom.h for an example to transmit
average room temperature to heating system.

Added new category \"22 - Energiezähler\" - please note that all subsequent categories move one up!

New virtual parameter 1601 (manual TWW push)

Added Fujitsu Waterstage WSYP100DG6 device family (211)

Added CTC device family (103)

New definement \"#define TRUSTED_IP2\" to grant access to a second local IP address

Added optional definement \"#define GatewayIP\" in BSB_lan_config.h to enable setting router address different from x.x.x.1

Removed parameter 10109 because it is the same as 10000

Added function to check all known CommandIDs on your own heating system. Use /Q after enabling definement \"#define DEBUG\" in
BSB_lan_config.h

Added parameter numbers to category menu

Updated analyze.sh

hopefully fixing the memory issue

Moved HTML strings to html_strings.h

Version 0.39 -- 02.01.2018

Implementation of PPS-Bus protocol. See /K40 for the limited commands available for this bus. Use setBusType(2) to set to PPS upon boot
or /P2 to switch temporarily.

Set GPIOs to input by using /Gxx,I

Definement \"#define CUSTOM_COMMANDS\" added. Use this in your configuration to include individual code from \"BSB_lan_custom.h\"
(needs to be created by you!) which is executed at the end of each main loop. Variables \"custom_timer\" and \"custom_timer_compare\"
have been added to execute code at arbitrary intervals.

Added LogoBloc Unit L-UB 25C device family (95)

several new parameters added

Bugfix for logging Brennerlaufzeit Stufe 2

Version 0.38 -- 22.11.2017 ATTENTION: New BSB_lan_config.h configurations! You need to adjust your configuration when upgrading to this
version!

Webserver port is now defined in #define Port xx

IP address is now defined in #define IPAddr 88,88,88,88 form - note the commas instead of dots!

Special log parameters 20002 to 20006 have changed, see BSB_lan_config.h for their new meaning

Added new virtual parameter 701 (Präsenztaste) which enters reduced temperature mode until next timed switch

Added Brötje BOB device family (138), including many new parameters!

Added Brötje SOB26 device family (28)

Added Elco Aquatop 8es device family (85)

Added Elco Thision 13 Plus device family (203)

Added Weishaupt WTU 25-G familiy (50)

Added output for absolute humidity (g/m3) for DHT22 sensors

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 222/230


New schematics for Arduino/Raspberry board layout

Included support for W5500 Ethernet2 shields. Activate definement ETHERNET_W5500 in BSB_lan_config.h

Including two-stage oil furnaces BC-counters and logging - please note that logging parameters have been adjusted, see BSB_lan_config.h
for new values!

Added new options for commands /P and /S to allow specifying a different destination device during runtime

Added new configuration definement CUSTOM_COMMANDS which includes BSB_lan_custom.h at the end of each main loop. You may use
custom_timer (set to current millis()) and custom_timer_compare to execute only every x milliseconds.

Bugfixing SD-card logging in monitor mode

Bugfix for setting hour:time parameters via webinterface

Version 0.37 -- 08.09.2017

LPB implementation! More than 450 parameters supported! Switch temporarily between LPB and BSB with the Px command (0=BSB,
1=LPB) or use the setBusType config option to set bus-type at boot-time. Parameter numbers are the same as for BSB.

Version 0.36 -- 23.08.2017

bugfix: brought back VT_BIT list of options which were erroneously deleted :(, fixed/freed several memory issues

Version 0.35 -- 25.06.2017

new category \"Sitherm Pro\"; caution: category numbers all move up by one, starting from category \"Wärmepumpe\" (from 20 to 21)
onwards.

graph display of logging data now comes with crosshair and shows detailed values as tooltip

improved SD-card output by factor 3 (from 16 to 45 kbps), switching SD-card library from from SD.h to SdFat.h
(https://github.com/greiman/SdFat) brings another 10% performance boost

adjusted paths and directory layout of SdFat to enable compiling from sketch directory.

new data type vt_sint for signed int data, currently only used in some Sitherm Pro parameters

Version 0.34 -- 29.05.2017

Log data can now be displayed as graph

Webinterface can now display and set vt_bit type parameters in human-readable form

added KonfigRGx descriptions; caution: various sources used, no guarantee that descriptions match your individual heating system!

vt_bit is generally read-only in the webinterface. To set, use URL command /S with decimal representation of value

fixed a bug with vt_seconds_short5, affecting parameters 9500 and 9540.

fixed bug regarding Fujitsu\'s device family (from 127 to 170)

moved libraries from folder libraries to src so they can be included without copying them to the Arduino libraries folder

modified DallasTemperature.h\'s include path for OneWire.h

Version 0.33 -- 09.05.2017

no more heating system definements anymore due to new autodetect function based on device family (parameter 6225), or set device_id
variable to parameter value directly

two more security options: TRUSTED_IP to limit access to one IP address only, and HTTP authentication with username and password

Average values are saved on SD-card if present and LOGGER definement is activated

deactivate logging by setting /L0=0 - this way you can enable LOGGER definement without filling up SD card but still save average values

new error codes for THISION

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 223/230


added dump of data payload on website for commands of unknown type, greyed out unsopported parameters

enable logging of telegrams (log parameter 30000) also in monitor mode (bsb.cpp and bsb.h updated)

time from heating system is now retreived periodically from broadcast telegrams, further reducing bus activity

new data type vt_bit for parameters that set individual bits. Display as binary digits, setting still using decimal representation

new data type vt_temp_short5_us for unsigned one byte temperatures divided by 2 (so far only 887 Vorlaufsoll NormAussentemp)

new data type vt_percent5 for unsigned one byte temperatures divided by 2 (so far only 885 Pumpe-PWM Minimum)

new data type vt_seconds_word5 for two byte seconds divided by 2 (so far only 2232, 9500 and 9540)

new data type vt_seconds_short4 for (signed?) one byte seconds divided by 4 (so far only 2235)

new data type vt_seconds_short5 for (signed?) one byte seconds divided by 5 (so far only 9500, 9540)

new data type vt_speed2 for two byte rpm (so far only 7050)

cleaned up set() function from apparent duplicate cases

added cases for vt_temp_word, vt_seconds_word5, vt_temp_short, vt_temp_short5, vt_seconds_short4 to set() function

Version 0.32 -- 18.04.2017

lots of new parameters suppoerted

newly designed webinterface allows control over heating system without any additional software or cryptic URL commands. URL commands
of course are still available, so no need to change anything when using FHEM etc.

German webinterface available with definement LANG_DE

new URL-command /LB=x to log only broadcast messages (x=1) or all bus messages (x=0)

new URL-command /X to reset the Arduino (need to enable RESET definement in BSB_lan_config.h)

new logging parameters 20002 and 20003 for hot water loading times and cycles

moved DS18B20 logging parameters from 20010-20019 to 20200-20299 and DHT22 logging parameters from 20020-20029 to 20100 to
20199

moved average logging parameter from 20002 to 20004

set numerous parameters to read-only because that\'s what they obviously are (K33-36)

various bugfixes

Version 0.31 -- 10.04.2017

increased dumping of logfile by factor 5 / as long as we still have memory left, you can increase logbuflen from 100 to 1000 to increase
transfer speed from approx. 16 to 18 kB/s

adjusted burner activity monitoring based on broadcast messages for Brötje systems

removed definement PROGNR_5895 because so far, it has only disabled an ENUM definition.

removed definement PROGNR_6030 because double command ID could be resolved via BROETJE / non-BROETJE definements

renamed BROETJE_SOB to BROETJE in order to allow for fine-grained distinction between different BROETJE cases (e.g. 6800ff). This
means you have to activate TWO definements when using a Brötje system now: The general BROETJE as well as BROETJE_SOB or
BROETJE_BSW. Have a look at your serial log for parameters 6800 to see which command IDs fit your system and activate one of both
accordingly.

changed 16-Bit addressing of flash memory to 32-Bit to address crashes due to ever growing PROGMEM tables - now we have lots of air to
breathe again for new command IDs :)

removed trailing \0 string from several ENUMs that led to wrong ENUM listings. Please keep in mind not to end ENUMs with a trailing \0 !

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 224/230


Version 0.30 -- 22.03.2017

Time library by Paul Stoffregen ( https://github.com/PaulStoffregen/Time) is now required and included in the library folder.

adds logging of raw telegram data to SD card with logging parameter

Logging telegram data is affected by commands /V and /LU

adds command /LU=x to log only known (x=0) or unknown (x=1) command IDs when logging telegram data

removed define USE_BROADCAST, broadcast data is now always processed

new internal functions GetDateTime, TranslateAddr, TranslateType

Version 0.29 -- 07.03.2017

adds command /C to display current configuration

adds command /L to configure logging interval and parameters

adds option for command /A to set 24h average parameters during runtime

adds special parameter 20002 for logging /A command (24h averages, only makes sense for long logging intervals)

bugfixes for logging DS18B20 sensors

Version 0.28 -- 05.03.2017

adds special parameters 20000++ for SD card logging of /B, /T and /H commands (see BSB_lan_config.h for examples)

adds version info to BSB_LAN web interface

Version 0.27 -- 01.03.2017

adds date field to log file (requires exact time to be sent by heating system)

/D0 recreates datalog.txt file with table header

added \"flags\" field to command table structure. Currently, only FL_RONLY is supported to make a parameter read-only

added DEFAULT_FLAG in config. Defaults to NULL, i.e. all fields are read/writeable. Setting it to FL_RONLY makes all parameters read-
only, e.g. for added level of security. Individual parameters can be set to NULL/FL_RONLY to make only these parameters writable/read-
only.

Version 0.26 -- 27.02.2017

added functionality for logging on micro SD card, using the slot of the w5100 Ethernet shield

more parameters added (e.g. 8009)

Version 0.25 -- 21.02.2017

more FUJITSU parameters added

Version 0.24 -- 14.02.2017

updated README with added functions

added German translations of FAQ and README, courtesy of Ulf Dieckmann

Version 0.23 -- 12.02.2017

minor bugfix

Version 0.22 -- 07.02.2017

more FUJITSU parameters

(hopefully) correct implementation of VT_VOLTAGE readings

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 225/230


minor bugfixes

Version 0.21 -- 06.02.2017

added numerous parameters for Fujitsu Wärmepumpe, including new #define FUJITSU directive to activate these parameters due to
different parameter numbers

minor bugfixes

Version 0.20 -- 27.01.2017

added more parameters for Feststoffkessel

minor bugfixes

Version 0.19 -- 01.01.2017

added humidity command \"H\", currently for DHT22 sensors

added 24h average command \"A\", define parameters in BSB_lan_config.h

removed trailing whitespace from menu strings

fixed command id 0x053D04A2 for THISION heaters

included Rob Tillaart\'s DHT library because there are various libraries implementing the protocol and this one is used in the code for its
ability to address multiple sensors with one object.

removed /temp URL parameter as it is a duplicate of /T

included loop to display DHT22 sensors in IPWE

making compiling IPWE extensions optional (#define IPWE)

Version 0.18 -- 22.12.2016

split off configuration into bsb_lan_config.h

split off command definitions into bsb_lan_defs.h

changed GPIO return values from LOW/HIGH to 1/0

reactivated and updated IPWE (define parameters in config)

check for protected pins when accessing GPIO (define in config)

added schematics and PCB files to new subfolder \"schematics\"

Version 0.17a -- 20.12.2016

minor errors corrected

Version 0.17 -- 20.12.2016

merged v0.16 with FHEM user miwi\'s changes

Version 0.16 -- 20.11.2016

removed IPWE and EthRly interface

added GPIO interface

merged parameters from J.Weber

resolved duplicate command IDs

Version 0.15a -- 25.07.2016

collated the commands from a Python project and this project, merged the two versions, corrected obvious errors. Inserted hypothetical
numerical values in ENUM definitions where Broetje manuals documented only the message texts.

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 226/230


added information from traces in a Broetje installation with an ISR-SSR controller and a WOB 25C oil furnace.

Version 0.15 -- 21.04.2016

added Solar and Pufferspeicher from Elco Logon B & Logon B MM

Version 0.14 -- 04.04.2016

minor bugfixes for Broetje SOB

extended broadcast handling (experimental)

Version 0.13 -- 31.03.2016

change resistor value in receiving path from 4k7 to 1k5

added values 0x0f and 0x10 to Enum8005

fixed strings for Zeitprogramme

added timeout for sending a message (1 second)

added option T for querying one wire temperature sensors in mixed querys

added special handling for Broetje SOB

simplified settings

Version 0.12 -- 09.04.2015

added ONEWIRE_SENSORS to ipwe

fixed parameter decoding for ELCO Thision heating system

Version 0.11 -- 07.04.2015

fixed parameter decoding for ELCO Thision heating system

Version 0.10 -- 15.03.2015

added more parameters for ELCO Thision heating system

Version 0.9 -- 09.03.2015

added more parameters for ELCO Thision heating system

printTelegramm returns value string for further processing

Version 0.8 -- 05.03.2015

added parameters for ELCO Thision heating system

added IPWE extension

minor bugfixes

Version 0.7 -- 06.02.2015

added bus monitor functionality

Version 0.6 -- 02.02.2015

renamed SoftwareSerial to BSBSoftwareSerial

changed folder structure to enable simple build with arduino sdk

Version 0.5 -- 02.02.2015

bugfixes

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 227/230


added documentation (README)

added passkey feature

added R feature (query reset value)

added E feature (list enum values)

added setter for almost all value types

fixed indentation

added V feature to set verbosity for serial output

set baudrate to 115200 for serial output

redirecting favicon request

added some images of the BSB adapter

Version 0.1 -- 21.01.2015 -- initial version

Further on to appendix D
Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 228/230


Appendix D: Notes For Users Of The Outdated Setup Adapter v2 +
Mega 2560
Back to TOC
Back to appendix C

Appendix D: Notes For Users Of The Outdated Setup Adapter v2 +


Mega 2560
For users of the outdated setup, the following refers to some questions and points that need clarification or that need to be considered. If further
questions occur, please post your questions in the corresponding thread of the german FHEM forum .
Please understand, however, that we will not answer any questions that may arise, for example, about building an adapter v2 after the
changeover to adapter v3.
PCBs v2 are no longer available, state of the art is the combination adapter v4.x + Due/ESP32.

Note:
It is possible to use the adapter v2 with an ESP32 (after making some small changes). This way, one could use the current version of
BSB-LAN without the need to use a new adapter. Please read chap. 1.3.3 for further informations.

Do I have to switch to the new setup adapter v3/v4 + Due?


No, if you are satisfied with the outdated setup and the range of functions of BSB-LAN has met your requirements so far, you can of course
continue to use the old setup.

Is there anything to consider regarding the BSB-LAN version?


Yes. The last 'officially' tested and recommended version for your setup is version v0.44! Within the zip-file there you'll also find the last
'Mega2560-specific' version of the manual (PDF).

But: It has been shown by several users that even the v1.1 still runs without major restrictions, but due to the lack of memory of the Mega
2560 probably already no longer with all available options that BSB-LAN offers.

Starting from v2.x it is then definitely necessary to deactivate some modules which BSB-LAN offers. Hints concerning this can be found in
chap. 5.2 or in the comments of the file BSB_LAN_config.h. Special attention should be paid to the last points, which offer a comfortable
deactivation of individual modules (e.g. Webconfig, MQTT, IPWE etc.) at central place.

What do I have to consider if I want to use the current v2.x?


As already mentioned you have to adjust the configuration in a way that it fits the smaller memory of the Mega 2560. Besides the already
mentioned deactivation of certain modules you have further possibilities:

1) You can reduce the size of some variables like PASSKEY[] , avg_parameters[] , log_parameters[] , ipwe_parameters[] ,
max_device_list[] for saving RAM (if you don't need as much parameters as maximum possible for example).

2) Within the file BSB_LAN_config.h you find a section at the end of the file where certain functions of BSB-LAN can be deactivated if you
don't use them anyway. Notes regarding this you'll find in the file itself.

3) Creating a controller specific BSB_LAN_defs.h:


There is a perlscript named selected_defs.pl and a Windows executable named selected_defs.exe in the repo that filters the file
BSB_LAN_defs.h for selected device families and creates a specific file for your own controller type. The saving is on average about 20 to
25 kB of flash memory, which can then be used for the (re-)activation of other functions. In case of a controller change (= other device
family) the file must of course be regenerated accordingly.
The script runs under Perl, which is installed by default on Mac and Linux computers, but can also be installed on Windows.

Procedure for creating a controller-specific defs file:

Retrieve parameter 6225 "Device family" via BSB-LAN and note the value.

Before executing, copy the file selected_defs.pl or selected_defs.exe respectively in the same folder, where the file BSB_LAN_defs.h is
located.

Open a terminal, enter the corresponding folder and create the reduced file named BSB_LAN_defs_filtered.h using the Perl script or the

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 229/230


Windows executable, which contains only the parameters relevant for the specific device family/families. If only one controller is
connected, for example with device family 162, the command is
./selected_defs.pl 162 > BSB_LAN_defs_filtered.h or
selected_defs.exe 162 > BSB_LAN_defs_filtered.h respectively.
If you have e.g. two devices on the bus with the device families 162 and 90, you can extend the command by the second value:
./selected_defs.pl 162 90 > BSB_LAN_defs_filtered.h or
selected_defs.exe 162 90 > BSB_LAN_defs_filtered.h respectively.

Move the original file BSB_LAN_defs.h from the "BSB_LAN" directory to a different location. Move the newly created file
BSB_LAN_defs_filtered.h to the directory "BSB_LAN" (if you didn't already create the file within that directory).

Important: Now rename the newly created file to "BSB_LAN_defs.h"!

Is there anything to consider regarding the settings of RX-/TX-pins?


Yes! If you still to test a newer version than v0.44 on the Mega, make sure that you use the corresponding file BSB_LAN_config.h.default
and adjust it accordingly:

With a version of BSB-LAN before v2.x it is absolutely necessary to adapt the line BSB bus(19,18); : The DUE uses (in contrast to the
Mega) the HardwareSerial interface and other RX/TX pins than the Mega, which is already preset here. When used with the Mega, the
line must therefore be changed to BSB bus(68,69); !

With a version of BSB-LAN since v2.x an automatic detection of the used pins is implemented. Therefore BSB-LAN autodetects if a
Mega (= software serial) or a Due (= hardware serial) is used.

Can I continue to use the Adapter v2 on a Due?


No! The reason for this is that neither the adapter v2 nor the Due has an EEPROM, which is necessary for BSB-LAN. So if you want to
benefit from the new functions of BSB-LAN in the future, you have to get an adapter v3/v4 or make it yourself and use it with an Arduino
Due.

Can I 'convert' the adapter v2 to an adapter v3/v4?


No! The primary reason for this is (among other reasons) again the missing EEPROM of the Due.

Can I continue to use the adapter v3/v4 with my previous Mega 2560?
No! Even if it would be possible after some changes to the adapter v3/v4, it would not offer any added value compared to the adapter v2.
New functions of BSB-LAN would still not be able to be used due to the lack of memory of the Mega 2560. So if you want to use the new
adapter v3/v4, then only in combination with an Arduino Due.

Why is there an EEPROM on the v3/v4 board?


The Arduino Due has no EEPROM, but this is necessary for BSB-LAN.

Can I continue to use the LAN-Shield if I change to the Due?


Yes, usually this is possible without any problems. A trouble-free usage of clones can't be guaranteed though.

Can I continue to use my existing housing?


Yes, the Due has the same form factor as the Mega 2560, so the dimensions of the case should fit. However, you will probably have to
adapt your case a bit and add a cutout or a large hole for the middle USB port of the Due ('Programming Port'), so that you can continue to
connect the corresponding USB cable comfortably.

Back to TOC

BSB-LPB-LAN Manual (c) Ulf Dieckmann | URL: https://1coderookie.github.io/BSB-LPB-LAN_EN 230/230

You might also like