def test_flux_with_multiple_lights(self): """Test the flux switch with multiple light entities.""" platform = loader.get_component('light.test') platform.init() self.assertTrue( setup_component(self.hass, light.DOMAIN, {light.DOMAIN: {CONF_PLATFORM: 'test'}})) dev1, dev2, dev3 = platform.DEVICES light.turn_on(self.hass, entity_id=dev2.entity_id) self.hass.block_till_done() light.turn_on(self.hass, entity_id=dev3.entity_id) self.hass.block_till_done() state = self.hass.states.get(dev1.entity_id) self.assertEqual(STATE_ON, state.state) self.assertIsNone(state.attributes.get('xy_color')) self.assertIsNone(state.attributes.get('brightness')) state = self.hass.states.get(dev2.entity_id) self.assertEqual(STATE_ON, state.state) self.assertIsNone(state.attributes.get('xy_color')) self.assertIsNone(state.attributes.get('brightness')) state = self.hass.states.get(dev3.entity_id) self.assertEqual(STATE_ON, state.state) self.assertIsNone(state.attributes.get('xy_color')) self.assertIsNone(state.attributes.get('brightness')) test_time = dt_util.now().replace(hour=12, minute=0, second=0) sunset_time = test_time.replace(hour=17, minute=0, second=0) sunrise_time = test_time.replace(hour=5, minute=0, second=0) def event_date(hass, event, now=None): if event == 'sunrise': print('sunrise {}'.format(sunrise_time)) return sunrise_time else: print('sunset {}'.format(sunset_time)) return sunset_time with patch('homeassistant.util.dt.now', return_value=test_time): with patch('homeassistant.helpers.sun.get_astral_event_date', side_effect=event_date): assert setup_component(self.hass, switch.DOMAIN, { switch.DOMAIN: { 'platform': 'flux', 'name': 'flux', 'lights': [dev1.entity_id, dev2.entity_id, dev3.entity_id] } }) turn_on_calls = mock_service( self.hass, light.DOMAIN, SERVICE_TURN_ON) switch.turn_on(self.hass, 'switch.flux') self.hass.block_till_done() fire_time_changed(self.hass, test_time) self.hass.block_till_done() call = turn_on_calls[-1] self.assertEqual(call.data[light.ATTR_BRIGHTNESS], 171) self.assertEqual(call.data[light.ATTR_XY_COLOR], [0.452, 0.386]) call = turn_on_calls[-2] self.assertEqual(call.data[light.ATTR_BRIGHTNESS], 171) self.assertEqual(call.data[light.ATTR_XY_COLOR], [0.452, 0.386]) call = turn_on_calls[-3] self.assertEqual(call.data[light.ATTR_BRIGHTNESS], 171) self.assertEqual(call.data[light.ATTR_XY_COLOR], [0.452, 0.386])
def process_event(self, event): old = self._state # Update state if applicable if event == Events.Disarm: self._state = STATE_ALARM_DISARMED elif event == Events.Trigger: self._state = STATE_ALARM_TRIGGERED elif old == STATE_ALARM_DISARMED: if event == Events.ArmHome: self._state = STATE_ALARM_ARMED_HOME elif event == Events.ArmAway: self._state = STATE_ALARM_PENDING elif event == Events.ArmPerimeter: self._state = STATE_ALARM_ARMED_PERIMETER elif old == STATE_ALARM_PENDING: if event == Events.Timeout: self._state = STATE_ALARM_ARMED_AWAY elif old == STATE_ALARM_ARMED_HOME or \ old == STATE_ALARM_ARMED_AWAY or \ old == STATE_ALARM_ARMED_PERIMETER: if event == Events.ImmediateTrip: self._state = STATE_ALARM_TRIGGERED elif event == Events.DelayedTrip: self._state = STATE_ALARM_WARNING elif old == STATE_ALARM_WARNING: if event == Events.Timeout: self._state = STATE_ALARM_TRIGGERED elif old == STATE_ALARM_TRIGGERED: if event == Events.Timeout: self._state = self._returnto new = self._state if old != new: _LOGGER.debug("Alarm changing from {} to {}".format(old, new)) # Things to do on entering state if new == STATE_ALARM_WARNING: _LOGGER.debug("Turning on warning") switch.turn_on(self._hass, self._warning) self._timeoutat = now() + self._pending_time elif new == STATE_ALARM_TRIGGERED: _LOGGER.debug("Turning on alarm") switch.turn_on(self._hass, self._alarm) self._timeoutat = now() + self._trigger_time elif new == STATE_ALARM_PENDING: _LOGGER.debug("Pending user leaving house") switch.turn_on(self._hass, self._warning) self._timeoutat = now() + self._pending_time self._returnto = STATE_ALARM_ARMED_AWAY self.setsignals(Events.ArmAway) elif new == STATE_ALARM_ARMED_HOME: self._returnto = new self.setsignals(Events.ArmHome) elif new == STATE_ALARM_ARMED_AWAY: self._returnto = new self.setsignals(Events.ArmAway) elif new == STATE_ALARM_ARMED_PERIMETER: self._returnto = new self.setsignals(Events.ArmPerimeter) elif new == STATE_ALARM_DISARMED: self._returnto = new self.clearsignals() # Things to do on leaving state if old == STATE_ALARM_WARNING or old == STATE_ALARM_PENDING: _LOGGER.debug("Turning off warning") switch.turn_off(self._hass, self._warning) elif old == STATE_ALARM_TRIGGERED: _LOGGER.debug("Turning off alarm") switch.turn_off(self._hass, self._alarm) # Let HA know that something changed self.schedule_update_ha_state()