Skip to content

Commit 703e674

Browse files
committed
further data validation for REST based thermostats
1 parent 2aa984e commit 703e674

File tree

2 files changed

+79
-57
lines changed

2 files changed

+79
-57
lines changed

package-lock.json

Lines changed: 48 additions & 48 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

src/system.js

Lines changed: 31 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1747,23 +1747,45 @@ export default class NestAccfactory {
17471747
);
17481748

17491749
// Work out current mode. ie: off, cool, heat, range and get temperature low (heat) and high (cool)
1750-
RESTTypeData.hvac_mode = this.#rawData?.['shared.' + value.value.serial_number].value.target_temperature_type;
1751-
RESTTypeData.target_temperature_low = this.#rawData?.['shared.' + value.value.serial_number].value.target_temperature_low;
1752-
RESTTypeData.target_temperature_high = this.#rawData?.['shared.' + value.value.serial_number].value.target_temperature_high;
1750+
RESTTypeData.hvac_mode =
1751+
this.#rawData?.['shared.' + value.value.serial_number]?.value?.target_temperature_type !== undefined
1752+
? this.#rawData?.['shared.' + value.value.serial_number].value.target_temperature_type
1753+
: 'off';
1754+
RESTTypeData.target_temperature =
1755+
isNaN(this.#rawData?.['shared.' + value.value.serial_number]?.value?.target_temperature) === false
1756+
? Number(this.#rawData['shared.' + value.value.serial_number].value.target_temperature)
1757+
: 0.0;
1758+
RESTTypeData.target_temperature_low =
1759+
isNaN(this.#rawData?.['shared.' + value.value.serial_number]?.value?.target_temperature_low) === false
1760+
? Number(this.#rawData['shared.' + value.value.serial_number].value.target_temperature_low)
1761+
: 0.0;
1762+
RESTTypeData.target_temperature_high =
1763+
isNaN(this.#rawData?.['shared.' + value.value.serial_number]?.value?.target_temperature_high) === false
1764+
? Number(this.#rawData['shared.' + value.value.serial_number].value.target_temperature_high)
1765+
: 0.0;
17531766
if (this.#rawData?.['shared.' + value.value.serial_number]?.value?.target_temperature_type.toUpperCase() === 'COOL') {
17541767
// Target temperature is the cooling point
1755-
RESTTypeData.target_temperature = this.#rawData['shared.' + value.value.serial_number].value.target_temperature_high;
1768+
RESTTypeData.target_temperature =
1769+
isNaN(this.#rawData?.['shared.' + value.value.serial_number]?.value?.target_temperature_high) === false
1770+
? Number(this.#rawData['shared.' + value.value.serial_number].value.target_temperature_high)
1771+
: 0.0;
17561772
}
17571773
if (this.#rawData?.['shared.' + value.value.serial_number]?.value?.target_temperature_type.toUpperCase() === 'HEAT') {
17581774
// Target temperature is the heating point
1759-
RESTTypeData.target_temperature = this.#rawData['shared.' + value.value.serial_number].value.target_temperature_low;
1775+
RESTTypeData.target_temperature =
1776+
isNaN(this.#rawData?.['shared.' + value.value.serial_number]?.value?.target_temperature_low) === false
1777+
? Number(this.#rawData['shared.' + value.value.serial_number].value.target_temperature_low)
1778+
: 0.0;
17601779
}
17611780
if (this.#rawData?.['shared.' + value.value.serial_number]?.value?.target_temperature_type.toUpperCase() === 'RANGE') {
17621781
// Target temperature is in between the heating and cooling point
17631782
RESTTypeData.target_temperature =
1764-
(this.#rawData['shared.' + value.value.serial_number].value.target_temperature_low +
1765-
this.#rawData['shared.' + value.value.serial_number].value.target_temperature_high) *
1766-
0.5;
1783+
isNaN(this.#rawData?.['shared.' + value.value.serial_number]?.value?.target_temperature_low) === false &&
1784+
isNaN(this.#rawData?.['shared.' + value.value.serial_number]?.value?.target_temperature_high) === false
1785+
? (Number(this.#rawData['shared.' + value.value.serial_number].value.target_temperature_low) +
1786+
Number(this.#rawData['shared.' + value.value.serial_number].value.target_temperature_high)) *
1787+
0.5
1788+
: 0.0;
17671789
}
17681790

17691791
// Work out if eco mode is active and adjust temperature low/high and target
@@ -2794,7 +2816,7 @@ export default class NestAccfactory {
27942816
(key === 'target_temperature_high' && isNaN(value) === false)
27952817
) {
27962818
RESTStructureUUID = 'shared.' + nest_google_uuid.split('.')[1];
2797-
subscribeJSONData.objects.push({ object_key: RESTStructureUUID, op: 'MERGE', value: {'target_change_pending': true } });
2819+
subscribeJSONData.objects.push({ object_key: RESTStructureUUID, op: 'MERGE', value: { target_change_pending: true } });
27982820
}
27992821

28002822
if (key === 'fan_state' && typeof value === 'boolean') {

0 commit comments

Comments
 (0)