Skip to content
Snippets Groups Projects
Commit ac8d70d5 authored by Paulus Schoutsen's avatar Paulus Schoutsen
Browse files

Added a demo mode

parent a4dd58cf
No related branches found
No related tags found
No related merge requests found
......@@ -28,7 +28,7 @@ The system is built modular so support for other devices or actions can be imple
## Installation instructions / Quick-start guide
Running Home Assistant requires that python3 is installed.
Running Home Assistant requires that python3 and the packages pyephem and requests are installed.
Run the following code to get up and running with the minimum setup:
......@@ -40,7 +40,7 @@ pip3 install -r requirements.txt
python3 start.py
```
This will start the Home Assistant server and its web interface on [http://127.0.0.1:8123](http://127.0.0.1:8123). The default password is 'password'.
This will start the Home Assistant server and create an initial configuration file in `config/home-assistant.conf` that is setup for demo mode. It will launch its web interface on [http://127.0.0.1:8123](http://127.0.0.1:8123). The default password is 'password'.
If you're using Docker, you can use
......@@ -48,7 +48,7 @@ If you're using Docker, you can use
docker run -d --name="home-assistant" -v /path/to/homeassistant/config:/config -v /etc/localtime:/etc/localtime:ro -p 8123:8123 balloob/home-assistant
```
After you got the bare minimum running it is time to enable some components and get started. An example configuration file has been provided in [/config/home-assistant.conf.example](https://github.com/balloob/home-assistant/blob/master/config/home-assistant.conf.example).
After you got the demo mode running it is time to enable some real components and get started. An example configuration file has been provided in [/config/home-assistant.conf.example](https://github.com/balloob/home-assistant/blob/master/config/home-assistant.conf.example).
### Philips Hue
To get Philips Hue working you will have to connect Home Assistant to the Hue bridge.
......
"""
homeassistant.components.demo
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Sets up a demo environment that mimics interaction with devices
"""
import random
import homeassistant as ha
import homeassistant.components.group as group
from homeassistant.components import (SERVICE_TURN_ON, SERVICE_TURN_OFF,
STATE_ON, STATE_OFF, get_component,
extract_entity_ids)
from homeassistant.components.light import (ATTR_XY_COLOR, ATTR_BRIGHTNESS,
GROUP_NAME_ALL_LIGHTS)
from homeassistant.util import split_entity_id
DOMAIN = "demo"
DEPENDENCIES = []
def setup(hass, config):
""" Setup a demo environment. """
if config[DOMAIN].get('hide_demo_state') != '1':
hass.states.set('a.Demo_Mode', 'Enabled')
light_colors = [
[0.861, 0.3259],
[0.6389, 0.3028],
[0.1684, 0.0416]
]
def mock_turn_on(service):
""" Will fake the component has been turned on. """
for entity_id in extract_entity_ids(hass, service):
domain, _ = split_entity_id(entity_id)
if domain == "light":
data = {ATTR_BRIGHTNESS: 200,
ATTR_XY_COLOR: random.choice(light_colors)}
else:
data = None
hass.states.set(entity_id, STATE_ON, data)
def mock_turn_off(service):
""" Will fake the component has been turned off. """
for entity_id in extract_entity_ids(hass, service):
hass.states.set(entity_id, STATE_OFF)
# Setup sun
if ha.CONF_LATITUDE not in config[ha.DOMAIN]:
config[ha.DOMAIN][ha.CONF_LATITUDE] = '32.87336'
if ha.CONF_LONGITUDE not in config[ha.DOMAIN]:
config[ha.DOMAIN][ha.CONF_LONGITUDE] = '-117.22743'
get_component('sun').setup(hass, config)
# Setup fake lights
lights = ['light.Bowl', 'light.Ceiling', 'light.TV_Back_light',
'light.Bed_light']
hass.services.register('light', SERVICE_TURN_ON, mock_turn_on)
hass.services.register('light', SERVICE_TURN_OFF, mock_turn_off)
mock_turn_on(ha.ServiceCall('light', SERVICE_TURN_ON,
{'entity_id': lights[0:2]}))
mock_turn_off(ha.ServiceCall('light', SERVICE_TURN_OFF,
{'entity_id': lights[2:]}))
group.setup_group(hass, GROUP_NAME_ALL_LIGHTS, lights, False)
# Setup Wemo
wemos = ['wemo.AC', 'wemo.Christmas_Lights']
hass.services.register('wemo', SERVICE_TURN_ON, mock_turn_on)
hass.services.register('wemo', SERVICE_TURN_OFF, mock_turn_off)
mock_turn_on(ha.ServiceCall('wemo', SERVICE_TURN_ON,
{'entity_id': wemos[0:1]}))
mock_turn_off(ha.ServiceCall('wemo', SERVICE_TURN_OFF,
{'entity_id': wemos[1:]}))
# Setup room groups
group.setup_group(hass, 'living_room', lights[0:3] + wemos[0:1])
group.setup_group(hass, 'bedroom', [lights[3]] + wemos[1:])
# Setup process
hass.states.set("process.XBMC", STATE_ON)
# Setup device tracker
hass.states.set("device_tracker.Paulus", "home")
hass.states.set("device_tracker.Anne_Therese", "not_home")
hass.states.set("group.all_devices", "home",
{
"auto": True,
"entity_id": [
"device_tracker.Paulus",
"device_tracker.Anne_Therese"
]
})
# Setup chromecast
hass.states.set("chromecast.Living_Rm", "Netflix",
{'friendly_name': 'Living Room'})
return True
......@@ -16,7 +16,8 @@ else:
if not os.path.isfile(config_path):
with open(config_path, 'w') as conf:
conf.write("[http]\n")
conf.write("api_password=password\n")
conf.write("api_password=password\n\n")
conf.write("[demo]\n")
hass = homeassistant.bootstrap.from_config_file(config_path)
hass.start()
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment