From ca476314723b7018c9bbad8060039722c3fc445b Mon Sep 17 00:00:00 2001 From: Edward Firmo <94725493+edwardtfn@users.noreply.github.com> Date: Fri, 5 Jan 2024 00:53:09 +0100 Subject: [PATCH] Updated intallation instructions (partial) --- docs/install.md | 70 +++++++++++++++++++++- docs/pics/ha_create_automation_rename.png | Bin 0 -> 17264 bytes 2 files changed, 67 insertions(+), 3 deletions(-) create mode 100644 docs/pics/ha_create_automation_rename.png diff --git a/docs/install.md b/docs/install.md index 3bc4e2f..0ca0ab2 100644 --- a/docs/install.md +++ b/docs/install.md @@ -7,6 +7,30 @@ Whether you're a first-time smart device user or an enthusiast looking to person |:--| | Some images or instructions on this guide might be slighly different due to different configurations depending on your ESPHome and Home Assistant implementation or versions. If you find something that is not understandable or needs to be updated, please let us know. You can create an issue reporting this, or fix it yourself and submit a Pull Request to this repository. | +## Summary + +- [Preparation](#preparation) +- [ESPHome firmware](#esphome-firmware) + - [Preparing the ESPHome environment](#preparing-the-esphome-environment) + - [Setup a device on ESPHome Dashboard](#setup-a-device-on-esphome-dashboard) + - [Flashing the device for the first time](#flashing-the-device-for-the-first-time) + - [Integrating your panel to Home Assistant](#integrating-your-panel-to-home-assistant) + - [Making changes Over The Air (OTA)](#making-changes-over-the-air-ota) + - [Updating](#updating) + - [Migrating from other custom firmware](#migrating-from-other-custom-firmware) +- [Upload TFT](#upload-tft) + - [Select the right file](#select-the-right-file) + - [Uploading to Nextion](#uploading-to-nextion) + - [Troubleshooting TFT transfer issues](#troubleshooting-tft-transfer-issues) +- [Blueprint](#blueprint) + - [Importing the blueprint](#importing-the-blueprint) + - [Creating an automation](#creating-an-automation) + - [Editing the settings in your automation](#editing-the-settings-in-your-automation) +- [How to handle multiple panels](#how-to-handle-multiple-panels) +- [Additional Tips and Resources](#additional-tips-and-resources) + +------ + ## Preparation Start by ensuring you have all the necessary tools and files. This includes your NSPanel device, a stable internet connection, and access to your Home Assistant instance. @@ -125,6 +149,8 @@ Before start unassembling your panel, please take a look at the following materi <> <> +### Integrating your panel to Home Assistant + ### Making changes Over The Air (OTA) << add instructions how to flash wirelessly>> @@ -137,6 +163,8 @@ Before start unassembling your panel, please take a look at the following materi ## Upload TFT ### Select the right file ### Uploading to Nextion +### Troubleshooting TFT transfer issues +We have an useful guide for [troubleshooting TFT transfer issues](tft_upload.md). Please take a look there. ## Blueprint In this area we will provide guidance on how to import the blueprint from our GitHub repository to your Home Assistant, use that to create a new automation to setup your panel and how to update the blueprint when a new version is available. @@ -149,12 +177,48 @@ Home Assistant makes this step very easy for you. Just click the button bellow a [![Open your Home Assistant instance and show the blueprint import dialog with a specific blueprint pre-filled.](https://my.home-assistant.io/badges/blueprint_import.svg)](https://my.home-assistant.io/redirect/blueprint_import/?blueprint_url=https%3A%2F%2Fgithub.com%2FBlackymas%2FNSPanel_HA_Blueprint%2Fblob%2Fmain%2Fnspanel_blueprint.yaml) ### Creating an automation -Now that Home Assistant is equiped with our Blueprint, -### Selecting the panel +Now that Home Assistant is equiped with our Blueprint, you have to create a new automation using that newly imported Blueprint. Please follow these steps: +1. On Home Assistant, go to **Settings**, then **Automations & Scenes** and then click on the tab **Blueprints**. Or just follow the link from the button bellow.
[![Open your Home Assistant instance and show your blueprints.](https://my.home-assistant.io/badges/blueprints.svg)](https://my.home-assistant.io/redirect/blueprints/)
  +1. Find the Blueprint named **NSPanel Configuration** and click on it. +1. On the Blueprint settings, select your panel on the **NSPanel device** input (the very first input). +1. Fill the other relevant entries on the Blueprint settings and then hit the **Save** button. +1. Give a name for your automation. Anything that would help you to identify it later. Then click **Rename**.
+![image](pics/ha_create_automation_rename.png)
  + +That's it. + +For a more compreehensive list of what you can do on your panel's settings, please refeer to the [Blueprint guide](blueprint.md). +### Editing the settings in your automation +You can always edit the settings in your automation to add some new configuration, edit some existing configuration or remove things. + +In order to edit it, in Home Assistant, go to **Settings** and then **Automations & Scenes** or click on the button bellow:
+[![Open your Home Assistant instance and show your automations.](https://my.home-assistant.io/badges/automations.svg)](https://my.home-assistant.io/redirect/automations/) + +On the **Automations** page, fnd your automation in the list and click on it. + +After changing the settings, please remember to click on **Save** to send the new settings to your panel. It shouldn't take more than a few seconds for your panel to receive the new settings, however some changes won't be visible until the page is reloaded. + +For a more compreehensive list of what you can do on your panel's settings, please refeer to the [Blueprint guide](blueprint.md). ## How to handle multiple panels +If you have multiple panels, just repeat the steps above for each panel. You should have one entry per panel on the ESPHome Dashboard, on entry (device) per panel under Home Assistant integrations (**Settings** > **Devices & Services** > **ESPHome**) and one automation per panel under Home Assistant automations. -## Additional info +#### Important: +Make sure you don't have the same panel assigned to more than one automation. Unfortunatly Home Assistant don't offers a mechanism to prevent this situation which could drive to your panel now showing what is expected and an unnecessary load over Home Assistant and your Wi-Fi network. + +## Additional Tips and Resources +We have an useful guide for [troubleshooting TFT transfer issues](tft_upload.md). Please take a look there first. + +After troubleshooting, if issues persist, consult the [Issues](/Blackymas/NSPanel_HA_Blueprint/issues) and feel free to create a new one asking for more personalized assistance. + +Please share as much info as possible, like: +1. Describing (or a picture of) what is in your screen +2. Are updating from a previous version of this same project, or coming from another NSPanel customization (which one?) or customizing for the first time a panel with original Sonoff settings? +3. Please share the ESPHome logs from when your panel starts to the moment the upload fails. +4. Describe what you have already tried. + +## Important note +Remember, these steps are a guideline and might vary slightly based on your specific setup and previously installed system. diff --git a/docs/pics/ha_create_automation_rename.png b/docs/pics/ha_create_automation_rename.png new file mode 100644 index 0000000000000000000000000000000000000000..22d68729302a3bbb96a339aebd65766f73d2af88 GIT binary patch literal 17264 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 eCLukFp9ZXr%S2JH0{@cn?4z`jRM`ikp#KY