From d5babc02d45869cc90e05ba9fd6aa45716d74b7f Mon Sep 17 00:00:00 2001 From: Marcelo Moreira de Mello Date: Sat, 16 Jun 2018 11:59:34 -0400 Subject: [PATCH 01/32] Updated Arlo documentation (#5508) * Updated Arlo documentation * Typo --- source/_components/arlo.markdown | 10 +++++++--- source/_components/sensor.arlo.markdown | 2 +- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/source/_components/arlo.markdown b/source/_components/arlo.markdown index e82ade68d13..a95acd4999e 100644 --- a/source/_components/arlo.markdown +++ b/source/_components/arlo.markdown @@ -35,17 +35,21 @@ password: description: The password for accessing your Arlo account. required: true type: string +scan_interval: + description: How frequently to query for new data. Defaults to 60 seconds. + required: false + type: int {% endconfiguration %} It is recommended to create a dedicated user on Arlo website to be used within Home Assistant and then share your Arlo cameras. -Finish its configuration by visiting the [Arlo sensor page](/components/sensor.arlo/) or [Arlo camera page](/components/camera.arlo/) or [Arlo control panel page](/components/alarm_control_panel.arlo/). +Finish its configuration by visiting the [Arlo sensor page](/components/sensor.arlo/) or [Arlo camera page](/components/camera.arlo/) or [Arlo control panel page](/components/alarm_control_panel.arlo/). Arlo also has a service call `arlo.update` that can be manually called to force an update prior to the regular scheduled interval. -The Arlo component also provides a service to enable/disable the motion detection sensor. The example below enables the motion detection every time the Home Assistant service starts. +The Arlo component also provides a camera service to enable/disable the motion detection sensor. The example below enables the motion detection every time the Home Assistant service starts. ```yaml #automation.yaml -- alias: Enable Arlo upton HA start' +- alias: Enable Arlo upon HA start' initial_state: 'on' trigger: platform: homeassistant diff --git a/source/_components/sensor.arlo.markdown b/source/_components/sensor.arlo.markdown index e5184d2ed06..983388afd04 100644 --- a/source/_components/sensor.arlo.markdown +++ b/source/_components/sensor.arlo.markdown @@ -35,7 +35,7 @@ sensor: Configuration variables: -- **monitored_conditions** array (*Required*): Conditions to display in the frontend. The following conditions can be monitored. +- **monitored_conditions** array (*Optional*): Conditions to display in the frontend. The following conditions can be monitored. - **captured_today**: Return the number of videos captured on the current day. - **last_capture**: Return the timestamp from the last video captured by your Arlo camera. - **total_cameras**: Return the number of recognized and active cameras linked on your Arlo account. From b71498d948ccf30d6dd29e98ce3f32ec20830d8a Mon Sep 17 00:00:00 2001 From: Nick Whyte Date: Sun, 17 Jun 2018 02:03:53 +1000 Subject: [PATCH 02/32] NSW Fuel Station Price Sensor (#5477) * NSW Fuel Station Price Sensor * . * . * update doc * update doc * quote correctly * Update doc * Add headings and minimize configuration sample --- .../sensor.nsw_fuel_station.markdown | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) create mode 100644 source/_components/sensor.nsw_fuel_station.markdown diff --git a/source/_components/sensor.nsw_fuel_station.markdown b/source/_components/sensor.nsw_fuel_station.markdown new file mode 100644 index 00000000000..5ebdb8fc51e --- /dev/null +++ b/source/_components/sensor.nsw_fuel_station.markdown @@ -0,0 +1,46 @@ +--- +layout: page +title: "NSW Fuel Station Price Sensor" +description: "Instructions on how to integrate NSW fuel station prices into Home Assistant." +date: 2018-06-02 18:00 +sidebar: true +comments: false +sharing: true +footer: true +ha_category: Fuel +ha_release: 0.72 +ha_iot_class: "Cloud Polling" +--- + +The `nsw_fuel_station` sensor platform uses the [NSW Fuel Check App](https://www.fuelcheck.nsw.gov.au/app) data as a source for current fuel price data. + +## {% linkable_title Setup %} + +To get the station ID for any NSW fuel station you will need to: + +- Visit the [Fuel Check App](https://www.fuelcheck.nsw.gov.au/app). +- Open the developer console of your browser (for Chrome, click View -> Developer -> Developer Tools). Click the "Network" tab in the developer console. +- In the Fuel Check App, search for your postcode or click "Fuel Near Me". +- In the developer console, you should see a request to `/FuelCheckApp/v1/fuel/prices/bylocation`. Open this request and preview the response. Find the station you wish to add, and copy down the `ServiceStationID` field. + +## {% linkable_title Configuration %} + +To add the NSW fuel station price sensor to your installation, add the following to your `configuration.yaml` file: + +```yaml +sensor: + - platform: nsw_fuel_station + station_id: 291 +``` + +{% configuration %} +station_id: + description: The ID of the station to track + required: true + type: string +fuel_types: + description: A list of fuel types to track for the station. Must be one of `["E10", "U91", "E85", "P95", "P98", "DL", "PDL", "B20", "LPG", "CNG", "EV"]`. Descriptions of fuel types can be found [here](https://www.fuelcheck.nsw.gov.au/App/Home/FuelTypes). + required: false + default: "`['E10', 'U91']`" + type: list +{% endconfiguration %} From 42a416b7b97931f9b5f59f14118e98b33236b9a3 Mon Sep 17 00:00:00 2001 From: mountainsandcode Date: Sun, 17 Jun 2018 07:15:36 +0200 Subject: [PATCH 03/32] Add entity support to Waze Travel Time (#5461) --- source/_components/sensor.waze_travel_time.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.waze_travel_time.markdown b/source/_components/sensor.waze_travel_time.markdown index ec9119d2e47..484785a1a07 100644 --- a/source/_components/sensor.waze_travel_time.markdown +++ b/source/_components/sensor.waze_travel_time.markdown @@ -32,11 +32,11 @@ sensor: {% configuration %} origin: - description: Enter the starting address or the GPS coordinates of the location (GPS coordinates has to be separated by a comma). + description: Enter the starting address or the GPS coordinates of the location (GPS coordinates has to be separated by a comma). You can also enter the entity id of a sensor, device_tracker or zone, which provides this information in its state. required: true type: string destination: - description: Enter the destination address or the GPS coordinates of the location (GPS coordinates has to be separated by a comma). + description: Enter the destination address or the GPS coordinates of the location (GPS coordinates has to be separated by a comma). You can also enter the entity id of a sensor, device_tracker or zone, which provides this information in its state. required: true type: string region: From c5cf0f244535ea7174fb2752fd06494bb12591ef Mon Sep 17 00:00:00 2001 From: Fabian Affolter Date: Sun, 17 Jun 2018 21:13:02 +0200 Subject: [PATCH 04/32] Limit the default to one sensor (#5556) --- source/_components/sensor.pi_hole.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/sensor.pi_hole.markdown b/source/_components/sensor.pi_hole.markdown index 889f9b86c2a..78b4e0fb553 100644 --- a/source/_components/sensor.pi_hole.markdown +++ b/source/_components/sensor.pi_hole.markdown @@ -51,7 +51,7 @@ monitored_conditions: description: Defines the stats to monitor as sensors. required: false type: string - default: all + default: ads_blocked_today keys: ads_blocked_today: description: Total number of blocked ads today. @@ -73,5 +73,5 @@ monitored_conditions: description: Total number of seen clients. {% endconfiguration %} -This sensor platform was not made by Pi-hole LLC or the Pi-hole community. They didn't provide support, feedback, testing or helped in any way while it was created. This is third party, may not if Pi-hole is breaking their API with the latest release, not official, not developed, not supported and not endorsed Pi-hole LLC or the Pi-hole community. The trademark `Pi-hole` and the logo is used here to describe the platform and only to describe. `Pi-hole` is a registered trademark of Pi-hole LLC. +This sensor platform was not made by Pi-hole LLC or the Pi-hole community. They didn't provide support, feedback, testing or helped in any way while it was created. This is third party, may not work if Pi-hole is breaking their API with the latest release, not official, not developed, not supported and not endorsed Pi-hole LLC or the Pi-hole community. The trademark `Pi-hole` and the logo is used here to describe the platform and only to describe. `Pi-hole` is a registered trademark of Pi-hole LLC. From 873fc918c8540342b0a142e128c34f964ee538be Mon Sep 17 00:00:00 2001 From: Sergiy Maysak Date: Sun, 17 Jun 2018 22:27:44 +0300 Subject: [PATCH 05/32] Wireless tags platform (#5035) * Docs for Wirelesstag platform. * Added Notes section. * Corrected list of push notifications events. * Removed malformed notes. * Removed nl. * Added icon. * Conformed docs to standards. * Corrected typos reported during PR review. * Fixed one last typo * Small change to force rebuild * Added ha_release: 0.67 and note how to make sure local push notifications are enabled. * :pencil2: Tweaks * :pencil2: Tweaks * :pencil2: Tweaks * :pencil2: Tweaks * Noted presence of Cloud Polling, added warning on https. * Corrected name of Tags Manager. * :arrow_up: ha_release -> 0.68 --- .../binary_sensor.wirelesstag.markdown | 48 ++++++++++++++++++ .../_components/sensor.wirelesstag.markdown | 41 +++++++++++++++ .../_components/switch.wirelesstag.markdown | 45 ++++++++++++++++ source/_components/wirelesstag.markdown | 47 +++++++++++++++++ .../images/supported_brands/wirelesstag.png | Bin 0 -> 85186 bytes 5 files changed, 181 insertions(+) create mode 100644 source/_components/binary_sensor.wirelesstag.markdown create mode 100644 source/_components/sensor.wirelesstag.markdown create mode 100644 source/_components/switch.wirelesstag.markdown create mode 100644 source/_components/wirelesstag.markdown create mode 100644 source/images/supported_brands/wirelesstag.png diff --git a/source/_components/binary_sensor.wirelesstag.markdown b/source/_components/binary_sensor.wirelesstag.markdown new file mode 100644 index 00000000000..efe3eae81f4 --- /dev/null +++ b/source/_components/binary_sensor.wirelesstag.markdown @@ -0,0 +1,48 @@ +--- +layout: page +title: "WirelessTag Binary Sensor" +description: "Instructions on how to integrate Wireless Tags sensors within Home Assistant." +date: 2018-03-26 21:49 +comments: false +sidebar: true +sharing: true +footer: true +logo: wirelesstag.png +ha_category: Binary Sensor +ha_iot_class: "Local Push and Cloud Polling" +ha_release: 0.68 +--- + +To get your [wirelesstag.net](http://wirelesstag.net) binary sensors working within Home Assistant, please follow the instructions for the general [WirelessTag component](/components/wirelesstag). + +To enable tags set up with your [wirelesstag.net](http://wirelesstag.net) account, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: wirelesstag + monitored_conditions: + - presence + - door + - low_battery +``` + +{% configuration %} + monitored_conditions: + description: The conditions types to monitor; valid values are specified below + required: true + type: list +{% endconfiguration %} + +The following conditions can be monitored: + +* (`presence`): On means in range, Off means out of range. +* (`motion`): On when a movement was detected, Off when clear. +* (`door`): On when a door is open, Off when the door is closed. +* (`cold`): On means temperature become too cold, Off means normal. +* (`heat`): On means hot, Off means normal. +* (`dry`): On means too dry (humidity), Off means normal. +* (`wet`): On means too wet (humidity), Off means normal. +* (`light`): On means light detected, Off means no light. +* (`moisture`): On means moisture detected (wet), Off means no moisture (dry). +* (`low_battery`): On means tag battery is low, Off means normal. diff --git a/source/_components/sensor.wirelesstag.markdown b/source/_components/sensor.wirelesstag.markdown new file mode 100644 index 00000000000..5b811d400a8 --- /dev/null +++ b/source/_components/sensor.wirelesstag.markdown @@ -0,0 +1,41 @@ +--- +layout: page +title: "WirelessTag Sensor" +description: "Instructions on how to integrate your Wireless Tags sensors within Home Assistant." +date: 2018-03-26 21:50 +comments: false +sidebar: true +sharing: true +footer: true +logo: wirelesstag.png +ha_category: Sensor +ha_iot_class: "Local Push and Cloud Polling" +ha_release: 0.68 +--- + +To get your [wirelesstag.net](http://wirelesstag.net) sensors working within Home Assistant, please follow the instructions for the general [WirelessTag component](/components/wirelesstag). + +To enable tags set up with your [wirelesstag.net](http://wirelesstag.net) account, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +sensor: + - platform: wirelesstag + monitored_conditions: + - temperature + - humidity +``` + +{% configuration %} + monitored_conditions: + description: The metrics types to monitor; valid values are specified below + required: true + type: list +{% endconfiguration %} + +The following metrics can be monitored: + +* (`temperature`): Value is in Celsius or Fahrenheit (according to your settings at Tag Manager). +* (`humidity`): Humidity level in %. +* (`moisture`): Water level/soil moisture in % (applicable for Water Tag only). +* (`light`): Brightness in lux (if supported by tag). diff --git a/source/_components/switch.wirelesstag.markdown b/source/_components/switch.wirelesstag.markdown new file mode 100644 index 00000000000..f9239b3d11d --- /dev/null +++ b/source/_components/switch.wirelesstag.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: "WirelessTag Switch" +description: "Instructions on how to integrate your Wireless Tags sensors within Home Assistant." +date: 2018-03-26 21:52 +comments: false +sidebar: true +sharing: true +footer: true +logo: wirelesstag.png +ha_category: Switch +ha_iot_class: "Local Push and Cloud Polling" +ha_release: 0.68 +--- + +To get your [wirelesstag.net](http://wirelesstag.net) switches working within Home Assistant, please follow the instructions for the general [WirelessTag component](/components/wirelesstag). + +To enable tags set up with your [wirelesstag.net](http://wirelesstag.net) account, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +switch: + - platform: wirelesstag + monitored_conditions: + - motion + - humidity +``` + +{% configuration %} + monitored_conditions: + description: The metrics types to control; valid values are specified below + required: true + type: list +{% endconfiguration %} + +The following metrics can be controlled: + +* (`temperature`): Control arm/disarm temperature monitoring. +* (`humidity`): Control arm/disarm humidity monitoring. +* (`motion`): Control arm/disarm motion and door open/close events monitoring. +* (`light`): Control monitoring of light changes. +* (`moisture`): Control monitoring of water level/soil moisture for water sensor. + +Arm/Disarm of motion switch is required to receive motion and door binary sensors events. +Others are only needed if you want to receive push notifications from tags on a specific range of changes in temperature, humidity, light or moisture. diff --git a/source/_components/wirelesstag.markdown b/source/_components/wirelesstag.markdown new file mode 100644 index 00000000000..d4e229d4a16 --- /dev/null +++ b/source/_components/wirelesstag.markdown @@ -0,0 +1,47 @@ +--- +layout: page +title: "WirelessTag" +description: "Instructions on how to integrate your Wireless Tags sensors within Home Assistant." +date: 2018-03-26 21:32 +comments: false +sidebar: true +sharing: true +footer: true +logo: wirelesstag.png +ha_category: Hub +ha_iot_class: "Local Push and Cloud Polling" +ha_release: 0.68 +--- + +The `wirelesstag` implementation allows you to integrate your [wirelesstag.net](http://wirelesstag.net) sensors tags in Home Assistant. + +To enable tags set up with your [wirelesstag.net](http://wirelesstag.net) account, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +wirelesstag: + username: you@example.com + password: secret +``` + +{% configuration %} + username: + description: Username for your [wirelesstag.net](http://wirelesstag.net) account. + required: true + type: string + password: + description: Password for your [wirelesstag.net](http://wirelesstag.net) account. + required: true + type: string +{% endconfiguration %} + +Finish your configuration by visiting the [WirelessTag binary sensor](/components/binary_sensor.wirelesstag/), [WirelessTag sensor](/components/sensor.wirelesstag/), or [WirelessTag switch](/components/switch.wirelesstag/) documentation. + +

+ To enable local push notifications from the Tags Manager, you need to add the IP address of the Tags Manager into whitelist in `http` component; i.e., add it to `trusted_networks`. See the [HTTP](/components/http/) for details. + Additionally, you need add at least one [WirelessTag binary sensor](/components/binary_sensor.wirelesstag/) in config to start receiving local push notifications. +

+ +

+ Tags Manager supports local push notifications for `http` schema only. So if your hass uses `https`, local push notifications are disabled and data is received via cloud polling. +

\ No newline at end of file diff --git a/source/images/supported_brands/wirelesstag.png b/source/images/supported_brands/wirelesstag.png new file mode 100644 index 0000000000000000000000000000000000000000..42f5ac48d59cb5a0f654cd75caee650ea260196f GIT binary patch literal 85186 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 a1^y4vDzQ&&l*P~h0000 Date: Mon, 18 Jun 2018 00:39:10 +0100 Subject: [PATCH 06/32] Add weather.IPMA (#5465) * Added IPMA * address comments * logo added --- source/_components/weather.ipma.markdown | 44 +++++++++++++++++++++++ source/images/supported_brands/ipma.png | Bin 0 -> 6306 bytes 2 files changed, 44 insertions(+) create mode 100644 source/_components/weather.ipma.markdown create mode 100644 source/images/supported_brands/ipma.png diff --git a/source/_components/weather.ipma.markdown b/source/_components/weather.ipma.markdown new file mode 100644 index 00000000000..02141227ead --- /dev/null +++ b/source/_components/weather.ipma.markdown @@ -0,0 +1,44 @@ +--- +layout: page +title: "IPMA" +description: "Instructions on how to integrate Instituto Português do Mar e Atmosfera weather conditions into Home Assistant." +date: 2018-05-31 17:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: ipma.png +ha_category: Weather +ha_release: 0.72 +ha_iot_class: "Cloud Polling" +--- + +The `ipma` weather platform uses the [Instituto Português do Mar e Atmosfera](http://www.ipma.pt) as a source for current and forecast meteorological data. + +## {% linkable_title Configuration %} + +To add the IPMA weather platform to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +weather: + - platform: ipma +``` + +{% configuration %} +name: + description: The name you would like to give to the weather station. + required: false + default: The name of the used station + type: string +latitude: + description: Latitude of the location for which you want weather information. + required: false + default: Home Assistant global latitude configuration + type: string +longitude: + description: Longitude of the location for which you want weather information. + required: false + default: Home Assistant global longitude configuration + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/ipma.png b/source/images/supported_brands/ipma.png new file mode 100644 index 0000000000000000000000000000000000000000..69a987cf1eaff41e97b1268ca23d1801d361f319 GIT binary patch literal 6306 zcmV;T7+vRyP)Px#1ZP1_K>z@;j|==^1poj532;bRa{vG?BLDy{BLR4&KXw2B02y>eSaefwW^{L9 za%BK;VQFr3E^cLXAT%y8E-^DS16z6k02mTUL_t(|UhQ28cvMBUZWu>rp3b}(mvO-4 z-rM_@WOU+^pb$_*KtuxsK|$GMPy|%O1=NU05_ST}jsi+pLc$^g0y;p_fdF9%gd{AH zMbU9YAn83z*PK&befxIOopfhGc(4EOJ0IyfRdsLm{p-|U%WY&~gb_ve%^Osr~5dC+#OiJ7q6eFs8aj%ktO!QBTiWE8+FR{M^@FZ4!K-@x02)9@jU-KmUK;Fh={mdB?t-lFH33> z2!fzhL`L2ZfBwdu5<2i6)q>CgzNFYGAnrD zl9CsQg6B6uQY*Iy9^PGs+Z3Fz0sLh_8^`a4dgdx4g}zuft12K2cinZHk`vCluP>Z# z)27Y;Fjuoe5vh0t?yU;1qvZLCEIA|qiT?`sc#+n@@h1%i!)?rUW1;^Ehx&ygTl$a_ z_NyaG>||7_gS-x;90%k?0#5+qeo*ElAA)`Kt=lFs!@nnjC4=vMFeEsV8#@6dHq`Y} zvAt^W3EQq0imZK-){#a>kH!EZV;A>BrgkwQA>k(GlBqausKght0f8Jq?!_F(wP97( zfi^O-txq|Q8_8VF3Lx=L?{)YuS#n5#a#MZomFGWVuInGk$)t7fW7hloAGc+{aNOpC zNJ?G-@*xQ^(jt+Oph(t_!BWmT$&_W6FQ-_TJ0a8gZ{@`2OUu^Hut@@2zni|@x2PIYx^CuRlitd#|TOz zDMn=^;d>B~F&ZO5k*rAEndcql>E|m?rGMw#Kj(sT`&?#o&O3LdU#Kjcb>8{IjPs5v zBs`KEqc=wNcY)a0K}JK}BN(X%z%~0Ev!72qW=l#Yq&2&(7D4cY=8uEL*JlcjdlU#c z0tlP||Nbngmqu%lAw5~uBI-nFFc=x0XYS@eE0j&X*9e`^(4PLjb+}E=alKiV>kl~G zcRy+!{dA$t22ql{AR#kGQq;m2m6438XC42Zde*TLh&pKId7@Yclf*#eBZRa9-%Yd5 zl0VHnU)33+_T(w&9Q!7J>!`twfzcY}3r2q=^%vbLgA0lP_7tUqLyz8K*wvKGdX>)(I`Ui z@U26%M#+~J#}mb_HeC)`xA#11BT2{HQF5pxGE*|2ar`pr+sY-A&s9DQEN$`^KIOc% z?c{GO$0V0I4v#-=uR&5{q(=EM2uR%@I#pt!jdVL~z5MtQTT*jevo>0a&>jF05~ZYu zI@6hp!XKeoKEDzrRKRGlz)#&FkxzgC|D(FyPYyW70^{4Jf zY@`CW;UdMsvEj`l78?PLv=5H9%mT3q|VaRIzoPve7dsT_%qHOV^7*^P*dZ` zfFnd-=v>&z9zSfY?s&*HE4F|%t7dCyLL-3C^Tca_o=%X-#A^g1G+b{VxSJ%m=&A%t zojUc0MrgQ~$)2*%mNP1q>Mp3aLQ>y&mi5=iLkFzAI~=q)x*WEVr-3*~pcjG6!%OUB zbg9EW_LTGESBie}S)Sov{OotyA!~YThpk<${YU0y-OE`ux{(`*Zq!DiMH{`5{;hiz z(ne+z-OKBVZumN)8@h(*2CZ`H2CUq#>%aW%=;xLxSe0%-1Ri_Z-tqO5_9C2s4gpd> z=awGiN$6~k9>;a({)I1yzTfg1eV=9j(j_iV#7NJsBO7(fb<3-zj^vk0 z>{jeto+yo-u0w&9Jh0!A^S51Bnq^`CS`ZomWc98PL<)UbvM-_O8ZSRV%*P8`AWNfU zmO`QU3rGVqt%u{U!pJbtTW|1$hP++Ha-3kt=#1&OxdLgT3<0hFAT97~A$p%>Q0#t7 z%_BgN$AKtF7$nZXB3tFKVq5ZX$|tw({>4>9|J({<=(CjQdoCVsvZWv&)C;2dpU956*z-nh6qOgFE6Pk%6q5 z_khI7|00@+yNG7e9-{d;ho~pzSkxcwxul-B`;z8ENdMp)AomV8vBv_j$82&(YY(aW zFDHiHONgPze3zk1`W9{Hxoz1U$Oaad-vJX;6HZinK&N{QWye7)`TKq=G3>K`2?D%H z8!^`#p)n2eiW?Y^cP-5r0-#g;5$gJd)nQZJql!>*@*bW#gC#U}F34{c%hg(TRPp>f z9v{l3mfGd47lNr=tKDn4a&Nws!~-!f;-TCCoqDNnp{)bUCX0G%$=&)sOE+T#)ek~4 zLu3X`Oy$K}+bBWRAAD1#p17-2Jt_ASRmz^{<*B=)W2SAtl~v&ebP7fCPEM8lO&9fq z9pkm{Z2Lwt_Ma6#q^9!YGh#?wObkzcLX4ef{jBdeRqR-OKr<&Dv#m#skFujZj4Jm7 zp^f{jM44xv(v;PY>ygkj4Tg7?UX4p{G;@%^-9}HHP|qq%YfOYza`Iu`GQtnF2@A4@ zgLHAj2HMq+xvmYgrl0>H&o!6o_gct(KnRRO!i;hpZv`0iP2?(lTP`xsVv2m_v*mr&k*vp7NnADTzkluAr-*F0^Ig zXo8~(jxN#ADOGvqYQZEKRYJry)6l%|y{9fY&p*eK{Sq1h*Ip<|U&@jjgu!6A8Awde zhJe+8*8Ll%H-^yA=3QbLPFTQ_eE@ZdTk4R18%w@6;7#U*3X=tfY72=4LR0;G$ZGF# z%$C5i$fBQ2k2UmMP;Th63`n+;=!UMQnpZo@Q$tCJ(`-pnh0iv3Fh^Rg} zLR1S1iE7a?w=Fzoh0kj=3kx3$7(tUsYwgSHpVAFqTM83SxAf=*(!(94Nz@}#Tv2f; z^B^OgLH7X7-1Uex&!eMbfY2J~oV>~MANkkj1`h)H!?hr^l(g=;xQCf5AfeSfuZPcc z{Thbz3Y_FISG@q@c_)9Iu$3jtLX{lszPxMCk&%xumk)5X5%chZS=YAh9n96T05W$H zOy+7uo`nw8IAphn2;KRR^;MQd7TpEN+->e<9QtW=27ODV#wd^)pnd7Y@56t2$vpd@ zo5(<5<PgUn9PTK+fEc?# zlunpVqT*ADF+O!}QqnqFwnst5ot+A-XHhPpYy$a21n8uEu6bi)q{p=&G?W$Balvf3 zi^yC72@PlkWZCR3$4_DD0fFZ#V4`-4l>sTh$1_*R5gP7!oF_lrR~aPv{cbfH&7F|P z;>n8#x|plwfSVEU(2MZFD}m5aK4G6~5ixd~M~sioBvI|sD5(wcDetpvvJU&p+XRh zk%S=MA@QZTB{;u@K{6LksI6~iRaj`^puqd5U8TC-w<1Cvj z?tuB@dtsE35?aW$6dTqRiR;cx>Pp;bR6lmIXJ5 zy45B$*ojcqrh_JQ6AU9W49oplwLWNw&;T6%4|?(hA`9HB_cUCj@B&K~5iFsx{Xk-I ziBZJ~$;?$RAnzC6`UMk9ZeAFQ$juP3PD>v+5?YgIeZZZAv;vakM?IWI^{TNu5W3eA zx_d`AQbw%5s2jZrhj}rQnzIytsm#*6UA;kbv?^O&S(UAE!QTW8KA&}gpJk;${VrdB zc7kHnnJSzp(iM<7huo9ONqZ_a$vXqe594FAIvP7ntCA8L%oQD%+L>jMX-wul()OXr zbIqbOX$UPzXdHflfU9cD3@L&jG-}j-l00R&G{;;NFf#lde4glh!QY|#U?qn#LaBm0 z)vT^6{LEbS!neZ+E^HTbH6P@riuQuZ?DBcoCd+Q-mPN;>^`Ru8gr4O~=s_8KqlRXP zOJQWQ=FX}O>KRoVG&T=`{aUuhZ;uwf__l-Mv(igAiKK*{o=?;`!F>Pg%i6cM2`pP3 zL_IQfYAr&8rL16XnZji0E^QwgpJU$4+zldl4b7LsP`s-lgS=ayTsjbFKrl;f!4Mi( zMIdU5+ssIC=AwY>dJpgih~U9SXej@tCm-BT5hMk5=m=!TEpU%lJ!R!Q|1xtmA7GNS zp!UP&@+?oHFCiiMrl`1-B7cO|_5W;7%z%}mRzo=fWc{%YdHq=cLL=nMOJkG^kNx6~ z(D`)5gr55tw{3@vEz8x0Az|KaaE}+HgvMn&=9a0px^97Xl}X#kn=DRMP6gH44Iy|! zH*I4j5P~5z0!Tc%kHl?jg^U589lPg7&P7SmP9ixH7oAi+pDyn50Z9jfl&GphTt5a8{G4l3 z{ck#}J~^DAN-wBVPu=G}`|;k_MEmB}8ujQeyR$5HV0%r8N4%G@mzE z_?(LI(st6e=2-?acfGh#2#rg2kms@|FWeiIYC!JgVtG#ZfM)iCU?c}jZ0`oY_XJ&p zoJrH*P;0fLyjg$hKw+}pU;7~od6xOiEsKgvT`5LABy^`4#L#uFP2Y3=eJqQtdXqK@ zBu0&2@@8wSmD!pdm09ZX5S9B@ZO}eJHpd2aI7L0&1;iXawBPyVCoiZ<2Vqjb!x|KS{?EF+9th)0&;4uZ+p#^5qquoFn2)QNQ6efJx%fC7t3*c6`p)!S^T0Q z$$|0!>hbfsR+G%<`)oYi5$lrl0Yk((%)FpUQzq0Qbi1^9%q??dsrmqMk-(x=W~s1(WAkdN6lD+-QUb;t7z~<|*SY$FF4WfM_T}Lz?(z3J|*j+B?qO z{*Y}F)ZzUN5RQvwmuNij3Vj%zE3-65e8`-oaXGWq zFVVu+Dfm2x&bPe~rE@G3m^&bDG(sbMCxW~aCUXs*mu`^IoG@Qf=T|JbF=#DaVuX5A zS$g9Uk!OyAi0rfe3=_h)nHvb5Qe2DB7jPL5eU6PPgELE8Q<9*r8!8}HU0uo)HNqIwR_n9PE_ddC}j*pCdy(@2LyEH&Gch z8hoz3qtAl{5j&0wJ5xW~NL5?sNa7ic2oY~LuN1__#9dgU|pxpuxILs$84Fpnu=ALmODMwjDU%6p|s7s$(+wz0db=e zI#kq4XvwAxw6g?~nsodVcMYK}(lgRc`)M;i&)i@7VBHVbMh|=I9!R;PE}>IDqy+)i zHTnX}T0QZYd5!Kob6xiUnYGuq-R1)33W)zVgsw+&fJDgh-UBZNx26ETuWjP>YMlWO z8KDw7DlSFbt}f5emz8H2h{vvG=v(ALwgjM^dA{uq6WW7%B6Mp=6L%mnA4_i%e7-wg zI0H$IpM&8BitnV*Toq}u($h}{L-NfaF|JAo?J_=;){7Pd{Jhe*_0q~H;<2As7&Dmb zx(7&%6+VQ{F=sPZKr}$;H^hhXf0WQ_p1)Ue{i^2r5pxyK-zU}!x*XfdT#W!Bt$CAW zHl6k7nr-l4M>7vaRNUmgZc?YXKyG~DS>ZtZyfj*SacT6ai_2mN{Cnc!3PZgM_SX}H zJR2{VD(I_bU`1Sh!~Zitt#w^I$1Cbb{MCC%W5+Uu23JfP1KjYS*?}t~ zKrHu5w>&Q%?!q5hgfvh4o9#f6`-GtQKNDQSb~0DvargEgZ{>HL^?Uj%Hg?f(4GGD9 zdn2wzUsz(e9sgxXHx%0LED!0;W0Tl$S@ zxm^Arwx#xYX?kK0t`Fq?GfQd~sP4HZ0$)SJ_OYZe!U!XbFv18Uj4;9oBaAS@s12Fy Yzu>K3*~PgrssI2007*qoM6N<$g7?E0(*OVf literal 0 HcmV?d00001 From ae571bbc840e44c68a4d21a7a8a59bdd373a9b54 Mon Sep 17 00:00:00 2001 From: Jason Hu Date: Sun, 17 Jun 2018 22:57:53 -0700 Subject: [PATCH 07/32] Add eta for nest.set_mode service, add security_state to sensor.nest (#5518) --- source/_components/nest.markdown | 23 ++++++++++++++++++++++- source/_components/sensor.nest.markdown | 24 ++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/source/_components/nest.markdown b/source/_components/nest.markdown index e5fd06a0c9a..a6e021b94fa 100644 --- a/source/_components/nest.markdown +++ b/source/_components/nest.markdown @@ -65,7 +65,15 @@ Configuration variables: Currently there is a single `nest.set_mode` service available to switch between "away" and "home" modes. This service requires a `home_mode` param and has an -optional `structure` param. +optional `structure` param. While setting "away" mode, an estimated arrival time +can also be set with `eta`, `eta_window`, and `trip_id` parameters. + +- **home_mode** (*Required*): `home` or `away` +- **structure** (*Optional*): Structure(s). Default apply to all structures connected with Home Assistant. +- **eta** (*Optional*): Estimated Time of Arrival from now. +- **eta_window** (*Optional*): ETA window (default is 1 minute). +- **trip_id** (*Optional*): Unique ID for the trip. Using an existing trip ID will update that trip's ETA. + ```yaml # Example script to set away, no structure specified so will execute for all @@ -86,3 +94,16 @@ set_nest_home: structure: - Building ``` + +```yaml +# Example script to set eta, structure specified +set_nest_eta: + sequence: + - service: nest.set_mode + data: + home_mode: away + structure: + - Building + eta: 00:10:30 + eta_window: 00:05 +``` diff --git a/source/_components/sensor.nest.markdown b/source/_components/sensor.nest.markdown index 36cf55bd03d..a0db2789118 100644 --- a/source/_components/sensor.nest.markdown +++ b/source/_components/sensor.nest.markdown @@ -20,6 +20,8 @@ The `nest` sensor platform lets you monitor sensors connected to your [Nest](htt You must have the [Nest component](/components/nest/) configured to use these sensors. The sensors will be setup if the `nest` component is configured and the required configuration for the `nest sensor` is set.

+## {% linkable_title Configuration %} + To enable sensors and customize which sensors are setup, you can extend the [Nest component](/components/nest/) configuration in your `configuration.yaml` file with the following settings: ```yaml # Example configuration.yaml entry @@ -40,6 +42,7 @@ The following conditions are available by device: - Nest Home: - eta: Estimated time of arrival. + - security\_state: `ok` or `deter`. [Security State](#security-state) - Nest Thermostat: - humidity - operation\_mode @@ -53,3 +56,24 @@ The following conditions are available by device: - color\_status: `gray`, `green`, `yellow`, or `red`. Indicates device status by color in the Nest app UI. It is an aggregate condition for battery+smoke+CO states, and reflects the actual color indicators displayed in the Nest app. - Nest Camera: none +## {% linkable_title Security State %} + +

+This feature is not designed to transfer your Home Assitant to a secruity system, neither Home Assistant nor Nest be liable to You for damages, +or consequential damages of any character arising as a result of use this feature. + +This feature does not depend on the [Nest Secure alarm system](https://nest.com/alarm-system/overview/) and is not a reflection of the status of that system, +nor does it react to state changes in that system. +

+ +

+This feautre use a new [Nest Secruity API](https://developers.nest.com/documentation/cloud/security-guide), +you may need to change your ["Product"](https://developers.nest.com/products) permission setting to include `Secruity State Read`. +After permission change, you may need to re-authorize your client. +

+ +If a Nest Cam detects the presence of a person (see `person_detected` in [binary_sensor.nest](/components/binary_sensor.nest/)) while the structure is in `away` mode (see `away` in [binary_sensor.nest](/components/binary_sensor.nest/)), the structure enters `deter` mode. + +A `deter` state is re-evaluated after several minutes and relaxed to `ok` if no further `person_detected` events have occurred. + +The `security_state` automatically switches to `ok` when the structure state is `home`. From dda94a920b45e18bc3375a54e9210121d8d90e5b Mon Sep 17 00:00:00 2001 From: Anders Melchiorsen Date: Tue, 19 Jun 2018 08:34:33 +0200 Subject: [PATCH 08/32] Fix filename of netgear_lte logo (#5561) --- source/_components/netgear_lte.markdown | 2 +- source/_components/sensor.netgear_lte.markdown | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/netgear_lte.markdown b/source/_components/netgear_lte.markdown index d652eb84222..36ce55a6fdc 100644 --- a/source/_components/netgear_lte.markdown +++ b/source/_components/netgear_lte.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -logo: netgear.jpg +logo: netgear.png ha_release: 0.72 ha_category: Other ha_iot_class: "Local Polling" diff --git a/source/_components/sensor.netgear_lte.markdown b/source/_components/sensor.netgear_lte.markdown index 1ce7c29c9e4..a8f82f8206a 100644 --- a/source/_components/sensor.netgear_lte.markdown +++ b/source/_components/sensor.netgear_lte.markdown @@ -7,7 +7,7 @@ sidebar: true comments: false sharing: true footer: true -logo: netgear.jpg +logo: netgear.png ha_release: 0.72 ha_category: Sensor ha_iot_class: "Local Polling" From e527ed4c7d1a1912df15232480d242d749c67eb3 Mon Sep 17 00:00:00 2001 From: Tom Harris Date: Thu, 21 Jun 2018 14:06:28 -0500 Subject: [PATCH 09/32] Add X10 support (#5469) --- source/_components/insteon_plm.markdown | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/source/_components/insteon_plm.markdown b/source/_components/insteon_plm.markdown index 9e15bb0f7d0..fff18634a17 100644 --- a/source/_components/insteon_plm.markdown +++ b/source/_components/insteon_plm.markdown @@ -37,6 +37,14 @@ insteon_plm: subcat: SUBCATEGORY firmware: FIRMWARE product_key: PRODUCT_KEY + x10_devices: + - housecode: HOUSECODE + unitcode: UNITCODE + platform: PLATFORM + steps: STEPS + x10_all_units_off: HOUSECODE + x10_all_lights_on: HOUSECODE + x10_all_lights_off: HOUSECODE ``` Configuration variables: - **port** (*Required*): The port for your device, e.g., `/dev/ttyUSB0` @@ -48,6 +56,22 @@ Configuration variables: of 0x00 - 0xff - *FIRMWARE* and *PRODUCT_KEY* are more advanced options and will typically not be used. +- **x10_devices** (*Optional*): Define X10 devices to control or respond to + - *HOUSECODE* is the X10 housecode values a - p + - *UNITCODE* is the X10 unit code values 1 - 16 + - *PLATFORM* is the Home Assistant Platform to associate the device with. + The following platforms are supported + - binary_sensor: Used for on/off devices or keypad buttons that are read only. + - light: Used for dimmable X10 devices + - switch: Used for On/Off X10 devices + - *STEPS* is the number of dim/bright steps the device supports. Used for + dimmable X10 devices only. Default value is 22. +- **x10_all_units_off** (*Optional*): Creates an binary_sensor that responds + to the X10 standard command for All Units Off. +- **x10_all_lights_on** (*Optional*): Creates an binary_sensor that responds + to the X10 standard command for All Lights On +- **x10_all_lights_off** (*Optional*): Creates an binary_sensor that responds + to the X10 standard command for All Lights Off ### {% linkable_title Autodiscovery %} From 4b6d1009adae0661d75bd56c2aed745f60991d1f Mon Sep 17 00:00:00 2001 From: starkillerOG Date: Thu, 21 Jun 2018 21:17:35 +0200 Subject: [PATCH 10/32] Add sound mode support (#5495) --- source/_components/media_player.markdown | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/source/_components/media_player.markdown b/source/_components/media_player.markdown index a2315f764d6..46ead6f4af8 100644 --- a/source/_components/media_player.markdown +++ b/source/_components/media_player.markdown @@ -56,7 +56,16 @@ Available services: `turn_on`, `turn_off`, `toggle`, `volume_up`, `volume_down`, | `entity_id` | yes | Target a specific media player. Defaults to all. | | `source` | no | Name of the source to switch to. Platform dependent. | -#### {% linkable_title Service `media_player.shuffle_set` %} +#### {% linkable_title Service `media_player/select_sound_mode` %} + +Currently only supported on [Denon AVR](/components/media_player.denonavr/) and [Songpal](/components/media_player.songpal/). + +| Service data attribute | Optional | Description | +| ---------------------- | -------- | ---------------------------------------------------- | +| `entity_id` | no | Target a specific media player. For example `media_player.marantz`| +| `sound_mode` | no | Name of the sound mode to switch to. Platform dependent.| + +#### {% linkable_title Service `media_player/shuffle_set` %} Currently only supported on [Spotify](/components/media_player.spotify/), [MPD](/components/media_player.mpd/), [Kodi](/components/media_player.kodi/), [Squeezebox](/components/media_player.squeezebox/) and [Universal](/components/media_player.universal/). From 7612de9ec766d0e61b9adaad49c2748694d578d9 Mon Sep 17 00:00:00 2001 From: Matthew Treinish Date: Thu, 21 Jun 2018 12:20:58 -0700 Subject: [PATCH 11/32] Add documentation for the new watson_iot component (#5100) * Add documentation for the new watson_iot component This commit adds documention for the new watson_iot component which was added in home-assistant/home-assistant#13664 It links to the official documentation for setting up the cloud service and generating the required auth information. * :pencil2: Missing comma * Use configuration tags This commit updates the formatting of the configuration section of the documentation. Previously it manually formatted a list instead of leveraging the templating format. This corrects that oversight and uses the standard format. * :art: Adds logo * :arrow_up: ha_release -> 0.68 * :pencil2: Processed RFC's --- source/_components/watson_iot.markdown | 104 +++++++++++++++++++++++++ source/images/supported_brands/ibm.png | Bin 0 -> 2014 bytes 2 files changed, 104 insertions(+) create mode 100644 source/_components/watson_iot.markdown create mode 100644 source/images/supported_brands/ibm.png diff --git a/source/_components/watson_iot.markdown b/source/_components/watson_iot.markdown new file mode 100644 index 00000000000..b5c30202d49 --- /dev/null +++ b/source/_components/watson_iot.markdown @@ -0,0 +1,104 @@ +--- +layout: page +title: "IBM Watson IoT Platform" +description: "Record events in the IBM Watson IoT Platform." +date: 2018-04-03 22:09 +sidebar: true +comments: false +sharing: true +footer: true +logo: ibm.png +ha_category: History +ha_release: 0.72 +--- + +The `watson_iot` component enables you to link the devices in Home Assistant +with an [IBM Watson IoT Platform instance](https://www.ibm.com/us-en/marketplace/internet-of-things-cloud). + +## {% linkable_title Configuration %} + +To use this component, you first need to register a gateway device type and then +a gateway device in your IoT platform instance. For instructions on how to do +this check the [official documentation](https://console.bluemix.net/docs/services/IoT/gateways/dashboard.html#IoT_connectGateway) +which provides the details on doing this. After you register the gateway device +for your home-assistant you'll need 4 pieces of information: + - Organization ID + - Gateway device Type + - Gateway device ID + - Authentication Token + +With this basic information you can configure the component: + +```yaml +# Example configuration.yaml entry: +watson_iot: + organization: 'organization_id' + type: 'device_type' + id: 'device_id' + token: 'auth_token' +``` + +{% configuration %} +organization: + description: The Organization ID for your Watson IoT Platform instance + required: true + type: string +type: + description: The device type for the gateway device to use + required: true + type: string +id: + description: The device id for the gateway device to use + required: true + type: string +token: + description: The authentication token for the gateway device + required: true + type: string +exclude: + description: Configure which components should be excluded from recording to Watson IoT Platform. + required: false + type: map + keys: + entities: + description: The list of entity ids to be excluded from recording to Watson IoT Platform. + required: false + type: list + domains: + description: The list of domains to be excluded from recording to Watson IoT Platform. + required: false + type: list +include: + description: Configure which components should be included in recordings to Watson IoT Platform. If set, all other entities will not be recorded to Watson IoT Platform. Values set by the **blacklist** option will prevail. + required: false + type: map + keys: + entities: + description: The list of entity ids to be included from recordings to Watson IoT Platform. + required: false + type: list + domains: + description: The list of domains to be included from recordings to Watson IoT Platform. + required: false + type: list +{% endconfiguration %} + + +## {% linkable_title Examples %} + +### {% linkable_title Full configuration %} + +```yaml +watson_iot: + + exclude: + entities: + - entity.id1 + - entity.id2 + domains: + - automation + include: + entities: + - entity.id3 + - entity.id4 +``` diff --git a/source/images/supported_brands/ibm.png b/source/images/supported_brands/ibm.png new file mode 100644 index 0000000000000000000000000000000000000000..6aee8b979344e19a0207c29109a7fb75ac27dee7 GIT binary patch literal 2014 zcmYjR3piAH8=qS)Ba=&VoiSrjwulYkqsBGkGK)-$T!yIiU}nxpB%eJ`61mj4)XIu( zn@vmBtz61nP#-qA@vR6R1V;n{1xt|x05}2^N(vHkLaU6E0*T06kpWK(NVcD7LnJ_O z0a!p}x31?xGFL$22q{1ssf&n+2ZR;~fwKtPx)z1gLW&k6q7Y){pFju!rWL4z01Pr| zaGb;yA^su6`Tutz1Lz#>M!|?rVr<(#YzVVJ1~!a)4C*9c4+8c8X1zzQz%Wh(JOB)d z4SXW%)Z^_41AE=ox*r+gPIwTU1y0s)H*ABZfF<3SmjAg0=E1-zNY_FVLN3DtHsHUN zi1Z7JfTtB4)I8pZOaLh&0oe8&?M9yRz*0nDlKQbiGQ6=MfJexYE&%7cTc85kiAR71%X8np}#k~J_HoAVq=)Hfg|G;N~Kb7Jnv`l>NFqsV;n?z{J!#Ts6OXg z-S>*Wp6>mg6tMNv=X(b+vCo+3RjvPYS#ymqD|e@j+wOY#F*;*k^DRbt>36LD+jE+# zZ;=hfQd9(qkaVL61ez4gsmjoMDPzEa?P|?z z`__LNX1(* z){hpSVkl=+oD@_&8jSM}x3DxOIQNo2M#o|AJ`i{H;7{EMt`3U1?8^w*o^;PQ3tMYm z{=#P5L&8qn&-wupxLerFFTazY3ysp@A4-dtZ`9}8DOo0rB8u5!^F}P*Us5 z+1t&Dd(7&7>gm7AV^oy|V4s@1mpE28W!}@si8C%|E>MY|7j4Hs$I=S=D{?0kSKy2A zuhx;tl4}xN%CHA*^hxa5`}*9BEAYOr9n?zU3vS97UOCf~I-z(UeF;OL#BCbcVl!9k zb~SupI_LD@>sk`Fym#nNo4$?|2Qe55a23IxR6MlXa>;0JA;Zvo!ViQ9&^&4R_ZB)sgcnO~6e=ksruuo%-b>H}R zPm_kkRtuL>s^%M~cv!qjpfrF(f%J4CA3!j!8rdCLLakA|~D3 zw7ETDy!Tu6rch^2Rl-%7ukZkO>df+)nj`LS6K2xiLSkP6{SJNb-Cn-oZuJ_BS;cl& zj_3irbP1xhcxRn&)Z)LiAgq|(o*B-^@3^~Ei+MQY=)oXs_*h@8!CcQMEIDpTUM`kP zDf2hH-h>`|6|g_6Fv&?MUu3-7KOK?8QSHl;uZVu3>@Tfl4@eF-mf-`p?`HHntW=NrPhyo@xR!gG(yQ#ARrqq0MKtoBubFm7y z&76ETQ$0q>S>W3bm!I2%PJ-K51n*IT)yJ8B!RMa*B`mY=hKP^~*MN(mF2 zM4Eh%PV9-)es9I1T>b<9)^2m^`4@B@EI))xwYY%Y=@pfg&pOmL8w+%_8r7n1a!EZ@wblp%d`hn}H z64DzvhCvZrboC}@;)KB6+w?Skg=oZVCUR##&{*ibQrZ$Vn6Prtbt_t~t;a?Aot&QD z$YD90j>LX&A<>fcVMN@H!Vp%v2JUjr#yP90VcfL~9w?!FTbbuPZcT~mn6YGBP~Qjs OwkWzQ!==iJb^5=@n1g`; literal 0 HcmV?d00001 From 46a1b6db4ef6307ef0be43d851994aac8386946c Mon Sep 17 00:00:00 2001 From: Philip Rosenberg-Watt Date: Thu, 21 Jun 2018 15:21:25 -0400 Subject: [PATCH 12/32] Update documentation for MQTT climate device (#5455) Now optionally supports `min_temp` and `max_temp`. --- source/_components/climate.mqtt.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_components/climate.mqtt.markdown b/source/_components/climate.mqtt.markdown index 958974869ac..c9179e230b9 100644 --- a/source/_components/climate.mqtt.markdown +++ b/source/_components/climate.mqtt.markdown @@ -174,6 +174,14 @@ aux_state_template: description: A template to render the value received on the `aux_state_topic` with. required: false type: template +min_temp: + description: Minimum set point available + type: number + required: false +max_temp: + description: Maximum set point available + type: number + required: false {% endconfiguration %} #### {% linkable_title Optimistic mode %} From 45adcc81b87e20855f3b4c1e8975f48fd22fca35 Mon Sep 17 00:00:00 2001 From: Dale Higgs Date: Thu, 21 Jun 2018 14:22:17 -0500 Subject: [PATCH 13/32] Add set_default_level documentation (#5460) * Add set_default_level documentation * :pencil2: Tweaks * More logger changes --- source/_components/logger.markdown | 57 ++++++++++++++++++++++++------ 1 file changed, 47 insertions(+), 10 deletions(-) diff --git a/source/_components/logger.markdown b/source/_components/logger.markdown index 2f89e090967..d3cef23a013 100644 --- a/source/_components/logger.markdown +++ b/source/_components/logger.markdown @@ -11,15 +11,16 @@ logo: home-assistant.png ha_category: "Utility" --- -The logger component lets you define the level of logging activities in Home Assistant. +The `logger` component lets you define the level of logging activities in Home Assistant. -To enable the logger in your installation, add the following to your `configuration.yaml` file: +To enable the `logger` component in your installation, add the following to your `configuration.yaml` file: -To have a full log and log everything only this entry is needed (without any qualifier): ```yaml +# Example configuration.yaml entry logger: ``` -To log all messages and ignore events lower than critical for specified components. + +To log all messages and ignore events lower than critical for specified components: ```yaml # Example configuration.yaml entry @@ -30,7 +31,7 @@ logger: homeassistant.components.camera: critical ``` -To ignore all messages lower than critical and log event for specified components. +To ignore all messages lower than critical and log event for specified components: ```yaml # Example configuration.yaml entry @@ -43,7 +44,25 @@ logger: homeassistant.components.camera: critical ``` -Possible log severities are: +{% configuration %} + default: + description: Default log level. + required: false + type: '[log_level](#log-levels)' + default: debug + logs: + description: List of components and their log level. + required: false + type: map + keys: + '<component_namespace>': + description: Logger namespace of the component. + type: '[log_level](#log-levels)' +{% endconfiguration %} + +### {% linkable_title Log Levels %} + +Possible log severity levels are: - critical - fatal @@ -53,11 +72,26 @@ Possible log severities are: - info - debug - notset - + +## {% linkable_title Services %} + +### {% linkable_title Service `set_default_level` %} + +You can alter the default log level (for components without a specified log +level) using the service `logger.set_default_level`. + +An example call might look like this: + +```yaml +service: logger.set_default_level +data: + level: info +``` + ### {% linkable_title Service `set_level` %} You can alter log level for one or several components using the service -``logger.set_level``. It accepts the same format as ``logs`` in the configuration. +`logger.set_level`. It accepts the same format as `logs` in the configuration. An example call might look like this: @@ -68,7 +102,9 @@ 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`. +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: @@ -76,7 +112,8 @@ If you are a Hassbian user you can use the example below: $ 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: +If you are a Hass.io user, you can use the example below, when logged in through +the [SSH add-on](/addons/ssh/): ```bash $ tail -f /config/home-assistant.log From 00c8d0df6ae02d87be408d08f6a6f804278c8b29 Mon Sep 17 00:00:00 2001 From: Christoph Gerneth Date: Thu, 21 Jun 2018 21:22:39 +0200 Subject: [PATCH 14/32] Add documentation for KIWI.KI smartlock (#5381) * added documentation for KIWI.KI smartlock * updated code review * removed unused line * bump ha_release to 0.72 --- source/_components/lock.kiwi.markdown | 39 ++++++++++++++++++++++++ source/images/supported_brands/kiwi.png | Bin 0 -> 34648 bytes 2 files changed, 39 insertions(+) create mode 100644 source/_components/lock.kiwi.markdown create mode 100644 source/images/supported_brands/kiwi.png diff --git a/source/_components/lock.kiwi.markdown b/source/_components/lock.kiwi.markdown new file mode 100644 index 00000000000..08c3e9746b5 --- /dev/null +++ b/source/_components/lock.kiwi.markdown @@ -0,0 +1,39 @@ +--- +layout: page +title: "KIWI Lock" +description: "Instructions on how to integrate KIWI Smart Lock and Smart Entry." +date: 2018-05-16 13:37 +sidebar: true +comments: false +sharing: true +footer: true +logo: kiwi.png +ha_category: Lock +featured: false +ha_release: 0.72 +ha_iot_class: "Cloud Polling" +--- + +The `KIWI` platform allows you to open your KIWI Smart Locks and Smart Entry Devices. +All you need to get started is a KIWI account. Register at [the KIWI website](https://kiwi.ki/login/). + +## {% linkable_title Configuration %} + +```yaml +# Example configuration.yaml entry +lock: + - platform: kiwi + username: mail@example.com + password: mySecretPassword +``` + +{% configuration %} +username: + required: true + description: The username of your KIWI account. + type: string +password: + required: true + description: The password of your KIWI account. + type: string +{% endconfiguration %} diff --git a/source/images/supported_brands/kiwi.png b/source/images/supported_brands/kiwi.png new file mode 100644 index 0000000000000000000000000000000000000000..f012d3c9ca13a9f939322c2bfcfa66c11cc47fc4 GIT binary patch literal 34648 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 NoV2o3t%Om~{{pQNkWByp literal 0 HcmV?d00001 From 1277d4a4efa0eed55ce4315773844aab80111240 Mon Sep 17 00:00:00 2001 From: "ruohan.chen" Date: Fri, 22 Jun 2018 03:22:50 +0800 Subject: [PATCH 15/32] add zhong_hong components (#5402) * add zhong_hong components * config variable name change * Update version --- .../_components/climate.zhong_hong.markdown | 45 ++++++++++++++++++ source/images/supported_brands/zhong_hong.png | Bin 0 -> 3496 bytes 2 files changed, 45 insertions(+) create mode 100644 source/_components/climate.zhong_hong.markdown create mode 100644 source/images/supported_brands/zhong_hong.png diff --git a/source/_components/climate.zhong_hong.markdown b/source/_components/climate.zhong_hong.markdown new file mode 100644 index 00000000000..da1eeb6428a --- /dev/null +++ b/source/_components/climate.zhong_hong.markdown @@ -0,0 +1,45 @@ +--- +layout: page +title: "ZhongHong Thermostats Controller" +description: "Instructions on how to integrate ZhongHong Support thermostats within Home Assistant." +date: 2018-06-20 08:30 +sidebar: true +comments: false +sharing: true +footer: true +logo: zhong_hong.png +ha_category: Climate +ha_release: "0.72" +ha_iot_class: "Local Push" +--- + + +The `zhong_hong` climate platform lets you control [Zhonghong HVAC Gateway Controller](http://zhonghongtech.cn/v1/product.shtml/) thermostats through Home Assistant. + +To set it up, add the following information to your configuration.yaml file: + +```yaml +climate: + - platform: zhong_hong + host: GATEWAY_IP +``` + +{% configuration %} +host: + description: The IP address of your controller. + required: true + type: string +port: + description: The port of your controller. + required: false + default: 9999 + type: int +gateway_address: + description: The gateway address for the gateway (Settings in the controller itself). + required: false + default: 1 + type: int + +{% endconfiguration %} + +When Gateway is found, All HVAC devices will be configured automatically. diff --git a/source/images/supported_brands/zhong_hong.png b/source/images/supported_brands/zhong_hong.png new file mode 100644 index 0000000000000000000000000000000000000000..f1a4d1bb99f46f591dd049db1024a8e50023ebda GIT binary patch literal 3496 zcmai1_d6S27e~z)ty-aWZ90sSP+D7}QVk-dw54{9gxZ_hBUPk!iBYvnX^EnQB1Nd` zkcyF7L9N>L=KB}CKb(7>bD#U%bDncP_jArowuG5-14IA}3=G^5Gb1=%$I``+ot3^? zwvlOc#pn+=HDIV85nZMm%x?M?`V0(BnViQDS?D&0pV?i11_qwK|Aa9|ndbuiCS8b; zzICwUT47MFfH8j}8>UQB5-)E7y{RZ|!ESal)L<$;$y%S0QTAA>R0e3I!7qC*We299 zq`<2Pb>E1I7U6GXgf@?*LZ7pti)P-tg@o-DUkciDEa^MRdR~-Q^j#-tk4DVPQ!h|1 zyCZcPhTc|Ph=RRhmooZ4(ia8eMN@~U5D^XcZdv&7$ETcxnLXt|E-`IuqHoTJh$D3J zLRQP$gdAnt*FW2Qtz1qpIzc|Wdoxir#kyhW6!p*f*Q^@wTPf{mDxgXRhCt+o9&ZlV z(6_;|#kTh&Y|<}iWjOaJAZlN<`^_>9IBkZ`z*{w#jm=o!eIYAMRNY>TlC)}Y)NLx1 zAPo)Mrn?;PZ#qTR?5s?tn#+`wD}3Btog$>naBof8-rwwE@2_|0=vyst`Gk=w)Dcu{ zkkRt}wQzn=UeTe~tt6sSM9YV$8YXhhvs}rxzII1qF8lG;;%LK%{W;Fv&ssBnDe4X# zfi?$QRNVR}XbcmJwTVf>;pTt@m>?c-iG@>e;YF0|XmOom=(23apo(3KneOTFwrHxF z*H@L@t>G*F#NxoUAJz1b{8d;m+RR2X@u0Pwg+z%+%6YZUusy+H$ehVQh8O{jfUqW> zmB?7qbHsnR8@N6_DEsEw76g5`<8k?!NS2!CpRM0900AXGGm{ww9u~LLez2LW^YoAaXR#b>7CvzWB0`q!``ZPBdFGD`4E`P;?ihxXJZ5^kq)v`D8)Jeb0G znb-KIp(xsQbB-ViRh?F2X2PQQyf69tJ2nBR2yri8)MJx-YFCiMU)cOEu&y`Y-$ix3|HFqE1=H`Ojiu= z0#lQ>Xw9SOPr_VUrm8)zZJev0xI=99Z$XWs^rvBC$VctRE_ zJ#j0ao?R4eX0uvf``NaLT;Zr?cRX^|y3n)w1dmDca%c}oHv9`TnI@zPc~g%MwpaSo zFJzy^|M|!%itew!cC)k5QR+mH`R^w>D8NBXenPVa;<}+pCj~asW6q&Xg*MP!l|flr zkEMl@mmt{y<&!shTrNj5gL85^E$r@YmLfR9! zi9!Cy*14~p;U~LOq5z(R=g zQ~cuFbz(Aqx-CauY}E#9owtDf3}kDD2t1cfjWUI ziF4mOg03Xes*z37iRUk3q=O@(2MdRucx7~c9rWhuNv9W~=6>YCQ)jhHb}cWZen&H& z0TJ>dPYzLL{i(XYjlst6T>cPrHt-iUEf6UGf9{j7bC9s}TKO6t(z(r0OFF()9H&&K z>K$3E@`nYcAd!G@cd3BM>#v(c%Aj&WN+rbLjk%qK(j>|FnWO<+bDnW zqM?eHK-YdNFIN@mXrpVUjb9ONL=KvX2oSr{ttb!}8*oX!$M*sHm0=igo=_pE#G(NE2(T=1e=C&{Ac z3v@EL_feSEg&8WK4$7A-Oea5|zi$&)H8Ngd4*q=$h7j;=|0&YF+R#;Rk|}P112n7x zUceHRyB2cK`teLm!1yd!PmcC%{eKf@k+C;<(dVx?I~$_USL-2E|Ey%^KmLvnQJ<1T zq3`jQ-;jZj%8cLlb=}_n{h6ShN5DUUX_t8BT@O(^ZNGuWdqvNi{KAKT<>Hj2Z>t5$ z959YlUj?nng;NF}?IL2&aNyJ69PND5e6)Q4be}qTPWr9V1@zQ8B?ETeS6SHZId~Veok(J}^^Er_%1Nr*Q~TQsV3PlF$`JShCBH7LS(WlvSrK z7fN?bxLhugcx$p8!k0maCI3JIu#eN|%$3DPqEoH@uFucbI?stp?h>08eU=c)9hF^z z*Vo$8nVjqSH})xKe&lew!GpOw_vcbyTUW!wH4C^eXpZ@~aXikB*{)fb*qpe1qgvKH z7jvJThCSR}o$%dfN}*usi8I~V&sRa*;_6v7%`6>EnbgYgH+*lV7xQTM@mp3Y)ZI(&NuF=xi1PekH48BS$a*!r&nIQFwz+$$SK}(&>vTA zRn=dS*YlpvWd16EamjvYxiAemj^oQPmcDU%tWJGv@81oRQTKVGIuopG_flhfBd>>c zzc+y!ENI+jVC_n8(S=!`>GR0NhR(kt17(sM-Er9|icEiK*?94YuW8B9v(o&J-+IBUOm7MB!wfMU&^18znVJ`@mJC&g`?A&jP7{?DlW$yx-BF*oXz{hR zDiyv=yCH{i7}Lv#nyaiobi@9Rk?Kd8mj+@Yam(!I`V&a<#lg}(__IfZd-6nwU~;@? zG(idXD*-66rAE8Ru*h4rOf`54AdzUj!D~ORP2xlRcj*M7Om^x69Y6Tj7al>j3oZTt zi!WDX(n~!PS8JLnUYNzrr5n7nr1xCU){Pyp^uRJNri`J=W{^!H9Fq|YWPOpz))BOU zXdg|#!>Uk*Qdb2tL$Q}FOdE)WV5`q1H%eC09n3fdRV=M4Z_PG0UEdiqq)!{P4R>06 zEcX0Y00ql2FLINYXtMIX*^RHhL;jr$d;F$8ht5uc2izRxfnInl zTgZ;ZZ1$@j7n7Mxl>hJw7twDcL3P!72mStPup7I@aWDT5$x*AjGvz20Pci?6?}YA`a9;${*a2JRC7Oq%h%^+;gCQ7s)TBS4^?6dxO962xZk`#zz z?KM+V_oH+tiBI^eh%ZddyJZ+Rd7%Q@&ILty4_JyEi`4;302?gd2@_ zdx+1{xmsZK$!u8|o{ z$`U?7zz=gT*@I*a>eqrFzP739SNty7K-S`?KWXtiRcF?LGWVZJL)Z7F{Z&V_O|Z$n zdUDX0dBz~mZWgX)^t-f8UB-Yj-$vcvq37fH&ehHGYsGz6rEz3y#&iS2kJj2Ykc;lW z2hxQ3CajqPIPHW7zh!l|2{kTH+VN1f+xN}bMtT(DR&}`?owFHJ#rvf`#5@+`W<0@U zuVV?qhVNQuPfNW%zExFLTKn>mz04eY`Oz2Xl9X(^T Date: Fri, 22 Jun 2018 00:52:58 +0530 Subject: [PATCH 16/32] Added Documentation for Xiaomi Cameras (#5290) * Added Documentation for Xiaofang Camera * Added documentation for both yi and xiaofang * Update date --- source/_components/camera.xiaofang.markdown | 86 +++++++++++++++++++++ 1 file changed, 86 insertions(+) create mode 100644 source/_components/camera.xiaofang.markdown diff --git a/source/_components/camera.xiaofang.markdown b/source/_components/camera.xiaofang.markdown new file mode 100644 index 00000000000..2285e405a41 --- /dev/null +++ b/source/_components/camera.xiaofang.markdown @@ -0,0 +1,86 @@ +--- +layout: page +title: "Xiaomi Cameras" +description: "Instructions on how to integrate a video feed (via FFmpeg) as a camera within Home Assistant." +date: 2018-06-20 13:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: xiaomi.png +ha_category: Camera +ha_release: 0.72 +ha_iot_class: "Local Polling" +--- + +The `Xiaomi` camera platform allows you to utilize Xiaomi Cameras within Home Assistant. + +To successfully implement this platform, the Home Assistant host should be capable of multiple simultaneous reads. For every concurrent Home Assistant user, a connection will be made to the camera every 10 seconds. This should normally not be a problem. + +## {% linkable_title Preparing the Device %} + +### {% linkable_title Installing Alternative Firmware %} + +In order to integrate the camera with Home Assistant, it is necessary to install a custom firmware on the device. Instructions for doing so can be found for each models. + +* [Yi 720p](https://github.com/fritz-smh/yi-hack) +* [Yi Home 17CN / 27US / 47US / 1080p Home / Dome / 1080p Dome](https://github.com/shadow-1/yi-hack-v3) +* [Xiaofang 1080p Camera](https://github.com/samtap/fang-hacks) + +Once installed, please ensure that you have enabled FTP. + +

+Currently, version 0.1.4-beta2 of the custom firmware is the highest supported. Firmwares higher than this version use [Pure-FTPd](https://www.pureftpd.org/project/pure-ftpd), which has a bug that prevents FFmpeg from correctly rendering video files. +

+ +

+Hassbian users: don't forget to install ffmpeg support on your platform, otherwise, you'll not see video. +

+ +

+The live stream writing by the camera is not an supported format when the hass reads through FTP for Yi 720p and Xiaofang Cameras, so this component retrives the video which was saved 1 minute earlier. +

+ +

+If you enabled RTSP server, you can connect to your camera via other Home Assistant camera platforms. However, this RTSP server disables the ability to use the supremely-useful Mi Home app. In order to maintain both Home Assistant compatibility _and_ the native app, this platform retrieves videos via FTP. +

+ +## {% linkable_title Configuring the Platform %} + +To enable the platform, add the following lines to your`configuration.yaml` file: + +```yaml +camera: + - platform: xiaomi + name: Camera + host: '192.168.1.100' + model: 'yi' + password: my_password_123 +``` + +Configuration variables: + +- **name** (*Required*): A human-friendly name for the camera. +- **host** (*Required*): The IP address or hostname of the camera. +- **model** (*Required*): The model of Xiaomi Camera, currently supporting yi and xiaofang. +- **password** (*Required*): The password to the FTP server on the camera (from above), can be any string as the current firmware doesn't allow setting ftp passwords. +- **path** (*Optional*): The path to the raw MP4 files. Defaults to `/tmp/sd/record`. +- **username** (*Optional*): The user that can access the FTP server. Defaults to `root`. +- **ffmpeg_arguments** (*Optional*): Extra options to pass to `ffmpeg` (e.g., image quality or video filter options). + +## {% linkable_title Image quality %} + +Any option supported by [`ffmpeg` camera](/components/camera.ffmpeg/) can be utilized via the `ffmpeg_arguments` configuration parameter. + +One particularly useful adjustment deals with video size. Since Yi videos are fairly large (especially on the 1080p cameras), the following configuration will bring them down to a manageable size: + +```yaml +camera: + - platform: xiaomi + name: My Camera + host: '192.168.1.100' + model: 'xiaofang' + password: my_password_123 + path: /home/camera/feed + ffmpeg_arguments: '-vf scale=800:450' +``` From b33e1976beb530f69db6a925bc0f8a8990f201f5 Mon Sep 17 00:00:00 2001 From: Adam Mills Date: Mon, 25 Jun 2018 09:45:50 -0400 Subject: [PATCH 17/32] Updated docs for Homekit controller climate (#5575) --- .../climate.homekit_controller.markdown | 16 ++++++++++++++++ source/_components/homekit_controller.markdown | 1 + 2 files changed, 17 insertions(+) create mode 100644 source/_components/climate.homekit_controller.markdown diff --git a/source/_components/climate.homekit_controller.markdown b/source/_components/climate.homekit_controller.markdown new file mode 100644 index 00000000000..8e0414cf551 --- /dev/null +++ b/source/_components/climate.homekit_controller.markdown @@ -0,0 +1,16 @@ +--- +layout: page +title: "HomeKit Climate" +description: "Instructions how to setup HomeKit thermostats within Home Assistant." +date: 2018-06-19 20:00 +sidebar: true +comments: false +sharing: true +footer: true +logo: apple-homekit.png +ha_category: Climate +ha_iot_class: "Local Polling" +ha_release: 0.73 +--- + +To get your HomeKit thermostats and air conditioners working with Home Assistant, follow the instructions for the general [HomeKit controller component](/components/homekit_controller/). diff --git a/source/_components/homekit_controller.markdown b/source/_components/homekit_controller.markdown index 910c07e0360..daa9e79b71e 100644 --- a/source/_components/homekit_controller.markdown +++ b/source/_components/homekit_controller.markdown @@ -22,6 +22,7 @@ ha_iot_class: "Local Polling" There is currently support for the following device types within Home Assistant: +- [Climate](/components/climate.homekit_controller/) - [Light](/components/light.homekit_controller/) - [Switch](/components/switch.homekit_controller/) From b75af5693f7feb1e0d12d983967d299db6b0209a Mon Sep 17 00:00:00 2001 From: Jason Hu Date: Mon, 25 Jun 2018 10:52:07 -0700 Subject: [PATCH 18/32] Update sensor.nest.markdown (#5588) --- source/_components/sensor.nest.markdown | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/source/_components/sensor.nest.markdown b/source/_components/sensor.nest.markdown index a0db2789118..dc48bd32ff0 100644 --- a/source/_components/sensor.nest.markdown +++ b/source/_components/sensor.nest.markdown @@ -42,7 +42,7 @@ The following conditions are available by device: - Nest Home: - eta: Estimated time of arrival. - - security\_state: `ok` or `deter`. [Security State](#security-state) + - security\_state: `ok` or `deter`. [Security State](#security-state). Only available when Nest Camera exists. - Nest Thermostat: - humidity - operation\_mode From 00b75c6cae7aab129162d15d0de31b2c73ca7fab Mon Sep 17 00:00:00 2001 From: hanzoh Date: Tue, 26 Jun 2018 06:17:15 +0200 Subject: [PATCH 19/32] Add JSON port to Homematic interface configuration (#5581) --- source/_components/homematic.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/homematic.markdown b/source/_components/homematic.markdown index da2efb78fc6..8d51ce86304 100644 --- a/source/_components/homematic.markdown +++ b/source/_components/homematic.markdown @@ -46,6 +46,7 @@ Configuration variables (interface): - **callback_ip** (*Optional*): Set this, if Home Assistant is reachable under a different IP from the CCU (NAT, Docker etc.). - **callback_port** (*Optional*): Set this, if Home Assistant is reachable under a different port from the CCU (NAT, Docker etc.). - **resolvenames** (*Optional*): [`metadata`, `json`, `xml`] Try to fetch device names. Defaults to `false` if not specified. +- **jsonport** (*Optional*): Port of CCU JSON-RPC Server. The default is 80, but it may be different when running CCU virtually via Docker. - **username** (*Optional*): When fetching names via JSON-RPC, you need to specify a user with guest-access to the CCU. - **password** (*Optional*): When fetching names via JSON-RPC, you need to specify the password of the user you have configured above. - **path** (*Optional*): Set to `/groups` when using port 9292. From f92512d8af16f3911bbeca5905676346d6c81b2e Mon Sep 17 00:00:00 2001 From: Matt LeBrun Date: Tue, 26 Jun 2018 10:58:31 -0400 Subject: [PATCH 20/32] Update media_player.samsungtv.markdown (#5362) Display how to change channels (or at least simulate numeric keypresses) as well as remove reference to old issue. --- source/_components/media_player.samsungtv.markdown | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/source/_components/media_player.samsungtv.markdown b/source/_components/media_player.samsungtv.markdown index be74c408387..42cde99e19c 100644 --- a/source/_components/media_player.samsungtv.markdown +++ b/source/_components/media_player.samsungtv.markdown @@ -84,6 +84,14 @@ If your model is not on the list then give it a test, if everything works correc The first letter (U, P, L, H & K) represent the screen type, e.g., LED or Plasma. The second letter represents the region, E is Europe, N is North America and A is Asia & Australia. The two numbers following that represent the screen size. If you add your model remember to remove these before adding them to the list. -Currently the ability to select a source is not implemented. +Changing channels can be done by calling the `media_player.play_media` service with the following payload: -There's currently a [known issue](https://github.com/home-assistant/home-assistant/issues/2098) with some TVs receiving a *Key press UP* that can interrupt certain applications. This should be fixed as of March 2017. +```javascript +{ + "entity_id": "media_player.office_tv", + "media_content_id": "590", + "media_content_type": "channel" +} +``` + +Currently the ability to select a source is not implemented. From ba6648cdfb232d15cff754c63e36a2d97b8ca753 Mon Sep 17 00:00:00 2001 From: Robert Kiss Date: Tue, 26 Jun 2018 17:44:28 +0200 Subject: [PATCH 21/32] Extend documentation with ssl_peer_certificate option (#5566) Related PR: https://github.com/home-assistant/home-assistant/pull/15043 --- source/_components/http.markdown | 1 + 1 file changed, 1 insertion(+) diff --git a/source/_components/http.markdown b/source/_components/http.markdown index 836999ad01a..4932e7e320e 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -34,6 +34,7 @@ Configuration variables: - **server_port** (*Optional*): Let you set a port to use. Defaults to 8123. - **base_url** (*Optional*): The URL that Home Assistant is available on the internet. For example: `hass-example.duckdns.org:8123`. Defaults to the local IP address. The iOS app finds local installations, if you have an outside URL use this so that you can auto-fill when discovered in the app. - **ssl_certificate** (*Optional*): Path to your TLS/SSL certificate to serve Home Assistant over a secure connection. +- **ssl_peer_certificate** (*Optional*): Path to the client/peer TLS/SSL certificate to accept secure connections from. - **ssl_key** (*Optional*): Path to your TLS/SSL key to serve Home Assistant over a secure connection. - **cors_allowed_origins** (*Optional*): A list of origin domain names to allow [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) requests from. Enabling this will set the `Access-Control-Allow-Origin` header to the Origin header if it is found in the list, and the `Access-Control-Allow-Headers` header to `Origin, Accept, X-Requested-With, Content-type, X-HA-access`. You must provide the exact Origin, i.e. `https://www.home-assistant.io` will allow requests from `https://www.home-assistant.io` but __not__ `http://www.home-assistant.io`. - **use_x_forwarded_for** (*Optional*): Enable parsing of the `X-Forwarded-For` header, passing on the client's correct IP address in proxied setups. You should only enable this in a trustworthy network environment, as clients passing that header could easily spoof their source IP address. Defaults to False. From a49751200d92427d801828a0b196ece518d0b53d Mon Sep 17 00:00:00 2001 From: Matt Snyder Date: Tue, 26 Jun 2018 14:43:43 -0500 Subject: [PATCH 22/32] Add white mode for Flux LED (#5470) * Add white mode for Flux LED * :pencil2: Minor tweaks --- source/_components/light.flux_led.markdown | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/source/_components/light.flux_led.markdown b/source/_components/light.flux_led.markdown index 871ba222e28..d53ebb88a69 100644 --- a/source/_components/light.flux_led.markdown +++ b/source/_components/light.flux_led.markdown @@ -109,6 +109,14 @@ Will add a light with rgb+white mode (default). White and RGB channels can be ad mode: "rgbw" ``` +Will add a light with white mode only. This is useful when only W channel is connected to an RGBW controller and allows the white level to be controlled via brightness value. + +```yaml + 192.168.1.10: + name: NAME + mode: "w" +``` + Some devices such as the Ledenet RGBW controller use a slightly different protocol for communicating the brightness to each color channel. If your device is only turning on or off but not changing color or brightness try adding the LEDENET protocol. ```yaml From 305c6db672e5c59855b35c8d8178e82ed2132d1a Mon Sep 17 00:00:00 2001 From: Colin O'Dell Date: Thu, 28 Jun 2018 16:05:07 -0400 Subject: [PATCH 23/32] Document X-Forwarded-For behavior changes (#5618) * Document X-Forwarded-For behavior changes Documentation for https://github.com/home-assistant/home-assistant/pull/15182 * Update http.markdown * :pencil2: Language tweaks --- source/_components/http.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_components/http.markdown b/source/_components/http.markdown index 4932e7e320e..4afa9506168 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -37,8 +37,8 @@ Configuration variables: - **ssl_peer_certificate** (*Optional*): Path to the client/peer TLS/SSL certificate to accept secure connections from. - **ssl_key** (*Optional*): Path to your TLS/SSL key to serve Home Assistant over a secure connection. - **cors_allowed_origins** (*Optional*): A list of origin domain names to allow [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) requests from. Enabling this will set the `Access-Control-Allow-Origin` header to the Origin header if it is found in the list, and the `Access-Control-Allow-Headers` header to `Origin, Accept, X-Requested-With, Content-type, X-HA-access`. You must provide the exact Origin, i.e. `https://www.home-assistant.io` will allow requests from `https://www.home-assistant.io` but __not__ `http://www.home-assistant.io`. -- **use_x_forwarded_for** (*Optional*): Enable parsing of the `X-Forwarded-For` header, passing on the client's correct IP address in proxied setups. You should only enable this in a trustworthy network environment, as clients passing that header could easily spoof their source IP address. Defaults to False. -- **trusted_networks** (*Optional*): List of trusted networks, consisting of IP addresses or networks, that are allowed to bypass password protection when accessing Home Assistant. It should be noted that if you use a reverse proxy, all requests to Home Assistant, regardless of source, will arrive from the reverse proxy IP address. Therefore in a reverse proxy scenario, this option should be used with extreme care. +- **use_x_forwarded_for** (*Optional*): Enable parsing of the `X-Forwarded-For` header, passing on the client's correct IP address in proxied setups. You must also whitelist trusted proxies using the `trusted_networks` setting below for this to work. Non-whitelisted requests with this header will be considered IP spoofing attacks, and the header will, therefore, be ignored. Defaults to False. +- **trusted_networks** (*Optional*): List of trusted networks, consisting of IP addresses or networks, that are allowed to bypass password protection when accessing Home Assistant. If using a reverse proxy with the `use_x_forwarded_for` option enabled, this should include the IP address/range of your proxy. This is required because all requests to Home Assistant, regardless of source, will arrive from the reverse proxy IP address. Therefore in a reverse proxy scenario, this option should be set with extreme care. - **ip_ban_enabled** (*Optional*): Flag indicating whether additional IP filtering is enabled. Defaults to False. - **login_attempts_threshold** (*Optional*): Number of failed login attempt from single IP after which it will be automatically banned if `ip_ban_enabled` is True. Defaults to -1, meaning that no new automatic bans will be added. From b3182334d5a909ec7660b8adbded560ead17e0ce Mon Sep 17 00:00:00 2001 From: Alex Barcelo Date: Thu, 28 Jun 2018 22:07:40 +0200 Subject: [PATCH 24/32] Add information for the namespace option (#5152) * Add information for the namespace option This changes includes the information required about the new configuration parameter introduced in home-assistant/home-assistant#13738 * Nesting include/exclude into filter directive * :pencil2: Language tweaks * Reflecting the optionality of namespace setting --- source/_components/prometheus.markdown | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/source/_components/prometheus.markdown b/source/_components/prometheus.markdown index ba6d65ba6c4..d7bdeeb3aa2 100644 --- a/source/_components/prometheus.markdown +++ b/source/_components/prometheus.markdown @@ -23,12 +23,14 @@ prometheus: Configuration variables: -- **exclude** (*Optional*): Configure which components should be excluded from recording. - - **entities** (*Optional*): The list of entity ids to be excluded from recording. - - **domains** (*Optional*): The list of domains to be excluded from recording. -- **include** (*Optional*): Configure which components should be included in recordings. If set, all other entities will not be recorded. Values set by the **blacklist** option will prevail. - - **entities** (*Optional*): The list of entity ids to be included from recordings. - - **domains** (*Optional*): The list of domains to be included from recordings. +- **namespace** (*Optional*): The "namespace" that will be assigned to all the Prometheus metrics. This is the prefix of the metric name. E.g., having `myhass` as the namespace will cause the device tracker metrics to be `myhass_device_tracker_state`, the switch metrics to be `myhass_switch_state` and so on. The default is to not add any prefix to the metrics name. +- **filter** (*Optional*): Filtering directives for the components which should be included or excluded from recording. + - **exclude** (*Optional*): Excluded from recording. + - **entities** (*Optional*): The list of entity ids to be excluded from recording. + - **domains** (*Optional*): The list of domains to be excluded from recording. + - **include** (*Optional*): Included in recordings. If set, all other entities will not be recorded. Values set by the **exclude** option will prevail. + - **entities** (*Optional*): The list of entity ids to be included from recordings. + - **domains** (*Optional*): The list of domains to be included from recordings. You can then configure Prometheus to fetch metrics from Home Assistant by adding to its `scrape_configs` configuration. @@ -43,3 +45,10 @@ You can then configure Prometheus to fetch metrics from Home Assistant by adding static_configs: - targets: ['HOSTNAME:8123'] ``` + +When looking into the metrics on the Prometheus side, there will be: + + - All Home Assistant domains, which can be easily found through the common **namespace** prefix, if defined. + - The [client library](https://github.com/prometheus/client_python) provided metrics, which are a bunch of **process_\*** and also a single pseudo-metric **python_info** which contains (not as value but as labels) information about the Python version of the client, i.e., the Home Assistant Python interpreter. + +Typically, you will only be interested in the first set of metrics. From 41af54a264a1674547ab820b5c452034d826f680 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 29 Jun 2018 18:09:32 -0400 Subject: [PATCH 25/32] Add release blog post --- _config.yml | 8 +- source/_posts/2018-07-06-release-73.markdown | 287 +++++++++++++++++++ 2 files changed, 291 insertions(+), 4 deletions(-) create mode 100644 source/_posts/2018-07-06-release-73.markdown diff --git a/_config.yml b/_config.yml index 7a63002486a..08612e54735 100644 --- a/_config.yml +++ b/_config.yml @@ -139,14 +139,14 @@ social: # Home Assistant release details current_major_version: 0 -current_minor_version: 72 -current_patch_version: 1 -date_released: 2018-06-25 +current_minor_version: 73 +current_patch_version: 0 +date_released: 2018-07-06 # 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: "#release-0721---june-25" +patch_version_notes: "#" # Minor release (Example #release-0431---april-25): # Date we moved to Discourse for comments diff --git a/source/_posts/2018-07-06-release-73.markdown b/source/_posts/2018-07-06-release-73.markdown new file mode 100644 index 00000000000..0161aea2fd4 --- /dev/null +++ b/source/_posts/2018-07-06-release-73.markdown @@ -0,0 +1,287 @@ +--- +layout: post +title: "0.73: TBD - update date" +description: "TBD" +date: 2018-06-29 00:01:00 +date_formatted: "July 6, 2018" +author: Paulus Schoutsen +author_twitter: balloob +comments: true +categories: Release-Notes +og_image: /images/blog/2018-07-0.73/components.png +--- + + + +Lots of Lovelace changes. + +## {% linkable_title New Platforms %} + +- Support for Homekit Controller climate devices ([@armills] - [#15057]) ([homekit_controller docs]) ([climate.homekit_controller docs]) ([light.homekit_controller docs]) ([switch.homekit_controller docs]) (new-platform) + +## {% linkable_title If you need help... %} + +...don't hesitate to use our very active [forums](https://community.home-assistant.io/) or join us for a little [chat](https://discord.gg/c5DvZ4e). The release notes have comments enabled but it's preferred if you use the former communication channels. Thanks. + +## {% linkable_title Reporting Issues %} + +Experiencing issues introduced by this release? Please report them in our [issue tracker](https://github.com/home-assistant/home-assistant/issues). Make sure to fill in all fields of the issue template. + + +## {% linkable_title Breaking Changes %} + +- Update to hole to 0.3.0 ([@fabaff] - [#15014]) ([sensor.pi_hole docs]) (breaking change) +- Update PostNL unit of measure to align with UPS ([@keesschollaart81] - [#15023]) ([sensor.postnl docs]) (breaking change) +- Make Pollen.com platform async ([@bachya] - [#14963]) ([sensor.pollen docs]) (breaking change) +- Adding 'namespace' for prometheus metrics ([@alexbarcelo] - [#13738]) ([prometheus docs]) (breaking change) +- Fix zwave climate operation mode mappings ([@cdce8p] - [#15162]) ([climate.zwave docs]) (breaking change) +- X-Forwarded-For improvements and bug fixes ([@colinodell] - [#15204]) ([emulated_hue docs]) ([http docs]) (breaking change) +- Stop supporting deprecated TLS ciphers ([@hmmbob] - [#15217]) ([http docs]) (breaking change) + +## {% linkable_title All changes %} + +- Add entity support to Waze Travel Time ([@Petro31] - [#14934]) ([sensor.waze_travel_time docs]) +- Switch to own packaged version of anel_pwrctrl ([@andrey-git] - [#15011]) ([switch.anel_pwrctrl docs]) +- Switch to own packaged version of braviarc ([@andrey-git] - [#15009]) ([media_player.braviatv docs]) +- HomeKit style clean up ([@schmittx] - [#14793]) ([homekit docs]) +- Upgrade netdisco to 1.5.0 ([@fabaff] - [#15016]) +- Update to hole to 0.3.0 ([@fabaff] - [#15014]) ([sensor.pi_hole docs]) (breaking change) +- Upgrade numpy to 1.14.5 ([@fabaff] - [#15015]) ([binary_sensor.trend docs]) ([image_processing.opencv docs]) +- Upgrade youtube_dl to 2018.06.14 ([@fabaff] - [#15013]) ([media_extractor docs]) +- Switch nuimo to a hopefully working pypi version ([@andrey-git] - [#15006]) ([nuimo_controller docs]) +- Remove typing ([@fabaff] - [#15018]) +- Add support for Homekit battery service ([@schmittx] - [#14288]) ([homekit docs]) +- Update PostNL unit of measure to align with UPS ([@keesschollaart81] - [#15023]) ([sensor.postnl docs]) (breaking change) +- Expose Wemo component availability to home assistant ([@gstorer] - [#14995]) ([light.wemo docs]) +- Improve volume support for Vizio Smartcast ([@JeffLIrion] - [#14981]) ([media_player.vizio docs]) +- Upgrade requests to 2.19.1 ([@fabaff] - [#15019]) +- Show running apps as sources for Fire TV ([@JeffLIrion] - [#15033]) ([media_player.firetv docs]) +- Patch save_json ([@Hate-Usernames] - [#15046]) +- Update loopenergy link to docs ([@fabaff] - [#15050]) ([sensor.loopenergy docs]) +- Switch upstream adafruit package ([@andrey-git] - [#15038]) ([sensor.dht docs]) +- Switch to own packaged version of pyflic ([@andrey-git] - [#15041]) ([binary_sensor.flic docs]) +- Update condition.py ([@raoulteeuwen] - [#15021]) +- Update pywemo to version 0.4.28. ([@gstorer] - [#15052]) ([wemo docs]) +- Upgrade pyarlo to 0.1.8 to support Arlo Baby monitor ([@tchellomello] - [#15060]) ([arlo docs]) +- Upgraded librouteros since it has support for authenticatoin in new RouterOS. ([@dejx] - [#15056]) ([device_tracker docs]) +- Python wink update ([@w1ll1am23] - [#15048]) ([wink docs]) ([cover.wink docs]) +- Fix tplink max/min kelvin for temperature adjustment ([@titilambert] - [#15020]) ([light.tplink docs]) +- Update pyhomematic to 0.1.44 ([@danielperna84] - [#15069]) ([homematic docs]) +- Homematic: Add optional port for resolvenames via JSON ([@hanzoh] - [#15029]) ([homematic docs]) +- Add script to run monkeytype typing on test suite ([@MartinHjelmare] - [#14440]) +- Switch to pypi version of pybotvac ([@andrey-git] - [#15115]) ([neato docs]) +- Added attribute attribution to Digital Ocean component ([@tchellomello] - [#15114]) ([digital_ocean docs]) ([binary_sensor.digital_ocean docs]) ([switch.digital_ocean docs]) +- Make Pollen.com platform async ([@bachya] - [#14963]) ([sensor.pollen docs]) (breaking change) +- deCONZ small improvements ([@Kane610] - [#15128]) ([deconz docs]) ([light.deconz docs]) +- Bump insteonplm version to 0.11.2 ([@teharris1] - [#15133]) ([insteon_plm docs]) +- Reorganize mysensors ([@MartinHjelmare] - [#15123]) +- MQTT Alarm Control Panel: add retain option for publishing for cases... ([@b3nj1] - [#15134]) ([alarm_control_panel.mqtt docs]) +- Add discovery support to mqtt climate component. ([@dreizehnelf] - [#15085]) ([mqtt docs]) ([climate.mqtt docs]) +- Support for Homekit Controller climate devices ([@armills] - [#15057]) ([homekit_controller docs]) ([climate.homekit_controller docs]) ([light.homekit_controller docs]) ([switch.homekit_controller docs]) (new-platform) +- PyPi: Fix description and setup.cfg ([@cdce8p] - [#15107]) +- Add language to dark sky weather component ([@pvizeli] - [#15130]) ([weather.darksky docs]) +- Add storage helper and migrate config entries ([@balloob] - [#15045]) ([sensor.fitbit docs]) +- Fix pylintrc section order and option placements ([@scop] - [#15120]) +- Fix #14919. Should throw exception when camera stream closed by frontend ([@awarecan] - [#15028]) ([camera docs]) ([camera.proxy docs]) +- Revert "Add language to dark sky weather component" ([@pvizeli] - [#15142]) ([weather.darksky docs]) +- Lint cleanup ([@scop] - [#15103]) +- Update aiofreepybox to fix HTTPS connection issues ([@stilllman] - [#15104]) ([device_tracker docs]) +- Fix mysensors climate supported features ([@MartinHjelmare] - [#15110]) ([climate.mysensors docs]) +- Update xiaomi.py ([@vaidyasr] - [#15136]) ([camera.xiaomi docs]) +- Return None to indicate no config found ([@balloob] - [#15147]) +- Add channel changing support to SamsungTV component ([@mlebrun] - [#14451]) ([media_player.samsungtv docs]) +- Add SSL peer certificate support to HTTP server ([@kepten] - [#15043]) ([emulated_hue docs]) ([http docs]) +- Address inconsistent behavior on flux_led component ([@oblogic7] - [#14713]) ([light.flux_led docs]) +- Upgrade youtube_dl to 2018.06.25 ([@fabaff] - [#15168]) ([media_extractor docs]) +- Upgrade keyring to 13.0.0 ([@fabaff] - [#15167]) +- Upgrade sendgrid to 5.4.1 ([@fabaff] - [#15166]) ([notify docs]) +- Add Mini remote support to insteon_plm ([@teharris1] - [#15152]) ([insteon_plm docs]) +- Warn when using custom components ([@balloob] - [#15172]) +- Philips Hue Scene Activation: Simplified scene lookup logic, improved error handling ([@MizterB] - [#15175]) ([hue docs]) +- Finalize BotVac D7 Support And Further Reduce Cloud Calls ([@dshokouhi] - [#15161]) ([neato docs]) ([camera.neato docs]) ([switch.neato docs]) ([vacuum.neato docs]) +- DarkSky weather / Fix states ([@pvizeli] - [#15174]) ([weather.darksky docs]) +- Only use the X-Forwarded-For header if connection is from a trusted network ([@colinodell] - [#15182]) ([http docs]) +- Adding 'namespace' for prometheus metrics ([@alexbarcelo] - [#13738]) ([prometheus docs]) (breaking change) +- Storage auth ([@balloob] - [#15192]) +- Make sure we check access token expiration ([@balloob] - [#15207]) ([frontend docs]) +- Migrate home assistant auth provider to use storage helper ([@balloob] - [#15200]) +- Fix zwave climate operation mode mappings ([@cdce8p] - [#15162]) ([climate.zwave docs]) (breaking change) +- Fixed Indentation error ([@vaidyasr] - [#15210]) ([camera.xiaomi docs]) +- X-Forwarded-For improvements and bug fixes ([@colinodell] - [#15204]) ([emulated_hue docs]) ([http docs]) (breaking change) +- Stop supporting deprecated TLS ciphers ([@hmmbob] - [#15217]) ([http docs]) (breaking change) +- Update eternalegypt ([@amelchio] - [#15180]) ([netgear_lte docs]) ([notify docs]) +- Update python-wink to 1.9.1 ([@vickyg3] - [#15215]) ([wink docs]) +- Fix 'AirQualityMonitorStatus' object has no attribute ‘time_state’ ([@syssi] - [#15216]) ([sensor.xiaomi_miio docs]) +- Use cached states for neato when possible ([@dshokouhi] - [#15218]) ([switch.neato docs]) ([vacuum.neato docs]) + +[#13738]: https://github.com/home-assistant/home-assistant/pull/13738 +[#14288]: https://github.com/home-assistant/home-assistant/pull/14288 +[#14440]: https://github.com/home-assistant/home-assistant/pull/14440 +[#14451]: https://github.com/home-assistant/home-assistant/pull/14451 +[#14713]: https://github.com/home-assistant/home-assistant/pull/14713 +[#14793]: https://github.com/home-assistant/home-assistant/pull/14793 +[#14934]: https://github.com/home-assistant/home-assistant/pull/14934 +[#14963]: https://github.com/home-assistant/home-assistant/pull/14963 +[#14981]: https://github.com/home-assistant/home-assistant/pull/14981 +[#14995]: https://github.com/home-assistant/home-assistant/pull/14995 +[#15006]: https://github.com/home-assistant/home-assistant/pull/15006 +[#15009]: https://github.com/home-assistant/home-assistant/pull/15009 +[#15011]: https://github.com/home-assistant/home-assistant/pull/15011 +[#15013]: https://github.com/home-assistant/home-assistant/pull/15013 +[#15014]: https://github.com/home-assistant/home-assistant/pull/15014 +[#15015]: https://github.com/home-assistant/home-assistant/pull/15015 +[#15016]: https://github.com/home-assistant/home-assistant/pull/15016 +[#15018]: https://github.com/home-assistant/home-assistant/pull/15018 +[#15019]: https://github.com/home-assistant/home-assistant/pull/15019 +[#15020]: https://github.com/home-assistant/home-assistant/pull/15020 +[#15021]: https://github.com/home-assistant/home-assistant/pull/15021 +[#15023]: https://github.com/home-assistant/home-assistant/pull/15023 +[#15028]: https://github.com/home-assistant/home-assistant/pull/15028 +[#15029]: https://github.com/home-assistant/home-assistant/pull/15029 +[#15033]: https://github.com/home-assistant/home-assistant/pull/15033 +[#15038]: https://github.com/home-assistant/home-assistant/pull/15038 +[#15041]: https://github.com/home-assistant/home-assistant/pull/15041 +[#15043]: https://github.com/home-assistant/home-assistant/pull/15043 +[#15045]: https://github.com/home-assistant/home-assistant/pull/15045 +[#15046]: https://github.com/home-assistant/home-assistant/pull/15046 +[#15048]: https://github.com/home-assistant/home-assistant/pull/15048 +[#15050]: https://github.com/home-assistant/home-assistant/pull/15050 +[#15052]: https://github.com/home-assistant/home-assistant/pull/15052 +[#15056]: https://github.com/home-assistant/home-assistant/pull/15056 +[#15057]: https://github.com/home-assistant/home-assistant/pull/15057 +[#15060]: https://github.com/home-assistant/home-assistant/pull/15060 +[#15069]: https://github.com/home-assistant/home-assistant/pull/15069 +[#15085]: https://github.com/home-assistant/home-assistant/pull/15085 +[#15103]: https://github.com/home-assistant/home-assistant/pull/15103 +[#15104]: https://github.com/home-assistant/home-assistant/pull/15104 +[#15107]: https://github.com/home-assistant/home-assistant/pull/15107 +[#15110]: https://github.com/home-assistant/home-assistant/pull/15110 +[#15114]: https://github.com/home-assistant/home-assistant/pull/15114 +[#15115]: https://github.com/home-assistant/home-assistant/pull/15115 +[#15120]: https://github.com/home-assistant/home-assistant/pull/15120 +[#15123]: https://github.com/home-assistant/home-assistant/pull/15123 +[#15128]: https://github.com/home-assistant/home-assistant/pull/15128 +[#15130]: https://github.com/home-assistant/home-assistant/pull/15130 +[#15133]: https://github.com/home-assistant/home-assistant/pull/15133 +[#15134]: https://github.com/home-assistant/home-assistant/pull/15134 +[#15136]: https://github.com/home-assistant/home-assistant/pull/15136 +[#15142]: https://github.com/home-assistant/home-assistant/pull/15142 +[#15147]: https://github.com/home-assistant/home-assistant/pull/15147 +[#15152]: https://github.com/home-assistant/home-assistant/pull/15152 +[#15161]: https://github.com/home-assistant/home-assistant/pull/15161 +[#15162]: https://github.com/home-assistant/home-assistant/pull/15162 +[#15166]: https://github.com/home-assistant/home-assistant/pull/15166 +[#15167]: https://github.com/home-assistant/home-assistant/pull/15167 +[#15168]: https://github.com/home-assistant/home-assistant/pull/15168 +[#15172]: https://github.com/home-assistant/home-assistant/pull/15172 +[#15174]: https://github.com/home-assistant/home-assistant/pull/15174 +[#15175]: https://github.com/home-assistant/home-assistant/pull/15175 +[#15180]: https://github.com/home-assistant/home-assistant/pull/15180 +[#15182]: https://github.com/home-assistant/home-assistant/pull/15182 +[#15192]: https://github.com/home-assistant/home-assistant/pull/15192 +[#15200]: https://github.com/home-assistant/home-assistant/pull/15200 +[#15204]: https://github.com/home-assistant/home-assistant/pull/15204 +[#15207]: https://github.com/home-assistant/home-assistant/pull/15207 +[#15210]: https://github.com/home-assistant/home-assistant/pull/15210 +[#15215]: https://github.com/home-assistant/home-assistant/pull/15215 +[#15216]: https://github.com/home-assistant/home-assistant/pull/15216 +[#15217]: https://github.com/home-assistant/home-assistant/pull/15217 +[#15218]: https://github.com/home-assistant/home-assistant/pull/15218 +[@Hate-Usernames]: https://github.com/Hate-Usernames +[@JeffLIrion]: https://github.com/JeffLIrion +[@Kane610]: https://github.com/Kane610 +[@MartinHjelmare]: https://github.com/MartinHjelmare +[@MizterB]: https://github.com/MizterB +[@Petro31]: https://github.com/Petro31 +[@alexbarcelo]: https://github.com/alexbarcelo +[@amelchio]: https://github.com/amelchio +[@andrey-git]: https://github.com/andrey-git +[@armills]: https://github.com/armills +[@awarecan]: https://github.com/awarecan +[@b3nj1]: https://github.com/b3nj1 +[@bachya]: https://github.com/bachya +[@balloob]: https://github.com/balloob +[@cdce8p]: https://github.com/cdce8p +[@colinodell]: https://github.com/colinodell +[@danielperna84]: https://github.com/danielperna84 +[@dejx]: https://github.com/dejx +[@dreizehnelf]: https://github.com/dreizehnelf +[@dshokouhi]: https://github.com/dshokouhi +[@fabaff]: https://github.com/fabaff +[@gstorer]: https://github.com/gstorer +[@hanzoh]: https://github.com/hanzoh +[@hmmbob]: https://github.com/hmmbob +[@keesschollaart81]: https://github.com/keesschollaart81 +[@kepten]: https://github.com/kepten +[@mlebrun]: https://github.com/mlebrun +[@oblogic7]: https://github.com/oblogic7 +[@pvizeli]: https://github.com/pvizeli +[@raoulteeuwen]: https://github.com/raoulteeuwen +[@schmittx]: https://github.com/schmittx +[@scop]: https://github.com/scop +[@stilllman]: https://github.com/stilllman +[@syssi]: https://github.com/syssi +[@tchellomello]: https://github.com/tchellomello +[@teharris1]: https://github.com/teharris1 +[@titilambert]: https://github.com/titilambert +[@vaidyasr]: https://github.com/vaidyasr +[@vickyg3]: https://github.com/vickyg3 +[@w1ll1am23]: https://github.com/w1ll1am23 +[alarm_control_panel.mqtt docs]: /components/alarm_control_panel.mqtt/ +[arlo docs]: /components/arlo/ +[binary_sensor.digital_ocean docs]: /components/binary_sensor.digital_ocean/ +[binary_sensor.flic docs]: /components/binary_sensor.flic/ +[binary_sensor.trend docs]: /components/binary_sensor.trend/ +[camera docs]: /components/camera/ +[camera.neato docs]: /components/camera.neato/ +[camera.proxy docs]: /components/camera.proxy/ +[camera.xiaomi docs]: /components/camera.xiaomi/ +[climate.homekit_controller docs]: /components/climate.homekit_controller/ +[climate.mqtt docs]: /components/climate.mqtt/ +[climate.mysensors docs]: /components/climate.mysensors/ +[climate.zwave docs]: /components/climate.zwave/ +[cover.wink docs]: /components/cover.wink/ +[deconz docs]: /components/deconz/ +[device_tracker docs]: /components/device_tracker/ +[digital_ocean docs]: /components/digital_ocean/ +[emulated_hue docs]: /components/emulated_hue/ +[frontend docs]: /components/frontend/ +[homekit docs]: /components/homekit/ +[homekit_controller docs]: /components/homekit_controller/ +[homematic docs]: /components/homematic/ +[http docs]: /components/http/ +[hue docs]: /components/hue/ +[image_processing.opencv docs]: /components/image_processing.opencv/ +[insteon_plm docs]: /components/insteon_plm/ +[light.deconz docs]: /components/light.deconz/ +[light.flux_led docs]: /components/light.flux_led/ +[light.homekit_controller docs]: /components/light.homekit_controller/ +[light.tplink docs]: /components/light.tplink/ +[light.wemo docs]: /components/light.wemo/ +[media_extractor docs]: /components/media_extractor/ +[media_player.braviatv docs]: /components/media_player.braviatv/ +[media_player.firetv docs]: /components/media_player.firetv/ +[media_player.samsungtv docs]: /components/media_player.samsungtv/ +[media_player.vizio docs]: /components/media_player.vizio/ +[mqtt docs]: /components/mqtt/ +[neato docs]: /components/neato/ +[netgear_lte docs]: /components/netgear_lte/ +[notify docs]: /components/notify/ +[nuimo_controller docs]: /components/nuimo_controller/ +[prometheus docs]: /components/prometheus/ +[sensor.dht docs]: /components/sensor.dht/ +[sensor.fitbit docs]: /components/sensor.fitbit/ +[sensor.loopenergy docs]: /components/sensor.loopenergy/ +[sensor.pi_hole docs]: /components/sensor.pi_hole/ +[sensor.pollen docs]: /components/sensor.pollen/ +[sensor.postnl docs]: /components/sensor.postnl/ +[sensor.waze_travel_time docs]: /components/sensor.waze_travel_time/ +[sensor.xiaomi_miio docs]: /components/sensor.xiaomi_miio/ +[switch.anel_pwrctrl docs]: /components/switch.anel_pwrctrl/ +[switch.digital_ocean docs]: /components/switch.digital_ocean/ +[switch.homekit_controller docs]: /components/switch.homekit_controller/ +[switch.neato docs]: /components/switch.neato/ +[vacuum.neato docs]: /components/vacuum.neato/ +[weather.darksky docs]: /components/weather.darksky/ +[wemo docs]: /components/wemo/ +[wink docs]: /components/wink/ From 1a4bcfef281eb937af1b7fc5d6648caefecb4036 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 1 Jul 2018 13:42:58 -0400 Subject: [PATCH 26/32] Update notes --- source/_posts/2018-07-06-release-73.markdown | 25 ++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/source/_posts/2018-07-06-release-73.markdown b/source/_posts/2018-07-06-release-73.markdown index 0161aea2fd4..95495aa5716 100644 --- a/source/_posts/2018-07-06-release-73.markdown +++ b/source/_posts/2018-07-06-release-73.markdown @@ -18,6 +18,7 @@ Lots of Lovelace changes. ## {% linkable_title New Platforms %} - Support for Homekit Controller climate devices ([@armills] - [#15057]) ([homekit_controller docs]) ([climate.homekit_controller docs]) ([light.homekit_controller docs]) ([switch.homekit_controller docs]) (new-platform) +- Rachio webhooks ([@Klikini] - [#15111]) ([rachio docs]) ([binary_sensor.rachio docs]) ([switch.rachio docs]) (beta fix) (new-platform) ## {% linkable_title If you need help... %} @@ -38,6 +39,14 @@ Experiencing issues introduced by this release? Please report them in our [issue - X-Forwarded-For improvements and bug fixes ([@colinodell] - [#15204]) ([emulated_hue docs]) ([http docs]) (breaking change) - Stop supporting deprecated TLS ciphers ([@hmmbob] - [#15217]) ([http docs]) (breaking change) +## {% linkable_title Beta Fixes %} + +- Rachio webhooks ([@Klikini] - [#15111]) ([rachio docs]) ([binary_sensor.rachio docs]) ([switch.rachio docs]) (beta fix) (new-platform) +- Only create front-end client_id once ([@awarecan] - [#15214]) ([frontend docs]) (beta fix) +- Make LIFX color/temperature attributes mutually exclusive ([@amelchio] - [#15234]) ([light.lifx docs]) (beta fix) +- Fix an issue when user's nest developer account don't have permission ([@awarecan] - [#15237]) ([binary_sensor.nest docs]) (beta fix) +- Revert some changes to setup.py ([@cdce8p] - [#15248]) (beta fix) + ## {% linkable_title All changes %} - Add entity support to Waze Travel Time ([@Petro31] - [#14934]) ([sensor.waze_travel_time docs]) @@ -113,6 +122,11 @@ Experiencing issues introduced by this release? Please report them in our [issue - Update python-wink to 1.9.1 ([@vickyg3] - [#15215]) ([wink docs]) - Fix 'AirQualityMonitorStatus' object has no attribute ‘time_state’ ([@syssi] - [#15216]) ([sensor.xiaomi_miio docs]) - Use cached states for neato when possible ([@dshokouhi] - [#15218]) ([switch.neato docs]) ([vacuum.neato docs]) +- Rachio webhooks ([@Klikini] - [#15111]) ([rachio docs]) ([binary_sensor.rachio docs]) ([switch.rachio docs]) (beta fix) (new-platform) +- Only create front-end client_id once ([@awarecan] - [#15214]) ([frontend docs]) (beta fix) +- Make LIFX color/temperature attributes mutually exclusive ([@amelchio] - [#15234]) ([light.lifx docs]) (beta fix) +- Fix an issue when user's nest developer account don't have permission ([@awarecan] - [#15237]) ([binary_sensor.nest docs]) (beta fix) +- Revert some changes to setup.py ([@cdce8p] - [#15248]) (beta fix) [#13738]: https://github.com/home-assistant/home-assistant/pull/13738 [#14288]: https://github.com/home-assistant/home-assistant/pull/14288 @@ -156,6 +170,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [#15104]: https://github.com/home-assistant/home-assistant/pull/15104 [#15107]: https://github.com/home-assistant/home-assistant/pull/15107 [#15110]: https://github.com/home-assistant/home-assistant/pull/15110 +[#15111]: https://github.com/home-assistant/home-assistant/pull/15111 [#15114]: https://github.com/home-assistant/home-assistant/pull/15114 [#15115]: https://github.com/home-assistant/home-assistant/pull/15115 [#15120]: https://github.com/home-assistant/home-assistant/pull/15120 @@ -183,13 +198,18 @@ Experiencing issues introduced by this release? Please report them in our [issue [#15204]: https://github.com/home-assistant/home-assistant/pull/15204 [#15207]: https://github.com/home-assistant/home-assistant/pull/15207 [#15210]: https://github.com/home-assistant/home-assistant/pull/15210 +[#15214]: https://github.com/home-assistant/home-assistant/pull/15214 [#15215]: https://github.com/home-assistant/home-assistant/pull/15215 [#15216]: https://github.com/home-assistant/home-assistant/pull/15216 [#15217]: https://github.com/home-assistant/home-assistant/pull/15217 [#15218]: https://github.com/home-assistant/home-assistant/pull/15218 +[#15234]: https://github.com/home-assistant/home-assistant/pull/15234 +[#15237]: https://github.com/home-assistant/home-assistant/pull/15237 +[#15248]: https://github.com/home-assistant/home-assistant/pull/15248 [@Hate-Usernames]: https://github.com/Hate-Usernames [@JeffLIrion]: https://github.com/JeffLIrion [@Kane610]: https://github.com/Kane610 +[@Klikini]: https://github.com/Klikini [@MartinHjelmare]: https://github.com/MartinHjelmare [@MizterB]: https://github.com/MizterB [@Petro31]: https://github.com/Petro31 @@ -231,6 +251,8 @@ Experiencing issues introduced by this release? Please report them in our [issue [arlo docs]: /components/arlo/ [binary_sensor.digital_ocean docs]: /components/binary_sensor.digital_ocean/ [binary_sensor.flic docs]: /components/binary_sensor.flic/ +[binary_sensor.nest docs]: /components/binary_sensor.nest/ +[binary_sensor.rachio docs]: /components/binary_sensor.rachio/ [binary_sensor.trend docs]: /components/binary_sensor.trend/ [camera docs]: /components/camera/ [camera.neato docs]: /components/camera.neato/ @@ -256,6 +278,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [light.deconz docs]: /components/light.deconz/ [light.flux_led docs]: /components/light.flux_led/ [light.homekit_controller docs]: /components/light.homekit_controller/ +[light.lifx docs]: /components/light.lifx/ [light.tplink docs]: /components/light.tplink/ [light.wemo docs]: /components/light.wemo/ [media_extractor docs]: /components/media_extractor/ @@ -269,6 +292,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [notify docs]: /components/notify/ [nuimo_controller docs]: /components/nuimo_controller/ [prometheus docs]: /components/prometheus/ +[rachio docs]: /components/rachio/ [sensor.dht docs]: /components/sensor.dht/ [sensor.fitbit docs]: /components/sensor.fitbit/ [sensor.loopenergy docs]: /components/sensor.loopenergy/ @@ -281,6 +305,7 @@ Experiencing issues introduced by this release? Please report them in our [issue [switch.digital_ocean docs]: /components/switch.digital_ocean/ [switch.homekit_controller docs]: /components/switch.homekit_controller/ [switch.neato docs]: /components/switch.neato/ +[switch.rachio docs]: /components/switch.rachio/ [vacuum.neato docs]: /components/vacuum.neato/ [weather.darksky docs]: /components/weather.darksky/ [wemo docs]: /components/wemo/ From e32c33211058de39f982b9c99c6ae68166b215b4 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 1 Jul 2018 19:51:19 -0400 Subject: [PATCH 27/32] Add foundation for lovelace docs --- _config.yml | 2 + .../_includes/asides/lovelace_navigation.html | 22 ++++ source/_includes/site/sidebar.html | 4 +- source/_lovelace/glance.markdown | 26 +++++ .../lovelace/lovelace-ui-comparison.png | Bin 0 -> 11136 bytes source/lovelace/index.markdown | 107 ++++++++++++++++++ 6 files changed, 160 insertions(+), 1 deletion(-) create mode 100644 source/_includes/asides/lovelace_navigation.html create mode 100644 source/_lovelace/glance.markdown create mode 100644 source/images/lovelace/lovelace-ui-comparison.png create mode 100644 source/lovelace/index.markdown diff --git a/_config.yml b/_config.yml index 08612e54735..1bb5a20bd4a 100644 --- a/_config.yml +++ b/_config.yml @@ -76,6 +76,8 @@ collections: output: true faq: output: true + lovelace: + output: true # ----------------------- # # 3rd Party Settings # diff --git a/source/_includes/asides/lovelace_navigation.html b/source/_includes/asides/lovelace_navigation.html new file mode 100644 index 00000000000..fd19a6462df --- /dev/null +++ b/source/_includes/asides/lovelace_navigation.html @@ -0,0 +1,22 @@ +
+ + {% assign cards = site.lovelace | sort: 'title' %} + +
+

Lovelace UI

+ +
+ +
+

Cards

+ +
+
diff --git a/source/_includes/site/sidebar.html b/source/_includes/site/sidebar.html index 6ee8aaf444b..81abe7cd946 100644 --- a/source/_includes/site/sidebar.html +++ b/source/_includes/site/sidebar.html @@ -2,8 +2,10 @@ {% assign url_parts = page.url | split: '/' %} {% if url_parts[1] == 'components' %} {% include asides/component_navigation.html | compact_newlines %} - {% elsif url_parts[1] == 'cookbook' %} + {% elsif url_parts[1] == 'cookbook' %} {% include asides/cookbook_navigation.html | compact_newlines %} + {% elsif url_parts[1] == 'lovelace' %} + {% include asides/lovelace_navigation.html | compact_newlines %} {% elsif url_parts[1] == 'developers' or url_parts[1] == 'help' %} {% include asides/help_navigation.html | compact_newlines %} {% elsif url_parts[1] == 'getting-started' %} diff --git a/source/_lovelace/glance.markdown b/source/_lovelace/glance.markdown new file mode 100644 index 00000000000..9d2511eada0 --- /dev/null +++ b/source/_lovelace/glance.markdown @@ -0,0 +1,26 @@ +--- +layout: page +title: "Glance Card" +sidebar_label: Glance +description: "The Glance card allows you to see a list of entities at a glance." +date: 2018-07-01 10:28 +00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +A card that allows you to see see a list of entities at a glance. + +| Name | Type | Default | Description +| ---- | ---- | ------- | ----------- +| type | string | **Required** | `glance` +| entities | list | **Required** | Entity id's +| title | string | Optional | Card title + +Each entry in the list of entities is either an entity ID or an entity option object. The entity option object can have the following options: + +| Name | Type | Default | Description +| ---- | ---- | ------- | ----------- +| entity | entity id | **Required** | The ID of the entity to show. +| title | string | Optional | The title to use instead of the entity name. diff --git a/source/images/lovelace/lovelace-ui-comparison.png b/source/images/lovelace/lovelace-ui-comparison.png new file mode 100644 index 0000000000000000000000000000000000000000..1d79d98716ba67749c5f9d14dfd28bcffbc5656c GIT binary patch literal 11136 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 Mp|4)`&?e%)0n1N>oB#j- literal 0 HcmV?d00001 diff --git a/source/lovelace/index.markdown b/source/lovelace/index.markdown new file mode 100644 index 00000000000..f2b626a3dc3 --- /dev/null +++ b/source/lovelace/index.markdown @@ -0,0 +1,107 @@ +--- +layout: page +title: "Lovelace UI" +description: "The Lovelace UI is a powerful and configurable interface for Home Assistant." +date: 2018-07-01 10:28 +00:00 +sidebar: true +comments: false +sharing: true +footer: true +--- + +

+This is an experimental feature. Configuration might change in future versions. +

+ +Starting with Home Assistant 0.72, we're experimenting with a new way of defining your interface. We're calling it the Lovelace UI. + +The Lovelace UI is: + + - **Extremely fast**. We create the user interface when the UI configuration changes. When a state changes, we just make the UI represent the current state. + - **Extremely customizable**. We have a new file for just configuration. In the past, we declined UI specific options because they did not fit in the state machine. They will fit in a configuration file for a user interface. + - **Extremely extensible**. It's based on the web standard [custom elements](https://developer.mozilla.org/en-US/docs/Web/Web_Components/Using_custom_elements). Don't like the built-in cards? Make your own! Custom cards are treated the same as built-in cards and are configured the same way. [Check the docs.](lovelace_custom_card.md) + - **Making the backend faster**. With Lovelace, the backend will no longer need to maintain entities like groups for the sole purpose of showing them on the frontend. + +## How it works + +The old user interface relied solely on the state machine. This caused trouble as it meant that the state machine was now not only the source for device states, but also for user interface configuration. With Lovelace, we're taking a completely different approach. All user interface configuration will live in a seperate file, controlled by the user. + +

+Diagram showing how states no longer contain UI configuration. +Visual comparison of old configuration versus new configuration +

+ + + +## Trying it out + +Create a new file `/ui-lovelace.yaml` and add the following content: + +```yaml +title: My Awesome Home +views: + # View tab title. + - title: Example + # Optional unique id for direct access /lovelace/${id} + id: example + # Each view can have a different theme applied. Theme should be defined in the frontend. + theme: dark-mode + # The cards to show on this view. + cards: + # The entities card will take a list of entities and show their state. + - type: entities + # Title of the entities card + title: Example + # The entities here will be shown in the same order as specified. + entities: + - input_boolean.switch_ac_kitchen + - input_boolean.switch_ac_livingroom + - input_boolean.switch_tv + + # The filter card will filter available entities for certain criteria + # and render it as type 'entities'. + - type: entity-filter + # Filter criteria. They are all optional. + filter: + - domain: input_boolean + state: 'on' + # This config will be passed to the card rendering the filter results + card_config: + title: Input booleans that are on + + # Specify a tab icon if you want the view tab to be an icon. + - icon: mdi:home-assistant + # Title of the view. Will be used as the tooltip for tab icon + title: Second view + cards: + - type: entities + title: Lots of Kitchen AC + entities: + # It is totally possible to render duplicates. + - input_boolean.switch_ac_kitchen + - input_boolean.switch_ac_kitchen + - input_boolean.switch_ac_kitchen + - input_boolean.switch_ac_kitchen + - input_boolean.switch_ac_kitchen + - input_boolean.switch_ac_kitchen +``` + +Add to your `configuration.yaml`: + +```yaml +input_boolean: + switch_ac_kitchen: + name: AC kitchen + switch_ac_livingroom: + name: AC living room + switch_tv: + name: TV +``` + +Now restart Home Assistant, navigate to `/lovelace`. When you make changes to `ui-lovelace.yaml`, you don't have to restart Home Assistant or refresh the page. Just hit the refresh button at the top of the UI. + +## Current limitations + +This is the very very early version aimed at gathering feedback. Discussion and suggestions are welcome in the [ui-schema repository](https://github.com/home-assistant/ui-schema). From 7cc9c8c4b9a929b4cbd0e6f20693f1d1ce3c80f5 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Sun, 1 Jul 2018 23:30:21 -0400 Subject: [PATCH 28/32] Update intro for blog post --- source/_includes/site/sidebar.html | 2 +- source/_posts/2018-07-06-release-73.markdown | 19 ++++++++++++++++-- .../blog/2018-07-0.73/lovelace-elements.png | Bin 0 -> 22349 bytes 3 files changed, 18 insertions(+), 3 deletions(-) create mode 100644 source/images/blog/2018-07-0.73/lovelace-elements.png diff --git a/source/_includes/site/sidebar.html b/source/_includes/site/sidebar.html index 81abe7cd946..38fa8d55074 100644 --- a/source/_includes/site/sidebar.html +++ b/source/_includes/site/sidebar.html @@ -2,7 +2,7 @@ {% assign url_parts = page.url | split: '/' %} {% if url_parts[1] == 'components' %} {% include asides/component_navigation.html | compact_newlines %} - {% elsif url_parts[1] == 'cookbook' %} + {% elsif url_parts[1] == 'cookbook' %} {% include asides/cookbook_navigation.html | compact_newlines %} {% elsif url_parts[1] == 'lovelace' %} {% include asides/lovelace_navigation.html | compact_newlines %} diff --git a/source/_posts/2018-07-06-release-73.markdown b/source/_posts/2018-07-06-release-73.markdown index 95495aa5716..c9407b53e59 100644 --- a/source/_posts/2018-07-06-release-73.markdown +++ b/source/_posts/2018-07-06-release-73.markdown @@ -11,9 +11,20 @@ categories: Release-Notes og_image: /images/blog/2018-07-0.73/components.png --- -
+Today we're releasing Home Assistant 0.73. First, let's talk security. Home Assistant has a lot of power. It can control all devices in your house and know what you're up to. That's why securing it is very important. It's not good enough to connect your instance unsecured to the internet and hope no one will find it. All ports on all computers are regularly scanned by bad actors. Please read [our guidelines thoroughly](https://www.home-assistant.io/docs/configuration/securing/) and follow them. -Lots of Lovelace changes. +In the meanwhile, we're also working hard on the new authentication system. A preview version is included in this release, more info on [our developer blog](https://developers.home-assistant.io/blog/2018/07/02/trying-new-auth.html). + +This release also includes a TON of love for the new Lovelace UI. Yes, it's still experimental but daaang, it's already so awesome that you should probably just go ahead and try it out. Thanks to all the devs who have jumped on this: [@c727], [@ciotlosm] and [@jeradM]. + +We don't have time to go through all the changes in this release, but [@ciotlosm] has been keeping [a very detailed changelog](https://github.com/ciotlosm/docs-lovelace/blob/0.73.0/changelog.md). I'll just leave this screenshot by [@arsaboo] of the new picture-elements card: + +

+Screenshot of a floorplan with sensor info and light/camera controls overlayed. +The new picture elements card. +

+ +And last but not least, [@Klikini] has upgraded Rachio support from cloud polling to cloud push! Now you'll be able to get instantly notified of changes to your sprinklers. NICE! ## {% linkable_title New Platforms %} @@ -206,6 +217,10 @@ Experiencing issues introduced by this release? Please report them in our [issue [#15234]: https://github.com/home-assistant/home-assistant/pull/15234 [#15237]: https://github.com/home-assistant/home-assistant/pull/15237 [#15248]: https://github.com/home-assistant/home-assistant/pull/15248 +[@ciotlosm]: https://github.com/ciotlosm +[@jeradM]: https://github.com/jeradM +[@c727]: https://github.com/c727 +[@arsaboo]: https://github.com/arsaboo [@Hate-Usernames]: https://github.com/Hate-Usernames [@JeffLIrion]: https://github.com/JeffLIrion [@Kane610]: https://github.com/Kane610 diff --git a/source/images/blog/2018-07-0.73/lovelace-elements.png b/source/images/blog/2018-07-0.73/lovelace-elements.png new file mode 100644 index 0000000000000000000000000000000000000000..0e6fda3367a867b180c6b9f1d4f22358ae9199c6 GIT binary patch literal 22349 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 e4gNnBg8vPl-pFA-eaF230000 Date: Mon, 2 Jul 2018 09:00:24 -0400 Subject: [PATCH 29/32] Update screenshot picture-eleemnts --- source/_posts/2018-07-06-release-73.markdown | 4 ++-- .../blog/2018-07-0.73/lovelace-elements.png | Bin 22349 -> 22452 bytes 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_posts/2018-07-06-release-73.markdown b/source/_posts/2018-07-06-release-73.markdown index c9407b53e59..7c06c255f4e 100644 --- a/source/_posts/2018-07-06-release-73.markdown +++ b/source/_posts/2018-07-06-release-73.markdown @@ -8,7 +8,7 @@ author: Paulus Schoutsen author_twitter: balloob comments: true categories: Release-Notes -og_image: /images/blog/2018-07-0.73/components.png +og_image: /images/blog/2018-07-0.73/lovelace-elements.png --- Today we're releasing Home Assistant 0.73. First, let's talk security. Home Assistant has a lot of power. It can control all devices in your house and know what you're up to. That's why securing it is very important. It's not good enough to connect your instance unsecured to the internet and hope no one will find it. All ports on all computers are regularly scanned by bad actors. Please read [our guidelines thoroughly](https://www.home-assistant.io/docs/configuration/securing/) and follow them. @@ -17,7 +17,7 @@ In the meanwhile, we're also working hard on the new authentication system. A pr This release also includes a TON of love for the new Lovelace UI. Yes, it's still experimental but daaang, it's already so awesome that you should probably just go ahead and try it out. Thanks to all the devs who have jumped on this: [@c727], [@ciotlosm] and [@jeradM]. -We don't have time to go through all the changes in this release, but [@ciotlosm] has been keeping [a very detailed changelog](https://github.com/ciotlosm/docs-lovelace/blob/0.73.0/changelog.md). I'll just leave this screenshot by [@arsaboo] of the new picture-elements card: +We don't have time to go through all the changes in this release, but [@ciotlosm] has been keeping [a very detailed changelog](https://github.com/ciotlosm/docs-lovelace/blob/0.73.0/changelog.md). I'll just leave this screenshot by [@arsaboo] of the new picture-elements card and [the Lovelace configuration](https://github.com/arsaboo/homeassistant-config/blob/master/ui-lovelace.yaml#L15-L158):

Screenshot of a floorplan with sensor info and light/camera controls overlayed. diff --git a/source/images/blog/2018-07-0.73/lovelace-elements.png b/source/images/blog/2018-07-0.73/lovelace-elements.png index 0e6fda3367a867b180c6b9f1d4f22358ae9199c6..64d18b6c323d6053bf6ce0c7149b6d19fcee3bcf 100644 GIT binary patch literal 22452 zcmb4pWmFtYtSCi_ySuxU4~o0H7AX$JDZWS-cc=J5aaalzclYAH6nEc63oLH0_x*q8 zojX59lFVc>mgG!gwKbKnF(@z)5D>6cl;w315Z=KN5D*j5kp4k-rX0EcHD0vUKPkMu zy&djsoSmJmLHhrp?*F9+$i+GA^73+jZ|`VlV|#n+{{D}=S3WRT<@fL3$Vf=f&(Hf? zYpam{&ejGrG}Q9)^0oQCb;zKgMMBl&NqU1Ra#sCgTa1)K(Vp0?Ck8T z^8+?tzKDv7%+Jpk6ckEJNwzf9jt{gnHa0FUE*TgY5D^mA*H+h*=Wnbmq$a2CY^+R; z4Tl8!8-F&uzh7KiUE${!SY3pyLVim~NL5cBS(uwG%uUP)9Q&QBH9vb}>oRI7P)pmQU9~cJ8 z%t~-|@eMCAfF6!!)C_`tw*A<6@=33YjWN}<7fsF1-GINM{JOD^tJL{cSXq@83Gn`8 z^znYSE`Vqg3)kVH5lwwlt1m_gKdK~j zxnfE>%_7Qe?EM6k*fYVuthJ4TB7nsORo?;(+|Adrw7R|Nca~E~T2{Tse!n`rOz(l;?<%Hd} zc*6@~z$v`pD#8~Wt98XAKGEd4&;%SC09^?ZIrS)1S`qcX{~riywRHZO3S|HxNecNr zR>e=1#&?Nyk9`V=p&8XSr$o17guhV0L2nfLEMX$=-g74Tpy{!UxPq zl&_T2`81{D6I(?lJ`vGN?0x8FINpwIEC^le6Lxg6v<*Q3|HNBc9*XSG38?s-SobJq z9SS?dM(KvLQ`9NtD{Agte)jLp5&uf7%%nm8lf7`0hTBqLjBxE0S7cgc81sh+q`sn1 z$J^s@^>KGbNsi^rKYym-?&;^34pj2G&iO@!U|&mv*4;}#mtFZ^V}e>+rib|gtSO|E!Joo9YRxHqjm*I$V@5g^SvnCyj%Hh>dXkDq!)i;*8)Jkt9Gx^Yy){HMcyyTlgGzSQ_SRC)W4sino2Qfw@|CCnV63!Duj9C^UVQ9iCC%IakKV zg4MT5^&kJG2et+;*#klsmf32tq{rw;OeWAm3Z zgX*!Zxfrklf55u26I?SrNdeoRYxeijYCTU#fQA)9-|)x33>UGx*tI0tE5+)3DDr)z zl@A6LqvbIG;%3=pY3(B<2hai|@E_3_;rNPB#)R46dgl>g;s{HkNH;F?FCP=TGfWBv zi}*b7UBfimK5@uu$&dafKVy|V7a{&*fr$Pb73xX`{a<9uZ_-=vR#R1ysT%3v;O@2~ zrMy+oxbAeJlp2{}U|SnVh}!96U^wpWs{BdGmg)%4=eR~s!s?{WJZG|aiMdCp2I5N= zQit>#F%(%eRI_m2tgx)nJ6@$p6ev=1WF%i%a>NfzeC~Ak25%|35HsIu7Vj9x@AmAt zTU5eDg;RaOtNvcoRl>>S3eQLCIF_b;)MvtkSI}@AG7yz*E zf)MkhS!dA!{|aAhz@W4c*8eLzjh7I``=^Bw@b=v#MoW|7^e{O{G#FQfHdT@-Q2FtH z3y|ZPc^Un}olSJP=}h8%nG>A8)$iunCZnr`*YI z61nbb%f=fDt3b;pwat0wbu_$_z1apG&dEoj&k7OXV4vB-H5ad=mntA7 zGPI<6#7K~{2=#z+e!vMt87`{r6NVETS;L<(n`i9ol?tYuXiYV2eiywVRqv=U9T6{P zk_;u-r~rZj=O=nV7IfoQ0tPup7$oE#(3O0Lfun1csC5H-(1KH=aJ=tN*`tLZg1eiW zZYC<6FCW2Chnlbd#$r;jZ6J!S>g#=$Aw9S!`eE&07Hya~2 zb9_&LhwAG#y5V??lbvf2KW}{@T7Vo_S39%kNk)(N-OV)=KRSO(rR#!qpxHNCcH<)O z?59r-;h(ws2q>-u56GEM_t35g3a8L+Q8PT;p=$AZhKsqW3YjWYsXtghdO0F$q1 zW?CVVFBrdr87}TqL?paFeE;PIok$(9#`qS<)!{ZEM0E8n&^%3uh{99M5lmqkVNRKI zg|fL5`R!Rp6o}aW942Rx1Pqh0kI4hX%6rbU!lGC&Yvs=Jt;-58wSC zNwP0Kh!C~aR(JIm*$3K(17@uQanmH{CH8TMeQ{K1?f_+Nm`PUo&rl7YBu|hW*f!x&B`#1zb;nzY$cC5)-P}OceMw!rU&S~MuC%?l$j5P zN@f&Biwu-E-W|_{8nzn1b9uP9#Q(AUCMT0U?b>RR%W~hDFg4BNVvAKG1NkpXJ|b?m z$jt*9@P)_>`|!i@@hC3Ba_g@#=kXn@Qr-5Xe;eV)&DfT(I42|a?BvSbih5>it4>~$ z;^dGjAEHSg)Y4~RFhiIyP z6eUL5)F6^cnfU@ej6A%iltA`>K7at3Px5I*0}f|FC7C?ZOLHNbgI~mQGx?dOlEI2) zR?3L@SPFQD(pVd#f-_W%xF!6=rSHQ%zqY+$MduHx2>hT(pu}d z%NTy{$PZ-U=~%~5z;x1aP4_kO+;Q`mFw5Z!mg|hXdEQntX4TtJUI5` zV!8dew%NXCk$jUddt$rE7`F zXuK>k{a%VTV%y8;u`;&r`{&0mL3JJ422+cC8@Rh){=Q4w zti5^iD%qG&$&$u1`MsLzg;v8b`7)0_G^V4l25ui%`<_N?!8|jy(W;sLTr)lKQhBCU z&v{9>2@0u!#NTY!ur6y*&*JY~S^~ApCXtD0;D%ZS!zF32G;gjyq#*{3p*yGLIc^K} z+k-DJr|-A6YP-1-e0c4>ivMSgYZ9X))QDsz1UxQxz|__F7;YEBxm|0rJ3Wo;Nk<0< z==`UoJwsiADA8#x=2_*TDdyOPd%)$5vCF=D%G8KFGmHI8?ZRo-YaG;r%Va))XWeXV z|HbHmH8uU<>MB5;(`(|wkZomy`j0bb^XddD_T0Ivx$q8poLHAfFTJg|A6d7xR@BE+ zh zFv_!{G_dzF8ERkit$y{oK?GWQ614RWpjOhj2;w0CVhp?dSGp?hAmdK zx@~Ei^-4Wqy^hdmJPoJ#&G*q$ly z#t}EmC=8XGSt={+a9HaWa(d9;;tKXlhXWmeWysX>MEFg6b%wW2tmd^{bF@ZOCcItU zc;4~YPP|Nm7-0PFlRL6$gX;HdC7v6;V#^c#BU{(c&zI|rvK6G)57zZiOSch@ise12 z>lNOiS4=PHp^NY=Vpu22_%n(;*=1uAV<^H}+V3ZkaMhv=`34V=8*frl4>&heGf84Q zbDd-?Pqv=JA1jA{lC+YTIDW=$vWPbNzuw-d09wIo{D(#aD9Xd<<(UUx-ilZoa4wXm}g)@NTN7hD}`1dI-8e)9B+dHk`Jh|2o5t|%avOdgk zS*x$h)*h(BPk%mL5Q%Rm`PnfSogOb^y#Wj{OJT{1Wkx(jY`P!FG!u~ndkgJ7Jlg?} z^+g?JTfD3|`^jN=!O^~V5?^W4+egkX;j8$vn-~P-a1!c3N5=!*R3>(G9d9W@GpXF` z6;tN#Ue4P`dc-d*EWx}J;kI565(0nE#0ES_n6qsldsbxcznzwGD%;H73He-a+(Spw zD~OcJXee2O?t0dkBy8&BjohSurtojcD=5{)8;m4NdtFBugKBvH7 z^rwh*ne}rsOF4QC7$&c8@@k@Cn(zAvIPB(_E?n7D~4*##x-~ zEN&qiqgccl?9MPZ3TwPO7-K(CL!M=bwt2_WX%-0ICIlwGpF zn8?&*m3)btnmC@9vwsULT^1vomMJY!hn^#+wq%>kR?Emy2E#>Qs_g6XiA1HhPdKJo1{pYx6^Mqjcyb}cUg$6s|pnt$i0uku%Axz zh+v-D7?_qTYu;yJ8gJ72(1@LuJ$9?c4weYY%C=y+c4m*8o!DwP!_g6V|1$GKa$iI- zbvC;5V_xz5jZBm7YjwC?nscJ-N*T#oj&i3~FWv1FG)<*(#cR&6F_!>&2f%xp- zyDGVI!h^PNn9jRReqpqid6)2}qUkS>ls;%TEc9^Xh7w}n4CZ6%++D$b)oALhRj?35$bR1ss%2|%QJw#z?5n%^FVNX} zHH;~L7!)&oh0#uK(JR;v;*N_SZfAia(=ZI_L`>&|ZL(Ym@YpC(!rhzX#{<|rfCUiv zt7<=e+$EV){Cy6YXEA06?z@yHvd12`L%}Kp%n}F>3;u)tE6T>& ztJ^H~uh4h8KwTx^L_<0i2pE9=ahRKDvsnf=Wp^yF3Fx^9thCgSqLNOGMP?S<$;4KS zdDs4yy4H6utq=^Hdh1V(5oR}<@s_b*xGjsx7YF#f4T*iM9^XU%lP0XmAVh-BWLJm^ zMG}Ti$Ojvd=hd3IZ(xXcWT5q7!SSepwIS0Ov*gqX0S{+;(W=nz_uhar&A|>G0>Tbw zG$5_VCzO}=sW{Ab_AgaamARq2&(^mW*25Dt#UT`pF@1OdREhGi*GH(mq^QQ*B*)rL z>e;wR?`>&M_gBS2)V8XS*PDr)?)d;f%LaM-+tiZewz0tl!Cc4PB;oUIqbIKE`>uqWnrg={qIntx6*5wm z2^sRduKI!j7lGUwic;1BZUq_3{=CQTDG`!n()?FB-Hq{%m2pUIBa6i@Q^(xe5M!tM zBxB1HCy%o@;?kn4h5G(Oy4BB;^$E*YX z#@@G~27Z`B-OCxa!F`>P=w8p<^t^EKU#mGNTle>m9)=&i<-R@eFu|6j9|>DAeCy@r zs@&L_U>8#Fnyz`BfdX0(iJ^uYUwRdx&}*g6`xCg2LmA~2UEuKdxNzCjBzb1f_AQpC zbps}p0D6_+Q}hqUyoHn`;1Y3x6)gU8VKye%9^H$|yOpOj?b^Eot4K_JE+qhQD%{zx zuGFkADdjrV)sDrl0GT@YAa*FGd54K*UXc7K258WA8C6cSxRmr915^x) z;s(DXrBn{i(h?Oo*l;iMEa+w|z$Hdqm#cg@PC+_R!Vpa1%y(TTOK_7PwP3i@_TO>6 zauX;nmIcC|pLE%0B;O_eRd^?+vv1Fx19A5=)}tUBoDyFVQ!i#)ukMX!Ntvhs%zvbH z6Z+a(NX=NVJ+q06YKkEvY8x!M?vd=xPh(qoL~9(VY9#jJ?(p#f!oDvga=If;8?=8& zap5N#I=zXjrLTw^0w@?$7D2q}mcgKA>$be}SBg&I>2Vj5j;WlyS+wI&m|aF*geeui zb-Ste`8^_ab*AHCn2ARI(9mq-tT6BV=r>CQb$z$exhDCif|%juukiP0)e8rCg!B|E z6F1sjF#b$#J?7}L)LnEv&s=+`SuMLK6e(npg4C0u7ba*XZH^bXNosms z+oz`@g3hTD*im7sN^NVu^#^*vB0=XWayzOQ{Mu}W0gCCgT?bB9YD(`Zv�UEW|@= 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 literal 22349 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 e4gNnBg8vPl-pFA-eaF230000 Date: Mon, 2 Jul 2018 15:11:20 -0500 Subject: [PATCH 30/32] Update for rewritten Rachio component (#5589) * Update for rewritten Rachio component * :pencil2: Minor tweaks * :arrow_up: ha_release 0.73 * :arrow_up: ha_release 0.73 --- .../_components/binary_sensor.rachio.markdown | 31 +++++++++++++ source/_components/rachio.markdown | 43 +++++++++++++++++++ source/_components/switch.rachio.markdown | 42 ++++++------------ 3 files changed, 88 insertions(+), 28 deletions(-) create mode 100644 source/_components/binary_sensor.rachio.markdown create mode 100644 source/_components/rachio.markdown diff --git a/source/_components/binary_sensor.rachio.markdown b/source/_components/binary_sensor.rachio.markdown new file mode 100644 index 00000000000..568e9e0c558 --- /dev/null +++ b/source/_components/binary_sensor.rachio.markdown @@ -0,0 +1,31 @@ +--- +layout: page +title: "Rachio Binary Sensor" +description: "Instructions on how to use Rachio binary sensors with Home Assistant." +date: 2018-06-23 16:15 +sidebar: true +comments: false +sharing: true +footer: true +logo: rachio.png +ha_category: Hub +ha_iot_class: "Cloud Push" +ha_release: 0.73 +--- + +The `rachio` binary sensor platform allows you to view the status of your [Rachio irrigation system](http://rachio.com/). + +Once configured, a binary sensor will be added that shows whether or not each controller in the account provided is online and reachable by Rachio's servers. + +

+ You must have the [Rachio component](/components/rachio/) configured to use this switch. +

+ + +To add this platform to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +binary_sensor: + - platform: rachio +``` diff --git a/source/_components/rachio.markdown b/source/_components/rachio.markdown new file mode 100644 index 00000000000..f50050f514c --- /dev/null +++ b/source/_components/rachio.markdown @@ -0,0 +1,43 @@ +--- +layout: page +title: "Rachio" +description: "Instructions on how to use Rachio with Home Assistant." +date: 2018-06-23 16:04 +sidebar: true +comments: false +sharing: true +footer: true +logo: rachio.png +ha_category: Hub +ha_iot_class: "Cloud Push" +ha_release: 0.73 +--- + +The `rachio` platform allows you to control your [Rachio irrigation system](http://rachio.com/). + +## {% linkable_title Getting your Rachio API Key %} + +1. Log in at [https://app.rach.io/](https://app.rach.io/). +1. Click the "Account Settings" menu item at the bottom of the left sidebar +1. Click "Get API Key" +1. Copy the API key from the dialog that opens. + +To add this platform to your installation, add the following to your `configuration.yaml` file: + +```yaml +# Example configuration.yaml entry +rachio: + api_key: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx +``` + +### {% linkable_title iFrame %} + +If you would like to see and control more detailed zone information, create an [iFrame](/components/panel_iframe/) that renders the Rachio web app. + +```yaml +panel_iframe: + rachio: + title: Rachio + url: "https://app.rach.io" + icon: mdi:water-pump +``` diff --git a/source/_components/switch.rachio.markdown b/source/_components/switch.rachio.markdown index 9208a2d4754..786c3574132 100644 --- a/source/_components/switch.rachio.markdown +++ b/source/_components/switch.rachio.markdown @@ -2,25 +2,24 @@ layout: page title: "Rachio Switch" description: "Instructions on how to use Rachio switches with Home Assistant." -date: 2017-05-29 09:00 +date: 2018-06-23 16:09 sidebar: true comments: false sharing: true footer: true logo: rachio.png ha_category: Switch -ha_iot_class: "Cloud Polling" +ha_iot_class: "Cloud Push" ha_release: 0.46 --- -The `rachio` switch platform allows you to control your [Rachio irrigation system](http://rachio.com/). +The `rachio` switch platform allows you to toggle zones connected to your [Rachio irrigation system](http://rachio.com/) on and off. -## {% linkable_title Getting your Rachio API Access Token %} +Once configured, a switch will be added for every zone that is enabled on every controller in the account provided, as well as a switch to toggle each controller's standby mode. -1. Log in at [https://app.rach.io/](https://app.rach.io/). -1. Click the user button at the top right. -1. Click API Access Token. -1. Copy the API access token from the dialog that opens. +

+ You must have the [Rachio component](/components/rachio/) configured to use this switch. +

To add this platform to your installation, add the following to your `configuration.yaml` file: @@ -28,17 +27,20 @@ To add this platform to your installation, add the following to your `configurat # Example configuration.yaml entry switch: - platform: rachio - access_token: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx ``` Configuration variables: -- **access_token** (*Required*): Your Rachio API Access Token. - **manual_run_mins** (*Optional*): For how long, in minutes, to turn on a station when the switch is enabled. Defaults to 10 minutes. +

+**Water-saving suggestion:**
+Set `manual_run_mins` to a high maximum failsafe value when using scripts to control zones. If something goes wrong with your script, Home Assistant, or you hit the Rachio API rate limit of 1700 calls per day, the controller will still turn off the zone after this amount of time. +

+ ## {% linkable_title Examples %} -In this section you find some real life examples of how to use this switch. +In this section, you find some real-life examples of how to use this switch. ### {% linkable_title `groups.yaml` example %} @@ -51,35 +53,19 @@ irrigation: entities: - group.zones_front - group.zones_back + - switch.side_yard zones_front: name: Front Yard view: false entities: - - switch.driveway - switch.front_bushes - - switch.front_garden - switch.front_yard - - switch.side_yard zones_back: name: Back Yard view: false entities: - - switch.back_bushes - switch.back_garden - switch.back_porch - - switch.back_trees -``` - -### {% linkable_title iFrame %} - -If you would like to see and control more detailed zone information, create an [iFrame](/components/panel_iframe/) that renders the Rachio web app. - -```yaml -panel_iframe: - rachio: - title: Rachio - url: "https://app.rach.io" - icon: mdi:water-pump ``` From 9d736907f06982df24a2a3f33a9038b06c798614 Mon Sep 17 00:00:00 2001 From: Colin O'Dell Date: Sat, 30 Jun 2018 05:16:37 -0400 Subject: [PATCH 31/32] Document the new http.trusted_proxies setting (#5624) Documents the setting added in https://github.com/home-assistant/home-assistant/pull/15204 --- source/_components/http.markdown | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/source/_components/http.markdown b/source/_components/http.markdown index 91b600b2c31..0616476bf07 100644 --- a/source/_components/http.markdown +++ b/source/_components/http.markdown @@ -37,8 +37,9 @@ Configuration variables: - **ssl_peer_certificate** (*Optional*): Path to the client/peer TLS/SSL certificate to accept secure connections from. - **ssl_key** (*Optional*): Path to your TLS/SSL key to serve Home Assistant over a secure connection. - **cors_allowed_origins** (*Optional*): A list of origin domain names to allow [CORS](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing) requests from. Enabling this will set the `Access-Control-Allow-Origin` header to the Origin header if it is found in the list, and the `Access-Control-Allow-Headers` header to `Origin, Accept, X-Requested-With, Content-type, X-HA-access`. You must provide the exact Origin, i.e. `https://www.home-assistant.io` will allow requests from `https://www.home-assistant.io` but __not__ `http://www.home-assistant.io`. -- **use_x_forwarded_for** (*Optional*): Enable parsing of the `X-Forwarded-For` header, passing on the client's correct IP address in proxied setups. You must also whitelist trusted proxies using the `trusted_networks` setting below for this to work. Non-whitelisted requests with this header will be considered IP spoofing attacks, and the header will, therefore, be ignored. Defaults to False. -- **trusted_networks** (*Optional*): List of trusted networks, consisting of IP addresses or networks, that are allowed to bypass password protection when accessing Home Assistant. If using a reverse proxy with the `use_x_forwarded_for` option enabled, this should include the IP address/range of your proxy. This is required because all requests to Home Assistant, regardless of source, will arrive from the reverse proxy IP address. Therefore in a reverse proxy scenario, this option should be set with extreme care. +- **use_x_forwarded_for** (*Optional*): Enable parsing of the `X-Forwarded-For` header, passing on the client's correct IP address in proxied setups. You must also whitelist trusted proxies using the `trusted_proxies` setting below for this to work. Non-whitelisted requests with this header will be considered IP spoofing attacks, and the header will, therefore, be ignored. Defaults to False. +- **trusted_proxies** (*Optional*): List of trusted proxies, consisting of IP addresses or networks, that are allowed to set the `X-Forwarded-For` header. This is required when using `use_x_forwarded_for` because all requests to Home Assistant, regardless of source, will arrive from the reverse proxy IP address. Therefore in a reverse proxy scenario, this option should be set with extreme care. +- **trusted_networks** (*Optional*): List of trusted networks, consisting of IP addresses or networks, that are allowed to bypass password protection when accessing Home Assistant. If using a reverse proxy with the `use_x_forwarded_for` option enabled, requests proxied to Home Assistant with a trusted `X-Forwarded-For` header will appear to come from the IP given in that header instead of the proxy IP. - **ip_ban_enabled** (*Optional*): Flag indicating whether additional IP filtering is enabled. Defaults to False. - **login_attempts_threshold** (*Optional*): Number of failed login attempt from single IP after which it will be automatically banned if `ip_ban_enabled` is True. Defaults to -1, meaning that no new automatic bans will be added. @@ -54,7 +55,10 @@ http: cors_allowed_origins: - https://google.com - https://www.home-assistant.io - use_x_forwarded_for: False + use_x_forwarded_for: True + trusted_proxies: + - 127.0.0.1 + - ::1 trusted_networks: - 127.0.0.1 - ::1 From 5d59c3d72a70a168af6f6e059c4d74af7012c4d9 Mon Sep 17 00:00:00 2001 From: Paulus Schoutsen Date: Fri, 6 Jul 2018 22:29:46 +0200 Subject: [PATCH 32/32] Update blog post --- source/_posts/2018-07-06-release-73.markdown | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/source/_posts/2018-07-06-release-73.markdown b/source/_posts/2018-07-06-release-73.markdown index 7c06c255f4e..b7fbedade39 100644 --- a/source/_posts/2018-07-06-release-73.markdown +++ b/source/_posts/2018-07-06-release-73.markdown @@ -1,8 +1,8 @@ --- layout: post -title: "0.73: TBD - update date" -description: "TBD" -date: 2018-06-29 00:01:00 +title: "0.73: Preview version new user system, Rachio cloud push and Lovelace goes wild" +description: "Summer is here and that means fresh new goodies for all of you." +date: 2018-07-06 00:01:00 date_formatted: "July 6, 2018" author: Paulus Schoutsen author_twitter: balloob