From 9e754832c6ade9b1daa5c245fc7c57862d7fe300 Mon Sep 17 00:00:00 2001 From: tronikos Date: Sun, 23 Feb 2025 07:23:36 -0800 Subject: [PATCH 1/5] Document debug logging in Google Generative AI (#37622) --- .../google_generative_ai_conversation.markdown | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/source/_integrations/google_generative_ai_conversation.markdown b/source/_integrations/google_generative_ai_conversation.markdown index 8429aa2517c..b92db2b9ea6 100644 --- a/source/_integrations/google_generative_ai_conversation.markdown +++ b/source/_integrations/google_generative_ai_conversation.markdown @@ -34,7 +34,7 @@ This integration requires an API key to use, [which you can generate here](https {% include integrations/config_flow.md %} -### Generate an API Key +## Generate an API Key The Google Generative AI API key is used to authenticate requests to the Google Generative AI API. To generate an API key take the following steps: @@ -126,8 +126,19 @@ response_variable: generated_content ``` {% endraw %} -### Video tutorial +## Video tutorial This video tutorial explains how Google Generative AI can be set up, how you can send an AI-generated message to your smart speaker when you arrive home, and how you can analyze an image taken from your doorbell camera as soon as someone rings the doorbell. + +## Troubleshooting + +- To aid in diagnosing issues it may help to turn up verbose logging by adding these to your {% term "`configuration.yaml`" %}: + +```yaml +logger: + logs: + homeassistant.components.conversation: debug + homeassistant.components.google_generative_ai_conversation: debug +``` From 01273770fc8e64374e498b656cfbb66d55de80c3 Mon Sep 17 00:00:00 2001 From: Simone Chemelli Date: Sun, 23 Feb 2025 16:30:17 +0100 Subject: [PATCH 2/5] Add more details to appliance/consumption type for Shelly (#37610) --- source/_integrations/shelly.markdown | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/source/_integrations/shelly.markdown b/source/_integrations/shelly.markdown index 68de4530b87..e17bda538e0 100644 --- a/source/_integrations/shelly.markdown +++ b/source/_integrations/shelly.markdown @@ -245,11 +245,11 @@ Not all devices support all input events. You can check on [Shelly API Reference ## Appliance type (generation 1) -Shelly device relays are added to Home Assistant by default as `switch` entities. A relay can be added as a `light` entity if **Settings** >> **APPLIANCE TYPE** value is set to `light`. +Shelly device relays are added to Home Assistant by default as `switch` entities. A relay can be added as a `light` entity if **Settings** >> **APPLIANCE TYPE** value in the WebUI of the device is set to `light`. ## Consumption type (generation 2+) -Shelly device relays are added to Home Assistant by default as `switch` entities. A relay can be added as a `light` entity if **EXTERNAL CONSUMPTION TYPE** value is set to `light`. +Shelly device relays are added to Home Assistant by default as `switch` entities. A relay can be added as a `light` entity if **EXTERNAL CONSUMPTION TYPE** value in the WebUI of the device is set to `light`. ## Light transition From 410f3c9b89275f10b825c13c4a8be7dc1e983984 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 24 Feb 2025 07:28:46 +0100 Subject: [PATCH 3/5] build(deps-dev): bump sorbet-runtime from 0.5.11845 to 0.5.11851 (#37652) Bumps [sorbet-runtime](https://github.com/sorbet/sorbet) from 0.5.11845 to 0.5.11851. - [Release notes](https://github.com/sorbet/sorbet/releases) - [Commits](https://github.com/sorbet/sorbet/commits) --- updated-dependencies: - dependency-name: sorbet-runtime dependency-type: indirect update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- Gemfile.lock | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Gemfile.lock b/Gemfile.lock index dc95a17ca0c..39cff3dffb0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -158,7 +158,7 @@ GEM rack-protection (= 4.1.1) rack-session (>= 2.0.0, < 3) tilt (~> 2.0) - sorbet-runtime (0.5.11845) + sorbet-runtime (0.5.11851) stringex (2.8.6) terminal-table (3.0.2) unicode-display_width (>= 1.1.1, < 3) From 3c5fd6b4867cb8c1ac5db3735202f8bd0ca5d9ac Mon Sep 17 00:00:00 2001 From: kylehakala Date: Mon, 24 Feb 2025 06:55:28 -0600 Subject: [PATCH 4/5] ZHA: organize backup/migration section, clean up migration steps. (#37499) * ZHA: organize backup/migration sections * ZHA: clean up network migration steps * Update source/_integrations/zha.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update source/_integrations/zha.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update source/_integrations/zha.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update source/_integrations/zha.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> * Update source/_integrations/zha.markdown Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --------- Co-authored-by: c0ffeeca7 <38767475+c0ffeeca7@users.noreply.github.com> --- source/_integrations/zha.markdown | 69 +++++++++++++++++++------------ 1 file changed, 42 insertions(+), 27 deletions(-) diff --git a/source/_integrations/zha.markdown b/source/_integrations/zha.markdown index 657dab2db0f..6b336c9ca63 100644 --- a/source/_integrations/zha.markdown +++ b/source/_integrations/zha.markdown @@ -447,51 +447,66 @@ For example, binding a "target destination" Zigbee device like a remote to a Zig Note that not all devices support binding. By default, ZHA binds remotes to the coordinator, so click events are forwarded to HA. As some remotes can only be bound to a single destination, you might need to unbind the remote from the coordinator before binding it to another device or group. -## Zigbee backup and restore in ZHA +## Backups and migration -Zigbee Home Automation (ZHA) {% term integration %} now features Zigbee network backup, restore/recovery, and migrating between Zigbee coordinators. Backups are taken automatically. However, a single backup to a file for easy download can also be manually created from the configuration page under Network Settings. +The ZHA {% term integration %} performs automatic backups of your Zigbee network allowing you to restore/recover the network from a backup or migrate to a different Zigbee Coordinator (radio adapter). -After restoring a Home Assistant backup, you can re-configure ZHA and migrate to a new Zigbee Coordinator adapter without any loss of your settings or devices that were connected. This is helpful if your current radio fails or a new radio adapter type and model comes out that you may want to migrate to. +After restoring a Home Assistant backup, you can reconfigure ZHA or migrate to a new Zigbee Coordinator without any loss of your settings or devices that were connected. This can be helpful if your current radio fails or a new radio adapter type/model comes out that you want to migrate to. -Within ZHA it is possible to use this backup and restore feature to migrate between some different radio types, if the respective radio library supports it. Currently, ZHA supports migrating the Zigbee network between different Zigbee Coordinator adapters based on chips from Silicon Labs, Texas Instruments, or ConBee/RaspBee if the backup was made from inside ZHA. +Manual backups can also be created from the configuration page under **Network Settings**. -## Migrating to a new Zigbee coordinator adapter inside ZHA +### Migrating to a new Zigbee Coordinator adapter inside ZHA -Follow this guide if you have a Zigbee Home Assistant (ZHA) network running and want to migrate from one Zigbee coordinator radio adapter to another Zigbee coordinator radio adapter. +ZHA supports migrating the Zigbee network between different Zigbee Coordinators based on chips from Silicon Labs, Texas Instruments, or ConBee/RaspBee if the backup was made from inside ZHA. -### Prerequisites +#### Prerequisites -- Your old Zigbee Coordinator radio adapter is used in the ZHA {% term integration %} (not in deCONZ or MQTT). -- It is of radio type ezsp (Silicon Labs EmberZnet), znp (Texas Instruments Z-Stack ZNP), or deCONZ (ConBee/RaspBee from dresden elektronik). - - If your old Zigbee coordinator is a deCONZ (ConBee/RaspBee) radio adapter, make sure it is running [firmware 0x26700700 (from 2021-08-18)](https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/Firmware-Changelog) or later. +To migrate your Zigbee network from one Zigbee Coordinator to another, confirm you meet the following requirements before proceeding with the migration process: -### To migrate to a new Zigbee coordinator radio inside ZHA +- The previous Zigbee Coordinator is used in the ZHA {% term integration %} and _not_ in deCONZ or MQTT. +- The radio type is one of the following: + - ezsp (Silicon Labs EmberZnet) + - znp (Texas Instruments Z-Stack ZNP) + - deCONZ (ConBee/RaspBee from dresden elektronik) + - For deCONZ (ConBee/RaspBee) radio adapters, make sure it is running [firmware 0x26700700 (from 2021-08-18)](https://github.com/dresden-elektronik/deconz-rest-plugin/wiki/Firmware-Changelog) or later. + +#### To migrate to a new Zigbee coordinator radio inside ZHA 1. Go to **{% my integrations title="Settings > Devices & services" %}** and select the ZHA {% term integration %}. Then select **Configure**. 2. Under **Network settings**, select **Migrate radio**. 3. Reconfiguration of ZHA will start. Select **Submit**. 4. Under **Migrate or re-configure**, select **Migrate to a new radio**. -5. **Migrate to a new radio** will inform you that an automatic backup will be performed and that your old Zigbee coordinator radio will then be reset before the backup is automatically restored. - - Select **Submit**. -6. **Unplug your old radio** will inform you that your old Zigbee coordinator radio has been reset and that you can now plug in your new Zigbee coordinator radio adapter. - - To avoid interference, use a USB extension cable. - - Use a USB 2.0 port or a powered USB 2.0 hub and keep the Zigbee stick away from USB 3.0 devices. - - You may now also choose to either unplug your old Zigbee coordinator radio adapter or keep your old radio plugged in. - - If that radio was a combined Z-Wave and Zigbee radio, like the HUSBZB-1 adapter, then only the Zigbee radio part of it was reset. Confirm that the Zigbee Coordinator radio adapter is properly connected and select **Submit**. -7. You now need to start the backup restore process. - - Select your new Zigbee radio from the list of serial ports and select **Next**. - - If your new radio does not appear or you need to reboot after plugging in new hardware, you can resume the migration after a reboot: under **Network Settings**, select **Re-configure the current radio** and choose your new radio. +5. Select **Submit** to begin. + - An automatic backup will be performed, the Zigbee Coordinator radio will be reset, and the backup will be automatically restored. + - For combined Z-Wave and Zigbee radios, like the HUSBZB-1 adapter, only the Zigbee radio portion is reset. + - You may now unplug the old adapter, or you may leave the old radio adapter plugged in (for example, if the adapter is a combined Z-Wave adapter). +6. Plug in the new Zigbee Coordinator radio adapter. + - Select **Submit** after confirming the new Zigbee Coordinator radio adapter is properly connected. + - To minimize interference: + - Use a USB extension cable, + - Use a USB 2.0 port or a powered USB 2.0 hub, + - Keep the Zigbee stick away from USB 3.0 devices. +7. Start the backup restore process: + - Select the new Zigbee radio from the list of serial ports and select **Next**. + - A migration can be resumed if a reboot is required, such as when troubleshooting or if new hardware is plugged in. + - To resume, go to **Network Settings**, select **Re-configure the current radio**, choose the new radio and proceed. 8. Under **Network Formation**, select **Restore an automatic backup**. 9. Under **Restore Automation Backup**, choose the latest automatic backup and select **Submit**. -10. If your radio requires overwriting the IEEE address, you will see a screen titled **Overwrite Radio IEEE Address**. Check the **Permanently replace the radio IEEE address** box and click **Submit**. Overwriting the IEEE address may take a while. - - Your old Zigbee Coordinator radio and your new stick will now have the same Zigbee IEEE address (unique MAC address for the Zigbee device). - - Selecting this option is required for the migration process to complete successfully. - - From this point onwards, you should not operate the old stick in the same area unless you change the Zigbee IEEE address on it. - - If you do not migrate the Zigbee IEEE address from your old Zigbee Coordinator radio, then you will have to re-join/re-pair many of your devices in order to keep them working. +10. If the new radio requires overwriting the IEEE address (the unique MAC address), you will see the prompt for **Overwrite Radio IEEE Address**. + - Check the **Permanently replace the radio IEEE address** box and click **Submit**. + - Selecting this option is required for the migration process to complete successfully. + - Overwriting the IEEE address may take a while. + - Both the old and new Zigbee Coordinators will now have the same Zigbee IEEE address. + - You should not operate the old adapter in the same area unless you change its Zigbee IEEE address. + - If you do not migrate the Zigbee IEEE address from the old Zigbee Coordinator radio, you will have to reconnect many of your devices to keep them working. 11. Finally, a **Success!** message should pop up with information that all options were successfully saved. - Select **Finish** to confirm. -The migration process is complete. However, be aware that you will not be able to control your existing Zigbee devices until the new coordinator fully joins the network. This process can take a few minutes. If some existing devices do not function after some time, try power-cycling them to allow them to re-join the network. +{% important %} +You will not be able to control your existing Zigbee devices until the new coordinator fully joins the network after the migration. **This can take a few minutes.** + +If some existing devices do not resume normal functions after some time, try power-cycling them to attempt rejoining to the network. +{% endimportant %} ## Troubleshooting From 0a72ae0bec203695a902a5ba125a019541fd4d01 Mon Sep 17 00:00:00 2001 From: Darren Griffin Date: Mon, 24 Feb 2025 13:14:33 +0000 Subject: [PATCH 5/5] Update distributors (#37656) * Update products.yml * Add Inet logo * Fix typo --- source/_data/products.yml | 20 ++++++++++++++++++++ source/images/distributors/inet.webp | Bin 0 -> 13140 bytes 2 files changed, 20 insertions(+) create mode 100644 source/images/distributors/inet.webp diff --git a/source/_data/products.yml b/source/_data/products.yml index 1b3b03fdcee..4eafcce2285 100644 --- a/source/_data/products.yml +++ b/source/_data/products.yml @@ -150,6 +150,11 @@ green: ship_to: Europe url: https://www.wifishop.ro/en/homeassistant/home-assistant-green.html logo: /images/distributors/wifishop.webp + - name: Inet.se + ship_from: Sweden + ship_to: Europe + url: https://www.inet.se/produkt/8310063/home-assistant-green + logo: /images/distributors/inet.webp yellow: name: "Home Assistant Yellow" distributors: @@ -349,6 +354,11 @@ zbt-1: ship_to: Europe url: https://www.wifishop.ro/en/homeassistant/home-assistant-skyconnect.html logo: /images/distributors/wifishop.webp + - name: Inet.se + ship_from: Sweden + ship_to: Europe + url: https://www.inet.se/produkt/8310064/home-assistant-connect-zbt-1 + logo: /images/distributors/inet.webp voice-pe: name: "Home Assistant Voice Preview Edition" distributors: @@ -456,3 +466,13 @@ voice-pe: ship_to: Europe url: https://shop.pimoroni.com/products/home-assistant-voice logo: /images/distributors/pimoroni.webp + - name: Inet.se + ship_from: Sweden + ship_to: Europe + url: https://www.inet.se/produkt/8310094/home-assistant-voice-preview-edition + logo: /images/distributors/inet.webp + - name: Pi-Shop.ch + ship_from: Switzerland + ship_to: Europe + url: https://www.pi-shop.ch/home-assistant-voice-preview-edition + logo: /images/distributors/pi-shop.webp diff --git a/source/images/distributors/inet.webp b/source/images/distributors/inet.webp new file mode 100644 index 0000000000000000000000000000000000000000..106f75dce6034037fc0bf730fc66f1f35fe83525 GIT binary patch literal 13140 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 literal 0 HcmV?d00001