From 28512784d41e468efacf79dfc5d65a77ccd92612 Mon Sep 17 00:00:00 2001 From: Chris ter Beke <1134120+ChrisTerBeke@users.noreply.github.com> Date: Thu, 2 May 2024 10:41:43 +0200 Subject: [PATCH] Fix: request errors (#4) * Fix edge case when setting override IP back to empty * Wrap all fetch calls in try/catch --- drivers/uponor/device.ts | 9 -------- lib/UponorHTTPClient.ts | 46 +++++++++++++++++++--------------------- 2 files changed, 22 insertions(+), 33 deletions(-) diff --git a/drivers/uponor/device.ts b/drivers/uponor/device.ts index 37764c8..83c1a14 100644 --- a/drivers/uponor/device.ts +++ b/drivers/uponor/device.ts @@ -11,7 +11,6 @@ class UponorThermostatDevice extends Device { async onInit(): Promise { this.registerCapabilityListener('target_temperature', this._setTargetTemperature.bind(this)) - // this.registerCapabilityListener('thermostat_mode', this._setThermostatMode.bind(this)) this._init() } @@ -99,7 +98,6 @@ class UponorThermostatDevice extends Device { this.setAvailable() this.setCapabilityValue('measure_temperature', data.temperature) this.setCapabilityValue('target_temperature', data.setPoint) - // this.setCapabilityValue('thermostat_mode', data.mode) } private async _setTargetTemperature(value: number): Promise { @@ -108,13 +106,6 @@ class UponorThermostatDevice extends Device { await this._client.setTargetTemperature(controllerID, thermostatID, value) await this._syncAttributes() } - - private async _setThermostatMode(value: Mode): Promise { - if (!this._client) return - const { controllerID, thermostatID } = this.getData() - await this._client.setMode(controllerID, thermostatID, value) - await this._syncAttributes() - } } module.exports = UponorThermostatDevice diff --git a/lib/UponorHTTPClient.ts b/lib/UponorHTTPClient.ts index a2de2c1..dd37586 100644 --- a/lib/UponorHTTPClient.ts +++ b/lib/UponorHTTPClient.ts @@ -72,22 +72,18 @@ export class UponorHTTPClient { } private async _syncAttributes(): Promise> { - const request = await fetch(this._url, { - method: 'POST', - headers: { 'x-jnap-action': 'http://phyn.com/jnap/uponorsky/GetAttributes' }, - body: '{}' - }) - const data: AttributesResponse = await request.json() as AttributesResponse - if (data.result != 'OK') { - return Promise.reject(data.result) - } - - const result = new Map() - for (const v of data.output.vars) { - result.set(v.waspVarName, v.waspVarValue) + try { + const request = await fetch(this._url, { + method: 'POST', + headers: { 'x-jnap-action': 'http://phyn.com/jnap/uponorsky/GetAttributes' }, + body: '{}' + }) + const data: AttributesResponse = await request.json() as AttributesResponse + if (data.result != 'OK') return Promise.reject(data.result) + return new Map(data.output.vars.map(v => [v.waspVarName, v.waspVarValue])) + } catch (error) { + return Promise.reject(error) } - - return result } private _syncThermostats(): Map { @@ -168,15 +164,17 @@ export class UponorHTTPClient { } private async _setAttributes(attributes: Map): Promise { - const vars = Array.from(attributes, ([key, value]) => [{ "waspVarName": key, "waspVarValue": value }]).flat() - const request = await fetch(this._url, { - method: 'POST', - headers: { 'x-jnap-action': 'http://phyn.com/jnap/uponorsky/SetAttributes' }, - body: JSON.stringify({ "vars": vars }), - }) - const data: AttributesResponse = await request.json() as AttributesResponse - if (data.result != 'OK') { - return Promise.reject(data.result) + try { + const vars = Array.from(attributes, ([key, value]) => [{ "waspVarName": key, "waspVarValue": value }]).flat() + const request = await fetch(this._url, { + method: 'POST', + headers: { 'x-jnap-action': 'http://phyn.com/jnap/uponorsky/SetAttributes' }, + body: JSON.stringify({ "vars": vars }), + }) + const data: AttributesResponse = await request.json() as AttributesResponse + if (data.result != 'OK') return Promise.reject(data.result) + } catch (error) { + return Promise.reject(error) } }