Skip to content

Commit

Permalink
Fix and improvements
Browse files Browse the repository at this point in the history
  • Loading branch information
OlivierZal committed May 14, 2024
1 parent 780ba90 commit 02c0eeb
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 51 deletions.
90 changes: 44 additions & 46 deletions drivers/nuos/device.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,10 +10,11 @@ import type {
} from '../../types'
import { DateTime, Duration } from 'luxon'
import {
type GetData,
type HistogramData,
Mode,
OperationMode,
type PlantData,
type PlantSettings,
type PostData,
type PostSettings,
} from '@olivierzal/ariston-api'
Expand Down Expand Up @@ -189,7 +190,7 @@ class NuosDevice extends Device {
await this.setWarning(null)
await this.#handleCapabilities()
this.#registerCapabilityListeners()
await this.#sync()
await this.#syncFromDevice()
await this.#plantMetering()
const now = DateTime.now()
this.homey.setTimeout(
Expand Down Expand Up @@ -291,7 +292,7 @@ class NuosDevice extends Device {
#applySyncFromDevice(): void {
this.#syncTimeout = this.homey.setTimeout(
async (): Promise<void> => {
await this.#sync()
await this.#syncFromDevice()
},
Duration.fromObject({ minutes: 1 }).as('milliseconds'),
)
Expand All @@ -301,7 +302,7 @@ class NuosDevice extends Device {
this.#syncTimeout = this.homey.setTimeout(
async (): Promise<void> => {
await this.#plantSettings(this.#buildPostSettings())
await this.#sync(this.#buildPostData())
await this.#syncToDevice(this.#buildPostData())
},
Duration.fromObject({ seconds: 1 }).as('milliseconds'),
)
Expand Down Expand Up @@ -402,17 +403,6 @@ class NuosDevice extends Device {
})
}

async #plantData(postData?: PostData): Promise<GetData['data'] | null> {
if (!postData || Object.keys(postData.viewModel).length) {
try {
return (await this.#aristonAPI.plantData(this.#id, postData)).data.data
} catch (_error) {
return null
}
}
return null
}

async #plantMetering(): Promise<void> {
try {
const { histogramData } = (await this.#aristonAPI.plantMetering(this.#id))
Expand Down Expand Up @@ -480,9 +470,7 @@ class NuosDevice extends Device {
}
}

async #setCapabilities(
plantData: GetData['data']['plantData'],
): Promise<void> {
async #setCapabilities(plantData: PlantData): Promise<void> {
await this.setCapabilityValue('measure_temperature', plantData.waterTemp)
await this.setCapabilityValue(
'measure_temperature.required',
Expand Down Expand Up @@ -510,14 +498,6 @@ class NuosDevice extends Device {
)
}

async #setCapabilitiesAndSettings(postData?: PostData): Promise<void> {
const data = await this.#plantData(postData)
if (data) {
await this.#setSettings(data.plantSettings)
await this.#setCapabilities(data.plantData)
}
}

async #setEnergyValues(
energyHp: number,
energyResistor: number,
Expand Down Expand Up @@ -548,23 +528,19 @@ class NuosDevice extends Device {
}
}

async #setSettings(
plantSettings: GetData['data']['plantSettings'],
): Promise<void> {
if (plantSettings) {
await this.setCapabilityValue(
'onoff.legionella',
plantSettings.antilegionellaOnOff,
)
await this.setCapabilityValue(
'onoff.preheating',
plantSettings.preHeatingOnOff,
)
await this.setSettings({
max: plantSettings.maxSetpointTemp.value,
min: plantSettings.minSetpointTemp.value,
})
}
async #setSettings(plantSettings: PlantSettings): Promise<void> {
await this.setCapabilityValue(
'onoff.legionella',
plantSettings.antilegionellaOnOff,
)
await this.setCapabilityValue(
'onoff.preheating',
plantSettings.preHeatingOnOff,
)
await this.setSettings({
max: plantSettings.maxSetpointTemp.value,
min: plantSettings.minSetpointTemp.value,
})
}

async #setTargetTemperatureMinMax(
Expand All @@ -581,9 +557,31 @@ class NuosDevice extends Device {
}
}

async #sync(postData?: PostData): Promise<void> {
await this.#setCapabilitiesAndSettings(postData)
this.#applySyncFromDevice()
async #syncFromDevice(): Promise<void> {
try {
const { plantData, plantSettings } = (
await this.#aristonAPI.getDataWithSettings(this.#id)
).data.data
await this.#setSettings(plantSettings)
await this.#setCapabilities(plantData)
} catch (_error) {
} finally {
this.#applySyncFromDevice()
}
}

async #syncToDevice(postData: PostData): Promise<void> {
try {
if (Object.keys(postData.viewModel).length) {
await this.#setCapabilities(
(await this.#aristonAPI.setData(this.#id, postData)).data.data
.plantData,
)
}
} catch (_error) {
} finally {
this.#applySyncFromDevice()
}
}
}

Expand Down
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -33,7 +33,7 @@
"typescript-eslint": "^8.0.0-alpha.10"
},
"dependencies": {
"@olivierzal/ariston-api": "^1.0.0",
"@olivierzal/ariston-api": "^1.1.0",
"luxon": "^3.4.4",
"source-map-support": "^0.5.21"
}
Expand Down

0 comments on commit 02c0eeb

Please sign in to comment.