Endlich hat die EU etwas für uns getan! Spaß beiseite.. Tatsächlich hat der European Data Act auch Bosch dazu gezwungen den Zugriff auf die Daten der Wärmepumpe zu ermöglichen. Und zwar ohne Cloudservices und Boschs blöder App.
Ganz konkret geht es um das Modul "BOSCH Connect-Key K 40 RF", welches per LAN oder WLAN die Wärmepumpe mit dem Internet verbindet. Nun kann man per API (laut Bosch "zurzeit" nur lesend) auf die Daten der Wärmepumpe zugreifen.
Entdeckt habe ich die News in dem Blog von Matthias Röckl und gleich geprüft, ob mein Modul ebenfalls die Unterstützung hat. Man kann die Firmware des Connect-Keys in der Bosch-App "HomeCom" prüfen. Dort stand auch, dass das Modul nun die Daten per Local API anbietet. In dem Blog von Matthias ist gut beschrieben, wie man den Auth Token abrufen kann, mit dem die Anfragen an die Wärmepumpe autorisiert werden.
Hier ist Bosch-Doku dazu: https://github.com/bosch-home-comfort/api-docs/blob/main/docs/k-40-rf.md
Und so kann man dann z.B. alle Temperaturwerte abrufen (der JSON-Parser "jq" muss installiert sein):
1IP_ADDRESS=<Hier eintragen>
2TOKEN="Hier eintragen"
3
4# Fetch a resource and print "id: value unitOfMeasure" (skips endpoints not available on this system).
5get_temperature() {
6 local path="$1"
7 local response
8 response=$(curl \
9 --silent --fail \
10 --insecure \
11 --header "Authorization: Bearer ${TOKEN}" \
12 "https://${IP_ADDRESS}:9443${path}")
13
14 if [ -n "${response}" ]; then
15 echo "${response}" | jq -r '"\(.id): \(.value) \(.unitOfMeasure)"'
16 fi
17}
18
19# Temperature endpoints under /heatSources
20HEAT_SOURCE_TEMPS=(
21 "/heatSources/actualSupplyTemperature"
22 "/heatSources/currentSupplySetpoint"
23 "/heatSources/returnTemperature"
24 "/heatSources/dhw/cylinderTemperature"
25 "/heatSources/dhw/cylinderUpperTemp"
26 "/heatSources/additionalHeater/flowTemp"
27 "/heatSources/sensors/evaporatorTemp_tl1"
28 "/heatSources/sensors/evaporatorTemp_tl2"
29)
30
31# Per-heat-source temperature endpoints (looped over hs1..hs6)
32HEAT_SOURCE_ID_TEMPS=(
33 "returnFlowTemp"
34 "supplyFlowCondenserTemp"
35 "refrigerant/compressorTemp"
36 "refrigerant/liquidPipeCoolingTemp"
37 "refrigerant/liquidPipeHeatingTemp"
38 "refrigerant/lowPressureTemp"
39 "refrigerant/highPressureTemp"
40 "refrigerant/hotGasTemp"
41 "refrigerant/suctionGasTemp"
42 "brineCircuit/collectorInflowTemp"
43 "brineCircuit/collectorOutflowTemp"
44)
45
46for path in "${HEAT_SOURCE_TEMPS[@]}"; do
47 get_temperature "${path}"
48done
49
50for hs in hs1 hs2 hs3 hs4 hs5 hs6; do
51 for sub in "${HEAT_SOURCE_ID_TEMPS[@]}"; do
52 get_temperature "/heatSources/${hs}/${sub}"
53 done
54done
Ich bin gespannt, wann die offizielle Home Assistant Integration verfügbar sein wird 🤩
🛎️ Update vom 11.10.26: Auf der Seite von Bosch ist mehr zu den Schnittstellen beschrieben, es soll noch ein WebAPI kommen: https://www.bosch-homecomfort.com/de/de/wohngebaeude/wissen/sektorenkopplung/schnittstellen/
Einbinden in Home Assistant
Man kann solange die offizielle Integration von Home Assistant nicht da ist, schon mal mit dem Rest-Sensor auf die Daten zugreifen:
Einbinden in configuration.yaml
1sensor: !include bosch-heatpump.yaml
Datei bosch-heatpump.yaml
1- platform: rest
2 <<: &bosch_base
3 verify_ssl: false
4 headers:
5 # Adjust the header key/format if the Bosch API requires something other than Bearer
6 Authorization: "Bearer XXXXXX-REPLACE_WITH_YOUR_TOKEN-XXXXXXXX"
7 state_class: measurement
8 scan_interval: 300
9 name: "Bosch HP Actual Supply Temperature"
10 value_template: "{{ value_json.value }}"
11 unit_of_measurement: "°C"
12 resource: "https://REPLACE-WITH-YOUR-IP:9443/heatSources/actualSupplyTemperature"
13
14- platform: rest
15 <<: *bosch_base
16 name: "Bosch HP Return Temperature"
17 device_class: temperature
18 unit_of_measurement: "°C"
19 value_template: "{{ value_json.value }}"
20 resource: "https://REPLACE-WITH-YOUR-IP:9443/heatSources/returnTemperature"
21
22- platform: rest
23 <<: *bosch_base
24 name: "Bosch HP DHW Cylinder Temperature"
25 device_class: temperature
26 unit_of_measurement: "°C"
27 value_template: "{{ value_json.value }}"
28 resource: "https://REPLACE-WITH-YOUR-IP:9443/heatSources/dhw/cylinderTemperature"
29
30- platform: rest
31 <<: *bosch_base
32 name: "Bosch HP Additional Heater Flow Temp"
33 device_class: temperature
34 unit_of_measurement: "°C"
35 value_template: "{{ value_json.value }}"
36 resource: "https://REPLACE-WITH-YOUR-IP:9443/heatSources/additionalHeater/flowTemp"
37
38- platform: rest
39 <<: *bosch_base
40 name: "Bosch HP Number Of Starts"
41 value_template: "{{ value_json.value | int }}"
42 resource: "https://REPLACE-WITH-YOUR-IP:9443/heatSources/numberOfStarts"