mirror of
https://github.com/adrianjagielak/home-assistant-futurehome.git
synced 2025-10-04 10:47:10 +00:00
Use light
entity for out_lvl_switch if the device type is "light"
This commit is contained in:
parent
f216f4b719
commit
50500e97be
@ -16,36 +16,104 @@ export function out_lvl_switch__components(
|
|||||||
const minLvl = svc.props?.min_lvl ?? 0;
|
const minLvl = svc.props?.min_lvl ?? 0;
|
||||||
const maxLvl = svc.props?.max_lvl ?? 100;
|
const maxLvl = svc.props?.max_lvl ?? 100;
|
||||||
|
|
||||||
return {
|
const isLightDevice = device.type?.type === 'light';
|
||||||
components: {
|
|
||||||
[svc.addr]: {
|
|
||||||
unique_id: svc.addr,
|
|
||||||
platform: 'number',
|
|
||||||
name: 'Level Switch',
|
|
||||||
min: minLvl,
|
|
||||||
max: maxLvl,
|
|
||||||
step: 1,
|
|
||||||
command_topic: commandTopic,
|
|
||||||
optimistic: false,
|
|
||||||
value_template: `{{ value_json['${svc.addr}'].lvl }}`,
|
|
||||||
},
|
|
||||||
},
|
|
||||||
|
|
||||||
commandHandlers: {
|
if (isLightDevice) {
|
||||||
[commandTopic]: async (payload: string) => {
|
// Use light component for light devices
|
||||||
const lvl = parseInt(payload, 10);
|
return {
|
||||||
if (Number.isNaN(lvl)) {
|
components: {
|
||||||
return;
|
[`${svc.addr}_light`]: {
|
||||||
}
|
unique_id: `${svc.addr}_light`,
|
||||||
|
platform: 'light',
|
||||||
|
name: 'Light',
|
||||||
|
brightness: true,
|
||||||
|
brightness_scale: maxLvl,
|
||||||
|
command_topic: commandTopic,
|
||||||
|
optimistic: false,
|
||||||
|
state_topic: `${topicPrefix}${svc.addr}/state`,
|
||||||
|
state_value_template: `{% if value_json['${svc.addr}'].lvl > 0 %}ON{% else %}OFF{% endif %}`,
|
||||||
|
brightness_state_topic: `${topicPrefix}${svc.addr}/state`,
|
||||||
|
brightness_value_template: `{{ value_json['${svc.addr}'].lvl }}`,
|
||||||
|
},
|
||||||
|
|
||||||
await sendFimpMsg({
|
// Remove the no longer needed `number` entity by setting it to an empty value
|
||||||
address: svc.addr!,
|
[svc.addr]: {
|
||||||
service: 'out_lvl_switch',
|
unique_id: svc.addr,
|
||||||
cmd: 'cmd.lvl.set',
|
} as any,
|
||||||
val: lvl,
|
|
||||||
val_t: 'int',
|
|
||||||
});
|
|
||||||
},
|
},
|
||||||
},
|
|
||||||
};
|
commandHandlers: {
|
||||||
|
[commandTopic]: async (payload: string) => {
|
||||||
|
const command = JSON.parse(payload);
|
||||||
|
|
||||||
|
if (command.state === 'ON') {
|
||||||
|
let lvl = maxLvl;
|
||||||
|
if (command.brightness !== undefined) {
|
||||||
|
lvl = Math.round(command.brightness);
|
||||||
|
}
|
||||||
|
|
||||||
|
await sendFimpMsg({
|
||||||
|
address: svc.addr!,
|
||||||
|
service: 'out_lvl_switch',
|
||||||
|
cmd: 'cmd.lvl.set',
|
||||||
|
val: lvl,
|
||||||
|
val_t: 'int',
|
||||||
|
});
|
||||||
|
} else if (command.state === 'OFF') {
|
||||||
|
await sendFimpMsg({
|
||||||
|
address: svc.addr!,
|
||||||
|
service: 'out_lvl_switch',
|
||||||
|
cmd: 'cmd.lvl.set',
|
||||||
|
val: minLvl,
|
||||||
|
val_t: 'int',
|
||||||
|
});
|
||||||
|
} else if (command.brightness !== undefined) {
|
||||||
|
const lvl = Math.round(command.brightness);
|
||||||
|
|
||||||
|
await sendFimpMsg({
|
||||||
|
address: svc.addr!,
|
||||||
|
service: 'out_lvl_switch',
|
||||||
|
cmd: 'cmd.lvl.set',
|
||||||
|
val: lvl,
|
||||||
|
val_t: 'int',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
// Use number component for non-light devices
|
||||||
|
return {
|
||||||
|
components: {
|
||||||
|
[svc.addr]: {
|
||||||
|
unique_id: svc.addr,
|
||||||
|
platform: 'number',
|
||||||
|
name: 'Level Switch',
|
||||||
|
min: minLvl,
|
||||||
|
max: maxLvl,
|
||||||
|
step: 1,
|
||||||
|
command_topic: commandTopic,
|
||||||
|
optimistic: false,
|
||||||
|
value_template: `{{ value_json['${svc.addr}'].lvl }}`,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
commandHandlers: {
|
||||||
|
[commandTopic]: async (payload: string) => {
|
||||||
|
const lvl = parseInt(payload, 10);
|
||||||
|
if (Number.isNaN(lvl)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
await sendFimpMsg({
|
||||||
|
address: svc.addr!,
|
||||||
|
service: 'out_lvl_switch',
|
||||||
|
cmd: 'cmd.lvl.set',
|
||||||
|
val: lvl,
|
||||||
|
val_t: 'int',
|
||||||
|
});
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user