Update service types

This commit is contained in:
Adrian Jagielak 2025-07-23 13:50:33 +02:00
parent bdaa733794
commit 9dd9046954
No known key found for this signature in database
GPG Key ID: 0818CF7AF6C62BFB
43 changed files with 167 additions and 151 deletions

View File

@ -78,13 +78,29 @@ type HaDeviceConfig = {
qos: number,
}
export type HaComponent = {
export type HaComponent = SensorComponent | BinarySensorComponent | SwitchComponent;
type SensorComponent = {
unique_id: string;
// platform
p: string;
p: 'sensor';
device_class?: string;
unit_of_measurement?: string;
value_template?: string;
value_template: string;
}
type BinarySensorComponent = {
unique_id: string;
// platform
p: 'binary_sensor';
device_class?: string;
value_template: string;
}
type SwitchComponent = {
unique_id: string;
// platform
p: 'switch';
}
const serviceHandlers: {

View File

@ -8,21 +8,21 @@ export function battery__components(vinculumDeviceData: VinculumPd7Device, svc:
if (svc.props?.sup_events?.includes('low_battery')) {
return {
[svc.address]: {
p: "binary_sensor",
device_class: "battery",
value_template: `{{ (value_json['${svc.address}'].alarm.status == 'activ') | iif('ON', 'OFF') }}`,
unique_id: svc.address,
p: 'binary_sensor',
device_class: 'battery',
value_template: `{{ (value_json['${svc.address}'].alarm.status == 'activ') | iif('ON', 'OFF') }}`,
},
};
}
else {
return {
[svc.address]: {
p: "sensor",
device_class: "battery",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "%",
value_template: `{{ value_json['${svc.address}'].lvl }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'battery',
unit_of_measurement: svc.props?.sup_units?.[0] ?? '%',
value_template: `{{ value_json['${svc.address}'].lvl }}`,
},
}
};

View File

@ -7,10 +7,10 @@ export function sensor_accelx__components(vinculumDeviceData: VinculumPd7Device,
return {
[svc.address]: {
p: "sensor",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "m/s2",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'm/s2',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,10 +7,10 @@ export function sensor_accely__components(vinculumDeviceData: VinculumPd7Device,
return {
[svc.address]: {
p: "sensor",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "m/s2",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'm/s2',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,10 +7,10 @@ export function sensor_accelz__components(vinculumDeviceData: VinculumPd7Device,
return {
[svc.address]: {
p: "sensor",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "m/s2",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'm/s2',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,10 +7,10 @@ export function sensor_airflow__components(vinculumDeviceData: VinculumPd7Device
return {
[svc.address]: {
p: "sensor",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "m3/h",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'm3/h',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_airq__components(vinculumDeviceData: VinculumPd7Device, s
return {
[svc.address]: {
p: "sensor",
device_class: "aqi",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "pm25",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'aqi',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'pm25',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,10 +7,10 @@ export function sensor_anglepos__components(vinculumDeviceData: VinculumPd7Devic
return {
[svc.address]: {
p: "sensor",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "%",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
unit_of_measurement: svc.props?.sup_units?.[0] ?? '%',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_atmo__components(vinculumDeviceData: VinculumPd7Device, s
return {
[svc.address]: {
p: "sensor",
device_class: "atmospheric_pressure",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "kPa",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'atmospheric_pressure',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'kPa',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_baro__components(vinculumDeviceData: VinculumPd7Device, s
return {
[svc.address]: {
p: "sensor",
device_class: "atmospheric_pressure",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "kPa",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'atmospheric_pressure',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'kPa',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_co__components(vinculumDeviceData: VinculumPd7Device, svc
return {
[svc.address]: {
p: "sensor",
device_class: "carbon_monoxide",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "mol/m3",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'carbon_monoxide',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'mol/m3',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_co2__components(vinculumDeviceData: VinculumPd7Device, sv
return {
[svc.address]: {
p: "sensor",
device_class: "carbon_dioxide",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "ppm",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'carbon_dioxide',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'ppm',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,10 +7,10 @@ export function sensor_contact__components(vinculumDeviceData: VinculumPd7Device
return {
[svc.address]: {
p: "binary_sensor",
device_class: "opening",
value_template: `{{ value_json['${svc.address}'].open | iif('ON', 'OFF') }}`,
unique_id: svc.address,
p: 'binary_sensor',
device_class: 'opening',
value_template: `{{ value_json['${svc.address}'].open | iif('ON', 'OFF') }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_current__components(vinculumDeviceData: VinculumPd7Device
return {
[svc.address]: {
p: "sensor",
device_class: "current",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "A",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'current',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'A',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -11,11 +11,11 @@ export function sensor_dew__components(vinculumDeviceData: VinculumPd7Device, sv
return {
[svc.address]: {
p: "sensor",
device_class: "temperature",
unique_id: svc.address,
p: 'sensor',
device_class: 'temperature',
unit_of_measurement: unit,
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_direct__components(vinculumDeviceData: VinculumPd7Device,
return {
[svc.address]: {
p: "sensor",
device_class: "wind_direction",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "°",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'wind_direction',
unit_of_measurement: svc.props?.sup_units?.[0] ?? '°',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_distance__components(vinculumDeviceData: VinculumPd7Devic
return {
[svc.address]: {
p: "sensor",
device_class: "distance",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "m",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'distance',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'm',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,10 +7,10 @@ export function sensor_elresist__components(vinculumDeviceData: VinculumPd7Devic
return {
[svc.address]: {
p: "sensor",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "Ω·m",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'Ω·m',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_freq__components(vinculumDeviceData: VinculumPd7Device, s
return {
[svc.address]: {
p: "sensor",
device_class: "frequency",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "Hz",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'frequency',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'Hz',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,10 +7,10 @@ export function sensor_gp__components(vinculumDeviceData: VinculumPd7Device, svc
return {
[svc.address]: {
p: "sensor",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "%",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
unit_of_measurement: svc.props?.sup_units?.[0] ?? '%',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -10,10 +10,10 @@ export function sensor_gust__components(vinculumDeviceData: VinculumPd7Device, s
return {
[svc.address]: {
p: "sensor",
unique_id: svc.address,
p: 'sensor',
unit_of_measurement: unit,
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_humid__components(vinculumDeviceData: VinculumPd7Device,
return {
[svc.address]: {
p: "sensor",
device_class: "humidity",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "%",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'humidity',
unit_of_measurement: svc.props?.sup_units?.[0] ?? '%',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_lumin__components(vinculumDeviceData: VinculumPd7Device,
return {
[svc.address]: {
p: "sensor",
device_class: "illuminance",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "Lux",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'illuminance',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'Lux',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_moist__components(vinculumDeviceData: VinculumPd7Device,
return {
[svc.address]: {
p: "sensor",
device_class: "moisture",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "%",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'moisture',
unit_of_measurement: svc.props?.sup_units?.[0] ?? '%',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_noise__components(vinculumDeviceData: VinculumPd7Device,
return {
[svc.address]: {
p: "sensor",
device_class: "sound_pressure",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "dB",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'sound_pressure',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'dB',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_power__components(vinculumDeviceData: VinculumPd7Device,
return {
[svc.address]: {
p: "sensor",
device_class: "power",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "W",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'power',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'W',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,10 +7,10 @@ export function sensor_presence__components(vinculumDeviceData: VinculumPd7Devic
return {
[svc.address]: {
p: "binary_sensor",
device_class: "presence",
value_template: `{{ value_json['${svc.address}'].presence | iif('ON', 'OFF') }}`,
unique_id: svc.address,
p: 'binary_sensor',
device_class: 'presence',
value_template: `{{ value_json['${svc.address}'].presence | iif('ON', 'OFF') }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_rain__components(vinculumDeviceData: VinculumPd7Device, s
return {
[svc.address]: {
p: "sensor",
device_class: "precipitation_intensity",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "mm/h",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'precipitation_intensity',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'mm/h',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,10 +7,10 @@ export function sensor_rotation__components(vinculumDeviceData: VinculumPd7Devic
return {
[svc.address]: {
p: "sensor",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "rpm",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'rpm',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,10 +7,10 @@ export function sensor_seismicint__components(vinculumDeviceData: VinculumPd7Dev
return {
[svc.address]: {
p: "sensor",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "EMCRO",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'EMCRO',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,10 +7,10 @@ export function sensor_seismicmag__components(vinculumDeviceData: VinculumPd7Dev
return {
[svc.address]: {
p: "sensor",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "MB",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'MB',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,10 +7,10 @@ export function sensor_solarrad__components(vinculumDeviceData: VinculumPd7Devic
return {
[svc.address]: {
p: "sensor",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "w/m2",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'w/m2',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_tank__components(vinculumDeviceData: VinculumPd7Device, s
return {
[svc.address]: {
p: "sensor",
device_class: "volume_storage",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "l",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'volume_storage',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'l',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -11,11 +11,11 @@ export function sensor_temp__components(vinculumDeviceData: VinculumPd7Device, s
return {
[svc.address]: {
p: "sensor",
device_class: "temperature",
unique_id: svc.address,
p: 'sensor',
device_class: 'temperature',
unit_of_measurement: unit,
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
},
};
}

View File

@ -7,10 +7,10 @@ export function sensor_tidelvl__components(vinculumDeviceData: VinculumPd7Device
return {
[svc.address]: {
p: "sensor",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "m",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'm',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,10 +7,10 @@ export function sensor_uv__components(vinculumDeviceData: VinculumPd7Device, svc
return {
[svc.address]: {
p: "sensor",
unique_id: svc.address,
p: 'sensor',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'index',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
},
};
}

View File

@ -7,10 +7,10 @@ export function sensor_veloc__components(vinculumDeviceData: VinculumPd7Device,
return {
[svc.address]: {
p: "sensor",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "m/s",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'm/s',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_voltage__components(vinculumDeviceData: VinculumPd7Device
return {
[svc.address]: {
p: "sensor",
device_class: "voltage",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "V",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'voltage',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'V',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_watflow__components(vinculumDeviceData: VinculumPd7Device
return {
[svc.address]: {
p: "sensor",
device_class: "volume_flow_rate",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "l/h",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'volume_flow_rate',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'l/h',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_watpressure__components(vinculumDeviceData: VinculumPd7De
return {
[svc.address]: {
p: "sensor",
device_class: "pressure",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "kPa",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'pressure',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'kPa',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -11,11 +11,11 @@ export function sensor_wattemp__components(vinculumDeviceData: VinculumPd7Device
return {
[svc.address]: {
p: "sensor",
device_class: "temperature",
unique_id: svc.address,
p: 'sensor',
device_class: 'temperature',
unit_of_measurement: unit,
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
},
};
}

View File

@ -7,11 +7,11 @@ export function sensor_weight__components(vinculumDeviceData: VinculumPd7Device,
return {
[svc.address]: {
p: "sensor",
device_class: "weigh",
unit_of_measurement: svc.props?.sup_units?.[0] ?? "kg",
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
p: 'sensor',
device_class: 'weight',
unit_of_measurement: svc.props?.sup_units?.[0] ?? 'kg',
value_template: `{{ value_json['${svc.address}'].sensor }}`,
},
};
}

View File

@ -10,11 +10,11 @@ export function sensor_wind__components(vinculumDeviceData: VinculumPd7Device, s
return {
[svc.address]: {
p: "sensor",
device_class: "wind_speed",
unique_id: svc.address,
p: 'sensor',
device_class: 'wind_speed',
unit_of_measurement: unit,
value_template: `{{ value_json['${svc.address}'].sensor }}`,
unique_id: svc.address,
},
};
}