From ae41787f5f91853e66f33edd0cd3c073797b520a Mon Sep 17 00:00:00 2001 From: Dan Smith Date: Wed, 17 Feb 2016 15:56:49 -0800 Subject: [PATCH] Adjust the binary_sensor icon according to sensor_class This makes us call stateIcon() from computeIcon() instead of domainIcon(), and breaks out the actual icon determination logic into a separate function. I tested with a sensor in a card and a badge and it looks good. --- src/components/entity/ha-state-label-badge.js | 3 ++- src/util/state-icon.js | 22 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/components/entity/ha-state-label-badge.js b/src/components/entity/ha-state-label-badge.js index 84142f4681..03b3129d58 100644 --- a/src/components/entity/ha-state-label-badge.js +++ b/src/components/entity/ha-state-label-badge.js @@ -2,6 +2,7 @@ import Polymer from '../../polymer'; import hass from '../../util/home-assistant-js-instance'; import domainIcon from '../../util/domain-icon'; import canToggle from '../../util/can-toggle'; +import stateIcon from '../../util/state-icon'; require('../../components/ha-label-badge'); @@ -84,7 +85,7 @@ export default new Polymer({ case 'scene': case 'updater': case 'script': - return domainIcon(state.domain, state.state); + return stateIcon(state); case 'sun': return state.state === 'above_horizon' ? domainIcon(state.domain) : 'mdi:brightness-3'; diff --git a/src/util/state-icon.js b/src/util/state-icon.js index 4cc1829398..f2834daf1f 100644 --- a/src/util/state-icon.js +++ b/src/util/state-icon.js @@ -4,6 +4,26 @@ import hass from './home-assistant-js-instance'; const { util: { temperatureUnits } } = hass; +function binarySensorIcon(state) { + const activated = state.state && state.state === 'off'; + switch (state.attributes.sensor_class) { + case 'opening': + return activated ? 'mdi:crop-square' : 'mdi:exit-to-app'; + case 'moisture': + return activated ? 'mdi:water-off' : 'mdi:water'; + case 'safety': + case 'gas': + case 'smoke': + case 'power': + return activated ? 'mdi:verified' : 'mdi:alert'; + case 'motion': + return activated ? 'mdi:walk' : 'mdi:run'; + case 'digital': + default: + return activated ? 'mdi:radiobox-blank' : 'mdi:checkbox-marked-circle'; + } +} + export default function stateIcon(state) { if (!state) { return defaultIcon; @@ -20,6 +40,8 @@ export default function stateIcon(state) { } else if (unit === 'Mice') { return 'mdi:mouse-variant'; } + } else if (state.domain === 'binary_sensor') { + return binarySensorIcon(state); } return domainIcon(state.domain, state.state);