Use state as mode for alarm mode tile feature (#16045

* Use state as mode for alarm mode tile feature

* reorder modes
This commit is contained in:
Paul Bottein 2023-04-03 20:56:54 +02:00 committed by GitHub
parent 890be2c177
commit 6068d5e5cd
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 31 additions and 40 deletions

View File

@ -53,53 +53,46 @@ export const callAlarmAction = (
}; };
export type AlarmMode = export type AlarmMode =
| "away" | "armed_home"
| "home" | "armed_away"
| "night" | "armed_night"
| "vacation" | "armed_vacation"
| "custom_bypass" | "armed_custom_bypass"
| "disarmed"; | "disarmed";
type AlarmConfig = { type AlarmConfig = {
service: string; service: string;
feature?: AlarmControlPanelEntityFeature; feature?: AlarmControlPanelEntityFeature;
state: string;
path: string; path: string;
}; };
export const ALARM_MODES: Record<AlarmMode, AlarmConfig> = { export const ALARM_MODES: Record<AlarmMode, AlarmConfig> = {
away: { armed_home: {
feature: AlarmControlPanelEntityFeature.ARM_AWAY,
service: "alarm_arm_away",
state: "armed_away",
path: mdiLock,
},
home: {
feature: AlarmControlPanelEntityFeature.ARM_HOME, feature: AlarmControlPanelEntityFeature.ARM_HOME,
service: "alarm_arm_home", service: "alarm_arm_home",
state: "armed_home",
path: mdiHome, path: mdiHome,
}, },
custom_bypass: { armed_away: {
feature: AlarmControlPanelEntityFeature.ARM_CUSTOM_BYPASS, feature: AlarmControlPanelEntityFeature.ARM_AWAY,
service: "alarm_arm_custom_bypass", service: "alarm_arm_away",
state: "armed_custom_bypass", path: mdiLock,
path: mdiShield,
}, },
night: { armed_night: {
feature: AlarmControlPanelEntityFeature.ARM_NIGHT, feature: AlarmControlPanelEntityFeature.ARM_NIGHT,
service: "alarm_arm_night", service: "alarm_arm_night",
state: "armed_night",
path: mdiMoonWaningCrescent, path: mdiMoonWaningCrescent,
}, },
vacation: { armed_vacation: {
feature: AlarmControlPanelEntityFeature.ARM_VACATION, feature: AlarmControlPanelEntityFeature.ARM_VACATION,
service: "alarm_arm_vacation", service: "alarm_arm_vacation",
state: "armed_vacation",
path: mdiAirplane, path: mdiAirplane,
}, },
armed_custom_bypass: {
feature: AlarmControlPanelEntityFeature.ARM_CUSTOM_BYPASS,
service: "alarm_arm_custom_bypass",
path: mdiShield,
},
disarmed: { disarmed: {
service: "alarm_disarm", service: "alarm_disarm",
state: "disarmed",
path: mdiShieldOff, path: mdiShieldOff,
}, },
}; };

View File

@ -40,9 +40,7 @@ export class HaMoreInfoAlarmControlPanelModes extends LitElement {
} }
private _getCurrentMode(stateObj: AlarmControlPanelEntity) { private _getCurrentMode(stateObj: AlarmControlPanelEntity) {
return this._modes(stateObj).find( return this._modes(stateObj).find((mode) => mode === stateObj.state);
(mode) => ALARM_MODES[mode].state === stateObj.state
);
} }
private async _setMode(mode: AlarmMode) { private async _setMode(mode: AlarmMode) {
@ -86,7 +84,7 @@ export class HaMoreInfoAlarmControlPanelModes extends LitElement {
private async _valueChanged(ev: CustomEvent) { private async _valueChanged(ev: CustomEvent) {
const mode = (ev.detail as any).value as AlarmMode; const mode = (ev.detail as any).value as AlarmMode;
if (ALARM_MODES[mode].state === this.stateObj!.state) return; if (mode === this.stateObj!.state) return;
const oldMode = this._getCurrentMode(this.stateObj!); const oldMode = this._getCurrentMode(this.stateObj!);
this._currentMode = mode; this._currentMode = mode;

View File

@ -95,14 +95,14 @@ class HuiAlarmModeTileFeature
private _getCurrentMode(stateObj: AlarmControlPanelEntity) { private _getCurrentMode(stateObj: AlarmControlPanelEntity) {
return this._modes(stateObj, this._config?.modes).find( return this._modes(stateObj, this._config?.modes).find(
(mode) => ALARM_MODES[mode].state === stateObj.state (mode) => mode === stateObj.state
); );
} }
private async _valueChanged(ev: CustomEvent) { private async _valueChanged(ev: CustomEvent) {
const mode = (ev.detail as any).value as AlarmMode; const mode = (ev.detail as any).value as AlarmMode;
if (ALARM_MODES[mode].state === this.stateObj!.state) return; if (mode === this.stateObj!.state) return;
const oldMode = this._getCurrentMode(this.stateObj!); const oldMode = this._getCurrentMode(this.stateObj!);
this._currentMode = mode; this._currentMode = mode;

View File

@ -931,11 +931,11 @@
"alarm_control_panel": { "alarm_control_panel": {
"modes_label": "Modes", "modes_label": "Modes",
"modes": { "modes": {
"away": "Away", "armed_away": "Away",
"home": "Home", "armed_home": "Home",
"night": "Night", "armed_night": "Night",
"vacation": "Vacation", "armed_vacation": "Vacation",
"custom_bypass": "Custom", "armed_custom_bypass": "Custom",
"disarmed": "Disarmed" "disarmed": "Disarmed"
}, },
"disarm_title": "Disarm", "disarm_title": "Disarm",
@ -4467,11 +4467,11 @@
"label": "Alarm modes", "label": "Alarm modes",
"modes": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes_label%]", "modes": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes_label%]",
"modes_list": { "modes_list": {
"away": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::away%]", "armed_away": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::armed_away%]",
"home": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::home%]", "armed_home": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::armed_home%]",
"night": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::night%]", "armed_night": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::armed_night%]",
"vacation": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::vacation%]", "armed_vacation": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::armed_vacation%]",
"custom_bypass": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::custom_bypass%]", "armed_custom_bypass": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::armed_custom_bypass%]",
"disarmed": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::disarmed%]" "disarmed": "[%key:ui::dialogs::more_info_control::alarm_control_panel::modes::disarmed%]"
} }
}, },