Skip to content

Viessmann ViCare: RoomControl room temperatures are available via API but not exposed in Home Assistant #812

Description

@hkarl

(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:

deviceType = roomControl

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:

PyViCare: 2.58.0

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions