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,
+ },
+ },
});