esphome / esphome/feature-requests

Support for Zehnder BT-enabled heating radiator

Open
#1,391 0 comments 0 reactions 0 assignees View on GitHub
component: ble_client
Dominant language
No language data
Stars
450
Forks
29
PR merge metrics
No merged PRs in 30d

Description

**Describe the problem you have/What new integration you would like**

I have a Zehnder heating unit that is equipped with a bluetooth module and can be programmed via the Zehnder Control app (https://play.google.com/store/apps/details?id=com.zehndergroup.zehndercontrol&hl=en&gl=US)

I would like to be able to control the radiator via one of my nearby ESPHome devices.

**Please describe your use case for this integration and alternatives you've tried:**

The heating unit is properly detected by ESPHome, the ble_client module shows this, but it does not tell me too much:
```
[13:56:22][I][ble_client:083]: Attempting BLE connection to f6:03:03:20:fd:f3
[13:56:23][I][ble_client:159]: Service UUID: 0x1801
[13:56:23][I][ble_client:160]: start_handle: 0x1 end_handle: 0x4
[13:56:23][I][ble_client:339]: characteristic 0x2A05, handle 0x3, properties 0x20
[13:56:23][I][ble_client:159]: Service UUID: 0x1800
[13:56:23][I][ble_client:160]: start_handle: 0x5 end_handle: 0xb
[13:56:23][I][ble_client:339]: characteristic 0x2A00, handle 0x7, properties 0x4e
[13:56:23][I][ble_client:339]: characteristic 0x2A01, handle 0x9, properties 0x4e
[13:56:23][I][ble_client:339]: characteristic 0x2A04, handle 0xb, properties 0x2
[13:56:23][I][ble_client:159]: Service UUID: 03366E80-CF3A-11E1-9AB4-0002A5D5C51B
[13:56:23][I][ble_client:160]: start_handle: 0xc end_handle: 0xe
[13:56:23][I][ble_client:339]: characteristic 350A1B80-CF4B-11E1-AC36-0002A5D5C51B, handle 0xe, properties 0x8
[13:56:23][I][ble_client:159]: Service UUID: 03366E80-CF3A-11E1-9AB5-0002A5D5C51B
[13:56:23][I][ble_client:160]: start_handle: 0x13 end_handle: 0x16
[13:56:23][I][ble_client:339]: characteristic 350A1B80-CF4B-11E1-AC37-0002A5D5C51B, handle 0x15, properties 0x1a
````

afterwards i tried to get the values of the individual characteristics via BLE client sensors:
```
sensor:
- platform: ble_client
ble_client_id: zehnder
name: "1801_2A05"
service_uuid: '1801'
characteristic_uuid: '2A05'
- platform: ble_client
ble_client_id: zehnder
name: "1800_2A00"
service_uuid: '1800'
characteristic_uuid: '2A00'
- platform: ble_client
ble_client_id: zehnder
name: "1800_2A01"
service_uuid: '1800'
characteristic_uuid: '2A01'
- platform: ble_client
ble_client_id: zehnder
name: "1800_2A04"
service_uuid: '1800'
characteristic_uuid: '2A04'
- platform: ble_client
ble_client_id: zehnder
name: "Info 3"
service_uuid: '03366E80-CF3A-11E1-9AB4-0002A5D5C51B'
characteristic_uuid: '350A1B80-CF4B-11E1-AC36-0002A5D5C51B'
- platform: ble_client
ble_client_id: zehnder
name: "Info 4"
service_uuid: '03366E80-CF3A-11E1-9AB5-0002A5D5C51B'
characteristic_uuid: '350A1B80-CF4B-11E1-AC37-0002A5D5C51B'
```

It seems to provide constant values regardless of what the radiator is doing (tried tinkering with the thermostat, enabling the 2h heating mode and so..):
```
1801_2A05: (no info)
1800_2A00: 84
1800_2A01: 0
1800_2A04: 255
Info 3: (no info)
Info 4: 0
```

Error messages that keep appearing in the logs:
```
[W][ble_sensor:082]: Error reading char at handle 14, status=2
[W][ble_sensor:082]: Error reading char at handle 3, status=2

```

I have also tried to sniff the BT communication between the phone and the heater via Wireshark - see the attached logs
[zehnder_bt_sniff.log](https://github.com/esphome/feature-requests/files/7090869/zehnder_bt_sniff.log)

I am not too familiar with the technical aspects of bluetooth communication, so if anyone would be kind enough to look into this and let me know what additional data is needed I am happy to provide them.

**Additional context**

Contributor guide

No contributing guide indexed for this repository

Research direction

Start by examining the attached zehnder_bt_sniff.log and the listed BLE service and characteristic UUIDs, then review the ble_client configuration shown in the issue. Done means the Zehnder radiator can be controlled through an ESPHome device and its changing state is represented reliably rather than only returning constant values.

Written by the indexing model from the issue text.

Assessment

Domain
embedded-iot
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
20/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.