diff --git a/futurehome/src/fimp/inclusion_report.ts b/futurehome/src/fimp/inclusion_report.ts index 684bdfa..d32d6e6 100644 --- a/futurehome/src/fimp/inclusion_report.ts +++ b/futurehome/src/fimp/inclusion_report.ts @@ -1,3 +1,4 @@ +import { log } from "../logger"; import { sendFimpMsg } from "./fimp"; export type InclusionReport = { @@ -20,14 +21,18 @@ export type InclusionReportService = { props?: { [key: string]: any } | null }; -export async function getInclusionReport(parameters: { adapterAddress: string; adapterService: string; deviceId: string }): Promise { - const inclusionReport = await sendFimpMsg({ - address: parameters.adapterAddress, - service: parameters.adapterService, - cmd: 'cmd.thing.get_inclusion_report', - val: parameters.deviceId, - val_t: 'string', - }); +export async function getInclusionReport(parameters: { adapterAddress: string; adapterService: string; deviceId: string }): Promise { + try { + const inclusionReport = await sendFimpMsg({ + address: parameters.adapterAddress, + service: parameters.adapterService, + cmd: 'cmd.thing.get_inclusion_report', + val: parameters.deviceId, + val_t: 'string', + }); - return inclusionReport.val; + return inclusionReport.val; + } catch (e) { + log.error(`Failed getting inclusion report for adapterAddress: ${parameters.adapterAddress}, adapterService: ${parameters.adapterService}, deviceId: ${parameters.deviceId}`) + } } diff --git a/futurehome/src/fimp/vinculum_pd7_device.ts b/futurehome/src/fimp/vinculum_pd7_device.ts index 98e72ef..2e7cfa0 100644 --- a/futurehome/src/fimp/vinculum_pd7_device.ts +++ b/futurehome/src/fimp/vinculum_pd7_device.ts @@ -1,14 +1,32 @@ export type VinculumPd7Device = { client?: { // User-defined device name - name?: string | null, - } | null, - id: number, - services?: any, + name?: string | null; + } | null; + id: number; + // "Model", e.g. "zb - _TZ3040_bb6xaihh - TS0202" + model?: string | null; + // "Model alias", e.g. "TS0202" + modelAlias?: string | null; + functionality?: 'appliance' | 'climate' | 'energy' | 'ev_charger' | 'lighting' | 'media' | 'other' | 'power' | 'safety' | 'security' | 'shading' | string | null, + services?: Record | null; type?: { // User-defined device type (e.g. "sensor", "chargepoint", or "light") - type?: string | null, + type?: string | null; // User-defined device subtype (e.g. "presence" or "car_charger") - subtype?: string | null, - } | null, + subtype?: string | null; + } | null; +}; + +export type VinculumPd7Service = { + // Address of the service, e.g. "/rt:dev/rn:zigbee/ad:1/sv:color_ctrl/ad:3_1" + addr: string; + // Whether the service is enabled or not. + enabled?: boolean | null; + // Interfaces exposed by the service, e.g. ['cmd.meter.get_report','evt.meter.report']. + intf?: string[] | null; + // Properties of the service, e.g. ['sup_units'] or ['sup_modes','sup_setpoints','sup_temperatures']. + props?: { + [key: string]: any; + } | null; }; diff --git a/futurehome/src/ha/publish_device.ts b/futurehome/src/ha/publish_device.ts index e6ff46a..aac3ba0 100644 --- a/futurehome/src/ha/publish_device.ts +++ b/futurehome/src/ha/publish_device.ts @@ -1,5 +1,5 @@ import { InclusionReport, InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { log } from "../logger"; import { battery__components } from "../services/battery"; import { out_bin_switch__components } from "../services/out_bin_switch"; @@ -148,7 +148,7 @@ export type ServiceComponentsCreationResult = { export type CommandHandlers = { [topic: string]: (payload: string) => Promise } const serviceHandlers: { - [name: string]: (topicPrefix: string, vinculumDeviceData: VinculumPd7Device, svc: InclusionReportService) => ServiceComponentsCreationResult | undefined + [name: string]: (topicPrefix: string, device: VinculumPd7Device, svc: VinculumPd7Service) => ServiceComponentsCreationResult | undefined } = { battery: battery__components, out_bin_switch: out_bin_switch__components, @@ -195,30 +195,28 @@ const serviceHandlers: { sensor_weight: sensor_weight__components, }; -export function haPublishDevice(parameters: { hubId: string, vinculumDeviceData: VinculumPd7Device, deviceInclusionReport: InclusionReport }): { commandHandlers: CommandHandlers } { - if (!parameters.deviceInclusionReport.services) { - return { commandHandlers: {} }; - } - +export function haPublishDevice(parameters: { hubId: string, vinculumDeviceData: VinculumPd7Device, deviceInclusionReport: InclusionReport | undefined }): { commandHandlers: CommandHandlers } { const components: { [key: string]: HaComponent } = {}; const handlers: CommandHandlers = {}; // e.g. "homeassistant/device/futurehome_123456_1" - const topicPrefix = `homeassistant/device/futurehome_${parameters.hubId}_${parameters.deviceInclusionReport.address}`; + const topicPrefix = `homeassistant/device/futurehome_${parameters.hubId}_${parameters.vinculumDeviceData.id}`; - for (const svc of parameters.deviceInclusionReport.services) { - if (!svc.name) { continue; } + for (const [svcName, svc] of Object.entries(parameters.vinculumDeviceData.services ?? {})) { + if (!svcName) { continue; } + if (!svc.addr) { continue; } + if (!svc.enabled) { continue; } - const handler = serviceHandlers[svc.name]; + const handler = serviceHandlers[svcName]; if (!handler) { - log.error(`No handler for service: ${svc.name}`); + log.error(`No handler for service: ${svcName}`); continue; } const result = handler(topicPrefix, parameters.vinculumDeviceData, svc); if (!result) { log.error(`Invalid service data prevented component creation: ${parameters.vinculumDeviceData} ${svc}`); - continue; + continue; } Object.assign(components, result.components); @@ -230,16 +228,13 @@ export function haPublishDevice(parameters: { hubId: string, vinculumDeviceData: const availabilityTopic = `${topicPrefix}/availability` const config: HaDeviceConfig = { dev: { - ids: parameters.deviceInclusionReport.address, - name: - // User-defined device name - parameters.vinculumDeviceData?.client?.name ?? - parameters.deviceInclusionReport.product_name, - mf: parameters.deviceInclusionReport.manufacturer_id, - mdl: parameters.deviceInclusionReport.product_id, - sw: parameters.deviceInclusionReport.sw_ver, - sn: parameters.deviceInclusionReport.product_hash, - hw: parameters.deviceInclusionReport.hw_ver, + ids: parameters.vinculumDeviceData.id.toString(), + name: parameters.vinculumDeviceData?.client?.name ?? parameters.vinculumDeviceData?.modelAlias ?? parameters.deviceInclusionReport?.product_name, + mf: parameters.deviceInclusionReport?.manufacturer_id, + mdl: parameters.vinculumDeviceData?.modelAlias ?? parameters.deviceInclusionReport?.product_id, + sw: parameters.deviceInclusionReport?.sw_ver, + sn: parameters.deviceInclusionReport?.product_hash, + hw: parameters.deviceInclusionReport?.hw_ver, }, o: { name: 'futurehome', diff --git a/futurehome/src/index.ts b/futurehome/src/index.ts index 6fb6cb6..f4ca18d 100644 --- a/futurehome/src/index.ts +++ b/futurehome/src/index.ts @@ -84,25 +84,31 @@ import { haUpdateAvailability } from "./ha/update_availability"; const commandHandlers: CommandHandlers = {}; for (const device of devices.val.param.device) { - const vinculumDeviceData: VinculumPd7Device = device - const deviceId = vinculumDeviceData.id.toString() - const services: { [key: string]: any } = vinculumDeviceData?.services - const firstServiceAddr = services ? Object.values(services)[0]?.addr : undefined;; + try { + const vinculumDeviceData: VinculumPd7Device = device + const deviceId = vinculumDeviceData.id.toString() + const firstServiceAddr = vinculumDeviceData.services ? Object.values(vinculumDeviceData.services)[0]?.addr : undefined;; - if (!firstServiceAddr) { continue; } + if (!firstServiceAddr) { continue; } - const adapterAddress = adapterAddressFromServiceAddress(firstServiceAddr) - const adapterService = adapterServiceFromServiceAddress(firstServiceAddr) + // This is problematic when the adapter doesn't respond, so we are not getting the inclusion report for now. I'm leaving it here since we might want it in the future. + // // Get additional metadata like manufacutrer or sw/hw version directly from the adapter + // const adapterAddress = adapterAddressFromServiceAddress(firstServiceAddr) + // const adapterService = adapterServiceFromServiceAddress(firstServiceAddr) + // const deviceInclusionReport = await getInclusionReport({ adapterAddress, adapterService, deviceId }); + const deviceInclusionReport = undefined; - // Get additional metadata like manufacutrer or sw/hw version directly from the adapter - const deviceInclusionReport = await getInclusionReport({ adapterAddress, adapterService, deviceId }); + const result = haPublishDevice({ hubId, vinculumDeviceData, deviceInclusionReport }); - if (!retainedMessages.some(msg => msg.topic === `homeassistant/device/futurehome_${hubId}_${deviceId}/availability`)) { - // Set initial availability - haUpdateAvailability({ hubId, deviceAvailability: { address: deviceId, status: 'UP' } }); + Object.assign(commandHandlers, result.commandHandlers); + + if (!retainedMessages.some(msg => msg.topic === `homeassistant/device/futurehome_${hubId}_${deviceId}/availability`)) { + // Set initial availability + haUpdateAvailability({ hubId, deviceAvailability: { address: deviceId, status: 'UP' } }); + } + } catch (e) { + log.error('Failed publishing device', device, e); } - const result = haPublishDevice({ hubId, vinculumDeviceData, deviceInclusionReport }); - Object.assign(commandHandlers, result.commandHandlers); } setHaCommandHandlers(commandHandlers); diff --git a/futurehome/src/services/battery.ts b/futurehome/src/services/battery.ts index 4b3a072..0f5fccc 100644 --- a/futurehome/src/services/battery.ts +++ b/futurehome/src/services/battery.ts @@ -1,37 +1,33 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; -import { ServiceComponentsCreationResult } from "../ha/publish_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; +import { HaComponent, ServiceComponentsCreationResult } from "../ha/publish_device"; export function battery__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } + const components: Record = {}; - if (svc.props?.sup_events?.includes('low_battery')) { - return { - components: { - [svc.address]: { - unique_id: svc.address, - p: 'binary_sensor', - device_class: 'battery', - value_template: `{{ (value_json['${svc.address}'].alarm.status == 'activ') | iif('ON', 'OFF') }}`, - }, - }, + if (svc.intf?.includes('evt.alarm.report')) { + components[`${svc.addr}_alarm`] = { + unique_id: `${svc.addr}_alarm`, + p: 'binary_sensor', + device_class: 'battery', + value_template: `{{ (value_json['${svc.addr}'].alarm.status == 'activ') | iif('ON', 'OFF') }}`, }; } - else { - return { - components: { - [svc.address]: { - unique_id: svc.address, - p: 'sensor', - device_class: 'battery', - unit_of_measurement: svc.props?.sup_units?.[0] ?? '%', - value_template: `{{ value_json['${svc.address}'].lvl }}`, - }, - }, + + if (svc.intf?.includes('evt.lvl.report')) { + components[`${svc.addr}_lvl`] = { + unique_id: `${svc.addr}_lvl`, + p: 'sensor', + device_class: 'battery', + unit_of_measurement: svc.props?.sup_units?.[0] ?? '%', + value_template: `{{ value_json['${svc.addr}'].lvl }}`, }; + } + + return { + components: components, }; } diff --git a/futurehome/src/services/out_bin_switch.ts b/futurehome/src/services/out_bin_switch.ts index f32417e..88ad5d2 100644 --- a/futurehome/src/services/out_bin_switch.ts +++ b/futurehome/src/services/out_bin_switch.ts @@ -1,31 +1,28 @@ import { sendFimpMsg } from "../fimp/fimp"; -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function out_bin_switch__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService -): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - - const commandTopic = `${topicPrefix}${svc.address}/command`; + device: VinculumPd7Device, + svc: VinculumPd7Service +): ServiceComponentsCreationResult | undefined { + const commandTopic = `${topicPrefix}${svc.addr}/command`; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'switch', command_topic: commandTopic, optimistic: false, - value_template: `{{ (value_json['${svc.address}'].binary) | iif('ON', 'OFF') }}`, + value_template: `{{ (value_json['${svc.addr}'].binary) | iif('ON', 'OFF') }}`, }, }, commandHandlers: { [commandTopic]: async (payload: string) => { await sendFimpMsg({ - address: svc.address!, + address: svc.addr!, service: 'out_bin_switch', cmd: 'cmd.binary.set', val: payload === 'ON', diff --git a/futurehome/src/services/out_lvl_switch.ts b/futurehome/src/services/out_lvl_switch.ts index 13de89a..4d14b49 100644 --- a/futurehome/src/services/out_lvl_switch.ts +++ b/futurehome/src/services/out_lvl_switch.ts @@ -1,31 +1,28 @@ import { sendFimpMsg } from "../fimp/fimp"; -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function out_lvl_switch__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - - const commandTopic = `${topicPrefix}${svc.address}/command`; + const commandTopic = `${topicPrefix}${svc.addr}/command`; const minLvl = svc.props?.min_lvl ?? 0; const maxLvl = svc.props?.max_lvl ?? 100; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: "number", min: minLvl, max: maxLvl, step: 1, command_topic: commandTopic, optimistic: false, - value_template: `{{ value_json['${svc.address}'].lvl }}`, + value_template: `{{ value_json['${svc.addr}'].lvl }}`, }, }, @@ -37,7 +34,7 @@ export function out_lvl_switch__components( } await sendFimpMsg({ - address: svc.address!, + address: svc.addr!, service: "out_lvl_switch", cmd: "cmd.lvl.set", val: lvl, diff --git a/futurehome/src/services/sensor_accelx.ts b/futurehome/src/services/sensor_accelx.ts index bae5de2..898b9fa 100644 --- a/futurehome/src/services/sensor_accelx.ts +++ b/futurehome/src/services/sensor_accelx.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_accelx__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = undefined; const unit = svc.props?.sup_units?.[0] ?? 'm/s2'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_accely.ts b/futurehome/src/services/sensor_accely.ts index fcffc78..35a2ff6 100644 --- a/futurehome/src/services/sensor_accely.ts +++ b/futurehome/src/services/sensor_accely.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_accely__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = undefined; const unit = svc.props?.sup_units?.[0] ?? 'm/s2'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_accelz.ts b/futurehome/src/services/sensor_accelz.ts index 12065c9..612038d 100644 --- a/futurehome/src/services/sensor_accelz.ts +++ b/futurehome/src/services/sensor_accelz.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_accelz__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = undefined; const unit = svc.props?.sup_units?.[0] ?? 'm/s2'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_airflow.ts b/futurehome/src/services/sensor_airflow.ts index 10a2ff1..c749f4e 100644 --- a/futurehome/src/services/sensor_airflow.ts +++ b/futurehome/src/services/sensor_airflow.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_airflow__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = undefined; const unit = svc.props?.sup_units?.[0] ?? 'm3/h'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_airq.ts b/futurehome/src/services/sensor_airq.ts index 4ac9c9e..a2c4e0c 100644 --- a/futurehome/src/services/sensor_airq.ts +++ b/futurehome/src/services/sensor_airq.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_airq__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'aqi'; const unit = svc.props?.sup_units?.[0] ?? 'pm25'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_anglepos.ts b/futurehome/src/services/sensor_anglepos.ts index 71b65f7..a78c871 100644 --- a/futurehome/src/services/sensor_anglepos.ts +++ b/futurehome/src/services/sensor_anglepos.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_anglepos__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = undefined; const unit = svc.props?.sup_units?.[0] ?? '%'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_atmo.ts b/futurehome/src/services/sensor_atmo.ts index 008b9af..baf578f 100644 --- a/futurehome/src/services/sensor_atmo.ts +++ b/futurehome/src/services/sensor_atmo.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_atmo__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'atmospheric_pressure'; const unit = svc.props?.sup_units?.[0] ?? 'kPa'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_baro.ts b/futurehome/src/services/sensor_baro.ts index f2577a9..54ba66e 100644 --- a/futurehome/src/services/sensor_baro.ts +++ b/futurehome/src/services/sensor_baro.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_baro__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'atmospheric_pressure'; const unit = svc.props?.sup_units?.[0] ?? 'kPa'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_co.ts b/futurehome/src/services/sensor_co.ts index 83650f2..5859692 100644 --- a/futurehome/src/services/sensor_co.ts +++ b/futurehome/src/services/sensor_co.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_co__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'carbon_monoxide'; const unit = svc.props?.sup_units?.[0] ?? 'mol/m3'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_co2.ts b/futurehome/src/services/sensor_co2.ts index 3baefda..847aead 100644 --- a/futurehome/src/services/sensor_co2.ts +++ b/futurehome/src/services/sensor_co2.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_co2__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'carbon_dioxide'; const unit = svc.props?.sup_units?.[0] ?? 'ppm'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_contact.ts b/futurehome/src/services/sensor_contact.ts index 6ab67b1..34bfef8 100644 --- a/futurehome/src/services/sensor_contact.ts +++ b/futurehome/src/services/sensor_contact.ts @@ -1,23 +1,20 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_contact__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'opening' return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'binary_sensor', device_class: device_class, - value_template: `{{ value_json['${svc.address}'].open | iif('ON', 'OFF') }}`, + value_template: `{{ value_json['${svc.addr}'].open | iif('ON', 'OFF') }}`, }, }, }; diff --git a/futurehome/src/services/sensor_current.ts b/futurehome/src/services/sensor_current.ts index bfa8c45..602ac0b 100644 --- a/futurehome/src/services/sensor_current.ts +++ b/futurehome/src/services/sensor_current.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_current__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'current'; const unit = svc.props?.sup_units?.[0] ?? 'A'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_dew.ts b/futurehome/src/services/sensor_dew.ts index 4fc4127..e8cc4c3 100644 --- a/futurehome/src/services/sensor_dew.ts +++ b/futurehome/src/services/sensor_dew.ts @@ -1,14 +1,11 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_dew__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'temperature' let unit = svc.props?.sup_units?.[0] ?? "°C"; if (unit === 'C') unit = '°C'; @@ -16,12 +13,12 @@ export function sensor_dew__components( return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, }, }; diff --git a/futurehome/src/services/sensor_direct.ts b/futurehome/src/services/sensor_direct.ts index d5e33dd..e0052e3 100644 --- a/futurehome/src/services/sensor_direct.ts +++ b/futurehome/src/services/sensor_direct.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_direct__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'wind_direction'; const unit = svc.props?.sup_units?.[0] ?? '°'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_distance.ts b/futurehome/src/services/sensor_distance.ts index 79f03cc..be30146 100644 --- a/futurehome/src/services/sensor_distance.ts +++ b/futurehome/src/services/sensor_distance.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_distance__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'distance'; const unit = svc.props?.sup_units?.[0] ?? 'm'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_elresist.ts b/futurehome/src/services/sensor_elresist.ts index aa4255e..3de0068 100644 --- a/futurehome/src/services/sensor_elresist.ts +++ b/futurehome/src/services/sensor_elresist.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_elresist__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = undefined; const unit = svc.props?.sup_units?.[0] ?? 'ohm/m'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_freq.ts b/futurehome/src/services/sensor_freq.ts index 387b5a9..3b63255 100644 --- a/futurehome/src/services/sensor_freq.ts +++ b/futurehome/src/services/sensor_freq.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_freq__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'frequency'; const unit = svc.props?.sup_units?.[0] ?? 'Hz'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_gp.ts b/futurehome/src/services/sensor_gp.ts index fe692dd..cc3adfc 100644 --- a/futurehome/src/services/sensor_gp.ts +++ b/futurehome/src/services/sensor_gp.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_gp__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = undefined; const unit = svc.props?.sup_units?.[0] ?? '%'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_gust.ts b/futurehome/src/services/sensor_gust.ts index 2345637..700924d 100644 --- a/futurehome/src/services/sensor_gust.ts +++ b/futurehome/src/services/sensor_gust.ts @@ -1,26 +1,23 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_gust__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = undefined; let unit = svc.props?.sup_units?.[0] ?? 'km/h'; if (unit === 'kph') unit = 'km/h' return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_humid.ts b/futurehome/src/services/sensor_humid.ts index 3ecbe48..0f9c1c4 100644 --- a/futurehome/src/services/sensor_humid.ts +++ b/futurehome/src/services/sensor_humid.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_humid__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'humidity'; const unit = svc.props?.sup_units?.[0] ?? '%'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_lumin.ts b/futurehome/src/services/sensor_lumin.ts index 37ee856..1a3ded8 100644 --- a/futurehome/src/services/sensor_lumin.ts +++ b/futurehome/src/services/sensor_lumin.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_lumin__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'illuminance'; const unit = svc.props?.sup_units?.[0] ?? 'Lux'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_moist.ts b/futurehome/src/services/sensor_moist.ts index 329aa54..4b49273 100644 --- a/futurehome/src/services/sensor_moist.ts +++ b/futurehome/src/services/sensor_moist.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_moist__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'moisture'; const unit = svc.props?.sup_units?.[0] ?? '%'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_noise.ts b/futurehome/src/services/sensor_noise.ts index 91b0a1a..30d1b4e 100644 --- a/futurehome/src/services/sensor_noise.ts +++ b/futurehome/src/services/sensor_noise.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_noise__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'sound_pressure'; const unit = svc.props?.sup_units?.[0] ?? 'dB'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_power.ts b/futurehome/src/services/sensor_power.ts index cac50e0..a644f4a 100644 --- a/futurehome/src/services/sensor_power.ts +++ b/futurehome/src/services/sensor_power.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_power__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'power'; const unit = svc.props?.sup_units?.[0] ?? 'W'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_presence.ts b/futurehome/src/services/sensor_presence.ts index fb17c0c..d95fa0f 100644 --- a/futurehome/src/services/sensor_presence.ts +++ b/futurehome/src/services/sensor_presence.ts @@ -1,23 +1,20 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_presence__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'occupancy' return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'binary_sensor', device_class: device_class, - value_template: `{{ value_json['${svc.address}'].presence | iif('ON', 'OFF') }}`, + value_template: `{{ value_json['${svc.addr}'].presence | iif('ON', 'OFF') }}`, }, }, }; diff --git a/futurehome/src/services/sensor_rain.ts b/futurehome/src/services/sensor_rain.ts index 829b17a..7d6237a 100644 --- a/futurehome/src/services/sensor_rain.ts +++ b/futurehome/src/services/sensor_rain.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_rain__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'precipitation_intensity'; const unit = svc.props?.sup_units?.[0] ?? 'mm/h'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_rotation.ts b/futurehome/src/services/sensor_rotation.ts index 08cbf68..594f6bd 100644 --- a/futurehome/src/services/sensor_rotation.ts +++ b/futurehome/src/services/sensor_rotation.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_rotation__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = undefined; const unit = svc.props?.sup_units?.[0] ?? 'rpm'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_seismicint.ts b/futurehome/src/services/sensor_seismicint.ts index 25b0c38..836bafc 100644 --- a/futurehome/src/services/sensor_seismicint.ts +++ b/futurehome/src/services/sensor_seismicint.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_seismicint__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = undefined; const unit = svc.props?.sup_units?.[0] ?? 'EMCRO'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_seismicmag.ts b/futurehome/src/services/sensor_seismicmag.ts index d723c61..7db6543 100644 --- a/futurehome/src/services/sensor_seismicmag.ts +++ b/futurehome/src/services/sensor_seismicmag.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_seismicmag__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = undefined; const unit = svc.props?.sup_units?.[0] ?? 'MB'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_solarrad.ts b/futurehome/src/services/sensor_solarrad.ts index 462f964..905ff69 100644 --- a/futurehome/src/services/sensor_solarrad.ts +++ b/futurehome/src/services/sensor_solarrad.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_solarrad__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = undefined; const unit = svc.props?.sup_units?.[0] ?? 'W/m2'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_tank.ts b/futurehome/src/services/sensor_tank.ts index 07a78a9..91d1385 100644 --- a/futurehome/src/services/sensor_tank.ts +++ b/futurehome/src/services/sensor_tank.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_tank__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'volume_storage'; const unit = svc.props?.sup_units?.[0] ?? 'l'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_temp.ts b/futurehome/src/services/sensor_temp.ts index 973c4c9..c6f62cc 100644 --- a/futurehome/src/services/sensor_temp.ts +++ b/futurehome/src/services/sensor_temp.ts @@ -1,14 +1,11 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_temp__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'temperature' let unit = svc.props?.sup_units?.[0] ?? "°C"; if (unit === 'C') unit = '°C'; @@ -16,12 +13,12 @@ export function sensor_temp__components( return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, }, }; diff --git a/futurehome/src/services/sensor_tidelvl.ts b/futurehome/src/services/sensor_tidelvl.ts index e52c8ea..5aa553d 100644 --- a/futurehome/src/services/sensor_tidelvl.ts +++ b/futurehome/src/services/sensor_tidelvl.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_tidelvl__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = undefined; const unit = svc.props?.sup_units?.[0] ?? 'm'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_uv.ts b/futurehome/src/services/sensor_uv.ts index 9d442df..6e68c9a 100644 --- a/futurehome/src/services/sensor_uv.ts +++ b/futurehome/src/services/sensor_uv.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_uv__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = undefined; const unit = svc.props?.sup_units?.[0] ?? 'index'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_veloc.ts b/futurehome/src/services/sensor_veloc.ts index 60bb0c2..514dedb 100644 --- a/futurehome/src/services/sensor_veloc.ts +++ b/futurehome/src/services/sensor_veloc.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_veloc__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = undefined; const unit = svc.props?.sup_units?.[0] ?? 'm/2'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_voltage.ts b/futurehome/src/services/sensor_voltage.ts index f38fce4..4c7915a 100644 --- a/futurehome/src/services/sensor_voltage.ts +++ b/futurehome/src/services/sensor_voltage.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_voltage__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'voltage'; const unit = svc.props?.sup_units?.[0] ?? 'V'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_watflow.ts b/futurehome/src/services/sensor_watflow.ts index 3fb00f5..c2cf765 100644 --- a/futurehome/src/services/sensor_watflow.ts +++ b/futurehome/src/services/sensor_watflow.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_watflow__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'volume_flow_rate'; const unit = svc.props?.sup_units?.[0] ?? 'l/h'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_watpressure.ts b/futurehome/src/services/sensor_watpressure.ts index d2bd241..63e2d01 100644 --- a/futurehome/src/services/sensor_watpressure.ts +++ b/futurehome/src/services/sensor_watpressure.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_watpressure__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'pressure'; const unit = svc.props?.sup_units?.[0] ?? 'kPa'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_wattemp.ts b/futurehome/src/services/sensor_wattemp.ts index 3baee39..00ba512 100644 --- a/futurehome/src/services/sensor_wattemp.ts +++ b/futurehome/src/services/sensor_wattemp.ts @@ -1,14 +1,11 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_wattemp__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'temperature'; let unit = svc.props?.sup_units?.[0] ?? "°C"; if (unit === 'C') unit = '°C'; @@ -16,12 +13,12 @@ export function sensor_wattemp__components( return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, }, }; diff --git a/futurehome/src/services/sensor_weight.ts b/futurehome/src/services/sensor_weight.ts index 8013978..c00af85 100644 --- a/futurehome/src/services/sensor_weight.ts +++ b/futurehome/src/services/sensor_weight.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_weight__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'weight'; const unit = svc.props?.sup_units?.[0] ?? 'kg'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } }; diff --git a/futurehome/src/services/sensor_wind.ts b/futurehome/src/services/sensor_wind.ts index aa76b8a..ae91b34 100644 --- a/futurehome/src/services/sensor_wind.ts +++ b/futurehome/src/services/sensor_wind.ts @@ -1,25 +1,22 @@ -import { InclusionReportService } from "../fimp/inclusion_report"; -import { VinculumPd7Device } from "../fimp/vinculum_pd7_device"; +import { VinculumPd7Device, VinculumPd7Service } from "../fimp/vinculum_pd7_device"; import { ServiceComponentsCreationResult } from "../ha/publish_device"; export function sensor_wind__components( topicPrefix: string, - vinculumDeviceData: VinculumPd7Device, - svc: InclusionReportService + device: VinculumPd7Device, + svc: VinculumPd7Service ): ServiceComponentsCreationResult | undefined { - if (!svc.address) { return; } - const device_class = 'wind_speed'; const unit = svc.props?.sup_units?.[0] ?? 'km/h'; return { components: { - [svc.address]: { - unique_id: svc.address, + [svc.addr]: { + unique_id: svc.addr, p: 'sensor', device_class: device_class, unit_of_measurement: unit, - value_template: `{{ value_json['${svc.address}'].sensor }}`, + value_template: `{{ value_json['${svc.addr}'].sensor }}`, }, } };