QoDFtr#I>5M^}ip8Y4HJRy=XOGeoVQ}8V<
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
literal 0
HcmV?d00001
From 8c4915976e85c2595a9c1ff994c683daec8fae65 Mon Sep 17 00:00:00 2001
From: Ian Richardson
Date: Tue, 18 Dec 2018 16:37:52 -0600
Subject: [PATCH 04/55] Keep getting questions about this (#7898)
---
source/lovelace/yaml-mode.markdown | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/source/lovelace/yaml-mode.markdown b/source/lovelace/yaml-mode.markdown
index c1a73eb1151d..276c594a368e 100644
--- a/source/lovelace/yaml-mode.markdown
+++ b/source/lovelace/yaml-mode.markdown
@@ -9,7 +9,7 @@ sharing: true
footer: true
---
-It is possible to write your Lovelace config in YAML instead of via the UI. To do so, you will need to configure the Lovelace component to be in yaml mode:
+It is possible to write your Lovelace config in YAML instead of via the UI. To do so, you will need to configure the Lovelace component to be in yaml mode by adding the following to your `configuration.yaml`:
```yaml
lovelace:
From 9df48727182c09aea62260f1ea8b16102e916e7f Mon Sep 17 00:00:00 2001
From: Pascal Vizeli
Date: Tue, 18 Dec 2018 23:47:07 +0100
Subject: [PATCH 05/55] Update latest beta releases
---
source/hassio/installation.markdown | 12 ++++++++----
1 file changed, 8 insertions(+), 4 deletions(-)
diff --git a/source/hassio/installation.markdown b/source/hassio/installation.markdown
index 5348952fbabd..47fbb49cbb2b 100644
--- a/source/hassio/installation.markdown
+++ b/source/hassio/installation.markdown
@@ -19,14 +19,16 @@ The following will take you through the steps required to install Hass.io.
- [Raspberry Pi Zero W][pi0-w]
- [Raspberry Pi 1 Model B][pi1]
- [Raspberry Pi 2 Model B][pi2]
- - [Raspberry Pi 3 Model B and B+ 32bit][pi3-32]
- - [Raspberry Pi 3 Model B and B+ 64bit][pi3-64] (beta)
+ - [Raspberry Pi 3 Model B and B+ 32bit][pi3-32] (recommended)
+ - [Raspberry Pi 3 Model B and B+ 64bit][pi3-64]
- [Tinkerboard (Beta)][tinker]
- [Odroid-C2 (Beta)][odroid-c2]
- As a virtual appliance:
- [VMDK][vmdk]
+ - [VHDX (beta)][vhdx]
+ - [VDI (beta)][vdi]
- [OVA][Virtual Appliance] (not available at this time!)
2. Install Hass.io:
@@ -98,9 +100,11 @@ A detailed guide about running Hass.io as a virtual machine is available in the
[pi2]: https://github.com/home-assistant/hassos/releases/download/1.13/hassos_rpi2-1.13.img.gz
[pi3-32]: https://github.com/home-assistant/hassos/releases/download/1.13/hassos_rpi3-1.13.img.gz
[pi3-64]: https://github.com/home-assistant/hassos/releases/download/1.13/hassos_rpi3-64-1.13.img.gz
-[tinker]: https://github.com/home-assistant/hassos/releases/download/2.3/hassos_tinker-2.3.img.gz
-[odroid-c2]: https://github.com/home-assistant/hassos/releases/download/2.3/hassos_odroid-c2-2.3.img.gz
+[tinker]: https://github.com/home-assistant/hassos/releases/download/2.4/hassos_tinker-2.4.img.gz
+[odroid-c2]: https://github.com/home-assistant/hassos/releases/download/2.4/hassos_odroid-c2-2.4.img.gz
[vmdk]: https://github.com/home-assistant/hassos/releases/download/1.13/hassos_ova-1.13.vmdk.gz
+[vhdx]: https://github.com/home-assistant/hassos/releases/download/2.4/hassos_ova-2.4.vhdx.gz
+[vdi]: https://github.com/home-assistant/hassos/releases/download/2.4/hassos_ova-2.4.vdi.gz
[linux]: https://github.com/home-assistant/hassio-build/tree/master/install#install-hassio
[local]: http://hassio.local:8123
[samba]: /addons/samba/
From c0217b9f084497e74a04e99d72dfe884a8a82e15 Mon Sep 17 00:00:00 2001
From: Marvin Wichmann
Date: Wed, 19 Dec 2018 00:22:02 +0100
Subject: [PATCH 06/55] Updated docs of climate.knx (#7899)
---
source/_components/climate.knx.markdown | 54 +++++++++++++++++++++++++
1 file changed, 54 insertions(+)
diff --git a/source/_components/climate.knx.markdown b/source/_components/climate.knx.markdown
index 839be5243982..db1f0be4f657 100644
--- a/source/_components/climate.knx.markdown
+++ b/source/_components/climate.knx.markdown
@@ -47,6 +47,25 @@ climate:
operation_mode_comfort_address: '5/1/7'
```
+If you want to overwrite the supported operation modes use:
+
+```yaml
+# Example configuration.yaml entry
+climate:
+ - platform: knx
+ name: HASS-Kitchen.Temperature
+ temperature_address: '5/1/1'
+ setpoint_shift_address: '5/1/2'
+ setpoint_shift_state_address: '5/1/3'
+ target_temperature_address: '5/1/4'
+ operation_mode_frost_protection_address: '5/1/5'
+ operation_mode_comfort_address: '5/1/7'
+ override_supported_operation_modes:
+ - "Night"
+ - "Standby"
+ - "Comfort"
+```
+
{% configuration %}
name:
description: A name for this device used within Home Assistant.
@@ -112,6 +131,41 @@ operation_mode_comfort_address:
description: KNX address for switching on/off comfort mode.
required: false
type: string
+override_supported_operation_modes:
+ description: Defines the supported operation modes.
+ required: false
+ type: array
+on_off_address:
+ description: KNX address for switching the device on/off.
+ required: false
+ type: string
+on_off_state_address:
+ description: Explicit KNX address for reading the current on/off status.
+ required: false
+ type: string
{% endconfiguration %}
`operation_mode_frost_protection_address` / `operation_mode_night_address` / `operation_mode_comfort_address` are not necessary if `operation_mode_address` is specified.
+
+`override_supported_operation_modes` is an array that can contain any of the following values:
+
+- Auto
+- Comfort
+- Standby
+- Night
+- Frost Protection
+- Heat
+- Morning Warmup
+- Cool
+- Night Purge
+- Precool
+- Off
+- Test
+- Emergency Heat
+- Fan only
+- Ice
+- Dry
+- NoDem
+
+Also check [this](https://github.com/XKNX/xknx/blob/master/xknx/knx/dpt_hvac_mode.py#L13-L30) page for more information.
+
From 1763f5f771705839450f138c38db1915afcc9873 Mon Sep 17 00:00:00 2001
From: Paulus Schoutsen
Date: Wed, 19 Dec 2018 12:04:09 +0100
Subject: [PATCH 07/55] Update logitech post
---
sass/custom/_paulus.scss | 2 +-
...ogitech-harmony-removes-local-api.markdown | 16 +++++--
...2-19-logitech-stance-on-local-api.markdown | 39 ++++++++++++++++++
.../forum-post-3.png | Bin 0 -> 112485 bytes
4 files changed, 53 insertions(+), 4 deletions(-)
create mode 100644 source/_posts/2018-12-19-logitech-stance-on-local-api.markdown
create mode 100644 source/images/blog/2018-12-logitech-harmony-removes-local-api/forum-post-3.png
diff --git a/sass/custom/_paulus.scss b/sass/custom/_paulus.scss
index 142841d06aac..f0c233ec1068 100644
--- a/sass/custom/_paulus.scss
+++ b/sass/custom/_paulus.scss
@@ -458,7 +458,7 @@ a code {
color: $primary-color;
}
-twitterwidget {
+twitter-widget {
margin-left: auto;
margin-right: auto;
}
diff --git a/source/_posts/2018-12-17-logitech-harmony-removes-local-api.markdown b/source/_posts/2018-12-17-logitech-harmony-removes-local-api.markdown
index abd69fdd0e3b..9ba7c372ced4 100644
--- a/source/_posts/2018-12-17-logitech-harmony-removes-local-api.markdown
+++ b/source/_posts/2018-12-17-logitech-harmony-removes-local-api.markdown
@@ -1,6 +1,6 @@
---
layout: post
-title: "Logitech Harmony removes local API"
+title: "[Update: not a mistake] Logitech Harmony removes local API"
description: "Logitech has disabled the local API of the Harmony Hub with their latest software update. For privacy and speed it is important that home automation devices communicate locally, without data leaving the network."
date: 2018-12-17 00:01:00
date_formatted: "December 17, 2018"
@@ -14,8 +14,6 @@ Logitech has disabled the local API of the Harmony Hub with their latest softwar
We hope that this was an oversight on their end and that it will be reverted shortly. We have reached out to Logitech for a clarification and will update this post when available. Until this is resolved, we no longer recommend buying or using Logitech products.
-_This is a developing story that we will update as more information becomes available._
-
**Update 1 (17 dec):** still no response on our inquiries but Twitter user [@FlorianNoack](https://twitter.com/FlorianNoack/status/1074744105002037248?s=09) found an answer from Logitech on [a thread on their forums](https://community.logitech.com/s/question/0D55A00008D1oIoSAJ/firmware-update-blocked-api-access) (visible after clicking a few times on "More answers"):
@@ -43,6 +41,18 @@ _This is a developing story that we will update as more information becomes avai
[@chadcb]: https://github.com/chadcb
+**Update 5 (19 dec):** Logitech has posted an official response on [their forums](https://community.logitech.com/s/question/0D55A00008D4bZ4SAJ/harmony-hub-firmware-update-fixes-vulnerabilities). They claim that they removed the local XMPP API after a report from a third-party cyber security firm. We have been unable to verify if this is true. The XMPP API has been around since [at least 2013](https://github.com/jterrace/pyharmony) and has been widely adopted within smart homes worldwide. In their forum post they write that they are aware it was being used, yet they did not consider giving any form of heads up, proofing to be an unreliable part of our smart homes.
+
+
+
+We will be releasing a hot fix today to migrate our integration to another local API that is being used by their iOS app. Expect it to suffer the same faith at a future point.
+
+
+
+ Thread by member of the Harmony Team.
+
+
### {% linkable_title Reverting the software update %}
If you have already updated your Harmony Hub to v4.15.206, you have probably noticed that Home Assistant and other products communicating with the local API have stopped working. Don’t worry, it’s (still?) possible to downgrade to a previous version using the following steps (source: [Reddit 1](https://www.reddit.com/r/homeassistant/comments/a6u6ep/psa_harmony_hub_firmware_v415206_breaksremoves/), [Reddit 2](https://www.reddit.com/r/homeassistant/comments/a6u6ep/psa_harmony_hub_firmware_v415206_breaksremoves/eby89t8/)):
diff --git a/source/_posts/2018-12-19-logitech-stance-on-local-api.markdown b/source/_posts/2018-12-19-logitech-stance-on-local-api.markdown
new file mode 100644
index 000000000000..027f3b64e0c4
--- /dev/null
+++ b/source/_posts/2018-12-19-logitech-stance-on-local-api.markdown
@@ -0,0 +1,39 @@
+---
+layout: post
+title: "Logitech's stance on local APIs"
+description: "Logitech states that it does not intend to make a local API available."
+date: 2018-12-19 00:01:00
+date_formatted: "December 19, 2018"
+author: Paulus Schoutsen
+author_twitter: balloob
+comments: true
+categories: Public-Service-Announcement
+---
+
+Logitech has decided to remove a widely used local API of their Logitech Harmony hub. We've been tracking the story [here][blog-remove-api]. This has caused a lot of commotion among our users, and users of other smart home solutions, that integrated with the Logitech Harmony hub and all of a sudden were surprised with a broken smart home. Not a nice way to start the already busy holiday season!
+
+Since it's 2018, a lot of these discussions are playing out on Twitter. While browsing the discussions, we came across this statement by a senior manager for product marketing for Logitech Smart Home, [Todd Walker]:
+
+
+
+We have a lot of opinions about this, but felt that they were appropriately covered by Twitter user, and contributor to Home Assistant, [Jon Maddox]:
+
+
+
+
+
+
+
+
+
+
+
+[blog-remove-api]: /blog/2018/12/17/logitech-harmony-removes-local-api/
+[Todd Walker]: https://twitter.com/ToddW_Logitech
+[Jon Maddox]: https://twitter.com/maddox
diff --git a/source/images/blog/2018-12-logitech-harmony-removes-local-api/forum-post-3.png b/source/images/blog/2018-12-logitech-harmony-removes-local-api/forum-post-3.png
new file mode 100644
index 0000000000000000000000000000000000000000..51d0de0d661d25862e7290a474c9323a20182bd8
GIT binary patch
literal 112485
zcma%hWmH^2)8=5o0tA9vaCe8`?(Q%IcY+QU9D+lDAi*s-48dV=cb7qe1!o8lU~pO9
z@7w*gXQhAi?Q^@kZl9{BtE!*AF`DWMSQw-j0000>Nl{iC06+l)0Lam3NUv`uB+5$x
z07QCCRb9E4mls}M-gl|jPft&Le0&ZL4x*x>y9ey9uCBtu!gqIf5)u;5F0LslDVmy^
zOG`_8dwVrCH7hGCM@L7crKM_WY7Y+&ZEbA=0s?S2Tux3dKR-VqA;H<%`QN{PnVFfn
zxw%qOQuX!qfB*gs4i283ojp4{OG--G+}!l@^HWk%y1cyn_3PKo%}ron;N;}w`uh6z
z_I7b`v8ShJWMrg_j7)QL%i!Q32m~rGFOP|d86O{?pP%pS>@+em3J(u=cX!v-)ip3M
zXl!h>u&}VTwe9Wg1p>eHuBm6et0>FGW`J|-q6?d|RUU%ogwImN}r|M>A^czAeZ
zWTar`acpd?e&vxc?b^5V-mLD9Df@;t^F|>5R;>8ers;m~;`#LEC2Q)@1M+Zm^&Hy!
zaR2nOb^an-dbe`&YyiG1UwFECc#a%+;LN?bxO?f{dYU_WjvIO)OTV5xcxqmI`Z@pT
z*nF>Cen(97er)eKW%NTdD)`AheG$Ho(7#!dS8L&ET*OY8mM&T|d)Y3A^Wh8iD!
z|6C2G&(5X!cbT<+B-z=^7?(gjHOu_>Ea3MhD?2NpkPuNo(1+)ztB1#3_)YsIyyg&Q
z{Mn7-_I{38#^LD1N?x9Lcx1G!u8)A*RNs&cXhyE9Lz?nE9rK&OBmklDK}l9h*LU@#
zH}n-mfRKWx3Ze?c|1|%P#di7>NQzcO6*8Uti`8K+S_&7rIL)$0-o?3*J2u)pmm&5m
z4kj+H&MkuDhw*jG?A=qeJF*07mRmnYqBF!x*a1IIDG3eDeS5R3Db%>8=C8<3i+#!C@0J(3u|h03dFpmu;P2T(>|~|@sg$S$m_H |