From 378e8e8b1bec37fe910a9670cf89ceb32771b83b Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Tue, 22 Oct 2024 23:03:13 +0200 Subject: [PATCH 1/7] Refactor the resources in docs (#626) * Refactor the resources in docs * Add alt text to image --- docs/docs/getting-started.mdx | 4 +- docs/docs/introduction.mdx | 2 +- docs/docs/reference/diagram.mdx | 49 -------------------- docs/docs/{reference => resources}/cases.mdx | 4 +- docs/docs/resources/gpio.mdx | 31 +++++++++++++ docs/docs/resources/schematics.mdx | 27 +++++++++++ docs/sidebars.ts | 15 +++--- 7 files changed, 71 insertions(+), 61 deletions(-) delete mode 100644 docs/docs/reference/diagram.mdx rename docs/docs/{reference => resources}/cases.mdx (98%) create mode 100644 docs/docs/resources/gpio.mdx create mode 100644 docs/docs/resources/schematics.mdx diff --git a/docs/docs/getting-started.mdx b/docs/docs/getting-started.mdx index 47716a54..dcc451bf 100644 --- a/docs/docs/getting-started.mdx +++ b/docs/docs/getting-started.mdx @@ -35,7 +35,7 @@ If you would like to prototype, I can also recommend the following items: Keep in mind that besides the photodiode board there are also boards in circulation with an LDR. The expansion board is optional, but makes it easier to connect and prototype with the components. ::: -How everything should be connected can be found on the [wiring diagram](/docs/reference/diagram). Once this is done, you can proceed to step 2. +How everything should be connected can be found on the [wiring diagram](/docs/resources/schematics). Once this is done, you can proceed to step 2. ## Step 2: Install firmware @@ -119,7 +119,7 @@ For problems with the measurements, see the [FAQ page](/docs/faq). ## Step 5: Print Enclosure -The last step is to print a housing, the files for this can be found on the [cases page](/docs/reference/cases). If you do not have a 3D printer, there are platforms where you could place a print job or mount the Home Assistant Glow in a creative way 🙃 (my first concept was with cardboard). +The last step is to print a housing, the files for this can be found on the [cases page](/docs/resources/cases). If you do not have a 3D printer, there are platforms where you could place a print job or mount the Home Assistant Glow in a creative way 🙃 (my first concept was with cardboard). ## Step 6: Sit back and relax diff --git a/docs/docs/introduction.mdx b/docs/docs/introduction.mdx index c0849482..79bea4cf 100644 --- a/docs/docs/introduction.mdx +++ b/docs/docs/introduction.mdx @@ -8,7 +8,7 @@ description: What is the Home Assistant Glow?s During my internship at [Nabu Casa](https://www.nabucasa.com) in the first half of 2021, I focused on energy management for your house, how to collect all energy data and display it on a dashboard. Since Home Assistant release **2021.8** it's possible to use the [Home Assistant Energy](https://www.home-assistant.io/home-energy-management) dashboard to display your energy usage. Unfortunately, not everyone has a smart meter and/or is equipped with a P1 port. This is where the Home Assistant Glow comes in! -## What is this thing? +## What does it do? Home Assistant Glow makes a (not so) smart meter without a P1 port easily readable, using the pulse LED that is always present in most cases and it works with [ESPHome](https://esphome.io)! To neatly hide it all in your meter cupboard, a case has been designed that you can 3D print yourself. diff --git a/docs/docs/reference/diagram.mdx b/docs/docs/reference/diagram.mdx deleted file mode 100644 index 4da9135f..00000000 --- a/docs/docs/reference/diagram.mdx +++ /dev/null @@ -1,49 +0,0 @@ ---- -id: diagram -title: Diagram -description: How to connect the Photodiode and Status LED based on diagrams ---- - -# Diagrams - -On this page you will find GPIO pin tables for the Photodiode and Status LED, as well as a wiring diagram of how everything is connected. - -## Wiring diagram - -Below you will find a wiring diagram of how everything is connected, depending on the type of board you use, the [GPIO pins](#gpio-pins) may be in a different place. You could also omit the status LED if desired. - -

- -

- -:::important -Please note that there are different boards in circulation and that the GPIO -pins may be on a different location than in the example above. So always double -check and, if necessary, consult the pin layout of your specific board. -::: - -## GPIO pins - -In the tables below you will find more information, about how to connect the Photodiode PCB and the status LED. - -### Photodiode - -How the Photodiode is connected to the ESP board of your choice. - -| PHOTODIODE | ESP32 | ESP8266 | -|------------|--------------|-------------| -| A0 | NOT USING | NOT USING | -| DO | D26 (GPIO26) | D7 (GPIO13) | -| VCC | 3V3 | 3V3 | -| GND | GND | GND | - -### Status LED - -How the status LED is connected to the ESP board of your choice. For each measured pulse, the LED will briefly flash *red* and in case of no WiFi connection, the LED will continue to flash *blue*. - -| LED | ESP32 | ESP8266 | -|--------|------------|------------| -| RED | D2 (GPIO2) | D4 (GPIO2) | -| GREEN | D4 (GPIO4) | D2 (GPIO4) | -| BLUE | D5 (GPIO5) | D1 (GPIO5) | -| GND | GND | GND | \ No newline at end of file diff --git a/docs/docs/reference/cases.mdx b/docs/docs/resources/cases.mdx similarity index 98% rename from docs/docs/reference/cases.mdx rename to docs/docs/resources/cases.mdx index e547275c..7783bb4a 100644 --- a/docs/docs/reference/cases.mdx +++ b/docs/docs/resources/cases.mdx @@ -1,10 +1,10 @@ --- id: cases -title: Cases +title: 3D Printed Cases description: Collection of all cases that you can 3D print --- -# Cases +# 3D Printed Cases On this page you will find all the cases that you can 3D print for the Home Assistant Glow. If you've made some changes on the cases, I'd appreciate it if you add the new case design to the repository for everyone to benefit 😉 diff --git a/docs/docs/resources/gpio.mdx b/docs/docs/resources/gpio.mdx new file mode 100644 index 00000000..9ffa2ae8 --- /dev/null +++ b/docs/docs/resources/gpio.mdx @@ -0,0 +1,31 @@ +--- +id: gpio +title: GPIO Pinout +description: GPIO pinout of the ESP32 and ESP8266 boards +--- + +# GPIO Pinout + +In this section, you will find the GPIO pinout of the ESP32 and ESP8266 boards. The GPIO pins are used to connect the Photodiode and Status LED to the ESP board of your choice. + +## Photodiode + +How the Photodiode is connected to the ESP board of your choice. + +| PHOTODIODE | ESP32 | ESP8266 | +|------------|--------------|-------------| +| A0 | NOT USING | NOT USING | +| DO | D26 (GPIO26) | D7 (GPIO13) | +| VCC | 3V3 | 3V3 | +| GND | GND | GND | + +## Status LED + +How the status LED is connected to the ESP board of your choice. For each measured pulse, the LED will briefly flash *red* and in case of no WiFi connection, the LED will continue to flash *blue*. + +| LED | ESP32 | ESP8266 | +|--------|------------|------------| +| RED | D2 (GPIO2) | D4 (GPIO2) | +| GREEN | D4 (GPIO4) | D2 (GPIO4) | +| BLUE | D5 (GPIO5) | D1 (GPIO5) | +| GND | GND | GND | \ No newline at end of file diff --git a/docs/docs/resources/schematics.mdx b/docs/docs/resources/schematics.mdx new file mode 100644 index 00000000..cc25cf93 --- /dev/null +++ b/docs/docs/resources/schematics.mdx @@ -0,0 +1,27 @@ +--- +id: schematics +title: Schematics +description: How to connect the Photodiode and Status LED based on wiring diagram +--- + +# Schematics + +In this section, you will find the wiring diagram of how to connect the Photodiode and Status LED to the ESP board of your choice. + +## Wiring diagram + +Below you will find a wiring diagram of how everything is connected, depending on the type of board you use, the [GPIO pins](/docs/resources/gpio) may be in a different place. You could also omit the status LED if desired. + +

+ Wiring diagram showing connections between Photodiode, Status LED, and ESP board +

+ +:::important +Please note that there are different boards in circulation and that the GPIO +pins may be on a different location than in the example above. So always double +check and, if necessary, consult the pin layout of your specific board. +::: \ No newline at end of file diff --git a/docs/sidebars.ts b/docs/sidebars.ts index 37750b10..333dc612 100644 --- a/docs/sidebars.ts +++ b/docs/sidebars.ts @@ -18,20 +18,21 @@ const sidebars: SidebarsConfig = { 'configuration', { type: 'category', - collapsed: false, - label: 'Reference', + label: 'Advanced', items: [ - 'reference/diagram', - 'reference/cases', + 'advanced/firmware_customization', ], }, { type: 'category', - label: 'Advanced', + collapsed: false, + label: 'Resources', items: [ - 'advanced/firmware_customization', + 'resources/schematics', + 'resources/gpio', + 'resources/cases', ], - } + }, ], // But you can create a sidebar manually From a8dc6359c010cbc5e47bd9b70c052f18197ea678 Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Wed, 23 Oct 2024 01:00:27 +0200 Subject: [PATCH 2/7] Refactor the configuration section (#627) * Refactor the configuration section * Apply suggestions from code review Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> * Improve readability of the renaming documentation by consolidating sentences --------- Co-authored-by: coderabbitai[bot] <136622811+coderabbitai[bot]@users.noreply.github.com> --- docs/docs/configuration.mdx | 44 ------------------ docs/docs/configuration/energy_dashboard.md | 37 ++++++++++++++++ docs/docs/configuration/pulse_rate.mdx | 34 ++++++++++++++ docs/docs/configuration/rename.mdx | 49 +++++++++++++++++++++ docs/docs/getting-started.mdx | 2 +- docs/sidebars.ts | 11 ++++- 6 files changed, 131 insertions(+), 46 deletions(-) delete mode 100644 docs/docs/configuration.mdx create mode 100644 docs/docs/configuration/energy_dashboard.md create mode 100644 docs/docs/configuration/pulse_rate.mdx create mode 100644 docs/docs/configuration/rename.mdx diff --git a/docs/docs/configuration.mdx b/docs/docs/configuration.mdx deleted file mode 100644 index 50295411..00000000 --- a/docs/docs/configuration.mdx +++ /dev/null @@ -1,44 +0,0 @@ ---- -id: configuration -title: Configuration ---- - -## Changing the Device Name - -When you first add your device to Home Assistant, it's assigned a default name like `home-assistant-glow-XXXXXX`, -where `XXXXXX` is a portion of the device's MAC address. While functional, this default name isn't very user-friendly -or descriptive, especially if you have multiple devices. Renaming it to something more meaningful helps with organization -and makes it easier to recognize within your smart home setup. - -### How to Rename Your Device - -To change the name of your device, follow these steps: - -1. Open the Home Assistant user interface. -2. Navigate to **Settings** > **Devices & Services**. -3. Under the **ESPHome** section, find and select your device. If you have multiple devices, you may need to identify it by its current name (the default format described earlier). - -Alternatively, you can click the badge below to be taken directly to the ESPHome devices overview page: - -[![Open your Home Assistant instance and show an integration.](https://my.home-assistant.io/badges/integration.svg)][esphome-devices] - -4. Once on the device's page, locate the pencil icon in the top-right corner. Clicking this icon will allow you to edit the device name. -5. Enter your preferred name, something that reflects the purpose or location of the device (e.g., “Home Assistant Glow” or “Glow Energy”). This will help you easily identify it later. -6. Click **Update** to apply the changes and save the new name. - -

- -

- -### Renaming Entity IDs (Optional) - -After renaming the device, Home Assistant may prompt you to rename the associated entity IDs as well. Entity IDs are used to reference your device in automations, dashboards, and other parts of Home Assistant. - -- **If you haven't created any automations or dashboards yet**: It's generally a good idea to rename the entity IDs to match the new device name. This makes them easier to recognize and use in future configurations. -- **If you already have automations or dashboards**: You may want to keep the existing entity IDs if they are already used in various setups. Renaming the entity IDs will require you to update those configurations to reference the new names. In this case, you can opt to change only the device name and leave the entity IDs as they are. - -## Related links - -- [Home Assistant - Terminology](https://home-assistant.io/getting-started/concepts-terminology) - -[esphome-devices]: https://my.home-assistant.io/redirect/integration/?domain=esphome \ No newline at end of file diff --git a/docs/docs/configuration/energy_dashboard.md b/docs/docs/configuration/energy_dashboard.md new file mode 100644 index 00000000..0de10316 --- /dev/null +++ b/docs/docs/configuration/energy_dashboard.md @@ -0,0 +1,37 @@ +--- +id: energy_dashboard +title: Energy Dashboard +description: Learn how to set up an energy dashboard in Home Assistant to monitor your energy usage. +--- + +# Add to Energy Dashboard + +To monitor your energy usage, you can add the Home Assistant Glow to the [Energy Dashboard][energy]. This dashboard provides an overview of your energy consumption, costs, and trends over time. + +## Which entities to add? + +You can choose between the following entities to add to the Energy Dashboard: + +- **sensor.home_assistant_glow_daily_energy** +- **sensor.home_assistant_glow_total_energy** + +It doesn't matter if the entity resets during the day for example due to an update/or hard reset after reboot. The long-term statistics in Home Assistant can handle that. + +## Step-by-step guide to add entities + +1. Open your Home Assistant dashboard/interface. +2. From the sidebar, click on **Energy**. +3. Click on the 3 dots in the top right corner and select **Energy Configuration**. +4. Click on **Add Consumption** and select the entity you want to add. +5. Optionally, you can setup the cost of your energy provider to get an overview of your energy costs. +6. Click **Save** to apply the changes. + +:::note +If your Glow has just been added to Home Assistant, you may need to wait up to 2 hours before enough long-term statistics are stored to show in the Energy Dashboard. +::: + +## Helpful resources + +- [Home Assistant - Energy Management][energy] + +[energy]: https://www.home-assistant.io/docs/energy \ No newline at end of file diff --git a/docs/docs/configuration/pulse_rate.mdx b/docs/docs/configuration/pulse_rate.mdx new file mode 100644 index 00000000..3739383f --- /dev/null +++ b/docs/docs/configuration/pulse_rate.mdx @@ -0,0 +1,34 @@ +--- +id: pulse_rate +title: Pulse Rate +description: Learn how to adjust the pulse rate of your Home Assistant Glow device to match your energy meter. +--- + +# Adjust the Pulse Rate + +The Glow uses a pulse meter to track energy usage, which requires setting the correct pulse rate to match your energy meter. This ensures accurate energy monitoring and tracking in Home Assistant. + +In most cases, the correct pulse rate is set during the [getting started](/docs/getting-started#step-4-configure-the-pulse-rate) guide, but you can easily adjust it later if needed. If the pulse rate hasn't been changed yet, the Glow defaults to `1000` **imp/kWh**, which is commonly used in the Netherlands. However, you may need to modify this value based on your energy meter's specifications. + +You can adjust the value in 2 ways: + +### Option 1: Via the web interface + +You open the web server by going to the IP address of your Home Assistant Glow, where you will find the line **Pulse rate - imp/kWh** in the table, and you can then adjust it on the right. + +

+ Adjusting the pulse rate via the web interface +

+ +### Option 2: In Home Assistant + +1. Go to the device overview page of the Home Assistant Glow, via [**Settings** > **Devices & Services** > **ESPHome**](https://my.home-assistant.io/redirect/integration/?domain=esphome). +2. Adjust the value for the entity **Pulse rate - imp/kWh**. + +## Useful resources + +- [Glow Energy - FAQ page](/docs/faq) diff --git a/docs/docs/configuration/rename.mdx b/docs/docs/configuration/rename.mdx new file mode 100644 index 00000000..1b8a5463 --- /dev/null +++ b/docs/docs/configuration/rename.mdx @@ -0,0 +1,49 @@ +--- +id: rename +title: Rename the Glow +description: Learn how to rename your Home Assistant Glow device to something more descriptive and user-friendly. +--- + +# Rename your Glow in Home Assistant + +When you add the Glow to Home Assistant, it is automatically given a default name like `home-assistant-glow-XXXXXX`, where `XXXXXX` is a portion of the device's MAC address. The reason for this naming convention is to ensure each device has a unique identifier, but it's not very user-friendly or descriptive. + +## Why rename your device? + +If you have multiple devices connected to Home Assistant, it can be challenging to remember which device is which. Renaming your device to something more descriptive can help you quickly identify it when setting up automations, creating dashboards, or troubleshooting issues. + +## Step-by-step guide to renaming a device + +Here's how to change the name of your device in Home Assistant: + +1. Open your Home Assistant dashboard/interface. +2. **Go to settings**: From the main menu, click on **Settings** and then select **Devices & Services**. +3. Under the **ESPHome** section, find and select your device. If you have multiple devices, you may need to identify it by its current name (the default format described earlier). + + **Tip**: You can skip steps 1-3 by clicking the badge below to be taken directly to the ESPHome devices overview page. + +[![Open your Home Assistant instance and show an integration.](https://my.home-assistant.io/badges/integration.svg)][esphome-devices] + +4. Once on the device's details page, click the pencil icon at the top-right corner to begin renaming. +5. Enter your preferred name, something that reflects the purpose of the device (e.g., “Home Assistant Glow” or “Glow Energy”). +6. Click **Update** to apply the changes and save the new name. + +

+ Renaming a device in Home Assistant +

+ +### Renaming Entity IDs (Optional) + +After renaming the device, Home Assistant may prompt you to rename the associated entity IDs as well. Entity IDs are used to reference your device in automations, dashboards, and other parts of Home Assistant. + +- **If you haven't created any automations or dashboards yet**: It's generally a good idea to rename the entity IDs to match the new device name. This makes them easier to recognize and use in future configurations. +- **If you already have automations or dashboards**: You may want to keep the existing entity IDs if they are already used in various setups. Renaming the entity IDs will require you to update those configurations to reference the new names. In this case, you can opt to change only the device name and leave the entity IDs as they are. + +## Helpful resources + +- [Home Assistant - Terminology](https://home-assistant.io/getting-started/concepts-terminology) + +[esphome-devices]: https://my.home-assistant.io/redirect/integration/?domain=esphome \ No newline at end of file diff --git a/docs/docs/getting-started.mdx b/docs/docs/getting-started.mdx index dcc451bf..8c09df0e 100644 --- a/docs/docs/getting-started.mdx +++ b/docs/docs/getting-started.mdx @@ -96,7 +96,7 @@ When the Home Assistant Glow is added to a network to which your Home Assistant

-## Step 4: Configure +## Step 4: Configure the Pulse Rate In order for the measurements to run smoothly, it is important to set the correct pulse rate. Each meter with a pulse LED has a marking with an **imp/kWh** value, for example 1000, 2000, etc. The Home Assistant Glow will use the value `1000` by default, because this is a commonly used value in the Netherlands. diff --git a/docs/sidebars.ts b/docs/sidebars.ts index 333dc612..4cd713bb 100644 --- a/docs/sidebars.ts +++ b/docs/sidebars.ts @@ -15,7 +15,16 @@ const sidebars: SidebarsConfig = { docSidebar: [ 'introduction', 'getting-started', - 'configuration', + { + type: 'category', + collapsed: false, + label: 'Configuration', + items: [ + 'configuration/pulse_rate', + 'configuration/rename', + 'configuration/energy_dashboard', + ], + }, { type: 'category', label: 'Advanced', From b56ae4c62e006fd787b093993a11137c623a2fab Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Thu, 24 Oct 2024 00:24:04 +0200 Subject: [PATCH 3/7] Refactor the advanced section (#628) * Refactor the advanced section * Refactor firmware changes documentation for improved clarity and component linking * Refactor firmware updates documentation for brevity in description * Fix broken links * Refactor firmware updates documentation for grammatical clarity --- docs/blog/2024-01-11-fresh-new-start.md | 2 +- docs/blog/2024-09-06-release.md | 2 +- docs/docs/advanced/firmware_changes.mdx | 75 +++++++++++++++++ docs/docs/advanced/firmware_customization.mdx | 76 ------------------ docs/docs/advanced/firmware_updates.mdx | 70 ++++++++++++++++ docs/docs/faq/faq_nr2.md | 4 +- docs/docs/faq/faq_nr7.md | 2 +- docs/docs/faq/faq_nr8.md | 2 +- docs/sidebars.ts | 3 +- .../img/advanced/glow_update-esphome.png | Bin 0 -> 36156 bytes .../static/img/advanced/glow_update-popup.png | Bin 0 -> 24012 bytes 11 files changed, 153 insertions(+), 83 deletions(-) create mode 100644 docs/docs/advanced/firmware_changes.mdx delete mode 100644 docs/docs/advanced/firmware_customization.mdx create mode 100644 docs/docs/advanced/firmware_updates.mdx create mode 100644 docs/static/img/advanced/glow_update-esphome.png create mode 100644 docs/static/img/advanced/glow_update-popup.png diff --git a/docs/blog/2024-01-11-fresh-new-start.md b/docs/blog/2024-01-11-fresh-new-start.md index 1c05b9f9..f344238f 100644 --- a/docs/blog/2024-01-11-fresh-new-start.md +++ b/docs/blog/2024-01-11-fresh-new-start.md @@ -25,7 +25,7 @@ TL;DR - A lot 😅 ... v4.0.0 has been released, the most important changes are 1. The pulse meter pin for ESP32 boards has been changed from GPIO `13` to GPIO `26`. 2. The `home_assistant_glow.yaml` file no longer exists. -This would break the **package_import** for existing configs for people in the ESPHome dashboard. If you would like to use the latest version, I recommend re-flashing your ESP according to step 2 in [Getting Started](/docs/getting-started#step-2-install-firmware), and if desired, [re-adopting](/docs/advanced/firmware_customization#adopting-the-device) your device again in ESPHome dashboard (add-on). +This would break the **package_import** for existing configs for people in the ESPHome dashboard. If you would like to use the latest version, I recommend re-flashing your ESP according to step 2 in [Getting Started](/docs/getting-started#step-2-install-firmware), and if desired, [re-adopting](/docs/advanced/firmware_changes#adopting-the-device) your device again in ESPHome dashboard (add-on). ### New config structure diff --git a/docs/blog/2024-09-06-release.md b/docs/blog/2024-09-06-release.md index b97dce93..2b5219dc 100644 --- a/docs/blog/2024-09-06-release.md +++ b/docs/blog/2024-09-06-release.md @@ -37,7 +37,7 @@ If you would like to support the project, you can do so through [GitHub sponsors - [ESPHome 2024.8.x - Changelog][esphome-changelog] - [ESPHome - Extend][!extend] -- [Customizing the firmware](/docs/advanced/firmware_customization) +- [Customizing the Firmware](/docs/advanced/firmware_changes) [esphome-changelog]: https://esphome.io/changelog/2024.8.0.html diff --git a/docs/docs/advanced/firmware_changes.mdx b/docs/docs/advanced/firmware_changes.mdx new file mode 100644 index 00000000..1005d73c --- /dev/null +++ b/docs/docs/advanced/firmware_changes.mdx @@ -0,0 +1,75 @@ +--- +id: firmware_changes +title: Customizing the Firmware +description: Learn how to customize the firmware of the Glow using ESPHome. +--- + +# Customizing the Firmware + +The Glow's firmware is built on [ESPHome](https://esphome.io), a platform designed for customization through simple YAML configurations. Whether you need to tweak the device's functionality or adapt it for different use cases, the process is straightforward. + +This guide will walk you through how to adopt the device and customize its firmware using the [ESPHome Dashboard](https://esphome.io/guides/getting_started_hassio.html). + +## Adopting the Device + +Before making any changes to the firmware, you first need to adopt the device into the ESPHome. Once your ESPHome Dashboard is up and running, and the Glow is connected to your local network, you should see an option to adopt it. + +

+ +

+ +Following the adoption steps will automatically: + +1. Create a unique ESPHome configuration file for your device. +2. Set up a secure API encryption key, allowing communication between Home Assistant and your device. +3. Configure the device's network settings, such as Wi-Fi credentials. +4. Upload the customized firmware onto the Glow. + +## Component Structure + +The firmware is designed to be flexible for different ESP boards by breaking it into separate "components". Each main function of the device is kept in its own YAML file, making it easier to manage. The base configuration includes a few key components that handle the important functions of the device. + +| Component | Description | +| :-------------------------------------------- | :---------------------------------------------------------------------------------------------------- | +| [**basis.yaml**][component-basis] | Handles the basic, essential functionality of the device. | +| [**pulse_meter.yaml**][component-pulse_meter] | Manages pulse metering, useful for tracking energy usage. | +| [**status_led.yaml**][component-status_led] | Controls the status LED, allowing customization of its behavior or color based on the device's state. | +| [**updates.yaml**][component-updates] | Provides Over-the-Air ([OTA][ota]) update capabilities for easy firmware updates. | + +### Making Your First Customization + +Once your device is adopted, you can start customizing its behavior by editing the configuration files. In the ESPHome dashboard, click on **EDIT** next to the device to open the YAML editor, where you can modify the configuration directly. + +

+ +

+ +The YAML configuration may seem short and incomplete because it relies on [remote packages][remote], which are loaded during the firmware build process. If you want to customize or modify anything, it's important to first find the used ESPHome component ID. + +When you open the YAML editor, you'll see the default configuration for your Glow device. You can adjust this configuration or add new functionality by extending the existing components. For example, to change the behavior of the [pulse_meter], you can use the [!extend] feature to easily make the necessary changes. + +Here's an example of adding an [internal_filter] to the pulse meter configuration: + +```yaml title="your_glow_config.yaml" +sensor: + - id: !extend sensor_energy_pulse_meter + internal_filter: 100ms +``` + +## Helpful Resources + +- [ESPHome - Pulse Counter][pulse_meter] +- [ESPHome - Extend][!extend] +- [ESPHome - OTA Updates][ota] +- [ESPHome - Remote Packages][remote] + +[internal_filter]: https://esphome.io/components/sensor/pulse_counter.html?highlight=internal_filter +[pulse_meter]: https://esphome.io/components/sensor/pulse_counter.html +[!extend]: https://esphome.io/components/packages.html#extend +[ota]: https://esphome.io/components/ota/ +[remote]: https://esphome.io/components/packages.html#remote-git-packages + +[component-basis]: https://github.com/klaasnicolaas/home-assistant-glow/blob/main/components/basis.yaml +[component-pulse_meter]: https://github.com/klaasnicolaas/home-assistant-glow/blob/main/components/pulse_meter.yaml +[component-status_led]: https://github.com/klaasnicolaas/home-assistant-glow/blob/main/components/status_led.yaml +[component-updates]: https://github.com/klaasnicolaas/home-assistant-glow/blob/main/components/updates.yaml \ No newline at end of file diff --git a/docs/docs/advanced/firmware_customization.mdx b/docs/docs/advanced/firmware_customization.mdx deleted file mode 100644 index e68a4eeb..00000000 --- a/docs/docs/advanced/firmware_customization.mdx +++ /dev/null @@ -1,76 +0,0 @@ ---- -id: firmware_customization -title: Customizing the firmware -description: How to adopt and customize the firmware for your own needs. ---- - -The Home Assistant Glow's firmware is built on [ESPHome](https://esphome.io), a platform -designed for customization through simple YAML configurations. Whether you need to tweak -the device's functionality or adapt it for different use cases, the process is straightforward. -This guide will walk you through how to adopt the device and customize its firmware using -the [ESPHome Dashboard](https://esphome.io/guides/getting_started_hassio.html). - -## Adopting the Device - -Before making any changes to the firmware, you first need to adopt the device into the ESPHome. -Once your ESPHome Dashboard is up and running, and the Home Assistant Glow is connected to your -local network, you should see an option to adopt it. - -

- -

- -Following the adoption steps will automatically: - -1. Create a unique ESPHome configuration file for your device. -2. Set up a secure API encryption key, allowing communication between Home Assistant and your device. -3. Embed your Wi-Fi credentials directly into the firmware, enabling automatic reconnections. -4. Upload the customized firmware onto the Home Assistant Glow. - -## Understanding the Configuration - -### Component Structure - -To make the firmware manageable and adaptable to different hardware setups, it is organized into -distinct "components." Each major function of the device is isolated in its own YAML file. The -base configuration includes several important components: - -- **`basis.yaml`**: Handles the basic, essential functionality of the device. -- **`pulse_meter.yaml`**: Manages pulse metering, useful for tracking energy usage. -- **`status_led.yaml`**: Controls the status LED, allowing you to customize its behavior or color based on the device's state. -- **`updates.yaml`**: Provides Over-the-Air ([OTA][ota]) update capabilities, making it easy to update firmware without physical access. - -These components can be found in the [GitHub repository](https://github.com/klaasnicolaas/home-assistant-glow/tree/main/components). - -### Making Your First Customization - -Once your device is adopted, you can start customizing its behavior by editing the configuration -files. In the ESPHome dashboard, click on **EDIT** next to the device to open the YAML editor, -where you can modify the configuration directly. - -

- -

- -In the YAML editor, you'll see the default configuration for your Home Assistant Glow. You can -make changes here or add new functionality by extending existing components. For instance, to -modify the behavior of the [pulse_meter], you could use the [!extend] feature. - -Here's an example of adding an [internal_filter] to the pulse meter configuration: - -```yaml title="your_glow_config.yaml" -sensor: - - id: !extend sensor_energy_pulse_meter - internal_filter: 100ms -``` - -## Related links - -- [ESPHome - Pulse Counter][pulse_meter] -- [ESPHome - Extend][!extend] -- [ESPHome - OTA Updates][ota] - -[internal_filter]: https://esphome.io/components/sensor/pulse_counter.html?highlight=internal_filter -[pulse_meter]: https://esphome.io/components/sensor/pulse_counter.html -[!extend]: https://esphome.io/components/packages.html#extend -[ota]: https://esphome.io/components/ota/ \ No newline at end of file diff --git a/docs/docs/advanced/firmware_updates.mdx b/docs/docs/advanced/firmware_updates.mdx new file mode 100644 index 00000000..b343fa14 --- /dev/null +++ b/docs/docs/advanced/firmware_updates.mdx @@ -0,0 +1,70 @@ +--- +id: firmware_updates +title: Firmware Updates +description: Learn how to update the firmware of the Glow. +--- + +# Firmware Updates + +Keeping your device's firmware up to date is essential to ensure it runs smoothly and benefits from the latest (ESPHome) features. This guide will walk you through how to update the firmware of the Home Assistant Glow. + +## Updating Firmware through Home Assistant + +_Level of Difficulty: **Easy**_ + +The easiest way to update the firmware of the Glow is through Home Assistant. When a new firmware update is available, you will receive a notification directly within Home Assistant. To update your device, follow these simple steps: + +1. Look on the **Settings** page of Home Assistant for update notifications. +2. Click on the notification for the Home Assistant Glow. +3. A pop-up will appear with release notes / version number and the option to update the firmware. +4. Click **Install** to start the process. + +

+ Update notification in Home Assistant +

+ +:::note +Since ESPHome 2024.6.x, the update component can directly retrieve firmware updates from the glow energy manifest. Which has made updating even easier and eliminates the need to use ESPHome Dashboard add-on just for updates. +::: + +## Glow Web Interface + +_Level of Difficulty: **Medium**_ + +If you are unable to update the firmware through Home Assistant, you can also update the firmware directly within the Glow's web interface. This method is useful if you are using the Glow as a standalone device or if you prefer to update the firmware manually. + +1. Download the latest firmware binary file for your device: + - Download for ESP32: [home-assistant-glow-esp32.ota.bin](https://glow-energy.io/home-assistant-glow/esp32/home-assistant-glow-esp32.ota.bin) + - Download for ESP8266: [home-assistant-glow-esp8266.ota.bin](https://glow-energy.io/home-assistant-glow/esp8266/home-assistant-glow-esp8266.ota.bin) +2. Navigate to the Glow's web interface, by entering the IP address of the device in your browser. +3. At the bottom of the page, you will find the **OTA Update** section. +4. Click on **Choose File** and select the firmware binary file you downloaded. +5. Click **Upload** to start the update process. + +After the update is complete, the device will automatically reboot with the new firmware. + +## ESPHome Dashboard + +_Level of Difficulty: **Advanced**_ + +If you are using the ESPHome Dashboard add-on in Home Assistant, you can also update the firmware through the dashboard. This method is useful if you have adopted the firmware to your ESPHome dashboard and know how to tweak the YAML configuration. + +1. Open the ESPHome Dashboard. +2. If it is possible to update the firmware, you will see an update button at the device card (see image below). +3. Click on the **UPDATE** button to start the process. +4. Select **Wirelessly** to update the firmware over-the-air (OTA). +5. After this, it will start the update process and you will see the update process in a pop-up window. + +Once the update is complete, the device will automatically reboot with the new firmware. + +

+ Update firmware through ESPHome Dashboard +

\ No newline at end of file diff --git a/docs/docs/faq/faq_nr2.md b/docs/docs/faq/faq_nr2.md index 62287c81..8a6f685b 100644 --- a/docs/docs/faq/faq_nr2.md +++ b/docs/docs/faq/faq_nr2.md @@ -22,14 +22,14 @@ sensor: - heartbeat: 300s ``` -After applying the filters, only 396 state changes will be produced per hour. You can read more about making YAML adjustments on the [customizing the firmware](/docs/advanced/firmware_customization.mdx) page. +After applying the filters, only 396 state changes will be produced per hour. You can read more about making YAML adjustments on the [customizing the firmware](/docs/advanced/firmware_changes) page. ## Related topics - [ESPHome sensor filters][filters] - [ESPHome pulse meter](https://esphome.io/components/sensor/pulse_meter.html) - [ESPHome total daily energy sensor](https://esphome.io/components/sensor/total_daily_energy.html) -- [Customizing the firmware](/docs/advanced/firmware_customization.mdx) +- [Customizing the Firmware](/docs/advanced/firmware_changes) [filters]: https://esphome.io/components/sensor/index.html#sensor-filters [file]: https://github.com/klaasnicolaas/home-assistant-glow/blob/main/components/pulse_meter.yaml#L73 \ No newline at end of file diff --git a/docs/docs/faq/faq_nr7.md b/docs/docs/faq/faq_nr7.md index c3f48872..1ba5ffe7 100644 --- a/docs/docs/faq/faq_nr7.md +++ b/docs/docs/faq/faq_nr7.md @@ -21,7 +21,7 @@ sensor: ## Related topics - [ESPHome total daily energy sensor][method] -- [Customizing the firmware](/docs/advanced/firmware_customization.mdx) +- [Customizing the Firmware](/docs/advanced/firmware_changes) [method]: https://esphome.io/components/sensor/total_daily_energy.html [issue_274]: https://github.com/klaasnicolaas/home-assistant-glow/issues/274 diff --git a/docs/docs/faq/faq_nr8.md b/docs/docs/faq/faq_nr8.md index a4b82d03..c87d8fca 100644 --- a/docs/docs/faq/faq_nr8.md +++ b/docs/docs/faq/faq_nr8.md @@ -18,7 +18,7 @@ In the example above, replace `your_password` with the password you want to use - [ESPHome - OTA updates][esphome_ota] - [ESPHome - Extend][!extend] -- [Customizing the firmware](/docs/advanced/firmware_customization.mdx) +- [Customizing the Firmware](/docs/advanced/firmware_changes) [esphome_ota]: https://esphome.io/components/ota.html [!extend]: https://esphome.io/components/packages.html#extend diff --git a/docs/sidebars.ts b/docs/sidebars.ts index 4cd713bb..55276e98 100644 --- a/docs/sidebars.ts +++ b/docs/sidebars.ts @@ -29,7 +29,8 @@ const sidebars: SidebarsConfig = { type: 'category', label: 'Advanced', items: [ - 'advanced/firmware_customization', + 'advanced/firmware_changes', + 'advanced/firmware_updates', ], }, { diff --git a/docs/static/img/advanced/glow_update-esphome.png b/docs/static/img/advanced/glow_update-esphome.png new file mode 100644 index 0000000000000000000000000000000000000000..0dd4cb1909fb6c9f1989db9231f2b9013dd3a27d GIT binary patch literal 36156 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 literal 0 HcmV?d00001 diff --git a/docs/static/img/advanced/glow_update-popup.png b/docs/static/img/advanced/glow_update-popup.png new file mode 100644 index 0000000000000000000000000000000000000000..e8498c2b4632bbd4b4c0e6244faa78a0bcda8b30 GIT binary patch literal 24012 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

2;@7 zw4V>OetgePbIn;K!{>em<`y{;1F#-mfIlf?i}OM-(ENlMnKT<6N`i_?3mG1>5R&|c z!7Ic%-r9bJ+}1)wGCXajEDf&sP_kWQQThbi!R{NOELU_uky-HOu)|7hR6Ta4n!S{x zBe#tA9Dw2ok>|BYTQwvlWO0BMO2 z#)lVoGa?AE;E|9(d+safIQA0~@E3zUg`EL%+8BXu!IU(8z4!ZXJ6&51&Di)}!F6mQ? zYKV$bR$ITn9ystk*|K@Rx6fc@YPulGFWI$sW8(PWgfi8Jwu0yz`J%D>1>?5mbLrkS)Z<-9eSPpMz;6m)I5h zZFzqg+DJ`mP;*;f>$-UO8$4=A1I(EV3YWLv60$cp>Wml`GmuBn+f|y2m_*n)QLt9J zh89pGgvWp?h0qO$dOEj^l5PX%z9@}?E|nV^b{pn8Zxy9!nH z3=;RQHBHFNmdV>pQ7;L48~MSSh=#zcJ)^O5y?|PM6}*h;D!r5A#dXHeKF$Y?lpA5) znpG+99g<*SUIO&acLYWcwiFg(;K!vEwlcnJ9E4f0?yJ+OYt3G)XUD=}*{HtQNdo7? z5*ARpkgz;G17eeAeEGtDJ|}DD`WnFH=t}8bWuiyFQdH)5w z?dD@5m4D@}Fhx_p*E*;d6aC+{_St*aE~_jdw6W&SH7Fh)g0pwC@prwfS2D@ebbVIu z7Nf@&JFeLyT09A}SQlLH!yz0)T5C^M)7^S|%g)d`5f1JKo_7WgsZ-YRa<3)Ia}mjS zfG|^|ypuB|_OI@Nzi+-9=+yu{+Gl&BZ}<>ZnfxV8rA16B`z}})jzxGs4(fFoLv$%s zdN~tpu9MglR>7wd!+}TyGk8c2A8J%hTqeuEcUHc_?iTgza0U(L*@WxhD zo?%MgHwg#A!&*e;%iN6pa9Zcm+>4f&zz;`KtdMzN!`O4Ek!51KYNtGbf!oSo!MzKc zERCyF=U2|yp;1eVHliTbL}UiQX{q>Q!)8Iz#Kg`%6Zzm5&O2^)$ISHKQ@ab;jV2Ag z**mq40K@62HBTm!_rt(K{-;k7X5LUw?|piD`pyQ*BbX0p+@C*dk=xo1{bvJx{qnfD z1M5Jh<$0L{8h~0VLj!{f91gdmNb+czfjy(E6h`a(@xx;gJj%Ii@xO-`t)Jfj5B%mx zJ!sNYaHP?stH*>4kl`1A{Q(C|Q#|#;0vnQwirun&5uWSdwhw`d(yK8=;X4>{U@Wq0 z2q%Fex9-bVuE2zzCpG{`^plqlUPg~TIwWT6{NwpL_x!R)q?_jIk*yuEcRHnQbaZrX adv{qTxyIF>p9x0b(bqQCD!qOu@;?9wd|m|r literal 0 HcmV?d00001 From 3c871cce3428112c2e8d31c5c57f797760751abd Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Thu, 24 Oct 2024 01:08:11 +0200 Subject: [PATCH 4/7] Refactor getting started guide (#630) * Refactor getting started guide for clarity and consistency * Refactor firmware update instructions for clarity * Refactor getting started guide to use step-based headings for clarity --- docs/docs/advanced/firmware_updates.mdx | 2 +- docs/docs/getting-started.mdx | 74 ++++++++++++++----------- 2 files changed, 42 insertions(+), 34 deletions(-) diff --git a/docs/docs/advanced/firmware_updates.mdx b/docs/docs/advanced/firmware_updates.mdx index b343fa14..4cc213c3 100644 --- a/docs/docs/advanced/firmware_updates.mdx +++ b/docs/docs/advanced/firmware_updates.mdx @@ -57,7 +57,7 @@ If you are using the ESPHome Dashboard add-on in Home Assistant, you can also up 2. If it is possible to update the firmware, you will see an update button at the device card (see image below). 3. Click on the **UPDATE** button to start the process. 4. Select **Wirelessly** to update the firmware over-the-air (OTA). -5. After this, it will start the update process and you will see the update process in a pop-up window. +5. It will start the update process, and you will see the update process in a pop-up window. Once the update is complete, the device will automatically reboot with the new firmware. diff --git a/docs/docs/getting-started.mdx b/docs/docs/getting-started.mdx index 8c09df0e..4a4b5e9c 100644 --- a/docs/docs/getting-started.mdx +++ b/docs/docs/getting-started.mdx @@ -13,9 +13,9 @@ import { faUsb } from '@fortawesome/free-brands-svg-icons'; This guide will walk you through the steps needed to set up your new Home Assistant Glow. You'll go through connecting the hardware, installing the necessary software, and configuring the settings to get everything up and running smoothly. -## Step 1: Hardware +## Step 1 - Hardware -To get started, you need the right hardware first, fill your 🛒 or see if you already have the components in house. Choose between an **ESP32** (recommended) or **ESP8266**. +To get started, you need the right hardware first, fill your 🛒 or see if you already have the items in house. Choose between an **ESP32** (recommended) or **ESP8266**. | Nr. | Item | Shops | | | |:-----|:---------|:------|:-|:-| @@ -37,7 +37,7 @@ Keep in mind that besides the photodiode board there are also boards in circulat How everything should be connected can be found on the [wiring diagram](/docs/resources/schematics). Once this is done, you can proceed to step 2. -## Step 2: Install firmware +## Step 2 - Install firmware Use the method below to provide your ESP with the correct firmware. @@ -46,31 +46,29 @@ Use the method below to provide your ESP with the correct firmware. _Make sure this page is opened in a Chromium-based browser on a desktop. The software installation does not work with a tablet or phone._ -:::note -If your device does not appear in the list, make sure you are using a USB data cable (i.e., not power-only), and try installing the [driver](https://www.silabs.com/developers/usb-to-uart-bridge-vcp-drivers?tab=downloads) for the serial chip. -::: - -1. Click the blue **connect** button below, a pop-up window will appear with a list of available USB devices. -2. Plug the USB cable into the ESP and connect it to your computer. -3. In the pop-up window, there should now appear a new entry. Select this USB serial port and click **Connect**. -4. Choose **Install Home Assistant Glow**, then click **Install**. +1. Click the blue **connect** button below to display a list of available USB devices. +2. To connect your ESP to your computer, follow these steps: + - In the pop-up window, view the list of available USB devices. + - Connect your ESP to your computer using a USB cable. + - In the pop-up window, there should now appear a new entry. Select this USB serial port and select **Connect**. +3. Select **Install Home Assistant Glow**, then **Install**. - If the installation does not go well, you may need to first hold down the `boot` button and then click **Install**. -5. Once the installation is completed, click **Next**. +4. Once the installation is completed, click **Next**. - Add the Home Assistant Glow to your Wi-Fi network: - When prompted, select your network from the list and enter the credentials to your 2.4 GHz Wi-Fi network. - Click **Connect**. - The Home Assistant Glow is now connected to your network. -6. Congratulations 🎉 You have successfully installed the firmware on your Home Assistant Glow. +5. Congratulations 🎉 You have successfully installed the firmware on your Home Assistant Glow. -## Step 3: Connect to Home Assistant +## Step 3 - Connect to Home Assistant -You have two options to add the Home Assistant Glow to Home Assistant. +There are two ways to connect the Glow to Home Assistant. You can do this during the firmware installation or later via auto discovery. -### Option 1: During firmware installation +### Option 1 - During firmware installation 1. Immediately after setting up your Wi-Fi network (from step 2), you will see a screen with the option **Add to Home Assistant**. - This opens the **My** link to Home Assistant (see image below). @@ -80,10 +78,14 @@ You have two options to add the Home Assistant Glow to Home Assistant. 4. Congratulations 🎉 You have successfully added the Home Assistant Glow to your Home Assistant instance.

- + My link to Home Assistant

-### Option 2: Auto discovery +### Option 2 - Auto discovery When the Home Assistant Glow is added to a network to which your Home Assistant instance is also connected, your device will automatically be recognized in Home Assistant. @@ -93,35 +95,45 @@ When the Home Assistant Glow is added to a network to which your Home Assistant 4. Congratulations 🎉 You have successfully added the Home Assistant Glow to your Home Assistant instance.

- + Auto discovery in Home Assistant

-## Step 4: Configure the Pulse Rate +## Step 4 - Configure the Pulse Rate + +To ensure that the Home Assistant Glow accurately measures energy consumption, you must set the correct pulse rate. The pulse rate refers to the number of pulses the energy meter sends per kilowatt-hour (kWh). Energy meters with a pulse LED will have an imp/kWh value indicated, such as 1000, 2000, etc. -In order for the measurements to run smoothly, it is important to set the correct pulse rate. Each meter with a pulse LED has a marking with an **imp/kWh** value, for example 1000, 2000, etc. The Home Assistant Glow will use the value `1000` by default, because this is a commonly used value in the Netherlands. +By default, the Home Assistant Glow is configured to use a pulse rate of `1000`. -You can adjust the value in 2 ways: +There are two ways to adjust the pulse rate: -### Option 1: Via the web interface +### Option 1 - Via the web interface -You open the web server by going to the IP address of your Home Assistant Glow, where you will find the line **Pulse rate - imp/kWh** in the table and you can then adjust it on the right. +Access the web interface by navigating to the IP address of your Home Assistant Glow. Once there, you'll find a table with a row labeled **Pulse rate - imp/kWh**, where you can easily adjust the value in the column on the right.

- + Pulse rate in the web interface

-### Option 2: In Home Assistant +### Option 2 - In Home Assistant 1. Go to the device overview page of the Home Assistant Glow, via [**Settings** > **Devices & Services** > **ESPHome**](https://my.home-assistant.io/redirect/integration/?domain=esphome). 2. Adjust the value for the entity **Pulse rate - imp/kWh**. For problems with the measurements, see the [FAQ page](/docs/faq). -## Step 5: Print Enclosure +## Step 5 - Print the case -The last step is to print a housing, the files for this can be found on the [cases page](/docs/resources/cases). If you do not have a 3D printer, there are platforms where you could place a print job or mount the Home Assistant Glow in a creative way 🙃 (my first concept was with cardboard). +The final step is to wrap everything up in a casing that you can print. The files for this can be found on the [case resources page](/docs/resources/cases). If you do not have a 3D printer, there are platforms where you could place a print job or mount the Home Assistant Glow in a creative way 🙃 -## Step 6: Sit back and relax +## Step 6 - Sit back and relax Congratulations 🎉 You have gone successfully through everything to get started with the Home Assistant Glow 🌟 If you have any questions, please check the [FAQ page](/docs/faq) first and if you can't find the answer there, you can always ask your question on the [Github](https://github.com/klaasnicolaas/home-assistant-glow). @@ -129,10 +141,6 @@ Congratulations 🎉 You have gone successfully through everything to get starte Affiliate links are used on this website to support the Home Assistant Glow 🌟 project. Some Ad-blockers might block these links, and thus they seem to appear broken. You will have to temporarily disable ad-blocker to open these links. -:::note -This page contains content derived from the [Upsy Desky documentation](https://upsy-desky.tjhorner.dev/) by [TJ Horner](https://github.com/tjhorner). The derived content is licensed under [CC BY-NC-SA 4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en). -::: - {/* Hardware */} [esp32-bg-shop]: https://www.banggood.com/bang/?tt=16956_12_417111_&r=https%3A%2F%2Fnl.banggood.com%2FGeekcreit-ESP32-WiFi%2Bbluetooth-Development-Board-Ultra-Low-Power-Consumption-Dual-Cores-Pins-Unsoldered-p-1214159.html [esp32-ali-shop]: https://tc.tradetracker.net/?c=15640&m=12&a=417111&r=&u=https%3A%2F%2Faliexpress.com%2Fitem%2F1005005970816555.html From 9ad93773f2ba5f07dc0067ab115c743afc18f592 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 24 Oct 2024 01:22:32 +0200 Subject: [PATCH 5/7] =?UTF-8?q?=E2=AC=86=EF=B8=8F=20Update=20actions/check?= =?UTF-8?q?out=20action=20to=20v4.2.2=20(#629)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- .github/workflows/build-firmware.yaml | 4 ++-- .github/workflows/deploy-firmware.yaml | 2 +- .github/workflows/labels.yaml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/workflows/build-firmware.yaml b/.github/workflows/build-firmware.yaml index 43468a74..5b660076 100644 --- a/.github/workflows/build-firmware.yaml +++ b/.github/workflows/build-firmware.yaml @@ -38,7 +38,7 @@ jobs: matrix: ${{ steps.prepare-matrix.outputs.matrix }} steps: - name: ⤵️ Check out code from GitHub - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 - name: ⤵️ Get changed files if: github.event_name == 'pull_request' id: changes @@ -91,7 +91,7 @@ jobs: matrix: ${{fromJson(needs.prepare.outputs.matrix)}} steps: - name: ⤵️ Check out code from GitHub - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 - name: 🔍 Determine ref - ESPHome packages if: ${{ !contains(fromJSON('["release", "workflow_call"]'), github.event_name) }} run: | diff --git a/.github/workflows/deploy-firmware.yaml b/.github/workflows/deploy-firmware.yaml index 96d37dd9..b5c30b99 100644 --- a/.github/workflows/deploy-firmware.yaml +++ b/.github/workflows/deploy-firmware.yaml @@ -57,7 +57,7 @@ jobs: needs: combined-manifests steps: - name: ⤵️ Check out code from GitHub - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 - name: ⬇️ Download all artifacts uses: actions/download-artifact@v4.1.8 with: diff --git a/.github/workflows/labels.yaml b/.github/workflows/labels.yaml index 71f71376..63b8f35d 100644 --- a/.github/workflows/labels.yaml +++ b/.github/workflows/labels.yaml @@ -18,7 +18,7 @@ jobs: pull-requests: write steps: - name: ⤵️ Check out code from GitHub - uses: actions/checkout@v4.2.1 + uses: actions/checkout@v4.2.2 - name: 🚀 Run Label Syncer uses: micnncim/action-label-syncer@v1.3.0 env: From dbe4fe5904f27721e1ef46955a02cf1a792bda6c Mon Sep 17 00:00:00 2001 From: Klaas Schoute Date: Thu, 24 Oct 2024 11:25:34 +0200 Subject: [PATCH 6/7] Refactor renaming guide for Home Assistant Glow device (#631) * Refactor renaming guide for Home Assistant Glow device * Improve clarity and detail --- docs/docs/configuration/rename.mdx | 32 +++++++++++++++++------------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/docs/docs/configuration/rename.mdx b/docs/docs/configuration/rename.mdx index 1b8a5463..346a3278 100644 --- a/docs/docs/configuration/rename.mdx +++ b/docs/docs/configuration/rename.mdx @@ -6,27 +6,31 @@ description: Learn how to rename your Home Assistant Glow device to something mo # Rename your Glow in Home Assistant -When you add the Glow to Home Assistant, it is automatically given a default name like `home-assistant-glow-XXXXXX`, where `XXXXXX` is a portion of the device's MAC address. The reason for this naming convention is to ensure each device has a unique identifier, but it's not very user-friendly or descriptive. +When you add the Glow to Home Assistant, it is automatically given a default name like `home-assistant-glow-XXXXXX`, where `XXXXXX` is a portion of the device's MAC address. This name shows up in the device list, but it isn't very descriptive. Renaming the device makes it much easier to manage, and if you want, you can also update the **entity IDs** to match the new device name for consistency. -## Why rename your device? +## Why rename the device? -If you have multiple devices connected to Home Assistant, it can be challenging to remember which device is which. Renaming your device to something more descriptive can help you quickly identify it when setting up automations, creating dashboards, or troubleshooting issues. +Even though the entity IDs don't include the MAC address and are functional as they are, having a device name that includes part of the MAC address isn't ideal. Changing the device name to something more descriptive can help you: -## Step-by-step guide to renaming a device +- Quickly identify the device in Home Assistant. +- Make it easier to work with the device when adding in automations or dashboards. +- Keep your Home Assistant setup organized and clear 🧹 -Here's how to change the name of your device in Home Assistant: +## Step-by-step guide to rename your Glow + +Here's how to change the name of your Glow in Home Assistant: 1. Open your Home Assistant dashboard/interface. -2. **Go to settings**: From the main menu, click on **Settings** and then select **Devices & Services**. -3. Under the **ESPHome** section, find and select your device. If you have multiple devices, you may need to identify it by its current name (the default format described earlier). +2. **Go to settings**: From the sidebar, click on **Settings** and then select **Devices & Services**. +3. In the **ESPHome** section, find your glow. If you have multiple devices, look for the one with the default format. - **Tip**: You can skip steps 1-3 by clicking the badge below to be taken directly to the ESPHome devices overview page. + **Pro Tip**: Want to get there faster? Click the badge below to jump directly to your device page: [![Open your Home Assistant instance and show an integration.](https://my.home-assistant.io/badges/integration.svg)][esphome-devices] -4. Once on the device's details page, click the pencil icon at the top-right corner to begin renaming. -5. Enter your preferred name, something that reflects the purpose of the device (e.g., “Home Assistant Glow” or “Glow Energy”). -6. Click **Update** to apply the changes and save the new name. +4. On the device details page, click the pencil icon in the top-right corner to rename it (see image below). +5. **Choose a descriptive name** that's easy to remember, like "Home Assistant Glow" or "Glow Energy". +6. Click **Update** to save the new name.

Date: Thu, 24 Oct 2024 11:29:03 +0200 Subject: [PATCH 7/7] Bump Home Assistant Glow to v4.2.3 --- home-assistant-glow/esp32.yaml | 4 ++-- home-assistant-glow/esp8266.yaml | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/home-assistant-glow/esp32.yaml b/home-assistant-glow/esp32.yaml index 916abbd3..27cf6d1f 100644 --- a/home-assistant-glow/esp32.yaml +++ b/home-assistant-glow/esp32.yaml @@ -8,7 +8,7 @@ substitutions: device_name: home-assistant-glow friendly_name: Home Assistant Glow - project_version: "4.2.2" + project_version: "4.2.3" device_description: "Measure your energy consumption with the pulse LED on your smart meter - ESP32 Generic" # Define the GPIO pins @@ -37,7 +37,7 @@ esp32: packages: remote_package: url: https://github.com/klaasnicolaas/home-assistant-glow/ - ref: "4.2.2" + ref: "4.2.3" files: - components/basis.yaml - components/updates.yaml diff --git a/home-assistant-glow/esp8266.yaml b/home-assistant-glow/esp8266.yaml index f53f18bd..6ffe7b86 100644 --- a/home-assistant-glow/esp8266.yaml +++ b/home-assistant-glow/esp8266.yaml @@ -8,7 +8,7 @@ substitutions: device_name: home-assistant-glow friendly_name: Home Assistant Glow - project_version: "4.2.2" + project_version: "4.2.3" device_description: "Measure your energy consumption with the pulse LED on your smart meter - ESP8266 Generic" # Define the GPIO pins @@ -35,7 +35,7 @@ esp8266: packages: remote_package: url: https://github.com/klaasnicolaas/home-assistant-glow/ - ref: "4.2.2" + ref: "4.2.3" files: - components/basis.yaml - components/updates.yaml