diff --git a/src/components/entity/ha-entity-toggle.html b/src/components/entity/ha-entity-toggle.html index 0c0d72ef9d..e166cb7344 100644 --- a/src/components/entity/ha-entity-toggle.html +++ b/src/components/entity/ha-entity-toggle.html @@ -1,16 +1,29 @@ + diff --git a/src/components/entity/ha-entity-toggle.js b/src/components/entity/ha-entity-toggle.js index 03a15084c4..0bd1309771 100644 --- a/src/components/entity/ha-entity-toggle.js +++ b/src/components/entity/ha-entity-toggle.js @@ -10,13 +10,18 @@ export default new Polymer({ properties: { stateObj: { type: Object, - observer: 'stateObjChanged', }, toggleChecked: { type: Boolean, value: false, }, + + isOn: { + type: Boolean, + computed: 'computeIsOn(stateObj)', + observer: 'isOnChanged', + }, }, ready() { @@ -25,34 +30,34 @@ export default new Polymer({ toggleChanged(ev) { const newVal = ev.target.checked; - const curVal = this._checkToggle(this.stateObj); - if (newVal && !curVal) { + if (newVal && !this.isOn) { this._call_service(true); - } else if (!newVal && curVal) { + } else if (!newVal && this.isOn) { this._call_service(false); } }, - stateObjChanged(newVal) { - if (newVal) { - this.updateToggle(newVal); - } - }, - - updateToggle(stateObj) { - this.toggleChecked = this._checkToggle(stateObj); + isOnChanged(newVal) { + this.toggleChecked = newVal; }, forceStateChange() { - const newState = this._checkToggle(this.stateObj); - if (this.toggleChecked === newState) { + if (this.toggleChecked === this.isOn) { this.toggleChecked = !this.toggleChecked; } - this.toggleChecked = newState; + this.toggleChecked = this.isOn; }, - _checkToggle(stateObj) { + turnOn() { + this._call_service(true); + }, + + turnOff() { + this._call_service(false); + }, + + computeIsOn(stateObj) { return stateObj && stateObj.state !== 'off' && stateObj.state !== 'unlocked' && stateObj.state !== 'closed'; }, @@ -76,7 +81,11 @@ export default new Polymer({ service = turnOn ? 'turn_on' : 'turn_off'; } - serviceActions.callService(domain, service, { entity_id: this.stateObj.entityId }) - .then(() => this.forceStateChange()); + const call = serviceActions.callService(domain, service, + { entity_id: this.stateObj.entityId }); + + if (!this.stateObj.attributes.assumed_state) { + call.then(() => this.forceStateChange()); + } }, }); diff --git a/src/state-summary/state-card-toggle.html b/src/state-summary/state-card-toggle.html index 94cf5b644e..15397f1107 100755 --- a/src/state-summary/state-card-toggle.html +++ b/src/state-summary/state-card-toggle.html @@ -1,5 +1,4 @@ - diff --git a/src/state-summary/state-card-toggle.js b/src/state-summary/state-card-toggle.js index 18b620bf2c..21fe460d61 100644 --- a/src/state-summary/state-card-toggle.js +++ b/src/state-summary/state-card-toggle.js @@ -5,4 +5,10 @@ require('../components/entity/ha-entity-toggle'); export default new Polymer({ is: 'state-card-toggle', + + properties: { + stateObj: { + type: Object, + }, + }, });