(Developed and written with the help of ChatGPT)
Viessmann ViCare: RoomControl room temperatures are available via API but not exposed in Home Assistant
The problem
The Viessmann ViCare integration detects my E3 RadiatorActuator devices, but does not expose the actual room temperatures shown in the ViCare app.
The radiator actuators themselves expose trv.temperature, but these values do not correspond to the room temperatures displayed in the ViCare app.
After investigating the Viessmann API and PyViCare, I found that the actual room temperatures are provided by a separate virtual device:
deviceId: RoomControl-1
modelId: E3_RoomControl_One_05
deviceType: roomControl
with roles including:
interface:smartRoomControl;rooms
interface:smartRoomControl;roomsOthers
type:virtual;smartRoomControl
The actual room temperatures are available as features such as:
rooms.0.sensors.temperature
rooms.1.sensors.temperature
rooms.2.sensors.temperature
...
For example, querying:
/iot/v2/features/installations/{installationId}/gateways/{gatewaySerial}/devices/RoomControl-1/features/rooms.2.sensors.temperature
returns:
{
"feature": "rooms.2.sensors.temperature",
"deviceId": "RoomControl-1",
"isEnabled": true,
"isReady": true,
"properties": {
"status": {
"type": "string",
"value": "connected"
},
"value": {
"type": "number",
"value": 23.4,
"unit": "celsius"
}
}
}
These values correspond to the temperatures displayed in the ViCare app.
Cause
I believe the issue originates in PyViCare's device discovery.
PyViCare.__extract_devices() currently filters devices by deviceType:
if device.deviceType not in [
"heating",
"zigbee",
"vitoconnect",
"electricityStorage",
"tcu",
"ventilation",
]:
continue
Since RoomControl-1 has:
it is discarded during device discovery.
I tested adding "roomControl" to this list:
if device.deviceType not in [
"heating",
"zigbee",
"vitoconnect",
"electricityStorage",
"tcu",
"ventilation",
"roomControl",
]:
continue
With this change, PyViCare successfully discovers:
id=RoomControl-1
model=E3_RoomControl_One_05
type=roomControl
Using the resulting PyViCareDeviceConfig.service, the room temperature can then be read successfully.
For example:
room_control.service.getProperty(
"rooms.2.sensors.temperature"
)
returns the expected temperature feature.
Even better, ViCareCachedService.fetch_all_features() can retrieve all RoomControl features with a single API request. The room temperature features can then be selected from the response:
rooms.<room_id>.sensors.temperature
This avoids making a separate API request for every room.
Proof of concept
I created a small Home Assistant custom integration that reuses the OAuth manager from the existing ViCare integration:
existing_client = vicare_entry.runtime_data.client
client = MyPyViCare()
client.setCacheDuration(existing_client.cacheDuration)
await hass.async_add_executor_job(
client.initWithExternalOAuth,
existing_client.oauth_manager,
)
where MyPyViCare only changes __extract_devices() to include deviceType == "roomControl".
This successfully discovers RoomControl-1.
Calling fetch_all_features() on its service returns, among others:
rooms.0.sensors.temperature -> 22.8 °C
rooms.1.sensors.temperature -> 23.2 °C
rooms.2.sensors.temperature -> 23.4 °C
rooms.3.sensors.temperature -> 26.3 °C
rooms.4.sensors.temperature -> 24.7 °C
rooms.5.sensors.temperature -> 25.2 °C
rooms.6.sensors.temperature -> 24.7 °C
I then exposed these values as regular Home Assistant temperature sensors. This is working successfully.
Expected behavior
roomControl devices should be supported by PyViCare/Home Assistant and their:
rooms.<room_id>.sensors.temperature
features should be exposed as Home Assistant temperature sensor entities.
Ideally, all room-related features should be fetched in one request using fetch_all_features() to minimize Viessmann API usage.
Environment
Home Assistant:
Home Assistant Core: 2026.3.1
Home Assistant OS: 17.2
Architecture: aarch64
ViCare integration:
Viessmann devices involved:
E3_RoomControl_One_05
E3_RadiatorActuator
Vitocal 250-A
Additional observation
The trv.temperature feature exposed by individual E3_RadiatorActuator devices should not be assumed to be equivalent to the room temperature shown in the ViCare app.
In my installation, the TRVs reported values such as 18–19 °C while the corresponding RoomControl-1 room features reported values around 23–26 °C. The latter correspond to the temperatures displayed by the ViCare app.
(Developed and written with the help of ChatGPT)
Viessmann ViCare: RoomControl room temperatures are available via API but not exposed in Home Assistant
The problem
The Viessmann ViCare integration detects my E3 RadiatorActuator devices, but does not expose the actual room temperatures shown in the ViCare app.
The radiator actuators themselves expose
trv.temperature, but these values do not correspond to the room temperatures displayed in the ViCare app.After investigating the Viessmann API and PyViCare, I found that the actual room temperatures are provided by a separate virtual device:
with roles including:
The actual room temperatures are available as features such as:
For example, querying:
returns:
{ "feature": "rooms.2.sensors.temperature", "deviceId": "RoomControl-1", "isEnabled": true, "isReady": true, "properties": { "status": { "type": "string", "value": "connected" }, "value": { "type": "number", "value": 23.4, "unit": "celsius" } } }These values correspond to the temperatures displayed in the ViCare app.
Cause
I believe the issue originates in PyViCare's device discovery.
PyViCare.__extract_devices()currently filters devices bydeviceType:Since
RoomControl-1has:it is discarded during device discovery.
I tested adding
"roomControl"to this list:With this change, PyViCare successfully discovers:
Using the resulting
PyViCareDeviceConfig.service, the room temperature can then be read successfully.For example:
returns the expected temperature feature.
Even better,
ViCareCachedService.fetch_all_features()can retrieve all RoomControl features with a single API request. The room temperature features can then be selected from the response:This avoids making a separate API request for every room.
Proof of concept
I created a small Home Assistant custom integration that reuses the OAuth manager from the existing ViCare integration:
where
MyPyViCareonly changes__extract_devices()to includedeviceType == "roomControl".This successfully discovers
RoomControl-1.Calling
fetch_all_features()on its service returns, among others:I then exposed these values as regular Home Assistant temperature sensors. This is working successfully.
Expected behavior
roomControldevices should be supported by PyViCare/Home Assistant and their:features should be exposed as Home Assistant temperature sensor entities.
Ideally, all room-related features should be fetched in one request using
fetch_all_features()to minimize Viessmann API usage.Environment
Home Assistant:
ViCare integration:
Viessmann devices involved:
Additional observation
The
trv.temperaturefeature exposed by individualE3_RadiatorActuatordevices should not be assumed to be equivalent to the room temperature shown in the ViCare app.In my installation, the TRVs reported values such as 18–19 °C while the corresponding
RoomControl-1room features reported values around 23–26 °C. The latter correspond to the temperatures displayed by the ViCare app.