UNPKG

scrypted-tempest

Version:
51 lines (40 loc) 1.71 kB
import { ScryptedDeviceBase, Sensors, Setting, Settings, SettingValue } from "@scrypted/sdk"; import { StorageSettings } from "@scrypted/sdk/storage-settings"; import ScryptedTempest from "./main"; import { convertWeatherDataToSensors, ObservationsData } from "./utils"; export class ScryptedTempestObservationsDevice extends ScryptedDeviceBase implements Sensors, Settings { storageSettings = new StorageSettings(this, {}); constructor(public plugin: ScryptedTempest, nativeId: string,) { super(nativeId); } async getSettings(): Promise<Setting[]> { const settings = await this.storageSettings.getSettings(); for (const sensor of Object.entries(this.sensors)) { const [entityId, { name, unit, value }] = sensor; let textValue = value; if (unit) { textValue += ` (${unit})`; } settings.push({ key: entityId, title: `${name} (${entityId})`, type: 'string', readonly: true, value: textValue }); } return settings; } putSetting(key: string, value: SettingValue): Promise<void> { return this.storageSettings.putSetting(key, value); } async updateState(data: ObservationsData) { const newSensorsData = convertWeatherDataToSensors(data); for (const [sensorId, updatedSensorData] of Object.entries(newSensorsData)) { if (this.sensors?.[sensorId]?.value !== newSensorsData[sensorId]?.value) { await this.onDeviceEvent(sensorId, updatedSensorData); } } this.sensors = newSensorsData; } }