From 90d38a3403752ac1585bcf278c392f896aff66e5 Mon Sep 17 00:00:00 2001 From: Tobin Rosenau Date: Thu, 4 Apr 2024 16:50:02 +0000 Subject: [PATCH 01/27] add test and response for Vitoladens 300-C --- tests/response/Vitoladens300-C_J3RA.json | 2057 ++++++++++++++++++++++ tests/test_Vitoladens300C.py | 26 + 2 files changed, 2083 insertions(+) create mode 100644 tests/response/Vitoladens300-C_J3RA.json create mode 100644 tests/test_Vitoladens300C.py diff --git a/tests/response/Vitoladens300-C_J3RA.json b/tests/response/Vitoladens300-C_J3RA.json new file mode 100644 index 00000000..74a79df6 --- /dev/null +++ b/tests/response/Vitoladens300-C_J3RA.json @@ -0,0 +1,2057 @@ +{ + "data": [ + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "device.messages.errors.raw", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "entries": { + "type": "array", + "value": [] + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/device.messages.errors.raw" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "device.serial", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "################" + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/device.serial" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.boiler.sensors.temperature.commonSupply", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.boiler.sensors.temperature.commonSupply" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.boiler.sensors.temperature.main", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 42 + } + }, + "timestamp": "2024-04-04T16:13:16.946Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.boiler.sensors.temperature.main" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.boiler.serial", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "################" + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.boiler.serial" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.boiler.temperature", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "number", + "unit": "celsius", + "value": 40.3 + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.boiler.temperature" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.burners", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "enabled": { + "type": "array", + "value": [ + "0" + ] + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.burners" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.burners.0.modulation", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "number", + "unit": "percent", + "value": 0 + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.burners.0.modulation" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.burners.0.statistics", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "hours": { + "type": "number", + "unit": "hour", + "value": 4222.5 + }, + "starts": { + "type": "number", + "unit": "", + "value": 29098 + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.burners.0.statistics" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.burners.0", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.burners.0" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "enabled": { + "type": "array", + "value": [ + "1" + ] + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.circulation.pump", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.circulation.pump" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.circulation.pump", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "on" + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.circulation.pump" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.circulation.pump", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.circulation.pump" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.dhw.pumps.circulation.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.dhw.pumps.circulation.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.dhw.pumps.circulation.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.dhw.pumps.circulation.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.dhw.pumps.circulation.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.dhw.pumps.circulation.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.dhw.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.dhw.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.dhw.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.dhw.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.dhw.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.dhw.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.frostprotection", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.frostprotection" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.frostprotection", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.frostprotection" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.frostprotection", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.frostprotection" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.heating.curve", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.heating.curve" + }, + { + "apiVersion": 1, + "commands": { + "setCurve": { + "isExecutable": true, + "name": "setCurve", + "params": { + "shift": { + "constraints": { + "max": 40, + "min": -13, + "stepping": 1 + }, + "required": true, + "type": "number" + }, + "slope": { + "constraints": { + "max": 3.5, + "min": 0.2, + "stepping": 0.1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.curve/commands/setCurve" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.heating.curve", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "shift": { + "type": "number", + "unit": "", + "value": 13 + }, + "slope": { + "type": "number", + "unit": "", + "value": 0.5 + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.curve" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.heating.curve", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.heating.curve" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.heating.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.heating.schedule" + }, + { + "apiVersion": 1, + "commands": { + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "reduced", + "maxEntries": 4, + "modes": [ + "normal" + ], + "overlapAllowed": true, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule/commands/setSchedule" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.heating.schedule", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "mon": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "sat": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "sun": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "thu": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "tue": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "wed": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ] + } + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.heating.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.heating.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.active", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:11:15.947Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.active" + }, + { + "apiVersion": 1, + "commands": { + "setMode": { + "isExecutable": true, + "name": "setMode", + "params": { + "mode": { + "constraints": { + "enum": [ + "dhw", + "dhwAndHeating", + "forcedNormal", + "forcedReduced", + "standby" + ] + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.active/commands/setMode" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.active", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "dhwAndHeating" + } + }, + "timestamp": "2024-04-04T16:11:15.947Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.active", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:11:15.947Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.dhw", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhw" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.dhw", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-04-04T16:11:15.947Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhw" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.dhw", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhw" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.dhwAndHeating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhwAndHeating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.dhwAndHeating", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + } + }, + "timestamp": "2024-04-04T16:11:15.947Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhwAndHeating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.dhwAndHeating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhwAndHeating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.forcedNormal", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.forcedNormal" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.forcedNormal", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.forcedNormal" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.forcedNormal", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.forcedNormal" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.forcedReduced", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.forcedReduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.forcedReduced", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.forcedReduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.forcedReduced", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.forcedReduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.heating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.heating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.heating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:11:15.947Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.heating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.heating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.heating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.standby", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.standby", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.standby", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.active", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.active", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "normal" + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.active", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.comfort", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfort" + }, + { + "apiVersion": 1, + "commands": { + "activate": { + "isExecutable": true, + "name": "activate", + "params": { + "temperature": { + "constraints": { + "max": 37, + "min": 4, + "stepping": 1 + }, + "required": false, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort/commands/activate" + }, + "deactivate": { + "isExecutable": true, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort/commands/deactivate" + }, + "setTemperature": { + "isExecutable": true, + "name": "setTemperature", + "params": { + "targetTemperature": { + "constraints": { + "max": 37, + "min": 4, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort/commands/setTemperature" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.comfort", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "demand": { + "type": "string", + "value": "unknown" + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 22 + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.comfort", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfort" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.eco", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.eco" + }, + { + "apiVersion": 1, + "commands": { + "activate": { + "isExecutable": true, + "name": "activate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco/commands/activate" + }, + "deactivate": { + "isExecutable": true, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco/commands/deactivate" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.eco", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 21 + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.eco", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.eco" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.external", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.external" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.external", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "temperature": { + "type": "number", + "unit": "", + "value": 0 + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.external" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.external", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.external" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.holiday", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.holiday" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.holiday", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.holiday" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.holiday", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.holiday" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.normal", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normal" + }, + { + "apiVersion": 1, + "commands": { + "setTemperature": { + "isExecutable": true, + "name": "setTemperature", + "params": { + "targetTemperature": { + "constraints": { + "max": 37, + "min": 3, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normal/commands/setTemperature" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.normal", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "demand": { + "type": "string", + "value": "unknown" + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 21 + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normal" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.normal", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normal" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.reduced", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reduced" + }, + { + "apiVersion": 1, + "commands": { + "setTemperature": { + "isExecutable": true, + "name": "setTemperature", + "params": { + "targetTemperature": { + "constraints": { + "max": 37, + "min": 3, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reduced/commands/setTemperature" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.reduced", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "demand": { + "type": "string", + "value": "unknown" + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 19 + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.reduced", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.standby", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.standby", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.standby", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.sensors.temperature.room", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.room" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.sensors.temperature.room", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.room" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.sensors.temperature.room", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.room" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.sensors.temperature.supply", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:13:18.587Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.supply" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.sensors.temperature.supply", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 40.5 + } + }, + "timestamp": "2024-04-04T16:16:41.835Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.supply" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.sensors.temperature.supply", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.supply" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0" + }, + { + "apiVersion": 1, + "commands": { + "setName": { + "isExecutable": false, + "name": "setName", + "params": { + "name": { + "constraints": { + "maxLength": 20, + "minLength": 1 + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1/commands/setName" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "name": { + "type": "string", + "value": "" + }, + "type": { + "type": "string", + "value": "heatingCircuit" + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.controller.serial", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "################" + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.controller.serial" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-04-04T16:11:15.947Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.charging", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-04-04T16:11:15.947Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.charging" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.pumps.circulation", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "on" + } + }, + "timestamp": "2024-04-04T16:11:15.947Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.circulation" + }, + { + "apiVersion": 1, + "commands": { + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "off", + "maxEntries": 4, + "modes": [ + "on" + ], + "overlapAllowed": true, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule/commands/setSchedule" + } + }, + "deviceId": "0", + "feature": "heating.dhw.pumps.circulation.schedule", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "mon": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "sat": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "sun": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "thu": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "tue": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "wed": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ] + } + } + }, + "timestamp": "2024-04-04T16:11:15.947Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.pumps.primary", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-04-04T16:11:15.947Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.primary" + }, + { + "apiVersion": 1, + "commands": { + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "off", + "maxEntries": 4, + "modes": [ + "on" + ], + "overlapAllowed": true, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.schedule/commands/setSchedule" + } + }, + "deviceId": "0", + "feature": "heating.dhw.schedule", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "mon": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "sat": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "sun": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "thu": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "tue": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "wed": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ] + } + } + }, + "timestamp": "2024-04-04T16:11:15.947Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.dhwCylinder", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 46.9 + } + }, + "timestamp": "2024-04-04T16:11:15.947Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.dhwCylinder" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.hotWaterStorage", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 46.9 + } + }, + "timestamp": "2024-04-04T16:11:15.947Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.outlet", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "error" + } + }, + "timestamp": "2024-04-04T16:11:15.947Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.outlet" + }, + { + "apiVersion": 1, + "commands": { + "setTargetTemperature": { + "isExecutable": true, + "name": "setTargetTemperature", + "params": { + "temperature": { + "constraints": { + "efficientLowerBorder": 10, + "efficientUpperBorder": 60, + "max": 60, + "min": 10, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.temperature.main/commands/setTargetTemperature" + } + }, + "deviceId": "0", + "feature": "heating.dhw.temperature.main", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "number", + "unit": "celsius", + "value": 38 + } + }, + "timestamp": "2024-04-04T16:11:15.947Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.temperature.main" + }, + { + "apiVersion": 1, + "commands": { + "changeEndDate": { + "isExecutable": false, + "name": "changeEndDate", + "params": { + "end": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", + "sameDayAllowed": false + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/changeEndDate" + }, + "schedule": { + "isExecutable": true, + "name": "schedule", + "params": { + "end": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", + "sameDayAllowed": false + }, + "required": true, + "type": "string" + }, + "start": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$" + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/schedule" + }, + "unschedule": { + "isExecutable": true, + "name": "unschedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/unschedule" + } + }, + "deviceId": "0", + "feature": "heating.operating.programs.holiday", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "end": { + "type": "string", + "value": "" + }, + "start": { + "type": "string", + "value": "" + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.operating.programs.holiday" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.sensors.temperature.outside", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 12.4 + } + }, + "timestamp": "2024-04-04T16:14:24.211Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.sensors.temperature.outside" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.power.cumulativeProduced", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.power.cumulativeProduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.power.production", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.power.production" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.pumps.circuit", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.pumps.circuit" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.sensors.temperature.collector", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.sensors.temperature.collector" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.sensors.temperature.dhw", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.sensors.temperature.dhw" + }, + { + "apiVersion": 1, + "commands": {}, + "components": [], + "deviceId": "0", + "feature": "heating.circuits.0.name", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-01-19T02:43:11.831Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.name" + }, + { + "apiVersion": 1, + "commands": { + "setName": { + "isExecutable": true, + "name": "setName", + "params": { + "name": { + "constraints": { + "maxLength": 20, + "minLength": 1 + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.name/commands/setName" + } + }, + "components": [], + "deviceId": "0", + "feature": "heating.circuits.1.name", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "name": { + "type": "string", + "value": "Heizkreis 1" + } + }, + "timestamp": "2024-04-04T16:01:11.047Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.name" + }, + { + "apiVersion": 1, + "commands": {}, + "components": [], + "deviceId": "0", + "feature": "heating.circuits.2.name", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-01-19T02:43:11.831Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.name" + } + ] +} \ No newline at end of file diff --git a/tests/test_Vitoladens300C.py b/tests/test_Vitoladens300C.py new file mode 100644 index 00000000..4ec866e9 --- /dev/null +++ b/tests/test_Vitoladens300C.py @@ -0,0 +1,26 @@ +import unittest + +from PyViCare.PyViCareOilBoiler import OilBoiler +from PyViCare.PyViCareUtils import PyViCareNotSupportedFeatureError +from tests.ViCareServiceMock import ViCareServiceMock + + +class Vitoladens300C(unittest.TestCase): + def setUp(self): + self.service = ViCareServiceMock('response/Vitoladens300-C_J3RA.json') + self.device = OilBoiler(self.service) + + def test_getActive(self): + self.assertEqual(self.device.burners[0].getActive(), False) + + def test_getBurnerStarts(self): + self.assertEqual(self.device.burners[0].getStarts(), 29098) + + def test_getBurnerHours(self): + self.assertEqual(self.device.burners[0].getHours(), 4222.5) + + def test_getBurnerModulation(self): + self.assertEqual(self.device.burners[0].getModulation(), 0) + + def test_getBoilerTemperature(self): + self.assertEqual(self.device.getBoilerTemperature(), 42) \ No newline at end of file From c84816cfbab6771c7cabf00edca6427fa5d5bf18 Mon Sep 17 00:00:00 2001 From: Tobin Rosenau Date: Thu, 4 Apr 2024 16:55:12 +0000 Subject: [PATCH 02/27] fix pylint error --- tests/test_Vitoladens300C.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/test_Vitoladens300C.py b/tests/test_Vitoladens300C.py index 4ec866e9..d860d718 100644 --- a/tests/test_Vitoladens300C.py +++ b/tests/test_Vitoladens300C.py @@ -1,7 +1,6 @@ import unittest from PyViCare.PyViCareOilBoiler import OilBoiler -from PyViCare.PyViCareUtils import PyViCareNotSupportedFeatureError from tests.ViCareServiceMock import ViCareServiceMock @@ -23,4 +22,5 @@ def test_getBurnerModulation(self): self.assertEqual(self.device.burners[0].getModulation(), 0) def test_getBoilerTemperature(self): - self.assertEqual(self.device.getBoilerTemperature(), 42) \ No newline at end of file + self.assertEqual(self.device.getBoilerTemperature(), 42) + \ No newline at end of file From fdc57a399ec9efc06008d14a1458a2dc9c4313d7 Mon Sep 17 00:00:00 2001 From: Tobin Rosenau Date: Thu, 4 Apr 2024 17:05:38 +0000 Subject: [PATCH 03/27] add new DHW cylinder temp. sensor feature --- PyViCare/PyViCareHeatingDevice.py | 5 +++++ tests/test_Vitoladens300C.py | 7 ++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/PyViCare/PyViCareHeatingDevice.py b/PyViCare/PyViCareHeatingDevice.py index ecfc1574..b8e8aac7 100644 --- a/PyViCare/PyViCareHeatingDevice.py +++ b/PyViCare/PyViCareHeatingDevice.py @@ -124,6 +124,11 @@ def getDomesticHotWaterDesiredTemperature(self): def getDomesticHotWaterStorageTemperature(self): return self.service.getProperty("heating.dhw.sensors.temperature.hotWaterStorage")["properties"]["value"][ "value"] + + @handleNotSupported + def getDomesticHotWaterCylinderTemperature(self): + return self.service.getProperty("heating.dhw.sensors.temperature.dhwCylinder")["properties"]["value"][ + "value"] @handleNotSupported def getDomesticHotWaterOutletTemperature(self): diff --git a/tests/test_Vitoladens300C.py b/tests/test_Vitoladens300C.py index d860d718..0351cbeb 100644 --- a/tests/test_Vitoladens300C.py +++ b/tests/test_Vitoladens300C.py @@ -23,4 +23,9 @@ def test_getBurnerModulation(self): def test_getBoilerTemperature(self): self.assertEqual(self.device.getBoilerTemperature(), 42) - \ No newline at end of file + + def test_getDomesticHotWaterCylinderTemperature(self): + self.assertEqual(self.device.getDomesticHotWaterCylinderTemperature(), 46.9) + + def test_getDomesticHotWaterStorageTemperature(self): + self.assertEqual(self.device.getDomesticHotWaterStorageTemperature(), 46.9) From 81e8740837a79c14cb4ab75fefcc9442584c18d3 Mon Sep 17 00:00:00 2001 From: Tobin Rosenau Date: Thu, 4 Apr 2024 17:08:46 +0000 Subject: [PATCH 04/27] fix pylint issue --- PyViCare/PyViCareHeatingDevice.py | 1 - tests/test_Vitoladens300C.py | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/PyViCare/PyViCareHeatingDevice.py b/PyViCare/PyViCareHeatingDevice.py index b8e8aac7..113b74c1 100644 --- a/PyViCare/PyViCareHeatingDevice.py +++ b/PyViCare/PyViCareHeatingDevice.py @@ -117,7 +117,6 @@ def getDomesticHotWaterDesiredTemperature(self): if mode == VICARE_DHW_TEMP2: return self.getDomesticHotWaterConfiguredTemperature2() return self.getDomesticHotWaterConfiguredTemperature() - return None @handleNotSupported diff --git a/tests/test_Vitoladens300C.py b/tests/test_Vitoladens300C.py index 0351cbeb..8eed77f2 100644 --- a/tests/test_Vitoladens300C.py +++ b/tests/test_Vitoladens300C.py @@ -23,7 +23,7 @@ def test_getBurnerModulation(self): def test_getBoilerTemperature(self): self.assertEqual(self.device.getBoilerTemperature(), 42) - + def test_getDomesticHotWaterCylinderTemperature(self): self.assertEqual(self.device.getDomesticHotWaterCylinderTemperature(), 46.9) From 644af39fe32ac5d4551a94ac48e9db3d6e3c71c9 Mon Sep 17 00:00:00 2001 From: Tobin Rosenau Date: Thu, 4 Apr 2024 17:16:18 +0000 Subject: [PATCH 05/27] fix pylint issues --- .pylintrc | 1 + PyViCare/PyViCareHeatingDevice.py | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.pylintrc b/.pylintrc index c919b7cf..e37901d9 100644 --- a/.pylintrc +++ b/.pylintrc @@ -27,3 +27,4 @@ disable= unspecified-encoding, useless-object-inheritance, useless-parent-delegation, + pointless-string-statement, diff --git a/PyViCare/PyViCareHeatingDevice.py b/PyViCare/PyViCareHeatingDevice.py index 113b74c1..3da956e6 100644 --- a/PyViCare/PyViCareHeatingDevice.py +++ b/PyViCare/PyViCareHeatingDevice.py @@ -123,7 +123,7 @@ def getDomesticHotWaterDesiredTemperature(self): def getDomesticHotWaterStorageTemperature(self): return self.service.getProperty("heating.dhw.sensors.temperature.hotWaterStorage")["properties"]["value"][ "value"] - + @handleNotSupported def getDomesticHotWaterCylinderTemperature(self): return self.service.getProperty("heating.dhw.sensors.temperature.dhwCylinder")["properties"]["value"][ From edc3359bc21b45c8d6a24eba5fe20cef5983e05b Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Tue, 13 Aug 2024 10:16:34 +0200 Subject: [PATCH 06/27] chore(ci): create release drafter workflow (#3) --- .github/workflows/draft-release.yml | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) create mode 100644 .github/workflows/draft-release.yml diff --git a/.github/workflows/draft-release.yml b/.github/workflows/draft-release.yml new file mode 100644 index 00000000..238acd0b --- /dev/null +++ b/.github/workflows/draft-release.yml @@ -0,0 +1,18 @@ +name: Release Drafter + +# yamllint disable-line rule:truthy +on: + push: + branches: + - main + workflow_dispatch: + +jobs: + update_release_draft: + name: ✏️ Draft release + runs-on: ubuntu-latest + steps: + - name: 🚀 Run Release Drafter + uses: release-drafter/release-drafter@v6.0.0 + env: + GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} From 47fc07cef787fb2a31075b5c58742bfdb1bd1609 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Wed, 14 Aug 2024 11:51:02 +0200 Subject: [PATCH 07/27] chore(ci): create release-drafter config (#4) Create release-drafter.yml --- .github/release-drafter.yml | 57 +++++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 .github/release-drafter.yml diff --git a/.github/release-drafter.yml b/.github/release-drafter.yml new file mode 100644 index 00000000..cb404ea3 --- /dev/null +++ b/.github/release-drafter.yml @@ -0,0 +1,57 @@ +--- +name-template: "v$RESOLVED_VERSION" +tag-template: "v$RESOLVED_VERSION" +change-template: "- $TITLE @$AUTHOR (#$NUMBER)" +sort-direction: ascending + +categories: + - title: "🚨 Breaking changes" + labels: + - "breaking-change" + - title: "✨ New features" + labels: + - "new-feature" + - title: "🐛 Bug fixes" + labels: + - "bugfix" + - title: "🚀 Enhancements" + labels: + - "enhancement" + - "refactor" + - "performance" + - title: "🧰 Maintenance" + labels: + - "maintenance" + - "ci" + - title: "📚 Documentation" + labels: + - "documentation" + - title: "⬆️ Dependency updates" + labels: + - "dependencies" + +version-resolver: + major: + labels: + - "major" + - "breaking-change" + minor: + labels: + - "minor" + - "new-feature" + patch: + labels: + - "bugfix" + - "chore" + - "ci" + - "dependencies" + - "documentation" + - "enhancement" + - "performance" + - "refactor" + default: patch + +template: | + ## What’s changed + + $CHANGES From 554218281b59f729b18dfb7b311518efd1a797be Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Wed, 14 Aug 2024 12:53:45 +0200 Subject: [PATCH 08/27] chore: use poetry (#6) * add poetry * remove requirements.txt * add test workflow * add lint workflow * fix codespell * chage python version for testing * add authlib * fix lockfile * add requests * fix pylint issues * remove old pylint workflow --- .github/workflows/build.yml | 58 --- .github/workflows/lint.yml | 85 ++++ .github/workflows/test.yml | 44 +++ PyViCare/Feature.py | 2 +- PyViCare/PyViCareHeatPump.py | 46 +-- poetry.lock | 733 +++++++++++++++++++++++++++++++++++ pyproject.toml | 56 +++ requirements.txt | 6 - setup.py | 23 -- 9 files changed, 942 insertions(+), 111 deletions(-) delete mode 100644 .github/workflows/build.yml create mode 100644 .github/workflows/lint.yml create mode 100644 .github/workflows/test.yml create mode 100644 poetry.lock create mode 100644 pyproject.toml delete mode 100644 requirements.txt delete mode 100644 setup.py diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml deleted file mode 100644 index 7c161560..00000000 --- a/.github/workflows/build.yml +++ /dev/null @@ -1,58 +0,0 @@ -name: Python package - -on: - push: - branches: - - master - pull_request: - branches: - - master - -jobs: - pylint: - runs-on: ubuntu-20.04 - strategy: - matrix: - python-version: ["3.9"] - steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install pylint - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - - name: Analysing the code with pylint - run: pylint $(git ls-files '*.py') - - build: - runs-on: ubuntu-20.04 - strategy: - matrix: - python-version: ["3.6", "3.8", "3.9"] - - steps: - - uses: actions/checkout@v2 - - name: Set up Python ${{ matrix.python-version }} - uses: actions/setup-python@v2 - with: - python-version: ${{ matrix.python-version }} - - name: Install dependencies - run: | - python -m pip install --upgrade pip - pip install flake8 pytest - if [ -f requirements.txt ]; then pip install -r requirements.txt; fi - - name: Setup flake8 annotations - uses: rbialon/flake8-annotations@v1 - - name: Lint with flake8 - run: | - # stop the build if there are Python syntax errors or undefined names - flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics - # exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide - flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics - - name: Test with pytest - run: | - pytest diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml new file mode 100644 index 00000000..7c5a6a64 --- /dev/null +++ b/.github/workflows/lint.yml @@ -0,0 +1,85 @@ +--- + name: Linting + + # yamllint disable-line rule:truthy + on: + push: + branches: + - main + pull_request: + workflow_dispatch: + + env: + DEFAULT_PYTHON: "3.11" + + jobs: + codespell: + name: codespell + runs-on: ubuntu-latest + steps: + - name: ⤵️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: 🏗 Set up Poetry + run: pipx install poetry + - name: 🏗 Set up Python ${{ env.DEFAULT_PYTHON }} + id: python + uses: actions/setup-python@v5.1.1 + with: + python-version: ${{ env.DEFAULT_PYTHON }} + cache: "poetry" + - name: 🏗 Install workflow dependencies + run: | + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: 🏗 Install Python dependencies + run: poetry install --no-interaction + - name: 🚀 Check code for common misspellings + run: poetry run codespell **/*.py + + ruff: + name: Ruff + runs-on: ubuntu-latest + steps: + - name: ⤵️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: 🏗 Set up Poetry + run: pipx install poetry + - name: 🏗 Set up Python ${{ env.DEFAULT_PYTHON }} + id: python + uses: actions/setup-python@v5.1.1 + with: + python-version: ${{ env.DEFAULT_PYTHON }} + cache: "poetry" + - name: 🏗 Install workflow dependencies + run: | + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: 🏗 Install Python dependencies + run: poetry install --no-interaction + - name: 🚀 Run ruff linter + run: poetry run ruff check --output-format=github . +# - name: 🚀 Run ruff formatter +# run: poetry run ruff format --check . + + pylint: + name: pylint + runs-on: ubuntu-latest + steps: + - name: ⤵️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: 🏗 Set up Poetry + run: pipx install poetry + - name: 🏗 Set up Python ${{ env.DEFAULT_PYTHON }} + id: python + uses: actions/setup-python@v5.1.1 + with: + python-version: ${{ env.DEFAULT_PYTHON }} + cache: "poetry" + - name: 🏗 Install workflow dependencies + run: | + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: 🏗 Install Python dependencies + run: poetry install --no-interaction + - name: 🚀 Run pylint + run: poetry run pylint **/*.py diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..2f16ad06 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,44 @@ +name: Testing + +# yamllint disable-line rule:truthy +on: + push: + branches: + - main + pull_request: + workflow_dispatch: + +env: + DEFAULT_PYTHON: "3.11" + +jobs: + pytest: + name: Python ${{ matrix.python }} + runs-on: ubuntu-latest + strategy: + matrix: + python: ["3.11", "3.12"] + steps: + - name: ⤵️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: 🏗 Set up Poetry + run: pipx install poetry + - name: 🏗 Set up Python ${{ matrix.python }} + id: python + uses: actions/setup-python@v5.1.1 + with: + python-version: ${{ matrix.python }} + cache: "poetry" + - name: 🏗 Install workflow dependencies + run: | + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: 🏗 Install dependencies + run: poetry install --no-interaction + - name: 🚀 Run pytest + run: poetry run pytest --cov src tests + - name: ⬆️ Upload coverage artifact + uses: actions/upload-artifact@v4.3.6 + with: + name: coverage-${{ matrix.python }} + path: .coverage diff --git a/PyViCare/Feature.py b/PyViCare/Feature.py index db7ad957..272b0240 100644 --- a/PyViCare/Feature.py +++ b/PyViCare/Feature.py @@ -1,6 +1,6 @@ # Feature flag to raise an exception in case of a non existing device feature. # The flag should be fully removed in a later release. -# It allows dependend libraries to gracefully migrate to the new behaviour +# It allows dependent libraries to gracefully migrate to the new behaviour raise_exception_on_not_supported_device_feature = True # Feature flag to raise exception if rate limit of the API is hit diff --git a/PyViCare/PyViCareHeatPump.py b/PyViCare/PyViCareHeatPump.py index 335b7de1..bf3ec6e6 100644 --- a/PyViCare/PyViCareHeatPump.py +++ b/PyViCare/PyViCareHeatPump.py @@ -109,18 +109,18 @@ def getAvailableVentilationModes(self): def getActiveVentilationMode(self): return self.service.getProperty("ventilation.operating.modes.active")["properties"]["value"]["value"] - """ Set the active mode - Parameters - ---------- - mode : str - Valid mode can be obtained using getModes() - - Returns - ------- - result: json - json representation of the answer - """ def setActiveVentilationMode(self, mode): + """ Set the active mode + Parameters + ---------- + mode : str + Valid mode can be obtained using getModes() + + Returns + ------- + result: json + json representation of the answer + """ return self.service.setProperty("ventilation.operating.modes.active", "setMode", {'mode': mode}) @handleNotSupported @@ -137,19 +137,19 @@ def getAvailableVentilationPrograms(self): def getActiveVentilationProgram(self): return self.service.getProperty("ventilation.operating.programs.active")["properties"]["value"]["value"] - """ Activate a ventilation program - NOTE - DEVICE_COMMUNICATION_ERROR can just mean that the program is already on - Parameters - ---------- - program : str - - Returns - ------- - result: json - json representation of the answer - """ def activateVentilationProgram(self, program): + """ Activate a ventilation program + NOTE + DEVICE_COMMUNICATION_ERROR can just mean that the program is already on + Parameters + ---------- + program : str + + Returns + ------- + result: json + json representation of the answer + """ return self.service.setProperty(f"ventilation.operating.programs.{program}", "activate", {}) class Compressor(HeatingDeviceWithComponent): diff --git a/poetry.lock b/poetry.lock new file mode 100644 index 00000000..fdc8f0ee --- /dev/null +++ b/poetry.lock @@ -0,0 +1,733 @@ +# This file is automatically @generated by Poetry and should not be changed by hand. + +[[package]] +name = "astroid" +version = "3.2.4" +description = "An abstract syntax tree for Python with inference support." +category = "dev" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "astroid-3.2.4-py3-none-any.whl", hash = "sha256:413658a61eeca6202a59231abb473f932038fbcbf1666587f66d482083413a25"}, + {file = "astroid-3.2.4.tar.gz", hash = "sha256:0e14202810b30da1b735827f78f5157be2bbd4a7a59b7707ca0bfc2fb4c0063a"}, +] + +[[package]] +name = "authlib" +version = "1.3.1" +description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "Authlib-1.3.1-py2.py3-none-any.whl", hash = "sha256:d35800b973099bbadc49b42b256ecb80041ad56b7fe1216a362c7943c088f377"}, + {file = "authlib-1.3.1.tar.gz", hash = "sha256:7ae843f03c06c5c0debd63c9db91f9fda64fa62a42a77419fa15fbb7e7a58917"}, +] + +[package.dependencies] +cryptography = "*" + +[[package]] +name = "certifi" +version = "2024.7.4" +description = "Python package for providing Mozilla's CA Bundle." +category = "main" +optional = false +python-versions = ">=3.6" +files = [ + {file = "certifi-2024.7.4-py3-none-any.whl", hash = "sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90"}, + {file = "certifi-2024.7.4.tar.gz", hash = "sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b"}, +] + +[[package]] +name = "cffi" +version = "1.17.0" +description = "Foreign Function Interface for Python calling C code." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "cffi-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f9338cc05451f1942d0d8203ec2c346c830f8e86469903d5126c1f0a13a2bcbb"}, + {file = "cffi-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a0ce71725cacc9ebf839630772b07eeec220cbb5f03be1399e0457a1464f8e1a"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c815270206f983309915a6844fe994b2fa47e5d05c4c4cef267c3b30e34dbe42"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6bdcd415ba87846fd317bee0774e412e8792832e7805938987e4ede1d13046d"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a98748ed1a1df4ee1d6f927e151ed6c1a09d5ec21684de879c7ea6aa96f58f2"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0a048d4f6630113e54bb4b77e315e1ba32a5a31512c31a273807d0027a7e69ab"}, + {file = "cffi-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24aa705a5f5bd3a8bcfa4d123f03413de5d86e497435693b638cbffb7d5d8a1b"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:856bf0924d24e7f93b8aee12a3a1095c34085600aa805693fb7f5d1962393206"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:4304d4416ff032ed50ad6bb87416d802e67139e31c0bde4628f36a47a3164bfa"}, + {file = "cffi-1.17.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:331ad15c39c9fe9186ceaf87203a9ecf5ae0ba2538c9e898e3a6967e8ad3db6f"}, + {file = "cffi-1.17.0-cp310-cp310-win32.whl", hash = "sha256:669b29a9eca6146465cc574659058ed949748f0809a2582d1f1a324eb91054dc"}, + {file = "cffi-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:48b389b1fd5144603d61d752afd7167dfd205973a43151ae5045b35793232aa2"}, + {file = "cffi-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5d97162c196ce54af6700949ddf9409e9833ef1003b4741c2b39ef46f1d9720"}, + {file = "cffi-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:5ba5c243f4004c750836f81606a9fcb7841f8874ad8f3bf204ff5e56332b72b9"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bb9333f58fc3a2296fb1d54576138d4cf5d496a2cc118422bd77835e6ae0b9cb"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:435a22d00ec7d7ea533db494da8581b05977f9c37338c80bc86314bec2619424"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d1df34588123fcc88c872f5acb6f74ae59e9d182a2707097f9e28275ec26a12d"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:df8bb0010fdd0a743b7542589223a2816bdde4d94bb5ad67884348fa2c1c67e8"}, + {file = "cffi-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8b5b9712783415695663bd463990e2f00c6750562e6ad1d28e072a611c5f2a6"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ffef8fd58a36fb5f1196919638f73dd3ae0db1a878982b27a9a5a176ede4ba91"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e67d26532bfd8b7f7c05d5a766d6f437b362c1bf203a3a5ce3593a645e870b8"}, + {file = "cffi-1.17.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45f7cd36186db767d803b1473b3c659d57a23b5fa491ad83c6d40f2af58e4dbb"}, + {file = "cffi-1.17.0-cp311-cp311-win32.whl", hash = "sha256:a9015f5b8af1bb6837a3fcb0cdf3b874fe3385ff6274e8b7925d81ccaec3c5c9"}, + {file = "cffi-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:b50aaac7d05c2c26dfd50c3321199f019ba76bb650e346a6ef3616306eed67b0"}, + {file = "cffi-1.17.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:aec510255ce690d240f7cb23d7114f6b351c733a74c279a84def763660a2c3bc"}, + {file = "cffi-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2770bb0d5e3cc0e31e7318db06efcbcdb7b31bcb1a70086d3177692a02256f59"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:db9a30ec064129d605d0f1aedc93e00894b9334ec74ba9c6bdd08147434b33eb"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a47eef975d2b8b721775a0fa286f50eab535b9d56c70a6e62842134cf7841195"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f3e0992f23bbb0be00a921eae5363329253c3b86287db27092461c887b791e5e"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6107e445faf057c118d5050560695e46d272e5301feffda3c41849641222a828"}, + {file = "cffi-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:eb862356ee9391dc5a0b3cbc00f416b48c1b9a52d252d898e5b7696a5f9fe150"}, + {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:c1c13185b90bbd3f8b5963cd8ce7ad4ff441924c31e23c975cb150e27c2bf67a"}, + {file = "cffi-1.17.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:17c6d6d3260c7f2d94f657e6872591fe8733872a86ed1345bda872cfc8c74885"}, + {file = "cffi-1.17.0-cp312-cp312-win32.whl", hash = "sha256:c3b8bd3133cd50f6b637bb4322822c94c5ce4bf0d724ed5ae70afce62187c492"}, + {file = "cffi-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:dca802c8db0720ce1c49cce1149ff7b06e91ba15fa84b1d59144fef1a1bc7ac2"}, + {file = "cffi-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:6ce01337d23884b21c03869d2f68c5523d43174d4fc405490eb0091057943118"}, + {file = "cffi-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:cab2eba3830bf4f6d91e2d6718e0e1c14a2f5ad1af68a89d24ace0c6b17cced7"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:14b9cbc8f7ac98a739558eb86fabc283d4d564dafed50216e7f7ee62d0d25377"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b00e7bcd71caa0282cbe3c90966f738e2db91e64092a877c3ff7f19a1628fdcb"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:41f4915e09218744d8bae14759f983e466ab69b178de38066f7579892ff2a555"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4760a68cab57bfaa628938e9c2971137e05ce48e762a9cb53b76c9b569f1204"}, + {file = "cffi-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:011aff3524d578a9412c8b3cfaa50f2c0bd78e03eb7af7aa5e0df59b158efb2f"}, + {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:a003ac9edc22d99ae1286b0875c460351f4e101f8c9d9d2576e78d7e048f64e0"}, + {file = "cffi-1.17.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ef9528915df81b8f4c7612b19b8628214c65c9b7f74db2e34a646a0a2a0da2d4"}, + {file = "cffi-1.17.0-cp313-cp313-win32.whl", hash = "sha256:70d2aa9fb00cf52034feac4b913181a6e10356019b18ef89bc7c12a283bf5f5a"}, + {file = "cffi-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:b7b6ea9e36d32582cda3465f54c4b454f62f23cb083ebc7a94e2ca6ef011c3a7"}, + {file = "cffi-1.17.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:964823b2fc77b55355999ade496c54dde161c621cb1f6eac61dc30ed1b63cd4c"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:516a405f174fd3b88829eabfe4bb296ac602d6a0f68e0d64d5ac9456194a5b7e"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dec6b307ce928e8e112a6bb9921a1cb00a0e14979bf28b98e084a4b8a742bd9b"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e4094c7b464cf0a858e75cd14b03509e84789abf7b79f8537e6a72152109c76e"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2404f3de742f47cb62d023f0ba7c5a916c9c653d5b368cc966382ae4e57da401"}, + {file = "cffi-1.17.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3aa9d43b02a0c681f0bfbc12d476d47b2b2b6a3f9287f11ee42989a268a1833c"}, + {file = "cffi-1.17.0-cp38-cp38-win32.whl", hash = "sha256:0bb15e7acf8ab35ca8b24b90af52c8b391690ef5c4aec3d31f38f0d37d2cc499"}, + {file = "cffi-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:93a7350f6706b31f457c1457d3a3259ff9071a66f312ae64dc024f049055f72c"}, + {file = "cffi-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1a2ddbac59dc3716bc79f27906c010406155031a1c801410f1bafff17ea304d2"}, + {file = "cffi-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6327b572f5770293fc062a7ec04160e89741e8552bf1c358d1a23eba68166759"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbc183e7bef690c9abe5ea67b7b60fdbca81aa8da43468287dae7b5c046107d4"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bdc0f1f610d067c70aa3737ed06e2726fd9d6f7bfee4a351f4c40b6831f4e82"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6d872186c1617d143969defeadac5a904e6e374183e07977eedef9c07c8953bf"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0d46ee4764b88b91f16661a8befc6bfb24806d885e27436fdc292ed7e6f6d058"}, + {file = "cffi-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6f76a90c345796c01d85e6332e81cab6d70de83b829cf1d9762d0a3da59c7932"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0e60821d312f99d3e1569202518dddf10ae547e799d75aef3bca3a2d9e8ee693"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:eb09b82377233b902d4c3fbeeb7ad731cdab579c6c6fda1f763cd779139e47c3"}, + {file = "cffi-1.17.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:24658baf6224d8f280e827f0a50c46ad819ec8ba380a42448e24459daf809cf4"}, + {file = "cffi-1.17.0-cp39-cp39-win32.whl", hash = "sha256:0fdacad9e0d9fc23e519efd5ea24a70348305e8d7d85ecbb1a5fa66dc834e7fb"}, + {file = "cffi-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:7cbc78dc018596315d4e7841c8c3a7ae31cc4d638c9b627f87d52e8abaaf2d29"}, + {file = "cffi-1.17.0.tar.gz", hash = "sha256:f3157624b7558b914cb039fd1af735e5e8049a87c817cc215109ad1c8779df76"}, +] + +[package.dependencies] +pycparser = "*" + +[[package]] +name = "charset-normalizer" +version = "3.3.2" +description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" +optional = false +python-versions = ">=3.7.0" +files = [ + {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, + {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, + {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, + {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, + {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, + {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, + {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, + {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, +] + +[[package]] +name = "codespell" +version = "2.3.0" +description = "Codespell" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "codespell-2.3.0-py3-none-any.whl", hash = "sha256:a9c7cef2501c9cfede2110fd6d4e5e62296920efe9abfb84648df866e47f58d1"}, + {file = "codespell-2.3.0.tar.gz", hash = "sha256:360c7d10f75e65f67bad720af7007e1060a5d395670ec11a7ed1fed9dd17471f"}, +] + +[package.extras] +dev = ["Pygments", "build", "chardet", "pre-commit", "pytest", "pytest-cov", "pytest-dependency", "ruff", "tomli", "twine"] +hard-encoding-detection = ["chardet"] +toml = ["tomli"] +types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency"] + +[[package]] +name = "colorama" +version = "0.4.6" +description = "Cross-platform colored terminal text." +category = "dev" +optional = false +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" +files = [ + {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, + {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, +] + +[[package]] +name = "coverage" +version = "7.6.1" +description = "Code coverage measurement for Python" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16"}, + {file = "coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc"}, + {file = "coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c"}, + {file = "coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959"}, + {file = "coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232"}, + {file = "coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0"}, + {file = "coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93"}, + {file = "coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d"}, + {file = "coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234"}, + {file = "coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133"}, + {file = "coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c"}, + {file = "coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6"}, + {file = "coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778"}, + {file = "coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d"}, + {file = "coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a"}, + {file = "coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d"}, + {file = "coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5"}, + {file = "coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb"}, + {file = "coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106"}, + {file = "coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a"}, + {file = "coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388"}, + {file = "coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155"}, + {file = "coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a"}, + {file = "coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129"}, + {file = "coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e"}, + {file = "coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704"}, + {file = "coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223"}, + {file = "coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3"}, + {file = "coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f"}, + {file = "coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657"}, + {file = "coverage-7.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6db04803b6c7291985a761004e9060b2bca08da6d04f26a7f2294b8623a0c1a0"}, + {file = "coverage-7.6.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:f1adfc8ac319e1a348af294106bc6a8458a0f1633cc62a1446aebc30c5fa186a"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a95324a9de9650a729239daea117df21f4b9868ce32e63f8b650ebe6cef5595b"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b43c03669dc4618ec25270b06ecd3ee4fa94c7f9b3c14bae6571ca00ef98b0d3"}, + {file = "coverage-7.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8929543a7192c13d177b770008bc4e8119f2e1f881d563fc6b6305d2d0ebe9de"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:a09ece4a69cf399510c8ab25e0950d9cf2b42f7b3cb0374f95d2e2ff594478a6"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:9054a0754de38d9dbd01a46621636689124d666bad1936d76c0341f7d71bf569"}, + {file = "coverage-7.6.1-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:0dbde0f4aa9a16fa4d754356a8f2e36296ff4d83994b2c9d8398aa32f222f989"}, + {file = "coverage-7.6.1-cp38-cp38-win32.whl", hash = "sha256:da511e6ad4f7323ee5702e6633085fb76c2f893aaf8ce4c51a0ba4fc07580ea7"}, + {file = "coverage-7.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:3f1156e3e8f2872197af3840d8ad307a9dd18e615dc64d9ee41696f287c57ad8"}, + {file = "coverage-7.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:abd5fd0db5f4dc9289408aaf34908072f805ff7792632250dcb36dc591d24255"}, + {file = "coverage-7.6.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:547f45fa1a93154bd82050a7f3cddbc1a7a4dd2a9bf5cb7d06f4ae29fe94eaf8"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645786266c8f18a931b65bfcefdbf6952dd0dea98feee39bd188607a9d307ed2"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9e0b2df163b8ed01d515807af24f63de04bebcecbd6c3bfeff88385789fdf75a"}, + {file = "coverage-7.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:609b06f178fe8e9f89ef676532760ec0b4deea15e9969bf754b37f7c40326dbc"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:702855feff378050ae4f741045e19a32d57d19f3e0676d589df0575008ea5004"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:2bdb062ea438f22d99cba0d7829c2ef0af1d768d1e4a4f528087224c90b132cb"}, + {file = "coverage-7.6.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:9c56863d44bd1c4fe2abb8a4d6f5371d197f1ac0ebdee542f07f35895fc07f36"}, + {file = "coverage-7.6.1-cp39-cp39-win32.whl", hash = "sha256:6e2cd258d7d927d09493c8df1ce9174ad01b381d4729a9d8d4e38670ca24774c"}, + {file = "coverage-7.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:06a737c882bd26d0d6ee7269b20b12f14a8704807a01056c80bb881a4b2ce6ca"}, + {file = "coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df"}, + {file = "coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d"}, +] + +[package.extras] +toml = ["tomli"] + +[[package]] +name = "cryptography" +version = "43.0.0" +description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "main" +optional = false +python-versions = ">=3.7" +files = [ + {file = "cryptography-43.0.0-cp37-abi3-macosx_10_9_universal2.whl", hash = "sha256:64c3f16e2a4fc51c0d06af28441881f98c5d91009b8caaff40cf3548089e9c74"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3dcdedae5c7710b9f97ac6bba7e1052b95c7083c9d0e9df96e02a1932e777895"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d9a1eca329405219b605fac09ecfc09ac09e595d6def650a437523fcd08dd22"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ea9e57f8ea880eeea38ab5abf9fbe39f923544d7884228ec67d666abd60f5a47"}, + {file = "cryptography-43.0.0-cp37-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:9a8d6802e0825767476f62aafed40532bd435e8a5f7d23bd8b4f5fd04cc80ecf"}, + {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:cc70b4b581f28d0a254d006f26949245e3657d40d8857066c2ae22a61222ef55"}, + {file = "cryptography-43.0.0-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4a997df8c1c2aae1e1e5ac49c2e4f610ad037fc5a3aadc7b64e39dea42249431"}, + {file = "cryptography-43.0.0-cp37-abi3-win32.whl", hash = "sha256:6e2b11c55d260d03a8cf29ac9b5e0608d35f08077d8c087be96287f43af3ccdc"}, + {file = "cryptography-43.0.0-cp37-abi3-win_amd64.whl", hash = "sha256:31e44a986ceccec3d0498e16f3d27b2ee5fdf69ce2ab89b52eaad1d2f33d8778"}, + {file = "cryptography-43.0.0-cp39-abi3-macosx_10_9_universal2.whl", hash = "sha256:7b3f5fe74a5ca32d4d0f302ffe6680fcc5c28f8ef0dc0ae8f40c0f3a1b4fca66"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac1955ce000cb29ab40def14fd1bbfa7af2017cca696ee696925615cafd0dce5"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:299d3da8e00b7e2b54bb02ef58d73cd5f55fb31f33ebbf33bd00d9aa6807df7e"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_aarch64.whl", hash = "sha256:ee0c405832ade84d4de74b9029bedb7b31200600fa524d218fc29bfa371e97f5"}, + {file = "cryptography-43.0.0-cp39-abi3-manylinux_2_28_x86_64.whl", hash = "sha256:cb013933d4c127349b3948aa8aaf2f12c0353ad0eccd715ca789c8a0f671646f"}, + {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:fdcb265de28585de5b859ae13e3846a8e805268a823a12a4da2597f1f5afc9f0"}, + {file = "cryptography-43.0.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:2905ccf93a8a2a416f3ec01b1a7911c3fe4073ef35640e7ee5296754e30b762b"}, + {file = "cryptography-43.0.0-cp39-abi3-win32.whl", hash = "sha256:47ca71115e545954e6c1d207dd13461ab81f4eccfcb1345eac874828b5e3eaaf"}, + {file = "cryptography-43.0.0-cp39-abi3-win_amd64.whl", hash = "sha256:0663585d02f76929792470451a5ba64424acc3cd5227b03921dab0e2f27b1709"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:2c6d112bf61c5ef44042c253e4859b3cbbb50df2f78fa8fae6747a7814484a70"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:844b6d608374e7d08f4f6e6f9f7b951f9256db41421917dfb2d003dde4cd6b66"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:51956cf8730665e2bdf8ddb8da0056f699c1a5715648c1b0144670c1ba00b48f"}, + {file = "cryptography-43.0.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:aae4d918f6b180a8ab8bf6511a419473d107df4dbb4225c7b48c5c9602c38c7f"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:232ce02943a579095a339ac4b390fbbe97f5b5d5d107f8a08260ea2768be8cc2"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:5bcb8a5620008a8034d39bce21dc3e23735dfdb6a33a06974739bfa04f853947"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:08a24a7070b2b6804c1940ff0f910ff728932a9d0e80e7814234269f9d46d069"}, + {file = "cryptography-43.0.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e9c5266c432a1e23738d178e51c2c7a5e2ddf790f248be939448c0ba2021f9d1"}, + {file = "cryptography-43.0.0.tar.gz", hash = "sha256:b88075ada2d51aa9f18283532c9f60e72170041bba88d7f37e49cbb10275299e"}, +] + +[package.dependencies] +cffi = {version = ">=1.12", markers = "platform_python_implementation != \"PyPy\""} + +[package.extras] +docs = ["sphinx (>=5.3.0)", "sphinx-rtd-theme (>=1.1.1)"] +docstest = ["pyenchant (>=1.6.11)", "readme-renderer", "sphinxcontrib-spelling (>=4.0.1)"] +nox = ["nox"] +pep8test = ["check-sdist", "click", "mypy", "ruff"] +sdist = ["build"] +ssh = ["bcrypt (>=3.1.5)"] +test = ["certifi", "cryptography-vectors (==43.0.0)", "pretend", "pytest (>=6.2.0)", "pytest-benchmark", "pytest-cov", "pytest-xdist"] +test-randomorder = ["pytest-randomly"] + +[[package]] +name = "dill" +version = "0.3.8" +description = "serialize all of Python" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "dill-0.3.8-py3-none-any.whl", hash = "sha256:c36ca9ffb54365bdd2f8eb3eff7d2a21237f8452b57ace88b1ac615b7e815bd7"}, + {file = "dill-0.3.8.tar.gz", hash = "sha256:3ebe3c479ad625c4553aca177444d89b486b1d84982eeacded644afc0cf797ca"}, +] + +[package.extras] +graph = ["objgraph (>=1.7.2)"] +profile = ["gprof2dot (>=2022.7.29)"] + +[[package]] +name = "idna" +version = "3.7" +description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" +optional = false +python-versions = ">=3.5" +files = [ + {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, + {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, +] + +[[package]] +name = "iniconfig" +version = "2.0.0" +description = "brain-dead simple config-ini parsing" +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, + {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, +] + +[[package]] +name = "isort" +version = "5.13.2" +description = "A Python utility / library to sort Python imports." +category = "dev" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "isort-5.13.2-py3-none-any.whl", hash = "sha256:8ca5e72a8d85860d5a3fa69b8745237f2939afe12dbf656afbcb47fe72d947a6"}, + {file = "isort-5.13.2.tar.gz", hash = "sha256:48fdfcb9face5d58a4f6dde2e72a1fb8dcaf8ab26f95ab49fab84c2ddefb0109"}, +] + +[package.extras] +colors = ["colorama (>=0.4.6)"] + +[[package]] +name = "mccabe" +version = "0.7.0" +description = "McCabe checker, plugin for flake8" +category = "dev" +optional = false +python-versions = ">=3.6" +files = [ + {file = "mccabe-0.7.0-py2.py3-none-any.whl", hash = "sha256:6c2d30ab6be0e4a46919781807b4f0d834ebdd6c6e3dca0bda5a15f863427b6e"}, + {file = "mccabe-0.7.0.tar.gz", hash = "sha256:348e0240c33b60bbdf4e523192ef919f28cb2c3d7d5c7794f74009290f236325"}, +] + +[[package]] +name = "mypy" +version = "1.11.1" +description = "Optional static typing for Python" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c"}, + {file = "mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411"}, + {file = "mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03"}, + {file = "mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4"}, + {file = "mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58"}, + {file = "mypy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5"}, + {file = "mypy-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca"}, + {file = "mypy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de"}, + {file = "mypy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809"}, + {file = "mypy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72"}, + {file = "mypy-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8"}, + {file = "mypy-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a"}, + {file = "mypy-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417"}, + {file = "mypy-1.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e"}, + {file = "mypy-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525"}, + {file = "mypy-1.11.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:749fd3213916f1751fff995fccf20c6195cae941dc968f3aaadf9bb4e430e5a2"}, + {file = "mypy-1.11.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:b639dce63a0b19085213ec5fdd8cffd1d81988f47a2dec7100e93564f3e8fb3b"}, + {file = "mypy-1.11.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:4c956b49c5d865394d62941b109728c5c596a415e9c5b2be663dd26a1ff07bc0"}, + {file = "mypy-1.11.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:45df906e8b6804ef4b666af29a87ad9f5921aad091c79cc38e12198e220beabd"}, + {file = "mypy-1.11.1-cp38-cp38-win_amd64.whl", hash = "sha256:d44be7551689d9d47b7abc27c71257adfdb53f03880841a5db15ddb22dc63edb"}, + {file = "mypy-1.11.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2684d3f693073ab89d76da8e3921883019ea8a3ec20fa5d8ecca6a2db4c54bbe"}, + {file = "mypy-1.11.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:79c07eb282cb457473add5052b63925e5cc97dfab9812ee65a7c7ab5e3cb551c"}, + {file = "mypy-1.11.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:11965c2f571ded6239977b14deebd3f4c3abd9a92398712d6da3a772974fad69"}, + {file = "mypy-1.11.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a2b43895a0f8154df6519706d9bca8280cda52d3d9d1514b2d9c3e26792a0b74"}, + {file = "mypy-1.11.1-cp39-cp39-win_amd64.whl", hash = "sha256:1a81cf05975fd61aec5ae16501a091cfb9f605dc3e3c878c0da32f250b74760b"}, + {file = "mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54"}, + {file = "mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08"}, +] + +[package.dependencies] +mypy-extensions = ">=1.0.0" +typing-extensions = ">=4.6.0" + +[package.extras] +dmypy = ["psutil (>=4.0)"] +install-types = ["pip"] +mypyc = ["setuptools (>=50)"] +reports = ["lxml"] + +[[package]] +name = "mypy-extensions" +version = "1.0.0" +description = "Type system extensions for programs checked with the mypy type checker." +category = "dev" +optional = false +python-versions = ">=3.5" +files = [ + {file = "mypy_extensions-1.0.0-py3-none-any.whl", hash = "sha256:4392f6c0eb8a5668a69e23d168ffa70f0be9ccfd32b5cc2d26a34ae5b844552d"}, + {file = "mypy_extensions-1.0.0.tar.gz", hash = "sha256:75dbf8955dc00442a438fc4d0666508a9a97b6bd41aa2f0ffe9d2f2725af0782"}, +] + +[[package]] +name = "packaging" +version = "24.1" +description = "Core utilities for Python packages" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, + {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, +] + +[[package]] +name = "platformdirs" +version = "4.2.2" +description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee"}, + {file = "platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3"}, +] + +[package.extras] +docs = ["furo (>=2023.9.10)", "proselint (>=0.13)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] +test = ["appdirs (==1.4.4)", "covdefaults (>=2.3)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)"] +type = ["mypy (>=1.8)"] + +[[package]] +name = "pluggy" +version = "1.5.0" +description = "plugin and hook calling mechanisms for python" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, + {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, +] + +[package.extras] +dev = ["pre-commit", "tox"] +testing = ["pytest", "pytest-benchmark"] + +[[package]] +name = "pycparser" +version = "2.22" +description = "C parser in Python" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pycparser-2.22-py3-none-any.whl", hash = "sha256:c3702b6d3dd8c7abc1afa565d7e63d53a1d0bd86cdc24edd75470f4de499cfcc"}, + {file = "pycparser-2.22.tar.gz", hash = "sha256:491c8be9c040f5390f5bf44a5b07752bd07f56edf992381b05c701439eec10f6"}, +] + +[[package]] +name = "pylint" +version = "3.2.6" +description = "python code static checker" +category = "dev" +optional = false +python-versions = ">=3.8.0" +files = [ + {file = "pylint-3.2.6-py3-none-any.whl", hash = "sha256:03c8e3baa1d9fb995b12c1dbe00aa6c4bcef210c2a2634374aedeb22fb4a8f8f"}, + {file = "pylint-3.2.6.tar.gz", hash = "sha256:a5d01678349454806cff6d886fb072294f56a58c4761278c97fb557d708e1eb3"}, +] + +[package.dependencies] +astroid = ">=3.2.4,<=3.3.0-dev0" +colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} +dill = [ + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, + {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, +] +isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" +mccabe = ">=0.6,<0.8" +platformdirs = ">=2.2.0" +tomlkit = ">=0.10.1" + +[package.extras] +spelling = ["pyenchant (>=3.2,<4.0)"] +testutils = ["gitpython (>3)"] + +[[package]] +name = "pytest" +version = "8.3.2" +description = "pytest: simple powerful testing with Python" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5"}, + {file = "pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce"}, +] + +[package.dependencies] +colorama = {version = "*", markers = "sys_platform == \"win32\""} +iniconfig = "*" +packaging = "*" +pluggy = ">=1.5,<2" + +[package.extras] +dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] + +[[package]] +name = "pytest-cov" +version = "5.0.0" +description = "Pytest plugin for measuring coverage." +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "pytest-cov-5.0.0.tar.gz", hash = "sha256:5837b58e9f6ebd335b0f8060eecce69b662415b16dc503883a02f45dfeb14857"}, + {file = "pytest_cov-5.0.0-py3-none-any.whl", hash = "sha256:4f0764a1219df53214206bf1feea4633c3b558a2925c8b59f144f682861ce652"}, +] + +[package.dependencies] +coverage = {version = ">=5.2.1", extras = ["toml"]} +pytest = ">=4.6" + +[package.extras] +testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] + +[[package]] +name = "requests" +version = "2.32.3" +description = "Python HTTP for Humans." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "requests-2.32.3-py3-none-any.whl", hash = "sha256:70761cfe03c773ceb22aa2f671b4757976145175cdfca038c02654d061d6dcc6"}, + {file = "requests-2.32.3.tar.gz", hash = "sha256:55365417734eb18255590a9ff9eb97e9e1da868d4ccd6402399eaf68af20a760"}, +] + +[package.dependencies] +certifi = ">=2017.4.17" +charset-normalizer = ">=2,<4" +idna = ">=2.5,<4" +urllib3 = ">=1.21.1,<3" + +[package.extras] +socks = ["PySocks (>=1.5.6,!=1.5.7)"] +use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] + +[[package]] +name = "ruff" +version = "0.5.7" +description = "An extremely fast Python linter and code formatter, written in Rust." +category = "dev" +optional = false +python-versions = ">=3.7" +files = [ + {file = "ruff-0.5.7-py3-none-linux_armv6l.whl", hash = "sha256:548992d342fc404ee2e15a242cdbea4f8e39a52f2e7752d0e4cbe88d2d2f416a"}, + {file = "ruff-0.5.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00cc8872331055ee017c4f1071a8a31ca0809ccc0657da1d154a1d2abac5c0be"}, + {file = "ruff-0.5.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eaf3d86a1fdac1aec8a3417a63587d93f906c678bb9ed0b796da7b59c1114a1e"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a01c34400097b06cf8a6e61b35d6d456d5bd1ae6961542de18ec81eaf33b4cb8"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcc8054f1a717e2213500edaddcf1dbb0abad40d98e1bd9d0ad364f75c763eea"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f70284e73f36558ef51602254451e50dd6cc479f8b6f8413a95fcb5db4a55fc"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a78ad870ae3c460394fc95437d43deb5c04b5c29297815a2a1de028903f19692"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ccd078c66a8e419475174bfe60a69adb36ce04f8d4e91b006f1329d5cd44bcf"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e31c9bad4ebf8fdb77b59cae75814440731060a09a0e0077d559a556453acbb"}, + {file = "ruff-0.5.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d796327eed8e168164346b769dd9a27a70e0298d667b4ecee6877ce8095ec8e"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a09ea2c3f7778cc635e7f6edf57d566a8ee8f485f3c4454db7771efb692c499"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a36d8dcf55b3a3bc353270d544fb170d75d2dff41eba5df57b4e0b67a95bb64e"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9369c218f789eefbd1b8d82a8cf25017b523ac47d96b2f531eba73770971c9e5"}, + {file = "ruff-0.5.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b88ca3db7eb377eb24fb7c82840546fb7acef75af4a74bd36e9ceb37a890257e"}, + {file = "ruff-0.5.7-py3-none-win32.whl", hash = "sha256:33d61fc0e902198a3e55719f4be6b375b28f860b09c281e4bdbf783c0566576a"}, + {file = "ruff-0.5.7-py3-none-win_amd64.whl", hash = "sha256:083bbcbe6fadb93cd86709037acc510f86eed5a314203079df174c40bbbca6b3"}, + {file = "ruff-0.5.7-py3-none-win_arm64.whl", hash = "sha256:2dca26154ff9571995107221d0aeaad0e75a77b5a682d6236cf89a58c70b76f4"}, + {file = "ruff-0.5.7.tar.gz", hash = "sha256:8dfc0a458797f5d9fb622dd0efc52d796f23f0a1493a9527f4e49a550ae9a7e5"}, +] + +[[package]] +name = "tomlkit" +version = "0.13.2" +description = "Style preserving TOML library" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "tomlkit-0.13.2-py3-none-any.whl", hash = "sha256:7a974427f6e119197f670fbbbeae7bef749a6c14e793db934baefc1b5f03efde"}, + {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, +] + +[[package]] +name = "typing-extensions" +version = "4.12.2" +description = "Backported and Experimental Type Hints for Python 3.8+" +category = "dev" +optional = false +python-versions = ">=3.8" +files = [ + {file = "typing_extensions-4.12.2-py3-none-any.whl", hash = "sha256:04e5ca0351e0f3f85c6853954072df659d0d13fac324d0072316b67d7794700d"}, + {file = "typing_extensions-4.12.2.tar.gz", hash = "sha256:1a7ead55c7e559dd4dee8856e3a88b41225abfe1ce8df57b7c13915fe121ffb8"}, +] + +[[package]] +name = "urllib3" +version = "2.2.2" +description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "urllib3-2.2.2-py3-none-any.whl", hash = "sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472"}, + {file = "urllib3-2.2.2.tar.gz", hash = "sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168"}, +] + +[package.extras] +brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] +h2 = ["h2 (>=4,<5)"] +socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] +zstd = ["zstandard (>=0.18.0)"] + +[metadata] +lock-version = "2.0" +python-versions = "^3.11" +content-hash = "ce62651c762404a5aec486bc79a653a7419c57f3fb1fddc0518a1249df5319d9" diff --git a/pyproject.toml b/pyproject.toml new file mode 100644 index 00000000..90439b09 --- /dev/null +++ b/pyproject.toml @@ -0,0 +1,56 @@ +[tool.poetry] +name = "pyvicare" +version = "0.1.0" +description = "Library to communicate with the Viessmann ViCare API." +authors = [ + "Simon Gillet " +] +maintainers = [ + "Christopher Fenner " +] +license = "Apache-2.0" +readme = "README.md" +homepage = "https://github.com/CFenner/PyViCare" +repository = "https://github.com/CFenner/PyViCare" +documentation = "https://github.com/CFenner/PyViCare" +keywords = [ + "viessmann", + "vicare", + "api" +] +classifiers = [ + "Intended Audience :: Developers", + "Natural Language :: English", + "Programming Language :: Python :: 3", + "License :: OSI Approved :: Apache Software License", + "Topic :: Software Development :: Libraries :: Python Modules", + "Operating System :: OS Independent", +] +packages = [ + { include = "PyViCare", from = "." }, +] + +[tool.poetry.urls] +"Bug Tracker" = "https://github.com/CFenner/PyViCare/issues" +Changelog = "https://github.com/CFenner/PyViCare/releases" + +[tool.poetry.dependencies] +authlib = "^1.2.0" +python = "^3.11" +requests = "^2.32.3" +#types-requests +#isort +#twine +#build + +[tool.poetry.group.dev.dependencies] +codespell = "^2.3.0" +mypy = "^1.11.1" +pylint = "^3.2.6" +pytest = "^8.3.2" +pytest-cov = "^5.0.0" +ruff = "^0.5.7" + +[build-system] +build-backend = "poetry.core.masonry.api" +requires = ["poetry-core>=1.0.0"] diff --git a/requirements.txt b/requirements.txt deleted file mode 100644 index 4c59fbe2..00000000 --- a/requirements.txt +++ /dev/null @@ -1,6 +0,0 @@ -. -pytest -types-requests -isort -twine -build diff --git a/setup.py b/setup.py deleted file mode 100644 index f29b783c..00000000 --- a/setup.py +++ /dev/null @@ -1,23 +0,0 @@ -import setuptools - -with open("README.md", "r") as fh: - long_description = fh.read() - -setuptools.setup( - name="PyViCare", - version_config=True, - author="Simon Gillet", - author_email="mail+pyvicare@gillet.ninja", - description="Library to communicate with the Viessmann ViCare API", - long_description=long_description, - long_description_content_type="text/markdown", - url="https://github.com/somm15/PyViCare", - packages=setuptools.find_packages(exclude=["tests"]), - install_requires=['Authlib>=1.2.0'], - setup_requires=['setuptools-git-versioning<1.8.0'], - classifiers=[ - "Programming Language :: Python :: 3", - "License :: OSI Approved :: Apache Software License", - "Operating System :: OS Independent", - ], -) From 385d75a5477d261301c75d39181430e89a3ba930 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Wed, 14 Aug 2024 13:15:11 +0200 Subject: [PATCH 09/27] chore(ci): modify release to use poetry (#5) * Update release.yml * minor * change name --- .github/workflows/lint.yml | 163 ++++++++++++++++------------------ .github/workflows/release.yml | 62 +++++++++---- pyproject.toml | 2 +- 3 files changed, 126 insertions(+), 101 deletions(-) diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index 7c5a6a64..c125bc15 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -1,85 +1,80 @@ ---- - name: Linting +name: Linting - # yamllint disable-line rule:truthy - on: - push: - branches: - - main - pull_request: - workflow_dispatch: - - env: - DEFAULT_PYTHON: "3.11" - - jobs: - codespell: - name: codespell - runs-on: ubuntu-latest - steps: - - name: ⤵️ Check out code from GitHub - uses: actions/checkout@v4.1.7 - - name: 🏗 Set up Poetry - run: pipx install poetry - - name: 🏗 Set up Python ${{ env.DEFAULT_PYTHON }} - id: python - uses: actions/setup-python@v5.1.1 - with: - python-version: ${{ env.DEFAULT_PYTHON }} - cache: "poetry" - - name: 🏗 Install workflow dependencies - run: | - poetry config virtualenvs.create true - poetry config virtualenvs.in-project true - - name: 🏗 Install Python dependencies - run: poetry install --no-interaction - - name: 🚀 Check code for common misspellings - run: poetry run codespell **/*.py - - ruff: - name: Ruff - runs-on: ubuntu-latest - steps: - - name: ⤵️ Check out code from GitHub - uses: actions/checkout@v4.1.7 - - name: 🏗 Set up Poetry - run: pipx install poetry - - name: 🏗 Set up Python ${{ env.DEFAULT_PYTHON }} - id: python - uses: actions/setup-python@v5.1.1 - with: - python-version: ${{ env.DEFAULT_PYTHON }} - cache: "poetry" - - name: 🏗 Install workflow dependencies - run: | - poetry config virtualenvs.create true - poetry config virtualenvs.in-project true - - name: 🏗 Install Python dependencies - run: poetry install --no-interaction - - name: 🚀 Run ruff linter - run: poetry run ruff check --output-format=github . -# - name: 🚀 Run ruff formatter -# run: poetry run ruff format --check . - - pylint: - name: pylint - runs-on: ubuntu-latest - steps: - - name: ⤵️ Check out code from GitHub - uses: actions/checkout@v4.1.7 - - name: 🏗 Set up Poetry - run: pipx install poetry - - name: 🏗 Set up Python ${{ env.DEFAULT_PYTHON }} - id: python - uses: actions/setup-python@v5.1.1 - with: - python-version: ${{ env.DEFAULT_PYTHON }} - cache: "poetry" - - name: 🏗 Install workflow dependencies - run: | - poetry config virtualenvs.create true - poetry config virtualenvs.in-project true - - name: 🏗 Install Python dependencies - run: poetry install --no-interaction - - name: 🚀 Run pylint - run: poetry run pylint **/*.py +# yamllint disable-line rule:truthy +on: + push: + branches: + - main + pull_request: + workflow_dispatch: +env: + DEFAULT_PYTHON: "3.11" +jobs: + codespell: + name: codespell + runs-on: ubuntu-latest + steps: + - name: ⤵️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: 🏗 Set up Poetry + run: pipx install poetry + - name: 🏗 Set up Python ${{ env.DEFAULT_PYTHON }} + id: python + uses: actions/setup-python@v5.1.1 + with: + python-version: ${{ env.DEFAULT_PYTHON }} + cache: "poetry" + - name: 🏗 Install workflow dependencies + run: | + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: 🏗 Install Python dependencies + run: poetry install --no-interaction + - name: 🚀 Check code for common misspellings + run: poetry run codespell **/*.py + ruff: + name: ruff + runs-on: ubuntu-latest + steps: + - name: ⤵️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: 🏗 Set up Poetry + run: pipx install poetry + - name: 🏗 Set up Python ${{ env.DEFAULT_PYTHON }} + id: python + uses: actions/setup-python@v5.1.1 + with: + python-version: ${{ env.DEFAULT_PYTHON }} + cache: "poetry" + - name: 🏗 Install workflow dependencies + run: | + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: 🏗 Install Python dependencies + run: poetry install --no-interaction + - name: 🚀 Run ruff linter + run: poetry run ruff check --output-format=github . + # - name: 🚀 Run ruff formatter + # run: poetry run ruff format --check . + pylint: + name: pylint + runs-on: ubuntu-latest + steps: + - name: ⤵️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: 🏗 Set up Poetry + run: pipx install poetry + - name: 🏗 Set up Python ${{ env.DEFAULT_PYTHON }} + id: python + uses: actions/setup-python@v5.1.1 + with: + python-version: ${{ env.DEFAULT_PYTHON }} + cache: "poetry" + - name: 🏗 Install workflow dependencies + run: | + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: 🏗 Install Python dependencies + run: poetry install --no-interaction + - name: 🚀 Run pylint + run: poetry run pylint **/*.py diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 850eed7d..214da9b9 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -1,26 +1,56 @@ -name: Upload Python Package +name: Release +# yamllint disable-line rule:truthy on: release: - types: [created] + types: + - published + +env: + DEFAULT_PYTHON: "3.11" jobs: - deploy: + release: + name: Releasing to PyPi runs-on: ubuntu-latest +# environment: +# name: release +# url: https://pypi.org/p/python-homeassistant-analytics + permissions: + contents: write + id-token: write steps: - - uses: actions/checkout@v2 - - name: Set up Python - uses: actions/setup-python@v2 + - name: ⤵️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: 🏗 Set up Poetry + run: pipx install poetry + - name: 🏗 Set up Python ${{ env.DEFAULT_PYTHON }} + id: python + uses: actions/setup-python@v5.1.1 with: - python-version: "3.x" - - name: Install dependencies + python-version: ${{ env.DEFAULT_PYTHON }} + cache: "poetry" + - name: 🏗 Install workflow dependencies run: | - python -m pip install --upgrade pip - pip install setuptools wheel twine - - name: Build and publish - env: - TWINE_USERNAME: __token__ - TWINE_PASSWORD: ${{ secrets.PYPI_APITOKEN }} + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: 🏗 Install dependencies + run: poetry install --no-interaction + - name: 🏗 Set package version run: | - python setup.py sdist bdist_wheel - twine upload dist/* + version="${{ github.event.release.tag_name }}" + version="${version,,}" + version="${version#v}" + poetry version --no-interaction "${version}" + - name: 🏗 Build package + run: poetry build --no-interaction + - name: 🚀 Publish to PyPi + uses: pypa/gh-action-pypi-publish@v1.9.0 + with: + verbose: true + print-hash: true +# - name: ✍️ Sign published artifacts +# uses: sigstore/gh-action-sigstore-python@v3.0.0 +# with: +# inputs: ./dist/*.tar.gz ./dist/*.whl +# release-signing-artifacts: true diff --git a/pyproject.toml b/pyproject.toml index 90439b09..dc191aae 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.poetry] -name = "pyvicare" +name = "pyvicare-neo" version = "0.1.0" description = "Library to communicate with the Viessmann ViCare API." authors = [ From 1246b572f7d9fdc7ac1d8e867f21ae0934743bcc Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Wed, 14 Aug 2024 13:31:47 +0200 Subject: [PATCH 10/27] chore(ci): fix pypi project (#7) Update release.yml --- .github/workflows/release.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 214da9b9..c7f2b878 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -13,9 +13,9 @@ jobs: release: name: Releasing to PyPi runs-on: ubuntu-latest -# environment: -# name: release -# url: https://pypi.org/p/python-homeassistant-analytics + environment: + name: PyPi + url: https://pypi.org/p/PyViCare-neo permissions: contents: write id-token: write From f3d4ccd545ceeac3429115bb24fcd106d5776d65 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Wed, 14 Aug 2024 13:43:37 +0200 Subject: [PATCH 11/27] chore: fix project name (#8) Update pyproject.toml --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index dc191aae..e0c3f0f3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,5 +1,5 @@ [tool.poetry] -name = "pyvicare-neo" +name = "PyViCare-neo" version = "0.1.0" description = "Library to communicate with the Viessmann ViCare API." authors = [ From d6c407da227067a52628c705b318becfbed835c2 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Wed, 14 Aug 2024 17:08:41 +0200 Subject: [PATCH 12/27] chore: delete unused files (#11) * Delete publish.sh * Delete Makefile * Delete .pylintrc * Update pyproject.toml * Update pyproject.toml * Delete .flake8 --- .flake8 | 4 ---- .pylintrc | 29 ----------------------------- Makefile | 20 -------------------- publish.sh | 18 ------------------ pyproject.toml | 27 +++++++++++++++++++++++++++ 5 files changed, 27 insertions(+), 71 deletions(-) delete mode 100644 .flake8 delete mode 100644 .pylintrc delete mode 100644 Makefile delete mode 100755 publish.sh diff --git a/.flake8 b/.flake8 deleted file mode 100644 index cd243411..00000000 --- a/.flake8 +++ /dev/null @@ -1,4 +0,0 @@ -[flake8] -ignore = E501,W503,D203 -exclude = .git,__pycache__,docs/source/conf.py,old,build,dist,.eggs,.venv,.mypy_cache -max-complexity = 10 diff --git a/.pylintrc b/.pylintrc deleted file mode 100644 index c919b7cf..00000000 --- a/.pylintrc +++ /dev/null @@ -1,29 +0,0 @@ -[MAIN] - -[MESSAGES CONTROL] -disable= - duplicate-code, - fixme, - line-too-long, - invalid-name, - too-many-public-methods, - too-few-public-methods, - # fix later - arguments-differ, - attribute-defined-outside-init, - bad-classmethod-argument, - chained-comparison, - consider-merging-isinstance, - consider-using-dict-items, - consider-using-generator, - deprecated-decorator, - missing-class-docstring, - missing-function-docstring, - missing-module-docstring, - missing-timeout, - raise-missing-from, - super-init-not-called, - too-many-boolean-expressions, - unspecified-encoding, - useless-object-inheritance, - useless-parent-delegation, diff --git a/Makefile b/Makefile deleted file mode 100644 index fb7c5cc7..00000000 --- a/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -default: format lint test - -lint: - flake8 - mypy . - -format: - isort . - autopep8 --in-place --recursive . - npm_config_yes=true npx prettier --write . - -test: -ifdef PYVICARE_CLIENT_ID - EXEC_INTEGRATION_TEST=1 pytest -else - pytest -endif - -publish: - sh publish.sh diff --git a/publish.sh b/publish.sh deleted file mode 100755 index 46ec6fca..00000000 --- a/publish.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -set -e - -LAST_TAG=$(git tag --sort=-version:refname | head -1) - -echo -n "Which version do you want to publish? (Last: $LAST_TAG) " -read new_tag - -rm -rf ./dist -git fetch -git checkout master -git reset --hard origin/master -git tag $new_tag - -python -m build --sdist --wheel --outdir dist/ -twine upload dist/* -git push --tags diff --git a/pyproject.toml b/pyproject.toml index e0c3f0f3..8e7ad18a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -51,6 +51,33 @@ pytest = "^8.3.2" pytest-cov = "^5.0.0" ruff = "^0.5.7" +[tool.pylint."MESSAGES CONTROL"] +disable = [ + "duplicate-code", + "fixme", + "line-too-long", + "invalid-name", + "too-many-public-methods", + "too-few-public-methods", + # FIXME: + "arguments-differ", + "attribute-defined-outside-init", + "bad-classmethod-argument", + "chained-comparison", + "consider-merging-isinstance", + "consider-using-dict-items", + "consider-using-generator", + "deprecated-decorator", + "missing-class-docstring", + "missing-function-docstring", + "missing-module-docstring", + "missing-timeout", + "raise-missing-from", + "unspecified-encoding", + "useless-object-inheritance", + "useless-parent-delegation", +] + [build-system] build-backend = "poetry.core.masonry.api" requires = ["poetry-core>=1.0.0"] From 58c0cb2cdc311dc7645dd9f9f8373ab57855edb6 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Wed, 14 Aug 2024 23:53:48 +0200 Subject: [PATCH 13/27] fix: correct unit getter for heating.gas.consumption.summary.dhw (#9) * Update PyViCareGazBoiler.py * Update test_Vitodens100W.py * Update PyViCareGazBoiler.py --- PyViCare/PyViCareGazBoiler.py | 2 +- tests/test_Vitodens100W.py | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/PyViCare/PyViCareGazBoiler.py b/PyViCare/PyViCareGazBoiler.py index 0098b584..c46ccc09 100644 --- a/PyViCare/PyViCareGazBoiler.py +++ b/PyViCare/PyViCareGazBoiler.py @@ -180,7 +180,7 @@ def getGasSummaryConsumptionHeatingLastYear(self): # Gas consumption for Domestic Hot Water data: @handleNotSupported def getGasSummaryConsumptionDomesticHotWaterUnit(self): - return self.service.getProperty("heating.gas.consumption.summary.dhw")["properties"]["day"]["unit"] + return self.service.getProperty("heating.gas.consumption.summary.dhw")["properties"]["unit"]["value"] @handleNotSupported def getGasSummaryConsumptionDomesticHotWaterCurrentDay(self): diff --git a/tests/test_Vitodens100W.py b/tests/test_Vitodens100W.py index 2022577d..e85450f0 100644 --- a/tests/test_Vitodens100W.py +++ b/tests/test_Vitodens100W.py @@ -32,3 +32,6 @@ def test_getPowerSummaryConsumptionHeatingCurrentDay(self): def test_getPowerSummaryConsumptionDomesticHotWaterCurrentYear(self): self.assertEqual(self.device.getPowerSummaryConsumptionDomesticHotWaterCurrentYear(), 18) + + def test_getGasSummaryConsumptionDomesticHotWaterUnit(self): + self.assertEqual(self.device.getGasSummaryConsumptionDomesticHotWaterUnit(), "cubicMeter") From 2fec0968138bf389dc22965c386106da1c326942 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 14 Aug 2024 21:55:29 +0000 Subject: [PATCH 14/27] chore: Configure Renovate (#12) Add renovate.json Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- renovate.json | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 renovate.json diff --git a/renovate.json b/renovate.json new file mode 100644 index 00000000..5db72dd6 --- /dev/null +++ b/renovate.json @@ -0,0 +1,6 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "extends": [ + "config:recommended" + ] +} From 9f00cc164e1c018b1244f433206eac9fe58ae606 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Thu, 15 Aug 2024 08:49:25 +0200 Subject: [PATCH 15/27] chore(ci): add mypy config & workflow (#13) * remove mypy config * add mypy config to toml * add mypy workflow * update dependency * remove request dependency * remove commented deps * add requests dependency --- .github/workflows/type.yml | 36 ++++++++++++++++++++++++++++++++++++ mypy.ini | 11 ----------- poetry.lock | 17 ++++++++++++++++- pyproject.toml | 34 ++++++++++++++++++++++++++++++---- 4 files changed, 82 insertions(+), 16 deletions(-) create mode 100644 .github/workflows/type.yml delete mode 100644 mypy.ini diff --git a/.github/workflows/type.yml b/.github/workflows/type.yml new file mode 100644 index 00000000..e985dff2 --- /dev/null +++ b/.github/workflows/type.yml @@ -0,0 +1,36 @@ +name: Typing + +# yamllint disable-line rule:truthy +on: + push: + branches: + - main + pull_request: + workflow_dispatch: + +env: + DEFAULT_PYTHON: "3.11" + +jobs: + mypy: + name: mypy + runs-on: ubuntu-latest + steps: + - name: ⤵️ Check out code from GitHub + uses: actions/checkout@v4.1.7 + - name: 🏗 Set up Poetry + run: pipx install poetry + - name: 🏗 Set up Python ${{ env.DEFAULT_PYTHON }} + id: python + uses: actions/setup-python@v5.1.1 + with: + python-version: ${{ env.DEFAULT_PYTHON }} + cache: "poetry" + - name: 🏗 Install workflow dependencies + run: | + poetry config virtualenvs.create true + poetry config virtualenvs.in-project true + - name: 🏗 Install dependencies + run: poetry install --no-interaction + - name: 🚀 Run mypy + run: poetry run mypy PyViCare tests diff --git a/mypy.ini b/mypy.ini deleted file mode 100644 index cc421c7d..00000000 --- a/mypy.ini +++ /dev/null @@ -1,11 +0,0 @@ -[mypy] -python_version = 3.9 -warn_return_any = True -warn_unused_configs = True -exclude = setup\.py$|build/ - -[mypy-requests_oauthlib.*] -ignore_missing_imports = True - -[mypy-authlib.*] -ignore_missing_imports = True diff --git a/poetry.lock b/poetry.lock index fdc8f0ee..b92a46ab 100644 --- a/poetry.lock +++ b/poetry.lock @@ -697,6 +697,21 @@ files = [ {file = "tomlkit-0.13.2.tar.gz", hash = "sha256:fff5fe59a87295b278abd31bec92c15d9bc4a06885ab12bcea52c71119392e79"}, ] +[[package]] +name = "types-requests" +version = "2.32.0.20240712" +description = "Typing stubs for requests" +category = "main" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-requests-2.32.0.20240712.tar.gz", hash = "sha256:90c079ff05e549f6bf50e02e910210b98b8ff1ebdd18e19c873cd237737c1358"}, + {file = "types_requests-2.32.0.20240712-py3-none-any.whl", hash = "sha256:f754283e152c752e46e70942fa2a146b5bc70393522257bb85bd1ef7e019dcc3"}, +] + +[package.dependencies] +urllib3 = ">=2" + [[package]] name = "typing-extensions" version = "4.12.2" @@ -730,4 +745,4 @@ zstd = ["zstandard (>=0.18.0)"] [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "ce62651c762404a5aec486bc79a653a7419c57f3fb1fddc0518a1249df5319d9" +content-hash = "72ec6614ba6dda4be1eb4f7b9446b47b702a1dd5626175cd2aefc858d8f7186d" diff --git a/pyproject.toml b/pyproject.toml index 8e7ad18a..7e0691a8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -37,11 +37,8 @@ Changelog = "https://github.com/CFenner/PyViCare/releases" [tool.poetry.dependencies] authlib = "^1.2.0" python = "^3.11" +types-requests = "^2.32.0.20240712" requests = "^2.32.3" -#types-requests -#isort -#twine -#build [tool.poetry.group.dev.dependencies] codespell = "^2.3.0" @@ -51,6 +48,35 @@ pytest = "^8.3.2" pytest-cov = "^5.0.0" ruff = "^0.5.7" +[tool.mypy] +platform = "linux" +python_version = "3.11" +# show error messages from unrelated files +follow_imports = "normal" +# suppress errors about unsatisfied imports +#ignore_missing_imports = true +disable_error_code = ["arg-type", "call-overload"] +# be strict +# check_untyped_defs = true +# disallow_any_generics = true +# disallow_incomplete_defs = true +disallow_subclassing_any = true +# disallow_untyped_calls = true +disallow_untyped_decorators = true +# disallow_untyped_defs = true +no_implicit_optional = true +strict_optional = true +warn_incomplete_stub = true +warn_no_return = true +warn_redundant_casts = true +warn_return_any = true +warn_unused_configs = true +warn_unused_ignores = true + +[[tool.mypy.overrides]] +module = "authlib.*" +ignore_missing_imports = true + [tool.pylint."MESSAGES CONTROL"] disable = [ "duplicate-code", From 0371e8ec53a6bc957e7a82c83454da5d5a9d150a Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Thu, 15 Aug 2024 13:59:17 +0200 Subject: [PATCH 16/27] feat(deprecation): remove usage of deprecated data points (#16) * change deprecated data points * change deprecated data points * skip testcases with outdated test data * fix test case * fix test case * update test case * fix linting issue --- PyViCare/PyViCareHeatPump.py | 4 ++-- PyViCare/PyViCareHeatingDevice.py | 8 ++++---- tests/test_TestForMissingProperties.py | 20 ++++++++++++++++---- tests/test_Vitocal250A.py | 3 ++- tests/test_Vitocaldens222F.py | 3 +++ tests/test_VitolaUniferral.py | 1 + 6 files changed, 28 insertions(+), 11 deletions(-) diff --git a/PyViCare/PyViCareHeatPump.py b/PyViCare/PyViCareHeatPump.py index bf3ec6e6..6f0cf3e4 100644 --- a/PyViCare/PyViCareHeatPump.py +++ b/PyViCare/PyViCareHeatPump.py @@ -21,11 +21,11 @@ def getAvailableCompressors(self): @handleNotSupported def getBufferMainTemperature(self): - return self.service.getProperty("heating.buffer.sensors.temperature.main")["properties"]['value']['value'] + return self.service.getProperty("heating.bufferCylinder.sensors.temperature.main")["properties"]['value']['value'] @handleNotSupported def getBufferTopTemperature(self): - return self.service.getProperty("heating.buffer.sensors.temperature.top")["properties"]['value']['value'] + return self.service.getProperty("heating.bufferCylinder.sensors.temperature.top")["properties"]['value']['value'] # Power consumption for Heating: @handleNotSupported diff --git a/PyViCare/PyViCareHeatingDevice.py b/PyViCare/PyViCareHeatingDevice.py index f6a11563..b8a12bb1 100644 --- a/PyViCare/PyViCareHeatingDevice.py +++ b/PyViCare/PyViCareHeatingDevice.py @@ -68,13 +68,13 @@ def getDomesticHotWaterConfiguredTemperature(self): @handleNotSupported def getHotWaterStorageTemperatureTop(self): - return self.service.getProperty("heating.dhw.sensors.temperature.hotWaterStorage.top")["properties"]["value"][ + return self.service.getProperty("heating.dhw.sensors.temperature.dhwCylinder.top")["properties"]["value"][ "value"] @handleNotSupported def getHotWaterStorageTemperatureBottom(self): return \ - self.service.getProperty("heating.dhw.sensors.temperature.hotWaterStorage.bottom")["properties"]["value"][ + self.service.getProperty("heating.dhw.sensors.temperature.dhwCylinder.bottom")["properties"]["value"][ "value"] @handleNotSupported @@ -115,7 +115,7 @@ def getDomesticHotWaterDesiredTemperature(self): @handleNotSupported def getDomesticHotWaterStorageTemperature(self): - return self.service.getProperty("heating.dhw.sensors.temperature.hotWaterStorage")["properties"]["value"][ + return self.service.getProperty("heating.dhw.sensors.temperature.dhwCylinder")["properties"]["value"][ "value"] @handleNotSupported @@ -592,7 +592,7 @@ def getPrograms(self): 'comfortHeating', 'dhwPrecedence', 'eco', 'external', 'fixed', 'forcedLastFromSchedule', 'frostprotection', 'holiday', 'holidayAtHome', 'manual', 'normal', 'normalCooling', 'normalCoolingEnergySaving', 'normalEnergySaving', 'normalHeating', 'reduced', 'reducedCooling', - 'reducedCoolingEnergySaving', 'reducedEnergySaving', 'reducedHeating', 'standby', 'summerEco']: + 'reducedCoolingEnergySaving', 'reducedEnergySaving', 'reducedHeating', 'standby']: with suppress(PyViCareNotSupportedFeatureError): if self.service.getProperty( f"heating.circuits.{self.circuit}.operating.programs.{program}") is not None: diff --git a/tests/test_TestForMissingProperties.py b/tests/test_TestForMissingProperties.py index 4fc2af2e..6a4d1fb4 100644 --- a/tests/test_TestForMissingProperties.py +++ b/tests/test_TestForMissingProperties.py @@ -1,4 +1,3 @@ -import json import re import unittest from os import listdir @@ -58,6 +57,12 @@ def test_missingProperties(self): 'heating.circuits.0.name', # TODO: to analyse, from Vitodens 100W 'heating.circuits.0.zone.mode', # TODO: to analyse, from Vitocal 250A + 'heating.buffer.sensors.temperature.main', # deprecated, removed 2024-09-15 FIXME: remove once data point is removed and test data is updated + 'heating.buffer.sensors.temperature.top', # deprecated, removed 2024-09-15 FIXME: remove once data point is removed and test data is updated + 'heating.dhw.sensors.temperature.hotWaterStorage', # deprecated, removed 2024-09-15 FIXME: remove once data point is removed and test data is updated + 'heating.dhw.sensors.temperature.hotWaterStorage.top', # deprecated, removed 2024-09-15 FIXME: remove once data point is removed and test data is updated + 'heating.dhw.sensors.temperature.hotWaterStorage.bottom', # deprecated, removed 2024-09-15 FIXME: remove once data point is removed and test data is updated + # Ignored for now as both are not documented in https://documentation.viessmann.com/static/iot/data-points 'device.messages.errors.raw', 'device.productIdentification', @@ -77,13 +82,20 @@ def test_missingProperties(self): if not found and len(foundInFiles) > 0 and feature not in ignore: missing_features[feature] = foundInFiles - has_missing_features = len(missing_features) > 0 - self.assertFalse(has_missing_features, json.dumps(missing_features, sort_keys=True, indent=2)) + self.assertDictEqual({}, missing_features) def test_unverifiedProperties(self): # with this test we want to verify if we access # properties which are not in any test response data + ignore = [ + 'heating.dhw.sensors.temperature.dhwCylinder', #FIXME: remove once test data is updated + 'heating.dhw.sensors.temperature.dhwCylinder.top', #FIXME: remove once test data is updated + 'heating.dhw.sensors.temperature.dhwCylinder.bottom', #FIXME: remove once test data is updated + 'heating.bufferCylinder.sensors.temperature.main', #FIXME: remove once test data is updated + 'heating.bufferCylinder.sensors.temperature.top', #FIXME: remove once test data is updated + ] + all_features = self.read_all_features() all_python_files = self.read_all_python_code() @@ -98,7 +110,7 @@ def test_unverifiedProperties(self): feature_name = re.sub(r'\.{(program|active_program)}', '', feature_name) used_features.append(feature_name) - self.assertSetEqual(set([]), set(used_features) - set(all_features)) + self.assertSetEqual(set([]), set(used_features) - set(all_features) - set(ignore)) def find_feature_in_code(self, all_python_files, feature): search_string = f'[\'"]{feature}[\'"]'.replace(".", r"\.") diff --git a/tests/test_Vitocal250A.py b/tests/test_Vitocal250A.py index 0582e56d..544f63bd 100644 --- a/tests/test_Vitocal250A.py +++ b/tests/test_Vitocal250A.py @@ -36,7 +36,7 @@ def test_getSupplyTemperaturePrimaryCircuit(self): self.device.getSupplyTemperaturePrimaryCircuit(), 5.9) def test_getPrograms(self): - expected_programs = ['comfortCooling', 'comfortCoolingEnergySaving', 'comfortEnergySaving', 'comfortHeating', 'fixed', 'forcedLastFromSchedule', 'frostprotection', 'normalCooling', 'normalCoolingEnergySaving', 'normalEnergySaving', 'normalHeating', 'reducedCooling', 'reducedCoolingEnergySaving', 'reducedEnergySaving', 'reducedHeating', 'standby', 'summerEco'] + expected_programs = ['comfortCooling', 'comfortCoolingEnergySaving', 'comfortEnergySaving', 'comfortHeating', 'fixed', 'forcedLastFromSchedule', 'frostprotection', 'normalCooling', 'normalCoolingEnergySaving', 'normalEnergySaving', 'normalHeating', 'reducedCooling', 'reducedCoolingEnergySaving', 'reducedEnergySaving', 'reducedHeating', 'standby'] self.assertListEqual( self.device.circuits[0].getPrograms(), expected_programs) @@ -85,6 +85,7 @@ def test_getPowerSummaryConsumptionHeatingUnit(self): self.assertEqual( self.device.getPowerSummaryConsumptionHeatingUnit(), "kilowattHour") + @unittest.skip("dump is not up to date, underlying data point was rernamed") def test_getBufferMainTemperature(self): self.assertAlmostEqual( self.device.getBufferMainTemperature(), 31.9) diff --git a/tests/test_Vitocaldens222F.py b/tests/test_Vitocaldens222F.py index a64ed310..c095ae16 100644 --- a/tests/test_Vitocaldens222F.py +++ b/tests/test_Vitocaldens222F.py @@ -21,10 +21,12 @@ def test_getAvailableCompressors(self): def test_getActive(self): self.assertEqual(self.device.burners[0].getActive(), False) + @unittest.skip("dump is not up to date, underlying data point was rernamed") def test_getBufferTopTemperature(self): self.assertEqual( self.device.getBufferTopTemperature(), 36) + @unittest.skip("dump is not up to date, underlying data point was rernamed") def test_getBufferMainTemperature(self): self.assertEqual( self.device.getBufferMainTemperature(), 36) @@ -71,6 +73,7 @@ def test_getOutsideTemperature(self): self.assertEqual( self.device.getOutsideTemperature(), 15.3) + @unittest.skip("dump is not up to date, underlying data point was rernamed") def test_getHotWaterStorageTemperatureTop(self): self.assertEqual( self.device.getHotWaterStorageTemperatureTop(), 50.9) diff --git a/tests/test_VitolaUniferral.py b/tests/test_VitolaUniferral.py index f3746bd0..6a3eef23 100644 --- a/tests/test_VitolaUniferral.py +++ b/tests/test_VitolaUniferral.py @@ -25,5 +25,6 @@ def test_getBurnerHours(self): def test_getBoilerTemperature(self): self.assertEqual(self.device.getBoilerTemperature(), 26.6) + @unittest.skip("dump is not up to date, underlying data point was rernamed") def test_getDomesticHotWaterStorageTemperature(self): self.assertEqual(self.device.getDomesticHotWaterStorageTemperature(), 56.9) From 9e97af2e6c5725a23d629ab31791144d4b7e8c86 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Thu, 15 Aug 2024 16:22:33 +0200 Subject: [PATCH 17/27] chore(testdata): update test data for Vitocal250A (#17) * update test data * adjust test cases --- tests/response/Vitocal250A.json | 4468 +++++++++++++----------- tests/test_TestForMissingProperties.py | 8 +- tests/test_Vitocal250A.py | 87 +- 3 files changed, 2494 insertions(+), 2069 deletions(-) diff --git a/tests/response/Vitocal250A.json b/tests/response/Vitocal250A.json index 017cfb38..9993ad63 100644 --- a/tests/response/Vitocal250A.json +++ b/tests/response/Vitocal250A.json @@ -4,55 +4,89 @@ "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.dhw.hygiene.trigger", + "feature": "device.messages.errors.raw", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.773Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene.trigger" + "properties": { + "entries": { + "type": "array", + "value": [] + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/device.messages.errors.raw" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.reducedCooling", + "feature": "device.serial", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.773Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.reducedCooling" + "properties": { + "value": { + "type": "string", + "value": "################" + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/device.serial" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.frostprotection", + "feature": "heating.boiler.sensors.temperature.commonSupply", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:26.746Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.frostprotection" + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 25.5 + } + }, + "timestamp": "2024-08-11T08:12:45.420Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.boiler.sensors.temperature.commonSupply" }, { "apiVersion": 1, "commands": {}, + "deprecated": { + "info": "replaced by heating.bufferCylinder.sensors.temperature.main", + "removalDate": "2024-09-15" + }, "deviceId": "0", - "feature": "heating.circuits.2.heating.curve", + "feature": "heating.buffer.sensors.temperature.main", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.773Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.heating.curve" + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 23.4 + } + }, + "timestamp": "2024-08-11T08:12:53.439Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.buffer.sensors.temperature.main" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.sensors.temperature.outside", + "feature": "heating.bufferCylinder.sensors.temperature.main", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -64,306 +98,199 @@ "value": { "type": "number", "unit": "celsius", - "value": 6.1 + "value": 23.4 } }, - "timestamp": "2023-01-09T15:37:04.740Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.sensors.temperature.outside" + "timestamp": "2024-08-11T08:12:53.439Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.bufferCylinder.sensors.temperature.main" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.zone.mode", + "feature": "heating.circuits", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { - "type": "boolean", - "value": false + "enabled": { + "type": "array", + "value": [ + "0" + ] } }, - "timestamp": "2023-01-09T13:42:26.753Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.zone.mode" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.reducedCoolingEnergySaving", + "feature": "heating.circuits.0.circulation.pump", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.circulation.pump" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.circulation.pump", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.773Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.reducedCoolingEnergySaving" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.circulation.pump" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.dhwAndHeatingCooling", + "feature": "heating.circuits.2.circulation.pump", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.773Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhwAndHeatingCooling" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.circulation.pump" }, { "apiVersion": 1, - "commands": { - "setSchedule": { - "isExecutable": true, - "name": "setSchedule", - "params": { - "newSchedule": { - "constraints": { - "defaultMode": "off", - "maxEntries": 4, - "modes": ["on"], - "overlapAllowed": false, - "resolution": 10 - }, - "required": true, - "type": "Schedule" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.schedule/commands/setSchedule" - } - }, + "commands": {}, "deviceId": "0", - "feature": "heating.dhw.schedule", + "feature": "heating.circuits.3.circulation.pump", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true - }, - "entries": { - "type": "Schedule", - "value": { - "fri": [ - { - "end": "09:00", - "mode": "on", - "position": 0, - "start": "04:00" - }, - { - "end": "21:00", - "mode": "on", - "position": 1, - "start": "15:30" - } - ], - "mon": [ - { - "end": "09:00", - "mode": "on", - "position": 0, - "start": "04:00" - }, - { - "end": "17:30", - "mode": "on", - "position": 1, - "start": "12:00" - } - ], - "sat": [ - { - "end": "09:00", - "mode": "on", - "position": 0, - "start": "04:00" - }, - { - "end": "21:00", - "mode": "on", - "position": 1, - "start": "15:30" - } - ], - "sun": [ - { - "end": "10:00", - "mode": "on", - "position": 0, - "start": "05:00" - }, - { - "end": "20:00", - "mode": "on", - "position": 1, - "start": "12:00" - } - ], - "thu": [ - { - "end": "09:00", - "mode": "on", - "position": 0, - "start": "04:00" - }, - { - "end": "17:30", - "mode": "on", - "position": 1, - "start": "12:00" - } - ], - "tue": [ - { - "end": "09:00", - "mode": "on", - "position": 0, - "start": "04:00" - }, - { - "end": "17:30", - "mode": "on", - "position": 1, - "start": "12:00" - } - ], - "wed": [ - { - "end": "09:00", - "mode": "on", - "position": 0, - "start": "04:00" - }, - { - "end": "17:30", - "mode": "on", - "position": 1, - "start": "12:00" - } - ] - } - } - }, - "timestamp": "2023-01-09T13:42:20.773Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.schedule" + "properties": {}, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.circulation.pump" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.frostprotection", + "feature": "heating.circuits.0.frostprotection", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { - "type": "boolean", - "value": false + "status": { + "type": "string", + "value": "off" } }, - "timestamp": "2023-01-09T13:42:23.164Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.frostprotection" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.frostprotection" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.modes.cooling", + "feature": "heating.circuits.1.frostprotection", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.cooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.frostprotection" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.frostprotection", + "feature": "heating.circuits.2.frostprotection", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:23.165Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.frostprotection" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.frostprotection" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.modes.dhwAndHeatingCooling", + "feature": "heating.circuits.3.frostprotection", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.dhwAndHeatingCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.frostprotection" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.sensors.volumetricFlow.allengra", + "feature": "heating.circuits.0.operating.programs.eco", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "status": { - "type": "string", - "value": "connected" - }, - "value": { - "type": "number", - "unit": "liter", - "value": 1586 + "active": { + "type": "boolean", + "value": false } }, - "timestamp": "2023-01-09T18:03:10.281Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.sensors.volumetricFlow.allengra" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.eco" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.cooling", + "feature": "heating.circuits.1.operating.programs.eco", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.cooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.secondaryCircuit.sensors.temperature.supply", + "feature": "heating.circuits.2.operating.programs.eco", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "connected" - }, - "value": { - "type": "number", - "unit": "celsius", - "value": 33.1 - } - }, - "timestamp": "2023-01-09T18:03:06.841Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.secondaryCircuit.sensors.temperature.supply" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.eco" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.comfortEnergySaving", + "feature": "heating.circuits.3.operating.programs.eco", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.eco" + }, + { + "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "replaced by heating.circuits.N.operating.programs.reducedEnergySaving and heating.circuits.0.operating.programs.eco", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.summerEco", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -371,268 +298,248 @@ "active": { "type": "boolean", "value": false - }, - "demand": { - "type": "string", - "value": "heating" - }, - "reason": { - "type": "string", - "value": "summerEco" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.summerEco" }, { "apiVersion": 1, - "commands": { - "activate": { - "isExecutable": false, - "name": "activate", - "params": { - "temperature": { - "constraints": { - "max": 37, - "min": 3, - "stepping": 1 - }, - "required": false, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortHeating/commands/activate" - }, - "deactivate": { - "isExecutable": false, - "name": "deactivate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortHeating/commands/deactivate" - }, - "setTemperature": { - "isExecutable": true, - "name": "setTemperature", - "params": { - "targetTemperature": { - "constraints": { - "max": 37, - "min": 3, - "stepping": 1 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortHeating/commands/setTemperature" - } + "commands": {}, + "deprecated": { + "info": "replaced by heating.circuits.N.operating.programs.reducedEnergySaving and heating.circuits.0.operating.programs.eco", + "removalDate": "2024-09-15" }, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.comfortHeating", + "feature": "heating.circuits.1.operating.programs.summerEco", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true - }, - "demand": { - "type": "string", - "value": "heating" - }, - "temperature": { - "type": "number", - "unit": "celsius", - "value": 19 - } + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.summerEco" + }, + { + "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "replaced by heating.circuits.N.operating.programs.reducedEnergySaving and heating.circuits.0.operating.programs.eco", + "removalDate": "2024-09-15" }, - "timestamp": "2023-01-09T13:59:20.392Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortHeating" + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.summerEco", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.summerEco" }, { "apiVersion": 1, "commands": {}, + "deprecated": { + "info": "replaced by heating.circuits.N.operating.programs.reducedEnergySaving and heating.circuits.0.operating.programs.eco", + "removalDate": "2024-09-15" + }, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.fixed", + "feature": "heating.circuits.3.operating.programs.summerEco", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:23.171Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.fixed" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.summerEco" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.standby", + "feature": "heating.circuits.0.sensors.temperature.room", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.standby" + "properties": {}, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.room" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.modes.standby", + "feature": "heating.circuits.1.sensors.temperature.room", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.standby" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.room" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.power.consumption.dhw", + "feature": "heating.circuits.2.sensors.temperature.room", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "day": { - "type": "array", - "unit": "kilowattHour", - "value": [1, 2.4, 2, 1.8, 1.8, 2.3, 2.7, 0.8] - }, - "dayValueReadAt": { - "type": "string", - "value": "2023-01-09T05:56:59.558Z" - }, - "month": { - "type": "array", - "unit": "kilowattHour", - "value": [18, 74.8, 48.7, 48, 10, 0, 0, 0, 0, 0, 0, 0, 0] - }, - "monthValueReadAt": { - "type": "string", - "value": "2023-01-09T05:56:59.558Z" - }, - "week": { - "type": "array", - "unit": "kilowattHour", - "value": [1, 13.8, 15.100000000000001, 16.099999999999998, 17.4, 18.2] - }, - "weekValueReadAt": { - "type": "string", - "value": "2023-01-08T19:27:12.271Z" - }, - "year": { - "type": "array", - "unit": "kilowattHour", - "value": [18, 181.5] - }, - "yearValueReadAt": { - "type": "string", - "value": "2023-01-09T05:56:59.558Z" - } - }, - "timestamp": "2023-01-09T13:42:25.153Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.power.consumption.dhw" + "properties": {}, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.room" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.dhw.pumps.circulation", + "feature": "heating.circuits.3.sensors.temperature.room", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.sensors.temperature.room" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.sensors.temperature.supply", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { "status": { "type": "string", - "value": "on" + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 23.4 } }, - "timestamp": "2023-01-09T14:59:19.291Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation" + "timestamp": "2024-08-11T08:12:53.439Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.supply" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.heating.schedule", + "feature": "heating.circuits.1.sensors.temperature.supply", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.heating.schedule" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.supply" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.standby", + "feature": "heating.circuits.2.sensors.temperature.supply", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.standby" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.supply" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.sensors.temperature.room", + "feature": "heating.circuits.3.sensors.temperature.supply", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.759Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.room" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.sensors.temperature.supply" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.dhw", + "feature": "heating.circuits.0.temperature", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhw" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.temperature" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.active", + "feature": "heating.circuits.1.temperature", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.temperature" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.temperature", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.temperature" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.3.temperature", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.506Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.active" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.temperature" }, { "apiVersion": 1, "commands": { - "setTargetTemperature": { + "setLevels": { "isExecutable": true, - "name": "setTargetTemperature", + "name": "setLevels", + "params": { + "maxTemperature": { + "constraints": { + "max": 70, + "min": 10, + "stepping": 1 + }, + "required": true, + "type": "number" + }, + "minTemperature": { + "constraints": { + "max": 30, + "min": 1, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.temperature.levels/commands/setLevels" + }, + "setMax": { + "isExecutable": true, + "name": "setMax", "params": { "temperature": { "constraints": { - "efficientLowerBorder": 0, - "efficientUpperBorder": 55, - "max": 60, + "max": 70, "min": 10, "stepping": 1 }, @@ -640,266 +547,298 @@ "type": "number" } }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.main/commands/setTargetTemperature" + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.temperature.levels/commands/setMax" + }, + "setMin": { + "isExecutable": true, + "name": "setMin", + "params": { + "temperature": { + "constraints": { + "max": 30, + "min": 1, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.temperature.levels/commands/setMin" } }, "deviceId": "0", - "feature": "heating.dhw.temperature.main", + "feature": "heating.circuits.0.temperature.levels", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "value": { + "max": { + "type": "number", + "unit": "celsius", + "value": 60 + }, + "min": { "type": "number", "unit": "celsius", - "value": 43 + "value": 20 } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.main" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.temperature.levels" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.normalCoolingEnergySaving", + "feature": "heating.circuits.1.temperature.levels", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.normalCoolingEnergySaving" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.temperature.levels" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.active", + "feature": "heating.circuits.2.temperature.levels", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:25.172Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.active" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.temperature.levels" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3", + "feature": "heating.circuits.3.temperature.levels", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.temperature.levels" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.sensors.temperature.room", + "feature": "heating.circuits.0.zone.mode", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:26.760Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.sensors.temperature.room" + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.zone.mode" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.standby", + "feature": "heating.circuits.1.zone.mode", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.standby" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.zone.mode" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.temperature", + "feature": "heating.circuits.2.zone.mode", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.734Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.temperature" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.zone.mode" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.forcedLastFromSchedule", + "feature": "heating.circuits.3.zone.mode", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.forcedLastFromSchedule" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.zone.mode" }, { "apiVersion": 1, - "commands": {}, + "commands": { + "setName": { + "isExecutable": true, + "name": "setName", + "params": { + "name": { + "constraints": { + "maxLength": 20, + "minLength": 1 + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0/commands/setName" + } + }, "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.heatingCooling", + "feature": "heating.circuits.0", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.heatingCooling" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.frostprotection", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:23.167Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.frostprotection" + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "name": { + "type": "string", + "value": "" + }, + "type": { + "type": "string", + "value": "heatingCircuit" + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.frostprotection", + "feature": "heating.circuits.1", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.743Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.frostprotection" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.power.consumption.summary.dhw", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "currentDay": { - "type": "number", - "unit": "kilowattHour", - "value": 1 - }, - "currentMonth": { - "type": "number", - "unit": "kilowattHour", - "value": 18 - }, - "currentYear": { - "type": "number", - "unit": "kilowattHour", - "value": 18 - }, - "lastMonth": { - "type": "number", - "unit": "kilowattHour", - "value": 74.8 - }, - "lastSevenDays": { - "type": "number", - "unit": "kilowattHour", - "value": 14 - }, - "lastYear": { - "type": "number", - "unit": "kilowattHour", - "value": 177.7 - } - }, - "timestamp": "2023-01-09T13:42:26.810Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.power.consumption.summary.dhw" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.sensors.temperature.supply", + "feature": "heating.circuits.2", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.773Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.supply" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.temperature", + "feature": "heating.circuits.3", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T17:53:45.565Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.temperature" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.summerEco", + "feature": "heating.dhw", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { "active": { "type": "boolean", - "value": false + "value": true + }, + "status": { + "type": "string", + "value": "on" } }, - "timestamp": "2023-01-09T13:42:26.786Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.summerEco" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw" }, { "apiVersion": 1, - "commands": {}, + "commands": { + "activate": { + "isExecutable": false, + "name": "activate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene/commands/activate" + }, + "disable": { + "isExecutable": false, + "name": "disable", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene/commands/disable" + }, + "enable": { + "isExecutable": true, + "name": "enable", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene/commands/enable" + } + }, "deviceId": "0", - "feature": "heating.compressors.0", + "feature": "heating.dhw.hygiene", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { + "enabled": { "type": "boolean", - "value": true - }, - "phase": { - "type": "string", - "value": "ready" + "value": false } }, - "timestamp": "2023-01-09T17:36:26.597Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.compressors.0" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.dhw", + "feature": "heating.dhw.hygiene.trigger", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhw" + "timestamp": "2024-08-10T22:14:12.539Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene.trigger" }, { "apiVersion": 1, - "commands": {}, + "commands": { + "activate": { + "isExecutable": true, + "name": "activate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.oneTimeCharge/commands/activate" + }, + "deactivate": { + "isExecutable": true, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.oneTimeCharge/commands/deactivate" + } + }, "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.heating", + "feature": "heating.dhw.oneTimeCharge", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -909,246 +848,163 @@ "value": false } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.heating" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.oneTimeCharge" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.comfortCooling", + "feature": "heating.dhw.pumps.circulation", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.comfortCooling" + "properties": { + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-08-11T06:49:58.799Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.reducedCoolingEnergySaving", + "feature": "heating.dhw.pumps.secondary", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reducedCoolingEnergySaving" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.secondary" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.compressors.0.statistics", + "feature": "heating.dhw.sensors.temperature.dhwCylinder", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "hours": { - "type": "number", - "unit": "hour", - "value": 1223 + "status": { + "type": "string", + "value": "connected" }, - "starts": { + "value": { "type": "number", - "unit": "", - "value": 354 + "unit": "celsius", + "value": 41.6 } }, - "timestamp": "2023-01-09T17:38:10.766Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.compressors.0.statistics" + "timestamp": "2024-08-11T08:14:30.091Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.dhwCylinder" }, { "apiVersion": 1, "commands": {}, + "deprecated": { + "info": "replaced by heating.dhw.sensors.temperature.dhwCylinder", + "removalDate": "2024-09-15" + }, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.comfortCoolingEnergySaving", + "feature": "heating.dhw.sensors.temperature.hotWaterStorage", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { - "type": "boolean", - "value": false - }, - "demand": { + "status": { "type": "string", - "value": "cooling" + "value": "connected" }, - "reason": { - "type": "string", - "value": "summerEco" + "value": { + "type": "number", + "unit": "celsius", + "value": 41.6 } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortCoolingEnergySaving" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.normalCoolingEnergySaving", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normalCoolingEnergySaving" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.3.operating.modes.heatingCooling", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.heatingCooling" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.normalCoolingEnergySaving", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normalCoolingEnergySaving" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.dhw", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhw" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.circulation.pump", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T17:34:06.757Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.circulation.pump" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.normalEnergySaving", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.normalEnergySaving" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.dhwAndHeating", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhwAndHeating" + "timestamp": "2024-08-11T08:14:30.091Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.reducedEnergySaving", + "feature": "heating.dhw.temperature.levels", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { - "type": "boolean", - "value": false + "default": { + "type": "number", + "unit": "celsius", + "value": 50 }, - "demand": { - "type": "string", - "value": "heating" + "max": { + "type": "number", + "unit": "celsius", + "value": 10 }, - "reason": { - "type": "string", - "value": "unknown" + "min": { + "type": "number", + "unit": "celsius", + "value": 10 } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedEnergySaving" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.normalCooling", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normalCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.levels" }, { "apiVersion": 1, "commands": { - "activate": { + "changeEndDate": { "isExecutable": false, - "name": "activate", + "name": "changeEndDate", "params": { - "temperature": { + "end": { "constraints": { - "max": 37, - "min": 3, - "stepping": 1 + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", + "sameDayAllowed": true }, - "required": false, - "type": "number" + "required": true, + "type": "string" } }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalHeating/commands/activate" - }, - "deactivate": { - "isExecutable": false, - "name": "deactivate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalHeating/commands/deactivate" + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/changeEndDate" }, - "setTemperature": { + "schedule": { "isExecutable": true, - "name": "setTemperature", + "name": "schedule", "params": { - "targetTemperature": { + "end": { "constraints": { - "max": 37, - "min": 3, - "stepping": 1 + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", + "sameDayAllowed": true }, "required": true, - "type": "number" + "type": "string" + }, + "start": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$" + }, + "required": true, + "type": "string" } }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalHeating/commands/setTemperature" + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/schedule" + }, + "unschedule": { + "isExecutable": true, + "name": "unschedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/unschedule" } }, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.normalHeating", + "feature": "heating.operating.programs.holiday", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -1157,96 +1013,126 @@ "type": "boolean", "value": false }, - "demand": { + "end": { "type": "string", - "value": "heating" + "value": "2000-01-01" }, - "temperature": { - "type": "number", - "unit": "celsius", - "value": 18 + "start": { + "type": "string", + "value": "2000-01-01" } }, - "timestamp": "2023-01-09T13:59:20.366Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalHeating" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.standby", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.standby" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday" }, { "apiVersion": 1, "commands": { - "activate": { + "changeEndDate": { "isExecutable": false, - "name": "activate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene/commands/activate" + "name": "changeEndDate", + "params": { + "end": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", + "sameDayAllowed": true + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holidayAtHome/commands/changeEndDate" }, - "disable": { - "isExecutable": false, - "name": "disable", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene/commands/disable" + "schedule": { + "isExecutable": true, + "name": "schedule", + "params": { + "end": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", + "sameDayAllowed": true + }, + "required": true, + "type": "string" + }, + "start": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$" + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holidayAtHome/commands/schedule" }, - "enable": { + "unschedule": { "isExecutable": true, - "name": "enable", + "name": "unschedule", "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene/commands/enable" + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holidayAtHome/commands/unschedule" } }, "deviceId": "0", - "feature": "heating.dhw.hygiene", + "feature": "heating.operating.programs.holidayAtHome", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "enabled": { + "active": { "type": "boolean", "value": false + }, + "end": { + "type": "string", + "value": "2000-01-01" + }, + "start": { + "type": "string", + "value": "2000-01-01" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.hygiene" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holidayAtHome" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.comfortCoolingEnergySaving", + "feature": "heating.sensors.temperature.hydraulicSeparator", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfortCoolingEnergySaving" + "timestamp": "2024-08-11T08:12:53.439Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.sensors.temperature.hydraulicSeparator" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.heating", + "feature": "heating.sensors.temperature.outside", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.heating" + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 22.4 + } + }, + "timestamp": "2024-08-11T08:14:35.810Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.sensors.temperature.outside" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.dhw.sensors.temperature.hotWaterStorage", + "feature": "heating.sensors.volumetricFlow.allengra", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -1257,157 +1143,177 @@ }, "value": { "type": "number", - "unit": "celsius", - "value": 37 + "unit": "liter/hour", + "value": 0 } }, - "timestamp": "2023-01-09T18:02:56.901Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage" + "timestamp": "2024-08-11T07:33:52.874Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.sensors.volumetricFlow.allengra" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.reducedHeating", + "feature": "device.productIdentification", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reducedHeating" + "properties": { + "product": { + "type": "object", + "value": { + "busAddress": 1, + "busType": "CanExternal", + "productFamily": "B_00027_VC250", + "viessmannIdentificationNumber": "################" + } + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/device.productIdentification" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.modes.heating", + "feature": "device.productMatrix", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.heating" + "properties": { + "product": { + "type": "array", + "value": [ + { + "busAddress": 1, + "busType": "CanExternal", + "productFamily": "B_00027_VC250", + "viessmannIdentificationNumber": "################" + } + ] + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/device.productMatrix" }, { "apiVersion": 1, - "commands": {}, + "commands": { + "setCurve": { + "isExecutable": true, + "name": "setCurve", + "params": { + "shift": { + "constraints": { + "max": 40, + "min": -13, + "stepping": 1 + }, + "required": true, + "type": "number" + }, + "slope": { + "constraints": { + "max": 3.5, + "min": 0.2, + "stepping": 0.1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.curve/commands/setCurve" + } + }, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.comfortCooling", + "feature": "heating.circuits.0.heating.curve", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfortCooling" + "properties": { + "shift": { + "type": "number", + "unit": "", + "value": 6 + }, + "slope": { + "type": "number", + "unit": "", + "value": 0.6 + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.curve" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.normalEnergySaving", + "feature": "heating.circuits.1.heating.curve", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normalEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.heating.curve" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.power.consumption.total", + "feature": "heating.circuits.2.heating.curve", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "day": { - "type": "array", - "unit": "kilowattHour", - "value": [ - 6.9, 7.699999999999999, 7.1, 8.1, 7.5, 6.8, 10.600000000000001, 5.1 - ] - }, - "dayValueReadAt": { - "type": "string", - "value": "2023-01-09T17:49:53.785Z" - }, - "month": { - "type": "array", - "unit": "kilowattHour", - "value": [ - 66, 538.6999999999999, 337.00000000000006, 149.8, 38.1, 0, 0, 0, 0, - 0, 0, 0, 0 - ] - }, - "monthValueReadAt": { - "type": "string", - "value": "2023-01-09T17:49:53.785Z" - }, - "week": { - "type": "array", - "unit": "kilowattHour", - "value": [6.9, 52.9, 54.7, 76.8, 206.8, 133.20000000000002] - }, - "weekValueReadAt": { - "type": "string", - "value": "2023-01-08T19:27:12.271Z" - }, - "year": { - "type": "array", - "unit": "kilowattHour", - "value": [66, 1080.3] - }, - "yearValueReadAt": { - "type": "string", - "value": "2023-01-09T17:49:53.785Z" - } - }, - "timestamp": "2023-01-09T17:53:14.995Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.power.consumption.total" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.heating.curve" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.forcedLastFromSchedule", + "feature": "heating.circuits.3.heating.curve", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.forcedLastFromSchedule" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.heating.curve" }, { "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.reducedCoolingEnergySaving", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "demand": { - "type": "string", - "value": "cooling" + "commands": { + "resetSchedule": { + "isExecutable": true, + "name": "resetSchedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.schedule/commands/resetSchedule" }, - "reason": { - "type": "string", - "value": "summerEco" + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "reduced", + "maxEntries": 4, + "modes": [ + "normal", + "comfort" + ], + "overlapAllowed": false, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.schedule/commands/setSchedule" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedCoolingEnergySaving" - }, - { - "apiVersion": 1, - "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.normalEnergySaving", + "feature": "heating.circuits.0.heating.schedule", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -1416,273 +1322,368 @@ "type": "boolean", "value": false }, - "demand": { - "type": "string", - "value": "heating" - }, - "reason": { - "type": "string", - "value": "summerEco" + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "06:00", + "mode": "comfort", + "position": 0, + "start": "03:00" + }, + { + "end": "23:00", + "mode": "normal", + "position": 1, + "start": "06:00" + } + ], + "mon": [ + { + "end": "06:00", + "mode": "comfort", + "position": 0, + "start": "03:00" + }, + { + "end": "23:00", + "mode": "normal", + "position": 1, + "start": "06:00" + } + ], + "sat": [ + { + "end": "06:00", + "mode": "comfort", + "position": 0, + "start": "03:00" + }, + { + "end": "23:00", + "mode": "normal", + "position": 1, + "start": "06:00" + } + ], + "sun": [ + { + "end": "06:00", + "mode": "comfort", + "position": 0, + "start": "03:00" + }, + { + "end": "23:00", + "mode": "normal", + "position": 1, + "start": "06:00" + } + ], + "thu": [ + { + "end": "06:00", + "mode": "comfort", + "position": 0, + "start": "03:00" + }, + { + "end": "23:00", + "mode": "normal", + "position": 1, + "start": "06:00" + } + ], + "tue": [ + { + "end": "06:00", + "mode": "comfort", + "position": 0, + "start": "03:00" + }, + { + "end": "23:00", + "mode": "normal", + "position": 1, + "start": "06:00" + } + ], + "wed": [ + { + "end": "06:00", + "mode": "comfort", + "position": 0, + "start": "03:00" + }, + { + "end": "23:00", + "mode": "normal", + "position": 1, + "start": "06:00" + } + ] + } } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.schedule" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.comfortHeating", + "feature": "heating.circuits.1.heating.schedule", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfortHeating" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.normalCoolingEnergySaving", + "feature": "heating.circuits.2.heating.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.heating.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.3.heating.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.heating.schedule" + }, + { + "apiVersion": 1, + "commands": { + "setMode": { + "isExecutable": true, + "name": "setMode", + "params": { + "mode": { + "constraints": { + "enum": [ + "heating", + "standby" + ] + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.active/commands/setMode" + } + }, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.active", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { - "type": "boolean", - "value": false - }, - "demand": { - "type": "string", - "value": "cooling" - }, - "reason": { + "value": { "type": "string", - "value": "summerEco" + "value": "standby" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalCoolingEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.active" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.reducedCooling", + "feature": "heating.circuits.1.operating.modes.active", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.active" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.heating.curve", + "feature": "heating.circuits.2.operating.modes.active", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.heating.curve" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.active" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.reducedEnergySaving", + "feature": "heating.circuits.3.operating.modes.active", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "demand": { - "type": "string", - "value": "heating" - }, - "reason": { - "type": "string", - "value": "unknown" - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reducedEnergySaving" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.active" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.sensors.temperature.return", + "feature": "heating.circuits.0.operating.modes.cooling", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "connected" - }, - "value": { - "type": "number", - "unit": "celsius", - "value": 31.6 - } - }, - "timestamp": "2023-01-09T18:02:56.849Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.sensors.temperature.return" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.cooling" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.power.consumption.heating", + "feature": "heating.circuits.1.operating.modes.cooling", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "day": { - "type": "array", - "unit": "kilowattHour", - "value": [5.9, 5.3, 5.1, 6.3, 5.7, 4.5, 7.9, 4.3] - }, - "dayValueReadAt": { - "type": "string", - "value": "2023-01-09T17:49:53.785Z" - }, - "month": { - "type": "array", - "unit": "kilowattHour", - "value": [48, 463.9, 288.3, 101.8, 28.1, 0, 0, 0, 0, 0, 0, 0, 0] - }, - "monthValueReadAt": { - "type": "string", - "value": "2023-01-09T17:49:53.785Z" - }, - "week": { - "type": "array", - "unit": "kilowattHour", - "value": [ - 5.9, 39.099999999999994, 39.6, 60.7, 189.39999999999998, 115 - ] - }, - "weekValueReadAt": { - "type": "string", - "value": "2023-01-08T19:27:12.271Z" - }, - "year": { - "type": "array", - "unit": "kilowattHour", - "value": [48, 898.8000000000001] - }, - "yearValueReadAt": { - "type": "string", - "value": "2023-01-09T17:49:53.785Z" - } - }, - "timestamp": "2023-01-09T17:53:14.993Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.power.consumption.heating" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.cooling" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.circulation.pump", + "feature": "heating.circuits.2.operating.modes.cooling", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T17:34:06.789Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.circulation.pump" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.cooling" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.compressors", + "feature": "heating.circuits.3.operating.modes.cooling", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "enabled": { - "type": "array", - "value": ["0"] - } - }, - "timestamp": "2023-01-09T13:42:24.624Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.compressors" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.cooling" }, { "apiVersion": 1, - "commands": { - "setMode": { - "isExecutable": true, - "name": "setMode", - "params": { - "mode": { - "constraints": { - "enum": ["standby", "heating", "dhw", "dhwAndHeating"] - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.active/commands/setMode" - } - }, + "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.active", + "feature": "heating.circuits.0.operating.modes.heating", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "value": { - "type": "string", - "value": "dhwAndHeating" + "active": { + "type": "boolean", + "value": false } }, - "timestamp": "2023-01-09T13:42:25.815Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.active" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.heating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.fixed", + "feature": "heating.circuits.1.operating.modes.heating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:23.169Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.fixed" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.heating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.active", + "feature": "heating.circuits.2.operating.modes.heating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:25.164Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.active" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.heating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.normalHeating", + "feature": "heating.circuits.3.operating.modes.heating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.heating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.heatingCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.heatingCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.heatingCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.heatingCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.heatingCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.heatingCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.3.operating.modes.heatingCooling", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normalHeating" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.heatingCooling" }, { "apiVersion": 1, @@ -1695,135 +1696,154 @@ "properties": { "active": { "type": "boolean", - "value": false + "value": true } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.standby" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.standby" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.normalCooling", + "feature": "heating.circuits.1.operating.modes.standby", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normalCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.standby" }, { "apiVersion": 1, - "commands": { - "setCurve": { - "isExecutable": true, - "name": "setCurve", - "params": { - "shift": { - "constraints": { - "max": 40, - "min": -13, - "stepping": 1 - }, - "required": true, - "type": "number" - }, - "slope": { - "constraints": { - "max": 3.5, - "min": 0.2, - "stepping": 0.1 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.curve/commands/setCurve" - } - }, + "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.heating.curve", + "feature": "heating.circuits.2.operating.modes.standby", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "shift": { - "type": "number", - "unit": "", - "value": 0 - }, - "slope": { - "type": "number", - "unit": "", - "value": 0.8 - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.curve" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.standby" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.sensors.temperature.room", + "feature": "heating.circuits.3.operating.modes.standby", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.757Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.room" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.standby" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.dhw", + "feature": "heating.circuits.0.operating.programs.active", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { - "type": "boolean", - "value": true - }, - "status": { + "value": { "type": "string", - "value": "on" + "value": "standby" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.active" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.comfortEnergySaving", + "feature": "heating.circuits.1.operating.programs.active", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.comfortEnergySaving" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.active" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.normalCooling", + "feature": "heating.circuits.2.operating.programs.active", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.normalCooling" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.active" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.zone.mode", + "feature": "heating.circuits.3.operating.programs.active", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.comfortCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.comfortCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfortCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.comfortCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfortCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.3.operating.programs.comfortCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.comfortCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.comfortCoolingEnergySaving", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -1831,40 +1851,60 @@ "active": { "type": "boolean", "value": false + }, + "demand": { + "type": "string", + "value": "cooling" + }, + "reason": { + "type": "string", + "value": "eco" } }, - "timestamp": "2023-01-09T13:42:26.754Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.zone.mode" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.frostprotection", + "feature": "heating.circuits.1.operating.programs.comfortCoolingEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:23.166Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.frostprotection" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfortCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.temperature", + "feature": "heating.circuits.2.operating.programs.comfortCoolingEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.733Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.temperature" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfortCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.zone.mode", + "feature": "heating.circuits.3.operating.programs.comfortCoolingEnergySaving", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.comfortCoolingEnergySaving" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.comfortEnergySaving", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -1872,205 +1912,99 @@ "active": { "type": "boolean", "value": false + }, + "demand": { + "type": "string", + "value": "heating" + }, + "reason": { + "type": "string", + "value": "eco" } }, - "timestamp": "2023-01-09T13:42:26.752Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.zone.mode" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortEnergySaving" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.comfortEnergySaving", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfortEnergySaving" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.comfortEnergySaving", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfortEnergySaving" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.3.operating.programs.comfortEnergySaving", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.comfortEnergySaving" }, { "apiVersion": 1, "commands": { - "setSchedule": { - "isExecutable": true, - "name": "setSchedule", + "activate": { + "isExecutable": false, + "name": "activate", "params": { - "newSchedule": { + "temperature": { "constraints": { - "defaultMode": "off", - "maxEntries": 4, - "modes": ["on"], - "overlapAllowed": false, - "resolution": 10 + "max": 37, + "min": 3, + "stepping": 1 }, - "required": true, - "type": "Schedule" + "required": false, + "type": "number" } }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule/commands/setSchedule" - } - }, - "deviceId": "0", - "feature": "heating.dhw.pumps.circulation.schedule", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortHeating/commands/activate" }, - "entries": { - "type": "Schedule", - "value": { - "fri": [ - { - "end": "08:00", - "mode": "on", - "position": 0, - "start": "05:20" - }, - { - "end": "15:00", - "mode": "on", - "position": 1, - "start": "11:30" - }, - { - "end": "21:00", - "mode": "on", - "position": 2, - "start": "16:00" - } - ], - "mon": [ - { - "end": "08:00", - "mode": "on", - "position": 0, - "start": "05:20" - }, - { - "end": "21:00", - "mode": "on", - "position": 1, - "start": "16:00" - } - ], - "sat": [ - { - "end": "10:00", - "mode": "on", - "position": 0, - "start": "07:00" - }, - { - "end": "21:10", - "mode": "on", - "position": 1, - "start": "12:00" - } - ], - "sun": [ - { - "end": "10:00", - "mode": "on", - "position": 0, - "start": "07:00" - }, - { - "end": "21:10", - "mode": "on", - "position": 1, - "start": "12:00" - } - ], - "thu": [ - { - "end": "08:00", - "mode": "on", - "position": 0, - "start": "05:20" - }, - { - "end": "21:00", - "mode": "on", - "position": 1, - "start": "16:00" - } - ], - "tue": [ - { - "end": "08:00", - "mode": "on", - "position": 0, - "start": "05:20" - }, - { - "end": "21:00", - "mode": "on", - "position": 1, - "start": "16:00" - } - ], - "wed": [ - { - "end": "08:00", - "mode": "on", - "position": 0, - "start": "05:20" - }, - { - "end": "21:00", - "mode": "on", - "position": 1, - "start": "16:00" - } - ] - } - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule" - }, - { - "apiVersion": 1, - "commands": { - "changeEndDate": { + "deactivate": { "isExecutable": false, - "name": "changeEndDate", - "params": { - "end": { - "constraints": { - "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", - "sameDayAllowed": true - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holidayAtHome/commands/changeEndDate" + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortHeating/commands/deactivate" }, - "schedule": { + "setTemperature": { "isExecutable": true, - "name": "schedule", + "name": "setTemperature", "params": { - "end": { - "constraints": { - "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", - "sameDayAllowed": true - }, - "required": true, - "type": "string" - }, - "start": { + "targetTemperature": { "constraints": { - "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$" + "max": 37, + "min": 3, + "stepping": 1 }, "required": true, - "type": "string" + "type": "number" } }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holidayAtHome/commands/schedule" - }, - "unschedule": { - "isExecutable": true, - "name": "unschedule", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holidayAtHome/commands/unschedule" + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortHeating/commands/setTemperature" } }, "deviceId": "0", - "feature": "heating.operating.programs.holidayAtHome", + "feature": "heating.circuits.0.operating.programs.comfortHeating", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -2079,91 +2013,60 @@ "type": "boolean", "value": false }, - "end": { + "demand": { "type": "string", - "value": "2000-01-01" + "value": "heating" }, - "start": { - "type": "string", - "value": "2000-01-01" + "temperature": { + "type": "number", + "unit": "celsius", + "value": 22 } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holidayAtHome" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.cooling", + "feature": "heating.circuits.1.operating.programs.comfortHeating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.cooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfortHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.heating.schedule", + "feature": "heating.circuits.2.operating.programs.comfortHeating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfortHeating" }, { "apiVersion": 1, - "commands": { - "changeEndDate": { - "isExecutable": false, - "name": "changeEndDate", - "params": { - "end": { - "constraints": { - "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", - "sameDayAllowed": true - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/changeEndDate" - }, - "schedule": { - "isExecutable": true, - "name": "schedule", - "params": { - "end": { - "constraints": { - "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", - "sameDayAllowed": true - }, - "required": true, - "type": "string" - }, - "start": { - "constraints": { - "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$" - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/schedule" - }, - "unschedule": { - "isExecutable": true, - "name": "unschedule", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/unschedule" - } - }, + "commands": {}, "deviceId": "0", - "feature": "heating.operating.programs.holiday", + "feature": "heating.circuits.3.operating.programs.comfortHeating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.comfortHeating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.fixed", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -2171,155 +2074,118 @@ "active": { "type": "boolean", "value": false - }, - "end": { - "type": "string", - "value": "2022-11-06" - }, - "start": { - "type": "string", - "value": "2022-11-04" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.operating.programs.holiday" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.fixed" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.reducedHeating", + "feature": "heating.circuits.1.operating.programs.fixed", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reducedHeating" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.fixed" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.summerEco", + "feature": "heating.circuits.2.operating.programs.fixed", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2023-01-09T13:59:20.409Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.summerEco" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.fixed" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.circulation.pump", + "feature": "heating.circuits.3.operating.programs.fixed", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T17:34:06.777Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.circulation.pump" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.fixed" }, { "apiVersion": 1, - "commands": {}, + "commands": { + "activate": { + "isExecutable": false, + "name": "activate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.forcedLastFromSchedule/commands/activate" + }, + "deactivate": { + "isExecutable": true, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.forcedLastFromSchedule/commands/deactivate" + } + }, "deviceId": "0", - "feature": "heating.circuits.0.frostprotection", + "feature": "heating.circuits.0.operating.programs.forcedLastFromSchedule", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "status": { - "type": "string", - "value": "off" + "active": { + "type": "boolean", + "value": false } }, - "timestamp": "2023-01-09T13:42:26.742Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.frostprotection" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.forcedLastFromSchedule" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.comfortHeating", + "feature": "heating.circuits.1.operating.programs.forcedLastFromSchedule", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfortHeating" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.forcedLastFromSchedule" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.sensors.temperature.supply", + "feature": "heating.circuits.2.operating.programs.forcedLastFromSchedule", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "connected" - }, - "value": { - "type": "number", - "unit": "celsius", - "value": 31.2 - } - }, - "timestamp": "2023-01-09T17:52:14.324Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.supply" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.forcedLastFromSchedule" }, { "apiVersion": 1, - "commands": { - "activate": { - "isExecutable": false, - "name": "activate", - "params": { - "temperature": { - "constraints": { - "max": 37, - "min": 3, - "stepping": 1 - }, - "required": false, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedHeating/commands/activate" - }, - "deactivate": { - "isExecutable": false, - "name": "deactivate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedHeating/commands/deactivate" - }, - "setTemperature": { - "isExecutable": true, - "name": "setTemperature", - "params": { - "targetTemperature": { - "constraints": { - "max": 37, - "min": 3, - "stepping": 1 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedHeating/commands/setTemperature" - } - }, + "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.reducedHeating", + "feature": "heating.circuits.3.operating.programs.forcedLastFromSchedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.forcedLastFromSchedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.frostprotection", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -2327,168 +2193,100 @@ "active": { "type": "boolean", "value": false - }, - "demand": { - "type": "string", - "value": "heating" - }, - "temperature": { - "type": "number", - "unit": "celsius", - "value": 16 } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedHeating" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.frostprotection" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.heatingCooling", + "feature": "heating.circuits.1.operating.programs.frostprotection", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.heatingCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.frostprotection" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.summerEco", + "feature": "heating.circuits.2.operating.programs.frostprotection", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2023-01-09T13:42:26.788Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.summerEco" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.frostprotection" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.reducedEnergySaving", + "feature": "heating.circuits.3.operating.programs.frostprotection", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "demand": { - "type": "string", - "value": "heating" - }, - "reason": { - "type": "string", - "value": "unknown" - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reducedEnergySaving" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.frostprotection" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.active", + "feature": "heating.circuits.0.operating.programs.normalCooling", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:25.192Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.active" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalCooling" }, { "apiVersion": 1, - "commands": { - "setHysteresis": { - "isExecutable": true, - "name": "setHysteresis", - "params": { - "hysteresis": { - "constraints": { - "max": 10, - "min": 1, - "stepping": 0.5 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis/commands/setHysteresis" - }, - "setHysteresisSwitchOffValue": { - "isExecutable": true, - "name": "setHysteresisSwitchOffValue", - "params": { - "hysteresis": { - "constraints": { - "max": 2.5, - "min": 0, - "stepping": 0.5 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis/commands/setHysteresisSwitchOffValue" - }, - "setHysteresisSwitchOnValue": { - "isExecutable": true, - "name": "setHysteresisSwitchOnValue", - "params": { - "hysteresis": { - "constraints": { - "max": 10, - "min": 1, - "stepping": 0.5 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis/commands/setHysteresisSwitchOnValue" - } - }, + "commands": {}, "deviceId": "0", - "feature": "heating.dhw.temperature.hysteresis", + "feature": "heating.circuits.1.operating.programs.normalCooling", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "switchOffValue": { - "type": "number", - "unit": "kelvin", - "value": 0 - }, - "switchOnValue": { - "type": "number", - "unit": "kelvin", - "value": 5 - }, - "value": { - "type": "number", - "unit": "kelvin", - "value": 5 - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normalCooling" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.reducedEnergySaving", + "feature": "heating.circuits.2.operating.programs.normalCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normalCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.3.operating.programs.normalCooling", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.normalCooling" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.normalCoolingEnergySaving", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -2499,594 +2297,428 @@ }, "demand": { "type": "string", - "value": "heating" + "value": "cooling" }, "reason": { "type": "string", - "value": "unknown" + "value": "eco" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.reducedEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.modes.active", + "feature": "heating.circuits.1.operating.programs.normalCoolingEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.530Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.active" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normalCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.comfortCooling", + "feature": "heating.circuits.2.operating.programs.normalCoolingEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfortCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normalCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2", + "feature": "heating.circuits.3.operating.programs.normalCoolingEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.normalCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.dhw.temperature.levels", + "feature": "heating.circuits.0.operating.programs.normalEnergySaving", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "default": { - "type": "number", - "unit": "celsius", - "value": 50 - }, - "max": { - "type": "number", - "unit": "celsius", - "value": 10 + "active": { + "type": "boolean", + "value": false }, - "min": { - "type": "number", - "unit": "celsius", - "value": 10 - } - }, - "timestamp": "2023-01-09T13:42:26.738Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.levels" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.primaryCircuit.sensors.temperature.supply", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "status": { + "demand": { "type": "string", - "value": "connected" + "value": "heating" }, - "value": { - "type": "number", - "unit": "celsius", - "value": 5.9 + "reason": { + "type": "string", + "value": "eco" } }, - "timestamp": "2023-01-09T18:02:21.344Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.primaryCircuit.sensors.temperature.supply" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.comfortEnergySaving", + "feature": "heating.circuits.1.operating.programs.normalEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfortEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normalEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.dhwAndHeating", + "feature": "heating.circuits.2.operating.programs.normalEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhwAndHeating" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normalEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.dhwAndHeatingCooling", + "feature": "heating.circuits.3.operating.programs.normalEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhwAndHeatingCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.normalEnergySaving" }, { "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.reducedCooling", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reducedCooling" - }, - { - "apiVersion": 1, - "commands": {}, + "commands": { + "activate": { + "isExecutable": false, + "name": "activate", + "params": { + "temperature": { + "constraints": { + "max": 37, + "min": 3, + "stepping": 1 + }, + "required": false, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalHeating/commands/activate" + }, + "deactivate": { + "isExecutable": false, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalHeating/commands/deactivate" + }, + "setTemperature": { + "isExecutable": true, + "name": "setTemperature", + "params": { + "targetTemperature": { + "constraints": { + "max": 37, + "min": 3, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalHeating/commands/setTemperature" + } + }, "deviceId": "0", - "feature": "heating.circuits.0.circulation.pump", + "feature": "heating.circuits.0.operating.programs.normalHeating", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "status": { + "active": { + "type": "boolean", + "value": false + }, + "demand": { "type": "string", - "value": "on" + "value": "heating" + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 20 } }, - "timestamp": "2023-01-09T17:34:06.726Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.circulation.pump" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.dhwAndHeatingCooling", + "feature": "heating.circuits.1.operating.programs.normalHeating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhwAndHeatingCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normalHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits", + "feature": "heating.circuits.2.operating.programs.normalHeating", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "enabled": { - "type": "array", - "value": ["0"] - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normalHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.standby", + "feature": "heating.circuits.3.operating.programs.normalHeating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.standby" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.normalHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.boiler.sensors.temperature.commonSupply", + "feature": "heating.circuits.0.operating.programs.reducedCooling", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "connected" - }, - "value": { - "type": "number", - "unit": "celsius", - "value": 33.2 - } - }, - "timestamp": "2023-01-09T17:41:04.405Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.boiler.sensors.temperature.commonSupply" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedCooling" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.sensors.temperature.supply", + "feature": "heating.circuits.1.operating.programs.reducedCooling", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.772Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.supply" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reducedCooling" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.dhw.temperature.hygiene", + "feature": "heating.circuits.2.operating.programs.reducedCooling", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hygiene" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reducedCooling" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.cooling", + "feature": "heating.circuits.3.operating.programs.reducedCooling", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.cooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.reducedCooling" }, { "apiVersion": 1, - "commands": { - "setSchedule": { - "isExecutable": true, - "name": "setSchedule", - "params": { - "newSchedule": { - "constraints": { - "defaultMode": "reduced", - "maxEntries": 4, - "modes": ["normal", "comfort"], - "overlapAllowed": false, - "resolution": 10 - }, - "required": true, - "type": "Schedule" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.schedule/commands/setSchedule" - } - }, + "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.heating.schedule", + "feature": "heating.circuits.0.operating.programs.reducedCoolingEnergySaving", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { "active": { "type": "boolean", - "value": true + "value": false }, - "entries": { - "type": "Schedule", - "value": { - "fri": [ - { - "end": "10:00", - "mode": "comfort", - "position": 0, - "start": "04:50" - }, - { - "end": "15:00", - "mode": "normal", - "position": 1, - "start": "10:00" - }, - { - "end": "22:00", - "mode": "comfort", - "position": 2, - "start": "15:00" - } - ], - "mon": [ - { - "end": "10:00", - "mode": "comfort", - "position": 0, - "start": "04:50" - }, - { - "end": "15:00", - "mode": "normal", - "position": 1, - "start": "10:00" - }, - { - "end": "22:00", - "mode": "comfort", - "position": 2, - "start": "15:00" - } - ], - "sat": [ - { - "end": "10:00", - "mode": "comfort", - "position": 0, - "start": "06:00" - }, - { - "end": "15:00", - "mode": "normal", - "position": 1, - "start": "10:00" - }, - { - "end": "22:00", - "mode": "comfort", - "position": 2, - "start": "15:00" - } - ], - "sun": [ - { - "end": "10:00", - "mode": "comfort", - "position": 0, - "start": "06:00" - }, - { - "end": "15:00", - "mode": "normal", - "position": 1, - "start": "10:00" - }, - { - "end": "22:00", - "mode": "comfort", - "position": 2, - "start": "15:00" - } - ], - "thu": [ - { - "end": "10:00", - "mode": "comfort", - "position": 0, - "start": "04:50" - }, - { - "end": "15:00", - "mode": "normal", - "position": 1, - "start": "10:00" - }, - { - "end": "22:00", - "mode": "comfort", - "position": 2, - "start": "15:00" - } - ], - "tue": [ - { - "end": "10:00", - "mode": "comfort", - "position": 0, - "start": "04:50" - }, - { - "end": "15:00", - "mode": "normal", - "position": 1, - "start": "10:00" - }, - { - "end": "22:00", - "mode": "comfort", - "position": 2, - "start": "15:00" - } - ], - "wed": [ - { - "end": "10:00", - "mode": "comfort", - "position": 0, - "start": "04:50" - }, - { - "end": "15:00", - "mode": "normal", - "position": 1, - "start": "10:00" - }, - { - "end": "22:00", - "mode": "comfort", - "position": 2, - "start": "15:00" - } - ] - } + "demand": { + "type": "string", + "value": "cooling" + }, + "reason": { + "type": "string", + "value": "eco" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.heating.schedule" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.dhwAndHeating", + "feature": "heating.circuits.1.operating.programs.reducedCoolingEnergySaving", "gatewayId": "################", - "isEnabled": true, + "isEnabled": false, "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true - } - }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhwAndHeating" + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reducedCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.sensors.temperature.supply", + "feature": "heating.circuits.2.operating.programs.reducedCoolingEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.sensors.temperature.supply" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reducedCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.normalEnergySaving", + "feature": "heating.circuits.3.operating.programs.reducedCoolingEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normalEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.reducedCoolingEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.normalHeating", + "feature": "heating.circuits.0.operating.programs.reducedEnergySaving", "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.normalHeating" - }, - { - "apiVersion": 1, - "commands": { - "setName": { - "isExecutable": true, - "name": "setName", - "params": { - "name": { - "constraints": { - "maxLength": 20, - "minLength": 1 - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0/commands/setName" - } - }, - "deviceId": "0", - "feature": "heating.circuits.0", - "gatewayId": "################", - "isEnabled": true, + "isEnabled": true, "isReady": true, "properties": { "active": { "type": "boolean", - "value": true + "value": false }, - "name": { + "demand": { "type": "string", - "value": "" + "value": "heating" }, - "type": { + "reason": { "type": "string", - "value": "heatingCircuit" + "value": "unknown" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.comfortCoolingEnergySaving", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfortCoolingEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.standby", + "feature": "heating.circuits.1.operating.programs.reducedEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.standby" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reducedEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.reducedCooling", + "feature": "heating.circuits.2.operating.programs.reducedEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reducedCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reducedEnergySaving" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.heatingCooling", + "feature": "heating.circuits.3.operating.programs.reducedEnergySaving", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.heatingCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.reducedEnergySaving" }, { "apiVersion": 1, - "commands": {}, + "commands": { + "activate": { + "isExecutable": false, + "name": "activate", + "params": { + "temperature": { + "constraints": { + "max": 37, + "min": 3, + "stepping": 1 + }, + "required": false, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedHeating/commands/activate" + }, + "deactivate": { + "isExecutable": false, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedHeating/commands/deactivate" + }, + "setTemperature": { + "isExecutable": true, + "name": "setTemperature", + "params": { + "targetTemperature": { + "constraints": { + "max": 37, + "min": 3, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedHeating/commands/setTemperature" + } + }, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.fixed", + "feature": "heating.circuits.0.operating.programs.reducedHeating", "gatewayId": "################", "isEnabled": true, "isReady": true, @@ -3094,417 +2726,1058 @@ "active": { "type": "boolean", "value": false + }, + "demand": { + "type": "string", + "value": "heating" + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 18 } }, - "timestamp": "2023-01-09T13:42:23.168Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.fixed" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reducedHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.reducedHeating", + "feature": "heating.circuits.1.operating.programs.reducedHeating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.reducedHeating" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.3.zone.mode", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2023-01-09T13:42:26.755Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.zone.mode" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reducedHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.frostprotection", + "feature": "heating.circuits.2.operating.programs.reducedHeating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.744Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.frostprotection" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reducedHeating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.heating.curve", + "feature": "heating.circuits.3.operating.programs.reducedHeating", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.heating.curve" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.reducedHeating" }, { "apiVersion": 1, - "commands": { - "activate": { - "isExecutable": true, - "name": "activate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.oneTimeCharge/commands/activate" - }, - "deactivate": { - "isExecutable": false, - "name": "deactivate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.oneTimeCharge/commands/deactivate" - } - }, + "commands": {}, "deviceId": "0", - "feature": "heating.dhw.oneTimeCharge", + "feature": "heating.circuits.0.operating.programs.standby", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { "active": { "type": "boolean", - "value": false + "value": true } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.dhw.oneTimeCharge" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.standby" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.comfortCooling", + "feature": "heating.circuits.1.operating.programs.standby", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfortCooling" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.standby" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.forcedLastFromSchedule", + "feature": "heating.circuits.2.operating.programs.standby", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.forcedLastFromSchedule" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.standby" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.fixed", + "feature": "heating.circuits.3.operating.programs.standby", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:23.170Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.fixed" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.standby" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.comfortHeating", + "feature": "heating.compressors", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.comfortHeating" + "properties": { + "enabled": { + "type": "array", + "value": [ + "0" + ] + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.compressors" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.comfortEnergySaving", + "feature": "heating.compressors.0", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfortEnergySaving" + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "phase": { + "type": "string", + "value": "ready" + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.compressors.0" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.buffer.sensors.temperature.main", + "feature": "heating.compressors.0.statistics", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "status": { - "type": "string", - "value": "connected" + "hours": { + "type": "number", + "unit": "hour", + "value": 3869 }, - "value": { + "starts": { "type": "number", - "unit": "celsius", - "value": 31.9 + "unit": "", + "value": 668 } }, - "timestamp": "2023-01-09T18:01:50.356Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.buffer.sensors.temperature.main" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.compressors.0.statistics" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.sensors.temperature.hydraulicSeparator", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T18:01:50.312Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.sensors.temperature.hydraulicSeparator" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.active", + "feature": "heating.device.variant", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { "value": { "type": "string", - "value": "comfortHeating" + "value": "Vitocal250A" } }, - "timestamp": "2023-01-09T13:59:20.405Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.active" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.device.variant" }, { "apiVersion": 1, - "commands": {}, + "commands": { + "setMode": { + "isExecutable": true, + "name": "setMode", + "params": { + "mode": { + "constraints": { + "enum": [ + "efficientWithMinComfort", + "efficient", + "off" + ] + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.operating.modes.active/commands/setMode" + } + }, "deviceId": "0", - "feature": "heating.circuits.1", + "feature": "heating.dhw.operating.modes.active", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1" + "properties": { + "value": { + "type": "string", + "value": "efficient" + } + }, + "timestamp": "2024-08-10T22:10:13.281Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.operating.modes.active" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.reducedCoolingEnergySaving", + "feature": "heating.dhw.operating.modes.balanced", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reducedCoolingEnergySaving" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.operating.modes.balanced" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.temperature", + "feature": "heating.dhw.operating.modes.comfort", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:26.730Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.temperature" + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-10T22:10:13.281Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.operating.modes.comfort" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.programs.comfortCoolingEnergySaving", + "feature": "heating.dhw.operating.modes.eco", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.programs.comfortCoolingEnergySaving" + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-10T22:10:13.281Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.operating.modes.eco" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.modes.dhw", + "feature": "heating.dhw.operating.modes.efficient", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.dhw" + "properties": { + "active": { + "type": "boolean", + "value": true + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.operating.modes.efficient" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.boiler.serial", + "feature": "heating.dhw.operating.modes.efficientWithMinComfort", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "value": { - "type": "string", - "value": "################" + "active": { + "type": "boolean", + "value": false } }, - "timestamp": "2023-01-09T13:42:26.823Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.boiler.serial" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.operating.modes.efficientWithMinComfort" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "device.serial", + "feature": "heating.dhw.operating.modes.off", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "value": { - "type": "string", - "value": "################" + "active": { + "type": "boolean", + "value": false } }, - "timestamp": "2023-01-09T13:42:25.810Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/device.serial" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.operating.modes.off" }, { "apiVersion": 1, - "commands": {}, + "commands": { + "resetSchedule": { + "isExecutable": true, + "name": "resetSchedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule/commands/resetSchedule" + }, + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "off", + "maxEntries": 4, + "modes": [ + "on" + ], + "overlapAllowed": false, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule/commands/setSchedule" + } + }, "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.normalHeating", + "feature": "heating.dhw.pumps.circulation.schedule", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "09:00", + "mode": "on", + "position": 0, + "start": "05:30" + }, + { + "end": "13:00", + "mode": "on", + "position": 1, + "start": "12:00" + }, + { + "end": "20:00", + "mode": "on", + "position": 2, + "start": "18:00" + } + ], + "mon": [ + { + "end": "09:00", + "mode": "on", + "position": 0, + "start": "05:30" + }, + { + "end": "13:00", + "mode": "on", + "position": 1, + "start": "12:00" + }, + { + "end": "20:00", + "mode": "on", + "position": 2, + "start": "18:00" + } + ], + "sat": [ + { + "end": "09:00", + "mode": "on", + "position": 0, + "start": "05:30" + }, + { + "end": "13:00", + "mode": "on", + "position": 1, + "start": "12:00" + }, + { + "end": "20:00", + "mode": "on", + "position": 2, + "start": "18:00" + } + ], + "sun": [ + { + "end": "09:00", + "mode": "on", + "position": 0, + "start": "05:30" + }, + { + "end": "13:00", + "mode": "on", + "position": 1, + "start": "12:00" + }, + { + "end": "20:00", + "mode": "on", + "position": 2, + "start": "18:00" + } + ], + "thu": [ + { + "end": "09:00", + "mode": "on", + "position": 0, + "start": "05:30" + }, + { + "end": "13:00", + "mode": "on", + "position": 1, + "start": "12:00" + }, + { + "end": "20:00", + "mode": "on", + "position": 2, + "start": "18:00" + } + ], + "tue": [ + { + "end": "09:00", + "mode": "on", + "position": 0, + "start": "05:30" + }, + { + "end": "13:00", + "mode": "on", + "position": 1, + "start": "12:00" + }, + { + "end": "20:00", + "mode": "on", + "position": 2, + "start": "18:00" + } + ], + "wed": [ + { + "end": "09:00", + "mode": "on", + "position": 0, + "start": "05:30" + }, + { + "end": "13:00", + "mode": "on", + "position": 1, + "start": "12:00" + }, + { + "end": "20:00", + "mode": "on", + "position": 2, + "start": "18:00" + } + ] + } + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule" + }, + { + "apiVersion": 1, + "commands": { + "resetSchedule": { + "isExecutable": true, + "name": "resetSchedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.schedule/commands/resetSchedule" + }, + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "off", + "maxEntries": 4, + "modes": [ + "on" + ], + "overlapAllowed": false, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.schedule/commands/setSchedule" + } + }, + "deviceId": "0", + "feature": "heating.dhw.schedule", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "03:00", + "mode": "on", + "position": 0, + "start": "01:00" + }, + { + "end": "15:00", + "mode": "on", + "position": 1, + "start": "13:00" + } + ], + "mon": [ + { + "end": "03:00", + "mode": "on", + "position": 0, + "start": "01:00" + }, + { + "end": "15:00", + "mode": "on", + "position": 1, + "start": "13:00" + } + ], + "sat": [ + { + "end": "03:00", + "mode": "on", + "position": 0, + "start": "01:00" + }, + { + "end": "15:00", + "mode": "on", + "position": 1, + "start": "13:00" + } + ], + "sun": [ + { + "end": "03:00", + "mode": "on", + "position": 0, + "start": "01:00" + }, + { + "end": "15:00", + "mode": "on", + "position": 1, + "start": "13:00" + } + ], + "thu": [ + { + "end": "03:00", + "mode": "on", + "position": 0, + "start": "01:00" + }, + { + "end": "15:00", + "mode": "on", + "position": 1, + "start": "13:00" + } + ], + "tue": [ + { + "end": "03:00", + "mode": "on", + "position": 0, + "start": "01:00" + }, + { + "end": "15:00", + "mode": "on", + "position": 1, + "start": "13:00" + } + ], + "wed": [ + { + "end": "03:00", + "mode": "on", + "position": 0, + "start": "01:00" + }, + { + "end": "15:00", + "mode": "on", + "position": 1, + "start": "13:00" + } + ] + } + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.dhwCylinder.middle", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normalHeating" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.dhwCylinder.middle" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.sensors.temperature.room", + "feature": "heating.dhw.sensors.temperature.dhwCylinder.top", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:26.758Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.room" + "timestamp": "2024-08-11T08:14:30.091Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.dhwCylinder.top" }, { "apiVersion": 1, "commands": {}, + "deprecated": { + "info": "replaced by heating.dhw.sensors.temperature.dhwCylinder.middle", + "removalDate": "2024-09-15" + }, "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.summerEco", + "feature": "heating.dhw.sensors.temperature.hotWaterStorage.middle", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage.middle" + }, + { + "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "replaced by heating.dhw.sensors.temperature.dhwCylinder.top", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.hotWaterStorage.top", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-11T08:14:30.091Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage.top" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.temperature.hygiene", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hygiene" + }, + { + "apiVersion": 1, + "commands": { + "setHysteresis": { + "isExecutable": true, + "name": "setHysteresis", + "params": { + "hysteresis": { + "constraints": { + "max": 10, + "min": 1, + "stepping": 0.5 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis/commands/setHysteresis" + }, + "setHysteresisSwitchOffValue": { + "isExecutable": true, + "name": "setHysteresisSwitchOffValue", + "params": { + "hysteresis": { + "constraints": { + "max": 2.5, + "min": 0, + "stepping": 0.5 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis/commands/setHysteresisSwitchOffValue" + }, + "setHysteresisSwitchOnValue": { + "isExecutable": true, + "name": "setHysteresisSwitchOnValue", + "params": { + "hysteresis": { + "constraints": { + "max": 10, + "min": 1, + "stepping": 0.5 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis/commands/setHysteresisSwitchOnValue" + } + }, + "deviceId": "0", + "feature": "heating.dhw.temperature.hysteresis", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { - "type": "boolean", - "value": false + "switchOffValue": { + "type": "number", + "unit": "kelvin", + "value": 0 + }, + "switchOnValue": { + "type": "number", + "unit": "kelvin", + "value": 5 + }, + "value": { + "type": "number", + "unit": "kelvin", + "value": 5 } }, - "timestamp": "2023-01-09T13:42:26.784Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.summerEco" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.hysteresis" }, { "apiVersion": 1, "commands": { - "activate": { + "setTargetTemperature": { "isExecutable": true, - "name": "activate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.forcedLastFromSchedule/commands/activate" - }, - "deactivate": { - "isExecutable": false, - "name": "deactivate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.forcedLastFromSchedule/commands/deactivate" + "name": "setTargetTemperature", + "params": { + "temperature": { + "constraints": { + "efficientLowerBorder": 0, + "efficientUpperBorder": 55, + "max": 60, + "min": 10, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.main/commands/setTargetTemperature" } }, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.forcedLastFromSchedule", + "feature": "heating.dhw.temperature.main", "gatewayId": "################", "isEnabled": true, "isReady": true, "properties": { - "active": { - "type": "boolean", - "value": false + "value": { + "type": "number", + "unit": "celsius", + "value": 53 } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.forcedLastFromSchedule" + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.dhw.temperature.main" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.operating.modes.dhwAndHeating", + "feature": "heating.power.consumption.cooling", "gatewayId": "################", "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.operating.modes.dhwAndHeating" + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.power.consumption.cooling" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.3.heating.schedule", + "feature": "heating.power.consumption.dhw", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.heating.schedule" + "properties": { + "day": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 0, + 0, + 2.3, + 0, + 1.8, + 0, + 1.6, + 1.9 + ] + }, + "dayValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "month": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 11.4, + 45.7, + 59.5, + 99.9, + 118.8, + 171, + 181.5, + 243.5, + 193.8, + 164.7, + 115.6, + 43, + 40.1 + ] + }, + "monthValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "week": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 5.699999999999999, + 5.700000000000001, + 12.700000000000001, + 5, + 8.6, + 19.400000000000002 + ] + }, + "weekValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "year": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 931.3, + 557.2 + ] + }, + "yearValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + } + }, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.power.consumption.dhw" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.normalCooling", + "feature": "heating.power.consumption.heating", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normalCooling" + "properties": { + "day": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 0, + 0, + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "dayValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "month": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 0, + 0, + 0, + 0, + 264, + 420.8, + 482.7, + 1024.3, + 755.3, + 553.2, + 146.5, + 0, + 5.6000000000000005 + ] + }, + "monthValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "week": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 0, + 0, + 0, + 0, + 0, + 0 + ] + }, + "weekValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "year": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 2191.7999999999997, + 1460.6 + ] + }, + "yearValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + } + }, + "timestamp": "2024-08-10T22:10:13.281Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.power.consumption.heating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.heating", + "feature": "heating.power.consumption.summary.dhw", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.heating" + "properties": { + "currentDay": { + "type": "number", + "unit": "kilowattHour", + "value": 0 + }, + "currentMonth": { + "type": "number", + "unit": "kilowattHour", + "value": 11.4 + }, + "currentYear": { + "type": "number", + "unit": "kilowattHour", + "value": 931.3 + }, + "lastMonth": { + "type": "number", + "unit": "kilowattHour", + "value": 45.7 + }, + "lastSevenDays": { + "type": "number", + "unit": "kilowattHour", + "value": 5.7 + }, + "lastYear": { + "type": "number", + "unit": "kilowattHour", + "value": 557.2 + } + }, + "timestamp": "2024-08-10T22:10:13.129Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.power.consumption.summary.dhw" }, { "apiVersion": 1, @@ -3518,48 +3791,201 @@ "currentDay": { "type": "number", "unit": "kilowattHour", - "value": 5.9 + "value": 0 }, "currentMonth": { "type": "number", "unit": "kilowattHour", - "value": 48 + "value": 0 }, "currentYear": { "type": "number", "unit": "kilowattHour", - "value": 48 + "value": 2191.7999999999997 }, "lastMonth": { "type": "number", "unit": "kilowattHour", - "value": 463.9 + "value": 0 }, "lastSevenDays": { "type": "number", "unit": "kilowattHour", - "value": 41.4 + "value": 0 }, "lastYear": { "type": "number", "unit": "kilowattHour", - "value": 882.1 + "value": 1460.6 } }, - "timestamp": "2023-01-09T17:53:15.000Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.power.consumption.summary.heating" + "timestamp": "2024-08-10T22:10:13.281Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.power.consumption.summary.heating" }, { "apiVersion": 1, "commands": {}, "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.active", + "feature": "heating.power.consumption.total", "gatewayId": "################", - "isEnabled": false, + "isEnabled": true, "isReady": true, - "properties": {}, - "timestamp": "2023-01-09T13:42:26.485Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.active" + "properties": { + "day": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 0, + 0, + 2.3, + 0, + 1.8, + 0, + 1.6, + 1.9 + ] + }, + "dayValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "month": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 11.4, + 45.7, + 59.5, + 99.9, + 382.79999999999995, + 591.8, + 664.2, + 1267.8, + 949.0999999999999, + 717.9000000000001, + 262.1, + 43, + 45.7 + ] + }, + "monthValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "week": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 5.699999999999999, + 5.700000000000001, + 12.700000000000001, + 5, + 8.6, + 19.400000000000002 + ] + }, + "weekValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + }, + "year": { + "type": "array", + "unit": "kilowattHour", + "value": [ + 3123.1, + 2017.8 + ] + }, + "yearValueReadAt": { + "type": "string", + "value": "2024-08-10T22:10:10.001Z" + } + }, + "timestamp": "2024-08-10T22:10:13.281Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.power.consumption.total" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.primaryCircuit.sensors.temperature.supply", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 38.5 + } + }, + "timestamp": "2024-08-11T08:14:35.810Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.primaryCircuit.sensors.temperature.supply" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.secondaryCircuit.sensors.temperature.supply", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 23.3 + } + }, + "timestamp": "2024-08-11T08:14:35.810Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.secondaryCircuit.sensors.temperature.supply" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.sensors.temperature.return", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 25.4 + } + }, + "timestamp": "2024-08-11T07:51:03.712Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.sensors.temperature.return" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.boiler.serial", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "################" + } + }, + "timestamp": "2024-08-10T22:10:08.969Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.boiler.serial" }, { "apiVersion": 1, @@ -3577,7 +4003,7 @@ "type": "string" } }, - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.name/commands/setName" + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.name/commands/setName" } }, "components": [], @@ -3592,8 +4018,8 @@ "value": "" } }, - "timestamp": "2023-01-09T13:42:20.774Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.0.name" + "timestamp": "2024-07-11T09:31:19.160Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.0.name" }, { "apiVersion": 1, @@ -3605,8 +4031,8 @@ "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2022-09-28T14:59:28.718Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.1.name" + "timestamp": "2024-01-21T22:19:20.140Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.1.name" }, { "apiVersion": 1, @@ -3618,8 +4044,8 @@ "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2022-09-28T14:59:28.722Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.2.name" + "timestamp": "2024-01-21T22:19:20.140Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.2.name" }, { "apiVersion": 1, @@ -3631,8 +4057,8 @@ "isEnabled": false, "isReady": true, "properties": {}, - "timestamp": "2022-09-28T14:59:28.723Z", - "uri": "https://api.viessmann.com/iot/v1/equipment/installations/#######/gateways/################/devices/0/features/heating.circuits.3.name" + "timestamp": "2024-01-21T22:19:20.140Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/#######/gateways/################/devices/0/features/heating.circuits.3.name" } ] } diff --git a/tests/test_TestForMissingProperties.py b/tests/test_TestForMissingProperties.py index 6a4d1fb4..00498f08 100644 --- a/tests/test_TestForMissingProperties.py +++ b/tests/test_TestForMissingProperties.py @@ -18,6 +18,8 @@ def test_missingProperties(self): # are added to the response files ignore = [ + 'heating.device.variant', # not yet used + 'heating.operating.programs.holidayAtHome', 'heating.operating.programs.holiday', 'heating.device.time.offset', @@ -63,9 +65,10 @@ def test_missingProperties(self): 'heating.dhw.sensors.temperature.hotWaterStorage.top', # deprecated, removed 2024-09-15 FIXME: remove once data point is removed and test data is updated 'heating.dhw.sensors.temperature.hotWaterStorage.bottom', # deprecated, removed 2024-09-15 FIXME: remove once data point is removed and test data is updated - # Ignored for now as both are not documented in https://documentation.viessmann.com/static/iot/data-points + # Ignored for now as they are not documented in https://documentation.viessmann.com/static/iot/data-points 'device.messages.errors.raw', 'device.productIdentification', + 'device.productMatrix', # gateway 'gateway.devices', # not used @@ -89,10 +92,7 @@ def test_unverifiedProperties(self): # properties which are not in any test response data ignore = [ - 'heating.dhw.sensors.temperature.dhwCylinder', #FIXME: remove once test data is updated - 'heating.dhw.sensors.temperature.dhwCylinder.top', #FIXME: remove once test data is updated 'heating.dhw.sensors.temperature.dhwCylinder.bottom', #FIXME: remove once test data is updated - 'heating.bufferCylinder.sensors.temperature.main', #FIXME: remove once test data is updated 'heating.bufferCylinder.sensors.temperature.top', #FIXME: remove once test data is updated ] diff --git a/tests/test_Vitocal250A.py b/tests/test_Vitocal250A.py index 544f63bd..e42e716e 100644 --- a/tests/test_Vitocal250A.py +++ b/tests/test_Vitocal250A.py @@ -10,40 +10,44 @@ def setUp(self): self.device = HeatPump(self.service) def test_getCompressorActive(self): - self.assertEqual(self.device.compressors[0].getActive(), True) + self.assertEqual(self.device.compressors[0].getActive(), False) def test_getCompressorHours(self): self.assertAlmostEqual( - self.device.compressors[0].getHours(), 1223) + self.device.compressors[0].getHours(), 3869) def test_getCompressorStarts(self): self.assertAlmostEqual( - self.device.compressors[0].getStarts(), 354) + self.device.compressors[0].getStarts(), 668) + + def test_getCompressorPhase(self): + self.assertEqual( + self.device.getCompressor(0).getPhase(), "ready") def test_getHeatingCurveSlope(self): self.assertAlmostEqual( - self.device.circuits[0].getHeatingCurveSlope(), 0.8) + self.device.circuits[0].getHeatingCurveSlope(), 0.6) def test_getHeatingCurveShift(self): self.assertAlmostEqual( - self.device.circuits[0].getHeatingCurveShift(), 0) + self.device.circuits[0].getHeatingCurveShift(), 6) def test_getReturnTemperature(self): - self.assertAlmostEqual(self.device.getReturnTemperature(), 31.6) + self.assertAlmostEqual(self.device.getReturnTemperature(), 25.4) def test_getSupplyTemperaturePrimaryCircuit(self): self.assertAlmostEqual( - self.device.getSupplyTemperaturePrimaryCircuit(), 5.9) + self.device.getSupplyTemperaturePrimaryCircuit(), 38.5) def test_getPrograms(self): - expected_programs = ['comfortCooling', 'comfortCoolingEnergySaving', 'comfortEnergySaving', 'comfortHeating', 'fixed', 'forcedLastFromSchedule', 'frostprotection', 'normalCooling', 'normalCoolingEnergySaving', 'normalEnergySaving', 'normalHeating', 'reducedCooling', 'reducedCoolingEnergySaving', 'reducedEnergySaving', 'reducedHeating', 'standby'] + expected_programs = ['comfortCooling', 'comfortCoolingEnergySaving', 'comfortEnergySaving', 'comfortHeating', 'eco', 'fixed', 'forcedLastFromSchedule', 'frostprotection', 'normalCooling', 'normalCoolingEnergySaving', 'normalEnergySaving', 'normalHeating', 'reducedCooling', 'reducedCoolingEnergySaving', 'reducedEnergySaving', 'reducedHeating', 'standby'] self.assertListEqual( - self.device.circuits[0].getPrograms(), expected_programs) + expected_programs, self.device.circuits[0].getPrograms()) def test_getModes(self): - expected_modes = ['standby', 'heating', 'dhw', 'dhwAndHeating'] + expected_modes = ['heating', 'standby'] self.assertListEqual( - self.device.circuits[0].getModes(), expected_modes) + expected_modes, self.device.circuits[0].getModes()) def test_getPowerConsumptionUnit(self): self.assertEqual( @@ -51,52 +55,39 @@ def test_getPowerConsumptionUnit(self): def test_getPowerConsumptionToday(self): self.assertEqual( - self.device.getPowerConsumptionToday(), 6.9) + self.device.getPowerConsumptionToday(), 0) def test_getPowerConsumptionDomesticHotWaterToday(self): self.assertAlmostEqual( - self.device.getPowerConsumptionDomesticHotWaterToday(), 1.0) + self.device.getPowerConsumptionDomesticHotWaterToday(), 0) + + def test_getPowerSummaryConsumptionHeatingUnit(self): + self.assertEqual( + self.device.getPowerSummaryConsumptionHeatingUnit(), "kilowattHour") def test_getPowerSummaryConsumptionHeatingCurrentDay(self): self.assertAlmostEqual( - self.device.getPowerSummaryConsumptionHeatingCurrentDay(), 5.9) + self.device.getPowerSummaryConsumptionHeatingCurrentDay(), 0) def test_getPowerSummaryConsumptionHeatingCurrentMonth(self): self.assertAlmostEqual( - self.device.getPowerSummaryConsumptionHeatingCurrentMonth(), 48) + self.device.getPowerSummaryConsumptionHeatingCurrentMonth(), 0) def test_getPowerSummaryConsumptionHeatingCurrentYear(self): self.assertAlmostEqual( - self.device.getPowerSummaryConsumptionHeatingCurrentYear(), 48) + self.device.getPowerSummaryConsumptionHeatingCurrentYear(), 2191.7999999999997) def test_getPowerSummaryConsumptionHeatingLastMonth(self): self.assertAlmostEqual( - self.device.getPowerSummaryConsumptionHeatingLastMonth(), 463.9) + self.device.getPowerSummaryConsumptionHeatingLastMonth(), 0) def test_getPowerSummaryConsumptionHeatingLastSevenDays(self): self.assertAlmostEqual( - self.device.getPowerSummaryConsumptionHeatingLastSevenDays(), 41.4) + self.device.getPowerSummaryConsumptionHeatingLastSevenDays(), 0) def test_getPowerSummaryConsumptionHeatingLastYear(self): self.assertAlmostEqual( - self.device.getPowerSummaryConsumptionHeatingLastYear(), 882.1) - - def test_getPowerSummaryConsumptionHeatingUnit(self): - self.assertEqual( - self.device.getPowerSummaryConsumptionHeatingUnit(), "kilowattHour") - - @unittest.skip("dump is not up to date, underlying data point was rernamed") - def test_getBufferMainTemperature(self): - self.assertAlmostEqual( - self.device.getBufferMainTemperature(), 31.9) - - def test_getOutsideTemperature(self): - self.assertEqual( - self.device.getOutsideTemperature(), 6.1) - - def test_getFrostProtectionActive(self): - self.assertEqual( - self.device.circuits[0].getFrostProtectionActive(), False) + self.device.getPowerSummaryConsumptionHeatingLastYear(), 1460.6) def test_getPowerSummaryConsumptionDomesticHotWaterUnit(self): self.assertEqual( @@ -104,28 +95,36 @@ def test_getPowerSummaryConsumptionDomesticHotWaterUnit(self): def test_getPowerSummaryConsumptionDomesticHotWaterCurrentDay(self): self.assertEqual( - self.device.getPowerSummaryConsumptionDomesticHotWaterCurrentDay(), 1.0) + self.device.getPowerSummaryConsumptionDomesticHotWaterCurrentDay(), 0) def test_getPowerSummaryConsumptionDomesticHotWaterCurrentMonth(self): self.assertEqual( - self.device.getPowerSummaryConsumptionDomesticHotWaterCurrentMonth(), 18.0) + self.device.getPowerSummaryConsumptionDomesticHotWaterCurrentMonth(), 11.4) def test_getPowerSummaryConsumptionDomesticHotWaterCurrentYear(self): self.assertEqual( - self.device.getPowerSummaryConsumptionDomesticHotWaterCurrentYear(), 18.0) + self.device.getPowerSummaryConsumptionDomesticHotWaterCurrentYear(), 931.3) def test_getPowerSummaryConsumptionDomesticHotWaterLastMonth(self): self.assertEqual( - self.device.getPowerSummaryConsumptionDomesticHotWaterLastMonth(), 74.8) + self.device.getPowerSummaryConsumptionDomesticHotWaterLastMonth(), 45.7) def test_getPowerSummaryConsumptionDomesticHotWaterLastSevenDays(self): self.assertEqual( - self.device.getPowerSummaryConsumptionDomesticHotWaterLastSevenDays(), 14.0) + self.device.getPowerSummaryConsumptionDomesticHotWaterLastSevenDays(), 5.7) def test_getPowerSummaryConsumptionDomesticHotWaterLastYear(self): self.assertEqual( - self.device.getPowerSummaryConsumptionDomesticHotWaterLastYear(), 177.7) + self.device.getPowerSummaryConsumptionDomesticHotWaterLastYear(), 557.2) - def test_getCompressorPhase(self): + def test_getBufferMainTemperature(self): + self.assertAlmostEqual( + self.device.getBufferMainTemperature(), 23.4) + + def test_getOutsideTemperature(self): self.assertEqual( - self.device.getCompressor(0).getPhase(), "ready") + self.device.getOutsideTemperature(), 22.4) + + def test_getFrostProtectionActive(self): + self.assertEqual( + self.device.circuits[0].getFrostProtectionActive(), False) From c53548366d28dbb010498879687ca301f05161fe Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Fri, 16 Aug 2024 22:44:00 +0200 Subject: [PATCH 18/27] chore(renovate): add default label (#21) Update and rename renovate.json to .github/renovate.json --- renovate.json => .github/renovate.json | 1 + 1 file changed, 1 insertion(+) rename renovate.json => .github/renovate.json (79%) diff --git a/renovate.json b/.github/renovate.json similarity index 79% rename from renovate.json rename to .github/renovate.json index 5db72dd6..eee44534 100644 --- a/renovate.json +++ b/.github/renovate.json @@ -1,5 +1,6 @@ { "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "labels": ["dependencies"], "extends": [ "config:recommended" ] From 38faf2e56956fe1e4973e6337d5cac066189b9d9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Fri, 16 Aug 2024 22:48:38 +0200 Subject: [PATCH 19/27] chore(deps): update dependency ruff to ^0.6.0 (#20) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 73 +++++++++++++++----------------------------------- pyproject.toml | 2 +- 2 files changed, 23 insertions(+), 52 deletions(-) diff --git a/poetry.lock b/poetry.lock index b92a46ab..d3d2a74e 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,10 +1,9 @@ -# This file is automatically @generated by Poetry and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "astroid" version = "3.2.4" description = "An abstract syntax tree for Python with inference support." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -16,7 +15,6 @@ files = [ name = "authlib" version = "1.3.1" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -31,7 +29,6 @@ cryptography = "*" name = "certifi" version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." -category = "main" optional = false python-versions = ">=3.6" files = [ @@ -43,7 +40,6 @@ files = [ name = "cffi" version = "1.17.0" description = "Foreign Function Interface for Python calling C code." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -123,7 +119,6 @@ pycparser = "*" name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -223,7 +218,6 @@ files = [ name = "codespell" version = "2.3.0" description = "Codespell" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -241,7 +235,6 @@ types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." -category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -253,7 +246,6 @@ files = [ name = "coverage" version = "7.6.1" description = "Code coverage measurement for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -338,7 +330,6 @@ toml = ["tomli"] name = "cryptography" version = "43.0.0" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." -category = "main" optional = false python-versions = ">=3.7" files = [ @@ -388,7 +379,6 @@ test-randomorder = ["pytest-randomly"] name = "dill" version = "0.3.8" description = "serialize all of Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -404,7 +394,6 @@ profile = ["gprof2dot (>=2022.7.29)"] name = "idna" version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" -category = "main" optional = false python-versions = ">=3.5" files = [ @@ -416,7 +405,6 @@ files = [ name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" -category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -428,7 +416,6 @@ files = [ name = "isort" version = "5.13.2" description = "A Python utility / library to sort Python imports." -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -443,7 +430,6 @@ colors = ["colorama (>=0.4.6)"] name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" -category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -455,7 +441,6 @@ files = [ name = "mypy" version = "1.11.1" description = "Optional static typing for Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -502,7 +487,6 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." -category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -514,7 +498,6 @@ files = [ name = "packaging" version = "24.1" description = "Core utilities for Python packages" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -526,7 +509,6 @@ files = [ name = "platformdirs" version = "4.2.2" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -543,7 +525,6 @@ type = ["mypy (>=1.8)"] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -559,7 +540,6 @@ testing = ["pytest", "pytest-benchmark"] name = "pycparser" version = "2.22" description = "C parser in Python" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -571,7 +551,6 @@ files = [ name = "pylint" version = "3.2.6" description = "python code static checker" -category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -583,8 +562,8 @@ files = [ astroid = ">=3.2.4,<=3.3.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ - {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" mccabe = ">=0.6,<0.8" @@ -599,7 +578,6 @@ testutils = ["gitpython (>3)"] name = "pytest" version = "8.3.2" description = "pytest: simple powerful testing with Python" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -620,7 +598,6 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments name = "pytest-cov" version = "5.0.0" description = "Pytest plugin for measuring coverage." -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -639,7 +616,6 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] name = "requests" version = "2.32.3" description = "Python HTTP for Humans." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -659,37 +635,35 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.5.7" +version = "0.6.0" description = "An extremely fast Python linter and code formatter, written in Rust." -category = "dev" optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.5.7-py3-none-linux_armv6l.whl", hash = "sha256:548992d342fc404ee2e15a242cdbea4f8e39a52f2e7752d0e4cbe88d2d2f416a"}, - {file = "ruff-0.5.7-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:00cc8872331055ee017c4f1071a8a31ca0809ccc0657da1d154a1d2abac5c0be"}, - {file = "ruff-0.5.7-py3-none-macosx_11_0_arm64.whl", hash = "sha256:eaf3d86a1fdac1aec8a3417a63587d93f906c678bb9ed0b796da7b59c1114a1e"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a01c34400097b06cf8a6e61b35d6d456d5bd1ae6961542de18ec81eaf33b4cb8"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcc8054f1a717e2213500edaddcf1dbb0abad40d98e1bd9d0ad364f75c763eea"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f70284e73f36558ef51602254451e50dd6cc479f8b6f8413a95fcb5db4a55fc"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:a78ad870ae3c460394fc95437d43deb5c04b5c29297815a2a1de028903f19692"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9ccd078c66a8e419475174bfe60a69adb36ce04f8d4e91b006f1329d5cd44bcf"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7e31c9bad4ebf8fdb77b59cae75814440731060a09a0e0077d559a556453acbb"}, - {file = "ruff-0.5.7-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d796327eed8e168164346b769dd9a27a70e0298d667b4ecee6877ce8095ec8e"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:4a09ea2c3f7778cc635e7f6edf57d566a8ee8f485f3c4454db7771efb692c499"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:a36d8dcf55b3a3bc353270d544fb170d75d2dff41eba5df57b4e0b67a95bb64e"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9369c218f789eefbd1b8d82a8cf25017b523ac47d96b2f531eba73770971c9e5"}, - {file = "ruff-0.5.7-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:b88ca3db7eb377eb24fb7c82840546fb7acef75af4a74bd36e9ceb37a890257e"}, - {file = "ruff-0.5.7-py3-none-win32.whl", hash = "sha256:33d61fc0e902198a3e55719f4be6b375b28f860b09c281e4bdbf783c0566576a"}, - {file = "ruff-0.5.7-py3-none-win_amd64.whl", hash = "sha256:083bbcbe6fadb93cd86709037acc510f86eed5a314203079df174c40bbbca6b3"}, - {file = "ruff-0.5.7-py3-none-win_arm64.whl", hash = "sha256:2dca26154ff9571995107221d0aeaad0e75a77b5a682d6236cf89a58c70b76f4"}, - {file = "ruff-0.5.7.tar.gz", hash = "sha256:8dfc0a458797f5d9fb622dd0efc52d796f23f0a1493a9527f4e49a550ae9a7e5"}, + {file = "ruff-0.6.0-py3-none-linux_armv6l.whl", hash = "sha256:92dcce923e5df265781e5fc76f9a1edad52201a7aafe56e586b90988d5239013"}, + {file = "ruff-0.6.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:31b90ff9dc79ed476c04e957ba7e2b95c3fceb76148f2079d0d68a908d2cfae7"}, + {file = "ruff-0.6.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6d834a9ec9f8287dd6c3297058b3a265ed6b59233db22593379ee38ebc4b9768"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2089267692696aba342179471831a085043f218706e642564812145df8b8d0d"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa62b423ee4bbd8765f2c1dbe8f6aac203e0583993a91453dc0a449d465c84da"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7344e1a964b16b1137ea361d6516ce4ee61a0403fa94252a1913ecc1311adcae"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:487f3a35c3f33bf82be212ce15dc6278ea854e35573a3f809442f73bec8b2760"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75db409984077a793cf344d499165298a6f65449e905747ac65983b12e3e64b1"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84908bd603533ecf1db456d8fc2665d1f4335d722e84bc871d3bbd2d1116c272"}, + {file = "ruff-0.6.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f1749a0aef3ec41ed91a0e2127a6ae97d2e2853af16dbd4f3c00d7a3af726c5"}, + {file = "ruff-0.6.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:016fea751e2bcfbbd2f8cb19b97b37b3fd33148e4df45b526e87096f4e17354f"}, + {file = "ruff-0.6.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6ae80f141b53b2e36e230017e64f5ea2def18fac14334ffceaae1b780d70c4f7"}, + {file = "ruff-0.6.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:eaaaf33ea4b3f63fd264d6a6f4a73fa224bbfda4b438ffea59a5340f4afa2bb5"}, + {file = "ruff-0.6.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7667ddd1fc688150a7ca4137140867584c63309695a30016880caf20831503a0"}, + {file = "ruff-0.6.0-py3-none-win32.whl", hash = "sha256:ae48365aae60d40865a412356f8c6f2c0be1c928591168111eaf07eaefa6bea3"}, + {file = "ruff-0.6.0-py3-none-win_amd64.whl", hash = "sha256:774032b507c96f0c803c8237ce7d2ef3934df208a09c40fa809c2931f957fe5e"}, + {file = "ruff-0.6.0-py3-none-win_arm64.whl", hash = "sha256:a5366e8c3ae6b2dc32821749b532606c42e609a99b0ae1472cf601da931a048c"}, + {file = "ruff-0.6.0.tar.gz", hash = "sha256:272a81830f68f9bd19d49eaf7fa01a5545c5a2e86f32a9935bb0e4bb9a1db5b8"}, ] [[package]] name = "tomlkit" version = "0.13.2" description = "Style preserving TOML library" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -701,7 +675,6 @@ files = [ name = "types-requests" version = "2.32.0.20240712" description = "Typing stubs for requests" -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -716,7 +689,6 @@ urllib3 = ">=2" name = "typing-extensions" version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" -category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -728,7 +700,6 @@ files = [ name = "urllib3" version = "2.2.2" description = "HTTP library with thread-safe connection pooling, file post, and more." -category = "main" optional = false python-versions = ">=3.8" files = [ @@ -745,4 +716,4 @@ zstd = ["zstandard (>=0.18.0)"] [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "72ec6614ba6dda4be1eb4f7b9446b47b702a1dd5626175cd2aefc858d8f7186d" +content-hash = "08e5fde481073a2081093dc38909ad5b2ec297030fa89d488383fe916ff2b1c4" diff --git a/pyproject.toml b/pyproject.toml index 7e0691a8..336181cd 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -46,7 +46,7 @@ mypy = "^1.11.1" pylint = "^3.2.6" pytest = "^8.3.2" pytest-cov = "^5.0.0" -ruff = "^0.5.7" +ruff = "^0.6.0" [tool.mypy] platform = "linux" From 08fa6cd01a014920241f008991f7bdb9f5618341 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Fri, 16 Aug 2024 22:49:11 +0200 Subject: [PATCH 20/27] feat: expose hysteresis value data points (#19) * update test data * add hysteresis getter * add setDomesticHotWaterHysteresis * move to heat pump * add test case * update --- PyViCare/PyViCareHeatPump.py | 46 +++++++++++++++++++++++++- tests/test_TestForMissingProperties.py | 1 - tests/test_Vitocal250A.py | 12 +++++++ 3 files changed, 57 insertions(+), 2 deletions(-) diff --git a/PyViCare/PyViCareHeatPump.py b/PyViCare/PyViCareHeatPump.py index 6f0cf3e4..c5776a81 100644 --- a/PyViCare/PyViCareHeatPump.py +++ b/PyViCare/PyViCareHeatPump.py @@ -3,7 +3,7 @@ from PyViCare.PyViCareHeatingDevice import (HeatingDevice, HeatingDeviceWithComponent) -from PyViCare.PyViCareUtils import PyViCareNotSupportedFeatureError, handleNotSupported +from PyViCare.PyViCareUtils import PyViCareNotSupportedFeatureError, handleAPICommandErrors, handleNotSupported class HeatPump(HeatingDevice): @@ -152,6 +152,50 @@ def activateVentilationProgram(self, program): """ return self.service.setProperty(f"ventilation.operating.programs.{program}", "activate", {}) + + @handleNotSupported + def getDomesticHotWaterHysteresis(self): + return self.service.getProperty("heating.dhw.temperature.hysteresis")["properties"]["value"]["value"] + + @handleNotSupported + def getDomesticHotWaterHysteresisMin(self): + return self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresis"]["params"]["hysteresis"]["constraints"]["min"] + + @handleNotSupported + def getDomesticHotWaterHysteresisMax(self): + return self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresis"]["params"]["hysteresis"]["constraints"]["max"] + + @handleNotSupported + def getDomesticHotWaterHysteresisStepping(self): + return self.service.getProperty("heating.dhw.temperature.hysteresis")["commands"]["setHysteresis"]["params"]["hysteresis"]["constraints"]["stepping"] + + @handleNotSupported + def getDomesticHotWaterHysteresisUnit(self): + return self.service.getProperty("heating.dhw.temperature.hysteresis")["properties"]["value"]["unit"] + + @handleAPICommandErrors + def setDomesticHotWaterHysteresis(self, temperature): + """ Set the hysteresis temperature for domestic host water + Parameters + ---------- + temperature : float + hysteresis temperature + + Returns + ------- + result: json + json representation of the answer + """ + return self.service.setProperty("heating.dhw.temperature.hysteresis", "setHysteresis", {'hysteresis': int(temperature)}) + + @handleNotSupported + def getDomesticHotWaterHysteresisSwitchOn(self): + return self.service.getProperty("heating.dhw.temperature.hysteresis")["properties"]["switchOnValue"]["value"] + + @handleNotSupported + def getDomesticHotWaterHysteresisSwitchOff(self): + return self.service.getProperty("heating.dhw.temperature.hysteresis")["properties"]["switchOffValue"]["value"] + class Compressor(HeatingDeviceWithComponent): @property diff --git a/tests/test_TestForMissingProperties.py b/tests/test_TestForMissingProperties.py index 00498f08..8e97edc1 100644 --- a/tests/test_TestForMissingProperties.py +++ b/tests/test_TestForMissingProperties.py @@ -32,7 +32,6 @@ def test_missingProperties(self): 'heating.power.consumption', 'heating.circuits.0.temperature.levels', # hint: command - 'heating.dhw.temperature.hysteresis', # hint: command 'heating.dhw.hygiene', 'heating.dhw.temperature', 'heating.burners', diff --git a/tests/test_Vitocal250A.py b/tests/test_Vitocal250A.py index e42e716e..9c46ebb0 100644 --- a/tests/test_Vitocal250A.py +++ b/tests/test_Vitocal250A.py @@ -128,3 +128,15 @@ def test_getOutsideTemperature(self): def test_getFrostProtectionActive(self): self.assertEqual( self.device.circuits[0].getFrostProtectionActive(), False) + + def test_getDomesticHotWaterHysteresis(self): + self.assertEqual( + self.device.getDomesticHotWaterHysteresis(), 5) + self.assertEqual( + self.device.getDomesticHotWaterHysteresisUnit(), 'kelvin') + self.assertEqual( + self.device.getDomesticHotWaterHysteresisMin(), 1) + self.assertEqual( + self.device.getDomesticHotWaterHysteresisMax(), 10) + self.assertEqual( + self.device.getDomesticHotWaterHysteresisStepping(), 0.5) From e2cbe19af5fb9b0df68e8b9c1f0940536efc7820 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Sat, 17 Aug 2024 14:19:28 +0200 Subject: [PATCH 21/27] chore(deps): update dependency ruff to v0.6.1 (#22) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- poetry.lock | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/poetry.lock b/poetry.lock index d3d2a74e..c139686f 100644 --- a/poetry.lock +++ b/poetry.lock @@ -635,29 +635,29 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] [[package]] name = "ruff" -version = "0.6.0" +version = "0.6.1" description = "An extremely fast Python linter and code formatter, written in Rust." optional = false python-versions = ">=3.7" files = [ - {file = "ruff-0.6.0-py3-none-linux_armv6l.whl", hash = "sha256:92dcce923e5df265781e5fc76f9a1edad52201a7aafe56e586b90988d5239013"}, - {file = "ruff-0.6.0-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:31b90ff9dc79ed476c04e957ba7e2b95c3fceb76148f2079d0d68a908d2cfae7"}, - {file = "ruff-0.6.0-py3-none-macosx_11_0_arm64.whl", hash = "sha256:6d834a9ec9f8287dd6c3297058b3a265ed6b59233db22593379ee38ebc4b9768"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f2089267692696aba342179471831a085043f218706e642564812145df8b8d0d"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aa62b423ee4bbd8765f2c1dbe8f6aac203e0583993a91453dc0a449d465c84da"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7344e1a964b16b1137ea361d6516ce4ee61a0403fa94252a1913ecc1311adcae"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:487f3a35c3f33bf82be212ce15dc6278ea854e35573a3f809442f73bec8b2760"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:75db409984077a793cf344d499165298a6f65449e905747ac65983b12e3e64b1"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84908bd603533ecf1db456d8fc2665d1f4335d722e84bc871d3bbd2d1116c272"}, - {file = "ruff-0.6.0-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0f1749a0aef3ec41ed91a0e2127a6ae97d2e2853af16dbd4f3c00d7a3af726c5"}, - {file = "ruff-0.6.0-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:016fea751e2bcfbbd2f8cb19b97b37b3fd33148e4df45b526e87096f4e17354f"}, - {file = "ruff-0.6.0-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:6ae80f141b53b2e36e230017e64f5ea2def18fac14334ffceaae1b780d70c4f7"}, - {file = "ruff-0.6.0-py3-none-musllinux_1_2_i686.whl", hash = "sha256:eaaaf33ea4b3f63fd264d6a6f4a73fa224bbfda4b438ffea59a5340f4afa2bb5"}, - {file = "ruff-0.6.0-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7667ddd1fc688150a7ca4137140867584c63309695a30016880caf20831503a0"}, - {file = "ruff-0.6.0-py3-none-win32.whl", hash = "sha256:ae48365aae60d40865a412356f8c6f2c0be1c928591168111eaf07eaefa6bea3"}, - {file = "ruff-0.6.0-py3-none-win_amd64.whl", hash = "sha256:774032b507c96f0c803c8237ce7d2ef3934df208a09c40fa809c2931f957fe5e"}, - {file = "ruff-0.6.0-py3-none-win_arm64.whl", hash = "sha256:a5366e8c3ae6b2dc32821749b532606c42e609a99b0ae1472cf601da931a048c"}, - {file = "ruff-0.6.0.tar.gz", hash = "sha256:272a81830f68f9bd19d49eaf7fa01a5545c5a2e86f32a9935bb0e4bb9a1db5b8"}, + {file = "ruff-0.6.1-py3-none-linux_armv6l.whl", hash = "sha256:b4bb7de6a24169dc023f992718a9417380301b0c2da0fe85919f47264fb8add9"}, + {file = "ruff-0.6.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:45efaae53b360c81043e311cdec8a7696420b3d3e8935202c2846e7a97d4edae"}, + {file = "ruff-0.6.1-py3-none-macosx_11_0_arm64.whl", hash = "sha256:bc60c7d71b732c8fa73cf995efc0c836a2fd8b9810e115be8babb24ae87e0850"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c7477c3b9da822e2db0b4e0b59e61b8a23e87886e727b327e7dcaf06213c5cf"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3a0af7ab3f86e3dc9f157a928e08e26c4b40707d0612b01cd577cc84b8905cc9"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:392688dbb50fecf1bf7126731c90c11a9df1c3a4cdc3f481b53e851da5634fa5"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5278d3e095ccc8c30430bcc9bc550f778790acc211865520f3041910a28d0024"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fe6d5f65d6f276ee7a0fc50a0cecaccb362d30ef98a110f99cac1c7872df2f18"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2e0dd11e2ae553ee5c92a81731d88a9883af8db7408db47fc81887c1f8b672e"}, + {file = "ruff-0.6.1-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d812615525a34ecfc07fd93f906ef5b93656be01dfae9a819e31caa6cfe758a1"}, + {file = "ruff-0.6.1-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:faaa4060f4064c3b7aaaa27328080c932fa142786f8142aff095b42b6a2eb631"}, + {file = "ruff-0.6.1-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:99d7ae0df47c62729d58765c593ea54c2546d5de213f2af2a19442d50a10cec9"}, + {file = "ruff-0.6.1-py3-none-musllinux_1_2_i686.whl", hash = "sha256:9eb18dfd7b613eec000e3738b3f0e4398bf0153cb80bfa3e351b3c1c2f6d7b15"}, + {file = "ruff-0.6.1-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:c62bc04c6723a81e25e71715aa59489f15034d69bf641df88cb38bdc32fd1dbb"}, + {file = "ruff-0.6.1-py3-none-win32.whl", hash = "sha256:9fb4c4e8b83f19c9477a8745e56d2eeef07a7ff50b68a6998f7d9e2e3887bdc4"}, + {file = "ruff-0.6.1-py3-none-win_amd64.whl", hash = "sha256:c2ebfc8f51ef4aca05dad4552bbcf6fe8d1f75b2f6af546cc47cc1c1ca916b5b"}, + {file = "ruff-0.6.1-py3-none-win_arm64.whl", hash = "sha256:3bc81074971b0ffad1bd0c52284b22411f02a11a012082a76ac6da153536e014"}, + {file = "ruff-0.6.1.tar.gz", hash = "sha256:af3ffd8c6563acb8848d33cd19a69b9bfe943667f0419ca083f8ebe4224a3436"}, ] [[package]] From b96243636cd3f6303d725952ba9df34477485513 Mon Sep 17 00:00:00 2001 From: Christopher Fenner <9592452+CFenner@users.noreply.github.com> Date: Sat, 17 Aug 2024 14:23:21 +0200 Subject: [PATCH 22/27] fix: downgrade dependency to be in line with HA (#23) * update test data * fix dependencies * update lock file --- poetry.lock | 35 ++++++++++++++++++++++++++++++++--- pyproject.toml | 6 +++--- 2 files changed, 35 insertions(+), 6 deletions(-) diff --git a/poetry.lock b/poetry.lock index c139686f..cbdefed9 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,9 +1,10 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry and should not be changed by hand. [[package]] name = "astroid" version = "3.2.4" description = "An abstract syntax tree for Python with inference support." +category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -15,6 +16,7 @@ files = [ name = "authlib" version = "1.3.1" description = "The ultimate Python library in building OAuth and OpenID Connect servers and clients." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -29,6 +31,7 @@ cryptography = "*" name = "certifi" version = "2024.7.4" description = "Python package for providing Mozilla's CA Bundle." +category = "main" optional = false python-versions = ">=3.6" files = [ @@ -40,6 +43,7 @@ files = [ name = "cffi" version = "1.17.0" description = "Foreign Function Interface for Python calling C code." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -119,6 +123,7 @@ pycparser = "*" name = "charset-normalizer" version = "3.3.2" description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." +category = "main" optional = false python-versions = ">=3.7.0" files = [ @@ -218,6 +223,7 @@ files = [ name = "codespell" version = "2.3.0" description = "Codespell" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -235,6 +241,7 @@ types = ["chardet (>=5.1.0)", "mypy", "pytest", "pytest-cov", "pytest-dependency name = "colorama" version = "0.4.6" description = "Cross-platform colored terminal text." +category = "dev" optional = false python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" files = [ @@ -246,6 +253,7 @@ files = [ name = "coverage" version = "7.6.1" description = "Code coverage measurement for Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -330,6 +338,7 @@ toml = ["tomli"] name = "cryptography" version = "43.0.0" description = "cryptography is a package which provides cryptographic recipes and primitives to Python developers." +category = "main" optional = false python-versions = ">=3.7" files = [ @@ -379,6 +388,7 @@ test-randomorder = ["pytest-randomly"] name = "dill" version = "0.3.8" description = "serialize all of Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -394,6 +404,7 @@ profile = ["gprof2dot (>=2022.7.29)"] name = "idna" version = "3.7" description = "Internationalized Domain Names in Applications (IDNA)" +category = "main" optional = false python-versions = ">=3.5" files = [ @@ -405,6 +416,7 @@ files = [ name = "iniconfig" version = "2.0.0" description = "brain-dead simple config-ini parsing" +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -416,6 +428,7 @@ files = [ name = "isort" version = "5.13.2" description = "A Python utility / library to sort Python imports." +category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -430,6 +443,7 @@ colors = ["colorama (>=0.4.6)"] name = "mccabe" version = "0.7.0" description = "McCabe checker, plugin for flake8" +category = "dev" optional = false python-versions = ">=3.6" files = [ @@ -441,6 +455,7 @@ files = [ name = "mypy" version = "1.11.1" description = "Optional static typing for Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -487,6 +502,7 @@ reports = ["lxml"] name = "mypy-extensions" version = "1.0.0" description = "Type system extensions for programs checked with the mypy type checker." +category = "dev" optional = false python-versions = ">=3.5" files = [ @@ -498,6 +514,7 @@ files = [ name = "packaging" version = "24.1" description = "Core utilities for Python packages" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -509,6 +526,7 @@ files = [ name = "platformdirs" version = "4.2.2" description = "A small Python package for determining appropriate platform-specific dirs, e.g. a `user data dir`." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -525,6 +543,7 @@ type = ["mypy (>=1.8)"] name = "pluggy" version = "1.5.0" description = "plugin and hook calling mechanisms for python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -540,6 +559,7 @@ testing = ["pytest", "pytest-benchmark"] name = "pycparser" version = "2.22" description = "C parser in Python" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -551,6 +571,7 @@ files = [ name = "pylint" version = "3.2.6" description = "python code static checker" +category = "dev" optional = false python-versions = ">=3.8.0" files = [ @@ -562,8 +583,8 @@ files = [ astroid = ">=3.2.4,<=3.3.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, {version = ">=0.3.7", markers = "python_version >= \"3.12\""}, - {version = ">=0.3.6", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] isort = ">=4.2.5,<5.13.0 || >5.13.0,<6" mccabe = ">=0.6,<0.8" @@ -578,6 +599,7 @@ testutils = ["gitpython (>3)"] name = "pytest" version = "8.3.2" description = "pytest: simple powerful testing with Python" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -598,6 +620,7 @@ dev = ["argcomplete", "attrs (>=19.2)", "hypothesis (>=3.56)", "mock", "pygments name = "pytest-cov" version = "5.0.0" description = "Pytest plugin for measuring coverage." +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -616,6 +639,7 @@ testing = ["fields", "hunter", "process-tests", "pytest-xdist", "virtualenv"] name = "requests" version = "2.32.3" description = "Python HTTP for Humans." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -637,6 +661,7 @@ use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] name = "ruff" version = "0.6.1" description = "An extremely fast Python linter and code formatter, written in Rust." +category = "dev" optional = false python-versions = ">=3.7" files = [ @@ -664,6 +689,7 @@ files = [ name = "tomlkit" version = "0.13.2" description = "Style preserving TOML library" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -675,6 +701,7 @@ files = [ name = "types-requests" version = "2.32.0.20240712" description = "Typing stubs for requests" +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -689,6 +716,7 @@ urllib3 = ">=2" name = "typing-extensions" version = "4.12.2" description = "Backported and Experimental Type Hints for Python 3.8+" +category = "dev" optional = false python-versions = ">=3.8" files = [ @@ -700,6 +728,7 @@ files = [ name = "urllib3" version = "2.2.2" description = "HTTP library with thread-safe connection pooling, file post, and more." +category = "main" optional = false python-versions = ">=3.8" files = [ @@ -716,4 +745,4 @@ zstd = ["zstandard (>=0.18.0)"] [metadata] lock-version = "2.0" python-versions = "^3.11" -content-hash = "08e5fde481073a2081093dc38909ad5b2ec297030fa89d488383fe916ff2b1c4" +content-hash = "91b6c98c9f3239fd33805d31bb3575ba36f05442379301cb431673f0c33424a0" diff --git a/pyproject.toml b/pyproject.toml index 336181cd..48c1dcea 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -35,10 +35,10 @@ packages = [ Changelog = "https://github.com/CFenner/PyViCare/releases" [tool.poetry.dependencies] -authlib = "^1.2.0" python = "^3.11" -types-requests = "^2.32.0.20240712" -requests = "^2.32.3" +authlib = ">1.2.0" +types-requests = ">=2.31" +requests = ">=2.31.0" [tool.poetry.group.dev.dependencies] codespell = "^2.3.0" From 41db94145d4365fdcab9e117a3c885c3668c37fc Mon Sep 17 00:00:00 2001 From: Tobin Rosenau Date: Sat, 17 Aug 2024 18:00:59 +0200 Subject: [PATCH 23/27] feat: add Vitoconnect Opto 2 / Heatbox2 as gateway (#24) * add Vitoconnect Opto 2 / Heatbox2 as gateway * add AutoDetect test * update tests * Update PyViCareService.py remove empty lines * Fix Pylint issue with docstring * remove .pylintrc file --- PyViCare/PyViCareDeviceConfig.py | 3 +- PyViCare/PyViCareService.py | 8 +-- tests/response/VitoconnectOpto2.json | 97 ++++++++++++++++++++++++++++ tests/test_PyViCareDeviceConfig.py | 11 ++++ tests/test_VitoconnectOpto2.py | 18 ++++++ 5 files changed, 129 insertions(+), 8 deletions(-) create mode 100644 tests/response/VitoconnectOpto2.json create mode 100644 tests/test_VitoconnectOpto2.py diff --git a/PyViCare/PyViCareDeviceConfig.py b/PyViCare/PyViCareDeviceConfig.py index 8039d783..b0814a62 100644 --- a/PyViCare/PyViCareDeviceConfig.py +++ b/PyViCare/PyViCareDeviceConfig.py @@ -87,7 +87,8 @@ def asAutoDetectDevice(self): (self.asGateway, r"E3_TCU10_x07", ["type:gateway;TCU300"]), (self.asElectricalEnergySystem, r"E3_VitoCharge_03", ["type:ees"]), (self.asVentilation, r"E3_ViAir", ["type:ventilation"]), - (self.asGateway, r"Heatbox1", ["type:gateway;VitoconnectOpto1"]) + (self.asGateway, r"Heatbox1", ["type:gateway;VitoconnectOpto1"]), + (self.asGateway, r"Heatbox2", ["type:gateway;VitoconnectOpto2/OT2"]) ] for (creator_method, type_name, roles) in device_types: diff --git a/PyViCare/PyViCareService.py b/PyViCare/PyViCareService.py index 78a2348b..c311f1f0 100644 --- a/PyViCare/PyViCareService.py +++ b/PyViCare/PyViCareService.py @@ -8,7 +8,6 @@ logger = logging.getLogger('ViCare') logger.addHandler(logging.NullHandler()) - def readFeature(entities, property_name): feature = next( (f for f in entities if f["feature"] == property_name), None) @@ -18,22 +17,18 @@ def readFeature(entities, property_name): return feature - def hasRoles(requested_roles: List[str], existing_roles: List[str]) -> bool: return len(requested_roles) > 0 and set(requested_roles).issubset(set(existing_roles)) - def buildSetPropertyUrl(accessor, property_name, action): return f'/features/installations/{accessor.id}/gateways/{accessor.serial}/devices/{accessor.device_id}/features/{property_name}/commands/{action}' - class ViCareDeviceAccessor: def __init__(self, _id: int, serial: str, device_id: str) -> None: self.id = _id self.serial = serial self.device_id = device_id - class ViCareService: def __init__(self, oauth_manager: AbstractViCareOAuthManager, accessor: ViCareDeviceAccessor, roles: List[str]) -> None: self.oauth_manager = oauth_manager @@ -49,12 +44,11 @@ def buildGetPropertyUrl(self, property_name): return f'/features/installations/{self.accessor.id}/gateways/{self.accessor.serial}/features/{property_name}' return f'/features/installations/{self.accessor.id}/gateways/{self.accessor.serial}/devices/{self.accessor.device_id}/features/{property_name}' - def hasRoles(self, requested_roles) -> bool: return hasRoles(requested_roles, self.roles) def _isGateway(self) -> bool: - return self.hasRoles(["type:gateway;VitoconnectOpto1"]) or self.hasRoles(["type:gateway;TCU300"]) + return self.hasRoles(["type:gateway;VitoconnectOpto1"]) or self.hasRoles(["type:gateway;VitoconnectOpto2/OT2"]) or self.hasRoles(["type:gateway;TCU300"]) def setProperty(self, property_name: str, action: str, data: Any) -> Any: url = buildSetPropertyUrl( diff --git a/tests/response/VitoconnectOpto2.json b/tests/response/VitoconnectOpto2.json new file mode 100644 index 00000000..4255935f --- /dev/null +++ b/tests/response/VitoconnectOpto2.json @@ -0,0 +1,97 @@ +{ + "data": [ + { + "feature": "gateway.devices", + "gatewayId": "##############", + "timestamp": "2024-03-28T05:06:02.633Z", + "isEnabled": true, + "isReady": true, + "apiVersion": 1, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/##############/features/gateway.devices", + "properties": { + "devices": { + "type": "DeviceList", + "value": [ + { + "id": "gateway", + "fingerprint": "###", + "modelId": "Heatbox2_SRC", + "modelVersion": "###", + "name": "Heatbox 2 SRC, Vitoconnect", + "type": "vitoconnect", + "roles": [ + "type:gateway;VitoconnectOpto2/OT2", + "type:hb2", + "type:legacy" + ], + "status": "online" + }, + { + "id": "0", + "fingerprint": "###", + "modelId": "VPlusHO1_40", + "modelVersion": "###", + "name": "VT 200 (HO1A / HO1B)", + "type": "heating", + "roles": [ + "type:boiler", + "type:legacy", + "type:product;VPlusHO1" + ], + "status": "online" + }, + { + "id": "RoomControl-1", + "fingerprint": "###", + "modelId": "Smart_RoomControl", + "modelVersion": "###", + "name": "Smart_RoomControl_49", + "type": "roomControl", + "roles": [ + "capability:monetization;FTDC", + "capability:monetization;OWD", + "capability:zigbeeCoordinator", + "type:legacy", + "type:virtual;smartRoomControl" + ], + "status": "online" + }, + { + "id": "zigbee-#####", + "fingerprint": "###", + "modelId": "Smart_Device_eTRV_generic_50", + "modelVersion": "ac746d50a111d3eb8fa54146c05971aa2bc5b5cc", + "name": "Smart_Device_eTRV_generic_50", + "type": "zigbee", + "roles": [ + "type:actuator", + "type:legacy", + "type:radiator", + "type:smartRoomDevice" + ], + "status": "online" + } + ] + } + }, + "commands": {} + }, + { + "feature": "gateway.wifi", + "gatewayId": "##############", + "timestamp": "2024-03-30T17:31:57.758Z", + "isEnabled": true, + "isReady": true, + "apiVersion": 1, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/##############/features/gateway.wifi", + "properties": { + "strength": { + "type": "number", + "value": -41, + "unit": "" + } + }, + "commands": {} + } + ] +} \ No newline at end of file diff --git a/tests/test_PyViCareDeviceConfig.py b/tests/test_PyViCareDeviceConfig.py index 7acd5906..d4443049 100644 --- a/tests/test_PyViCareDeviceConfig.py +++ b/tests/test_PyViCareDeviceConfig.py @@ -72,6 +72,11 @@ def test_autoDetect_VitoconnectOpto1_asGateway(self): device_type = c.asAutoDetectDevice() self.assertEqual("Gateway", type(device_type).__name__) + def test_autoDetect_VitoconnectOpto2_asGateway(self): + c = PyViCareDeviceConfig(self.service, "0", "Heatbox2_SRC", "Online") + device_type = c.asAutoDetectDevice() + self.assertEqual("Gateway", type(device_type).__name__) + def test_autoDetect_TCU300_asGateway(self): c = PyViCareDeviceConfig(self.service, "0", "E3_TCU10_x07", "Online") device_type = c.asAutoDetectDevice() @@ -83,6 +88,12 @@ def test_autoDetect_RoleGateway_asGateway(self): device_type = c.asAutoDetectDevice() self.assertEqual("Gateway", type(device_type).__name__) + def test_autoDetect_RoleGateway_asGateway_vc_opto2(self): + self.service.hasRoles = has_roles(["type:gateway;VitoconnectOpto2/OT2"]) + c = PyViCareDeviceConfig(self.service, "0", "Unknown", "Online") + device_type = c.asAutoDetectDevice() + self.assertEqual("Gateway", type(device_type).__name__) + def test_autoDetect_RoleGateway_asGateway_TCU300(self): self.service.hasRoles = has_roles(["type:gateway;TCU300"]) c = PyViCareDeviceConfig(self.service, "0", "Unknown", "Online") diff --git a/tests/test_VitoconnectOpto2.py b/tests/test_VitoconnectOpto2.py new file mode 100644 index 00000000..c1ad8e9b --- /dev/null +++ b/tests/test_VitoconnectOpto2.py @@ -0,0 +1,18 @@ +import unittest + +from PyViCare.PyViCareGateway import Gateway +from tests.ViCareServiceMock import ViCareServiceMock + + +class VitoconnectOpto2(unittest.TestCase): + def setUp(self): + self.service = ViCareServiceMock('response/VitoconnectOpto2.json') + self.device = Gateway(self.service) + + def test_getSerial(self): + self.assertEqual( + self.device.getSerial(), "##############") + + def test_getWifiSignalStrength(self): + self.assertEqual( + self.device.getWifiSignalStrength(), -41) From 1ac209f97af49a87ce7fda83befaba11ea8574b3 Mon Sep 17 00:00:00 2001 From: Nibot1 Date: Sun, 18 Aug 2024 17:09:45 +0200 Subject: [PATCH 24/27] update test response Vitoladens300-C_J3RA --- tests/response/Vitoladens300-C_J3RA.json | 4134 +++++++++++----------- 1 file changed, 2078 insertions(+), 2056 deletions(-) diff --git a/tests/response/Vitoladens300-C_J3RA.json b/tests/response/Vitoladens300-C_J3RA.json index 74a79df6..95b261b1 100644 --- a/tests/response/Vitoladens300-C_J3RA.json +++ b/tests/response/Vitoladens300-C_J3RA.json @@ -1,2057 +1,2079 @@ { - "data": [ - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "device.messages.errors.raw", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "entries": { - "type": "array", - "value": [] - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/device.messages.errors.raw" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "device.serial", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "value": { - "type": "string", - "value": "################" - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/device.serial" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.boiler.sensors.temperature.commonSupply", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.boiler.sensors.temperature.commonSupply" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.boiler.sensors.temperature.main", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "connected" - }, - "value": { - "type": "number", - "unit": "celsius", - "value": 42 - } - }, - "timestamp": "2024-04-04T16:13:16.946Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.boiler.sensors.temperature.main" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.boiler.serial", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "value": { - "type": "string", - "value": "################" - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.boiler.serial" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.boiler.temperature", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "value": { - "type": "number", - "unit": "celsius", - "value": 40.3 - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.boiler.temperature" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.burners", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "enabled": { - "type": "array", - "value": [ - "0" - ] - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.burners" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.burners.0.modulation", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "value": { - "type": "number", - "unit": "percent", - "value": 0 - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.burners.0.modulation" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.burners.0.statistics", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "hours": { - "type": "number", - "unit": "hour", - "value": 4222.5 - }, - "starts": { - "type": "number", - "unit": "", - "value": 29098 - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.burners.0.statistics" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.burners.0", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.burners.0" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "enabled": { - "type": "array", - "value": [ - "1" - ] - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.circulation.pump", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.circulation.pump" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.circulation.pump", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "on" - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.circulation.pump" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.circulation.pump", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.circulation.pump" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.dhw.pumps.circulation.schedule", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.dhw.pumps.circulation.schedule" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.dhw.pumps.circulation.schedule", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.dhw.pumps.circulation.schedule" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.dhw.pumps.circulation.schedule", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.dhw.pumps.circulation.schedule" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.dhw.schedule", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.dhw.schedule" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.dhw.schedule", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.dhw.schedule" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.dhw.schedule", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.dhw.schedule" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.frostprotection", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.frostprotection" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.frostprotection", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "off" - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.frostprotection" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.frostprotection", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.frostprotection" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.heating.curve", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.heating.curve" - }, - { - "apiVersion": 1, - "commands": { - "setCurve": { - "isExecutable": true, - "name": "setCurve", - "params": { - "shift": { - "constraints": { - "max": 40, - "min": -13, - "stepping": 1 - }, - "required": true, - "type": "number" - }, - "slope": { - "constraints": { - "max": 3.5, - "min": 0.2, - "stepping": 0.1 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.curve/commands/setCurve" - } - }, - "deviceId": "0", - "feature": "heating.circuits.1.heating.curve", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "shift": { - "type": "number", - "unit": "", - "value": 13 - }, - "slope": { - "type": "number", - "unit": "", - "value": 0.5 - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.curve" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.heating.curve", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.heating.curve" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.heating.schedule", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.heating.schedule" - }, - { - "apiVersion": 1, - "commands": { - "setSchedule": { - "isExecutable": true, - "name": "setSchedule", - "params": { - "newSchedule": { - "constraints": { - "defaultMode": "reduced", - "maxEntries": 4, - "modes": [ - "normal" - ], - "overlapAllowed": true, - "resolution": 10 - }, - "required": true, - "type": "Schedule" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule/commands/setSchedule" - } - }, - "deviceId": "0", - "feature": "heating.circuits.1.heating.schedule", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true - }, - "entries": { - "type": "Schedule", - "value": { - "fri": [ - { - "end": "23:00", - "mode": "normal", - "position": 0, - "start": "06:00" - } - ], - "mon": [ - { - "end": "23:00", - "mode": "normal", - "position": 0, - "start": "06:00" - } - ], - "sat": [ - { - "end": "23:00", - "mode": "normal", - "position": 0, - "start": "06:00" - } - ], - "sun": [ - { - "end": "23:00", - "mode": "normal", - "position": 0, - "start": "06:00" - } - ], - "thu": [ - { - "end": "23:00", - "mode": "normal", - "position": 0, - "start": "06:00" - } - ], - "tue": [ - { - "end": "23:00", - "mode": "normal", - "position": 0, - "start": "06:00" - } - ], - "wed": [ - { - "end": "23:00", - "mode": "normal", - "position": 0, - "start": "06:00" - } - ] - } - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.heating.schedule", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.heating.schedule" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.active", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:11:15.947Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.active" - }, - { - "apiVersion": 1, - "commands": { - "setMode": { - "isExecutable": true, - "name": "setMode", - "params": { - "mode": { - "constraints": { - "enum": [ - "dhw", - "dhwAndHeating", - "forcedNormal", - "forcedReduced", - "standby" - ] - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.active/commands/setMode" - } - }, - "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.active", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "value": { - "type": "string", - "value": "dhwAndHeating" - } - }, - "timestamp": "2024-04-04T16:11:15.947Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.active" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.active", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:11:15.947Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.active" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.dhw", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhw" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.dhw", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2024-04-04T16:11:15.947Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhw" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.dhw", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhw" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.dhwAndHeating", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhwAndHeating" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.dhwAndHeating", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true - } - }, - "timestamp": "2024-04-04T16:11:15.947Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhwAndHeating" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.dhwAndHeating", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhwAndHeating" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.forcedNormal", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.forcedNormal" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.forcedNormal", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.forcedNormal" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.forcedNormal", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.forcedNormal" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.forcedReduced", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.forcedReduced" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.forcedReduced", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.forcedReduced" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.forcedReduced", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.forcedReduced" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.heating", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.heating" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.heating", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:11:15.947Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.heating" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.heating", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.heating" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.modes.standby", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.standby" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.modes.standby", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.standby" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.modes.standby", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.standby" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.active", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.active" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.active", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "value": { - "type": "string", - "value": "normal" - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.active" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.active", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.active" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.comfort", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfort" - }, - { - "apiVersion": 1, - "commands": { - "activate": { - "isExecutable": true, - "name": "activate", - "params": { - "temperature": { - "constraints": { - "max": 37, - "min": 4, - "stepping": 1 - }, - "required": false, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort/commands/activate" - }, - "deactivate": { - "isExecutable": true, - "name": "deactivate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort/commands/deactivate" - }, - "setTemperature": { - "isExecutable": true, - "name": "setTemperature", - "params": { - "targetTemperature": { - "constraints": { - "max": 37, - "min": 4, - "stepping": 1 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort/commands/setTemperature" - } - }, - "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.comfort", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "demand": { - "type": "string", - "value": "unknown" - }, - "temperature": { - "type": "number", - "unit": "celsius", - "value": 22 - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.comfort", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfort" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.eco", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.eco" - }, - { - "apiVersion": 1, - "commands": { - "activate": { - "isExecutable": true, - "name": "activate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco/commands/activate" - }, - "deactivate": { - "isExecutable": true, - "name": "deactivate", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco/commands/deactivate" - } - }, - "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.eco", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "temperature": { - "type": "number", - "unit": "celsius", - "value": 21 - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.eco", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.eco" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.external", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.external" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.external", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "temperature": { - "type": "number", - "unit": "", - "value": 0 - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.external" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.external", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.external" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.holiday", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.holiday" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.holiday", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.holiday" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.holiday", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.holiday" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.normal", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normal" - }, - { - "apiVersion": 1, - "commands": { - "setTemperature": { - "isExecutable": true, - "name": "setTemperature", - "params": { - "targetTemperature": { - "constraints": { - "max": 37, - "min": 3, - "stepping": 1 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normal/commands/setTemperature" - } - }, - "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.normal", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true - }, - "demand": { - "type": "string", - "value": "unknown" - }, - "temperature": { - "type": "number", - "unit": "celsius", - "value": 21 - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normal" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.normal", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normal" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.reduced", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reduced" - }, - { - "apiVersion": 1, - "commands": { - "setTemperature": { - "isExecutable": true, - "name": "setTemperature", - "params": { - "targetTemperature": { - "constraints": { - "max": 37, - "min": 3, - "stepping": 1 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reduced/commands/setTemperature" - } - }, - "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.reduced", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "demand": { - "type": "string", - "value": "unknown" - }, - "temperature": { - "type": "number", - "unit": "celsius", - "value": 19 - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reduced" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.reduced", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reduced" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.operating.programs.standby", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.standby" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.operating.programs.standby", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.standby" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.operating.programs.standby", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.standby" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.sensors.temperature.room", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.room" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.sensors.temperature.room", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.room" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.sensors.temperature.room", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.room" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0.sensors.temperature.supply", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:13:18.587Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.supply" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.1.sensors.temperature.supply", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "connected" - }, - "value": { - "type": "number", - "unit": "celsius", - "value": 40.5 - } - }, - "timestamp": "2024-04-04T16:16:41.835Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.supply" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2.sensors.temperature.supply", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.supply" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.0", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0" - }, - { - "apiVersion": 1, - "commands": { - "setName": { - "isExecutable": false, - "name": "setName", - "params": { - "name": { - "constraints": { - "maxLength": 20, - "minLength": 1 - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1/commands/setName" - } - }, - "deviceId": "0", - "feature": "heating.circuits.1", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true - }, - "name": { - "type": "string", - "value": "" - }, - "type": { - "type": "string", - "value": "heatingCircuit" - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.circuits.2", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.controller.serial", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "value": { - "type": "string", - "value": "################" - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.controller.serial" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.dhw", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true - }, - "status": { - "type": "string", - "value": "off" - } - }, - "timestamp": "2024-04-04T16:11:15.947Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.dhw.charging", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - } - }, - "timestamp": "2024-04-04T16:11:15.947Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.charging" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.dhw.pumps.circulation", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "on" - } - }, - "timestamp": "2024-04-04T16:11:15.947Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.circulation" - }, - { - "apiVersion": 1, - "commands": { - "setSchedule": { - "isExecutable": true, - "name": "setSchedule", - "params": { - "newSchedule": { - "constraints": { - "defaultMode": "off", - "maxEntries": 4, - "modes": [ - "on" - ], - "overlapAllowed": true, - "resolution": 10 - }, - "required": true, - "type": "Schedule" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule/commands/setSchedule" - } - }, - "deviceId": "0", - "feature": "heating.dhw.pumps.circulation.schedule", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true - }, - "entries": { - "type": "Schedule", - "value": { - "fri": [ - { - "end": "22:00", - "mode": "on", - "position": 0, - "start": "05:30" - } - ], - "mon": [ - { - "end": "22:00", - "mode": "on", - "position": 0, - "start": "05:30" - } - ], - "sat": [ - { - "end": "22:00", - "mode": "on", - "position": 0, - "start": "05:30" - } - ], - "sun": [ - { - "end": "22:00", - "mode": "on", - "position": 0, - "start": "05:30" - } - ], - "thu": [ - { - "end": "22:00", - "mode": "on", - "position": 0, - "start": "05:30" - } - ], - "tue": [ - { - "end": "22:00", - "mode": "on", - "position": 0, - "start": "05:30" - } - ], - "wed": [ - { - "end": "22:00", - "mode": "on", - "position": 0, - "start": "05:30" - } - ] - } - } - }, - "timestamp": "2024-04-04T16:11:15.947Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.dhw.pumps.primary", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "off" - } - }, - "timestamp": "2024-04-04T16:11:15.947Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.primary" - }, - { - "apiVersion": 1, - "commands": { - "setSchedule": { - "isExecutable": true, - "name": "setSchedule", - "params": { - "newSchedule": { - "constraints": { - "defaultMode": "off", - "maxEntries": 4, - "modes": [ - "on" - ], - "overlapAllowed": true, - "resolution": 10 - }, - "required": true, - "type": "Schedule" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.schedule/commands/setSchedule" - } - }, - "deviceId": "0", - "feature": "heating.dhw.schedule", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": true - }, - "entries": { - "type": "Schedule", - "value": { - "fri": [ - { - "end": "24:00", - "mode": "on", - "position": 0, - "start": "00:00" - } - ], - "mon": [ - { - "end": "24:00", - "mode": "on", - "position": 0, - "start": "00:00" - } - ], - "sat": [ - { - "end": "24:00", - "mode": "on", - "position": 0, - "start": "00:00" - } - ], - "sun": [ - { - "end": "24:00", - "mode": "on", - "position": 0, - "start": "00:00" - } - ], - "thu": [ - { - "end": "24:00", - "mode": "on", - "position": 0, - "start": "00:00" - } - ], - "tue": [ - { - "end": "24:00", - "mode": "on", - "position": 0, - "start": "00:00" - } - ], - "wed": [ - { - "end": "24:00", - "mode": "on", - "position": 0, - "start": "00:00" - } - ] - } - } - }, - "timestamp": "2024-04-04T16:11:15.947Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.schedule" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.dhw.sensors.temperature.dhwCylinder", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "connected" - }, - "value": { - "type": "number", - "unit": "celsius", - "value": 46.9 - } - }, - "timestamp": "2024-04-04T16:11:15.947Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.dhwCylinder" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.dhw.sensors.temperature.hotWaterStorage", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "connected" - }, - "value": { - "type": "number", - "unit": "celsius", - "value": 46.9 - } - }, - "timestamp": "2024-04-04T16:11:15.947Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.dhw.sensors.temperature.outlet", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "error" - } - }, - "timestamp": "2024-04-04T16:11:15.947Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.outlet" - }, - { - "apiVersion": 1, - "commands": { - "setTargetTemperature": { - "isExecutable": true, - "name": "setTargetTemperature", - "params": { - "temperature": { - "constraints": { - "efficientLowerBorder": 10, - "efficientUpperBorder": 60, - "max": 60, - "min": 10, - "stepping": 1 - }, - "required": true, - "type": "number" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.temperature.main/commands/setTargetTemperature" - } - }, - "deviceId": "0", - "feature": "heating.dhw.temperature.main", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "value": { - "type": "number", - "unit": "celsius", - "value": 38 - } - }, - "timestamp": "2024-04-04T16:11:15.947Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.temperature.main" - }, - { - "apiVersion": 1, - "commands": { - "changeEndDate": { - "isExecutable": false, - "name": "changeEndDate", - "params": { - "end": { - "constraints": { - "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", - "sameDayAllowed": false - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/changeEndDate" - }, - "schedule": { - "isExecutable": true, - "name": "schedule", - "params": { - "end": { - "constraints": { - "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", - "sameDayAllowed": false - }, - "required": true, - "type": "string" - }, - "start": { - "constraints": { - "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$" - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/schedule" - }, - "unschedule": { - "isExecutable": true, - "name": "unschedule", - "params": {}, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/unschedule" - } - }, - "deviceId": "0", - "feature": "heating.operating.programs.holiday", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "active": { - "type": "boolean", - "value": false - }, - "end": { - "type": "string", - "value": "" - }, - "start": { - "type": "string", - "value": "" - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.operating.programs.holiday" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.sensors.temperature.outside", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "status": { - "type": "string", - "value": "connected" - }, - "value": { - "type": "number", - "unit": "celsius", - "value": 12.4 - } - }, - "timestamp": "2024-04-04T16:14:24.211Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.sensors.temperature.outside" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.solar", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.solar.power.cumulativeProduced", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.power.cumulativeProduced" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.solar.power.production", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.power.production" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.solar.pumps.circuit", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.pumps.circuit" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.solar.sensors.temperature.collector", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.sensors.temperature.collector" - }, - { - "apiVersion": 1, - "commands": {}, - "deviceId": "0", - "feature": "heating.solar.sensors.temperature.dhw", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.sensors.temperature.dhw" - }, - { - "apiVersion": 1, - "commands": {}, - "components": [], - "deviceId": "0", - "feature": "heating.circuits.0.name", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-01-19T02:43:11.831Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.name" - }, - { - "apiVersion": 1, - "commands": { - "setName": { - "isExecutable": true, - "name": "setName", - "params": { - "name": { - "constraints": { - "maxLength": 20, - "minLength": 1 - }, - "required": true, - "type": "string" - } - }, - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.name/commands/setName" - } - }, - "components": [], - "deviceId": "0", - "feature": "heating.circuits.1.name", - "gatewayId": "################", - "isEnabled": true, - "isReady": true, - "properties": { - "name": { - "type": "string", - "value": "Heizkreis 1" - } - }, - "timestamp": "2024-04-04T16:01:11.047Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.name" - }, - { - "apiVersion": 1, - "commands": {}, - "components": [], - "deviceId": "0", - "feature": "heating.circuits.2.name", - "gatewayId": "################", - "isEnabled": false, - "isReady": true, - "properties": {}, - "timestamp": "2024-01-19T02:43:11.831Z", - "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.name" - } - ] -} \ No newline at end of file + "data": [ + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "device.messages.errors.raw", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "entries": { + "type": "array", + "value": [] + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/device.messages.errors.raw" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "device.serial", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "################" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/device.serial" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.boiler.sensors.temperature.commonSupply", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.boiler.sensors.temperature.commonSupply" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.boiler.sensors.temperature.main", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 26 + } + }, + "timestamp": "2024-08-18T14:38:00.110Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.boiler.sensors.temperature.main" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.boiler.serial", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "################" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.boiler.serial" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.boiler.temperature", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "number", + "unit": "celsius", + "value": 5 + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.boiler.temperature" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.burners", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "enabled": { + "type": "array", + "value": [ + "0" + ] + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.burners" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.burners.0.modulation", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "number", + "unit": "percent", + "value": 0 + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.burners.0.modulation" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.burners.0.statistics", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "hours": { + "type": "number", + "unit": "hour", + "value": 4272 + }, + "starts": { + "type": "number", + "unit": "", + "value": 29494 + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.burners.0.statistics" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.burners.0", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.burners.0" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "enabled": { + "type": "array", + "value": [ + "1" + ] + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.circulation.pump", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.circulation.pump" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.circulation.pump", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.circulation.pump" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.circulation.pump", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.circulation.pump" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.dhw.pumps.circulation.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.dhw.pumps.circulation.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.dhw.pumps.circulation.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.dhw.pumps.circulation.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.dhw.pumps.circulation.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.dhw.pumps.circulation.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.dhw.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.dhw.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.dhw.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.dhw.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.dhw.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.dhw.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.frostprotection", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.frostprotection" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.frostprotection", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.frostprotection" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.frostprotection", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.frostprotection" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.heating.curve", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.heating.curve" + }, + { + "apiVersion": 1, + "commands": { + "setCurve": { + "isExecutable": true, + "name": "setCurve", + "params": { + "shift": { + "constraints": { + "max": 40, + "min": -13, + "stepping": 1 + }, + "required": true, + "type": "number" + }, + "slope": { + "constraints": { + "max": 3.5, + "min": 0.2, + "stepping": 0.1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.curve/commands/setCurve" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.heating.curve", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "shift": { + "type": "number", + "unit": "", + "value": 7 + }, + "slope": { + "type": "number", + "unit": "", + "value": 0.5 + } + }, + "timestamp": "2024-08-18T08:16:04.656Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.curve" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.heating.curve", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.heating.curve" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.heating.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.heating.schedule" + }, + { + "apiVersion": 1, + "commands": { + "resetSchedule": { + "isExecutable": false, + "name": "resetSchedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule/commands/resetSchedule" + }, + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "reduced", + "maxEntries": 4, + "modes": [ + "normal" + ], + "overlapAllowed": true, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule/commands/setSchedule" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.heating.schedule", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "mon": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "sat": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "sun": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "thu": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "tue": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ], + "wed": [ + { + "end": "23:00", + "mode": "normal", + "position": 0, + "start": "06:00" + } + ] + } + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.heating.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.heating.schedule", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.heating.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.active", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.active" + }, + { + "apiVersion": 1, + "commands": { + "setMode": { + "isExecutable": true, + "name": "setMode", + "params": { + "mode": { + "constraints": { + "enum": [ + "dhw", + "dhwAndHeating", + "forcedNormal", + "forcedReduced", + "standby" + ] + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.active/commands/setMode" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.active", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "dhw" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.active", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.dhw", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhw" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.dhw", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhw" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.dhw", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhw" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.dhwAndHeating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.dhwAndHeating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.dhwAndHeating", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.dhwAndHeating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.dhwAndHeating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.dhwAndHeating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.forcedNormal", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.forcedNormal" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.forcedNormal", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.forcedNormal" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.forcedNormal", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.forcedNormal" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.forcedReduced", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.forcedReduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.forcedReduced", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.forcedReduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.forcedReduced", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.forcedReduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.heating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.heating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.heating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.heating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.heating", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.heating" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.modes.standby", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.modes.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.modes.standby", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.modes.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.modes.standby", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.modes.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.active", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.active", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "standby" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.active", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.active" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.comfort", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.comfort" + }, + { + "apiVersion": 1, + "commands": { + "activate": { + "isExecutable": true, + "name": "activate", + "params": { + "temperature": { + "constraints": { + "max": 37, + "min": 4, + "stepping": 1 + }, + "required": false, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort/commands/activate" + }, + "deactivate": { + "isExecutable": true, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort/commands/deactivate" + }, + "setTemperature": { + "isExecutable": true, + "name": "setTemperature", + "params": { + "targetTemperature": { + "constraints": { + "max": 37, + "min": 4, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort/commands/setTemperature" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.comfort", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "demand": { + "type": "string", + "value": "unknown" + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 22 + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.comfort" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.comfort", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.comfort" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.eco", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.eco" + }, + { + "apiVersion": 1, + "commands": { + "activate": { + "isExecutable": false, + "name": "activate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco/commands/activate" + }, + "deactivate": { + "isExecutable": true, + "name": "deactivate", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco/commands/deactivate" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.eco", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 22 + } + }, + "timestamp": "2024-08-18T14:57:40.687Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.eco" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.eco", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.eco" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.external", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.external" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.external", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "temperature": { + "type": "number", + "unit": "", + "value": 0 + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.external" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.external", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.external" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.holiday", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.holiday" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.holiday", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.holiday" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.holiday", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.holiday" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.normal", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.normal" + }, + { + "apiVersion": 1, + "commands": { + "setTemperature": { + "isExecutable": true, + "name": "setTemperature", + "params": { + "targetTemperature": { + "constraints": { + "max": 37, + "min": 3, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normal/commands/setTemperature" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.normal", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "demand": { + "type": "string", + "value": "unknown" + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 22 + } + }, + "timestamp": "2024-08-18T14:57:40.687Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.normal" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.normal", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.normal" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.reduced", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.reduced" + }, + { + "apiVersion": 1, + "commands": { + "setTemperature": { + "isExecutable": true, + "name": "setTemperature", + "params": { + "targetTemperature": { + "constraints": { + "max": 37, + "min": 3, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reduced/commands/setTemperature" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.reduced", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "demand": { + "type": "string", + "value": "unknown" + }, + "temperature": { + "type": "number", + "unit": "celsius", + "value": 3 + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.reduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.reduced", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.reduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.operating.programs.standby", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.operating.programs.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.operating.programs.standby", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.operating.programs.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.operating.programs.standby", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.operating.programs.standby" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.sensors.temperature.room", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.room" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.sensors.temperature.room", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.room" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.sensors.temperature.room", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.room" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0.sensors.temperature.supply", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-18T14:38:11.964Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.sensors.temperature.supply" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.1.sensors.temperature.supply", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 24 + } + }, + "timestamp": "2024-08-18T08:36:37.933Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.sensors.temperature.supply" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2.sensors.temperature.supply", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.sensors.temperature.supply" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.0", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0" + }, + { + "apiVersion": 1, + "commands": { + "setName": { + "isExecutable": false, + "name": "setName", + "params": { + "name": { + "constraints": { + "maxLength": 20, + "minLength": 1 + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1/commands/setName" + } + }, + "deviceId": "0", + "feature": "heating.circuits.1", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "name": { + "type": "string", + "value": "" + }, + "type": { + "type": "string", + "value": "heatingCircuit" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.circuits.2", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.controller.serial", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "string", + "value": "################" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.controller.serial" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.charging", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.charging" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.pumps.circulation", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "on" + } + }, + "timestamp": "2024-08-18T03:26:58.060Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.circulation" + }, + { + "apiVersion": 1, + "commands": { + "resetSchedule": { + "isExecutable": false, + "name": "resetSchedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule/commands/resetSchedule" + }, + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "off", + "maxEntries": 4, + "modes": [ + "on" + ], + "overlapAllowed": true, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule/commands/setSchedule" + } + }, + "deviceId": "0", + "feature": "heating.dhw.pumps.circulation.schedule", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "mon": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "sat": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "sun": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "thu": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "tue": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ], + "wed": [ + { + "end": "22:00", + "mode": "on", + "position": 0, + "start": "05:30" + } + ] + } + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.circulation.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.pumps.primary", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "off" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.pumps.primary" + }, + { + "apiVersion": 1, + "commands": { + "resetSchedule": { + "isExecutable": false, + "name": "resetSchedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.schedule/commands/resetSchedule" + }, + "setSchedule": { + "isExecutable": true, + "name": "setSchedule", + "params": { + "newSchedule": { + "constraints": { + "defaultMode": "off", + "maxEntries": 4, + "modes": [ + "on" + ], + "overlapAllowed": true, + "resolution": 10 + }, + "required": true, + "type": "Schedule" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.schedule/commands/setSchedule" + } + }, + "deviceId": "0", + "feature": "heating.dhw.schedule", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": true + }, + "entries": { + "type": "Schedule", + "value": { + "fri": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "mon": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "sat": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "sun": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "thu": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "tue": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ], + "wed": [ + { + "end": "24:00", + "mode": "on", + "position": 0, + "start": "00:00" + } + ] + } + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.schedule" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.dhwCylinder", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 60.8 + } + }, + "timestamp": "2024-08-18T14:51:30.708Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.dhwCylinder" + }, + { + "apiVersion": 1, + "commands": {}, + "deprecated": { + "info": "replaced by heating.dhw.sensors.temperature.dhwCylinder", + "removalDate": "2024-09-15" + }, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.hotWaterStorage", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 60.8 + } + }, + "timestamp": "2024-08-18T14:51:30.708Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.hotWaterStorage" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.dhw.sensors.temperature.outlet", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "error" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.sensors.temperature.outlet" + }, + { + "apiVersion": 1, + "commands": { + "setTargetTemperature": { + "isExecutable": true, + "name": "setTargetTemperature", + "params": { + "temperature": { + "constraints": { + "efficientLowerBorder": 10, + "efficientUpperBorder": 60, + "max": 60, + "min": 10, + "stepping": 1 + }, + "required": true, + "type": "number" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.temperature.main/commands/setTargetTemperature" + } + }, + "deviceId": "0", + "feature": "heating.dhw.temperature.main", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "value": { + "type": "number", + "unit": "celsius", + "value": 38 + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.dhw.temperature.main" + }, + { + "apiVersion": 1, + "commands": { + "changeEndDate": { + "isExecutable": false, + "name": "changeEndDate", + "params": { + "end": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", + "sameDayAllowed": false + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/changeEndDate" + }, + "schedule": { + "isExecutable": true, + "name": "schedule", + "params": { + "end": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$", + "sameDayAllowed": false + }, + "required": true, + "type": "string" + }, + "start": { + "constraints": { + "regEx": "^[\\d]{4}-[\\d]{2}-[\\d]{2}$" + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/schedule" + }, + "unschedule": { + "isExecutable": true, + "name": "unschedule", + "params": {}, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.operating.programs.holiday/commands/unschedule" + } + }, + "deviceId": "0", + "feature": "heating.operating.programs.holiday", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "active": { + "type": "boolean", + "value": false + }, + "end": { + "type": "string", + "value": "" + }, + "start": { + "type": "string", + "value": "" + } + }, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.operating.programs.holiday" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.sensors.temperature.outside", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "status": { + "type": "string", + "value": "connected" + }, + "value": { + "type": "number", + "unit": "celsius", + "value": 19 + } + }, + "timestamp": "2024-08-18T14:11:20.245Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.sensors.temperature.outside" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.power.cumulativeProduced", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.power.cumulativeProduced" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.power.production", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.power.production" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.pumps.circuit", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.pumps.circuit" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.sensors.temperature.collector", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.sensors.temperature.collector" + }, + { + "apiVersion": 1, + "commands": {}, + "deviceId": "0", + "feature": "heating.solar.sensors.temperature.dhw", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-08-17T08:04:25.117Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.solar.sensors.temperature.dhw" + }, + { + "apiVersion": 1, + "commands": {}, + "components": [], + "deviceId": "0", + "feature": "heating.circuits.0.name", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-01-19T02:43:11.831Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.0.name" + }, + { + "apiVersion": 1, + "commands": { + "setName": { + "isExecutable": true, + "name": "setName", + "params": { + "name": { + "constraints": { + "maxLength": 20, + "minLength": 1 + }, + "required": true, + "type": "string" + } + }, + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.name/commands/setName" + } + }, + "components": [], + "deviceId": "0", + "feature": "heating.circuits.1.name", + "gatewayId": "################", + "isEnabled": true, + "isReady": true, + "properties": { + "name": { + "type": "string", + "value": "Heizkreis 1" + } + }, + "timestamp": "2024-08-15T14:52:14.899Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.1.name" + }, + { + "apiVersion": 1, + "commands": {}, + "components": [], + "deviceId": "0", + "feature": "heating.circuits.2.name", + "gatewayId": "################", + "isEnabled": false, + "isReady": true, + "properties": {}, + "timestamp": "2024-01-19T02:43:11.831Z", + "uri": "https://api.viessmann.com/iot/v1/features/installations/######/gateways/################/devices/0/features/heating.circuits.2.name" + } + ] +} From dad92d3c53f6567ec2c36f7e83b559104cc887ab Mon Sep 17 00:00:00 2001 From: Nibot1 Date: Sun, 18 Aug 2024 17:13:41 +0200 Subject: [PATCH 25/27] add deprecation hint for temperature.hotWaterStorage --- PyViCare/PyViCareHeatingDevice.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/PyViCare/PyViCareHeatingDevice.py b/PyViCare/PyViCareHeatingDevice.py index d37c94bd..a525f219 100644 --- a/PyViCare/PyViCareHeatingDevice.py +++ b/PyViCare/PyViCareHeatingDevice.py @@ -115,7 +115,8 @@ def getDomesticHotWaterDesiredTemperature(self): @handleNotSupported def getDomesticHotWaterStorageTemperature(self): return self.service.getProperty("heating.dhw.sensors.temperature.hotWaterStorage")["properties"]["value"][ - "value"] + "value"] # DEPRECATED replaced by heating.dhw.sensors.temperature.dhwCylinder removal date 2024-09-15 + @handleNotSupported def getDomesticHotWaterCylinderTemperature(self): From 18a6c29e1927970cec55876ef372154a025fffa4 Mon Sep 17 00:00:00 2001 From: Nibot1 Date: Sun, 18 Aug 2024 17:30:51 +0200 Subject: [PATCH 26/27] update test for Vitoladens 300-C --- tests/test_Vitoladens300C.py | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/tests/test_Vitoladens300C.py b/tests/test_Vitoladens300C.py index 8eed77f2..c5da0ae2 100644 --- a/tests/test_Vitoladens300C.py +++ b/tests/test_Vitoladens300C.py @@ -13,19 +13,19 @@ def test_getActive(self): self.assertEqual(self.device.burners[0].getActive(), False) def test_getBurnerStarts(self): - self.assertEqual(self.device.burners[0].getStarts(), 29098) + self.assertEqual(self.device.burners[0].getStarts(), 29494) def test_getBurnerHours(self): - self.assertEqual(self.device.burners[0].getHours(), 4222.5) + self.assertEqual(self.device.burners[0].getHours(), 4272) def test_getBurnerModulation(self): self.assertEqual(self.device.burners[0].getModulation(), 0) def test_getBoilerTemperature(self): - self.assertEqual(self.device.getBoilerTemperature(), 42) + self.assertEqual(self.device.getBoilerTemperature(), 26) def test_getDomesticHotWaterCylinderTemperature(self): - self.assertEqual(self.device.getDomesticHotWaterCylinderTemperature(), 46.9) + self.assertEqual(self.device.getDomesticHotWaterCylinderTemperature(), 60.8) def test_getDomesticHotWaterStorageTemperature(self): - self.assertEqual(self.device.getDomesticHotWaterStorageTemperature(), 46.9) + self.assertEqual(self.device.getDomesticHotWaterStorageTemperature(), 60.8) From 8a2d7e7493042a41533c8529826fba61e90d3453 Mon Sep 17 00:00:00 2001 From: Nibot1 Date: Sun, 18 Aug 2024 17:44:17 +0200 Subject: [PATCH 27/27] fix unittest for Vitoladens 300-c --- tests/test_Vitoladens300C.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/tests/test_Vitoladens300C.py b/tests/test_Vitoladens300C.py index c5da0ae2..5270cc29 100644 --- a/tests/test_Vitoladens300C.py +++ b/tests/test_Vitoladens300C.py @@ -24,8 +24,5 @@ def test_getBurnerModulation(self): def test_getBoilerTemperature(self): self.assertEqual(self.device.getBoilerTemperature(), 26) - def test_getDomesticHotWaterCylinderTemperature(self): - self.assertEqual(self.device.getDomesticHotWaterCylinderTemperature(), 60.8) - def test_getDomesticHotWaterStorageTemperature(self): self.assertEqual(self.device.getDomesticHotWaterStorageTemperature(), 60.8)