From 0ab5876f0cec875b18cdcbce19fb322f2b19697f Mon Sep 17 00:00:00 2001 From: Sian Date: Mon, 5 Dec 2022 01:49:22 +1030 Subject: [PATCH] Added Ikea Styrbar --- .../assets/switch_manager_panel.js | 15 ++-- .../blueprints/zigbee2mqtt-ikea-styrbar.png | Bin 0 -> 61423 bytes .../blueprints/zigbee2mqtt-ikea-styrbar.yaml | 67 ++++++++++++++++++ .../switch_manager/manifest.json | 2 +- js/button-actions.ts | 6 +- js/dialogs/dialog-blueprint-selector.ts | 20 +++--- js/dialogs/dialog-confirm.ts | 3 +- js/dialogs/dialog-rename-switch.ts | 3 +- js/helpers.ts | 5 +- js/index.ts | 11 ++- js/main.ts | 7 +- js/switch-editor.ts | 20 +++--- package.json | 2 +- 13 files changed, 120 insertions(+), 41 deletions(-) create mode 100644 custom_components/switch_manager/blueprints/zigbee2mqtt-ikea-styrbar.png create mode 100644 custom_components/switch_manager/blueprints/zigbee2mqtt-ikea-styrbar.yaml diff --git a/custom_components/switch_manager/assets/switch_manager_panel.js b/custom_components/switch_manager/assets/switch_manager_panel.js index 5c20af3b..38075afa 100644 --- a/custom_components/switch_manager/assets/switch_manager_panel.js +++ b/custom_components/switch_manager/assets/switch_manager_panel.js @@ -502,9 +502,10 @@ function t(t,e,i,s){var o,n=arguments.length,r=n<3?e:null===s?s=Object.getOwnPro } h3, #identifier { padding-left: 25px; + } + #identifier { position: relative; } - #identifier-input { width: 300px; } @@ -681,10 +682,10 @@ function t(t,e,i,s){var o,n=arguments.length,r=n<3?e:null===s?s=Object.getOwnPro open hideActions @closed=${this.closeDialog} - .heading="${$t("Select Blueprint")}"> -

Can't find a blueprint for your switch? create your own. - window.open("https://github.com/Sian-Lee-SA/Home-Assistant-Switch-Manager#blueprints","_blank").focus()}> -

+ .heading=${$t(j`Select Blueprint +

Can't find a blueprint for your switch? create your own. + window.open("https://github.com/Sian-Lee-SA/Home-Assistant-Switch-Manager#blueprints","_blank").focus()}> +

`)}> ${this._listBlueprints()} @@ -707,10 +708,6 @@ function t(t,e,i,s){var o,n=arguments.length,r=n<3?e:null===s?s=Object.getOwnPro h2:first-child { margin: 0; } - p { - margin: -35px 0 0 0; - font-size: 0.8em; - } ha-icon-button { vertical-align: middle; } diff --git a/custom_components/switch_manager/blueprints/zigbee2mqtt-ikea-styrbar.png b/custom_components/switch_manager/blueprints/zigbee2mqtt-ikea-styrbar.png new file mode 100644 index 0000000000000000000000000000000000000000..01cb71fee708e0b06fb98c2ea2ee5106be50c066 GIT binary patch literal 61423 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%0Dl&lXOs=@a@ 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 B-|zqc literal 0 HcmV?d00001 diff --git a/custom_components/switch_manager/blueprints/zigbee2mqtt-ikea-styrbar.yaml b/custom_components/switch_manager/blueprints/zigbee2mqtt-ikea-styrbar.yaml new file mode 100644 index 00000000..730c0337 --- /dev/null +++ b/custom_components/switch_manager/blueprints/zigbee2mqtt-ikea-styrbar.yaml @@ -0,0 +1,67 @@ +name: Ikea Styrbar +service: Zigbee2MQTT +event_type: mqtt +identifier_key: topic +mqtt_topic_format: zigbee2mqtt/+/action +buttons: + ## Not sure why the buttons are back to front and illogical by their numbers?? + - x: 247 + y: 61 + width: 50 + shape: circle + actions: + - title: tap + conditions: + - key: payload + value: 'on' + - title: hold + conditions: + - key: payload + value: brightness_move_up + - x: 442 + y: 248 + width: 50 + shape: circle + actions: + - title: tap + conditions: + - key: payload + value: arrow_right_click + - title: hold + conditions: + - key: payload + value: arrow_right_hold + - title: hold (released) + conditions: + - key: payload + value: arrow_right_release + - x: 245 + y: 434 + width: 50 + shape: circle + actions: + - title: tap + conditions: + - key: payload + value: 'off' + - title: hold + conditions: + - key: payload + value: brightness_move_down + - x: 52 + y: 248 + width: 50 + shape: circle + actions: + - title: tap + conditions: + - key: payload + value: arrow_left_click + - title: hold + conditions: + - key: payload + value: arrow_left_hold + - title: hold (released) + conditions: + - key: payload + value: arrow_left_release \ No newline at end of file diff --git a/custom_components/switch_manager/manifest.json b/custom_components/switch_manager/manifest.json index 57a6b3c3..fb96153b 100644 --- a/custom_components/switch_manager/manifest.json +++ b/custom_components/switch_manager/manifest.json @@ -1,7 +1,7 @@ { "domain": "switch_manager", "name": "Switch Manager", - "version": "0.1.2", + "version": "0.1.3", "documentation": "https://github.com/Sian-Lee-SA/switch_manager", "dependencies": ["panel_custom", "websocket_api", "http", "frontend", "script", "mqtt"], "requirements": [], diff --git a/js/button-actions.ts b/js/button-actions.ts index 444744c6..3a797165 100644 --- a/js/button-actions.ts +++ b/js/button-actions.ts @@ -1,13 +1,17 @@ import { html, css, LitElement } from "lit"; import { customElement, property, state } from "lit/decorators.js"; import { SwitchManagerBlueprintButtonAction, SwitchManagerConfigButtonAction } from "./types"; +import { HomeAssistant } from "@hass/types"; @customElement('switch-manager-button-actions') class SwitchManagerButtonActions extends LitElement { - @property() hass!: any; + @property() hass!: HomeAssistant; + @property() blueprint_actions: SwitchManagerBlueprintButtonAction[]; + @property() config_actions: SwitchManagerConfigButtonAction[]; + @property({reflect: true}) index = 0; render() diff --git a/js/dialogs/dialog-blueprint-selector.ts b/js/dialogs/dialog-blueprint-selector.ts index 06bdc824..a13230ed 100644 --- a/js/dialogs/dialog-blueprint-selector.ts +++ b/js/dialogs/dialog-blueprint-selector.ts @@ -1,6 +1,7 @@ import { html, css, LitElement } from "lit"; import { customElement, property, state } from "lit/decorators.js"; import { SwitchManagerBlueprint } from "../types"; +import { HomeAssistant } from "@hass/types"; import { mdiGestureTapButton, mdiClose, @@ -20,7 +21,8 @@ import { haStyleDialog, haStyleScrollbar } from "@hass/resources/styles" @customElement('switch-manager-dialog-blueprint-selector') class SwitchManagerBlueprintSelector extends LitElement { - @property({attribute: false}) public hass!: any; + @property({attribute: false}) public hass!: HomeAssistant; + @property({attribute: false}) blueprints: {[key: string]: SwitchManagerBlueprint}; @state() private _opened = false; @@ -48,10 +50,10 @@ class SwitchManagerBlueprintSelector extends LitElement open hideActions @closed=${this.closeDialog} - .heading="${createCloseHeading('Select Blueprint')}"> -

Can't find a blueprint for your switch? create your own. - window.open('https://github.com/Sian-Lee-SA/Home-Assistant-Switch-Manager#blueprints', '_blank').focus()}> -

+ .heading=${createCloseHeading(html`Select Blueprint +

Can't find a blueprint for your switch? create your own. + window.open('https://github.com/Sian-Lee-SA/Home-Assistant-Switch-Manager#blueprints', '_blank').focus()}> +

`)}> ${this._listBlueprints()} @@ -80,10 +82,6 @@ class SwitchManagerBlueprintSelector extends LitElement h2:first-child { margin: 0; } - p { - margin: -35px 0 0 0; - font-size: 0.8em; - } ha-icon-button { vertical-align: middle; } @@ -143,8 +141,8 @@ class SwitchManagerBlueprintSelector extends LitElement private _updateBlueprints() { - this.hass.callWS({type: buildWSPath('blueprints')}).then( promise => { - this.blueprints = promise.blueprints; + this.hass.callWS({type: buildWSPath('blueprints')}).then( r => { + this.blueprints = r.blueprints; }).catch(error => showToast(this, { message: error.message })); } diff --git a/js/dialogs/dialog-confirm.ts b/js/dialogs/dialog-confirm.ts index d4bdaf3a..455d8ae3 100644 --- a/js/dialogs/dialog-confirm.ts +++ b/js/dialogs/dialog-confirm.ts @@ -3,12 +3,13 @@ import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators.js"; import { classMap } from "lit/directives/class-map.js"; import { ConfirmationDialogParams } from "../helpers"; +import { HomeAssistant } from "@hass/types"; import { fireEvent } from "@hass/common/dom/fire_event"; @customElement("switch-manager-dialog-confirm") class SwitchManagerDialogConfirm extends LitElement { - @property({ attribute: false }) public hass!: any; + @property({ attribute: false }) public hass!: HomeAssistant; @state() private _params?: ConfirmationDialogParams; diff --git a/js/dialogs/dialog-rename-switch.ts b/js/dialogs/dialog-rename-switch.ts index 677709ce..554a40d9 100644 --- a/js/dialogs/dialog-rename-switch.ts +++ b/js/dialogs/dialog-rename-switch.ts @@ -1,5 +1,6 @@ import { css, CSSResultGroup, html, LitElement, TemplateResult } from "lit"; import { customElement, property, state } from "lit/decorators.js"; +import { HomeAssistant } from "@hass/types"; import { createCloseHeading } from "../helpers"; import { haStyle, haStyleDialog } from "@hass/resources/styles"; import { fireEvent } from "@hass/common/dom/fire_event"; @@ -7,7 +8,7 @@ import { fireEvent } from "@hass/common/dom/fire_event"; @customElement('switch-manager-dialog-rename-switch') class SwitchManagerDialogRenameSwitch extends LitElement { - @property({ attribute: false }) public hass!: any; + @property({ attribute: false }) public hass!: HomeAssistant; @state() private _opened = false; diff --git a/js/helpers.ts b/js/helpers.ts index 9f49e89b..8d649a8c 100644 --- a/js/helpers.ts +++ b/js/helpers.ts @@ -1,11 +1,12 @@ import { mdiClose } from "@mdi/js"; import { html, LitElement, TemplateResult } from "lit"; import { MODES, ShowToastParams, SwitchManagerBlueprint, SwitchManagerConfig } from "./types"; +import { HomeAssistant } from "@hass/types"; import { fireEvent } from "@hass/common/dom/fire_event"; export const DOMAIN = 'switch_manager' -export function computeRTL(hass) +export function computeRTL(hass: HomeAssistant) { const lang = hass.language || "en"; if (hass.translationMetadata.translations[lang]) { @@ -14,7 +15,7 @@ export function computeRTL(hass) return false; } -export function computeRTLDirection(hass) +export function computeRTLDirection(hass: HomeAssistant) { return emitRTLDirection(computeRTL(hass)); } diff --git a/js/index.ts b/js/index.ts index 3c3af23b..d65c2a61 100644 --- a/js/index.ts +++ b/js/index.ts @@ -1,6 +1,7 @@ import { html, css, LitElement } from "lit"; import { customElement, property, state } from "lit/decorators.js"; import { SwitchManagerBlueprint, SwitchManagerConfig } from "./types"; +import { HomeAssistant } from "@hass/types"; import memoizeOne from "memoize-one"; import { mdiPlus, @@ -26,10 +27,14 @@ import { fabStyle } from "./styles"; @customElement('switch-manager-index') class SwitchManagerIndex extends LitElement { - @property() hass!: any; + @property() hass!: HomeAssistant; + @property() narrow; + @property() panel; + @property() route; + @state() private _data: any[] = []; private _columns = memoizeOne( @@ -177,7 +182,7 @@ class SwitchManagerIndex extends LitElement private _populateSwitches() { const __data = []; - this.hass.callWS({type: buildWSPath('configs')}).then( promise => { + this.hass.callWS({type: buildWSPath('configs')}).then( promise => { Object.values(promise.configs).forEach( (_switch: SwitchManagerConfig) => { let blueprint; if( _switch.valid_blueprint ) @@ -207,7 +212,7 @@ class SwitchManagerIndex extends LitElement private async _toggleEnabled( id: string, enabled: boolean ) { - this.hass.callWS({ type: buildWSPath('config/enabled'), enabled: !enabled, config_id: id }).then( r => { + this.hass.callWS({ type: buildWSPath('config/enabled'), enabled: !enabled, config_id: id }).then( r => { this._populateSwitches(); showToast(this, { message: `Switch ${r.enabled ? 'Enabled':'Disabled'}` diff --git a/js/main.ts b/js/main.ts index 69d5e45b..016cfefd 100644 --- a/js/main.ts +++ b/js/main.ts @@ -1,6 +1,6 @@ import { customElement, property, state } from "lit/decorators.js"; import { html, LitElement } from "lit"; - +import { HomeAssistant } from "@hass/types"; import "./index"; import "./switch-editor"; import { loadComponents } from "./helpers"; @@ -8,9 +8,12 @@ import { loadComponents } from "./helpers"; @customElement('switch-manager-panel') class SwitchManagerPanel extends LitElement { - @property() hass!: any; + @property() hass!: HomeAssistant; + @property() narrow; + @property() panel; + @state() params = {}; @state() component_name = "custom"; diff --git a/js/switch-editor.ts b/js/switch-editor.ts index 39350c6c..e5e1413f 100644 --- a/js/switch-editor.ts +++ b/js/switch-editor.ts @@ -14,6 +14,7 @@ import { } from "@mdi/js"; import { MODES, SwitchManagerBlueprint, SwitchManagerBlueprintCondition, SwitchManagerConfig, SwitchManagerConfigButton } from "./types"; import { haStyle } from "@hass/resources/styles"; +import { HomeAssistant } from "@hass/types"; import { subscribeMQTTTopic } from "@hass/data/mqtt"; import { buildAssetUrl, @@ -31,7 +32,7 @@ import "./button-actions"; class SwitchManagerSwitchEditor extends LitElement { - @property() hass!: any; + @property() hass!: HomeAssistant; @property() narrow; @property() panel; @property() route; @@ -255,9 +256,10 @@ class SwitchManagerSwitchEditor extends LitElement } h3, #identifier { padding-left: 25px; + } + #identifier { position: relative; } - #identifier-input { width: 300px; } @@ -382,15 +384,15 @@ class SwitchManagerSwitchEditor extends LitElement { if( 'id' in this.params ) { this.is_new = false; - this.hass.callWS({type: buildWSPath('configs'), config_id: this.params.id}).then( promise => { - this._setConfig(promise.config); + this.hass.callWS({type: buildWSPath('configs'), config_id: this.params.id}).then( r => { + this._setConfig(r.config); }); } else { this.is_new = true; this._dirty = true; if( 'blueprint' in this.params ) - this._loadBlueprint(this.params.blueprint).then( promise => { - this._setConfig( createConfigFromBlueprint(promise.blueprint) ); + this._loadBlueprint(this.params.blueprint).then( r => { + this._setConfig( createConfigFromBlueprint(r.blueprint) ); this._showRenameDialog(); }); } @@ -398,7 +400,7 @@ class SwitchManagerSwitchEditor extends LitElement private _loadBlueprint(id: string) { - return this.hass.callWS({type: buildWSPath('blueprints'), blueprint_id: id}); + return this.hass.callWS({type: buildWSPath('blueprints'), blueprint_id: id}); } private _setConfig( config: SwitchManagerConfig ) @@ -513,7 +515,7 @@ class SwitchManagerSwitchEditor extends LitElement this._block_save = true; this._dirty = false; - this.hass.callWS({ + this.hass.callWS({ type: buildWSPath('config/save'), config: {...this.config, blueprint: this.config.blueprint.id} }).then(r => { @@ -673,7 +675,7 @@ class SwitchManagerSwitchEditor extends LitElement private _toggleEnabled() { - this.hass.callWS({ type: buildWSPath('config/enabled'), enabled: !this.config.enabled, config_id: this.config.id }).then( r => { + this.hass.callWS({ type: buildWSPath('config/enabled'), enabled: !this.config.enabled, config_id: this.config.id }).then( r => { this.config.enabled = r.enabled; this.requestUpdate('config'); showToast(this, { message: `Switch ${r.enabled? 'Enabled':'Disabled'}` }); diff --git a/package.json b/package.json index b55a2b27..d5f4d923 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "switch_manager", "private": true, - "version": "0.1.2", + "version": "0.1.3", "description": "Home Assistant Frontend for Switch Manager", "scripts": { "build": "rollup -c",