diff --git a/.DS_Store b/.DS_Store index 84f5661..df3e8a1 100644 Binary files a/.DS_Store and b/.DS_Store differ diff --git a/.homeycompose/.DS_Store b/.homeycompose/.DS_Store new file mode 100644 index 0000000..6142a5b Binary files /dev/null and b/.homeycompose/.DS_Store differ diff --git a/.homeycompose/app.json b/.homeycompose/app.json index 1304d17..9ab7e01 100644 --- a/.homeycompose/app.json +++ b/.homeycompose/app.json @@ -1,7 +1,7 @@ { "id": "se.anywhere.ivt", "version": "1.0.8", - "compatibility": ">=5.0.0", + "compatibility": ">=12.0.0", "sdk": 3, "platforms": [ "local" diff --git a/.homeycompose/capabilities/alarm_status.json b/.homeycompose/capabilities/alarm_status.json index 6a883e5..20beec6 100644 --- a/.homeycompose/capabilities/alarm_status.json +++ b/.homeycompose/capabilities/alarm_status.json @@ -16,4 +16,4 @@ "en": "The heat pump has no longer any active error", "sv": "Värmepumpen har inte längre någon aktiv felkod" } -} +} \ No newline at end of file diff --git a/.homeycompose/capabilities/hotwater_boost.json b/.homeycompose/capabilities/hotwater_boost.json new file mode 100644 index 0000000..b36823a --- /dev/null +++ b/.homeycompose/capabilities/hotwater_boost.json @@ -0,0 +1,11 @@ +{ + "type": "boolean", + "title": { + "en": "Extra Hot Water", + "sv": "Extra Varmvatten" + }, + "uiComponent": "button", + "getable": true, + "setable": true, + "insights": false +} \ No newline at end of file diff --git a/.homeycompose/capabilities/ivt_hotwater_mode.json b/.homeycompose/capabilities/ivt_hotwater_mode.json new file mode 100644 index 0000000..c8385f7 --- /dev/null +++ b/.homeycompose/capabilities/ivt_hotwater_mode.json @@ -0,0 +1,33 @@ +{ + "type": "enum", + "title": { + "en": "Hot Water Mode", + "sv": "Varmvattenläge" + }, + "uiComponent": "picker", + "getable": true, + "setable": true, + "values": [ + { + "id": "eco", + "title": { + "en": "Eco", + "sv": "Eco" + } + }, + { + "id": "high", + "title": { + "en": "High", + "sv": "Hög" + } + }, + { + "id": "low", + "title": { + "en": "Low", + "sv": "Låg" + } + } + ] +} \ No newline at end of file diff --git a/.homeyignore b/.homeyignore new file mode 100644 index 0000000..04344dd --- /dev/null +++ b/.homeyignore @@ -0,0 +1,19 @@ +node_modules/ +.git/ +.gitignore +.vscode/ +.idea/ +*.log +*.md +!README.txt +.DS_Store +Thumbs.db +*.bak +*.tmp +test/ +tests/ +docs/ +documentation/ +tools/ +app.ts +.github/ \ No newline at end of file diff --git a/app.json b/app.json index 8ec20d2..aaff5c3 100644 --- a/app.json +++ b/app.json @@ -2,7 +2,7 @@ "_comment": "This file is generated. Please edit .homeycompose/app.json instead.", "id": "se.anywhere.ivt", "version": "1.0.8", - "compatibility": ">=5.0.0", + "compatibility": ">=12.0.0", "sdk": 3, "platforms": [ "local" @@ -122,18 +122,70 @@ "name": { "en": "Heat pump" }, - "class": "heater", + "class": "heatpump", + "statusIndicator": "measure_temperature", "capabilities": [ + "target_temperature", + "measure_temperature", "measure_temperature.supply", "measure_temperature.return", "measure_temperature.outdoor", "measure_temperature.water", + "ivt_hotwater_mode", + "hotwater_boost", "alarm_status", "meter_power.last_hour_eheater", "meter_power.last_hour_total", "meter_power.last_hour_compressor" ], "capabilitiesOptions": { + "measure_temperature": { + "title": { + "en": "Room Temperature", + "sv": "Rumstemperatur" + }, + "zones": [ + { + "from": 0, + "to": 10, + "color": "#0000FF" + }, + { + "from": 10, + "to": 15, + "color": "#00BFFF" + }, + { + "from": 15, + "to": 18, + "color": "#00FF00" + }, + { + "from": 18, + "to": 21, + "color": "#FFFF00" + }, + { + "from": 21, + "to": 25, + "color": "#FFA500" + }, + { + "from": 25, + "to": 35, + "color": "#FF0000" + } + ] + }, + "target_temperature": { + "title": { + "en": "Target Temperature", + "sv": "Måltemperatur" + }, + "min": 10, + "max": 30, + "step": 0.5 + }, "measure_temperature.supply": { "title": { "en": "Supply temperature", @@ -154,8 +206,20 @@ }, "measure_temperature.water": { "title": { - "en": "Water temperature", - "sv": "Vattentemperatur" + "en": "Hotwater", + "sv": "Varmvatten" + } + }, + "ivt_hotwater_mode": { + "title": { + "en": "Hotwater Mode", + "sv": "Varmvattenläge" + } + }, + "hotwater_boost": { + "title": { + "en": "Extra Hot Water", + "sv": "Extra Varmvatten" } }, "meter_power.last_hour_eheater": { @@ -284,6 +348,50 @@ "en": "The heat pump has no longer any active error", "sv": "Värmepumpen har inte längre någon aktiv felkod" } + }, + "hotwater_boost": { + "type": "boolean", + "title": { + "en": "Extra Hot Water", + "sv": "Extra Varmvatten" + }, + "uiComponent": "button", + "getable": true, + "setable": true, + "insights": false + }, + "ivt_hotwater_mode": { + "type": "enum", + "title": { + "en": "Hot Water Mode", + "sv": "Varmvattenläge" + }, + "uiComponent": "picker", + "getable": true, + "setable": true, + "values": [ + { + "id": "eco", + "title": { + "en": "Eco", + "sv": "Eco" + } + }, + { + "id": "high", + "title": { + "en": "High", + "sv": "Hög" + } + }, + { + "id": "low", + "title": { + "en": "Low", + "sv": "Låg" + } + } + ] } } } \ No newline at end of file diff --git a/docs/rawscan.txt b/docs/rawscan.txt new file mode 100644 index 0000000..b93595e --- /dev/null +++ b/docs/rawscan.txt @@ -0,0 +1,2744 @@ +data: + - - /systemStates: not found + - - id: /dhwCircuits + type: refEnum + references: + - id: /dhwCircuits/dhw1 + uri: http://THERMOSTAT/dhwCircuits/dhw1 + - id: /dhwCircuits/dhw1 + type: refEnum + references: + - id: /dhwCircuits/dhw1/operationMode + uri: http://THERMOSTAT/dhwCircuits/dhw1/operationMode + - id: /dhwCircuits/dhw1/switchPrograms + uri: http://THERMOSTAT/dhwCircuits/dhw1/switchPrograms + - id: /dhwCircuits/dhw1/temperatureLevels + uri: http://THERMOSTAT/dhwCircuits/dhw1/temperatureLevels + - id: /dhwCircuits/dhw1/currentSetpoint + uri: http://THERMOSTAT/dhwCircuits/dhw1/currentSetpoint + - id: /dhwCircuits/dhw1/actualTemp + uri: http://THERMOSTAT/dhwCircuits/dhw1/actualTemp + - id: /dhwCircuits/dhw1/waterFlow + uri: http://THERMOSTAT/dhwCircuits/dhw1/waterFlow + - id: /dhwCircuits/dhw1/workingTime + uri: http://THERMOSTAT/dhwCircuits/dhw1/workingTime + - id: /dhwCircuits/dhw1/charge + uri: http://THERMOSTAT/dhwCircuits/dhw1/charge + - id: /dhwCircuits/dhw1/chargeDuration + uri: http://THERMOSTAT/dhwCircuits/dhw1/chargeDuration + - id: /dhwCircuits/dhw1/tdMode + uri: http://THERMOSTAT/dhwCircuits/dhw1/tdMode + - id: /dhwCircuits/dhw1/tdsetPoint + uri: http://THERMOSTAT/dhwCircuits/dhw1/tdsetPoint + - id: /dhwCircuits/dhw1/tdweekDay + uri: http://THERMOSTAT/dhwCircuits/dhw1/tdweekDay + - id: /dhwCircuits/dhw1/tddayTime + uri: http://THERMOSTAT/dhwCircuits/dhw1/tddayTime + - id: /dhwCircuits/dhw1/cpStartph + uri: http://THERMOSTAT/dhwCircuits/dhw1/cpStartph + - id: /dhwCircuits/dhw1/singleChargeSetpoint + uri: http://THERMOSTAT/dhwCircuits/dhw1/singleChargeSetpoint + - id: /dhwCircuits/dhw1/extBlocked + uri: http://THERMOSTAT/dhwCircuits/dhw1/extBlocked + - id: /dhwCircuits/dhw1/highStop + uri: http://THERMOSTAT/dhwCircuits/dhw1/highStop + - id: /dhwCircuits/dhw1/holidayMode + uri: http://THERMOSTAT/dhwCircuits/dhw1/holidayMode + - id: /dhwCircuits/dhw1/status + uri: http://THERMOSTAT/dhwCircuits/dhw1/status + - id: /dhwCircuits/dhw1/operationMode + type: stringValue + writeable: 1 + recordable: 0 + value: low + allowedValues: + - low + - high + - eco + - id: /dhwCircuits/dhw1/switchPrograms + type: refEnum + references: [] + - id: /dhwCircuits/dhw1/temperatureLevels + type: refEnum + references: + - id: /dhwCircuits/dhw1/temperatureLevels/off + uri: http://THERMOSTAT/dhwCircuits/dhw1/temperatureLevels/off + - id: /dhwCircuits/dhw1/temperatureLevels/low + uri: http://THERMOSTAT/dhwCircuits/dhw1/temperatureLevels/low + - id: /dhwCircuits/dhw1/temperatureLevels/high + uri: http://THERMOSTAT/dhwCircuits/dhw1/temperatureLevels/high + - id: /dhwCircuits/dhw1/temperatureLevels/eco + uri: http://THERMOSTAT/dhwCircuits/dhw1/temperatureLevels/eco + - id: /dhwCircuits/dhw1/temperatureLevels/off + type: floatValue + writeable: 0 + recordable: 0 + value: 0 + unitOfMeasure: C + - id: /dhwCircuits/dhw1/temperatureLevels/low + type: floatValue + writeable: 1 + recordable: 0 + value: 47 + unitOfMeasure: C + minValue: 40 + maxValue: 52 + - id: /dhwCircuits/dhw1/temperatureLevels/high + type: floatValue + writeable: 1 + recordable: 0 + value: 51 + unitOfMeasure: C + minValue: 40 + maxValue: 52 + - id: /dhwCircuits/dhw1/temperatureLevels/eco + type: floatValue + writeable: 1 + recordable: 0 + value: 42 + unitOfMeasure: C + minValue: 30 + maxValue: 46 + - id: /dhwCircuits/dhw1/currentSetpoint + type: floatValue + writeable: 0 + recordable: 0 + value: 60 + unitOfMeasure: C + - id: /dhwCircuits/dhw1/actualTemp + type: floatValue + writeable: 0 + recordable: 0 + value: 52 + unitOfMeasure: C + state: + - open: -3276.8 + - short: 3276.7 + - id: /dhwCircuits/dhw1/waterFlow + type: floatValue + writeable: 0 + recordable: 0 + value: 0 + unitOfMeasure: l/min + - id: /dhwCircuits/dhw1/workingTime + type: floatValue + writeable: 0 + recordable: 0 + value: 0 + unitOfMeasure: mins + - id: /dhwCircuits/dhw1/charge + type: stringValue + writeable: 1 + recordable: 0 + value: stop + allowedValues: + - stop + - start + - id: /dhwCircuits/dhw1/chargeDuration + type: floatValue + writeable: 1 + recordable: 0 + value: 180 + unitOfMeasure: mins + minValue: 60 + maxValue: 2880 + - id: /dhwCircuits/dhw1/singleChargeSetpoint + type: floatValue + writeable: 1 + recordable: 0 + value: 65 + unitOfMeasure: C + minValue: 50 + maxValue: 70 + - id: /dhwCircuits/dhw1/holidayMode + type: refEnum + references: + - id: /dhwCircuits/dhw1/holidayMode/activated + uri: http://THERMOSTAT/dhwCircuits/dhw1/holidayMode/activated + - id: /dhwCircuits/dhw1/holidayMode/activated + type: stringValue + writeable: 0 + recordable: 0 + value: "" + allowedValues: + - "" + - hm1 + - hm2 + - hm3 + - hm4 + - hm5 + - id: /dhwCircuits/dhw1/status + type: stringValue + writeable: 0 + recordable: 0 + value: ACTIVE + allowedValues: + - INACTIVE + - ACTIVE + - - id: /gateway + type: refEnum + references: + - id: /gateway/uuid + uri: http://THERMOSTAT/gateway/uuid + - id: /gateway/firmware + uri: http://THERMOSTAT/gateway/firmware + - id: /gateway/userpassword + uri: http://THERMOSTAT/gateway/userpassword + - id: /gateway/versionFirmware + uri: http://THERMOSTAT/gateway/versionFirmware + - id: /gateway/versionHardware + uri: http://THERMOSTAT/gateway/versionHardware + - id: /gateway/boschSHPassword + uri: http://THERMOSTAT/gateway/boschSHPassword + - id: /gateway/portalPassword + uri: http://THERMOSTAT/gateway/portalPassword + - id: /gateway/knxPassword + uri: http://THERMOSTAT/gateway/knxPassword + - id: /gateway/haiPassword + uri: http://THERMOSTAT/gateway/haiPassword + - id: /gateway/DateTime + uri: http://THERMOSTAT/gateway/DateTime + - id: /gateway/instPassword + uri: http://THERMOSTAT/gateway/instPassword + - id: /gateway/instAccess + uri: http://THERMOSTAT/gateway/instAccess + - id: /gateway/instWriteAccess + uri: http://THERMOSTAT/gateway/instWriteAccess + - id: /gateway/version + uri: http://THERMOSTAT/gateway/version + - id: /gateway/update + uri: http://THERMOSTAT/gateway/update + - id: /gateway/logging + uri: http://THERMOSTAT/gateway/logging + - id: /gateway/uuid + type: stringValue + writeable: 0 + recordable: 0 + value: "-1" + allowedValues: + - "-1" + - id: /gateway/versionFirmware + type: stringValue + writeable: 0 + recordable: 0 + value: 04.08.02 + - id: /gateway/versionHardware + type: stringValue + writeable: 0 + recordable: 0 + value: iCom_Low_NSC_v1 + - id: /gateway/DateTime + type: stringValue + writeable: 1 + recordable: 0 + value: "2026-01-13T22:37:36" + - id: /gateway/instAccess + type: stringValue + writeable: 1 + recordable: 0 + value: "off" + allowedValues: + - "off" + - "on" + - id: /gateway/instWriteAccess + type: stringValue + writeable: 1 + recordable: 0 + value: "off" + allowedValues: + - "off" + - "on" + - id: /gateway/update + type: refEnum + references: + - id: /gateway/update/version + uri: http://THERMOSTAT/gateway/update/version + - id: /gateway/update/request + uri: http://THERMOSTAT/gateway/update/request + - id: /gateway/update/strategy + uri: http://THERMOSTAT/gateway/update/strategy + - id: /gateway/update/status + uri: http://THERMOSTAT/gateway/update/status + - id: /gateway/update/status + type: stringValue + writeable: 0 + recordable: 0 + value: completed + allowedValues: + - inprogress + - completed + - interrupted + - id: /gateway/logging + type: refEnum + references: + - id: /gateway/logging/switch + uri: http://THERMOSTAT/gateway/logging/switch + - id: /gateway/logging/reqBusVar + uri: http://THERMOSTAT/gateway/logging/reqBusVar + - id: /gateway/logging/userAcceptance + uri: http://THERMOSTAT/gateway/logging/userAcceptance + - id: /gateway/logging/userAcceptance + type: stringValue + writeable: 1 + recordable: 0 + value: "false" + allowedValues: + - "false" + - "true" + - - id: /heatingCircuits + type: refEnum + references: + - id: /heatingCircuits/hc1 + uri: http://THERMOSTAT/heatingCircuits/hc1 + - id: /heatingCircuits/hc1 + type: refEnum + references: + - id: /heatingCircuits/hc1/currentRoomSetpoint + uri: http://THERMOSTAT/heatingCircuits/hc1/currentRoomSetpoint + - id: /heatingCircuits/hc1/actualSupplyTemperature + uri: http://THERMOSTAT/heatingCircuits/hc1/actualSupplyTemperature + - id: /heatingCircuits/hc1/operationMode + uri: http://THERMOSTAT/heatingCircuits/hc1/operationMode + - id: /heatingCircuits/hc1/temperatureRoomSetpoint + uri: http://THERMOSTAT/heatingCircuits/hc1/temperatureRoomSetpoint + - id: /heatingCircuits/hc1/manualRoomSetpoint + uri: http://THERMOSTAT/heatingCircuits/hc1/manualRoomSetpoint + - id: /heatingCircuits/hc1/temporaryRoomSetpoint + uri: http://THERMOSTAT/heatingCircuits/hc1/temporaryRoomSetpoint + - id: /heatingCircuits/hc1/roomtemperature + uri: http://THERMOSTAT/heatingCircuits/hc1/roomtemperature + - id: /heatingCircuits/hc1/switchPrograms + uri: http://THERMOSTAT/heatingCircuits/hc1/switchPrograms + - id: /heatingCircuits/hc1/temperatureLevels + uri: http://THERMOSTAT/heatingCircuits/hc1/temperatureLevels + - id: /heatingCircuits/hc1/pumpModulation + uri: http://THERMOSTAT/heatingCircuits/hc1/pumpModulation + - id: /heatingCircuits/hc1/suWiThreshold + uri: http://THERMOSTAT/heatingCircuits/hc1/suWiThreshold + - id: /heatingCircuits/hc1/designTemp + uri: http://THERMOSTAT/heatingCircuits/hc1/designTemp + - id: /heatingCircuits/hc1/heatCurveMin + uri: http://THERMOSTAT/heatingCircuits/hc1/heatCurveMin + - id: /heatingCircuits/hc1/heatCurveMax + uri: http://THERMOSTAT/heatingCircuits/hc1/heatCurveMax + - id: /heatingCircuits/hc1/suWiSwitchMode + uri: http://THERMOSTAT/heatingCircuits/hc1/suWiSwitchMode + - id: /heatingCircuits/hc1/currentOpModeInfo + uri: http://THERMOSTAT/heatingCircuits/hc1/currentOpModeInfo + - id: /heatingCircuits/hc1/cooling + uri: http://THERMOSTAT/heatingCircuits/hc1/cooling + - id: /heatingCircuits/hc1/currentSuWiMode + uri: http://THERMOSTAT/heatingCircuits/hc1/currentSuWiMode + - id: /heatingCircuits/hc1/holidayMode + uri: http://THERMOSTAT/heatingCircuits/hc1/holidayMode + - id: /heatingCircuits/hc1/status + uri: http://THERMOSTAT/heatingCircuits/hc1/status + - id: /heatingCircuits/hc1/currentRoomSetpoint + type: floatValue + writeable: 0 + recordable: 0 + value: 21 + unitOfMeasure: C + state: + - "off": 0 + - id: /heatingCircuits/hc1/actualSupplyTemperature + type: floatValue + writeable: 0 + recordable: 0 + value: 35.6 + unitOfMeasure: C + state: + - open: -3276.8 + - short: 3276.7 + - id: /heatingCircuits/hc1/operationMode + type: stringValue + writeable: 1 + recordable: 0 + value: manual + allowedValues: + - manual + - id: /heatingCircuits/hc1/temperatureRoomSetpoint + type: floatValue + writeable: 1 + recordable: 0 + value: 21 + unitOfMeasure: C + minValue: 5 + maxValue: 30 + state: + - "off": 0 + - id: /heatingCircuits/hc1/manualRoomSetpoint + type: floatValue + writeable: 1 + recordable: 0 + value: 21 + unitOfMeasure: C + minValue: 5 + maxValue: 30 + state: + - "off": 0 + - id: /heatingCircuits/hc1/temporaryRoomSetpoint + type: floatValue + writeable: 1 + recordable: 0 + value: -1 + unitOfMeasure: C + minValue: 5 + maxValue: 30 + state: + - "off": 0 + - na: -1 + - id: /heatingCircuits/hc1/roomtemperature + type: floatValue + writeable: 0 + recordable: 1 + value: 21.5 + unitOfMeasure: C + state: + - open: -3276.8 + - short: 3276.7 + - id: /heatingCircuits/hc1/switchPrograms + type: refEnum + references: [] + - id: /heatingCircuits/hc1/temperatureLevels + type: refEnum + references: + - id: /heatingCircuits/hc1/temperatureLevels/eco + uri: http://THERMOSTAT/heatingCircuits/hc1/temperatureLevels/eco + - id: /heatingCircuits/hc1/temperatureLevels/comfort2 + uri: http://THERMOSTAT/heatingCircuits/hc1/temperatureLevels/comfort2 + - id: /heatingCircuits/hc1/temperatureLevels/eco + type: floatValue + writeable: 1 + recordable: 0 + value: 15 + unitOfMeasure: C + minValue: 5 + maxValue: 20.5 + state: + - "off": 0 + - id: /heatingCircuits/hc1/temperatureLevels/comfort2 + type: floatValue + writeable: 1 + recordable: 0 + value: 21 + unitOfMeasure: C + minValue: 15.5 + maxValue: 30 + - id: /heatingCircuits/hc1/pumpModulation + type: floatValue + writeable: 0 + recordable: 0 + value: 0 + unitOfMeasure: "%" + - id: /heatingCircuits/hc1/suWiThreshold + type: floatValue + writeable: 1 + recordable: 0 + value: 20 + unitOfMeasure: C + minValue: 5 + maxValue: 35 + - id: /heatingCircuits/hc1/suWiSwitchMode + type: stringValue + writeable: 1 + recordable: 0 + value: automatic + allowedValues: + - automatic + - id: /heatingCircuits/hc1/cooling + type: refEnum + references: [] + - id: /heatingCircuits/hc1/currentSuWiMode + type: stringValue + writeable: 0 + recordable: 0 + value: forced + allowedValues: + - "off" + - forced + - cooling + - id: /heatingCircuits/hc1/holidayMode + type: refEnum + references: + - id: /heatingCircuits/hc1/holidayMode/activated + uri: http://THERMOSTAT/heatingCircuits/hc1/holidayMode/activated + - id: /heatingCircuits/hc1/holidayMode/activated + type: stringValue + writeable: 0 + recordable: 0 + value: "" + allowedValues: + - "" + - hm1 + - hm2 + - hm3 + - hm4 + - hm5 + - id: /heatingCircuits/hc1/status + type: stringValue + writeable: 0 + recordable: 0 + value: ACTIVE + allowedValues: + - INACTIVE + - ACTIVE + - - id: /heatSources + type: refEnum + references: + - id: /heatSources/info + uri: http://THERMOSTAT/heatSources/info + - id: /heatSources/actualModulation + uri: http://THERMOSTAT/heatSources/actualModulation + - id: /heatSources/burnerModulationSetpoint + uri: http://THERMOSTAT/heatSources/burnerModulationSetpoint + - id: /heatSources/flameStatus + uri: http://THERMOSTAT/heatSources/flameStatus + - id: /heatSources/actualSupplyTemperature + uri: http://THERMOSTAT/heatSources/actualSupplyTemperature + - id: /heatSources/powerSetpoint + uri: http://THERMOSTAT/heatSources/powerSetpoint + - id: /heatSources/ChimneySweeper + uri: http://THERMOSTAT/heatSources/ChimneySweeper + - id: /heatSources/returnTemperature + uri: http://THERMOSTAT/heatSources/returnTemperature + - id: /heatSources/numberOfStarts + uri: http://THERMOSTAT/heatSources/numberOfStarts + - id: /heatSources/supplyTemperatureSetpoint + uri: http://THERMOSTAT/heatSources/supplyTemperatureSetpoint + - id: /heatSources/applianceSupplyTemperature + uri: http://THERMOSTAT/heatSources/applianceSupplyTemperature + - id: /heatSources/cumulatedHeatEnergySecondBurner + uri: http://THERMOSTAT/heatSources/cumulatedHeatEnergySecondBurner + - id: /heatSources/smartGridMode + uri: http://THERMOSTAT/heatSources/smartGridMode + - id: /heatSources/evuActive + uri: http://THERMOSTAT/heatSources/evuActive + - id: /heatSources/elecSolarCollectorActive + uri: http://THERMOSTAT/heatSources/elecSolarCollectorActive + - id: /heatSources/poolTemperature + uri: http://THERMOSTAT/heatSources/poolTemperature + - id: /heatSources/delayTimer + uri: http://THERMOSTAT/heatSources/delayTimer + - id: /heatSources/heating + uri: http://THERMOSTAT/heatSources/heating + - id: /heatSources/Source + uri: http://THERMOSTAT/heatSources/Source + - id: /heatSources/sensors + uri: http://THERMOSTAT/heatSources/sensors + - id: /heatSources/workingTime + uri: http://THERMOSTAT/heatSources/workingTime + - id: /heatSources/fuelCell + uri: http://THERMOSTAT/heatSources/fuelCell + - id: /heatSources/energyMonitoring + uri: http://THERMOSTAT/heatSources/energyMonitoring + - id: /heatSources/hs1 + uri: http://THERMOSTAT/heatSources/hs1 + - id: /heatSources/ch + uri: http://THERMOSTAT/heatSources/ch + - id: /heatSources/dhw + uri: http://THERMOSTAT/heatSources/dhw + - id: /heatSources/pool + uri: http://THERMOSTAT/heatSources/pool + - id: /heatSources/total + uri: http://THERMOSTAT/heatSources/total + - id: /heatSources/electricGrid + uri: http://THERMOSTAT/heatSources/electricGrid + - id: /heatSources/info + type: systeminfo + recordable: 0 + writeable: 0 + values: + - Tok: "8" + Id: "20007" + Ver: "75" + "No": >- + 323630303137383030303031353837333337313036393800000000000000000000000000000000000000000000000000000000000000 + - id: /heatSources/actualModulation + type: floatValue + writeable: 0 + recordable: 0 + value: 32 + unitOfMeasure: "%" + - id: /heatSources/burnerModulationSetpoint + type: floatValue + writeable: 0 + recordable: 0 + value: 32 + unitOfMeasure: "%" + - id: /heatSources/flameStatus + type: stringValue + writeable: 0 + recordable: 0 + value: "off" + allowedValues: + - "off" + - "on" + - id: /heatSources/actualSupplyTemperature + type: floatValue + writeable: 0 + recordable: 0 + value: 35.6 + unitOfMeasure: C + state: + - open: -3276.8 + - short: 3276.7 + - id: /heatSources/powerSetpoint + type: floatValue + writeable: 0 + recordable: 0 + value: 32 + unitOfMeasure: "%" + - id: /heatSources/ChimneySweeper + type: stringValue + writeable: 0 + recordable: 0 + value: "off" + - id: /heatSources/returnTemperature + type: floatValue + writeable: 0 + recordable: 0 + value: 32.2 + unitOfMeasure: C + state: + - open: -3276.8 + - short: 3276.7 + - id: /heatSources/numberOfStarts + type: floatValue + writeable: 0 + recordable: 0 + value: 10384 + unitOfMeasure: " " + - id: /heatSources/supplyTemperatureSetpoint + type: floatValue + writeable: 0 + recordable: 0 + value: 36 + unitOfMeasure: C + - id: /heatSources/applianceSupplyTemperature + type: floatValue + writeable: 0 + recordable: 0 + value: 35.6 + unitOfMeasure: C + state: + - open: -3276.8 + - short: 3276.7 + - id: /heatSources/cumulatedHeatEnergySecondBurner + type: floatValue + writeable: 0 + recordable: 0 + value: 81540 + unitOfMeasure: kWh + - id: /heatSources/poolTemperature + type: floatValue + writeable: 0 + recordable: 0 + value: -3276.8 + unitOfMeasure: C + state: + - open: -3276.8 + - short: 3276.7 + - id: /heatSources/delayTimer + type: arrayData + writeable: 0 + recordable: 0 + values: + - alarm + allowedValues: + - warm + - compStart + - integrator + - addIntegrator + - alarm + - dhw + - ch + - mixer + - hc1CoolStart + - hc2CoolStart + - hc3CoolStart + - hc4CoolStart + - hc1HeatStart + - hc2HeatStart + - hc3HeatStart + - hc4HeatStart + - hc1CoolStop + - hc2CoolStop + - hc3CoolStop + - hc4CoolStop + - hc1HeatStop + - hc2HeatStop + - hc3HeatStop + - hc4HeatStop + - id: /heatSources/heating + type: refEnum + references: + - id: /heatSources/heating/extBlocked + uri: http://THERMOSTAT/heatSources/heating/extBlocked + - id: /heatSources/Source + type: refEnum + references: + - id: /heatSources/Source/Compressor + uri: http://THERMOSTAT/heatSources/Source/Compressor + - id: /heatSources/Source/eHeater + uri: http://THERMOSTAT/heatSources/Source/eHeater + - id: /heatSources/Source/Compressor + type: refEnum + references: + - id: /heatSources/Source/Compressor/extBlocked + uri: http://THERMOSTAT/heatSources/Source/Compressor/extBlocked + - id: /heatSources/Source/Compressor/power + uri: http://THERMOSTAT/heatSources/Source/Compressor/power + - id: /heatSources/Source/eHeater + type: refEnum + references: + - id: /heatSources/Source/eHeater/extBlocked + uri: http://THERMOSTAT/heatSources/Source/eHeater/extBlocked + - id: /heatSources/Source/eHeater/dhw + uri: http://THERMOSTAT/heatSources/Source/eHeater/dhw + - id: /heatSources/Source/eHeater/status + uri: http://THERMOSTAT/heatSources/Source/eHeater/status + - id: /heatSources/sensors + type: refEnum + references: + - id: /heatSources/sensors/collectorInTemp + uri: http://THERMOSTAT/heatSources/sensors/collectorInTemp + - id: /heatSources/sensors/collectorOutTemp + uri: http://THERMOSTAT/heatSources/sensors/collectorOutTemp + - id: /heatSources/sensors/compressorTemp + uri: http://THERMOSTAT/heatSources/sensors/compressorTemp + - id: /heatSources/workingTime + type: refEnum + references: + - id: /heatSources/workingTime/totalSystem + uri: http://THERMOSTAT/heatSources/workingTime/totalSystem + - id: /heatSources/workingTime/totalSystem + type: floatValue + writeable: 0 + recordable: 0 + value: 57201900 + unitOfMeasure: s + - id: /heatSources/fuelCell + type: refEnum + references: [] + - id: /heatSources/energyMonitoring + type: refEnum + references: + - id: /heatSources/energyMonitoring/consumption + uri: http://THERMOSTAT/heatSources/energyMonitoring/consumption + - id: /heatSources/energyMonitoring/correctionFactor + uri: http://THERMOSTAT/heatSources/energyMonitoring/correctionFactor + - id: /heatSources/energyMonitoring/maxTankLevel + uri: http://THERMOSTAT/heatSources/energyMonitoring/maxTankLevel + - id: /heatSources/energyMonitoring/minTankLevel + uri: http://THERMOSTAT/heatSources/energyMonitoring/minTankLevel + - id: /heatSources/energyMonitoring/tankLevel + uri: http://THERMOSTAT/heatSources/energyMonitoring/tankLevel + - id: /heatSources/energyMonitoring/startDateTime + uri: http://THERMOSTAT/heatSources/energyMonitoring/startDateTime + - id: /heatSources/energyMonitoring/consumption + type: floatValue + writeable: 1 + recordable: 0 + value: 0 + unitOfMeasure: kWh + minValue: 0 + maxValue: 135780000 + - id: /heatSources/hs1 + type: refEnum + references: + - id: /heatSources/hs1/info + uri: http://THERMOSTAT/heatSources/hs1/info + - id: /heatSources/hs1/type + uri: http://THERMOSTAT/heatSources/hs1/type + - id: /heatSources/hs1/actualModulation + uri: http://THERMOSTAT/heatSources/hs1/actualModulation + - id: /heatSources/hs1/flameStatus + uri: http://THERMOSTAT/heatSources/hs1/flameStatus + - id: /heatSources/hs1/info + type: systeminfo + recordable: 0 + writeable: 0 + values: + - Tok: "8" + Id: "20007" + Ver: "75" + "No": >- + 323630303137383030303031353837333337313036393800000000000000000000000000000000000000000000000000000000000000 + - id: /heatSources/hs1/type + type: stringValue + writeable: 0 + recordable: 0 + value: Heatpump + allowedValues: + - No_Appliance + - OilBoiler + - GasBoiler + - Heatpump + - unknownBoiler + - id: /heatSources/hs1/actualModulation + type: floatValue + writeable: 0 + recordable: 0 + value: 32 + unitOfMeasure: "%" + - id: /heatSources/hs1/flameStatus + type: stringValue + writeable: 0 + recordable: 0 + value: "off" + allowedValues: + - "off" + - "on" + - id: /heatSources/ch + type: refEnum + references: + - id: /heatSources/ch/energyMonitoring + uri: http://THERMOSTAT/heatSources/ch/energyMonitoring + - id: /heatSources/ch/energyMonitoring + type: refEnum + references: + - id: /heatSources/ch/energyMonitoring/outputProduced + uri: http://THERMOSTAT/heatSources/ch/energyMonitoring/outputProduced + - id: /heatSources/ch/energyMonitoring/eheater + uri: http://THERMOSTAT/heatSources/ch/energyMonitoring/eheater + - id: /heatSources/ch/energyMonitoring/compressor + uri: http://THERMOSTAT/heatSources/ch/energyMonitoring/compressor + - id: /heatSources/ch/energyMonitoring/workingTime + uri: http://THERMOSTAT/heatSources/ch/energyMonitoring/workingTime + - id: /heatSources/ch/energyMonitoring/numberOfStarts + uri: http://THERMOSTAT/heatSources/ch/energyMonitoring/numberOfStarts + - id: /heatSources/dhw + type: refEnum + references: + - id: /heatSources/dhw/energyMonitoring + uri: http://THERMOSTAT/heatSources/dhw/energyMonitoring + - id: /heatSources/dhw/energyMonitoring + type: refEnum + references: + - id: /heatSources/dhw/energyMonitoring/outputProduced + uri: http://THERMOSTAT/heatSources/dhw/energyMonitoring/outputProduced + - id: /heatSources/dhw/energyMonitoring/eheater + uri: http://THERMOSTAT/heatSources/dhw/energyMonitoring/eheater + - id: /heatSources/dhw/energyMonitoring/compressor + uri: http://THERMOSTAT/heatSources/dhw/energyMonitoring/compressor + - id: /heatSources/dhw/energyMonitoring/workingTime + uri: http://THERMOSTAT/heatSources/dhw/energyMonitoring/workingTime + - id: /heatSources/dhw/energyMonitoring/numberOfStarts + uri: http://THERMOSTAT/heatSources/dhw/energyMonitoring/numberOfStarts + - id: /heatSources/pool + type: refEnum + references: + - id: /heatSources/pool/energyMonitoring + uri: http://THERMOSTAT/heatSources/pool/energyMonitoring + - id: /heatSources/pool/energyMonitoring + type: refEnum + references: + - id: /heatSources/pool/energyMonitoring/outputProduced + uri: http://THERMOSTAT/heatSources/pool/energyMonitoring/outputProduced + - id: /heatSources/pool/energyMonitoring/eheater + uri: http://THERMOSTAT/heatSources/pool/energyMonitoring/eheater + - id: /heatSources/pool/energyMonitoring/compressor + uri: http://THERMOSTAT/heatSources/pool/energyMonitoring/compressor + - id: /heatSources/pool/energyMonitoring/workingTime + uri: http://THERMOSTAT/heatSources/pool/energyMonitoring/workingTime + - id: /heatSources/pool/energyMonitoring/numberOfStarts + uri: http://THERMOSTAT/heatSources/pool/energyMonitoring/numberOfStarts + - id: /heatSources/total + type: refEnum + references: + - id: /heatSources/total/energyMonitoring + uri: http://THERMOSTAT/heatSources/total/energyMonitoring + - id: /heatSources/total/energyMonitoring + type: refEnum + references: + - id: /heatSources/total/energyMonitoring/consumedEnergy + uri: >- + http://THERMOSTAT/heatSources/total/energyMonitoring/consumedEnergy + - id: /heatSources/total/energyMonitoring/outputProduced + uri: >- + http://THERMOSTAT/heatSources/total/energyMonitoring/outputProduced + - id: /heatSources/total/energyMonitoring/eheater + uri: http://THERMOSTAT/heatSources/total/energyMonitoring/eheater + - id: /heatSources/total/energyMonitoring/compressor + uri: http://THERMOSTAT/heatSources/total/energyMonitoring/compressor + - id: /heatSources/total/energyMonitoring/workingTime + uri: http://THERMOSTAT/heatSources/total/energyMonitoring/workingTime + - id: /heatSources/total/energyMonitoring/numberOfStarts + uri: >- + http://THERMOSTAT/heatSources/total/energyMonitoring/numberOfStarts + - id: /heatSources/electricGrid + type: refEnum + references: [] + - - id: /notifications + type: errorList + recordable: 0 + writeable: 0 + values: [] + - - id: /system + type: refEnum + references: + - id: /system/brand + uri: http://THERMOSTAT/system/brand + - id: /system/systemType + uri: http://THERMOSTAT/system/systemType + - id: /system/bus + uri: http://THERMOSTAT/system/bus + - id: /system/busReq + uri: http://THERMOSTAT/system/busReq + - id: /system/info + uri: http://THERMOSTAT/system/info + - id: /system/minOutdoorTemp + uri: http://THERMOSTAT/system/minOutdoorTemp + - id: /system/healthStatus + uri: http://THERMOSTAT/system/healthStatus + - id: /system/sensors + uri: http://THERMOSTAT/system/sensors + - id: /system/appliance + uri: http://THERMOSTAT/system/appliance + - id: /system/holidayModes + uri: http://THERMOSTAT/system/holidayModes + - id: /system/brand + type: stringValue + writeable: 0 + recordable: 0 + value: IVT + allowedValues: + - unknown + - Bosch + - Junkers + - Buderus + - Nefit + - Sieger + - Tata + - Dakon + - Elm + - Boulter + - Vulcano + - Worcester + - British Gas + - IVT + - Geminox + - Neckar + - Zeus + - Milton + - id: /system/systemType + type: stringValue + writeable: 0 + recordable: 0 + value: NSC_ICOM_GATEWAY + allowedValues: + - NSC_ICOM_GATEWAY + - id: /system/bus + type: stringValue + writeable: 0 + recordable: 0 + value: EMS2_0 + allowedValues: + - No_Bus + - EMS1_0 + - EMS2_0 + - CAN + - id: /system/info + type: systeminfo + recordable: 0 + writeable: 0 + values: + - Tok: "8" + Id: "172" + Ver: "02.03" + "No": >- + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + - Tok: "16" + Id: "172" + Ver: NF02.03 + "No": >- + 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 + - Tok: "9" + Id: "240" + Ver: NF38.03 + "No": >- + 333136333038353530323130383032313030323132363538373138363735343435000000000000000000 + - Tok: "80" + Id: "218" + Ver: NF03.03 + "No": >- + 3337333031343030303033383238373138363737333334FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000000 + - id: /system/minOutdoorTemp + type: floatValue + writeable: 1 + recordable: 0 + value: -20 + unitOfMeasure: C + minValue: -35 + maxValue: 10 + - id: /system/healthStatus + type: stringValue + writeable: 0 + recordable: 0 + value: ok + allowedValues: + - error + - maintenance + - ok + - id: /system/sensors + type: refEnum + references: + - id: /system/sensors/temperatures + uri: http://THERMOSTAT/system/sensors/temperatures + - id: /system/sensors/temperatures + type: refEnum + references: + - id: /system/sensors/temperatures/outdoor_t1 + uri: http://THERMOSTAT/system/sensors/temperatures/outdoor_t1 + - id: /system/sensors/temperatures/supply_t1_setpoint + uri: http://THERMOSTAT/system/sensors/temperatures/supply_t1_setpoint + - id: /system/sensors/temperatures/supply_t1 + uri: http://THERMOSTAT/system/sensors/temperatures/supply_t1 + - id: /system/sensors/temperatures/return + uri: http://THERMOSTAT/system/sensors/temperatures/return + - id: /system/sensors/temperatures/switch + uri: http://THERMOSTAT/system/sensors/temperatures/switch + - id: /system/sensors/temperatures/outdoor_t1 + type: floatValue + writeable: 0 + recordable: 1 + value: 1.7 + unitOfMeasure: C + state: + - open: -3276.8 + - short: 3276.7 + - id: /system/sensors/temperatures/supply_t1_setpoint + type: floatValue + writeable: 0 + recordable: 0 + value: 36 + unitOfMeasure: C + - id: /system/sensors/temperatures/supply_t1 + type: floatValue + writeable: 0 + recordable: 0 + value: 35.6 + unitOfMeasure: C + state: + - open: -3276.8 + - short: 3276.7 + - id: /system/sensors/temperatures/return + type: floatValue + writeable: 0 + recordable: 0 + value: 32.2 + unitOfMeasure: C + state: + - open: -3276.8 + - short: 3276.7 + - id: /system/sensors/temperatures/switch + type: floatValue + writeable: 0 + recordable: 0 + value: 35.6 + unitOfMeasure: C + state: + - open: -3276.8 + - short: 3276.7 + - id: /system/appliance + type: refEnum + references: + - id: /system/appliance/actualSupplyTemperature + uri: http://THERMOSTAT/system/appliance/actualSupplyTemperature + - id: /system/appliance/actualSupplyTemperature + type: floatValue + writeable: 0 + recordable: 0 + value: 35.6 + unitOfMeasure: C + state: + - open: -3276.8 + - short: 3276.7 + - id: /system/holidayModes + type: refEnum + references: + - id: /system/holidayModes/hm1 + uri: http://THERMOSTAT/system/holidayModes/hm1 + - id: /system/holidayModes/hm1 + type: refEnum + references: + - id: /system/holidayModes/hm1/startStop + uri: http://THERMOSTAT/system/holidayModes/hm1/startStop + - id: /system/holidayModes/hm1/fixTemperature + uri: http://THERMOSTAT/system/holidayModes/hm1/fixTemperature + - id: /system/holidayModes/hm1/delete + uri: http://THERMOSTAT/system/holidayModes/hm1/delete + - id: /system/holidayModes/hm1/startStop + type: stringValue + writeable: 1 + recordable: 0 + value: 2018-01-01/2018-01-01 + - id: /system/holidayModes/hm1/fixTemperature + type: floatValue + writeable: 1 + recordable: 0 + value: 17 + unitOfMeasure: C + minValue: 5 + maxValue: 30 + - - id: /solarCircuits + type: refEnum + references: [] + - - id: /recordings + type: refEnum + references: + - id: /recordings/system + uri: http://THERMOSTAT/recordings/system + - id: /recordings/heatSources + uri: http://THERMOSTAT/recordings/heatSources + - id: /recordings/heatingCircuits + uri: http://THERMOSTAT/recordings/heatingCircuits + - id: /recordings/dhwCircuits + uri: http://THERMOSTAT/recordings/dhwCircuits + - id: /recordings/system + type: refEnum + references: + - id: /recordings/system/sensors + uri: http://THERMOSTAT/recordings/system/sensors + - id: /recordings/system/heatSources + uri: http://THERMOSTAT/recordings/system/heatSources + - id: /recordings/system/sensors + type: refEnum + references: + - id: /recordings/system/sensors/temperatures + uri: http://THERMOSTAT/recordings/system/sensors/temperatures + - id: /recordings/system/sensors/temperatures + type: refEnum + references: + - id: /recordings/system/sensors/temperatures/outdoor_t1 + uri: >- + http://THERMOSTAT/recordings/system/sensors/temperatures/outdoor_t1 + - id: /recordings/system/sensors/temperatures/outdoor_t1?interval=2026-1-12 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /system/sensors/temperatures/outdoor_t1 + uri: http:///system/sensors/temperatures/outdoor_t1 + interval: 2026-1-12 + sampleRate: P1H + recording-type: actual + recording: + - "y": -173 + c: 60 + - "y": -173 + c: 60 + - "y": -173 + c: 60 + - "y": -170 + c: 59 + - "y": -192 + c: 60 + - "y": -233 + c: 60 + - "y": -276 + c: 60 + - "y": -263 + c: 60 + - "y": -233 + c: 60 + - "y": -229 + c: 59 + - "y": -233 + c: 60 + - "y": -182 + c: 60 + - "y": -173 + c: 60 + - "y": -173 + c: 60 + - "y": -173 + c: 60 + - "y": -170 + c: 59 + - "y": -173 + c: 60 + - "y": -153 + c: 60 + - "y": -164 + c: 60 + - "y": -146 + c: 60 + - "y": -58 + c: 60 + - "y": -52 + c: 59 + - "y": -53 + c: 60 + - "y": -15 + c: 60 + - id: /recordings/system/sensors/temperatures/outdoor_t1?interval=2026-1 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /system/sensors/temperatures/outdoor_t1 + uri: http://192.168.7.67/system/sensors/temperatures/outdoor_t1 + interval: 2026-1 + sampleRate: P1D + recording-type: actual + recording: + - "y": 162 + c: 1435 + - "y": -215 + c: 1436 + - "y": -1138 + c: 1436 + - "y": -5221 + c: 1436 + - "y": -7172 + c: 1436 + - "y": 0 + c: 1435 + - "y": -2888 + c: 1436 + - "y": 279 + c: 1437 + - "y": -2309 + c: 1436 + - "y": -6240 + c: 1435 + - "y": -4405 + c: 1436 + - "y": -4033 + c: 1436 + - "y": 119 + c: 1316 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - id: /recordings/system/sensors/temperatures/outdoor_t1?interval=2026-W3 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /system/sensors/temperatures/outdoor_t1 + uri: http://192.168.7.67/system/sensors/temperatures/outdoor_t1 + interval: 2026-W3 + sampleRate: P6H + recording-type: actual + recording: + - "y": -1114 + c: 359 + - "y": -1416 + c: 359 + - "y": -1015 + c: 359 + - "y": -488 + c: 359 + - "y": -81 + c: 359 + - "y": -84 + c: 359 + - "y": 45 + c: 359 + - "y": 239 + c: 239 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - id: /recordings/system/sensors/temperatures/outdoor_t1 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /system/sensors/temperatures/outdoor_t1 + uri: http://192.168.7.67/system/sensors/temperatures/outdoor_t1 + interval: "" + sampleRate: "" + recording-type: actual + recording: [] + - id: /recordings/system/heatSources + type: refEnum + references: + - id: /recordings/system/heatSources/hs1 + uri: http://THERMOSTAT/recordings/system/heatSources/hs1 + - id: /recordings/system/heatSources/hs1 + type: refEnum + references: [] + - id: /recordings/heatSources + type: refEnum + references: + - id: /recordings/heatSources/hs1 + uri: http://THERMOSTAT/recordings/heatSources/hs1 + - id: /recordings/heatSources/total + uri: http://THERMOSTAT/recordings/heatSources/total + - id: /recordings/heatSources/hs1 + type: refEnum + references: [] + - id: /recordings/heatSources/total + type: refEnum + references: + - id: /recordings/heatSources/total/energyMonitoring + uri: http://THERMOSTAT/recordings/heatSources/total/energyMonitoring + - id: /recordings/heatSources/total/energyMonitoring + type: refEnum + references: + - id: /recordings/heatSources/total/energyMonitoring/consumedEnergy + uri: >- + http://THERMOSTAT/recordings/heatSources/total/energyMonitoring/consumedEnergy + - id: /recordings/heatSources/total/energyMonitoring/outputProduced + uri: >- + http://THERMOSTAT/recordings/heatSources/total/energyMonitoring/outputProduced + - id: /recordings/heatSources/total/energyMonitoring/eheater + uri: >- + http://THERMOSTAT/recordings/heatSources/total/energyMonitoring/eheater + - id: /recordings/heatSources/total/energyMonitoring/compressor + uri: >- + http://THERMOSTAT/recordings/heatSources/total/energyMonitoring/compressor + - id: >- + /recordings/heatSources/total/energyMonitoring/consumedEnergy?interval=2026-1-12 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatSources/total/energyMonitoring/consumedEnergy + uri: >- + http://192.168.7.67/heatSources/total/energyMonitoring/consumedEnergy + interval: 2026-1-12 + sampleRate: P1H + recording-type: actual + recording: + - "y": 120 + c: 60 + - "y": 120 + c: 60 + - "y": 120 + c: 60 + - "y": 120 + c: 59 + - "y": 60 + c: 60 + - "y": 120 + c: 60 + - "y": 120 + c: 60 + - "y": 120 + c: 60 + - "y": 120 + c: 60 + - "y": 180 + c: 59 + - "y": 120 + c: 60 + - "y": 60 + c: 60 + - "y": 60 + c: 60 + - "y": 60 + c: 60 + - "y": 120 + c: 60 + - "y": 60 + c: 59 + - "y": 120 + c: 60 + - "y": 60 + c: 60 + - "y": 120 + c: 60 + - "y": 120 + c: 60 + - "y": 120 + c: 60 + - "y": 60 + c: 59 + - "y": 60 + c: 60 + - "y": 60 + c: 60 + - id: >- + /recordings/heatSources/total/energyMonitoring/consumedEnergy?interval=2026-1 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatSources/total/energyMonitoring/consumedEnergy + uri: >- + http://192.168.7.67/heatSources/total/energyMonitoring/consumedEnergy + interval: 2026-1 + sampleRate: P1D + recording-type: actual + recording: + - "y": 1380 + c: 1435 + - "y": 1200 + c: 1436 + - "y": 1260 + c: 1436 + - "y": 1800 + c: 1436 + - "y": 1560 + c: 1436 + - "y": 2460 + c: 1435 + - "y": 2580 + c: 1436 + - "y": 2460 + c: 1437 + - "y": 2640 + c: 1436 + - "y": 2700 + c: 1435 + - "y": 2400 + c: 1436 + - "y": 2400 + c: 1436 + - "y": 1980 + c: 1316 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - id: >- + /recordings/heatSources/total/energyMonitoring/consumedEnergy?interval=2026-W3 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatSources/total/energyMonitoring/consumedEnergy + uri: >- + http://192.168.7.67/heatSources/total/energyMonitoring/consumedEnergy + interval: 2026-W3 + sampleRate: P6H + recording-type: actual + recording: + - "y": 660 + c: 359 + - "y": 720 + c: 359 + - "y": 480 + c: 359 + - "y": 540 + c: 359 + - "y": 480 + c: 359 + - "y": 720 + c: 359 + - "y": 480 + c: 359 + - "y": 300 + c: 239 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - id: /recordings/heatSources/total/energyMonitoring/consumedEnergy + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatSources/total/energyMonitoring/consumedEnergy + uri: >- + http://192.168.7.67/heatSources/total/energyMonitoring/consumedEnergy + interval: "" + sampleRate: "" + recording-type: actual + recording: [] + - id: >- + /recordings/heatSources/total/energyMonitoring/outputProduced?interval=2026-1-12 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatSources/total/energyMonitoring/outputProduced + uri: >- + http://192.168.7.67/heatSources/total/energyMonitoring/outputProduced + interval: 2026-1-12 + sampleRate: P1H + recording-type: actual + recording: + - "y": 360 + c: 60 + - "y": 420 + c: 60 + - "y": 420 + c: 60 + - "y": 360 + c: 59 + - "y": 360 + c: 60 + - "y": 420 + c: 60 + - "y": 420 + c: 60 + - "y": 540 + c: 60 + - "y": 480 + c: 60 + - "y": 540 + c: 59 + - "y": 360 + c: 60 + - "y": 360 + c: 60 + - "y": 300 + c: 60 + - "y": 300 + c: 60 + - "y": 300 + c: 60 + - "y": 360 + c: 59 + - "y": 360 + c: 60 + - "y": 360 + c: 60 + - "y": 360 + c: 60 + - "y": 480 + c: 60 + - "y": 300 + c: 60 + - "y": 300 + c: 59 + - "y": 300 + c: 60 + - "y": 300 + c: 60 + - id: >- + /recordings/heatSources/total/energyMonitoring/outputProduced?interval=2026-1 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatSources/total/energyMonitoring/outputProduced + uri: >- + http://192.168.7.67/heatSources/total/energyMonitoring/outputProduced + interval: 2026-1 + sampleRate: P1D + recording-type: actual + recording: + - "y": 6420 + c: 1435 + - "y": 6060 + c: 1436 + - "y": 6300 + c: 1436 + - "y": 7800 + c: 1436 + - "y": 7440 + c: 1436 + - "y": 10020 + c: 1435 + - "y": 9780 + c: 1436 + - "y": 9300 + c: 1437 + - "y": 9960 + c: 1436 + - "y": 10020 + c: 1435 + - "y": 9180 + c: 1436 + - "y": 9060 + c: 1436 + - "y": 7920 + c: 1316 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - id: >- + /recordings/heatSources/total/energyMonitoring/outputProduced?interval=2026-W3 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatSources/total/energyMonitoring/outputProduced + uri: >- + http://192.168.7.67/heatSources/total/energyMonitoring/outputProduced + interval: 2026-W3 + sampleRate: P6H + recording-type: actual + recording: + - "y": 2340 + c: 359 + - "y": 2700 + c: 359 + - "y": 1980 + c: 359 + - "y": 2040 + c: 359 + - "y": 2100 + c: 359 + - "y": 2580 + c: 359 + - "y": 1920 + c: 359 + - "y": 1320 + c: 239 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - id: /recordings/heatSources/total/energyMonitoring/outputProduced + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatSources/total/energyMonitoring/outputProduced + uri: >- + http://192.168.7.67/heatSources/total/energyMonitoring/outputProduced + interval: "" + sampleRate: "" + recording-type: actual + recording: [] + - id: >- + /recordings/heatSources/total/energyMonitoring/eheater?interval=2026-1-12 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatSources/total/energyMonitoring/eheater + uri: http://192.168.7.67/heatSources/total/energyMonitoring/eheater + interval: 2026-1-12 + sampleRate: P1H + recording-type: actual + recording: + - "y": 0 + c: 60 + - "y": 0 + c: 60 + - "y": 0 + c: 60 + - "y": 0 + c: 59 + - "y": 0 + c: 60 + - "y": 0 + c: 60 + - "y": 0 + c: 60 + - "y": 0 + c: 60 + - "y": 0 + c: 60 + - "y": 0 + c: 59 + - "y": 0 + c: 60 + - "y": 0 + c: 60 + - "y": 0 + c: 60 + - "y": 0 + c: 60 + - "y": 0 + c: 60 + - "y": 0 + c: 59 + - "y": 0 + c: 60 + - "y": 0 + c: 60 + - "y": 0 + c: 60 + - "y": 0 + c: 60 + - "y": 0 + c: 60 + - "y": 0 + c: 59 + - "y": 0 + c: 60 + - "y": 0 + c: 60 + - id: /recordings/heatSources/total/energyMonitoring/eheater?interval=2026-1 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatSources/total/energyMonitoring/eheater + uri: http://192.168.7.67/heatSources/total/energyMonitoring/eheater + interval: 2026-1 + sampleRate: P1D + recording-type: actual + recording: + - "y": 0 + c: 1435 + - "y": 0 + c: 1436 + - "y": 0 + c: 1436 + - "y": 120 + c: 1436 + - "y": 0 + c: 1436 + - "y": 0 + c: 1435 + - "y": 0 + c: 1436 + - "y": 0 + c: 1437 + - "y": 0 + c: 1436 + - "y": 0 + c: 1435 + - "y": 0 + c: 1436 + - "y": 0 + c: 1436 + - "y": 0 + c: 1316 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - id: >- + /recordings/heatSources/total/energyMonitoring/eheater?interval=2026-W3 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatSources/total/energyMonitoring/eheater + uri: http://192.168.7.67/heatSources/total/energyMonitoring/eheater + interval: 2026-W3 + sampleRate: P6H + recording-type: actual + recording: + - "y": 0 + c: 359 + - "y": 0 + c: 359 + - "y": 0 + c: 359 + - "y": 0 + c: 359 + - "y": 0 + c: 359 + - "y": 0 + c: 359 + - "y": 0 + c: 359 + - "y": 0 + c: 239 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - id: /recordings/heatSources/total/energyMonitoring/eheater + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatSources/total/energyMonitoring/eheater + uri: http://192.168.7.67/heatSources/total/energyMonitoring/eheater + interval: "" + sampleRate: "" + recording-type: actual + recording: [] + - id: >- + /recordings/heatSources/total/energyMonitoring/compressor?interval=2026-1-12 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatSources/total/energyMonitoring/compressor + uri: http://192.168.7.67/heatSources/total/energyMonitoring/compressor + interval: 2026-1-12 + sampleRate: P1H + recording-type: actual + recording: + - "y": 120 + c: 60 + - "y": 120 + c: 60 + - "y": 120 + c: 60 + - "y": 120 + c: 59 + - "y": 60 + c: 60 + - "y": 120 + c: 60 + - "y": 120 + c: 60 + - "y": 120 + c: 60 + - "y": 120 + c: 60 + - "y": 180 + c: 59 + - "y": 120 + c: 60 + - "y": 60 + c: 60 + - "y": 60 + c: 60 + - "y": 60 + c: 60 + - "y": 120 + c: 60 + - "y": 60 + c: 59 + - "y": 120 + c: 60 + - "y": 60 + c: 60 + - "y": 120 + c: 60 + - "y": 120 + c: 60 + - "y": 120 + c: 60 + - "y": 60 + c: 59 + - "y": 60 + c: 60 + - "y": 60 + c: 60 + - id: >- + /recordings/heatSources/total/energyMonitoring/compressor?interval=2026-1 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatSources/total/energyMonitoring/compressor + uri: http://192.168.7.67/heatSources/total/energyMonitoring/compressor + interval: 2026-1 + sampleRate: P1D + recording-type: actual + recording: + - "y": 1380 + c: 1435 + - "y": 1200 + c: 1436 + - "y": 1260 + c: 1436 + - "y": 1680 + c: 1436 + - "y": 1560 + c: 1436 + - "y": 2460 + c: 1435 + - "y": 2580 + c: 1436 + - "y": 2460 + c: 1437 + - "y": 2640 + c: 1436 + - "y": 2700 + c: 1435 + - "y": 2400 + c: 1436 + - "y": 2400 + c: 1436 + - "y": 1980 + c: 1316 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - id: >- + /recordings/heatSources/total/energyMonitoring/compressor?interval=2026-W3 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatSources/total/energyMonitoring/compressor + uri: http://192.168.7.67/heatSources/total/energyMonitoring/compressor + interval: 2026-W3 + sampleRate: P6H + recording-type: actual + recording: + - "y": 660 + c: 359 + - "y": 720 + c: 359 + - "y": 480 + c: 359 + - "y": 540 + c: 359 + - "y": 480 + c: 359 + - "y": 720 + c: 359 + - "y": 480 + c: 359 + - "y": 300 + c: 239 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - id: /recordings/heatSources/total/energyMonitoring/compressor + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatSources/total/energyMonitoring/compressor + uri: http://192.168.7.67/heatSources/total/energyMonitoring/compressor + interval: "" + sampleRate: "" + recording-type: actual + recording: [] + - id: /recordings/heatingCircuits + type: refEnum + references: + - id: /recordings/heatingCircuits/hc1 + uri: http://THERMOSTAT/recordings/heatingCircuits/hc1 + - id: /recordings/heatingCircuits/hc1 + type: refEnum + references: + - id: /recordings/heatingCircuits/hc1/roomtemperature + uri: http://THERMOSTAT/recordings/heatingCircuits/hc1/roomtemperature + - id: /recordings/heatingCircuits/hc1/roomtemperature?interval=2026-1-12 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatingCircuits/hc1/roomtemperature + uri: http://192.168.7.67/heatingCircuits/hc1/roomtemperature + interval: 2026-1-12 + sampleRate: P1H + recording-type: actual + recording: + - "y": 1260 + c: 60 + - "y": 1260 + c: 60 + - "y": 1260 + c: 60 + - "y": 1260 + c: 60 + - "y": 1239 + c: 59 + - "y": 1260 + c: 60 + - "y": 1260 + c: 60 + - "y": 1260 + c: 60 + - "y": 1260 + c: 60 + - "y": 1239 + c: 59 + - "y": 1260 + c: 60 + - "y": 1260 + c: 60 + - "y": 1260 + c: 60 + - "y": 1260 + c: 60 + - "y": 1260 + c: 60 + - "y": 1239 + c: 59 + - "y": 1260 + c: 60 + - "y": 1260 + c: 60 + - "y": 1260 + c: 60 + - "y": 1260 + c: 60 + - "y": 1260 + c: 60 + - "y": 1239 + c: 59 + - "y": 1260 + c: 60 + - "y": 1260 + c: 60 + - id: /recordings/heatingCircuits/hc1/roomtemperature?interval=2026-1 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatingCircuits/hc1/roomtemperature + uri: http://192.168.7.67/heatingCircuits/hc1/roomtemperature + interval: 2026-1 + sampleRate: P1D + recording-type: actual + recording: + - "y": 25340 + c: 1435 + - "y": 25848 + c: 1436 + - "y": 25848 + c: 1436 + - "y": 25848 + c: 1436 + - "y": 25848 + c: 1436 + - "y": 26948 + c: 1435 + - "y": 29684 + c: 1436 + - "y": 30026 + c: 1437 + - "y": 30156 + c: 1436 + - "y": 30298 + c: 1435 + - "y": 30113 + c: 1436 + - "y": 30156 + c: 1436 + - "y": 27636 + c: 1316 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - id: /recordings/heatingCircuits/hc1/roomtemperature?interval=2026-W3 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatingCircuits/hc1/roomtemperature + uri: http://192.168.7.67/heatingCircuits/hc1/roomtemperature + interval: 2026-W3 + sampleRate: P6H + recording-type: actual + recording: + - "y": 7539 + c: 359 + - "y": 7539 + c: 359 + - "y": 7539 + c: 359 + - "y": 7539 + c: 359 + - "y": 7539 + c: 359 + - "y": 7539 + c: 359 + - "y": 7539 + c: 359 + - "y": 5019 + c: 239 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - id: /recordings/heatingCircuits/hc1/roomtemperature + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /heatingCircuits/hc1/roomtemperature + uri: http://192.168.7.67/heatingCircuits/hc1/roomtemperature + interval: "" + sampleRate: "" + recording-type: actual + recording: [] + - id: /recordings/dhwCircuits + type: refEnum + references: + - id: /recordings/dhwCircuits/dhw1 + uri: http://THERMOSTAT/recordings/dhwCircuits/dhw1 + - id: /recordings/dhwCircuits/dhw1 + type: refEnum + references: + - id: /recordings/dhwCircuits/dhw1/actualTemp + uri: http://THERMOSTAT/recordings/dhwCircuits/dhw1/actualTemp + - id: /recordings/dhwCircuits/dhw1/actualTemp?interval=2026-1-12 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /dhwCircuits/dhw1/actualTemp + uri: http://192.168.7.67/dhwCircuits/dhw1/actualTemp + interval: 2026-1-12 + sampleRate: P1H + recording-type: actual + recording: + - "y": 2847 + c: 60 + - "y": 3178 + c: 60 + - "y": 3137 + c: 60 + - "y": 3068 + c: 59 + - "y": 3074 + c: 60 + - "y": 3060 + c: 60 + - "y": 3015 + c: 60 + - "y": 2934 + c: 60 + - "y": 3089 + c: 60 + - "y": 3119 + c: 59 + - "y": 3120 + c: 60 + - "y": 3108 + c: 60 + - "y": 3060 + c: 60 + - "y": 3007 + c: 60 + - "y": 3000 + c: 60 + - "y": 2902 + c: 59 + - "y": 2908 + c: 60 + - "y": 2839 + c: 60 + - "y": 3062 + c: 60 + - "y": 3154 + c: 60 + - "y": 3120 + c: 60 + - "y": 3031 + c: 59 + - "y": 3043 + c: 60 + - "y": 3000 + c: 60 + - id: /recordings/dhwCircuits/dhw1/actualTemp?interval=2026-1 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /dhwCircuits/dhw1/actualTemp + uri: http://192.168.7.67/dhwCircuits/dhw1/actualTemp + interval: 2026-1 + sampleRate: P1D + recording-type: actual + recording: + - "y": 63670 + c: 1435 + - "y": 63592 + c: 1436 + - "y": 63570 + c: 1436 + - "y": 80495 + c: 1436 + - "y": 65869 + c: 1436 + - "y": 64707 + c: 1435 + - "y": 71946 + c: 1436 + - "y": 71574 + c: 1437 + - "y": 72985 + c: 1436 + - "y": 73204 + c: 1435 + - "y": 79760 + c: 1436 + - "y": 72875 + c: 1436 + - "y": 66293 + c: 1316 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - id: /recordings/dhwCircuits/dhw1/actualTemp?interval=2026-W3 + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /dhwCircuits/dhw1/actualTemp + uri: http://192.168.7.67/dhwCircuits/dhw1/actualTemp + interval: 2026-W3 + sampleRate: P6H + recording-type: actual + recording: + - "y": 18364 + c: 359 + - "y": 18385 + c: 359 + - "y": 17716 + c: 359 + - "y": 18410 + c: 359 + - "y": 17649 + c: 359 + - "y": 18503 + c: 359 + - "y": 17966 + c: 359 + - "y": 12175 + c: 239 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - "y": 0 + c: 0 + - id: /recordings/dhwCircuits/dhw1/actualTemp + type: yRecording + writeable: 0 + recordable: 0 + recordedResource: + id: /dhwCircuits/dhw1/actualTemp + uri: http://192.168.7.67/dhwCircuits/dhw1/actualTemp + interval: "" + sampleRate: "" + recording-type: actual + recording: [] + - /devices: not found + - /energy: not found + - /events: not found + - /programs: not found + - /zones: not found + - /ecus: not found + - - id: /application + type: refEnum + references: + - id: /application/tbso + uri: http://THERMOSTAT/application/tbso + - id: /application/tbso + type: refEnum + references: + - id: /application/tbso/electricity + uri: http://THERMOSTAT/application/tbso/electricity + - id: /application/tbso/enable + uri: http://THERMOSTAT/application/tbso/enable + - id: /application/tbso/electricity + type: refEnum + references: + - id: /application/tbso/electricity/tariffID + uri: http://THERMOSTAT/application/tbso/electricity/tariffID + - id: /application/tbso/electricity/setPointDayOverlay + uri: http://THERMOSTAT/application/tbso/electricity/setPointDayOverlay + - id: /application/tbso/electricity/tariffID + type: floatValue + writeable: 1 + recordable: 0 + value: 3 + unitOfMeasure: " " + minValue: 1 + maxValue: 30 + - id: /application/tbso/enable + type: stringValue + writeable: 1 + recordable: 0 + value: "off" + allowedValues: + - "off" + - "on" + - - id: /gservice_tariff + type: refEnum + references: + - id: /gservice_tariff/relativePrice + uri: http://THERMOSTAT/gservice_tariff/relativePrice + - id: /gservice_tariff/relativePrice + type: refEnum + references: + - id: /gservice_tariff/relativePrice/* + uri: http://THERMOSTAT/gservice_tariff/relativePrice/* + - id: /gservice_tariff/relativePrice/* + type: arrayData + writeable: 1 + recordable: 0 + values: + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + - 0 + diff --git a/drivers/.DS_Store b/drivers/.DS_Store new file mode 100644 index 0000000..6bbea87 Binary files /dev/null and b/drivers/.DS_Store differ diff --git a/drivers/heat-pump/device.js b/drivers/heat-pump/device.js index 0115a24..80a9041 100644 --- a/drivers/heat-pump/device.js +++ b/drivers/heat-pump/device.js @@ -8,73 +8,152 @@ const ErrorCodes = require('../../lib/errorcodes'); class HeatPumpDevice extends Device { async onInit() { + this.data = this.getData(); + this.isWriting = false; + + // Initialize the client using user settings try { this.client = await this.getClient(this.getSettings()); } catch (e) { this.log(`Unable to initialize device: ${e.message}`); - throw e; } + // Register Capability Listeners + this.registerCapabilityListener('target_temperature', this.onCapabilityTargetTemperature.bind(this)); + this.registerCapabilityListener('ivt_hotwater_mode', this.onCapabilityHotWaterMode.bind(this)); + this.registerCapabilityListener('hotwater_boost', this.onCapabilityHotWaterBoost.bind(this)); + + // Setup Polling const updateInterval = Number(this.getSetting('interval')) * 1000; - this.data = this.getData(); + this.log(`[${this.getName()}] Update Interval: ${updateInterval}ms`); + + // Initial Data Fetch (Delayed 2s to ensure SSL stability) + setTimeout(() => { + this.getDeviceData().catch(err => this.error('Startup fetch failed:', err)); + }, 2000); - this.log(`[${this.getName()}][${this.data.id}]`, `Update Interval: ${updateInterval}`); - this.log(`[${this.getName()}][${this.data.id}]`, 'Connected to device'); this.interval = setInterval(async () => { - await this.getDeviceData(); + if (!this.isWriting) { + await this.getDeviceData(); + } }, updateInterval); this.log('IVT heat pump device has been initialized'); } - async getDeviceData() { - const energyMonitoringCapabilities = [ - 'LAST_HOUR_POWER_TOTAL', - 'LAST_HOUR_POWER_EHEATER', - 'LAST_HOUR_POWER_COMPRESSOR', - ]; + // --- CONTROL HANDLERS --- - this.log(`[${this.getName()}][${this.data.id}]`, 'Refreshing device data'); + async onCapabilityTargetTemperature(value) { + this.isWriting = true; + const endpoint = '/heatingCircuits/hc1/temperatureRoomSetpoint'; + const payload = { value: parseFloat(value) }; + try { + if (this.client && typeof this.client.put === 'function') { + await this.client.put(endpoint, payload); + return Promise.resolve(); + } else { throw new Error('Client not ready'); } + } catch (err) { + this.error('Failed to set target temperature:', err); + return Promise.reject(err); + } finally { this.isWriting = false; } + } + async onCapabilityHotWaterMode(value) { + this.isWriting = true; + const endpoint = '/dhwCircuits/dhw1/operationMode'; + const payload = { value: value }; + try { + await this.client.put(endpoint, payload); + return Promise.resolve(); + } catch (err) { + this.error('Failed to set Hot Water Mode:', err); + return Promise.reject(err); + } finally { this.isWriting = false; } + } + + async onCapabilityHotWaterBoost(value) { + if (!value) return; + this.isWriting = true; + const endpoint = '/dhwCircuits/dhw1/charge'; + const payload = { value: 'start' }; + try { + await this.client.put(endpoint, payload); + setTimeout(() => { + this.setCapabilityValue('hotwater_boost', false).catch(this.error); + }, 2000); + return Promise.resolve(); + } catch (err) { + this.error('Failed to trigger Hot Water Boost:', err); + return Promise.reject(err); + } finally { this.isWriting = false; } + } + + + // --- DATA FETCHING --- + + async getDeviceData() { for (const [key, value] of Object.entries(Capabilities)) { + if (this.isWriting) break; try { let result; - // Add the date to energy monitoring capabilites endpoints - const endpoint = energyMonitoringCapabilities.includes(key) + const endpoint = value.name.includes('meter_power') ? value.endpoint + new Date().toISOString().split('T')[0] : value.endpoint; - // Get data from heat pump const res = await this.client.get(endpoint); - if (energyMonitoringCapabilities.includes(key)) { - const currentHour = new Date().getHours(); - - // subtract 2 to account for array being zero based and to get last hours measurement - const currentHourObject = res.recording[currentHour - 2]; + if (value.name.includes('meter_power')) { + const currentHour = new Date().getHours(); + const idx = Math.max(0, currentHour - 2); + const currentHourObject = res.recording?.[idx]; + if (!currentHourObject || !currentHourObject.c) { continue; } + result = currentHourObject.y / currentHourObject.c; - result = currentHourObject.y / currentHourObject.c; } else { result = res.value; + // Ensure Number type for temperatures to support Thermostat Dial + if (typeof result === 'string' && !isNaN(result)) { + result = parseFloat(result); + } } - this.updateValue(value.name, result); - } catch (err) { - this.log(err); - } + } catch (err) { } + } + + if (!this.isWriting) { + try { + const res = await this.client.get('/dhwCircuits/dhw1/operationMode'); + if (res && res.value) { + let mode = res.value; + if (typeof mode === 'string') mode = mode.toLowerCase(); + this.updateValue('ivt_hotwater_mode', mode); + } + } catch (err) { } + } + + if (!this.isWriting) { + try { + const res = await this.client.get('/heatingCircuits/hc1/temperatureRoomSetpoint'); + if (res && res.value) { + this.updateValue('target_temperature', parseFloat(res.value)); + } + } catch (err) { } } } - updateValue(capability, value) { - if (capability === 'alarm_status') { - value = value !== 'ok'; - if (this.getCapabilityValue(capability) !== value) { - this.triggerAlarmStatusChange(value); + async updateValue(capability, value) { + if (capability.trim() === 'alarm_status') { + const isAlarm = (String(value).toLowerCase() !== 'ok'); + if (this.getCapabilityValue(capability) !== isAlarm) { + this.triggerAlarmStatusChange(isAlarm); + this.setCapabilityValue(capability, isAlarm).catch(this.error); } + return; } - this.log(`Setting capability [${capability}] value to: ${value}`); - this.setCapabilityValue(capability, value).catch(this.error); + if (this.getCapabilityValue(capability) !== value) { + await this.setCapabilityValue(capability, value).catch(this.error); + } } async triggerAlarmStatusChange(value) { @@ -87,41 +166,29 @@ class HeatPumpDevice extends Device { .map((obj) => `${obj.ccd}: ${ErrorCodes[obj.ccd].description}`) .join(', '), }; - - this.log('Alarm status has changed to error. Trigger ERROR card..'); - this.log(`code: ${tokens.code}`); - this.log(`description: ${tokens.description}`); - - await this.homey.flow.getDeviceTriggerCard('alarm_status_error') - .trigger(this, tokens); - } catch (error) { - this.log(error); - } - } else if (this.getCapabilityValue('alarm_status') === 'error') { - this.log('Alarm status has changed to OK. Trigger OK card.'); - this.homey.flow.getDeviceTriggerCard('alarm_status_ok').trigger(this) - .catch(this.error); + await this.homey.flow.getDeviceTriggerCard('alarm_status_error').trigger(this, tokens); + } catch (error) { this.error(error); } + } else if (this.getCapabilityValue('alarm_status') === true) { + this.homey.flow.getDeviceTriggerCard('alarm_status_ok').trigger(this).catch(this.error); } } - async onAdded() { - this.log('Device added'); - this.log('Name:', this.getName()); - this.log('Class:', this.getClass()); - this.log('Data:', this.getData()); - } + async onAdded() { this.log('Device added'); } async onSettings({ oldSettings, newSettings, changedKeys }) { - const { interval } = this; - for (const name of changedKeys) { - if (name !== 'password') { - this.log(`Setting '${name}' changed from '${oldSettings[name]}' to '${newSettings[name]}'`); - } - } if (oldSettings.interval !== newSettings.interval) { - this.log(`Deleting old interval of ${oldSettings.interval}s and creating new ${newSettings.interval}s`); - clearInterval(interval); - this.setUpdateInterval(newSettings.interval); + clearInterval(this.interval); + this.interval = setInterval(async () => { + if (!this.isWriting) { + await this.getDeviceData(); + } + }, newSettings.interval * 1000); + +} + // Reconnect if credentials changed + if (oldSettings.serial !== newSettings.serial || oldSettings.key !== newSettings.key || oldSettings.password !== newSettings.password) { + if (this.client) this.client.end(); + this.client = await this.getClient(newSettings); } } @@ -130,28 +197,48 @@ class HeatPumpDevice extends Device { serialNumber: settings.serial, accessKey: settings.key, password: settings.password, + retryTimeout: 10000, + maxRetries: 5 }); - await client.connect(); - this.log('Device connected successfully to backend'); + client.on('error', (err) => { + // Log basic error message but prevent app crash + this.error('XMPP Client Error:', err.message); + }); - return client; - } + client.put = function(uri, data) { + const encrypted = this.encrypt(typeof data === 'string' ? data : JSON.stringify(data)); + const separator = '\n\n'; + const message = this.buildMessage([ + `PUT ${ uri } HTTP/1.1`, + `User-Agent: ${ this.USERAGENT }`, + `Content-Type: application/json`, + `Content-Length: ${ encrypted.length }`, + `Seq-No: ${ this.seqno++ }`, + ``, + encrypted + ].join(separator)); + + return this.send(message).then(response => { + const status = Number(response.statusCode || 500); + if (status >= 300) { + const error = new Error('INVALID_RESPONSE'); + error.response = response; + throw error; + } else if (status === 204) { response.body = null; } + return response.body || { status : 'ok' }; + }); + }; - async onRenamed(name) { - this.log(`${name} renamed`); + await client.connect(); + this.log(`Device connected`); + return client; } async onDeleted() { - const { interval } = this; - this.log(`${this.data.id} deleted`); - if (this.client) { - this.client.end(); - } - - clearInterval(interval); + clearInterval(this.interval); + if (this.client) this.client.end(); } - } -module.exports = HeatPumpDevice; +module.exports = HeatPumpDevice; \ No newline at end of file diff --git a/drivers/heat-pump/driver.compose.json b/drivers/heat-pump/driver.compose.json index 299ef60..7802b40 100644 --- a/drivers/heat-pump/driver.compose.json +++ b/drivers/heat-pump/driver.compose.json @@ -1,76 +1,53 @@ { - "name": { - "en": "Heat pump" - }, - "class": "heater", + "name": { "en": "Heat pump" }, + "class": "heatpump", + "statusIndicator": "measure_temperature", "capabilities": [ + "target_temperature", + "measure_temperature", "measure_temperature.supply", "measure_temperature.return", "measure_temperature.outdoor", "measure_temperature.water", + "ivt_hotwater_mode", + "hotwater_boost", "alarm_status", "meter_power.last_hour_eheater", "meter_power.last_hour_total", "meter_power.last_hour_compressor" ], "capabilitiesOptions": { - "measure_temperature.supply": { - "title": { - "en": "Supply temperature", - "sv": "Framledningstemperatur" - } - }, - "measure_temperature.return": { - "title": { - "en": "Return temperature", - "sv": "Returtemperatur" - } - }, - "measure_temperature.outdoor": { - "title": { - "en": "Outdoor temperature", - "sv": "Utomhustemperatur" - } - }, - "measure_temperature.water": { - "title": { - "en": "Water temperature", - "sv": "Vattentemperatur" - } + "measure_temperature": { + "title": { "en": "Room Temperature", "sv": "Rumstemperatur" }, + "zones": [ + { "from": 0, "to": 10, "color": "#0000FF" }, + { "from": 10, "to": 15, "color": "#00BFFF" }, + { "from": 15, "to": 18, "color": "#00FF00" }, + { "from": 18, "to": 21, "color": "#FFFF00" }, + { "from": 21, "to": 25, "color": "#FFA500" }, + { "from": 25, "to": 35, "color": "#FF0000" } + ] }, - "meter_power.last_hour_eheater": { - "title": { - "en": "Last hour (eheater)", - "sv": "Senaste timmen (elpatron)" - } + "target_temperature": { + "title": { "en": "Target Temperature", "sv": "Måltemperatur" }, + "min": 10, "max": 30, "step": 0.5 }, - "meter_power.last_hour_total": { - "title": { - "en": "Last hour (total)", - "sv": "Senaste timmen (totalt)" - } - }, - "meter_power.last_hour_compressor": { - "title": { - "en": "Last hour (compressor)", - "sv": "Senaste timmen (kompressor)" - } - } + "measure_temperature.supply": { "title": { "en": "Supply temperature", "sv": "Framledningstemperatur" } }, + "measure_temperature.return": { "title": { "en": "Return temperature", "sv": "Returtemperatur" } }, + "measure_temperature.outdoor": { "title": { "en": "Outdoor temperature", "sv": "Utomhustemperatur" } }, + "measure_temperature.water": { "title": { "en": "Hotwater", "sv": "Varmvatten" } }, + "ivt_hotwater_mode": { "title": { "en": "Hotwater Mode", "sv": "Varmvattenläge" } }, + "hotwater_boost": { "title": { "en": "Extra Hot Water", "sv": "Extra Varmvatten" } }, + "meter_power.last_hour_eheater": { "title": { "en": "Last hour (eheater)", "sv": "Senaste timmen (elpatron)" } }, + "meter_power.last_hour_total": { "title": { "en": "Last hour (total)", "sv": "Senaste timmen (totalt)" } }, + "meter_power.last_hour_compressor": { "title": { "en": "Last hour (compressor)", "sv": "Senaste timmen (kompressor)" } } }, - "platforms": [ - "local" - ], - "connectivity": [ - "lan" - ], + "platforms": ["local"], + "connectivity": ["lan"], "images": { "small": "{{driverAssetsPath}}/images/small.png", "large": "{{driverAssetsPath}}/images/large.png", "xlarge": "{{driverAssetsPath}}/images/xlarge.png" }, - "pair": [ - { - "id": "pair" - } - ] + "pair": [{ "id": "pair" }] } \ No newline at end of file diff --git a/lib/.DS_Store b/lib/.DS_Store new file mode 100644 index 0000000..d12eaeb Binary files /dev/null and b/lib/.DS_Store differ diff --git a/lib/bosch-xmpp b/lib/bosch-xmpp index 4b2217a..eb70803 160000 --- a/lib/bosch-xmpp +++ b/lib/bosch-xmpp @@ -1 +1 @@ -Subproject commit 4b2217acf779cfe614cc29c2c204bca33b4edaeb +Subproject commit eb70803c0211f39d1887b8b12bf0420a7d35a2a2 diff --git a/lib/capabilities.js b/lib/capabilities.js index e5a6098..1947baf 100644 --- a/lib/capabilities.js +++ b/lib/capabilities.js @@ -1,6 +1,12 @@ 'use strict'; module.exports = { + // --- NEW: Map standard measure_temperature to Room Temperature --- + ROOM_TEMP: { + name: 'measure_temperature', + endpoint: '/heatingCircuits/hc1/roomtemperature', + }, + // ----------------------------------------------------------------- SUPPLY_TEMP: { name: 'measure_temperature.supply', endpoint: '/heatSources/actualSupplyTemperature', @@ -33,4 +39,4 @@ module.exports = { name: 'meter_power.last_hour_compressor', endpoint: '/recordings/heatSources/total/energyMonitoring/compressor?interval=', }, -}; +}; \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index 0017f2a..71bf43f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -295,6 +295,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.0.tgz", "integrity": "sha512-Ixh9qrOTDRctFg3yIwrLkgf33AHyEIn6lhyf5cCfwwiGtkWhNpVKlEZApi3inGQR/barWnY7qY8FbGKBO7p3JA==", "dev": true, + "peer": true, "dependencies": { "@typescript-eslint/scope-manager": "5.42.0", "@typescript-eslint/types": "5.42.0", @@ -500,6 +501,7 @@ "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", "dev": true, + "peer": true, "bin": { "acorn": "bin/acorn" }, @@ -1050,6 +1052,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, + "peer": true, "dependencies": { "@babel/code-frame": "7.12.11", "@eslint/eslintrc": "^0.4.3", @@ -1223,6 +1226,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", "dev": true, + "peer": true, "dependencies": { "array-includes": "^3.1.4", "array.prototype.flat": "^1.2.5", @@ -3275,6 +3279,7 @@ "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", "dev": true, + "peer": true, "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -3628,6 +3633,7 @@ "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.42.0.tgz", "integrity": "sha512-Ixh9qrOTDRctFg3yIwrLkgf33AHyEIn6lhyf5cCfwwiGtkWhNpVKlEZApi3inGQR/barWnY7qY8FbGKBO7p3JA==", "dev": true, + "peer": true, "requires": { "@typescript-eslint/scope-manager": "5.42.0", "@typescript-eslint/types": "5.42.0", @@ -3751,7 +3757,8 @@ "version": "7.4.1", "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "dev": true, + "peer": true }, "acorn-jsx": { "version": "5.3.2", @@ -4177,6 +4184,7 @@ "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", "dev": true, + "peer": true, "requires": { "@babel/code-frame": "7.12.11", "@eslint/eslintrc": "^0.4.3", @@ -4310,6 +4318,7 @@ "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", "dev": true, + "peer": true, "requires": { "array-includes": "^3.1.4", "array.prototype.flat": "^1.2.5", @@ -5834,7 +5843,8 @@ "version": "4.8.4", "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.4.tgz", "integrity": "sha512-QCh+85mCy+h0IGff8r5XWzOVSbBO+KfeYrMQh7NJ58QujwcE22u+NUSmUxqF+un70P9GXKxa2HCNiTTMJknyjQ==", - "dev": true + "dev": true, + "peer": true }, "ultron": { "version": "1.0.2",