@homebridge-plugins/homebridge-tado 9.3.1 → 9.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +3 -0
- package/package.json +1 -1
- package/src/helper/handler.js +41 -28
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
# v9.3.2 - 2026-06-21
|
|
4
|
+
- Fix: Add a defensive `CurrentTemperature` fallback for `HOT_WATER` HeaterCooler accessories when tado does not provide `sensorDataPoints.insideTemperature` (#169)
|
|
5
|
+
|
|
3
6
|
# v9.3.1 - 2026-06-19
|
|
4
7
|
- Fix: Preserve previous update buffer behaviour for default `preferSiriTemperature` handling while keeping the `HOT_WATER` range safeguards (#169)
|
|
5
8
|
- Fix: Improve HeaterCooler threshold value correction during startup
|
package/package.json
CHANGED
package/src/helper/handler.js
CHANGED
|
@@ -129,6 +129,14 @@ export default (api, accessories, config, tado, telegram) => {
|
|
|
129
129
|
return { min, max };
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
+
function _getTemperatureValue(temperature) {
|
|
133
|
+
if (!temperature) return undefined;
|
|
134
|
+
|
|
135
|
+
return config.temperatureUnit === 'FAHRENHEIT'
|
|
136
|
+
? temperature.fahrenheit
|
|
137
|
+
: temperature.celsius;
|
|
138
|
+
}
|
|
139
|
+
|
|
132
140
|
function _normalizeTemperatureForAccessory(accessory, temp) {
|
|
133
141
|
if (temp === null || temp === undefined) return temp;
|
|
134
142
|
|
|
@@ -1091,16 +1099,10 @@ export default (api, accessories, config, tado, telegram) => {
|
|
|
1091
1099
|
|
|
1092
1100
|
//HEATING
|
|
1093
1101
|
if (zoneState.sensorDataPoints.insideTemperature) {
|
|
1094
|
-
currentTemp =
|
|
1095
|
-
config.temperatureUnit === 'FAHRENHEIT'
|
|
1096
|
-
? zoneState.sensorDataPoints.insideTemperature.fahrenheit
|
|
1097
|
-
: zoneState.sensorDataPoints.insideTemperature.celsius;
|
|
1102
|
+
currentTemp = _getTemperatureValue(zoneState.sensorDataPoints.insideTemperature);
|
|
1098
1103
|
|
|
1099
1104
|
if (zoneState.setting.power === 'ON') {
|
|
1100
|
-
targetTemp =
|
|
1101
|
-
config.temperatureUnit === 'FAHRENHEIT'
|
|
1102
|
-
? zoneState.setting.temperature.fahrenheit
|
|
1103
|
-
: zoneState.setting.temperature.celsius;
|
|
1105
|
+
targetTemp = _getTemperatureValue(zoneState.setting.temperature);
|
|
1104
1106
|
|
|
1105
1107
|
tempEqual = Math.round(currentTemp) === Math.round(targetTemp);
|
|
1106
1108
|
|
|
@@ -1230,28 +1232,22 @@ export default (api, accessories, config, tado, telegram) => {
|
|
|
1230
1232
|
// Non-HEATING zones (AIR_CONDITIONING, HOT_WATER, etc.)
|
|
1231
1233
|
battery = zone.battery === 'NORMAL' ? 100 : 10;
|
|
1232
1234
|
|
|
1233
|
-
if (zoneState.sensorDataPoints.humidity) {
|
|
1235
|
+
if (zoneState.sensorDataPoints && zoneState.sensorDataPoints.humidity) {
|
|
1234
1236
|
humidity = zoneState.sensorDataPoints.humidity.percentage;
|
|
1235
1237
|
}
|
|
1236
1238
|
|
|
1237
|
-
// Get current temperature from sensor data
|
|
1238
|
-
|
|
1239
|
-
|
|
1240
|
-
|
|
1241
|
-
|
|
1242
|
-
: zoneState.sensorDataPoints.insideTemperature.celsius;
|
|
1239
|
+
// Get current temperature from sensor data if tado provides it.
|
|
1240
|
+
// HOT_WATER zones often do not expose sensorDataPoints.insideTemperature;
|
|
1241
|
+
// the HeaterCooler service applies a fallback below when needed.
|
|
1242
|
+
if (zoneState.sensorDataPoints && zoneState.sensorDataPoints.insideTemperature) {
|
|
1243
|
+
currentTemp = _getTemperatureValue(zoneState.sensorDataPoints.insideTemperature);
|
|
1243
1244
|
}
|
|
1244
1245
|
|
|
1245
1246
|
if (zoneState.setting.power === 'ON') {
|
|
1246
1247
|
active = 1;
|
|
1247
1248
|
|
|
1248
1249
|
// Get target temperature from setting
|
|
1249
|
-
targetTemp =
|
|
1250
|
-
zoneState.setting.temperature !== null && zoneState.setting.temperature
|
|
1251
|
-
? config.temperatureUnit === 'FAHRENHEIT'
|
|
1252
|
-
? zoneState.setting.temperature.fahrenheit
|
|
1253
|
-
: zoneState.setting.temperature.celsius
|
|
1254
|
-
: undefined;
|
|
1250
|
+
targetTemp = _getTemperatureValue(zoneState.setting.temperature);
|
|
1255
1251
|
|
|
1256
1252
|
// Enhanced AC state handling
|
|
1257
1253
|
if (zone.type === 'AIR_CONDITIONING') {
|
|
@@ -1309,11 +1305,30 @@ export default (api, accessories, config, tado, telegram) => {
|
|
|
1309
1305
|
|
|
1310
1306
|
service.getCharacteristic(characteristicTargetState).updateValue(targetState);
|
|
1311
1307
|
|
|
1312
|
-
// Set current temperature from sensor data
|
|
1313
|
-
|
|
1314
|
-
|
|
1308
|
+
// Set current temperature from sensor data when available.
|
|
1309
|
+
// HOT_WATER zones can have no sensorDataPoints.insideTemperature in the tado API.
|
|
1310
|
+
// In that case, keep the last known value; if none exists, fall back to the
|
|
1311
|
+
// configured hot-water target temperature and finally the configured minimum.
|
|
1312
|
+
let homeKitCurrentTemp = currentTemp;
|
|
1313
|
+
const isValidTemperature = (value) => value !== undefined && value !== null && !isNaN(value);
|
|
1314
|
+
|
|
1315
|
+
if (zone.type === 'HOT_WATER' && !isValidTemperature(homeKitCurrentTemp)) {
|
|
1316
|
+
if (isValidTemperature(acc.context.currentTemp)) {
|
|
1317
|
+
homeKitCurrentTemp = acc.context.currentTemp;
|
|
1318
|
+
} else if (isValidTemperature(targetTemp)) {
|
|
1319
|
+
homeKitCurrentTemp = targetTemp;
|
|
1320
|
+
} else if (isValidTemperature(zone.minValue)) {
|
|
1321
|
+
homeKitCurrentTemp = zone.minValue;
|
|
1322
|
+
} else if (acc.context.config && isValidTemperature(acc.context.config.minValue)) {
|
|
1323
|
+
homeKitCurrentTemp = acc.context.config.minValue;
|
|
1324
|
+
} else {
|
|
1325
|
+
homeKitCurrentTemp = 30;
|
|
1326
|
+
}
|
|
1327
|
+
}
|
|
1315
1328
|
|
|
1316
|
-
|
|
1329
|
+
if (!isNaN(homeKitCurrentTemp)) {
|
|
1330
|
+
acc.context.currentTemp = homeKitCurrentTemp; //store current temp in config
|
|
1331
|
+
service.getCharacteristic(characteristicCurrentTemp).updateValue(homeKitCurrentTemp);
|
|
1317
1332
|
}
|
|
1318
1333
|
|
|
1319
1334
|
// Set target temperature for both heating and cooling
|
|
@@ -1569,12 +1584,10 @@ export default (api, accessories, config, tado, telegram) => {
|
|
|
1569
1584
|
const weather = await tado.getWeather(config.homeId);
|
|
1570
1585
|
|
|
1571
1586
|
if (weatherTemperatureAccessory.length && weather.outsideTemperature) {
|
|
1572
|
-
let tempUnit = config.temperatureUnit;
|
|
1573
1587
|
let service = weatherTemperatureAccessory[0].getService(api.hap.Service.TemperatureSensor);
|
|
1574
1588
|
let characteristic = api.hap.Characteristic.CurrentTemperature;
|
|
1575
1589
|
|
|
1576
|
-
let temp =
|
|
1577
|
-
tempUnit === 'FAHRENHEIT' ? weather.outsideTemperature.fahrenheit : weather.outsideTemperature.celsius;
|
|
1590
|
+
let temp = _getTemperatureValue(weather.outsideTemperature);
|
|
1578
1591
|
|
|
1579
1592
|
service.getCharacteristic(characteristic).updateValue(temp);
|
|
1580
1593
|
}
|