2014-11-02 17:41:41 +00:00
|
|
|
"""
|
|
|
|
homeassistant.components.demo
|
|
|
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
|
|
|
|
|
|
|
Sets up a demo environment that mimics interaction with devices
|
|
|
|
"""
|
2015-01-19 08:02:25 +00:00
|
|
|
import time
|
2014-11-02 17:41:41 +00:00
|
|
|
|
|
|
|
import homeassistant as ha
|
2015-02-28 15:31:39 +00:00
|
|
|
import homeassistant.bootstrap as bootstrap
|
2014-11-05 07:34:19 +00:00
|
|
|
import homeassistant.loader as loader
|
2014-12-07 07:57:02 +00:00
|
|
|
from homeassistant.const import (
|
2015-02-28 15:31:39 +00:00
|
|
|
CONF_PLATFORM, ATTR_ENTITY_PICTURE, STATE_ON,
|
2015-01-12 05:21:18 +00:00
|
|
|
CONF_LATITUDE, CONF_LONGITUDE)
|
2014-11-02 17:41:41 +00:00
|
|
|
|
|
|
|
DOMAIN = "demo"
|
|
|
|
|
|
|
|
DEPENDENCIES = []
|
|
|
|
|
2015-03-04 07:50:54 +00:00
|
|
|
COMPONENTS_WITH_DEMO_PLATFORM = [
|
|
|
|
'switch', 'light', 'thermostat', 'sensor', 'media_player']
|
2015-02-28 15:31:39 +00:00
|
|
|
|
2014-11-02 17:41:41 +00:00
|
|
|
|
|
|
|
def setup(hass, config):
|
|
|
|
""" Setup a demo environment. """
|
2014-11-05 07:34:19 +00:00
|
|
|
group = loader.get_component('group')
|
2015-01-19 08:02:25 +00:00
|
|
|
configurator = loader.get_component('configurator')
|
2014-11-02 17:41:41 +00:00
|
|
|
|
2014-11-29 06:49:29 +00:00
|
|
|
config.setdefault(ha.DOMAIN, {})
|
|
|
|
config.setdefault(DOMAIN, {})
|
|
|
|
|
2014-11-02 17:41:41 +00:00
|
|
|
if config[DOMAIN].get('hide_demo_state') != '1':
|
|
|
|
hass.states.set('a.Demo_Mode', 'Enabled')
|
|
|
|
|
|
|
|
# Setup sun
|
2014-12-07 07:57:02 +00:00
|
|
|
if CONF_LATITUDE not in config[ha.DOMAIN]:
|
|
|
|
config[ha.DOMAIN][CONF_LATITUDE] = '32.87336'
|
2014-11-02 17:41:41 +00:00
|
|
|
|
2014-12-07 07:57:02 +00:00
|
|
|
if CONF_LONGITUDE not in config[ha.DOMAIN]:
|
|
|
|
config[ha.DOMAIN][CONF_LONGITUDE] = '-117.22743'
|
2014-11-02 17:41:41 +00:00
|
|
|
|
2014-11-05 07:34:19 +00:00
|
|
|
loader.get_component('sun').setup(hass, config)
|
2014-11-02 17:41:41 +00:00
|
|
|
|
2015-02-28 15:31:39 +00:00
|
|
|
# Setup demo platforms
|
|
|
|
for component in COMPONENTS_WITH_DEMO_PLATFORM:
|
|
|
|
bootstrap.setup_component(
|
|
|
|
hass, component, {component: {CONF_PLATFORM: 'demo'}})
|
2014-11-02 17:41:41 +00:00
|
|
|
|
|
|
|
# Setup room groups
|
2015-02-28 15:31:39 +00:00
|
|
|
lights = hass.states.entity_ids('light')
|
|
|
|
switches = hass.states.entity_ids('switch')
|
|
|
|
group.setup_group(hass, 'living room', [lights[0], lights[1], switches[0]])
|
|
|
|
group.setup_group(hass, 'bedroom', [lights[2], switches[1]])
|
2014-11-02 17:41:41 +00:00
|
|
|
|
|
|
|
# Setup process
|
|
|
|
hass.states.set("process.XBMC", STATE_ON)
|
|
|
|
|
|
|
|
# Setup device tracker
|
2014-11-02 19:22:22 +00:00
|
|
|
hass.states.set("device_tracker.Paulus", "home",
|
|
|
|
{ATTR_ENTITY_PICTURE:
|
|
|
|
"http://graph.facebook.com/schoutsen/picture"})
|
|
|
|
hass.states.set("device_tracker.Anne_Therese", "not_home",
|
|
|
|
{ATTR_ENTITY_PICTURE:
|
|
|
|
"http://graph.facebook.com/anne.t.frederiksen/picture"})
|
|
|
|
|
2014-11-02 17:41:41 +00:00
|
|
|
hass.states.set("group.all_devices", "home",
|
|
|
|
{
|
|
|
|
"auto": True,
|
|
|
|
"entity_id": [
|
|
|
|
"device_tracker.Paulus",
|
|
|
|
"device_tracker.Anne_Therese"
|
|
|
|
]
|
|
|
|
})
|
|
|
|
|
2015-02-28 15:31:39 +00:00
|
|
|
# Setup configurator
|
2015-01-19 08:02:25 +00:00
|
|
|
configurator_ids = []
|
|
|
|
|
|
|
|
def hue_configuration_callback(data):
|
|
|
|
""" Fake callback, mark config as done. """
|
|
|
|
time.sleep(2)
|
|
|
|
|
|
|
|
# First time it is called, pretend it failed.
|
|
|
|
if len(configurator_ids) == 1:
|
|
|
|
configurator.notify_errors(
|
2015-01-20 05:39:24 +00:00
|
|
|
configurator_ids[0],
|
2015-01-19 08:02:25 +00:00
|
|
|
"Failed to register, please try again.")
|
|
|
|
|
|
|
|
configurator_ids.append(0)
|
|
|
|
else:
|
2015-01-20 05:39:24 +00:00
|
|
|
configurator.request_done(configurator_ids[0])
|
2015-01-19 08:02:25 +00:00
|
|
|
|
|
|
|
request_id = configurator.request_config(
|
|
|
|
hass, "Philips Hue", hue_configuration_callback,
|
|
|
|
description=("Press the button on the bridge to register Philips Hue "
|
|
|
|
"with Home Assistant."),
|
|
|
|
description_image="/static/images/config_philips_hue.jpg",
|
|
|
|
submit_caption="I have pressed the button"
|
|
|
|
)
|
|
|
|
|
|
|
|
configurator_ids.append(request_id)
|
|
|
|
|
2014-11-02 17:41:41 +00:00
|
|
|
return True
|