diff --git a/_config.yml b/_config.yml index cbea8a327f2..c61e1b7f74f 100644 --- a/_config.yml +++ b/_config.yml @@ -140,11 +140,11 @@ social: # Home Assistant release details current_major_version: 0 current_minor_version: 55 -current_patch_version: 0 -date_released: 2017-10-07 +current_patch_version: 1 +date_released: 2017-10-15 # Either # or the anchor link to latest release notes in the blog post. # Must be prefixed with a # and have double quotes around it. # Major release: -patch_version_notes: "#" +patch_version_notes: "#release-0551---october-15" # Minor release (Example #release-0431---april-25): diff --git a/sass/custom/_paulus.scss b/sass/custom/_paulus.scss index 9e7e2c3cac7..d1345929eea 100644 --- a/sass/custom/_paulus.scss +++ b/sass/custom/_paulus.scss @@ -23,13 +23,14 @@ $primary-color: #049cdb; float: right; .algolia-autocomplete { - width: calc(100% - 58px); + width: calc(100% - 64px); margin: 0 10px; } input { border: 0; width: 100%; + outline: none; } } } diff --git a/source/_addons/cec_scan.markdown b/source/_addons/cec_scan.markdown new file mode 100644 index 00000000000..4c048eff157 --- /dev/null +++ b/source/_addons/cec_scan.markdown @@ -0,0 +1,12 @@ +--- +layout: page +title: "CEC Scanner" +description: "Scan HDMI CEC devices." +date: 2017-04-30 13:28 +sidebar: true +comments: false +sharing: true +footer: true +--- + +Help you to discover the HDMI CEC address. Start the add-on and look into log to see all connected device on HDMI. diff --git a/source/_addons/configurator.markdown b/source/_addons/configurator.markdown index f15c9b197ae..f2b2d3df19f 100644 --- a/source/_addons/configurator.markdown +++ b/source/_addons/configurator.markdown @@ -39,8 +39,6 @@ Screenshot of the HASS Configurator. ```json { - "homeassistant_api": "http://homeassistant:8123/api", - "homeassistant_password": "", "username": "admin", "password": "secret", "certfile": "fullchain.pem", @@ -52,8 +50,6 @@ Screenshot of the HASS Configurator. } ``` -- **homeassistant_api** (*Optional*): The configurator fetches some data from your running Home Assistant instance. If the API is not available through the default URL, modify this variable to fix this. -- **homeassistant_password** (*Optional*): If you plan on using API functions, you have to set your API password. Calling services of Home Assistant is prohibited without authentication. - **username** (*Optional*): Set a username to access your configuration is protected. - **password** (*Required*): Set a password for access. - **ssl** (*Optional*): Enable or Disable SSL for the editor. diff --git a/source/_addons/duckdns.markdown b/source/_addons/duckdns.markdown index 07a262fad63..9667c91e725 100644 --- a/source/_addons/duckdns.markdown +++ b/source/_addons/duckdns.markdown @@ -1,7 +1,7 @@ --- layout: page title: "DuckDNS" -description: "Automatically update your Duck DNS IP address." +description: "Automatically update your Duck DNS IP address with integrated HTTPS support via Let's Encrypt." date: 2017-04-30 13:28 sidebar: true comments: false @@ -37,6 +37,9 @@ Use the following configuration in Home Assistant to use the generated certifica ```yaml http: + base_url: https://my-domain.duckdns.org:8123 ssl_certificate: /ssl/fullchain.pem ssl_key: /ssl/privkey.pem ``` + +If you use a other port as `8123` or a SSL proxy, change the port number. diff --git a/source/_addons/lets_encrypt.markdown b/source/_addons/lets_encrypt.markdown index 976fbf43325..8917e007bf4 100644 --- a/source/_addons/lets_encrypt.markdown +++ b/source/_addons/lets_encrypt.markdown @@ -7,13 +7,17 @@ sidebar: true comments: false sharing: true footer: true -featured: true +featured: false --- +

+You should not use this if you are also using the [DuckDNS add-on]. The DuckDNS add-on has integrated Let's Encrypt support. +

+ Setup and manage a [Let's Encrypt](https://letsencrypt.org/) certificate. This will create a certificate on the first run and will auto-renew if the certificate is within 30 days of expiration.

-This add-on need port 80/443 to verify the certificate request, please stop all add-ons that also use these ports, or you may not be able to start this add-on. +This add-on uses ports 80/443 to verify the certificate request. You will need to stop all other add-ons that also use these ports. If you don't need a port (like with https you don't need port 80) you can remove this from network config.

```json @@ -36,6 +40,11 @@ Use the following configuration in Home Assistant to use the generated certifica ```yaml http: + base_url: https://my-domain.tld:8123 ssl_certificate: /ssl/fullchain.pem ssl_key: /ssl/privkey.pem ``` + +If you use a other port as `8123` or a SSL proxy, change the port number. + +[DuckDNS add-on]: /addons/duckdns/ diff --git a/source/_addons/mosquitto.markdown b/source/_addons/mosquitto.markdown index ad2fef0f620..f944dc7989c 100644 --- a/source/_addons/mosquitto.markdown +++ b/source/_addons/mosquitto.markdown @@ -46,5 +46,5 @@ To use the Mosquitto as [broker](/docs/mqtt/broker/#run-your-own) add the follow ```yaml # Example configuration.yaml entry mqtt: - broker: 172.17.0.1 + broker: core-mosquitto ``` diff --git a/source/_addons/rpc_shutdown.markdown b/source/_addons/rpc_shutdown.markdown index ba1fe46ebee..10aba2dcf5f 100644 --- a/source/_addons/rpc_shutdown.markdown +++ b/source/_addons/rpc_shutdown.markdown @@ -9,7 +9,7 @@ sharing: true footer: true --- -Allow to shutdown a computer with a service call from Home-Assistant. +Allow to shutdown a Windows computer with a service call from Home Assistant. ```json { diff --git a/source/_components/alarm_control_panel.manual.markdown b/source/_components/alarm_control_panel.manual.markdown index ffb15498103..d4f6227fa4b 100644 --- a/source/_components/alarm_control_panel.manual.markdown +++ b/source/_components/alarm_control_panel.manual.markdown @@ -28,7 +28,7 @@ Configuration variables: - **pending_time** (*Optional*): The time in seconds of the pending time before arming the alarm. Default is 60 seconds. - **trigger_time** (*Optional*): The time in seconds of the trigger time in which the alarm is firing. Default is 120 seconds. - **disarm_after_trigger** (*Optional*): If true, the alarm will automatically disarm after it has been triggered instead of returning to the previous state. -- **armed_home|armed_away|armed_night|triggered** (*Optional*): State specific settings +- **armed_home/armed_away/armed_night/triggered** (*Optional*): State specific settings - **pending_time**: State specific pending time override. In the config example below, armed_home state will have no pending time and triggered state will have pending time of 20 second whereas armed_away state will have a default pending time of 30 seconds. diff --git a/source/_components/alarmdecoder.markdown b/source/_components/alarmdecoder.markdown index b3b54f2959f..82beb4b5e62 100644 --- a/source/_components/alarmdecoder.markdown +++ b/source/_components/alarmdecoder.markdown @@ -50,6 +50,6 @@ Configuration variables: - **host** (*Optional*): The IP address of the AlarmDecoder device on your home network, if using socket type. Default: `localhost` - **port** (*Optional*): The port of the AlarmDecoder device on your home network, if using socket type. Default: `10000` - **path** (*Optional*): The path of the AlarmDecoder device, if using socket type. Default: `/dev/ttyUSB0` -- **baud** (*Optional*): The baud rate of the AlarmDecoder device, if using serial type. Default: `115200` +- **baudrate** (*Optional*): The baud rate of the AlarmDecoder device, if using serial type. Default: `115200` - **panel_display** (*Optional*): Create a sensor called sensor.alarm_display to match the Alarm Keypad display. Default: `off` - **zones** (*Optional*): AlarmDecoder has no way to tell us which zones are actually in use, so each zone must be configured in Home Assistant. For each zone, at least a name must be given. For more information on the available zone types, take a look at the [Binary Sensor](/components/binary_sensor.alarmdecoder/) docs. *Note: If no zones are specified, Home Assistant will not load any binary_sensor components.* diff --git a/source/_components/alexa.markdown b/source/_components/alexa.markdown index d97bf68ae1b..179fb4076c1 100644 --- a/source/_components/alexa.markdown +++ b/source/_components/alexa.markdown @@ -101,7 +101,7 @@ This means that we can now ask Alexa things like: When activated, the Alexa component will have Home Assistant's native intent support handle the incoming intents. If you want to run actions based on intents, use the [`intent_script`](/components/intent_script) component. -To enable Alex add the following entry to your `configuration.yaml` file: +To enable Alexa add the following entry to your `configuration.yaml` file: ```yaml alexa: diff --git a/source/_components/apiai.markdown b/source/_components/apiai.markdown index 664540b6a1c..4e6d73d024f 100644 --- a/source/_components/apiai.markdown +++ b/source/_components/apiai.markdown @@ -21,7 +21,7 @@ api.ai could be integrated with many popular messaging, virtual assistant and Io Using Api.ai will be easy to create conversations like: - > User: Which is the temperature at home? + > User: What is the temperature at home? > > Bot: The temperature is 34 degrees diff --git a/source/_components/binary_sensor.bayesian.markdown b/source/_components/binary_sensor.bayesian.markdown index 53505593b6b..b5d20c509ff 100644 --- a/source/_components/binary_sensor.bayesian.markdown +++ b/source/_components/binary_sensor.bayesian.markdown @@ -40,8 +40,8 @@ Configuration variables: - **entity_id** (*Required*): Name of the entity to monitor. - **prob_given_true** (*Required*): The probability of the observation occurring, given the event is `true`. - **prob_given_false** (*Optional*): The probability of the observation occurring, given the event is `false` can be set as well. If `prob_given_false` is not set, it will default to `1 - prob_given_true`. - - **platform** (*Required*): The only supported observation platforms are `state` and `numeric_state`, which are modeled after their corresponding triggers for automations. - - **to_state** (*Required*): The target start. + - **platform** (*Required*): The only supported observation platforms are `state` and `numeric_state`, which are modeled after their corresponding triggers for automations, requiring `before` and/or `after` instead of `to_state`. + - **to_state** (*Required*): The target state. - **probability_threshold** (*Optional*): The probability at which the sensor should trigger to `on`. - **name** (*Optional*): Name of the sensor to use in the frontend. Defaults to `Bayesian Binary`. @@ -74,3 +74,16 @@ binary_sensor: platform: 'state' to_state: 'below_horizon' ``` +```yaml +# Example configuration.yaml entry +binary_sensor: + name: 'Heat On' + platform: 'bayesian' + prior: 0.2 + probability_threshold: 0.9 + observations: + - entity_id: 'sensor.outside_air_temperature_fahrenheit' + prob_given_true: 0.95 + platform: 'numeric_state' + below: 50 +``` diff --git a/source/_components/binary_sensor.http.markdown b/source/_components/binary_sensor.http.markdown index 8e96f517918..aaddf8a7256 100644 --- a/source/_components/binary_sensor.http.markdown +++ b/source/_components/binary_sensor.http.markdown @@ -12,6 +12,10 @@ ha_category: Binary Sensor ha_release: pre 0.7 --- +The HTTP binary sensor is dynamically created with the first request that is made to its URL. You don't have to define it in the configuration first. + +The sensor will then exist as long as Home Assistant is running. After a restart of Home Assistant the sensor will be gone until it is triggered again. + The URL for a binary sensor looks like the example below: ```bash diff --git a/source/_components/binary_sensor.mystrom.markdown b/source/_components/binary_sensor.mystrom.markdown index 9deeb443452..6d093a2f259 100644 --- a/source/_components/binary_sensor.mystrom.markdown +++ b/source/_components/binary_sensor.mystrom.markdown @@ -38,7 +38,7 @@ binary_sensor: ### {% linkable_title Setup of the myStrom Buttons %} -You need to configure every button to make it work with Home Assistant. First connect the Wifi Buttons to your wireless network. Keep in mind that they only support WPS (Wi-FI Protected Setup). Once a button is connected you have three minutes to set the actions for the push patterns. The fastest way is to use `curl`. Check the [documentation](https://mystrom.ch/wp-content/uploads/REST_API_WBP.txt) of the WiFi Button for further details about the implementation (`http://` is replaced by `get://` or `post://`). `action` is the name of the corresponding push pattern (see above). +You need to configure every button to make it work with Home Assistant. First connect the Wifi Buttons to your wireless network. Once a button is connected you have three minutes to set the actions for the push patterns. The fastest way is to use `curl`. Check the [documentation](https://mystrom.ch/wp-content/uploads/REST_API_WBP.txt) of the WiFi Button for further details about the implementation (`http://` is replaced by `get://` or `post://`). `action` is the name of the corresponding push pattern (see above). The endpoint that is receiving the data is `[IP address Home Assistant]:8123/api/mystrom`. diff --git a/source/_components/climate.mysensors.markdown b/source/_components/climate.mysensors.markdown index c629b0083fc..a61fae33f90 100644 --- a/source/_components/climate.mysensors.markdown +++ b/source/_components/climate.mysensors.markdown @@ -98,6 +98,8 @@ MyMessage msgHVACSetPointC(CHILD_ID_HVAC, V_HVAC_SETPOINT_COOL); MyMessage msgHVACSpeed(CHILD_ID_HVAC, V_HVAC_SPEED); MyMessage msgHVACFlowState(CHILD_ID_HVAC, V_HVAC_FLOW_STATE); +bool initialValueSent = false; + void presentation() { sendSketchInfo("Heatpump", "2.1"); present(CHILD_ID_HVAC, S_HVAC, "Thermostat"); @@ -108,6 +110,13 @@ void setup() { void loop() { // put your main code here, to run repeatedly: + if (!initialValueSent) { + send(msgHVACSetPointC.set(20)); + send(msgHVACSpeed.set("Auto")); + send(msgHVACFlowState.set("Off")); + + initialValueSent = true; + } } void receive(const MyMessage &message) { diff --git a/source/_components/config.markdown b/source/_components/config.markdown index 7490d3e4064..514840e7f73 100644 --- a/source/_components/config.markdown +++ b/source/_components/config.markdown @@ -1,7 +1,7 @@ --- layout: page title: "Config" -description: "Instructions how to setup the configuration panel Home Assistant." +description: "Instructions how to setup the configuration panel for Home Assistant." date: 2017-02-24 20:00 sidebar: true comments: false @@ -21,16 +21,7 @@ To enable the configuration panel, add the following to your `configuration.yaml config: ``` -### {% linkable_title Group & Views %} - -The **Groups & Views** sections allows you to re-arrange your [groups](/components/group/). Also, you can edit the group's setting and switch between "view" and "group". - -

- -

- - -### {% linkable_title Server Management %} +### {% linkable_title General %} This section enables you to control Home Assistant from within Home Assistant. Check your configuration, reload the core, groups, and automation, and the Home Assistant process itself. With a single mouse click. @@ -38,4 +29,18 @@ This section enables you to control Home Assistant from within Home Assistant. C

+### {% linkable_title Customization %} +This section enables you to customize entities within Home Assistant. Use this to set friendly names, change icons, hide entities, and modify other attributes. + +### {% linkable_title Automation %} + +This section enables you to create and modify automations from within Home Assistant, without needing to write out the yaml code. + +### {% linkable_title Script %} + +Similar to the automation editor, this section enables you to create and modify scripts from within Home Assistant, without needing to write out the yaml code. + +### {% linkable_title Z-Wave %} + +This section enables you to control your Z-Wave network and devices from within Home Assistant. You can add and remove devices, as well as change device specific configuration variables. diff --git a/source/_components/device_tracker.gpslogger.markdown b/source/_components/device_tracker.gpslogger.markdown index d0f92db962b..6b6a439cdee 100644 --- a/source/_components/device_tracker.gpslogger.markdown +++ b/source/_components/device_tracker.gpslogger.markdown @@ -11,7 +11,7 @@ ha_category: Presence Detection ha_release: 0.34 --- -This platform allows you to detect presence using [GPSLogger](http://code.mendhak.com/gpslogger/). GPSLogger is an open source app for [Android](https://play.google.com/store/apps/details?id=com.mendhak.gpslogger) that allows users to set up a `GET` request to update GPS coordinates. This can be configured with Home Assistant to update your location. +The `gpslogger` device tracker platform allows you to detect presence using [GPSLogger](http://code.mendhak.com/gpslogger/). GPSLogger is an open source app for [Android](https://play.google.com/store/apps/details?id=com.mendhak.gpslogger) that allows users to set up a `GET` request to update GPS coordinates. This can be configured with Home Assistant to update your location. To integrate GPSLogger in Home Assistant, add the following section to your `configuration.yaml` file: @@ -23,34 +23,52 @@ device_tracker: ## {% linkable_title Setup on your smartphone %} -- [GPSLogger for Android](https://play.google.com/store/apps/details?id=com.mendhak.gpslogger) +Install [GPSLogger for Android](https://play.google.com/store/apps/details?id=com.mendhak.gpslogger) on your device. -To configure GPSLogger, you must set up the app to send a `GET` request to your Home Assistant server at -```yaml -http:///api/gpslogger?latitude=%LAT&longitude=%LON&device=%SER&accuracy=%ACC&battery=%BATT&speed=%SPD&direction=%DIR&altitude=%ALT&provider=%PROV&activity=%ACT +After the launch, go to **General Options**. Enable **Start on bootup** and **Start on app launch**. + +

+ + GPSLogger Settings +

+ +Go to **Logging details** and disable **Log to GPX**. **Log to KML**, and **Log to NMEA**. Enable **Log to custom URL**. + +

+ + Logging Details +

+ +Right after enabling, the app will take you to the **Log to custom URL** settings. + +

+ + Log to custom URL details +

+ +The relevant endpoint is: `/api/gpslogger` + +```text +http://[IP address Home Assistant]:[Port]/api/gpslogger? + latitude=%LAT&longitude=%LON&device=%SER&accuracy=%ACC + &battery=%BATT&speed=%SPD&direction=%DIR + &altitude=%ALT&provider=%PROV&activity=%ACT ``` -. Make sure to include the API password if you have configured a password in Home Assistant (add `&api_password=` to the end of the URL). Configure that options under "General Options": -- Start on boot: yes -- Start on app launch: yes +Add the above URL after you modified it with your settings into the **URL** field. Remove the line breaks as they are only there to make the URL readable here. -Set the URL under "General Options -> Logging details": +- It's HIGHLY recommended to use SSL/TLS. +- Use the domain that Home Assistant is available on the internet or the public IP address. Can be a local IP address if you are using a VPN setup. +- Only remove `[Port]` if your Home Assistant instance is using port 80. Otherwise set it to 8123. +- Click on **Parameters** in the app and you will see all available parameters for the URL. For Home Assistant only the above URL will work. +- Make sure to include your [API password](/components/http/) if you have configured a password. Add `&api_password=[Your pasword]` to the end of the URL. +- You can change the name of your device name by replacing `&device=%SER` with `&device=[Devicename]`. -- Log to GPX: no -- Log to KML: no -- Log to custom URL: yes and set -```yaml -http:///api/gpslogger?latitude=%LAT&longitude=%LON&device=%SER&accuracy=%ACC&battery=%BATT&speed=%SPD&direction=%DIR&altitude=%ALT&provider=%PROV&activity=%ACT -``` -(be sure you include API password (`&api_password=`) if needed, or you can also use HTTP Basic authentication `http://:@/api/gpslogger...`) -- Log to OpenGTS Server: no -- Log to Plain Text: no -- Log to NMEA: no +If your battery drains fast then you can tune the performence of GPSLogger under **Performance** -> **Location providers** -You should also tune GPSLogger performance to save your battery under "General Options -> Logging details -> Performance -> Location providers": +

+ + Performance +

-- GPS: no -- Network: no -- Passive: yes - -A request can be forced from the app to test if everything is working fine. A succesfull request will update `known_devices.yaml` with device serial number. +A request can be forced from the app to test if everything is working fine. A succesful request will update the `known_devices.yaml` file with the device's serial number. diff --git a/source/_components/device_tracker.mqtt.markdown b/source/_components/device_tracker.mqtt.markdown index 2b1bd0d519a..d60b895c50e 100644 --- a/source/_components/device_tracker.mqtt.markdown +++ b/source/_components/device_tracker.mqtt.markdown @@ -22,8 +22,8 @@ To use this device tracker in your installation, add the following to your `conf device_tracker: - platform: mqtt devices: - paulus_oneplus: /location/paulus - annetherese_n4: /location/annetherese + paulus_oneplus: 'location/paulus' + annetherese_n4: 'location/annetherese' ``` Configuration variables: diff --git a/source/_components/device_tracker.owntracks_http.markdown b/source/_components/device_tracker.owntracks_http.markdown index 830883a8800..7e91746e55a 100644 --- a/source/_components/device_tracker.owntracks_http.markdown +++ b/source/_components/device_tracker.owntracks_http.markdown @@ -29,8 +29,8 @@ For configuration options and usage instructions, read the documentation for the Open OwnTracks and go to Connection preferences: - - Mode: Private HTTP - - Host: /api/owntracks// - - Identification: turn authentication on, username `homeassistant` and password is your API password that you use to login to Home Assistant. + - Mode: Select **Private HTTP** + - Host: [Home Assistant URL]:[port]/api/owntracks/[your name]/[device name] + - Identification: Turn **Authentication** on, username `homeassistant` and password is your API password that you use to login to Home Assistant. Host example: If I host my Home Assistant at `https://example.duckdns.org`, my name is Paulus and my phone is a Pixel I would set the host to be `https://example.duckdns.org/api/owntracks/paulus/pixel`. This will result in an entity with an ID of `device_tracker.paulus_pixel`. You can pick any name for the user and the device. diff --git a/source/_components/discovery.markdown b/source/_components/discovery.markdown index c133e9a7125..726da20c46c 100644 --- a/source/_components/discovery.markdown +++ b/source/_components/discovery.markdown @@ -27,7 +27,6 @@ Home Assistant can discover and automatically configure [zeroconf](https://en.wi * DirecTV * Apple TV * Yeelight Sunflower Bulb - * Flux Led/MagicLight * Linn / Openhome * Denon Network Receivers * Bose Soundtouch speakers @@ -59,7 +58,6 @@ Valid values for ignore are: * `bose_soundtouch`: Bose Soundtouch speakers * `denonavr`: Denon Network Receivers * `directv`: DirecTV - * `flux_led`: Flux Led/MagicLight * `frontier_silicon` * `google_cast`: Google Chromecast * `harmony`: Harmony Hub diff --git a/source/_components/emulated_hue.markdown b/source/_components/emulated_hue.markdown index a78b478dba4..b6dfa32c7e5 100644 --- a/source/_components/emulated_hue.markdown +++ b/source/_components/emulated_hue.markdown @@ -13,6 +13,10 @@ ha_release: 0.27 ha_iot_class: "Local Push" --- +

+At this time `emulated_hue` doesn't appear to be working for new Google Home users. +

+ The `emulated_hue` component provides a virtual Philips Hue bridge, written entirely in software, that allows services that work with the Hue API to interact with Home Assistant entities. The driving use case behind this functionality is to allow Home Assistant to work with an Amazon Echo or Google Home with no set up cost outside of configuration changes. The virtual bridge has the ability to turn entities on or off, or change the brightness of dimmable lights. The volume level of media players can be controlled as brightness. diff --git a/source/_components/hdmi_cec.markdown b/source/_components/hdmi_cec.markdown index 03f775e47fa..43c95c45ada 100644 --- a/source/_components/hdmi_cec.markdown +++ b/source/_components/hdmi_cec.markdown @@ -235,7 +235,7 @@ Toggle mute: {"mute": ""} ``` -value is ignores. +value is ignored. ## {% linkable_title Useful References %} diff --git a/source/_components/input_datetime.markdown b/source/_components/input_datetime.markdown index f9351f09848..0ae8cae833c 100644 --- a/source/_components/input_datetime.markdown +++ b/source/_components/input_datetime.markdown @@ -12,6 +12,10 @@ ha_category: Automation ha_release: 0.55 --- +

+This component is a work in progress. The frontend is not yet implemented. +

+ The `input_datetime` component allows the user to define date and time values that can be controlled via the frontend and can be used within automations and templates. To add three datetime inputs to your installation, one with both date and time, and one with date or time each, add the following lines to your `configuration.yaml`: diff --git a/source/_components/input_number.markdown b/source/_components/input_number.markdown index 3a5202960ba..e043b924696 100644 --- a/source/_components/input_number.markdown +++ b/source/_components/input_number.markdown @@ -9,10 +9,14 @@ sharing: true footer: true logo: home-assistant.png ha_category: Automation -ha_release: 0.16 +ha_release: 0.55 redirect_from: /components/input_slider/ --- +

+Before version 0.55 this component was known as `input_slider` and did not have the `mode` configuration option. +

+ The `input_number` component allows the user to define values that can be controlled via the frontend and can be used within conditions of automation. The frontend can display a slider, or a numeric input box. Changes to the slider or numeric input box generate state events. These state events can be utilized as `automation` triggers as well. To enable this input number in your installation, add the following lines to your `configuration.yaml`: diff --git a/source/_components/light.xiaomi_aqara.markdown b/source/_components/light.xiaomi_aqara.markdown index 561cf132c29..25e01ba22c7 100644 --- a/source/_components/light.xiaomi_aqara.markdown +++ b/source/_components/light.xiaomi_aqara.markdown @@ -14,7 +14,7 @@ ha_iot_class: "Local Push" --- -The `xiaomi aqara` light platform allows you to get data from your [Xiaomi](http://www.mi.com/en/) lights. +The `xiaomi aqara` light platform allows you to control the internal light of the xiaomi gateway. The component will be loaded automatically and provides a device called `light.gateway_light_28ffffffffff`. The requirement is that you have setup [Xiaomi aqara](/components/xiaomi_aqara/). diff --git a/source/_components/logger.markdown b/source/_components/logger.markdown index e04e44511b0..70168cf440b 100644 --- a/source/_components/logger.markdown +++ b/source/_components/logger.markdown @@ -68,8 +68,16 @@ data: homeassistant.components.media_player.yamaha: debug ``` -The log information are stored in the [configuration directory](/docs/configuration/) as `home-assistant.log` and you can read it with the command-line tool `cat` or follow it dynamically with `tail -f`. If you are a Hassbian user you can use the example below: +The log information are stored in the [configuration directory](/docs/configuration/) as `home-assistant.log` and you can read it with the command-line tool `cat` or follow it dynamically with `tail -f`. + +If you are a Hassbian user you can use the example below: ```bash $ tail -f /home/homeassistant/.homeassistant/home-assistant.log ``` + +If you are a Hass.io user you can use the example below, whenlogged in through the ssh addon: + +```bash +$ tail -f /config/home-assistant.log +``` diff --git a/source/_components/media_player.denonavr.markdown b/source/_components/media_player.denonavr.markdown index b95cf5899b3..a64c85c44b3 100644 --- a/source/_components/media_player.denonavr.markdown +++ b/source/_components/media_player.denonavr.markdown @@ -24,6 +24,7 @@ Supported devices: - Denon AVR-1912 - Denon AVR-2312CI - Denon AVR-3311CI +- Denon AVR-4810 - Marantz M-CR603 - Marantz M-RC610 - Marantz SR5008 diff --git a/source/_components/media_player.markdown b/source/_components/media_player.markdown index 90fe9a22423..daa7b072c55 100644 --- a/source/_components/media_player.markdown +++ b/source/_components/media_player.markdown @@ -14,7 +14,7 @@ Interacts with media players on your network. Please check the sidebar for a ful ## {% linkable_title Services %} ### {% linkable_title Media control services %} -Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, `media_play_pause`, `play_media`, `media_pause`, `media_stop`, `media_next_track`, `media_previous_track`, `clear_playlist` +Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, `media_play_pause`, `media_play`, `media_pause`, `media_stop`, `media_next_track`, `media_previous_track`, `clear_playlist` | Service data attribute | Optional | Description | | ---------------------- | -------- | ------------------------------------------------ | diff --git a/source/_components/media_player.vizio.markdown b/source/_components/media_player.vizio.markdown index 989d37113d7..ae68385e13a 100644 --- a/source/_components/media_player.vizio.markdown +++ b/source/_components/media_player.vizio.markdown @@ -20,10 +20,15 @@ The `vizio` component will allow you to control [SmartCast](https://www.vizio.co Before adding your TV to Home Assistant you'll need to pair it manually. To do so follow these steps: -Install the command-line tool using pip (or you can choose to download it manually): +Install the command-line tool using `pip` (or you can choose to download it manually): ```bash $ pip3 install git+https://github.com/vkorn/pyvizio.git@master +``` + +or + +```bash $ pip3 install -I . ``` diff --git a/source/_components/notify.facebook.markdown b/source/_components/notify.facebook.markdown index 1d76436a13e..209fe6c827d 100644 --- a/source/_components/notify.facebook.markdown +++ b/source/_components/notify.facebook.markdown @@ -46,8 +46,8 @@ automation: data: message: 'Good Evening' target: - - +919413017584 - - +919784516314 + - '+919413017584' + - '+919784516314' ``` You can also send messages to users that do not have stored their phone number with Facebook, but this requires a bit more work. The Messenger platform uses page specific user IDs instead of a global user ID. You will need to enable a webhook for the "messages" event in Facebook's developer console. Once a user writes a message to a page, that webhook will then receive the user's page specifc ID as part of the webhook's payload. Below is a simple PHP script that reacts to the message "get my id" and sends a reply containing the user's ID: diff --git a/source/_components/notify.telegram.markdown b/source/_components/notify.telegram.markdown index 6bd390bdb75..7df967d6289 100644 --- a/source/_components/notify.telegram.markdown +++ b/source/_components/notify.telegram.markdown @@ -28,8 +28,30 @@ The quickest way to retrieve your `chat_id` is visiting [https://api.telegram.or The result set will include your chat ID as `id` in the `from` section: ```json -{"ok":true,"result":[{"update_id":254199982, -"message":{"message_id":27,"from":{"id":123456789,"first_name":"YOUR_FIRST_NAME YOUR_NICK_NAME","last_name":"YOUR_LAST_NAME","username":"YOUR_NICK_NAME"},"chat":{"id":123456789,"first_name":"YOUR_FIRST_NAME YOUR_NICK_NAME","last_name":"YOUR_LAST_NAME","username":"YOUR_NICK_NAME","type":"private"},"date":1678292650,"text":"test"}}]} +{ + "ok": true, + "result": [{ + "update_id": 254199982, + "message": { + "message_id": 27, + "from": { + "id": 123456789, + "first_name": "YOUR_FIRST_NAME YOUR_NICK_NAME", + "last_name": "YOUR_LAST_NAME", + "username": "YOUR_NICK_NAME" + }, + "chat": { + "id": 123456789, + "first_name": "YOUR_FIRST_NAME YOUR_NICK_NAME", + "last_name": "YOUR_LAST_NAME", + "username": "YOUR_NICK_NAME", + "type": "private" + }, + "date": 1678292650, + "text": "test" + } + }] +} ``` Another way to get your chat ID directly is described below. Start your Python interpreter from the command-line: diff --git a/source/_components/panel_custom.markdown b/source/_components/panel_custom.markdown index 1ed44576e58..49775f28557 100644 --- a/source/_components/panel_custom.markdown +++ b/source/_components/panel_custom.markdown @@ -18,7 +18,7 @@ The `panel_custom` support allows you to add additional panels to your Home Assi To enable customized panels in your installation, add the following to your `configuration.yaml` file: ```yaml -# Example configuration.yaml entry +# Example configuration.yaml entry for https://github.com/home-assistant/example-custom-config/blob/master/panels/hello_world.html panel_custom: - name: todomvc sidebar_title: TodoMVC @@ -26,7 +26,7 @@ panel_custom: url_path: my-todomvc webcomponent_path: /home/hass/hello.html config: - hello: world + who: world ``` Configuration variables: diff --git a/source/_components/recorder.markdown b/source/_components/recorder.markdown index 4eeeb72ee8b..b96abb90a48 100644 --- a/source/_components/recorder.markdown +++ b/source/_components/recorder.markdown @@ -27,7 +27,7 @@ recorder: Configuration variables: -- **purge_interval** (*Optional*): (days) Enable scheduled purge of older events and states. The purge task runs every x days, starting from when Home Assistant is started. If you restart your instance more frequently, than the purge will never take place. You can use [service](#service) call `recorder.purge` when needed. +- **purge_interval** (*Optional*): (days) Enable scheduled purge of older events and states. The purge task runs every x days, starting from when Home Assistant is started. If you restart your instance more frequently, than the purge will never take place. You can use [service](#service-purge) call `recorder.purge` when needed. - **purge_keep_days** (*Required with `purge_interval`*): Specify number of history days to keep in recorder database after purge. - **exclude** (*Optional*): Configure which components should be excluded from recordings. - **entities** (*Optional*): The list of entity ids to be excluded from recordings. diff --git a/source/_components/sensor.gitter.markdown b/source/_components/sensor.gitter.markdown index 2ed03c0e856..55b8d29fe40 100644 --- a/source/_components/sensor.gitter.markdown +++ b/source/_components/sensor.gitter.markdown @@ -15,6 +15,8 @@ ha_release: 0.47 This `gitter` sensor allows one to monitor a [Gitter.im](https://gitter.im) chatroom for unread messages. +Visit [Gitter Developer Apps](https://developer.gitter.im/apps) to retrieve your "Personal Access Token". + To use a Gitter sensor in your installation, add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/sensor.http.markdown b/source/_components/sensor.http.markdown index 5f912103905..c119330eb41 100644 --- a/source/_components/sensor.http.markdown +++ b/source/_components/sensor.http.markdown @@ -13,6 +13,11 @@ ha_release: pre 0.7 ha_iot_class: "Local Push" --- + +The HTTP sensor is dynamically created with the first request that is made to its URL. You don't have to define it in the configuration first. + +The sensor will then exist as long as Home Assistant is running. After a restart of Home Assistant the sensor will be gone until it is triggered again. + The URL for a sensor looks like the example below: ```bash diff --git a/source/_components/sensor.onewire.markdown b/source/_components/sensor.onewire.markdown index 4ec2ca7565e..19396863493 100644 --- a/source/_components/sensor.onewire.markdown +++ b/source/_components/sensor.onewire.markdown @@ -22,25 +22,38 @@ Supported devices: - [DS1822](https://datasheets.maximintegrated.com/en/ds/DS1822.pdf) - [DS1825](https://datasheets.maximintegrated.com/en/ds/DS1825.pdf) - [DS28EA00](https://datasheets.maximintegrated.com/en/ds/DS28EA00.pdf) temperature sensors -- [DS2406/TAI-8570] (https://datasheets.maximintegrated.com/en/ds/DS2406.pdf) Temperature and pressure sensor made by AAG -- [DS2438/B1-R1-A] (https://datasheets.maximintegrated.com/en/ds/DS2438.pdf) Temperature, pressure and humidity sensor by AAG +- [DS2406/TAI-8570](https://datasheets.maximintegrated.com/en/ds/DS2406.pdf) Temperature and pressure sensor made by AAG +- [DS2438/B1-R1-A](https://datasheets.maximintegrated.com/en/ds/DS2438.pdf) Temperature, pressure and humidity sensor by AAG -The 1-Wire bus can be connected directly to the IO pins of Raspberry Pi or using dedicated interface adapter (e.g [DS9490R](https://datasheets.maximintegrated.com/en/ds/DS9490-DS9490R.pdf)). When an interface adapter is used, sensors can be accessed on Linux hosts via [owfs 1-Wire file system](http://owfs.org/). When using an interface adapter and the owfs, the 'mount_dir' option must be configured to correspond a directory, where owfs device tree has been mounted. If you are using Raspberry Pi and IO pin connected bus setup, don't use the 'mount_dir' option. +The 1-Wire bus can be connected directly to the IO pins of Raspberry Pi or using dedicated interface adapter (e.g [DS9490R](https://datasheets.maximintegrated.com/en/ds/DS9490-DS9490R.pdf)). + +#### Raspberry Pi setup +In order ot setup 1-Wire support on Raspberry Pi, you'll need to edit `/boot/config.txt` following [this documentation](https://www.waveshare.com/wiki/Raspberry_Pi_Tutorial_Series:_1-Wire_DS18B20_Sensor#Enable_1-Wire). Don't use the `mount_dir` option. + +#### Interface adapter setup +When an interface adapter is used, sensors can be accessed on Linux hosts via [owfs 1-Wire file system](http://owfs.org/). When using an interface adapter and the owfs, the `mount_dir` option must be configured to correspond a directory, where owfs device tree has been mounted.

This component has been modified to work with devices with multiple sensors which will cause a discontinuity in recorded values. Existing devices will receive a new ID and therefore show up as new devices. If you wish to maintain continuity it can be resolved in the database by renaming the old devices to the new names. -Connect to your database using the instructions from https://home-assistant.io/docs/backend/database/ -Check the names of sensors: +Connect to your database using the instructions from [home-assistant.io/docs/backend/database/](https://home-assistant.io/docs/backend/database/). Check the names of sensors: + +```sql SELECT entity_id, COUNT(*) as count FROM states GROUP BY entity_id ORDER BY count DESC LIMIT 10; +``` Alter the names of sensors using the following examples: + +```sql UPDATE states SET entity_id='sensor._temperature' WHERE entity_id LIKE 'sensor.%' AND attributes LIKE '%\u00b0C%'; UPDATE states SET entity_id='sensor._pressure' WHERE entity_id LIKE 'sensor.%' AND attributes LIKE '%mb%'; UPDATE states SET entity_id='sensor._humidity' WHERE entity_id LIKE 'sensor.%' AND attributes LIKE '%%%' ESCAPE ''; -Remember to replace with the actual name of the sensor as seen in the SELECT query. +``` +Remember to replace `` with the actual name of the sensor as seen in the `SELECT` query.

+#### Home Assistant setup + To enable One wire sensors in your installation, add the following to your `configuration.yaml` file: ```yaml diff --git a/source/_components/sensor.season.markdown b/source/_components/sensor.season.markdown index da386ca5015..6297420cd15 100644 --- a/source/_components/sensor.season.markdown +++ b/source/_components/sensor.season.markdown @@ -8,6 +8,7 @@ comments: false sharing: true footer: true ha_category: Sensor +logo: home-assistant.png ha_iot_class: "Local Polling" ha_release: 0.53 --- diff --git a/source/_components/switch.flux.markdown b/source/_components/switch.flux.markdown index f5ac2b19a00..d53a0714ff6 100644 --- a/source/_components/switch.flux.markdown +++ b/source/_components/switch.flux.markdown @@ -25,19 +25,10 @@ To use the Flux switch in your installation, add the following to your `configur ```yaml # Example configuration.yaml entry switch: - platform: flux - lights: - - light.desk - - light.lamp - name: Fluxer - start_time: '7:00' - stop_time: '23:00' - start_colortemp: 4000 - sunset_colortemp: 3000 - stop_colortemp: 1900 - brightness: 200 - disable_brightness_adjust: True - mode: xy + - platform: flux + lights: + - light.desk + - light.lamp ``` Configuration variables: @@ -53,3 +44,23 @@ Configuration variables: - **disable_brightness_adjust** (*Optional*): If true, brightness will not be adjusted besides color temperature. Defaults to False. - **mode** (*Optional*): Select how color temperature is passed to lights. Valid values are `xy`, `mired` and `rgb`. Defaults to `xy`. +Full example: + +```yaml +# Example configuration.yaml entry +switch: + - platform: flux + lights: + - light.desk + - light.lamp + name: Fluxer + start_time: '7:00' + stop_time: '23:00' + start_colortemp: 4000 + sunset_colortemp: 3000 + stop_colortemp: 1900 + brightness: 200 + disable_brightness_adjust: True + mode: xy +``` + diff --git a/source/_components/switch.rpi_gpio.markdown b/source/_components/switch.rpi_gpio.markdown index 639bcdc8a1c..2e1d74786d1 100644 --- a/source/_components/switch.rpi_gpio.markdown +++ b/source/_components/switch.rpi_gpio.markdown @@ -30,8 +30,20 @@ switch: Configuration variables: - **ports** array (*Required*): Array of used ports. - - **port: name** (*Required*): Port numbers and corresponding names. + - **port: name** (*Required*): Port numbers and corresponding names (GPIO #). - **invert_logic** (*Optional*): If true, inverts the output logic to ACTIVE LOW. Default is false (ACTIVE HIGH). For more details about the GPIO layout, visit the Wikipedia [article](https://en.wikipedia.org/wiki/Raspberry_Pi#GPIO_connector) about the Raspberry Pi. +A common question is what does Port refer to, this number is the actual GPIO # not the pin #. +For example, if you have a relay connected to pin 11 its GPIO # is 17. + +```yaml +# Example configuration.yaml entry +switch: + - platform: rpi_gpio + ports: + 17: Speaker Relay +``` + + diff --git a/source/_components/xiaomi_aqara.markdown b/source/_components/xiaomi_aqara.markdown index 37919505bb2..e47c4f61292 100644 --- a/source/_components/xiaomi_aqara.markdown +++ b/source/_components/xiaomi_aqara.markdown @@ -59,8 +59,8 @@ To enable {{ page.title }} in your installation, add the following to your `conf # You can leave mac empty if you only have one gateway. xiaomi_aqara: gateways: - - mac: - key: xxxxxxxxxxxxxxxx + - mac: + key: xxxxxxxxxxxxxxxx ``` ### {% linkable_title Multiple Gateways %} @@ -88,12 +88,12 @@ xiaomi_aqara: {% configuration %} mac: - description: The MAC of your gateway. *Optional if only using one gateway.* - required: true + description: The MAC address of your gateway. *Optional if only using one gateway.* + required: false type: string key: description: The key of your gateway. *Optional if only using sensors and/or binary sensors.* - required: true + required: false type: string discovery_retry: description: Number of times that Home Assistant should try to reconnect to the gateway. @@ -105,6 +105,10 @@ xiaomi_aqara: required: false type: string default: any + host: + description: The host / ip address of the gateway. If this parameter is used the multicast discovery of the gateway is skipped. + required: false + type: string {% endconfiguration %} ### {% linkable_title Services %} @@ -154,6 +158,10 @@ and stops the sound when the button is pressed once. ## {% linkable_title Troubleshooting %} +### {% linkable_title Initial setup problem %} + +If you run into trouble initializing the gateway with your app, try another smartphone. I had trouble with the OnePlus 3, but it worked with a Nexus 5. + ### {% linkable_title Connection problem %} ```bash @@ -164,6 +172,7 @@ and stops the sound when the button is pressed once. That means that Home Assistant is not getting any response from your Xiaomi gateway. Might be a local network problem or your firewall. - Make sure you have [enabled LAN access](https://community.home-assistant.io/t/beta-xiaomi-gateway-integration/8213/1832). - Turn off the firewall on the system where Home Assistant is running. +- Ensure your router supports multicast as this is a requirement of the Xiaomi GW - Try to leave the MAC address `mac:` blank. - Try to set `discovery_retry: 10`. - Try to disable and then enable LAN access. diff --git a/source/_cookbook/custom_ui_by_andrey-git.markdown b/source/_cookbook/custom_ui_by_andrey-git.markdown index cea9eeae1a2..5b593d3250c 100644 --- a/source/_cookbook/custom_ui_by_andrey-git.markdown +++ b/source/_cookbook/custom_ui_by_andrey-git.markdown @@ -1,6 +1,6 @@ --- layout: page -title: "Custom UI light state-card by andrey-git" +title: "Custom UI state-card by andrey-git" description: "" date: 2017-02-04 10:45 sidebar: true diff --git a/source/_cookbook/dim_and_brighten_lights.markdown b/source/_cookbook/dim_and_brighten_lights.markdown index 21fc4f02699..148e8a312d9 100644 --- a/source/_cookbook/dim_and_brighten_lights.markdown +++ b/source/_cookbook/dim_and_brighten_lights.markdown @@ -123,7 +123,12 @@ script: {% endif %} {{ next }}{% endraw %} - - service: script.turn_on + - service_template: > + {% raw %}{% if states.light.YOUR_LIGHT.attributes.brightness|default(0)|int < states('input_slider.light_maximum')|int %} + script.turn_on + {% else %} + script.turn_off + {% endif %}{% endraw %} data: entity_id: script.light_bright_pause @@ -149,7 +154,12 @@ script: {% endif %} {{ next }}{% endraw %} - - service: script.turn_on + - service_template: > + {% raw %}{% if states.light.YOUR_LIGHT.attributes.brightness|default(0)|int > states('input_slider.light_minimum')|int %} + script.turn_on + {% else %} + script.turn_off + {% endif %}{% endraw %} data: entity_id: script.light_dim_pause diff --git a/source/_cookbook/fail2ban.markdown b/source/_cookbook/fail2ban.markdown index 8eed73efb0c..505fad6272d 100644 --- a/source/_cookbook/fail2ban.markdown +++ b/source/_cookbook/fail2ban.markdown @@ -20,7 +20,7 @@ Then make sure logging is enabled in your `configuration.yaml` file for your Hom logger: default: critical logs: - homeassistant.components.http: warning + homeassistant.components.http.ban: warning ``` Next we will be creating these three files : @@ -43,12 +43,9 @@ Contents of `/etc/fail2ban/filter.d/hass.local`: before = common.conf [Definition] -failregex = ^%(__prefix_line)s.*Login attempt or request with an invalid password from .*$ +failregex = ^%(__prefix_line)s.*Login attempt or request with invalid authentication from .*$ ignoreregex = - -[Init] -datepattern = ^%%y-%%m-%%d %%H:%%M:%%S ``` Contents of `/etc/fail2ban/jail.local` (Note that you'll need to change the `logpath` to match your logfile which will be different from the path listed.): @@ -58,7 +55,7 @@ Contents of `/etc/fail2ban/jail.local` (Note that you'll need to change the `log enabled = true filter = hass action = iptables-allports[name=HASS] -logpath = /opt/hass-prod-cfg/home-assistant.log +logpath = /home/homeassistant/.homeassistant/home-assistant.log maxretry = 5 ``` diff --git a/source/_data/glossary.yml b/source/_data/glossary.yml index a0edf13014e..1b18f1539de 100644 --- a/source/_data/glossary.yml +++ b/source/_data/glossary.yml @@ -14,4 +14,29 @@ description: "Often used abbreviation for Home Assistant." - topic: Discovery description: The automatic setup of zeroconf/mDNS and uPnP devices after they are discovered. - +- topic: Groups + description: "Groups are a way to organize your entities into a single unit." +- topic: Automation + description: "Capability to call a service based on a simple or complex trigger. Automation allows a condition such as sunset to cause an event, such as a light turning on." +- topic: Trigger + description: "Values or conditions of a platform that are defined to cause an automation to run." +- topic: Template + description: "An automation definition can include variables for the service or data from the trigger values. This allows automations to generate dynamic actions." +- topic: Script + description: "A component that allows users to specify a sequence of actions to be executed by Home Assistant when turned on" +- topic: Scene + description: "You can create scenes that capture the states you want certain entities to be. For example a scene can specify that light A should be turned on and light B should be bright red." +- topic: hassio + description: "An operating system to manage Home Assistant easily using various HASS.io add-ons" +- topic: HADashboard + description: "HADashboard is a modular, skinnable dashboard for Home Assistant that is intended to be wall mounted, and is optimized for distance viewing." +- topic: Hass.io + description: "Hass.io is an operating system that will take care of installing and updating Home Assistant, is managed from the Home Assistant UI, allows creating/restoring snapshots of your configuration and can easily be extended" +- topic: Cookbook + description: "Home Assistant configuration examples of the community" +- topic: Packages + description: "Packages allow to bundle different component configuations together." +- topic: Customizing + description: "Customization allows overwriting default parameter of the devices in the configuration." +- topic: Zones + description: "Area used for presence detection." diff --git a/source/_docs/configuration/templating.markdown b/source/_docs/configuration/templating.markdown index 50fb0abf4ca..c02fbb7f2a2 100644 --- a/source/_docs/configuration/templating.markdown +++ b/source/_docs/configuration/templating.markdown @@ -69,7 +69,9 @@ Home Assistant adds extensions to allow templates to access all of the current s - `is_state('device_tracker.paulus', 'home')` will test if the given entity is specified state. - `is_state_attr('device_tracker.paulus', 'battery', 40)` will test if the given entity is specified state. - `now()` will be rendered as current time in your time zone. + - For specific values: `now().second`, `now().minute`, `now().hour`, `now().day`, `now().month`, `now().year`, `now().weekday()` and `now().isoweekday()` - `utcnow()` will be rendered as UTC time. + - For specific values: `utcnow().second`, `utcnow().minute`, `utcnow().hour`, `utcnow().day`, `utcnow().month`, `utcnow().year`, `utcnow().weekday()` and `utcnow().isoweekday()`. - `as_timestamp()` will convert datetime object or string to UNIX timestamp - `distance()` will measure the distance in meters between home, entity, coordinates. - `closest()` will find the closest entity. @@ -89,6 +91,10 @@ Home Assistant adds extensions to allow templates to access all of the current s If your template uses an `entity_id` that begins with a number (example: `states.device_tracker.2008_gmc`) you must use a bracket syntax to avoid errors caused by rendering the `entity_id` improperly. In the example given, the correct syntax for the device tracker would be: `states.device_tracker['2008_gmc']`

+

+Rendering templates with time is dangerous as updates only trigger templates in sensors based on entity state changes. +

+ ## {% linkable_title Home Assistant template extensions %} In templates, besides the normal [state object methods and properties](/topics/state_object/), there are also some extra things available: diff --git a/source/_docs/configuration/troubleshooting.markdown b/source/_docs/configuration/troubleshooting.markdown index f16cdb7ab85..f1b88fe876e 100644 --- a/source/_docs/configuration/troubleshooting.markdown +++ b/source/_docs/configuration/troubleshooting.markdown @@ -87,3 +87,13 @@ Contents of `sensors.yaml`:

Whenever you report an issue, be aware that we are volunteers who do not have access to every single device in the world nor unlimited time to fix every problem out there.

+ +### {% linkable_title Entity names %} + +The only characters valid in entity names are: + +* Lowercase letters +* Numbers +* Underscores + +If you create an entity with other characters then Home Assistant may not generate an error for that entity. However you will find that attempts to use that entity will generate errors (or possibly fail silently). diff --git a/source/_docs/configuration/yaml.markdown b/source/_docs/configuration/yaml.markdown index bba05d53e76..9398ec30bdb 100644 --- a/source/_docs/configuration/yaml.markdown +++ b/source/_docs/configuration/yaml.markdown @@ -83,3 +83,13 @@ If an environment variable is not set, you can fallback to a default value. http: api_password: !env_var PASSWORD default_password ``` + +### {% linkable_title Including Separate Files %} + +To improve readability, you can source out certain domains from your main configuration file with the `!include`-syntax. + +```yaml +lights: !include lights.yaml +``` + +More information about this feature can also be found at [splitting configuration](/docs/configuration/splitting_configuration/). diff --git a/source/_docs/ecosystem/apache.markdown b/source/_docs/ecosystem/apache.markdown index d8ec1aac020..ae0c1925114 100644 --- a/source/_docs/ecosystem/apache.markdown +++ b/source/_docs/ecosystem/apache.markdown @@ -32,13 +32,19 @@ To be able to access to your Home Assistant instance by using https://home.examp ```text - ProxyPreserveHost On - ProxyRequests Off ServerName home.example.org - ProxyPass /api/websocket ws://localhost:8123/api/websocket - ProxyPassReverse /api/websocket ws://localhost:8123/api/websocket + ProxyPreserveHost On + ProxyRequests off ProxyPass / http://localhost:8123/ ProxyPassReverse / http://localhost:8123/ + ProxyPass /api/websocket ws://localhost:8123/api/websocket + ProxyPassReverse /api/websocket ws://localhost:8123/api/websocket + + RewriteEngine on + RewriteCond %{HTTP:Upgrade} =websocket [NC] + RewriteRule /(.*) ws://localhost:8123/$1 [P,L] + RewriteCond %{HTTP:Upgrade} !=websocket [NC] + RewriteRule /(.*) http://localhost:8123/$1 [P,L] ``` diff --git a/source/_docs/ecosystem/appdaemon.markdown b/source/_docs/ecosystem/appdaemon.markdown index 1ee29133933..f8f86bdff42 100755 --- a/source/_docs/ecosystem/appdaemon.markdown +++ b/source/_docs/ecosystem/appdaemon.markdown @@ -55,7 +55,7 @@ This is also fairly easy to achieve with Home Assistant automations, but we are ## Motion Light -Our next example is to turn on a light when motion is detected and it is dark, and turn it off after a period of time. This time, the `initialize()` function registers a callback on a state change (of the motion sensor) rather than a specific time. We tell AppDaemon that we are only interested in state changes where the motion detector comes on by adding an additional parameter to the callback registration - `new = "on"`. When the motion is detected, the callack function `motion()` is called, and we check whether or not the sun has set using a built-in convenience function: `sun_down()`. Next, we turn the light on with `turn_on()`, then set a timer using `run_in()` to turn the light off after 60 seconds, which is another call to the scheduler to execute in a set time from now, which results in `AppDaemon` calling `light_off()` 60 seconds later using the `turn_off()` call to actually turn the light off. This is still pretty simple in code terms: +Our next example is to turn on a light when motion is detected and it is dark, and turn it off after a period of time. This time, the `initialize()` function registers a callback on a state change (of the motion sensor) rather than a specific time. We tell AppDaemon that we are only interested in state changes where the motion detector comes on by adding an additional parameter to the callback registration - `new = "on"`. When the motion is detected, the callback function `motion()` is called, and we check whether or not the sun has set using a built-in convenience function: `sun_down()`. Next, we turn the light on with `turn_on()`, then set a timer using `run_in()` to turn the light off after 60 seconds, which is another call to the scheduler to execute in a set time from now, which results in `AppDaemon` calling `light_off()` 60 seconds later using the `turn_off()` call to actually turn the light off. This is still pretty simple in code terms: ```python import homeassistant.appapi as appapi diff --git a/source/_docs/ecosystem/backup/backup_github.markdown b/source/_docs/ecosystem/backup/backup_github.markdown index ed4eb998ad9..8c8c9ad7b35 100644 --- a/source/_docs/ecosystem/backup/backup_github.markdown +++ b/source/_docs/ecosystem/backup/backup_github.markdown @@ -141,7 +141,7 @@ Example .travis.yml ```yaml language: python python: - - "3.4" + - "3.5" before_install: - mv travis_secrets.yaml secrets.yaml install: diff --git a/source/_docs/ecosystem/certificates/lets_encrypt.markdown b/source/_docs/ecosystem/certificates/lets_encrypt.markdown index c248bec61d7..ad7963fae69 100644 --- a/source/_docs/ecosystem/certificates/lets_encrypt.markdown +++ b/source/_docs/ecosystem/certificates/lets_encrypt.markdown @@ -9,6 +9,10 @@ sharing: true footer: true --- +

+If you are using Hass.io, do not use this guide. Instead, use the [DuckDNS add-on](/addons/duckdns/) to automatically maintain a subdomain including HTTPS certificates via Let's Encrypt. +

+

Before exposing your Home Assistant instance to the outside world it is ESSENTIAL that you have set a password following the advice on the [http](https://home-assistant.io/docs/configuration/basic/) page.

diff --git a/source/_docs/ecosystem/tor.markdown b/source/_docs/ecosystem/tor.markdown index c5fd98dc0eb..6d87b5f08b4 100644 --- a/source/_docs/ecosystem/tor.markdown +++ b/source/_docs/ecosystem/tor.markdown @@ -88,7 +88,7 @@ Add the authentication cookie to your `torrc` client configuration on your lapto HidServAuth abcdef1234567890.onion ABCDEF1122334455667789 ``` -For Tor Browser on Windows, Mac or Linux, you can find the torrc file here: `/Browser/TorBrowser/Data/Tor/torrc-defaults` +For Tor Browser on Windows, Mac or Linux, you can find the torrc file here: `/Browser/TorBrowser/Data/Tor/torrc` Once you have added the entry, restart the browser, and then browse to the "dot onion" site address to connect to your Home Assistant instance. diff --git a/source/_docs/glossary.markdown b/source/_docs/glossary.markdown index 7f7437b49ed..c5a76c534f7 100644 --- a/source/_docs/glossary.markdown +++ b/source/_docs/glossary.markdown @@ -11,6 +11,8 @@ footer: true {% assign entries = site.data.glossary | sort: 'topic' %} +The glossary covers terms which are used around Home Assistant. +
    {% for entry in entries %}
  • diff --git a/source/_docs/installation/synology.markdown b/source/_docs/installation/synology.markdown index bcf3064ed06..34e228ebb59 100644 --- a/source/_docs/installation/synology.markdown +++ b/source/_docs/installation/synology.markdown @@ -189,7 +189,7 @@ Set the owner and permissions on your config folder Make the daemon file executable: ```bash -# chmod 777 /volume1/homeassistant/hass-daemon +# chmod 755 /volume1/homeassistant/hass-daemon ``` Update your firewall (if it is turned on the Synology device): diff --git a/source/_docs/mqtt/broker.markdown b/source/_docs/mqtt/broker.markdown index f2a2a90eec1..a5f9e9ba70c 100644 --- a/source/_docs/mqtt/broker.markdown +++ b/source/_docs/mqtt/broker.markdown @@ -17,14 +17,15 @@ The MQTT component needs you to run an MQTT broker for Home Assistant to connect Home Assistant contains an embedded MQTT broker. If no broker configuration is given, the [HBMQTT broker](https://pypi.python.org/pypi/hbmqtt) is started and Home Assistant connects to it. Embedded broker default configuration: -| Setting | Value | -| ------- | ----- | -| Host | localhost -| Port | 1883 -| Protocol | 3.1.1 -| User | homeassistant -| Password | Your API [password](/components/http/) -| Websocket port | 8080 +| Setting | Value | +| -------------- | ----- | +| Host | localhost | +| Port | 1883 | +| Protocol | 3.1.1 | +| User | homeassistant | +| Password | Your API [password](/components/http/) | +| Websocket port | 8080 | + ```yaml # Example configuration.yaml entry @@ -51,7 +52,7 @@ mqtt: ### {% linkable_title Run your own %} -This is the most private option but requires a bit more work. There are multiple free and open-source brokers to pick from: eg. [Mosquitto](http://mosquitto.org/), [EMQ](http://emqtt.io/), or [Mosca](http://www.mosca.io/). +Along with the embedded broker this is the most private option, but it requires a bit more work. There are multiple free and open-source brokers to pick from: eg. [Mosquitto](http://mosquitto.org/), [EMQ](http://emqtt.io/), or [Mosca](http://www.mosca.io/). ```yaml # Example configuration.yaml entry @@ -59,18 +60,48 @@ mqtt: broker: 192.168.1.100 ``` -Configuration variables: - -- **broker** (*Optional*): The IP address or hostname of your MQTT broker, e.g. 192.168.1.32. -- **port** (*Optional*): The network port to connect to. Default is 1883. -- **client_id** (*Optional*): The client ID that Home Assistant will use. Has to be unique on the server. Default is a randomly generated one. -- **keepalive** (*Optional*): The time in seconds between sending keep alive messages for this client. Default is 60. -- **username** (*Optional*): The username to use with your MQTT broker. -- **password** (*Optional*): The corresponding password for the username to use with your MQTT broker. -- **protocol** (*Optional*): Protocol to use: 3.1 or 3.1.1. By default it connects with 3.1.1 and falls back to 3.1 if server does not support 3.1.1. -- **certificate** (*Optional*): Path to the certificate file, eg. `/home/user/.homeassistant/server.crt`. -- **tls_insecure** (*Optional*): Set the verification of the server hostname in the server certificate. -- **tls_version** (*Optional*): TLS/SSL protocol version to use. Available options are: `auto`, `1.0`, `1.1`, `1.2`. Defaults to `auto`. +{% configuration %} +broker: + required: false + description: The IP address or hostname of your MQTT broker, e.g. 192.168.1.32. + type: string +port: + required: false + description: The network port to connect to. Default is 1883. + type: int +client_id: + required: false + description: The client ID that Home Assistant will use. Has to be unique on the server. Default is a randomly generated one. + type: string +keepalive: + required: false + description: The time in seconds between sending keep alive messages for this client. Default is 60. + type: int +username: + required: false + description: The username to use with your MQTT broker. + type: string +password: + required: false + description: The corresponding password for the username to use with your MQTT broker. + type: string +protocol: + required: false + description: "Protocol to use: 3.1 or 3.1.1. By default it connects with 3.1.1 and falls back to 3.1 if server does not support 3.1.1." + type: string +certificate: + required: false + description: Path to the certificate file, eg. `/home/user/.homeassistant/server.crt`. + type: string +tls_insecure: + required: false + description: Set the verification of the server hostname in the server certificate. + type: boolean +tls_version: + required: false + description: "TLS/SSL protocol version to use. Available options are: `auto`, `1.0`, `1.1`, `1.2`. Defaults to `auto`." + type: string +{% endconfiguration %}

    There is an issue with the Mosquitto package included in Ubuntu 14.04 LTS. Specify `protocol: 3.1` in your MQTT configuration to work around this issue. diff --git a/source/_docs/z-wave.markdown b/source/_docs/z-wave.markdown index 2e756036358..b1b41896112 100644 --- a/source/_docs/z-wave.markdown +++ b/source/_docs/z-wave.markdown @@ -18,13 +18,16 @@ Before configuring the Z-Wave setup, please take a moment and read [this article ### {% linkable_title Installation %} -As of version 0.45, Home Assistant automatically installs python-openzwave from PyPI as needed. - There is one dependency you will need to have installed ahead of time (included in `systemd-devel` on Fedora/RHEL systems): ```bash $ sudo apt-get install libudev-dev ``` +When installing on macOS you may have to also run the command below ahead of time, replace "x.x" with the version of Python you have installed. + +```bash +sudo /Applications/Python\ x.x/Install\ Certificates.command +``` ### {% linkable_title Configuration %} @@ -41,7 +44,7 @@ Configuration variables: - **config_path** (*Optional*): The path to the Python OpenZWave configuration files. Defaults to the 'config' that is installed by python-openzwave - **autoheal** (*Optional*): Allows disabling auto Z-Wave heal at midnight. Defaults to True. - **polling_interval** (*Optional*): The time period in milliseconds between polls of a nodes value. Be careful about using polling values below 30000 (30 seconds) as polling can flood the zwave network and cause problems. -- **device_config** (*Optional*): This attribute contains node-specific override values. (For releases prior to 0.39 this variable is called **customize**) See [Customizing devices and services](https://home-assistant.io/getting-started/customizing-devices/) for format: +- **device_config** (*Optional*): This attribute contains node-specific override values: - **polling_intensity** (*Optional*): Enables polling of a value and sets the frequency of polling (0=none, 1=every time through the list, 2=every other time, etc). If not specified then your device will not be polled. - **ignored** (*Optional*): Ignore this entity completely. It won't be shown in the Web Interface and no events are generated for it. - **refresh_value** (*Optional*): Enable refreshing of the node value. Only the light component uses this. Defaults to False. diff --git a/source/_includes/asides/developers_navigation.html b/source/_includes/asides/developers_navigation.html index 632f09c5afd..613ff5834b4 100644 --- a/source/_includes/asides/developers_navigation.html +++ b/source/_includes/asides/developers_navigation.html @@ -121,7 +121,9 @@ Governance

    • {% active_link /developers/cla/ Contributor License Agreement %}
    • -
    • {% active_link /developers/code_of_conduct/ Code of Conduct %}
    • +
    • {% active_link /privacy/ Privacy Policy %}
    • +
    • {% active_link /tos/ Terms of Service %}
    • +
    • {% active_link /code_of_conduct/ Code of Conduct %}
    • {% active_link /developers/credits/ Credits %}
    • {% active_link /developers/license/ License %}
    diff --git a/source/_posts/2017-10-07-release-55.markdown b/source/_posts/2017-10-07-release-55.markdown index d571aa158fc..8808cdae88c 100644 --- a/source/_posts/2017-10-07-release-55.markdown +++ b/source/_posts/2017-10-07-release-55.markdown @@ -43,6 +43,16 @@ This release introduces a new sensor: [Tibber][sensor.tibber docs]. The sensor p - Updating clicksendaudio component based on feedback ([@jeroenterheerdt] - [#9692]) ([notify.clicksendaudio docs]) (new-platform) - Support for The Things Network ([@fabaff] - [#9627]) ([thethingsnetwork docs]) ([sensor.thethingsnetwork docs]) (new-platform) +## {% linkable_title 0.55.1 - October 15 %} + +- Fix for TypeError in synology camera ([@snjoetw] - [#9754]) ([camera.synology docs]) +- missing is_closed ( rflink cover fix ) ([@passie] - [#9776]) ([cover.rflink docs]) +- [light.tradfri] Fix transition time ([@lwis] - [#9785]) ([light.tradfri docs]) +- OwnTracks: Fix handler is None checking ([@balloob] - [#9794]) ([device_tracker.owntracks docs]) +- Changed yaml.load into yaml.safe_load ([@GenericStudent] - [#9841]) ([google docs]) +- Bugfix/9811 jinja autoescape ([@GenericStudent] - [#9842]) +- Livebox Play TV bug: fix #9839 ([@pschmitt] - [#9880]) ([media_player.liveboxplaytv docs]) + ## {% linkable_title If you need help... %} ...don't hesitate to use our very active [forums][forum] or join us for a little [chat][discord]. The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. @@ -58,7 +68,7 @@ Experiencing issues introduced by this release? Please report them in our [issue - New Wink services: pair new device, rename, delete and add new lock key code. All device attributes that are multi-words are now separated by "_" and no longer " ". ([@w1ll1am23] - [#9303]) ([wink docs]) ([binary_sensor.wink docs]) ([lock.wink docs]) (breaking change) - TP-Link Switch: Attribute names now uses underscores and unnecessary capitalization was removed. ([@djchen] - [#9607]) ([switch.tplink docs]) (breaking change) - Renamed `input_slider` to `input_number` which has now a numeric text box option. ([@BioSehnsucht] - [#9494]) ([demo docs]) ([input_number docs]) (breaking change) -- Recorder: Add new purge service and interval. ([@milanvo] - [#9523]) ([recorder docs]) (breaking change) +- Recorder: Add new purge service and interval. The recorder component no longer accepts a `purge_days` parameter. If you are using `purge_days` you must use `purge_interval` and `purge_keep_days`. ([@milanvo] - [#9523]) ([recorder docs]) (breaking change) - OpenCV image processing: Typo in classifier was fixed. ([@arsaboo] - [#9697]) ([image_processing.opencv docs]) (breaking change) - Tradfri Lights: Async support with resource observation. ([@lwis] - [#7815]) ([tradfri docs]) ([light.tradfri docs]) (breaking change) @@ -381,3 +391,22 @@ Experiencing issues introduced by this release? Please report them in our [issue [issue]: https://github.com/home-assistant/home-assistant/issues [discord]: https://discord.gg/c5DvZ4e [history_graph docs]: https://home-assistant.io/components/history_graph/ +[#9754]: https://github.com/home-assistant/home-assistant/pull/9754 +[#9776]: https://github.com/home-assistant/home-assistant/pull/9776 +[#9785]: https://github.com/home-assistant/home-assistant/pull/9785 +[#9794]: https://github.com/home-assistant/home-assistant/pull/9794 +[#9841]: https://github.com/home-assistant/home-assistant/pull/9841 +[#9842]: https://github.com/home-assistant/home-assistant/pull/9842 +[#9880]: https://github.com/home-assistant/home-assistant/pull/9880 +[@GenericStudent]: https://github.com/GenericStudent +[@balloob]: https://github.com/balloob +[@lwis]: https://github.com/lwis +[@passie]: https://github.com/passie +[@pschmitt]: https://github.com/pschmitt +[@snjoetw]: https://github.com/snjoetw +[camera.synology docs]: https://home-assistant.io/components/camera.synology/ +[cover.rflink docs]: https://home-assistant.io/components/cover.rflink/ +[device_tracker.owntracks docs]: https://home-assistant.io/components/device_tracker.owntracks/ +[google docs]: https://home-assistant.io/components/google/ +[light.tradfri docs]: https://home-assistant.io/components/light.tradfri/ +[media_player.liveboxplaytv docs]: https://home-assistant.io/components/media_player.liveboxplaytv/ diff --git a/source/_posts/2017-10-14-templating-date-time.markdown b/source/_posts/2017-10-14-templating-date-time.markdown new file mode 100644 index 00000000000..1af3ecff8bc --- /dev/null +++ b/source/_posts/2017-10-14-templating-date-time.markdown @@ -0,0 +1,38 @@ +--- +layout: post +title: "Templates, dates and times" +description: "Using templates for seconds and years in Home Assistant." +date: 2017-10-15 08:00:00 +0200 +date_formatted: "October 15, 2017" +author: Fabian Affolter +comments: true +categories: Community +og_image: /images/blog/2017-10-template/social.png +--- + +This [Pull Request](https://github.com/home-assistant/home-assistant/pull/9868) shows in a clear way what happens if the documentation is not as good as it should be. In short, it's about [Templating](/docs/configuration/templating/) and how people start to think about creative ways to solve it if it's not documented. Let's assume that we want the current year. There are a couple of options available to do that: + +- Query [JSON Test](http://date.jsontest.com/) with a [`rest` sensor](/components/sensor.rest/) and a `value_template:`. +- Use a [`time_date` sensor ](/components/sensor.time_date/) and a template {% raw %}`{{ strptime(states('sensor.date'), '%Y-%m-%d').year }}`{% endraw %}. +- Write a script in language X and use it with the [`command` sensor](/components/sensor.command_line/) or use `date +"%Y"` as a `command:`. + + + +We want it simpler, right? [Templating](/docs/configuration/templating/) offers `now()` and `utcnow()`. We will stick with `now()` in this blog post but it applies to `utcnow()` as well. Our documentation said: + +
    + `now()` will be rendered as current time in your time zone. +
    + +Hmmm, ...OK, that's a start. How to get the year? {% raw %}`{{ now() }}`{% endraw %} gives you `2017-10-14 20:27:23.700401+02:00` which is far more than we are looking for. As an user you don't want to dive into the code but there would you find the solution. You will get a [Python `datetime` object](https://docs.python.org/3.6/library/datetime.html#datetime.datetime) from {% raw %}`{{ now() }}`{% endraw %}. This means that you can access more than you think in a template: + +- For the time: `now().microsecond`, `now().second`, `now().minute` and `now().hour` +- For the date: `now().day`, `now().month` and `now().year` +- Misc: `now().weekday()` and `now().isoweekday()` + +For the year it would be: {% raw %}`{{ now().year }}`{% endraw %}. I guess that there are rare use cases for `now().resolution`, `now().min` and `now().max` too. + +[Hacktoberfest](/blog/2017/09/29/hacktoberfest/) is still running. Working on the documentation is pretty easy. If you know a nice [trick](/cookbook/), want to help improving the page of a platform or just fix typo then please do. Our [Website/Documentation section](/developers/documentation/) contains some requirements which are defined in the [Documentation Standards](/developers/documentation/standards/) and the "[Create a page](/developers/documentation/create_page/)" documentation for other useful details. + +Thanks to [Egor Tsinko](https://github.com/etsinko) for bringing this issue to our attention. + diff --git a/source/_posts/2017-10-18-hasspodcast-ep-10.markdown b/source/_posts/2017-10-18-hasspodcast-ep-10.markdown new file mode 100644 index 00000000000..295702ce37a --- /dev/null +++ b/source/_posts/2017-10-18-hasspodcast-ep-10.markdown @@ -0,0 +1,18 @@ +--- +layout: post +title: "Home Assistant Podcast #10" +description: "0.55 and bye bye Python 3.4" +date: 2017-10-18 00:01:00 +0000 +date_formatted: "October 18, 2017" +author: Phil Hawthorne +author_twitter: philhawthorne +comments: true +categories: Media +og_image: /images/hasspodcast.jpg +--- + +Show notes available on the [Home Assistant Podcast Website](https://hasspodcast.io/HA010/) + +[Listen online][episode] + +[episode]: https://hasspodcast.io/ha010/ diff --git a/source/_posts/2017-10-23-simple-analog-sensor.markdown b/source/_posts/2017-10-23-simple-analog-sensor.markdown new file mode 100644 index 00000000000..10ae33715af --- /dev/null +++ b/source/_posts/2017-10-23-simple-analog-sensor.markdown @@ -0,0 +1,93 @@ +--- +layout: post +title: "Serial analog sensor" +description: "Using a Digispark with Home Assistant." +date: 2017-10-23 08:00:00 +0200 +date_formatted: "October 23, 2017" +author: Fabian Affolter +comments: true +categories: How-To +og_image: /images/blog/2017-10-analog-sensor/analog-sensor.png +--- + + +This blog post is about building a super simple analog sensor for Home Assistant. The physical sensor will send the data over its virtual serial port as it will be connected over USB. The concept is similar to the [TEMPer USB](/components/sensor.temper/) devices. The attatched sensor type to the microcontroller can be any kind of sensor which gives you an analog signal from brightness over soil moisture to temperature. + +The microcontroller will only transfer the voltage of an analog input pin which will be between 0 and 1024. Home Assistant will use the new [`serial`](/components/sensor.serial/) sensor platform to read the data and perform actions to convert the raw reading into a real measurement. This means that you don't have to adjust the code of your microcontroller if you change the attached sensor type. + +

    + + The assembled sensor +

    + + + +All parts needed in this how-to can be bought for less than 2 Euro or 2 USD from China. I'm going to use the following items which were already available in my craft crate: + +- [Digispark USB Development Board](http://digistump.com/category/1) +- Temperature sensor [TMP36](http://www.analog.com/media/en/technical-documentation/data-sheets/TMP35_36_37.pdf) (or any other sensor that gives you an analog signal) +- Cables (if you don't want to connect the sensor directly to the board) + +The cabling is easy. + +| Sensor | Digispark | +|--------|-----------| +| GND | GND | +| VCC | 5V | +| VOUT | P4 | + +There are other boards with the same size available. Like those with the far more powerful Mega32U4 chip. However, it would work with boards from the Arduino family as well if you adjust the code provided below. + +The sketch is pretty simple. We are going to send the readings to a virtual [serial output](https://digistump.com/wiki/digispark/tutorials/digicdc) every 5 seconds. No logic needed. A little plus is that the onboard LED is blinking as an indicator that the board is working. [Upload](https://digistump.com/wiki/digispark) the code to your Digispark board. Keep in mind that the upload process is different than with Arduino or ESP8266 boards. + +```cpp +#include + +#define LED_PIN 1 +#define INPUT_PIN 2 // Physical pin P4 is analog input 2 + +void setup() { + SerialUSB.begin(); + pinMode(LED_PIN, OUTPUT); +} + +void loop() { + if (SerialUSB.available()) { + digitalWrite(LED_PIN, HIGH); + SerialUSB.delay(250); + + int reading = analogRead(INPUT_PIN); + SerialUSB.println(reading); + + digitalWrite(LED_PIN, LOW); + SerialUSB.delay(5000); + } +} +``` + +To make it work with other boards simply use [`Serial.begin(115200);`](https://www.arduino.cc/en/Reference/Serial) and [`Serial.println(reading);`](https://www.arduino.cc/en/Serial/Println). + +If you connect with a tool like `minicom` to your system's serial port `/dev/ttyACM0`, then you will get the data. To use the sensor with Home Assistant the [`serial`](/components/sensor.serial/) sensor platform needs to be set up. + +```yaml +sensor: + - platform: serial + port: /dev/ttyACM0 +``` + +The physical sensor reads the current voltage of the pin. A [template sensor](/components/sensor.template/) takes the reading and converts it into a measurement. The data sheet of the sensor unit usually contains details about the involved calculations. + +{% raw %} +```yaml + - platform: template + sensors: + temperature: + friendly_name: Temperature + unit_of_measurement: "°C" + value_template: "{{ (((states('sensor.serial_sensor') | float * 5 / 1024 ) - 0.5) * 100) | round(1) }}" +``` +{% endraw %} + +Hide the serial sensor if you don't want to see the raw data in the frontend and you are done. The whole setup with a Digispark is not very reliable because there is no hardware USB support. As a showcase and if you don't build your automation rules around it does the sensor what it should for a very small price. + + diff --git a/source/developers/code_of_conduct.markdown b/source/code_of_conduct/index.markdown similarity index 91% rename from source/developers/code_of_conduct.markdown rename to source/code_of_conduct/index.markdown index 786694b7da9..f67555210bd 100644 --- a/source/developers/code_of_conduct.markdown +++ b/source/code_of_conduct/index.markdown @@ -1,15 +1,16 @@ --- layout: page -title: "Contributor Covenant Code of Conduct" +title: "Code of Conduct" description: "The Code of Conduct for Home Assistant projects." date: 2017-01-21 15:05:00 -0800 -sidebar: true +sidebar: false comments: false sharing: true footer: true +redirect_from: /developers/code_of_conduct/ --- -## Our Pledge +## {% linkable_title Our Pledge %} In the interest of fostering an open and welcoming environment, we as contributors and maintainers pledge to making participation in our project and @@ -18,7 +19,7 @@ size, disability, ethnicity, gender identity and expression, level of experience nationality, personal appearance, race, religion, or sexual identity and orientation. -## Our Standards +## {% linkable_title Our Standards %} Examples of behavior that contributes to creating a positive environment include: @@ -40,7 +41,7 @@ advances * Other conduct which could reasonably be considered inappropriate in a professional setting -## Our Responsibilities +## {% linkable_title Our Responsibilities %} Project maintainers are responsible for clarifying the standards of acceptable behavior and are expected to take appropriate and fair corrective action in @@ -52,7 +53,7 @@ that are not aligned to this Code of Conduct, or to ban temporarily or permanently any contributor for other behaviors that they deem inappropriate, threatening, offensive, or harmful. -## Scope +## {% linkable_title Scope %} This Code of Conduct applies both within project spaces and in public spaces when an individual is representing the project or its community. Examples of @@ -61,7 +62,7 @@ address, posting via an official social media account, or acting as an appointed representative at an online or offline event. Representation of a project may be further defined and clarified by project maintainers. -## Enforcement +## {% linkable_title Enforcement %} Instances of abusive, harassing, or otherwise unacceptable behavior may be reported by contacting the project team at [safety@home-assistant.io][email]. All @@ -74,12 +75,12 @@ Project maintainers who do not follow or enforce the Code of Conduct in good faith may face temporary or permanent repercussions as determined by other members of the project's leadership. -## Attribution +## {% linkable_title Attribution %} This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, available [here][version]. -## Adoption +## {% linkable_title Adoption %} This Code of Conduct was first adopted January 21st, 2017 and announced in [this][coc-blog] blog post. diff --git a/source/developers/documentation/create_page.markdown b/source/developers/documentation/create_page.markdown index 6f363393e3f..56860767516 100644 --- a/source/developers/documentation/create_page.markdown +++ b/source/developers/documentation/create_page.markdown @@ -98,16 +98,6 @@ The direct usage of HTML is supported but not recommended. The note boxes are an

    ``` -### {% linkable_title Redirects %} -If you rename or move an existing platform or component, create the redirect. Add the old location of the page to the header of the new one. - -```text ---- -... -redirect_from: /getting-started/android/ ---- -``` - ### {% linkable_title Images, icons, and logos %} The images which are displayed on the pages are stored in various directories according to their purpose. If you want to use a logo and placed `logo:` in the file header then this image should be stored in `source/images/supported_brands`. The background must be transparent. diff --git a/source/developers/documentation/standards.markdown b/source/developers/documentation/standards.markdown index 5445e7cd5ac..c859c4db6ab 100644 --- a/source/developers/documentation/standards.markdown +++ b/source/developers/documentation/standards.markdown @@ -55,3 +55,15 @@ To ensure that the documentation for Home Assistant is consistent and easy to fo * `condition` * `service` +## {% linkable_title Renaming Pages %} + +It can happen that a component or platform is renamed, in this case the documentation needs to be updated as well. If you rename a page, add `redirect_from:` to the file header and let it point to the old location/name of the page. Please consider to add details, like release number or old component/platform name, to the page in a [note](/developers/documentation/create_page/#html). + +```text +--- +... +redirect_from: /getting-started/android/ +--- +``` + +Adding a redirect also applies if you move content around in the [documention](/docs/). diff --git a/source/developers/frontend_creating_custom_ui.markdown b/source/developers/frontend_creating_custom_ui.markdown index 8303acbbb1b..51678f01cbb 100644 --- a/source/developers/frontend_creating_custom_ui.markdown +++ b/source/developers/frontend_creating_custom_ui.markdown @@ -13,15 +13,15 @@ If you would like to use your own [State card](/developers/frontend_add_card/) w Put the element source file and its dependencies in `www/custom_ui/` directory under your Home Assistant [configuration](/docs/configuration/) directory. -For example if creating a state card for the `light` domain named `my_custom_light_card` put `my_custom_light_card.html` in `www/custom_ui/`. +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/`. -That file should implement `` tag with Polymer. +That file should implement `` tag with Polymer. -In `my_custom_light_card.html` you should use `` to import all the dependencies **not** used by Home Assistant's UI. +In `state-card-my-custom-light.html` you should use `` to import all the dependencies **not** used by Home Assistant's UI. Do not import any dependencies used by the Home Assistant UI. Importing those will work in `development: 1` mode, but will fail in production mode. -1) In the `customize:` section of the `configuration.yaml` file put `custom_ui_state_card: `. +1) In the `customize:` section of the `configuration.yaml` file put `custom_ui_state_card: state-card-my-custom-light`. 2) In the `frontend` section use `extra_html_url` to specify the URL to load. For example: @@ -29,11 +29,11 @@ For example: homeassistant: customize: light.bedroom: - custom_ui_state_card: my_custom_light_card + custom_ui_state_card: state-card-my-custom-light frontend: extra_html_url: - - /local/custom_ui/my_custom_light_card.html + - /local/custom_ui/state-card-my-custom-light.html ``` For more possibilities, see the [Custom UI section](/cookbook/#user-interface) on our Examples page. diff --git a/source/developers/hassio/addon_communication.markdown b/source/developers/hassio/addon_communication.markdown index 7dd40ca0091..d7bee9d5162 100644 --- a/source/developers/hassio/addon_communication.markdown +++ b/source/developers/hassio/addon_communication.markdown @@ -14,7 +14,7 @@ It exists diferent ways to communication between add-ons or home-assistant insid ## {% linkable_title Network %} -We use a internal network. That allow to speak with every add-on or from Home-Assistant to add-on by name or alias. Only the a add-on they run on Host network are a bit limited. They can speak with all internal add-ons over there name but all other add-on can't speak with the add-on name to this add-on, but alias work wheel. So use the name/alias to communicate inside Hass.io +We use a internal network. That allow to speak with every add-on or from Home-Assistant to add-on by name or alias. Only the a add-on they run on Host network are a bit limited. They can speak with all internal add-ons over there name but all other add-on can't speak with the add-on name to this add-on, but alias work wheel. So use the name/alias to communicate inside Hass.io. The name have format `{REPO}-{SLUG}` i.e. `local-xy` or `3283fh-myaddon`. i.e. use `hassio` to speak with internal API. diff --git a/source/developers/hassio/addon_config.markdown b/source/developers/hassio/addon_config.markdown index 2ba863e77b6..7ce40cd18bd 100644 --- a/source/developers/hassio/addon_config.markdown +++ b/source/developers/hassio/addon_config.markdown @@ -131,7 +131,7 @@ The config for an add-on is stored in `config.json`. ### {% linkable_title Options / Schema %} -The `options` dictionary contains all available options and their default value. Set the default value to `null` if the value is required to be given by the user before the add-on can start. Only non-nested arrays and dictionaries are supported. +The `options` dictionary contains all available options and their default value. Set the default value to `null` if the value is required to be given by the user before the add-on can start, and it show it inside default values. Only nested arrays and dictionaries are supported with a deep of two size. If you want make a option optional, put `?` to the end of data type, otherwise it will be a required value. ```json { @@ -158,7 +158,8 @@ The `schema` looks like `options` but describes how we should validate the user "random": ["match(^\w*$)"], "link": "url", "size": "int(5,20)", - "count": "float" + "count": "float", + "not_need": "str?" } ``` diff --git a/source/developers/hassio/debugging.markdown b/source/developers/hassio/debugging.markdown index b10426728ed..01a92c98ea8 100644 --- a/source/developers/hassio/debugging.markdown +++ b/source/developers/hassio/debugging.markdown @@ -28,10 +28,10 @@ Alternative instructions, for Mac, Windows and Linux can be found [here](https:/ Follow steps 1-4 under 'Generating a new SSH key' (The other sections are not applicable to Hass.io and can be ignored.) -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, copy your public key file to the root of your SD card. +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, copy your public key file to the root of your SD card as `authorized_keys`.

    -Make sure when you are copying the public key to the root of the /boot partition of the SD card that you rename the file correctly 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/source/developers/maintenance.markdown b/source/developers/maintenance.markdown index 7b1d9d59a4f..0a509231e84 100644 --- a/source/developers/maintenance.markdown +++ b/source/developers/maintenance.markdown @@ -36,7 +36,7 @@ If you update the requirements of a component/platform through the `REQUIREMENTS $ script/gen_requirements_all.py ``` -Start a test run of Home Assistant if that was successful include all files in a Pull Request. Add a short summary of the changes, a sample configuration entry, details about the tests, and other useful information to the description. +Start a test run of Home Assistant if that was successful include all files in a Pull Request. Add a short summary of the changes, a sample configuration entry, details about the tests you performed to ensure the update works, and other useful information to the description. diff --git a/source/hassio/index.markdown b/source/hassio/index.markdown index 89f078729d0..84cb5ac4027 100644 --- a/source/hassio/index.markdown +++ b/source/hassio/index.markdown @@ -34,7 +34,12 @@ Hass.io users can update Home Assistant via the 'Hass.io' page in the UI. Howeve

    -Hass.io dashboard +Hass.io dashboard with upgrade notification (under the hamburger menu -> Hass.io) +

    + +

    + +Hass.io upgrade process from the SSH command line

    [Google Assistant]: /addons/google_assistant/ diff --git a/source/images/blog/2017-10-analog-sensor/analog-sensor.png b/source/images/blog/2017-10-analog-sensor/analog-sensor.png new file mode 100644 index 00000000000..dd08809aae9 Binary files /dev/null and b/source/images/blog/2017-10-analog-sensor/analog-sensor.png differ diff --git a/source/images/blog/2017-10-template/social.png b/source/images/blog/2017-10-template/social.png new file mode 100644 index 00000000000..7e2c58b0015 Binary files /dev/null and b/source/images/blog/2017-10-template/social.png differ diff --git a/source/images/components/gpslogger/custom-url.png b/source/images/components/gpslogger/custom-url.png new file mode 100644 index 00000000000..13a20ecd2c5 Binary files /dev/null and b/source/images/components/gpslogger/custom-url.png differ diff --git a/source/images/components/gpslogger/logging-details.png b/source/images/components/gpslogger/logging-details.png new file mode 100644 index 00000000000..ff5e3c84599 Binary files /dev/null and b/source/images/components/gpslogger/logging-details.png differ diff --git a/source/images/components/gpslogger/performance.png b/source/images/components/gpslogger/performance.png new file mode 100644 index 00000000000..958b0574f9d Binary files /dev/null and b/source/images/components/gpslogger/performance.png differ diff --git a/source/images/components/gpslogger/settings.png b/source/images/components/gpslogger/settings.png new file mode 100644 index 00000000000..c752c7df3ec Binary files /dev/null and b/source/images/components/gpslogger/settings.png differ diff --git a/source/images/hassio/screenshots/ssh-upgrade.png b/source/images/hassio/screenshots/ssh-upgrade.png new file mode 100644 index 00000000000..c4f7bf42825 Binary files /dev/null and b/source/images/hassio/screenshots/ssh-upgrade.png differ diff --git a/source/images/supported_brands/velbus.png b/source/images/supported_brands/velbus.png index da459dbfe8e..ce95d1308a3 100644 Binary files a/source/images/supported_brands/velbus.png and b/source/images/supported_brands/velbus.png differ diff --git a/source/privacy/index.markdown b/source/privacy/index.markdown new file mode 100644 index 00000000000..fc63d2812bb --- /dev/null +++ b/source/privacy/index.markdown @@ -0,0 +1,55 @@ +--- +layout: page +title: "Privacy Policy" +description: "Your privacy is super important to us. We will never gather any information from you unless we truly need it." +date: 2017-10-19 01:00 +sidebar: false +comments: false +sharing: true +footer: true +--- + +Your privacy is critically important to us. At Home Assistant, we have a few fundamental principles: + + - We don’t ask you for personal information unless we truly need it. (We can’t stand services that ask you for things like your gender or income level for no apparent reason.) + - We don’t share your personal information with anyone except to comply with the law, develop our products, or protect our rights. + - We don’t store personal information on our servers unless required for the ongoing operation of one of our services. + +If you have questions about deleting or correcting your personal data please contact our support team. + +## {% linkable_title Website Visitors %} +Like most website operators, Home Assistant collects non-personally-identifying information of the sort that web browsers and servers typically make available, such as the browser type, language preference, referring site, and the date and time of each visitor request. Home Assistant’s purpose in collecting non-personally identifying information is to better understand how Home Assistant’s visitors use its website. From time to time, Home Assistant may release non-personally-identifying information in the aggregate, e.g., by publishing a report on trends in the usage of its website. + +Home Assistant also collects potentially personally-identifying information like Internet Protocol (IP) addresses for logged in users and for users leaving comments on the blog or forums. Home Assistant only discloses logged in user and commenter IP addresses under the same circumstances that it uses and discloses personally-identifying information as described below. + +## {% linkable_title Gathering of Personally-Identifying Information %} +Certain visitors to Home Assistant’s websites choose to interact with Home Assistant in ways that require Home Assistant to gather personally-identifying information. The amount and type of information that Home Assistant gathers depends on the nature of the interaction. For example, we ask visitors who create a forum account to provide a username and an email address. Those who engage in transactions with Home Assistant are asked to provide additional information, including as necessary the personal and financial information required to process those transactions. In each case, Home Assistant collects such information only insofar as is necessary or appropriate to fulfill the purpose of the visitor’s interaction with Home Assistant. Home Assistant does not disclose personally-identifying information other than as described below. And visitors can always refuse to supply personally-identifying information, with the caveat that it may prevent them from engaging in certain website-related activities. + +## {% linkable_title Aggregated Statistics %} +Home Assistant may collect statistics about the behavior of visitors to its websites. For instance, Home Assistant may monitor the most popular component documentation. Home Assistant may display this information publicly or provide it to others. However, Home Assistant does not disclose personally-identifying information other than as described below. + +## {% linkable_title Information We Collect from Other Sources %} +With your authorization, we may also obtain information about you from other sources. For example, if you create or log into your WordPress.com account through a social media service (like Facebook or Google) or if you connect your account to a social media service, we will receive information from that service (such as your username, basic profile information, and friends list) via the authorization procedures used by that service. The information we receive depends on which services you authorize and any options that are available. + +## {% linkable_title Protection of Certain Personally-Identifying Information %} +Home Assistant discloses potentially personally-identifying and personally-identifying information only to those of its employees, contractors and affiliated organizations that (i) need to know that information in order to process it on Home Assistant’s behalf or to provide services available at Home Assistant’s websites, and (ii) that have agreed not to disclose it to others. Some of those employees, contractors and affiliated organizations may be located outside of your home country; by using Home Assistant’s websites, you consent to the transfer of such information to them. Home Assistant will not rent or sell potentially personally-identifying and personally-identifying information to anyone. Other than to its employees, contractors and affiliated organizations, as described above, Home Assistant discloses potentially personally-identifying and personally-identifying information only in response to a subpoena, court order or other governmental request, or when Home Assistant believes in good faith that disclosure is reasonably necessary to protect the property or rights of Home Assistant, third parties or the public at large. If you are a registered user of an Home Assistant website and have supplied your email address, Home Assistant may occasionally send you an email to tell you about new features, solicit your feedback, or just keep you up to date with what’s going on with Home Assistant and our products. We primarily use our various product blogs to communicate this type of information, so we expect to keep this type of email to a minimum. If you send us a request (for example via a support email or via one of our feedback mechanisms), we reserve the right to publish it in order to help us clarify or respond to your request or to help us support other users. Home Assistant takes all measures reasonably necessary to protect against the unauthorized access, use, alteration or destruction of potentially personally-identifying and personally-identifying information. + +## {% linkable_title Cookies %} +A cookie is a string of information that a website stores on a visitor’s computer, and that the visitor’s browser provides to the website each time the visitor returns. Home Assistant uses cookies to help Home Assistant identify and track visitors, their usage of Home Assistant website, and their website access preferences. Home Assistant visitors who do not wish to have cookies placed on their computers should set their browsers to refuse cookies before using Home Assistant’s websites, with the drawback that certain features of Home Assistant’s websites may not function properly without the aid of cookies. + +## {% linkable_title Business Transfers %} +If Home Assistant, or substantially all of its assets, were acquired, or in the unlikely event that Home Assistant goes out of business or enters bankruptcy, user information would be one of the assets that is transferred or acquired by a third party. You acknowledge that such transfers may occur, and that any acquirer of Home Assistant may continue to use your personal information as set forth in this policy. + +## {% linkable_title Ads %} +Ads appearing on any of our websites may be delivered to users by advertising partners, who may set cookies. These cookies allow the ad server to recognize your computer each time they send you an online advertisement to compile information about you or others who use your computer. This information allows ad networks to, among other things, deliver targeted advertisements that they believe will be of most interest to you. This Privacy Policy covers the use of cookies by Home Assistant and does not cover the use of cookies by any advertisers. + +## {% linkable_title Privacy Policy Changes %} +Although most changes are likely to be minor, Home Assistant may change its Privacy Policy from time to time, and in Home Assistant’s sole discretion. Home Assistant encourages visitors to frequently check this page for any changes to its Privacy Policy. Your continued use of this site after any change in this Privacy Policy will constitute your acceptance of such change. + +### {% linkable_title Change log %} + - October 19, 2017: Initial version + +_This privacy policy has been adapted from the [Automattic privacy policy][Home Assistant] and is licensed [Creative Commons ShareAlike][cc]._ + +[Home Assistant]: https://automattic.com/privacy/ +[cc]: https://creativecommons.org/licenses/by-sa/4.0/ \ No newline at end of file diff --git a/source/tos/index.markdown b/source/tos/index.markdown new file mode 100644 index 00000000000..cadd9cd4421 --- /dev/null +++ b/source/tos/index.markdown @@ -0,0 +1,109 @@ +--- +layout: page +title: "Terms of Service" +description: "The Terms of Service that should be accepted to own a Home Assistant account." +date: 2017-10-19 01:00 +sidebar: false +comments: false +sharing: true +footer: true +--- + +The following terms and conditions govern all use of the Home Assistant website and all content, services and products available at or through the website, including, but not limited to, Home Assistant Forum Software, Home Assistant Support Forums and the Home Assistant Hosting service ("Hosting"), (taken together, the Website). The Website is owned and operated by Home Assistant. The Website is offered subject to your acceptance without modification of all of the terms and conditions contained herein and all other operating rules, policies (including, without limitation, Home Assistant’s [Privacy Policy](/privacy/) and [Code of Conduct](/code_of_conduct/)) and procedures that may be published from time to time on this Site by Home Assistant (collectively, the "Agreement"). + +Please read this Agreement carefully before accessing or using the Website. By accessing or using any part of the web site, you agree to become bound by the terms and conditions of this agreement. If you do not agree to all the terms and conditions of this agreement, then you may not access the Website or use any services. If these terms and conditions are considered an offer by Home Assistant, acceptance is expressly limited to these terms. The Website is available only to individuals who are at least 13 years old. + +## {% linkable_title 1. Your Home Assistant Account %} + +If you create an account on the Website, you are responsible for maintaining the security of your account and you are fully responsible for all activities that occur under the account. You must immediately notify Home Assistant of any unauthorized uses of your account or any other breaches of security. Home Assistant will not be liable for any acts or omissions by you, including any damages of any kind incurred as a result of such acts or omissions. + +## {% linkable_title 2. Responsibility of Contributors %} + +If you post material to the Website, post links on the Website, or otherwise make (or allow any third party to make) material available by means of the Website (any such material, "Content"), You are entirely responsible for the content of, and any harm resulting from, that Content. That is the case regardless of whether the Content in question constitutes text, graphics, an audio file, or computer software. By making Content available, you represent and warrant that: + +* the downloading, copying and use of the Content will not infringe the proprietary rights, including but not limited to the copyright, patent, trademark or trade secret rights, of any third party; +* if your employer has rights to intellectual property you create, you have either (i) received permission from your employer to post or make available the Content, including but not limited to any software, or (ii) secured from your employer a waiver as to all rights in or to the Content; +* you have fully complied with any third-party licenses relating to the Content, and have done all things necessary to successfully pass through to end users any required terms; +* the Content does not contain or install any viruses, worms, malware, Trojan horses or other harmful or destructive content; +* the Content is not spam, is not machine- or randomly-generated, and does not contain unethical or unwanted commercial content designed to drive traffic to third party sites or boost the search engine rankings of third party sites, or to further unlawful acts (such as phishing) or mislead recipients as to the source of the material (such as spoofing); +* the Content is not pornographic, does not contain threats or incite violence, and does not violate the privacy or publicity rights of any third party; +* your content is not getting advertised via unwanted electronic messages such as spam links on newsgroups, email lists, blogs and web sites, and similar unsolicited promotional methods; +* your content is not named in a manner that misleads your readers into thinking that you are another person or company; and +* you have, in the case of Content that includes computer code, accurately categorized and/or described the type, nature, uses and effects of the materials, whether requested to do so by Home Assistant or otherwise. + +## {% linkable_title 3. User Content License %} + +User contributions are licensed under a [Creative Commons Attribution-NonCommercial-ShareAlike 3.0 Unported License](http://creativecommons.org/licenses/by-nc-sa/3.0/deed.en_US). Without limiting any of those representations or warranties, Home Assistant has the right (though not the obligation) to, in Home Assistant’s sole discretion (i) refuse or remove any content that, in Home Assistant’s reasonable opinion, violates any Home Assistant policy or is in any way harmful or objectionable, or (ii) terminate or deny access to and use of the Website to any individual or entity for any reason, in Home Assistant’s sole discretion. Home Assistant will have no obligation to provide a refund of any amounts previously paid. + + +## {% linkable_title 4. Payment and Renewal %} + +### General Terms + +Optional paid services or upgrades may be available on the Website. When utilizing an optional paid service or upgrade, you agree to pay Home Assistant the monthly or annual subscription fees indicated. Payments will be charged on a pre-pay basis on the day you begin utilizing the service or upgrade and will cover the use of that service or upgrade for a monthly or annual subscription period as indicated. These fees are not refundable. + +### Automatic Renewal + +Unless you notify Home Assistant before the end of the applicable subscription period that you want to cancel a service or upgrade, your subscription will automatically renew and you authorize us to collect the then-applicable annual or monthly subscription fee (as well as any taxes) using any credit card or other payment mechanism we have on record for you. Subscriptions can be canceled at any time. + +## {% linkable_title 5. Services %} + +### Hosting, Support Services + +Optional Hosting and Support services may be provided by Home Assistant under the terms and conditions for each such service. By signing up for a Hosting/Support or Support services account, you agree to abide by such terms and conditions. + +## {% linkable_title 6. Responsibility of Website Visitors %} + +Home Assistant has not reviewed, and cannot review, all of the material, including computer software, posted to the Website, and cannot therefore be responsible for that material’s content, use or effects. By operating the Website, Home Assistant does not represent or imply that it endorses the material there posted, or that it believes such material to be accurate, useful or non-harmful. You are responsible for taking precautions as necessary to protect yourself and your computer systems from viruses, worms, Trojan horses, and other harmful or destructive content. The Website may contain content that is offensive, indecent, or otherwise objectionable, as well as content containing technical inaccuracies, typographical mistakes, and other errors. The Website may also contain material that violates the privacy or publicity rights, or infringes the intellectual property and other proprietary rights, of third parties, or the downloading, copying or use of which is subject to additional terms and conditions, stated or unstated. Home Assistant disclaims any responsibility for any harm resulting from the use by visitors of the Website, or from any downloading by those visitors of content there posted. + +## {% linkable_title 7. Content Posted on Other Websites %} + +We have not reviewed, and cannot review, all of the material, including computer software, made available through the websites and webpages to which Home Assistant links, and that link to Home Assistant. Home Assistant does not have any control over those non-Home Assistant websites and webpages, and is not responsible for their contents or their use. By linking to a non-Home Assistant website or webpage, Home Assistant does not represent or imply that it endorses such website or webpage. You are responsible for taking precautions as necessary to protect yourself and your computer systems from viruses, worms, Trojan horses, and other harmful or destructive content. Home Assistant disclaims any responsibility for any harm resulting from your use of non-Home Assistant websites and webpages. + +## {% linkable_title 8. Copyright Infringement and DMCA Policy %} + +As Home Assistant asks others to respect its intellectual property rights, it respects the intellectual property rights of others. If you believe that material located on or linked to by Home Assistant violates your copyright, and if this website resides in the USA, you are encouraged to notify Home Assistant in accordance with Home Assistant’s [Digital Millennium Copyright Act](http://en.wikipedia.org/wiki/Digital_Millennium_Copyright_Act) ("DMCA") Policy. Home Assistant will respond to all such notices, including as required or appropriate by removing the infringing material or disabling all links to the infringing material. Home Assistant will terminate a visitor’s access to and use of the Website if, under appropriate circumstances, the visitor is determined to be a repeat infringer of the copyrights or other intellectual property rights of Home Assistant or others. In the case of such termination, Home Assistant will have no obligation to provide a refund of any amounts previously paid to Home Assistant. + +## {% linkable_title 9. Intellectual Property %} + +This Agreement does not transfer from Home Assistant to you any Home Assistant or third party intellectual property, and all right, title and interest in and to such property will remain (as between the parties) solely with Home Assistant. Home Assistant, Home Assistant, the Home Assistant logo, and all other trademarks, service marks, graphics and logos used in connection with Home Assistant, or the Website are trademarks or registered trademarks of Home Assistant or Home Assistant’s licensors. Other trademarks, service marks, graphics and logos used in connection with the Website may be the trademarks of other third parties. Your use of the Website grants you no right or license to reproduce or otherwise use any Home Assistant or third-party trademarks. + +## {% linkable_title 10. Advertisements %} + +Home Assistant reserves the right to display advertisements on your content unless you have purchased an Ad-free Upgrade or a Services account. + +## {% linkable_title 11. Attribution %} + +Home Assistant reserves the right to display attribution links such as ‘Powered by Home Assistant,’ theme author, and font attribution in your content footer or toolbar. Footer credits and the Home Assistant toolbar may not be removed regardless of upgrades purchased. + +## {% linkable_title 12. Changes %} + +Home Assistant reserves the right, at its sole discretion, to modify or replace any part of this Agreement. It is your responsibility to check this Agreement periodically for changes. Your continued use of or access to the Website following the posting of any changes to this Agreement constitutes acceptance of those changes. Home Assistant may also, in the future, offer new services and/or features through the Website (including, the release of new tools and resources). Such new features and/or services shall be subject to the terms and conditions of this Agreement. + +## {% linkable_title 13. Termination %} + +Home Assistant may terminate your access to all or any part of the Website at any time, with or without cause, with or without notice, effective immediately. If you wish to terminate this Agreement or your Home Assistant account (if you have one), you may simply discontinue using the Website. All provisions of this Agreement which by their nature should survive termination shall survive termination, including, without limitation, ownership provisions, warranty disclaimers, indemnity and limitations of liability. + +## {% linkable_title 14. Disclaimer of Warranties %} + +The Website is provided "as is". Home Assistant and its suppliers and licensors hereby disclaim all warranties of any kind, express or implied, including, without limitation, the warranties of merchantability, fitness for a particular purpose and non-infringement. Neither Home Assistant nor its suppliers and licensors, makes any warranty that the Website will be error free or that access thereto will be continuous or uninterrupted. If you’re actually reading this, here’s [a treat](http://www.newyorker.com/online/blogs/shouts/2012/12/the-hundred-best-lists-of-all-time.html). You understand that you download from, or otherwise obtain content or services through, the Website at your own discretion and risk. + +## {% linkable_title 15. Limitation of Liability %} + +In no event will Home Assistant, or its suppliers or licensors, be liable with respect to any subject matter of this agreement under any contract, negligence, strict liability or other legal or equitable theory for: (i) any special, incidental or consequential damages; (ii) the cost of procurement for substitute products or services; (iii) for interruption of use or loss or corruption of data; or (iv) for any amounts that exceed the fees paid by you to Home Assistant under this agreement during the twelve (12) month period prior to the cause of action. Home Assistant shall have no liability for any failure or delay due to matters beyond their reasonable control. The foregoing shall not apply to the extent prohibited by applicable law. + +## {% linkable_title 16. General Representation and Warranty %} + +You represent and warrant that (i) your use of the Website will be in strict accordance with the Home Assistant [Privacy Policy](/privacy), [Community Guidelines](/guidelines), with this Agreement and with all applicable laws and regulations (including without limitation any local laws or regulations in your country, state, city, or other governmental area, regarding online conduct and acceptable content, and including all applicable laws regarding the transmission of technical data exported from the country in which this website resides or the country in which you reside) and (ii) your use of the Website will not infringe or misappropriate the intellectual property rights of any third party. + +## {% linkable_title 17. Indemnification %} + +You agree to indemnify and hold harmless Home Assistant, its contractors, and its licensors, and their respective directors, officers, employees and agents from and against any and all claims and expenses, including attorneys’ fees, arising out of your use of the Website, including but not limited to your violation of this Agreement. + +## {% linkable_title 18. Miscellaneous %} + +This Agreement constitutes the entire agreement between Home Assistant and you concerning the subject matter hereof, and they may only be modified by a written amendment signed by an authorized executive of Home Assistant, or by the posting by Home Assistant of a revised version. Except to the extent applicable law, if any, provides otherwise, this Agreement, any access to or use of the Website will be governed by the laws of the state of California, U.S.A., excluding its conflict of law provisions, and the proper venue for any disputes arising out of or relating to any of the same will be the state and federal courts located in San Francisco County, California. Except for claims for injunctive or equitable relief or claims regarding intellectual property rights (which may be brought in any competent court without the posting of a bond), any dispute arising under this Agreement shall be finally settled in accordance with the Comprehensive Arbitration Rules of the Judicial Arbitration and Mediation Service, Inc. (“JAMS”) by three arbitrators appointed in accordance with such Rules. The arbitration shall take place in San Francisco, California, in the English language and the arbitral decision may be enforced in any court. The prevailing party in any action or proceeding to enforce this Agreement shall be entitled to costs and attorneys’ fees. If any part of this Agreement is held invalid or unenforceable, that part will be construed to reflect the parties’ original intent, and the remaining portions will remain in full force and effect. A waiver by either party of any term or condition of this Agreement or any breach thereof, in any one instance, will not waive such term or condition or any subsequent breach thereof. You may assign your rights under this Agreement to any party that consents to, and agrees to be bound by, its terms and conditions; Home Assistant may assign its rights under this Agreement without condition. This Agreement will be binding upon and will inure to the benefit of the parties, their successors and permitted assigns. + +This document is CC-BY-SA. It was last updated February 20, 2017. + +Originally adapted from the [WordPress Terms of Service](http://en.wordpress.com/tos/). \ No newline at end of file