From 2fd443fe2cf54fcfa29f21404011c2d1e832daa4 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Wed, 25 Apr 2018 14:19:41 -0400 Subject: [PATCH] fix broken links --- docs/architecture_components.md | 31 +- ...{architecture.md => architecture_index.md} | 24 +- docs/building_integrations.md | 5 + docs/component_loading.md | 18 - ...t.md => creating_component_code_review.md} | 4 +- ...md => creating_component_deps_and_reqs.md} | 2 +- ...ery.md => creating_component_discovery.md} | 4 +- ...events.md => creating_component_events.md} | 0 ...> creating_component_generic_discovery.md} | 0 ...ponents.md => creating_component_index.md} | 3 +- docs/creating_component_loading.md | 14 + ...states.md => creating_component_states.md} | 0 ...rm.md => creating_platform_code_review.md} | 4 +- ....md => creating_platform_example_light.md} | 0 ...md => creating_platform_example_sensor.md} | 0 ...platform.md => creating_platform_index.md} | 7 +- docs/development_101.md | 16 +- docs/development_checklist.md | 2 +- docs/development_environment.md | 22 +- docs/development_events.md | 8 +- docs/development_guidelines.md | 2 +- docs/{development.md => development_index.md} | 1 + docs/development_states.md | 12 +- docs/development_submitting.md | 6 +- docs/development_testing.md | 2 +- docs/development_validation.md | 2 +- docs/documentation_create_page.md | 5 +- docs/documentation_index.md | 11 +- docs/external_api_rest.md | 18 +- ..._python.md => external_api_rest_python.md} | 8 +- docs/external_api_server_sent_events.md | 4 +- docs/external_api_websocket.md | 2 +- docs/frontend_add_card.md | 6 +- docs/frontend_add_more_info.md | 8 +- docs/frontend_creating_custom_panels.md | 6 +- docs/frontend_creating_custom_ui.md | 11 +- docs/{frontend.md => frontend_index.md} | 9 +- docs/hassio_addon_publishing.md | 4 +- docs/hassio_debugging.md | 8 +- docs/intent_index.md | 12 +- docs/internationalization_translation.md | 8 +- .../2016-03-11-blog-post.md | 18 - .../2017-04-10-blog-post-two.md | 18 - .../2017-09-25-testing-rss.md | 11 - .../2017-09-26-adding-rss.md | 10 - .../2017-10-24-new-version-1.0.0.md | 8 - website/core/Footer.js | 16 +- website/i18n/en.json | 50 +- website/pages/en/index.js | 124 ++- website/sidebars.json | 97 +- website/siteConfig.js | 12 +- website/static/css/custom.css | 10 + .../en/architecture/component_interaction.png | Bin 0 -> 27977 bytes .../img/en/architecture/ha_architecture.svg | 856 +++++++++++++++++ .../en/architecture/ha_full_architecture.png | Bin 0 -> 51006 bytes .../home_automation_landscape.svg | 904 ++++++++++++++++++ .../static/img/en/dev-tools/about-icon.png | Bin 0 -> 1080 bytes .../static/img/en/dev-tools/events-icon.png | Bin 0 -> 1646 bytes website/static/img/en/dev-tools/mqtt-icon.png | Bin 0 -> 4401 bytes .../static/img/en/dev-tools/services-icon.png | Bin 0 -> 1116 bytes .../static/img/en/dev-tools/states-icon.png | Bin 0 -> 677 bytes .../img/en/dev-tools/templates-icon.png | Bin 0 -> 862 bytes .../img/en/frontend/frontend-badges.png | Bin 0 -> 25091 bytes .../img/en/frontend/frontend-cards1.png | Bin 0 -> 13465 bytes .../en/frontend/frontend-more-info-light.png | Bin 0 -> 23225 bytes website/static/img/en/intents/overview.png | Bin 0 -> 34753 bytes website/static/img/oss_logo.png | Bin 4370 -> 0 bytes 67 files changed, 2084 insertions(+), 359 deletions(-) rename docs/{architecture.md => architecture_index.md} (62%) create mode 100644 docs/building_integrations.md delete mode 100644 docs/component_loading.md rename docs/{code_review_component.md => creating_component_code_review.md} (90%) rename docs/{component_deps_and_reqs.md => creating_component_deps_and_reqs.md} (79%) rename docs/{component_discovery.md => creating_component_discovery.md} (96%) rename docs/{component_events.md => creating_component_events.md} (100%) rename docs/{component_generic_discovery.md => creating_component_generic_discovery.md} (100%) rename docs/{creating_components.md => creating_component_index.md} (78%) create mode 100644 docs/creating_component_loading.md rename docs/{component_states.md => creating_component_states.md} (100%) rename docs/{code_review_platform.md => creating_platform_code_review.md} (94%) rename docs/{platform_example_light.md => creating_platform_example_light.md} (100%) rename docs/{platform_example_sensor.md => creating_platform_example_sensor.md} (100%) rename docs/{add_new_platform.md => creating_platform_index.md} (90%) rename docs/{development.md => development_index.md} (98%) rename docs/{external_api_python.md => external_api_rest_python.md} (91%) rename docs/{frontend.md => frontend_index.md} (91%) delete mode 100755 website/blog-examples-from-docusaurus/2016-03-11-blog-post.md delete mode 100644 website/blog-examples-from-docusaurus/2017-04-10-blog-post-two.md delete mode 100644 website/blog-examples-from-docusaurus/2017-09-25-testing-rss.md delete mode 100644 website/blog-examples-from-docusaurus/2017-09-26-adding-rss.md delete mode 100644 website/blog-examples-from-docusaurus/2017-10-24-new-version-1.0.0.md create mode 100644 website/static/img/en/architecture/component_interaction.png create mode 100644 website/static/img/en/architecture/ha_architecture.svg create mode 100644 website/static/img/en/architecture/ha_full_architecture.png create mode 100644 website/static/img/en/architecture/home_automation_landscape.svg create mode 100644 website/static/img/en/dev-tools/about-icon.png create mode 100644 website/static/img/en/dev-tools/events-icon.png create mode 100644 website/static/img/en/dev-tools/mqtt-icon.png create mode 100644 website/static/img/en/dev-tools/services-icon.png create mode 100644 website/static/img/en/dev-tools/states-icon.png create mode 100644 website/static/img/en/dev-tools/templates-icon.png create mode 100644 website/static/img/en/frontend/frontend-badges.png create mode 100644 website/static/img/en/frontend/frontend-cards1.png create mode 100644 website/static/img/en/frontend/frontend-more-info-light.png create mode 100644 website/static/img/en/intents/overview.png delete mode 100644 website/static/img/oss_logo.png diff --git a/docs/architecture_components.md b/docs/architecture_components.md index f9a806a7..293f99b6 100644 --- a/docs/architecture_components.md +++ b/docs/architecture_components.md @@ -2,28 +2,25 @@ title: "Components Architecture" --- -Home Assistant can be extended with **components**. Each component is responsible for a specific domain within Home Assistant. Components can listen for or trigger events, offer services, and maintain states. Components are written in Python and can do all the goodness that Python has to offer. Out of the box, Home Assistant offers a bunch of [built-in components]({{site_root}}/components/). +Home Assistant can be extended with **components**. Each component is responsible for a specific domain within Home Assistant. Components can listen for or trigger events, offer services, and maintain states. Components are written in Python and can do all the goodness that Python has to offer. Out of the box, Home Assistant offers a bunch of [built-in components](https://www.home-assistant.io/components/). -

-Diagram showing interaction between components and the Home Assistant core. -Diagram showing interaction between components and the Home Assistant core -

+Diagram showing interaction between components and the Home Assistant core. There are two types of components within Home Assistant: components that interact with an Internet of Things domain, and components that respond to events that happen within Home Assistant. Read on to learn about each type! -#### Components that interact with an Internet-of-Things domain +## Components that interact with an Internet-of-Things domain These components track devices within a specific domain and consist of a core part and platform-specific logic. These components make their information available via the State Machine and the Event Bus. The components also register services in the Service Registry to expose control of the devices. -For example, the built-in [`switch` component](/components/switch/) is responsible for interaction with different types of switches. A platform provides support for a particular kind or brand of device. For example, a switch could use a WeMo or Orvibo platform and a light component might interact with the Hue or LIFX platform. +For example, the built-in [`switch` component](https://www.home-assistant.io/components/switch/) is responsible for interaction with different types of switches. A platform provides support for a particular kind or brand of device. For example, a switch could use a WeMo or Orvibo platform and a light component might interact with the Hue or LIFX platform. -If you want to add support for a new platform, check out the [add new platform section](/developers/add_new_platform/). +If you want to add support for a new platform, check out the [add new platform section](creating_platform_index.md). -#### Components that respond to events that happen within Home Assistant +## Components that respond to events that happen within Home Assistant These components provide small pieces of home automation logic or involve services that do common tasks within your house. -For example, the [`device_sun_light_trigger` component](/components/device_sun_light_trigger/) tracks the state of devices and the sun to make sure that the lights are turned on when it gets dark and people are home. The component uses logic like this: +For example, the [`device_sun_light_trigger` component](https://www.home-assistant.io/components/device_sun_light_trigger/) tracks the state of devices and the sun to make sure that the lights are turned on when it gets dark and people are home. The component uses logic like this: ```text In the event that device 'Paulus Nexus 5' changes to the 'Home' state: @@ -43,17 +40,13 @@ In the event of the sun setting: Turn on the lights ``` -Look [here](/python_component_automation/) for a comprehensive example of a home automation component. - -### The full picture +## The full picture When we put all the different pieces of Home Assistant together, it's a close match for the initial home automation overview sketch. The smart home AI has not been implemented yet, so it's not included in this picture. -

- - - - Overview of the full Home Assistant architecture with a couple of loaded components and platforms -

+Overview of the full Home Assistant architecture with a couple of loaded components and platforms The platform logic for components uses third-party Python libraries to communicate with the devices. Through this, we can leverage some of the best libraries in the Python community. diff --git a/docs/architecture.md b/docs/architecture_index.md similarity index 62% rename from docs/architecture.md rename to docs/architecture_index.md index 24750290..c441b6f8 100644 --- a/docs/architecture.md +++ b/docs/architecture_index.md @@ -1,22 +1,20 @@ --- title: "Architecture" +sidebar_label: "Introduction" --- Before we dive into the Home Assistant architecture, let's get a clear overview of the home automation landscape as a whole. This way, we can show how the different parts of Home Assistant fit into the picture. -For more information about each part in this overview, check out our blog. Here's the tl;dr version of the blog: +For more information about each part in this overview, check out our blog. Here's the tl;dr version of the blog: * Home Control is responsible for collecting information and controlling devices. * Home Automation triggers commands based on user configurations. * Smart Home triggers commands based on previous behavior. -

- - Home Automation landscape - - Overview of the home automation landscape -

+Home Automation landscape The Home Assistant core is responsible for Home Control. Home Assistant contains four parts which make this possible: @@ -25,9 +23,7 @@ The Home Assistant core is responsible for Home Control. Home Assistant contains * **Service Registry**: listens on the event bus for `call_service` events and allows other code to register services. * **Timer**: sends a `time_changed` event every 1 second on the event bus. -

- - - - Overview of the Home Assistant core architecture -

+Overview of the Home Assistant core architecture diff --git a/docs/building_integrations.md b/docs/building_integrations.md new file mode 100644 index 00000000..339e9826 --- /dev/null +++ b/docs/building_integrations.md @@ -0,0 +1,5 @@ +--- +title: Building Integrations +--- + +Intro on how to build integrations. diff --git a/docs/component_loading.md b/docs/component_loading.md deleted file mode 100644 index d2808f1b..00000000 --- a/docs/component_loading.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: "Loading your components" ---- - -A component will be loaded on start if a section (ie. `light:`) for it exists in the config file. A component can also be loaded if another component is loaded that depends on it. When loading a component Home Assistant will check the following paths: - - * `/custom_components/` - * `homeassistant/components/` (built-in components) - -Once loaded, a component will only be setup if all dependencies can be loaded and are able to setup. Keep an eye on the logs to see if your component could be loaded and initialized. - -

-You can override a built-in component by having a component with the same name in your config/custom_components folder. If the built-in component is inside a subfolder, take care to place your customization in a folder with the same name in config/custom_components/*folder*. Note that overriding built-in components is not recommended and will probably break things! -

- -

-Home Assistant will use the directory that contains your config file as the directory that holds your customizations. By default this is the config folder in your current work directory. You can use a different folder by running Home Assistant with the --config argument: python3 homeassistant --config /YOUR/CONFIG/PATH/. -

diff --git a/docs/code_review_component.md b/docs/creating_component_code_review.md similarity index 90% rename from docs/code_review_component.md rename to docs/creating_component_code_review.md index 3cccb58b..8040938d 100644 --- a/docs/code_review_component.md +++ b/docs/creating_component_code_review.md @@ -4,9 +4,7 @@ title: "Checklist for creating a component" A checklist of things to do when you're adding a new component. -

-Not all existing platforms follow the requirements in this checklist. This cannot be used as a reason to not follow them! -

+> Not all existing platforms follow the requirements in this checklist. This cannot be used as a reason to not follow them! ### 1. Requirements diff --git a/docs/component_deps_and_reqs.md b/docs/creating_component_deps_and_reqs.md similarity index 79% rename from docs/component_deps_and_reqs.md rename to docs/creating_component_deps_and_reqs.md index ec864969..2a46c9df 100644 --- a/docs/component_deps_and_reqs.md +++ b/docs/creating_component_deps_and_reqs.md @@ -14,7 +14,7 @@ DEPENDENCIES = ['mqtt'] ## Requirements -Requirements are Python libraries or modules that you would normally install using `pip` for your component. Home Assistant will try to install the requirements into the `deps` subdirectory of the Home Assistant [configuration directory](/docs/configuration/) if you are not using a `venv` or in something like `path/to/venv/lib/python3.6/site-packages` if you running in a virtual environment. This will make sure that all requirements are present at startup. If steps fails like missing packages for the compilation of a module or other install errors, the component will fail to load. +Requirements are Python libraries or modules that you would normally install using `pip` for your component. Home Assistant will try to install the requirements into the `deps` subdirectory of the Home Assistant [configuration directory](https://www.home-assistant.io/docs/configuration/) if you are not using a `venv` or in something like `path/to/venv/lib/python3.6/site-packages` if you running in a virtual environment. This will make sure that all requirements are present at startup. If steps fails like missing packages for the compilation of a module or other install errors, the component will fail to load. Requirements is a list of strings. Each entry is a `pip` compatible string. For example, the media player Cast platform depends on the Python package PyChromecast v0.6.12: diff --git a/docs/component_discovery.md b/docs/creating_component_discovery.md similarity index 96% rename from docs/component_discovery.md rename to docs/creating_component_discovery.md index 165158fb..a374ab40 100644 --- a/docs/component_discovery.md +++ b/docs/creating_component_discovery.md @@ -2,9 +2,7 @@ title: "Component Discovery" --- -

-This option is only available for built-in components. -

+> This option is only available for built-in components. Home Assistant has a discovery service running in the background to discover new devices. Whenever a new device is discovered, a `SERVICE_DISCOVERED` event will be fired with the found service and the information. The `discovery` component has some knowledge about which components handle which type of services and will ensure those are loaded and listening before firing the `SERVICE_DISCOVERED` event. diff --git a/docs/component_events.md b/docs/creating_component_events.md similarity index 100% rename from docs/component_events.md rename to docs/creating_component_events.md diff --git a/docs/component_generic_discovery.md b/docs/creating_component_generic_discovery.md similarity index 100% rename from docs/component_generic_discovery.md rename to docs/creating_component_generic_discovery.md diff --git a/docs/creating_components.md b/docs/creating_component_index.md similarity index 78% rename from docs/creating_components.md rename to docs/creating_component_index.md index 31724c4c..fbba2f10 100644 --- a/docs/creating_components.md +++ b/docs/creating_component_index.md @@ -1,5 +1,6 @@ --- title: "Creating components" +sidebar_label: "Introduction" --- Alright, you're ready to make your first component. AWESOME. Don't worry, we've tried hard to keep it as easy as possible. @@ -16,5 +17,3 @@ def setup(hass, config): return True ``` - -For more examples, see the [Custom Python Component Examples](/cookbook/#custom-python-component-examples) on our examples page. diff --git a/docs/creating_component_loading.md b/docs/creating_component_loading.md new file mode 100644 index 00000000..c7cf29ad --- /dev/null +++ b/docs/creating_component_loading.md @@ -0,0 +1,14 @@ +--- +title: "Loading your components" +--- + +A component will be loaded on start if a section (ie. `light:`) for it exists in the config file. A component can also be loaded if another component is loaded that depends on it. When loading a component Home Assistant will check the following paths: + + * `/custom_components/` + * `homeassistant/components/` (built-in components) + +Once loaded, a component will only be setup if all dependencies can be loaded and are able to setup. Keep an eye on the logs to see if your component could be loaded and initialized. + +> You can override a built-in component by having a component with the same name in your config/custom_components folder. If the built-in component is inside a subfolder, take care to place your customization in a folder with the same name in config/custom_components/*folder*. Note that overriding built-in components is not recommended and will probably break things! + +> Home Assistant will use the directory that contains your config file as the directory that holds your customizations. By default this is the config folder in your current work directory. You can use a different folder by running Home Assistant with the --config argument: python3 homeassistant --config /YOUR/CONFIG/PATH/. diff --git a/docs/component_states.md b/docs/creating_component_states.md similarity index 100% rename from docs/component_states.md rename to docs/creating_component_states.md diff --git a/docs/code_review_platform.md b/docs/creating_platform_code_review.md similarity index 94% rename from docs/code_review_platform.md rename to docs/creating_platform_code_review.md index acd20e06..d4be58cc 100644 --- a/docs/code_review_platform.md +++ b/docs/creating_platform_code_review.md @@ -4,9 +4,7 @@ title: "Checklist for creating a platform" A checklist of things to do when you're adding a new platform. -

-Not all existing platforms follow the requirements in this checklist. This cannot be used as a reason to not follow them! -

+> Not all existing platforms follow the requirements in this checklist. This cannot be used as a reason to not follow them! ### 1. Requirements diff --git a/docs/platform_example_light.md b/docs/creating_platform_example_light.md similarity index 100% rename from docs/platform_example_light.md rename to docs/creating_platform_example_light.md diff --git a/docs/platform_example_sensor.md b/docs/creating_platform_example_sensor.md similarity index 100% rename from docs/platform_example_sensor.md rename to docs/creating_platform_example_sensor.md diff --git a/docs/add_new_platform.md b/docs/creating_platform_index.md similarity index 90% rename from docs/add_new_platform.md rename to docs/creating_platform_index.md index 6aea200e..937aae99 100644 --- a/docs/add_new_platform.md +++ b/docs/creating_platform_index.md @@ -1,5 +1,6 @@ --- title: "Adding support for a new platform" +sidebar_label: "Introduction" --- Components that interact with devices are called "[Entity Components](https://github.com/home-assistant/home-assistant/blob/dev/homeassistant/helpers/entity_component.py)." They are structured in core and platform logic, which means different brands can use the same logic to handle a light. @@ -8,8 +9,8 @@ For example, the built-in `switch` component consists of various platforms in [` If you're planning to add support for a new type of device to an existing component, you can get away with only writing platform logic. Have a look at how the component works with other platforms and create a similar file for the platform that you want to add: - - [Example sensor platform](/developers/platform_example_sensor): hello world of platforms. - - [Example light platform](/developers/platform_example_light): showing best practices. + - [Example sensor platform](creating_platform_example_sensor.md): hello world of platforms. + - [Example light platform](creating_platform_example_light.md): showing best practices. ### Interfacing with devices @@ -19,7 +20,7 @@ To integrate the third-party library, create an [Entity class](https://github.co ### Requirements and dependencies -Platforms can specify dependencies and requirements [the same way as components](/developers/component_deps_and_reqs): +Platforms can specify dependencies and requirements [the same way as components](creating_component_deps_and_reqs.md): ```python REQUIREMENTS = ['some-package==2.0.0', 'some-other-package==2.5.0'] diff --git a/docs/development_101.md b/docs/development_101.md index f75f1c10..f04585a3 100644 --- a/docs/development_101.md +++ b/docs/development_101.md @@ -2,15 +2,13 @@ title: "Development 101" --- -The goal of development 101 is to get you familiar with the basics of developing for Home Assistant. Before we start, please make sure you familiarize yourself with the [architecture]. +The goal of development 101 is to get you familiar with the basics of developing for Home Assistant. Before we start, please make sure you familiarize yourself with the [architecture](architecture_index.md). To get our code running inside Home Assistant we're going to create a custom component. The first step is to locate your config folder. You can find the path to your config folder by opening the Home Assistant frontend, click on the service developer tool icon. It's the path after the text "Path to configuration.yaml". Inside your configuration directory create a new folder called `custom_components`. It might be that one already exists, that's fine too. This is the folder that Home Assistant will look at when looking for custom code. -

-The Home Assistant API has two variants: a synchronous and an asynchronous version (asyncio). This development course will focus on the synchronous version. -

+> The Home Assistant API has two variants: a synchronous and an asynchronous version (asyncio). This development course will focus on the synchronous version. To verify that everything is working correctly, let's create a small Hello World component. To do so, create a file called `hello_world.py` in your custom components folder. Copy paste the following content to it: @@ -42,9 +40,7 @@ After running `hass`, we should see log entries stating that `hello_world` compo 2018-04-03 21:44:20 INFO (MainThread) [homeassistant.setup] Setting up hello_world ``` -

- -State card showing that Hello World component is working as intended. -

- -[architecture]: /developers/architecture/ +State card showing that Hello World component is working as intended. diff --git a/docs/development_checklist.md b/docs/development_checklist.md index 7459e32e..868703d9 100644 --- a/docs/development_checklist.md +++ b/docs/development_checklist.md @@ -9,5 +9,5 @@ Before you commit any changes, check your work against these requirements: - New dependencies are added to `requirements_all.txt` (if applicable), using `script/gen_requirements_all.py` - The `.coveragerc` file is updated to exclude your platform if there are no tests available or your new code uses a third-party library for communication with the device, service, or sensor - Documentation is developed for [home-assistant.io](/) - * It's OK to start with adding a docstring with configuration details (for example, sample entry for `configuration.yaml` file) to the file header. Visit the [website documentation](/developers/documentation/) for more information about contributing to [home-assistant.io](https://github.com/home-assistant/home-assistant.github.io). + * It's OK to start with adding a docstring with configuration details (for example, sample entry for `configuration.yaml` file) to the file header. Visit the [website documentation](documentation_index.md) for more information about contributing to [home-assistant.io](https://github.com/home-assistant/home-assistant.github.io). diff --git a/docs/development_environment.md b/docs/development_environment.md index 46a92a22..a8f12aaa 100644 --- a/docs/development_environment.md +++ b/docs/development_environment.md @@ -4,9 +4,9 @@ title: "Set up Development Environment" You'll need to set up a development environment if you want to develop a new feature or component for Home Assistant. Read on to learn how to set up. -### Preparing your environment +## Preparing your environment -#### Developing on Linux +### Developing on Linux Install the core dependencies. @@ -20,13 +20,11 @@ In order to run `script/setup` below you will need some more dependencies. $ sudo apt-get install libssl-dev libxml2-dev libxslt1-dev libjpeg-dev libffi-dev libudev-dev zlib1g-dev ``` -

-Different distributions have different package installation mechanisms and sometimes packages names as well. For example Centos would use: `sudo yum install epel-release && sudo yum install python34 python34-devel mysql-devel` -

+> Different distributions have different package installation mechanisms and sometimes packages names as well. For example Centos would use: `sudo yum install epel-release && sudo yum install python34 python34-devel mysql-devel` -Additional dependencies exist if you plan to perform Frontend Development, please read the [Frontend](/developers/frontend/) section to learn more. +Additional dependencies exist if you plan to perform Frontend Development, please read the [Frontend](frontend_index.md) section to learn more. -#### Developing on Windows +### Developing on Windows If you are using Windows as a development platform, make sure that you have the correct Microsoft [Visual C++ build tools](http://landinghub.visualstudio.com/visual-cpp-build-tools) installed. The installation of the most requirements and validation using `tox` will fail if this is not done correctly. Check the [Windows Compilers](https://wiki.python.org/moin/WindowsCompilers) section on the [Python website](https://www.python.org/) for details. @@ -57,7 +55,7 @@ Also, make sure to install or upgrade the `setuptools` Python package. It contai $ pip install --upgrade setuptools ``` -#### Developing on OS X +### Developing on OS X Install [Homebrew](https://brew.sh/), then use that to install Python 3: @@ -65,7 +63,7 @@ Install [Homebrew](https://brew.sh/), then use that to install Python 3: $ brew install python3 ``` -### Setup Local Repository +## Setup Local Repository Visit the [Home Assistant repository](https://github.com/home-assistant/home-assistant) and click **Fork**. Once forked, setup your local copy of the source using the commands: @@ -76,7 +74,7 @@ $ cd home-assistant $ git remote add upstream https://github.com/home-assistant/home-assistant.git ``` -### Setting up virtual environment +## Setting up virtual environment To isolate your environment from the rest of the system, set up a [`venv`](https://docs.python.org/3/library/venv.html). Within the `home-assistant` directory, create and activate your virtual environment. @@ -96,8 +94,8 @@ Invoke your installation. $ hass ``` -### Logging +## Logging By default logging in home-assistant is tuned for operating in production (set to INFO by default, with some modules set to even less verbose logging levels). -You can use the [logger](/components/logger/) component to adjust logging to DEBUG to see even more details about what is going on. +You can use the [logger](https://www.home-assistant.io/components/logger/) component to adjust logging to DEBUG to see even more details about what is going on. diff --git a/docs/development_events.md b/docs/development_events.md index 98582599..630a8b7f 100644 --- a/docs/development_events.md +++ b/docs/development_events.md @@ -8,7 +8,7 @@ The event system is very flexible. There are no limitations on the event type, a [List of events that Home Assistant fires.][object] -### Firing events +## Firing events To fire an event, you have to interact with the event bus. The event bus is available on the Home Assistant instance as `hass.bus`. @@ -26,7 +26,7 @@ def setup(hass, config): }) ``` -### Listening to events +## Listening to events Most of the times you'll not be firing events but instead listen to events. For example, the state change of an entity is broadcasted as an event. @@ -47,9 +47,9 @@ def setup(hass, config): hass.bus.listen('my_cool_event', handle_event) ``` -#### Helpers +### Helpers Home Assistant comes with a lot of bundled helpers to listen to specific types of event. There are helpers to track a point in time, to track a time interval, a state change or the sun set. [See available methods.][helpers] [helpers]: https://dev-docs.home-assistant.io/en/master/api/helpers.html#module-homeassistant.helpers.event -[object]: /docs/configuration/events/ +[object]: https://www.home-assistant.io/docs/configuration/events/ diff --git a/docs/development_guidelines.md b/docs/development_guidelines.md index cb15a80e..920e5f17 100644 --- a/docs/development_guidelines.md +++ b/docs/development_guidelines.md @@ -49,7 +49,7 @@ https://home-assistant.io/components/light.mqtt/ ### Requirements -Please place [Platform requirements](/developers/code_review_platform/#1-requirements) right after the imports. +Please place [Platform requirements](creating_platform_code_review.md#1-requirements) right after the imports. ```python [...] diff --git a/docs/development.md b/docs/development_index.md similarity index 98% rename from docs/development.md rename to docs/development_index.md index 79238b11..2750aac7 100644 --- a/docs/development.md +++ b/docs/development_index.md @@ -1,5 +1,6 @@ --- title: "Starting with Development" +sidebar_label: Introduction --- Home Assistant is built from the ground up to be easily extensible using components. Home Assistant uses [Python 3](https://www.python.org/) for the backend and [Polymer (Web components)](https://www.polymer-project.org/) for the frontend. diff --git a/docs/development_states.md b/docs/development_states.md index c6ac2c62..b6e78f10 100644 --- a/docs/development_states.md +++ b/docs/development_states.md @@ -8,9 +8,9 @@ Home Assistant keeps track of the states of entities in a state machine. The sta - Each state has a primary attribute that describes the state of the entity. In the case of a light this could be for example "on" and "off". You can store anything you want in the state, as long as it's a string (will be converted if it's not). - You can store more information about an entity by setting attributes. Attributes is a dictionary that can contain any data that you want. The only requirement is that it's JSON serializable, so you're limited to numbers, strings, dictionaries and lists. -[Description of the state object.](/docs/configuration/state_object/) +[Description of the state object.](https://www.home-assistant.io/docs/configuration/state_object/) -### Using states in your component +## Using states in your component This is a simple tutorial/example on how to create and set states. We will do our work in a component called "hello_state". The purpose of this component is to display a given text in the frontend. @@ -40,7 +40,7 @@ def setup(hass, config): 1. In the file header we decided to add some details: A short description and the link to the documentation. 2. We want to do some logging. This means that we import the Python logging module and create an alias. 3. The component name is equal to the domain name. -4. At the moment this component has no dependencies. For detail check [dependencies](/developers/component_deps_and_reqs/#dependencies) section. +4. At the moment this component has no dependencies. For detail check [dependencies](creating_component_deps_and_reqs.md#dependencies) section. 5. The `setup` function will take care of the initialization of our component. The component will only write a log message. Keep in mind for later that you have several options for the severity: @@ -126,8 +126,6 @@ def device_state_attributes(self): return self._attributes ``` -

-Entities also have a similar property `state_attributes`, which normally doesn't need to be defined by new platforms. This property is used by base components to add standard sets of attributes to a state. Example: The light component uses `state_attributes` to add brightness to the state dictionary. If you are designing a new component, you should define `state_attributes` instead. -

+> Entities also have a similar property `state_attributes`, which normally doesn't need to be defined by new platforms. This property is used by base components to add standard sets of attributes to a state. Example: The light component uses `state_attributes` to add brightness to the state dictionary. If you are designing a new component, you should define `state_attributes` instead. -To get your component included in the Home Assistant releases, follow the steps described in the [Submit your work](/developers/development_submitting/) section. Basically you only need to move your component in the `homeassistant/component/` directory of your fork and create a Pull Request. +To get your component included in the Home Assistant releases, follow the steps described in the [Submit your work](development_submitting.md) section. Basically you only need to move your component in the `homeassistant/component/` directory of your fork and create a Pull Request. diff --git a/docs/development_submitting.md b/docs/development_submitting.md index d8fa3c24..e832fd50 100644 --- a/docs/development_submitting.md +++ b/docs/development_submitting.md @@ -8,11 +8,11 @@ Submit your improvements, fixes, and new features to Home Assistant one at a tim `git checkout -b some-feature` - 2. Make your changes, create a [new platform](/developers/add_new_platform/), develop a [new component](/developers/creating_components/), or fix [issues](https://github.com/home-assistant/home-assistant/issues). + 2. Make your changes, create a [new platform](creating_platform_index.md), develop a [new component](creating_component_index.md), or fix [issues](https://github.com/home-assistant/home-assistant/issues). - 3. [Test your changes](/developers/development_testing/) and check for style violations. + 3. [Test your changes](development_testing.md) and check for style violations. - 4. If everything looks good according to these [musts](/developers/development_checklist/), commit your changes: + 4. If everything looks good according to these [musts](development_checklist.md), commit your changes: `git add .` diff --git a/docs/development_testing.md b/docs/development_testing.md index a211c378..fbca68be 100644 --- a/docs/development_testing.md +++ b/docs/development_testing.md @@ -2,7 +2,7 @@ title: "Testing your code" --- -As states in the [Style guidelines section](/developers/development_guidelines/) all code is checked to verify all unit tests pass and that the code passes the linting tools. Local testing is done using Tox, which has been installed as part of running `script/setup`. To start the tests, simply run it: +As states in the [Style guidelines section](development_guidelines.md) all code is checked to verify all unit tests pass and that the code passes the linting tools. Local testing is done using Tox, which has been installed as part of running `script/setup`. To start the tests, simply run it: ```bash $ tox diff --git a/docs/development_validation.md b/docs/development_validation.md index 3be196da..1050a14e 100644 --- a/docs/development_validation.md +++ b/docs/development_validation.md @@ -14,7 +14,7 @@ Besides [voluptuous](https://pypi.python.org/pypi/voluptuous) default types, man - Time: `time`, `time_zone` - Misc: `template`, `slug`, `temperature_unit`, `latitude`, `longitude`, `isfile`, `sun_event`, `ensure_list`, `port`, `url`, and `icon` -To validate platforms using [MQTT](/components/mqtt/), `valid_subscribe_topic` and `valid_publish_topic` are available. +To validate platforms using [MQTT](https://www.home-assistant.io/components/mqtt/), `valid_subscribe_topic` and `valid_publish_topic` are available. Some things to keep in mind: diff --git a/docs/documentation_create_page.md b/docs/documentation_create_page.md index 005c645b..9ac716bf 100644 --- a/docs/documentation_create_page.md +++ b/docs/documentation_create_page.md @@ -98,9 +98,8 @@ If you are don't escape templates then they will be rendered and appear blank on The direct usage of HTML is supported but not recommended. The note boxes are an exception. ```html -

- You need to enable telnet on your router. -

+Hello
+World ``` ### Images, icons, and logos diff --git a/docs/documentation_index.md b/docs/documentation_index.md index 155825ff..2bb84b5f 100644 --- a/docs/documentation_index.md +++ b/docs/documentation_index.md @@ -26,11 +26,8 @@ Then you can work on the documentation: - Create a Pull Request (PR) against the **next** branch of home-assistant.github.io if your documentation is a new feature, platform, or component. - Create a Pull Request (PR) against the **current** branch of home-assistant.github.io if you fix stuff, create Cookbook entries, or expand existing documentation. -

-It could be necessary that you run `rake generate` prior to `rake preview` for the very first preview. -

-

-Site generated by `rake` is only available locally. If you are developing on a headless machine use port forwarding: -`ssh -L 4000:localhost:4000 user_on_headless_machine@ip_of_headless_machine` -

+> It could be necessary that you run `rake generate` prior to `rake preview` for the very first preview. + +> Site generated by `rake` is only available locally. If you are developing on a headless machine use port forwarding: +`ssh -L 4000:localhost:4000 user_on_headless_machine@ip_of_headless_machine` diff --git a/docs/external_api_rest.md b/docs/external_api_rest.md index a77347c7..263cd2ca 100644 --- a/docs/external_api_rest.md +++ b/docs/external_api_rest.md @@ -7,9 +7,9 @@ Home Assistant runs a web server accessible on port 8123. * http://IP_ADDRESS:8123/ is an interface to control Home Assistant. * http://IP_ADDRESS:8123/api/ is a Rest API. -The API accepts and returns only JSON encoded objects. All API calls have to be accompanied by the header `X-HA-Access: YOUR_PASSWORD` (YOUR_PASSWORD as specified in your `configuration.yaml` file in the [`http:` section](/components/http/)). +The API accepts and returns only JSON encoded objects. All API calls have to be accompanied by the header `X-HA-Access: YOUR_PASSWORD` (YOUR_PASSWORD as specified in your `configuration.yaml` file in the [`http:` section](https://www.home-assistant.io/components/http/)). -If you are not using the [`frontend`](/components/frontend/) in your setup then you need to add the [`api` component](/components/api/) to your `configuration.yaml` file. +If you are not using the [`frontend`](https://www.home-assistant.io/components/frontend/) in your setup then you need to add the [`api` component](https://www.home-assistant.io/components/api/) to your `configuration.yaml` file. There are multiple ways to consume the Home Assistant Rest API. One is with `curl`: @@ -33,9 +33,7 @@ response = get(url, headers=headers) print(response.text) ``` -

-You can append `?api_password=YOUR_PASSWORD` to any URL to log in automatically. -

+> You can append `?api_password=YOUR_PASSWORD` to any URL to log in automatically. Successful calls will return status code 200 or 201. Other status codes that can return are: @@ -446,13 +444,11 @@ $ curl -X POST \ http://localhost:8123/api/services/mqtt/publish ``` -

-The result will include any states that changed while the service was being executed, even if their change was the result of something else happening in the system. -

+> The result will include any states that changed while the service was being executed, even if their change was the result of something else happening in the system. #### POST /api/template -Render a Home Assistant template. [See template docs for more information.](/topics/templating/) +Render a Home Assistant template. [See template docs for more information.](https://www.home-assistant.io/topics/templating/) ```json { @@ -517,7 +513,3 @@ It will return a message if event forwarding was canceled successfully. "message": "Event forwarding cancelled." } ``` - -

-If your client does not support DELETE HTTP requests you can add an optional attribute _METHOD and set its value to DELETE. -

diff --git a/docs/external_api_python.md b/docs/external_api_rest_python.md similarity index 91% rename from docs/external_api_python.md rename to docs/external_api_rest_python.md index 90c48bf5..b5855ec6 100644 --- a/docs/external_api_python.md +++ b/docs/external_api_rest_python.md @@ -1,12 +1,12 @@ --- -title: "Python Remote API" +title: "Python bindings for the REST API" --- See the [developer documentation][devdocs] for a full overview of the documentation. The rest of this page will contain examples on how to use it. [devdocs]: https://dev-docs.home-assistant.io/en/master/api/homeassistant.html#module-homeassistant.remote -In the package [`homeassistant.remote`](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/remote.py) a Python API on top of the [HTTP API](/developers/api/) can be found. If you are not using the [`frontend`](/components/frontend/) in your setup then you need to add the [`api` component](/components/api/) to your `configuration.yaml` file to use the Python Remote API. +In the package [`homeassistant.remote`](https://github.com/home-assistant/home-assistant/blob/master/homeassistant/remote.py) a Python API on top of the [HTTP API](https://www.home-assistant.io/developers/api/) can be found. If you are not using the [`frontend`](https://www.home-assistant.io/components/frontend/) in your setup then you need to add the [`api` component](https://www.home-assistant.io/components/api/) to your `configuration.yaml` file to use the Python Remote API. A simple way to get all current entities is to visit the "Set State" page in the "Developer Tools". For the examples below just choose one from the available entries. Here the sensor `sensor.office_temperature` and the switch `switch.livingroom_pin_2` are used. @@ -33,7 +33,7 @@ print(remote.get_config(api)) ### Get details about services, events, and entitites -The output from this is similar to the output you'd find via the frontend, using the [Developer Tools](/docs/tools/dev-tools/). +The output from this is similar to the output you'd find via the frontend, using the [Developer Tools](https://www.home-assistant.io/docs/tools/dev-tools/). ```python import homeassistant.remote as remote @@ -197,7 +197,7 @@ for entity in entities: ### Show difference between `last_changed` and `last_updated` -The documentation about the [State Objects](/docs/configuration/state_object/) describes the +The documentation about the [State Objects](https://www.home-assistant.io/docs/configuration/state_object/) describes the `last_changed` and `last_updated` fields. This example shows how it works in practice. ```python diff --git a/docs/external_api_server_sent_events.md b/docs/external_api_server_sent_events.md index edc28e4e..f49e9e1d 100644 --- a/docs/external_api_server_sent_events.md +++ b/docs/external_api_server_sent_events.md @@ -2,13 +2,13 @@ title: "Server-sent events" --- -The [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events) feature is a one-way channel from your Home Assistant server to a client which is acting as a consumer. For bi-directional communication check the [RESTful API](/developers/rest_api/) and [Python API](/developers/python_api/). +The [server-sent events](https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events) feature is a one-way channel from your Home Assistant server to a client which is acting as a consumer. For bi-directional communication check the [RESTful API](https://www.home-assistant.io/developers/rest_api/) and [Python API](https://www.home-assistant.io/developers/python_api/). The URI that is generating the data is `/api/stream`. A requirement on the client-side is existing support for the [EventSource](https://developer.mozilla.org/en-US/docs/Web/API/EventSource) interface. -There are various ways to access the stream. If you have not set an `api_password` in the [`http`](/components/http/) section of your `configuration.yaml` file then you use your modern browser to read the messages. A command-line option is `curl`: +There are various ways to access the stream. If you have not set an `api_password` in the [`http`](https://www.home-assistant.io/components/http/) section of your `configuration.yaml` file then you use your modern browser to read the messages. A command-line option is `curl`: ```bash $ curl -X GET -H "x-ha-access: YOUR_PASSWORD" \ diff --git a/docs/external_api_websocket.md b/docs/external_api_websocket.md index a7ae308c..420d5147 100644 --- a/docs/external_api_websocket.md +++ b/docs/external_api_websocket.md @@ -10,7 +10,7 @@ Home Assistant contains a WebSocket API. This API can be used to stream informat Connect your websocket implementation to `ws://localhost:8123/api/websocket`. -If you are not using the [`frontend`](/components/frontend/) in your setup then you need to add the [`websocket_api` component](/components/websocket_api/) to your `configuration.yaml` file to use the WebSocket API. +If you are not using the [`frontend`](https://www.home-assistant.io/components/frontend/) in your setup then you need to add the [`websocket_api` component](https://www.home-assistant.io/components/websocket_api/) to your `configuration.yaml` file to use the WebSocket API. ## Server states diff --git a/docs/frontend_add_card.md b/docs/frontend_add_card.md index 893a0a5f..c9ab71c1 100644 --- a/docs/frontend_add_card.md +++ b/docs/frontend_add_card.md @@ -4,13 +4,13 @@ title: "Adding state card" The main interface of Home Assistant is a list of the current entities and their states. For each entity in the system, a state card will be rendered. State cards will show an icon, the name of the entity, when the state has last changed and the current state or a control to interact with it. -![Cards in the frontend](/images/frontend/frontend-cards1.png) +![Cards in the frontend](/img/en/frontend/frontend-cards1.png) The different card types can be found [here](https://github.com/home-assistant/home-assistant-polymer/tree/master/src/state-summary). -Sensors, when not [grouped](/components/group/), are shown as so-called badges on top of the state cards. +Sensors, when not grouped, are shown as so-called badges on top of the state cards. -![Badges in the frontend](/images/frontend/frontend-badges.png) +![Badges in the frontend](/img/en/frontend/frontend-badges.png) The different badges are located in the file [`/src/components/entity/ha-state-label-badge.html`](https://github.com/home-assistant/home-assistant-polymer/blob/master/src/components/entity/ha-state-label-badge.html). diff --git a/docs/frontend_add_more_info.md b/docs/frontend_add_more_info.md index 002391bb..78537918 100644 --- a/docs/frontend_add_more_info.md +++ b/docs/frontend_add_more_info.md @@ -4,10 +4,10 @@ title: "Adding more info dialogs" Whenever the user taps or clicks on one of the cards, a more info dialog will show. The header of this dialog will be the state card, followed by the history of this entity for the last 24 hours. Below this the more info component is rendered for that entity. The more info component can show more information or allow more ways of control. -

- - The more info dialog for a light allows the user to control the color and the brightness. -

+The more info dialog for a light allows the user to control the color and the brightness. The instructions to add a more info dialog are very similar to adding a new card type. This example will add a new more info component for the domain `camera`: diff --git a/docs/frontend_creating_custom_panels.md b/docs/frontend_creating_custom_panels.md index ccf4feaf..c04b660e 100644 --- a/docs/frontend_creating_custom_panels.md +++ b/docs/frontend_creating_custom_panels.md @@ -6,7 +6,7 @@ Panels are pages within Home Assistant that show information within Home Assista Besides components registering panels, users can also register panels using the `panel_custom` component. This allows users to quickly build their own custom interfaces for Home Assistant. -### Before you get started +## Before you get started The Home Assistant user interface is currently served to browsers in modern JavaScript and older JavaScript (ES5). The older version has a wider browser support but that comes at a cost of size, performance and more difficult to get started building panels for authors. @@ -17,7 +17,7 @@ frontend: javascript_version: latest ``` -### Building your first panel +## Building your first panel Create a file called `hello.html` in your /panels/. @@ -80,5 +80,3 @@ panel_custom: sidebar_icon: mdi:hand-pointing-right url_path: hello ``` - -For more possibilities, see the [Custom panel section](/cookbook/#user-interface) on our Examples page. diff --git a/docs/frontend_creating_custom_ui.md b/docs/frontend_creating_custom_ui.md index 3a359581..211efe6f 100644 --- a/docs/frontend_creating_custom_ui.md +++ b/docs/frontend_creating_custom_ui.md @@ -2,9 +2,9 @@ title: "Creating custom UI" --- -If you would like to use your own [State card](/developers/frontend_add_card/) without merging your code into [home-assistant-polymer](https://github.com/home-assistant/home-assistant-polymer/) you can create your own implementation. +If you would like to use your own [State card](frontend_add_card.md) without merging your code into [home-assistant-polymer](https://github.com/home-assistant/home-assistant-polymer/) you can create your own implementation. -Put the element source file and its dependencies in `www/custom_ui/` directory under your Home Assistant [configuration](/docs/configuration/) directory. +Put the element source file and its dependencies in `www/custom_ui/` directory under your Home Assistant [configuration](https://www.home-assistant.io/docs/configuration/) directory. For example if creating a state card for the `light` domain named `state-card-my-custom-light` put `state-card-my-custom-light.html` in `www/custom_ui/`. @@ -84,8 +84,7 @@ class StateCardMyCustomLight extends Polymer.Element { customElements.define(StateCardMyCustomLight.is, StateCardMyCustomLight); ``` -

-Some browsers don't support latest ECMAScript standards, these require a separate ES5 compatible file (`extra_html_url_es5`). -

-For more possibilities, see the [Custom UI section](/cookbook/#user-interface) on our Examples page. +> Some browsers don't support latest ECMAScript standards, these require a separate ES5 compatible file (`extra_html_url_es5`). + +For more possibilities, see the [Custom UI section](https://www.home-assistant.io/cookbook/#user-interface) on our Examples page. diff --git a/docs/frontend.md b/docs/frontend_index.md similarity index 91% rename from docs/frontend.md rename to docs/frontend_index.md index c09736fc..e3fea499 100644 --- a/docs/frontend.md +++ b/docs/frontend_index.md @@ -1,18 +1,15 @@ --- title: "Frontend development" +sidebar_label: "Introduction" --- Home Assistant is built on top of the [Polymer](https://www.polymer-project.org/) webcomponents framework. Polymer allows building encapsulated custom HTML elements. [Home-Assistant-Polymer source code on GitHub.][hass-polymer] -

-Do not use development mode in production. Home Assistant uses aggressive caching to improve the mobile experience. This is disabled during development so that you do not have to restart the server in between changes. -

+> Do not use development mode in production. Home Assistant uses aggressive caching to improve the mobile experience. This is disabled during development so that you do not have to restart the server in between changes. ## Setting up the environment -

-All commands below need to be run from inside the home-assistant-polymer repository. -

+> All commands below need to be run from inside the home-assistant-polymer repository. Home Assistant will by default serve the compiled version of the frontend from the hass_frontend Python package. For development you want to work with the unbundled source files which are in the home-assistant-polymer repository. diff --git a/docs/hassio_addon_publishing.md b/docs/hassio_addon_publishing.md index 49be1660..3bfc74e6 100644 --- a/docs/hassio_addon_publishing.md +++ b/docs/hassio_addon_publishing.md @@ -50,8 +50,6 @@ For a local repository: $ docker run --rm --privileged -v ~/.docker:/root/.docker -v /my_addon:/data homeassistant/amd64-builder --all -t /data ``` -

-If you are developing on macOS and using Docker for Mac, you may encounter an error message similar to the following: error creating aufs mount to /var/lib/docker/aufs/mnt/-init: invalid argument. A proposed workaround is to add the following to the Advanced Daemon JSON configuration via Docker > Preferences > Daemon > Advanced: "storage-driver" : "aufs". -

+> If you are developing on macOS and using Docker for Mac, you may encounter an error message similar to the following: error creating aufs mount to /var/lib/docker/aufs/mnt/-init: invalid argument. A proposed workaround is to add the following to the Advanced Daemon JSON configuration via Docker > Preferences > Daemon > Advanced: "storage-driver" : "aufs". [builder]: https://github.com/home-assistant/hassio-build/tree/master/builder diff --git a/docs/hassio_debugging.md b/docs/hassio_debugging.md index db7f3250..f39eb581 100644 --- a/docs/hassio_debugging.md +++ b/docs/hassio_debugging.md @@ -2,9 +2,7 @@ title: "Debugging Hass.io" --- -

-This section is not for users. Use the [SSH add-on] to SSH into Hass.io. This is for developers of Hass.io. Do not ask for support if you are using these options. -

+> This section is not for users. Use the [SSH add-on] to SSH into Hass.io. This is for developers of Hass.io. Do not ask for support if you are using these options. [SSH add-on]: /addons/ssh/ @@ -22,9 +20,7 @@ Follow steps 1-4 under 'Generating a new SSH key' (The other sections are not ap Step 3 in the link above, shows the path to the private key file `id_rsa` for your chosen operating system. Your public key, `id_rsa.pub`, is saved in the same folder. Next, select all text from text box "Public key for pasting into OpenSSH authorized_keys file" and save it to the root of your SD card as `authorized_keys`. -

-Make sure when you are copying the public key to the root of the /resin-boot partition of the SD card that you rename the file correctly to `authorized_keys` with no `.pub` file extension. -

+> Make sure when you are copying the public key to the root of the /resin-boot partition of the SD card that you rename the file correctly to `authorized_keys` with no `.pub` file extension. You should then be able to SSH into your Hass.io device. On mac/linux, use: ``` diff --git a/docs/intent_index.md b/docs/intent_index.md index ba1ee981..29933464 100644 --- a/docs/intent_index.md +++ b/docs/intent_index.md @@ -1,13 +1,17 @@ --- title: "Intents" +sidebar_label: "Introduction" --- An intent is a description of a user's intention. Intents are generated by user actions, like asking Amazon Echo to turn on a light. -

- -Architectural overview of intents in Home Assistant -

+ + Architectural overview of intents in Home Assistant + + Intents are fired by components that receive them from external sources/services. Conversation, Alexa, API.ai and Snips are currently sourcing intents. diff --git a/docs/internationalization_translation.md b/docs/internationalization_translation.md index 6371ef39..eb422489 100644 --- a/docs/internationalization_translation.md +++ b/docs/internationalization_translation.md @@ -10,9 +10,7 @@ Translations for Home Assistant are managed through Lokalise, an online translat For more information about the translation workflow, please see the [Lokalise translation workflow documents](https://docs.lokalise.co/category/iOzEuQPS53-for-team-leads-and-translators). -

-The translation of the Home Assistant frontend is still a work in progress. More phrases will be available for translation soon. -

+> The translation of the Home Assistant frontend is still a work in progress. More phrases will be available for translation soon. ## Translation placeholders @@ -33,9 +31,7 @@ English Name: German Native Name: Deutsch ``` -

-Region specific translations (`en-US`, `fr-CA`) will only be included if translations for that region need to differ from the base language translation. -

+> Region specific translations (`en-US`, `fr-CA`) will only be included if translations for that region need to differ from the base language translation. ### Maintainer steps to add a new language 1. Language tags have to follow [BCP 47](https://tools.ietf.org/html/bcp47). A list of most language tags can be found here: [IANA sutbtag registry](http://www.iana.org/assignments/language-subtag-registry/language-subtag-registry). Examples: `fr`, `fr-CA`, `zh-Hans`. Only include the country code if country specific overrides are being included, and the base language is already translated. diff --git a/website/blog-examples-from-docusaurus/2016-03-11-blog-post.md b/website/blog-examples-from-docusaurus/2016-03-11-blog-post.md deleted file mode 100755 index cf2ba296..00000000 --- a/website/blog-examples-from-docusaurus/2016-03-11-blog-post.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: Blog Title -author: Blog Author -authorURL: http://twitter.com/ -authorFBID: 100002976521003 ---- - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus elementum massa eget nulla aliquet sagittis. Proin odio tortor, vulputate ut odio in, ultrices ultricies augue. Cras ornare ultrices lorem malesuada iaculis. Etiam sit amet libero tempor, pulvinar mauris sed, sollicitudin sapien. - - - -Mauris vestibulum ullamcorper nibh, ut semper purus pulvinar ut. Donec volutpat orci sit amet mauris malesuada, non pulvinar augue aliquam. Vestibulum ultricies at urna ut suscipit. Morbi iaculis, erat at imperdiet semper, ipsum nulla sodales erat, eget tincidunt justo dui quis justo. Pellentesque dictum bibendum diam at aliquet. Sed pulvinar, dolor quis finibus ornare, eros odio facilisis erat, eu rhoncus nunc dui sed ex. Nunc gravida dui massa, sed ornare arcu tincidunt sit amet. Maecenas efficitur sapien neque, a laoreet libero feugiat ut. - -Nulla facilisi. Maecenas sodales nec purus eget posuere. Sed sapien quam, pretium a risus in, porttitor dapibus erat. Sed sit amet fringilla ipsum, eget iaculis augue. Integer sollicitudin tortor quis ultricies aliquam. Suspendisse fringilla nunc in tellus cursus, at placerat tellus scelerisque. Sed tempus elit a sollicitudin rhoncus. Nulla facilisi. Morbi nec dolor dolor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras et aliquet lectus. Pellentesque sit amet eros nisi. Quisque ac sapien in sapien congue accumsan. Nullam in posuere ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin lacinia leo a nibh fringilla pharetra. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin venenatis lectus dui, vel ultrices ante bibendum hendrerit. Aenean egestas feugiat dui id hendrerit. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur in tellus laoreet, eleifend nunc id, viverra leo. Proin vulputate non dolor vel vulputate. Curabitur pretium lobortis felis, sit amet finibus lorem suscipit ut. Sed non mollis risus. Duis sagittis, mi in euismod tincidunt, nunc mauris vestibulum urna, at euismod est elit quis erat. Phasellus accumsan vitae neque eu placerat. In elementum arcu nec tellus imperdiet, eget maximus nulla sodales. Curabitur eu sapien eget nisl sodales fermentum. - -Phasellus pulvinar ex id commodo imperdiet. Praesent odio nibh, sollicitudin sit amet faucibus id, placerat at metus. Donec vitae eros vitae tortor hendrerit finibus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque vitae purus dolor. Duis suscipit ac nulla et finibus. Phasellus ac sem sed dui dictum gravida. Phasellus eleifend vestibulum facilisis. Integer pharetra nec enim vitae mattis. Duis auctor, lectus quis condimentum bibendum, nunc dolor aliquam massa, id bibendum orci velit quis magna. Ut volutpat nulla nunc, sed interdum magna condimentum non. Sed urna metus, scelerisque vitae consectetur a, feugiat quis magna. Donec dignissim ornare nisl, eget tempor risus malesuada quis. diff --git a/website/blog-examples-from-docusaurus/2017-04-10-blog-post-two.md b/website/blog-examples-from-docusaurus/2017-04-10-blog-post-two.md deleted file mode 100644 index 3ab4637b..00000000 --- a/website/blog-examples-from-docusaurus/2017-04-10-blog-post-two.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: New Blog Post -author: Blog Author -authorURL: http://twitter.com/ -authorFBID: 100002976521003 ---- - -Lorem ipsum dolor sit amet, consectetur adipiscing elit. Pellentesque elementum dignissim ultricies. Fusce rhoncus ipsum tempor eros aliquam consequat. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Vivamus elementum massa eget nulla aliquet sagittis. Proin odio tortor, vulputate ut odio in, ultrices ultricies augue. Cras ornare ultrices lorem malesuada iaculis. Etiam sit amet libero tempor, pulvinar mauris sed, sollicitudin sapien. - - - -Mauris vestibulum ullamcorper nibh, ut semper purus pulvinar ut. Donec volutpat orci sit amet mauris malesuada, non pulvinar augue aliquam. Vestibulum ultricies at urna ut suscipit. Morbi iaculis, erat at imperdiet semper, ipsum nulla sodales erat, eget tincidunt justo dui quis justo. Pellentesque dictum bibendum diam at aliquet. Sed pulvinar, dolor quis finibus ornare, eros odio facilisis erat, eu rhoncus nunc dui sed ex. Nunc gravida dui massa, sed ornare arcu tincidunt sit amet. Maecenas efficitur sapien neque, a laoreet libero feugiat ut. - -Nulla facilisi. Maecenas sodales nec purus eget posuere. Sed sapien quam, pretium a risus in, porttitor dapibus erat. Sed sit amet fringilla ipsum, eget iaculis augue. Integer sollicitudin tortor quis ultricies aliquam. Suspendisse fringilla nunc in tellus cursus, at placerat tellus scelerisque. Sed tempus elit a sollicitudin rhoncus. Nulla facilisi. Morbi nec dolor dolor. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Cras et aliquet lectus. Pellentesque sit amet eros nisi. Quisque ac sapien in sapien congue accumsan. Nullam in posuere ante. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Proin lacinia leo a nibh fringilla pharetra. - -Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Proin venenatis lectus dui, vel ultrices ante bibendum hendrerit. Aenean egestas feugiat dui id hendrerit. Orci varius natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Curabitur in tellus laoreet, eleifend nunc id, viverra leo. Proin vulputate non dolor vel vulputate. Curabitur pretium lobortis felis, sit amet finibus lorem suscipit ut. Sed non mollis risus. Duis sagittis, mi in euismod tincidunt, nunc mauris vestibulum urna, at euismod est elit quis erat. Phasellus accumsan vitae neque eu placerat. In elementum arcu nec tellus imperdiet, eget maximus nulla sodales. Curabitur eu sapien eget nisl sodales fermentum. - -Phasellus pulvinar ex id commodo imperdiet. Praesent odio nibh, sollicitudin sit amet faucibus id, placerat at metus. Donec vitae eros vitae tortor hendrerit finibus. Interdum et malesuada fames ac ante ipsum primis in faucibus. Quisque vitae purus dolor. Duis suscipit ac nulla et finibus. Phasellus ac sem sed dui dictum gravida. Phasellus eleifend vestibulum facilisis. Integer pharetra nec enim vitae mattis. Duis auctor, lectus quis condimentum bibendum, nunc dolor aliquam massa, id bibendum orci velit quis magna. Ut volutpat nulla nunc, sed interdum magna condimentum non. Sed urna metus, scelerisque vitae consectetur a, feugiat quis magna. Donec dignissim ornare nisl, eget tempor risus malesuada quis. diff --git a/website/blog-examples-from-docusaurus/2017-09-25-testing-rss.md b/website/blog-examples-from-docusaurus/2017-09-25-testing-rss.md deleted file mode 100644 index b7ff8129..00000000 --- a/website/blog-examples-from-docusaurus/2017-09-25-testing-rss.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Adding RSS Support - RSS Truncation Test -author: Eric Nakagawa -authorURL: http://twitter.com/ericnakagawa -authorFBID: 661277173 ---- -1234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890 - -This should be truncated. - -This line should never render in XML. diff --git a/website/blog-examples-from-docusaurus/2017-09-26-adding-rss.md b/website/blog-examples-from-docusaurus/2017-09-26-adding-rss.md deleted file mode 100644 index eeb4f047..00000000 --- a/website/blog-examples-from-docusaurus/2017-09-26-adding-rss.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Adding RSS Support -author: Eric Nakagawa -authorURL: http://twitter.com/ericnakagawa -authorFBID: 661277173 ---- - -This is a test post. - -A whole bunch of other information. diff --git a/website/blog-examples-from-docusaurus/2017-10-24-new-version-1.0.0.md b/website/blog-examples-from-docusaurus/2017-10-24-new-version-1.0.0.md deleted file mode 100644 index 60761c02..00000000 --- a/website/blog-examples-from-docusaurus/2017-10-24-new-version-1.0.0.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: New Version 1.0.0 -author: Eric Nakagawa -authorURL: http://twitter.com/ericnakagawa -authorFBID: 661277173 ---- - -This blog post will test file name parsing issues when periods are present. diff --git a/website/core/Footer.js b/website/core/Footer.js index b43f1d6a..3f607d3e 100644 --- a/website/core/Footer.js +++ b/website/core/Footer.js @@ -33,7 +33,7 @@ class Footer extends React.Component { /> )} - */} - - Facebook Open Source -
{this.props.config.copyright}
); diff --git a/website/i18n/en.json b/website/i18n/en.json index c3a7084d..714c6ffb 100644 --- a/website/i18n/en.json +++ b/website/i18n/en.json @@ -4,23 +4,27 @@ "next": "Next", "previous": "Previous", "tagline": "All you need to start developing for Home Assistant", - "add_new_platform": "Adding support for a new platform", "architecture_components": "Components Architecture", - "architecture": "Architecture", + "architecture_index": "Architecture", + "Introduction": "Introduction", "asyncio_101": "Asyncio 101", "asyncio_categorizing_functions": "Categorizing Functions", "asyncio_misc": "Miscellaneous Async", "asyncio_working_with_async": "Working with Async", "asyncio": "asyncio", - "code_review_component": "Checklist for creating a component", - "code_review_platform": "Checklist for creating a platform", - "component_deps_and_reqs": "Requirements & Dependencies", - "component_discovery": "Component Discovery", - "component_events": "Handling events", - "component_generic_discovery": "Generic Platform Discovery", - "component_loading": "Loading your components", - "component_states": "Handling states", - "creating_components": "Creating components", + "building_integrations": "Building Integrations", + "creating_component_code_review": "Checklist for creating a component", + "creating_component_deps_and_reqs": "Requirements & Dependencies", + "creating_component_discovery": "Component Discovery", + "creating_component_events": "Handling events", + "creating_component_generic_discovery": "Generic Platform Discovery", + "creating_component_index": "Creating components", + "creating_component_loading": "Loading your components", + "creating_component_states": "Handling states", + "creating_platform_code_review": "Checklist for creating a platform", + "creating_platform_example_light": "Example light platform", + "creating_platform_example_sensor": "Example sensor platform", + "creating_platform_index": "Adding support for a new platform", "development_101": "Development 101", "development_catching_up": "Catching up with Reality", "development_checklist": "Development Checklist", @@ -29,16 +33,16 @@ "development_events": "Using Events", "development_guidelines": "Style guidelines", "development_hass_object": "Hass object", + "development_index": "Starting with Development", "development_services": "Using Services", "development_states": "Using States", "development_submitting": "Submit your work", "development_testing": "Testing your code", "development_validation": "Validate the input", - "development": "Starting with Development", "documentation_create_page": "Create a new page", "documentation_index": "Documentation Home Assistant", "documentation_standards": "Documentation Standards", - "external_api_python": "Python Remote API", + "external_api_rest_python": "Python bindings for the REST API", "external_api_rest": "RESTful API", "external_api_server_sent_events": "Server-sent events", "external_api_websocket": "WebSocket API", @@ -46,7 +50,7 @@ "frontend_add_more_info": "Adding more info dialogs", "frontend_creating_custom_panels": "Creating custom panels", "frontend_creating_custom_ui": "Creating custom UI", - "frontend": "Frontend development", + "frontend_index": "Frontend development", "hassio_addon_communication": "Add-On Communication", "hassio_addon_config": "Add-On Configuration", "hassio_addon_development": "Developing an add-on", @@ -68,23 +72,21 @@ "internationalization_translation": "Translation", "maintenance": "Maintenance", "misc": "Miscellaneous", - "platform_example_light": "Example light platform", - "platform_example_sensor": "Example sensor platform", "releasing": "Releasing", "Architecture": "Architecture", - "Developers": "Developers", + "Frontend": "Frontend", + "Backend": "Backend", + "External APIs": "External APIs", "Misc": "Misc", "Intents": "Intents", - "Catch all category": "Catch all category", - "Documentation": "Documentation", - "Maintainer docs": "Maintainer docs", - "Frontend": "Frontend", "Development": "Development", - "Internationalization": "Internationalization", - "Hass.io": "Hass.io", "Creating Platforms": "Creating Platforms", "Creating Components": "Creating Components", - "External API": "External API" + "External API": "External API", + "Internationalization": "Internationalization", + "Hass.io": "Hass.io", + "Documentation": "Documentation", + "Maintainer docs": "Maintainer docs" }, "pages-strings": { "Learn more using the [documentation on this site.](/test-site/docs/en/doc1.html)|no description given": "Learn more using the [documentation on this site.](/test-site/docs/en/doc1.html)", diff --git a/website/pages/en/index.js b/website/pages/en/index.js index d6db81ee..e9883da7 100755 --- a/website/pages/en/index.js +++ b/website/pages/en/index.js @@ -19,13 +19,66 @@ function imgUrl(img) { } function docUrl(doc, language) { - return siteConfig.baseUrl + 'docs/' + (language ? language + '/' : '') + doc; + return siteConfig.baseUrl + 'docs/' + (language ? language + '/' : '') + doc + ".html"; } function pageUrl(page, language) { return siteConfig.baseUrl + (language ? language + '/' : '') + page; } + +const PopularTopicsSection = ({ language }) => ( +
+ +
+
+

Documentation Structure

+

+ Architecture. Discusses the architecture of the various layers that make up Home Assistant. +

+

+ Frontend. Discusses how to develop the user interface of Home Assistant. +

+

+ Backend. Discusses how to build new integrations for Home Assistant. +

+

+ External APIs. Documentation of the various APIs to extract data from Home Assistant. +

+

+ Misc. Internationalization, asyncio, Hass.io, updating documentation. +

+
+ + +
+
+
+); + + class Button extends React.Component { render() { return ( @@ -57,10 +110,15 @@ const Logo = props => ( ); const ProjectTitle = props => ( -

- {siteConfig.title} - {siteConfig.tagline} -

+
+

+ Home Assistant + Developer documentation +

+
+ Not a developer? Go to the normal website +
+
); const PromoSection = props => ( @@ -76,14 +134,14 @@ class HomeSplash extends React.Component { let language = this.props.language || ''; return ( - +
- + {/* - + */}
); @@ -95,24 +153,36 @@ const Block = props => ( padding={['bottom', 'top']} id={props.id} background={props.background}> - + ); const Features = props => ( - + {[ { - content: 'This is the content of my feature', - image: imgUrl('docusaurus.svg'), + title: 'Intents', + content: 'Build powerful voice interactions', + image: imgUrl('logo-responsive.svg'), imageAlign: 'top', - title: 'Feature One', }, { - content: 'The content of my second feature', - image: imgUrl('docusaurus.svg'), + title: 'Frontend Panels', + content: 'Add a custom panel to control our component or provide rich user interface.', + image: imgUrl('logo-responsive.svg'), + imageAlign: 'top', + }, + { + title: 'Build powerful automations', + content: 'Use the power of Python to built any advanced automation that you can dream off.', + image: imgUrl('logo-responsive.svg'), + imageAlign: 'top', + }, + { + title: 'Websocket API', + content: 'Use the websocket API to get instantly notified of any change.', + image: imgUrl('logo-responsive.svg'), imageAlign: 'top', - title: 'Feature Two', }, ]} @@ -132,7 +202,7 @@ const LearnHow = props => ( {[ { content: 'Talk about learning how to use this', - image: imgUrl('docusaurus.svg'), + image: imgUrl('logo-responsive.svg'), imageAlign: 'right', title: 'Learn How', }, @@ -145,7 +215,7 @@ const TryOut = props => ( {[ { content: 'Talk about trying this out', - image: imgUrl('docusaurus.svg'), + image: imgUrl('logo-responsive.svg'), imageAlign: 'left', title: 'Try it Out', }, @@ -158,7 +228,7 @@ const Description = props => ( {[ { content: 'This is another description of how this project is useful', - image: imgUrl('docusaurus.svg'), + image: imgUrl('logo-responsive.svg'), imageAlign: 'right', title: 'Description', }, @@ -166,6 +236,7 @@ const Description = props => ( ); + const Showcase = props => { if ((siteConfig.users || []).length === 0) { return null; @@ -196,6 +267,13 @@ const Showcase = props => { ); }; +const IntroSection = ({ language }) => ( +
+ + +
+) + class Index extends React.Component { render() { let language = this.props.language || ''; @@ -203,13 +281,15 @@ class Index extends React.Component { return (
-
- +
+ + + {/* - + */}
); diff --git a/website/sidebars.json b/website/sidebars.json index 1f22f771..ce8d9ea8 100644 --- a/website/sidebars.json +++ b/website/sidebars.json @@ -1,40 +1,31 @@ { "Architecture": { "Architecture": [ - "architecture", + "architecture_index", "architecture_components" ], "Intents": [ - "intent_conversation", + "intent_index", "intent_firing", "intent_handling", - "intent_index" - ], - "Catch all category": [ - "index" - ], - "Documentation": [ - "documentation_create_page", - "documentation_index", - "documentation_standards" - ], - "Maintainer docs": [ - "maintenance", - "releasing" + "intent_conversation" ] }, - "Frontend": { + "Extending Frontend": { "Frontend": [ - "frontend", + "frontend_index", "frontend_add_card", "frontend_add_more_info", "frontend_creating_custom_panels", "frontend_creating_custom_ui" ] }, - "Development": { + "Extending HASS": { + "Introduction": [ + "building_integrations" + ], "Development": [ - "development", + "development_index", "development_101", "development_catching_up", "development_checklist", @@ -49,10 +40,39 @@ "development_testing", "development_validation" ], + "Creating Platforms": [ + "creating_platform_index", + "creating_platform_code_review", + "creating_platform_example_light", + "creating_platform_example_sensor" + ], + "Creating Components": [ + "creating_component_index", + "creating_component_code_review", + "creating_component_deps_and_reqs", + "creating_component_discovery", + "creating_component_events", + "creating_component_generic_discovery", + "creating_component_loading", + "creating_component_states" + ] + }, + "External APIs": { + "External API": [ + "external_api_rest", + "external_api_rest_python", + "external_api_websocket", + "external_api_server_sent_events" + ] + }, + "Misc": { + "Introduction": [ + "misc" + ], "Internationalization": [ + "internationalization_index", "internationalization_backend_localization", "internationalization_custom_component_localization", - "internationalization_index", "internationalization_translation" ], "asyncio": [ @@ -61,9 +81,7 @@ "asyncio_categorizing_functions", "asyncio_misc", "asyncio_working_with_async" - ] - }, - "Hass.io": { + ], "Hass.io": [ "hassio_addon_communication", "hassio_addon_config", @@ -75,32 +93,15 @@ "hassio_addon_tutorial", "hassio_architecture", "hassio_debugging" - ] - }, - "Building Integrations": { - "Creating Platforms": [ - "add_new_platform", - "code_review_platform", - "platform_example_light", - "platform_example_sensor" ], - "Creating Components": [ - "code_review_component", - "component_deps_and_reqs", - "component_discovery", - "component_events", - "component_generic_discovery", - "component_loading", - "component_states", - "creating_components" - ] - }, - "APIs": { - "External API": [ - "external_api_python", - "external_api_rest", - "external_api_server_sent_events", - "external_api_websocket" + "Documentation": [ + "documentation_create_page", + "documentation_index", + "documentation_standards" + ], + "Maintainer docs": [ + "maintenance", + "releasing" ] } } diff --git a/website/siteConfig.js b/website/siteConfig.js index 91a2bb97..cdf52de1 100644 --- a/website/siteConfig.js +++ b/website/siteConfig.js @@ -36,15 +36,11 @@ const siteConfig = { // For no header links in the top nav bar -> headerLinks: [], headerLinks: [ - {doc: 'architecture', label: 'Architecture'}, - {doc: 'index', label: 'Developers'}, - {doc: 'index', label: 'Developers'}, - {doc: 'index', label: 'Developers'}, + {doc: 'architecture_index', label: 'Architecture'}, + {doc: 'frontend_index', label: 'Frontend'}, + {doc: 'building_integrations', label: 'Backend'}, + {doc: 'external_api_rest', label: 'External APIs'}, {doc: 'misc', label: 'Misc'}, - {doc: 'index', label: 'Developers'}, - // {doc: 'doc4', label: 'API'}, - // {page: 'help', label: 'Help'}, - // {blog: true, label: 'Blog'}, ], // If you have users set above, you add it here: diff --git a/website/static/css/custom.css b/website/static/css/custom.css index 220c1dde..a03ef88a 100644 --- a/website/static/css/custom.css +++ b/website/static/css/custom.css @@ -1,5 +1,15 @@ /* your custom css */ +.homeContainer .projectTitle, +.indexPage h2 { + color: rgb(33, 33, 33) !important; +} + +.introSection { + padding-bottom: 20px; +} + + @media only screen and (min-device-width: 360px) and (max-device-width: 736px) { } diff --git a/website/static/img/en/architecture/component_interaction.png b/website/static/img/en/architecture/component_interaction.png new file mode 100644 index 0000000000000000000000000000000000000000..fc33f781643e4307fbf5d580dca2d24464614a1d GIT binary patch literal 27977 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 bpt3(0GYHd47X^6n6*~ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + Home AssistantCore Architecture + + Timer + + Event Bus + + StateMachine + listen for events/fire event + + ServiceRegistry + + + + Light + + + + Many more... + Device Tracker + Switch + Components + set state + + + + + + + + call event listeners + publishservice + callservice + + + call_serviceevents + + service_calledevents + time_changedevents + state_changedevents + + diff --git a/website/static/img/en/architecture/ha_full_architecture.png b/website/static/img/en/architecture/ha_full_architecture.png new file mode 100644 index 0000000000000000000000000000000000000000..0b574864d64e92243016ed69c076bc22e7d405a9 GIT binary patch literal 51006 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

GtjwT}~TdJ&V``4p-d!T!WT^5sH|W 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 IBt8fHFDTyuasU7T literal 0 HcmV?d00001 diff --git a/website/static/img/en/architecture/home_automation_landscape.svg b/website/static/img/en/architecture/home_automation_landscape.svg new file mode 100644 index 00000000..c0fbca28 --- /dev/null +++ b/website/static/img/en/architecture/home_automation_landscape.svg @@ -0,0 +1,904 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/svg+xml + + + + + + + + + + + + Lights + + + + Smart Home + + HomeAutomation + User + + Configuration + + Home Control + Commands + Information + + + + Switches + Many more... + Internet of Things + + + + + Commands + Information + Information + Commands + Information(ie. light is on) + Commands(ie. turn light on) + Graphic by Paulus Schoutsen 2014, CC BY 4.0 + + diff --git a/website/static/img/en/dev-tools/about-icon.png b/website/static/img/en/dev-tools/about-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..80a51e6daf48a123eb6a3f2f7d877f7489781782 GIT binary patch literal 1080 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&3?x5zE|g?oU}OsL332^TU$AS}u3x`?&6qKx ztE+3vmMy=3|Nism&%b~FN=r*WeE3jSR(AL9-O9?!hK7do=g&WW{P^3qZ!1=;Shj3g zeSQ70W5@2?x%1`Amwo&8wYIjNI(2H{!i6<8HP4?v-@0{cb8~ZFU*FfSUw{7m+1A$9 z)YP|ef#$B-@l$Fe|Ug_ zqEZs%7tHXtdEy`W_n$mY1TOsGyUeR-%g3}cDh`{2Pw%>EX#JQwcIvr%3!WLrGcYh6 z^mK6ysfgQp<9X350|C|tTYY)wPPj1Ffp71U@AsUY~e zdivXI?=FVP%N0#EWV76}L*`FWrQx6I1)Vx~a>}o`sdC7iCWK+0xA7(z6RD zFUc=v+wtz)_x}0wzVq|(^M9K^f8XKqT@QNZZ#8FIcT^u0Ow!AcaOc$ocHbEk<}_Q9!M#zuH}2SNB5G{1D_%t*Mn=;T1AFme^5~Sv}NtO z#?G$4CQQ$sT|2o;`q0%6=R9}sWfU%yf4aBibEEUG+uz?k)^Yr%Ft3O`F7ZW2`Dcd6 zP7R4BpO`;4zVKz+_2sE?vud(N=AY-RZY-CGo3mlBT#BZb^EWNMw@wSS^S*OM&dQpw z*D~>aKvnsndkU)q**5X3zY+GD?{|YeMRJw1+OZF;OZ7jhD6F2$>lyE}ST01L!PZbv zakD1RN&7NI{^lKuDT!P^#Kjgg)F0*vi1^49G2<6&%gHbwUa@8Kq|C00PM+4fQayLB zQP=s-)|K|ld9MEXeIa{FTfDcxr72DE-O52Zg;(OYIXfgTe~DWM4fy&O{+ literal 0 HcmV?d00001 diff --git a/website/static/img/en/dev-tools/events-icon.png b/website/static/img/en/dev-tools/events-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..51cc34f4a5be96ac4022b2869d6a28745da86e35 GIT binary patch literal 1646 zcmchY{W}u~0LLeK+bY*_oK8o{c|VU{b>$4nTsF*5B$S*;U6*-li?z+WP1#0t8289q zvtu^Hd5g`3%^K6f%vK#@Hb!Sy=l+TNKF{~%_s007wU4Y>f{ZlC|W zM|V4w-c%C+KquSJ2jTho|CLs&mCNOwot@Ry)y2idIXO8f6iTU7wzRZhu~;M$xwf{( zU@%frQuus+dV2cC#zsv|4UI{u* zwz;{PmXnloGTG$h zWMg9^27?(L9bH{rt*EGwN~I$sBUxEl+1c6V=e6_OY%CMtumFJBPrs5GJo)k_2!d@} z`h0G{pQ?mbZ#g|yMGqYVHwO%ci6sZ}Ub6rIy}RBQ+z`n+zYF_y`pgYI1+7+&3ZOb% zew(Wd==SWgc$fO{i;MT3RC}A^F-vU1Q+vl(!0@`JffI{}u#?i5oDjRQL>D~`EfBU} zu9tnwlmuUCa_?yyS{5-q1fAY+?r}FU!?aSA;x>p}4*jGH`My_=mq9|zEDcm<;cDN*R`5As zsoPg`B*KyKFXkM_DwYqNzG?|!x z5EL7`W>;EjZ~eN)d6U=f(X#;tb%abDKj1$l0-`U0#UKgA=G2q7GeUulYeJ&*Qo9U3 zukgD0d@Sj)7c026Ov3DpYHEDJ;@aIigPyMoK5f2sD|_^lensuBBb>|(2cgo>w8V`e z0e7iw1$WQx825+VaQayF=Iey2J+770%|0=^1@(I&^3zxj6aLjgobV|i8Qpn*1;+H_4Lw;jg@@xUhIY4xez+&KB}Ec&Vw0KT z#dmwc9DM{4pkwx;jo1!I&Q8WRT3WF42WPfB>jGu4FSuYf@N-e1VKg3h^Ggcu2CdL4 zAufsyL*@LlOVP?cb(Y$kHe7Y$sMj}8~K60fSv`biOZcVkO^#)l&+3z?ha<$^v7S!T@7 zGXM7_JKe{!t05lKPb%P16y-d_MNd2($+)IQ)9C>om=8^4- zBc*Gm5zLPS;m)@@c(6?How34samQ;Oxtc6D1Xy3)k+U|xUJ)FOB57Q}e9H*Sio8P8 zg!@qDnK1}7{o}m{gC_dsPsh%vKfblbmN}4Bo@OM8P6phjoBx}Bma+V`W2mmz3B82Y zPw#d&oW4QVe0zS_Wh81KMq1O&H0iti;~kG@I^Z8oR`epCVWKw<>i!U8_(n7y-Rwyy z^Dc?@L(U|X81ns5aU!GVZS!Am8I_wHkEPb$lqO$`T0jK-)`=Tdr(T&j@A*xMaTtZeR%hmFf4?5m zWBr1j_xMqRaB2F%!n&{SaydM0VZEGs2pvJ%XK-;|9!g2Or5}Yc%e8q)3PJpFbOp1p z8K;fwC+r0PzyREPdYb=Tw28yz+Y$tchoDcXEI392e*HwO>n7!>>67HnKj=|^fo?pz i>AtTxJxE6bCtT}_XKQywr~daS0B=v&1)6)rqkjQFN|*Qm literal 0 HcmV?d00001 diff --git a/website/static/img/en/dev-tools/mqtt-icon.png b/website/static/img/en/dev-tools/mqtt-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..3ecfd4272feeb3023f4497ee5124f0bbe727549c GIT binary patch literal 4401 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 literal 0 HcmV?d00001 diff --git a/website/static/img/en/dev-tools/states-icon.png b/website/static/img/en/dev-tools/states-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b425c96cf29e38bd8aaecc086b6a210dd1b8c2e0 GIT binary patch literal 677 zcmeAS@N?(olHy`uVBq!ia0vp^J|N7&3?x5zE|dgPbpbvhuK(!^cJ10#T3UMGz=4K_ zhG);7$$X@fq`+Or;B4q1>>5ltbCgt1lk_*m$Q|x{r->rPpqe8#0~YZTH&yRK_R~8 zKBvoMZX5B&28+r(uBsEbo%->o3VTy>-zQHx7MzyHfWpJ(!(6)Ys@)Iea(&-&l_JiUD|b#aeM#PmtO5L_BJmK zE<1j1Xsugv_}Ejfl`mVWHoo(=TA1^(f7RmPU0szYjQMAomjq3IyuHa!`-6ATrOec( z`9YHuj`9b(38e_``|Qaje}9MJ+Fkc&e&^oEeIPli|M=X>{SO#F%)Dmq|LgJ3AJ5L& zr61T9m;dYW-=u8D1ufOl(OUx=ckSOA8oZEmi&>Ub$v)Mf%ZVR!C(dG=oZorHC!)rC zN!r0@(MqP$eS2mwyWdN;+VIr3f!F)qr40$EqPM8=RNg+>pqIb+^#zY>f-X`alS(Zn zaj8xz&1vTnII$~$>6w$@-d87{ueUP1_e=Fmg5JaRYi~3HBZ;9wq5ieXrXN{yTMA}+ zPECHF{(|?(tas&Fuio7e+}$1Vd}~gr#6KTFc~7SMJ`r6{ObzvnAF`kEUoBs&?arKV W&0q=Fo7g2FgFIdRT-G@yGywo3iFC;T literal 0 HcmV?d00001 diff --git a/website/static/img/en/dev-tools/templates-icon.png b/website/static/img/en/dev-tools/templates-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..b8ddc151fc793feda89352255576b1589ab0fcd6 GIT binary patch literal 862 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ù&a!^(`A2Y&~Z;tKuD-#Je%c6)OW_FU6B9Jv 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 literal 0 HcmV?d00001 diff --git a/website/static/img/en/frontend/frontend-cards1.png b/website/static/img/en/frontend/frontend-cards1.png new file mode 100644 index 0000000000000000000000000000000000000000..3dc047f1f844a3b246448cc1525165d67d421348 GIT binary patch literal 13465 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 Dv-?Hp literal 0 HcmV?d00001 diff --git a/website/static/img/en/frontend/frontend-more-info-light.png b/website/static/img/en/frontend/frontend-more-info-light.png new file mode 100644 index 0000000000000000000000000000000000000000..5b4d6d482e1048546bfa397e26b3de797e334120 GIT binary patch literal 23225 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 literal 0 HcmV?d00001 diff --git a/website/static/img/en/intents/overview.png b/website/static/img/en/intents/overview.png new file mode 100644 index 0000000000000000000000000000000000000000..9a21be48bcb384d1d61f03550f8f4e249590c536 GIT binary patch literal 34753 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�@Isc8E&h{M9`$m@!9ke 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 literal 0 HcmV?d00001 diff --git a/website/static/img/oss_logo.png b/website/static/img/oss_logo.png deleted file mode 100644 index 8183e289b139e5d03ff9870d3e6bfbcd968a5edd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4370 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