diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index 8dc9143..ac1fdfa 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -1,8 +1,6 @@ --- name: Bug Report -description: | - We aim to keep everything running smoothly. - Please fill out the form with details to help us identify and address the issue. +description: If something isn't working as expected, let us know here. title: "`Bug` " labels: [Bug] body: @@ -11,23 +9,25 @@ body: value: | Thanks for taking the time to fill out a bug report! - We wanna everything always working like a charm, so please let us know where our attention is needed. + We aim to keep everything working perfectly, so your detailed reports are crucial. + + Report only one specific issue per submission. If you encounter another issue, create a new report for effective tracking and resolution. + + The more detail you provide, the quicker we can help. > [!WARNING] - > Remember to omit any private or sensitive information, as this bug report will be publicly visible. + > Omit any private or sensitive information, as this bug report will be publicly visible. - type: markdown attributes: value: | - ## Please provide the version numbers for TFT, ESPHome, and Blueprint - - You can find these version numbers on the boot screen of your device. - The Blueprint version can also be found in the automation where the blueprint is set. + ## Version Information + Provide version numbers for TFT, ESPHome, and Blueprint. These can be found on your device's boot screen and in the automation where the blueprint is set. - type: input attributes: label: TFT Version - description: Enter the version number of TFT. + description: Enter the TFT version number. placeholder: e.g., 4.1.4 validations: required: false @@ -35,7 +35,7 @@ body: - type: input attributes: label: ESPHome Version - description: Enter the version number of ESPHome. + description: Enter the ESPHome version number. placeholder: e.g., 4.1.4 validations: required: false @@ -43,7 +43,7 @@ body: - type: input attributes: label: Blueprint Version - description: Enter the version number of the Blueprint. + description: Enter the Blueprint version number. placeholder: e.g., 4.1.4 validations: required: false @@ -53,96 +53,81 @@ body: label: Panel Model description: Select your NSPanel model. options: - - NSPanel EU Model - - NSPanel US Model - - NSPanel US Model (Landscape) + - EU + - US + - US (Landscape) validations: required: true - type: markdown attributes: value: | - ## Please provide details about the bug + ## Bug Details - type: input attributes: label: What is the bug? - description: A clear and concise description of what the bug is. - placeholder: e.g., When I try this, I'm getting this result, while I was expecting that... + description: Describe the bug clearly and concisely. + placeholder: e.g., When I try this, I get this result, but I expected that... validations: required: true - type: textarea attributes: label: Steps to Reproduce - description: Steps to reproduce the behavior. Please feel free to share pictures of your screen or anything relevant. + description: Detail the steps to reproduce the behavior. Include screenshots or other relevant information. placeholder: | 1. Go to '...' 2. Click on '...' - 3. See error + 3. See error on '...' validations: required: true - type: markdown attributes: value: | - ## Please provide some additional info, when possible + ## Additional Information (Optional) - type: textarea attributes: - label: Your panel's YAML - description: Please provide device's YAML configuration. + label: Your Panel's YAML + description: Provide your panel's YAML configuration. render: yaml placeholder: | - substitutions: - # Settings - Editable values - device_name: "YOUR_NSPANEL_NAME" - wifi_ssid: !secret wifi_ssid - wifi_password: !secret wifi_password - - nextion_update_url: "http://homeassistant.local:8123/local/nspanel_us.tft" - - # Add-on configuration (if needed) - ## Add-on climate - heater_relay: "1" # Possible values: "1" or "2" - - # Customization area - ##### My customization - Start ##### - ##### My customization - End ##### - - # Core and optional configurations - packages: - remote_package: - url: https://github.com/Blackymas/NSPanel_HA_Blueprint - ref: main - files: - - nspanel_esphome.yaml # Core package - # Optional advanced and add-on configurations - # - advanced/esphome/nspanel_esphome_advanced.yaml - # - nspanel_esphome_addon_climate_cool.yaml - - nspanel_esphome_addon_climate_heat.yaml - # - nspanel_esphome_addon_climate_dual.yaml - refresh: 300s - - esp32: - framework: - type: esp-idf - validations: - required: false + # Example YAML configuration + # ... - type: textarea attributes: - label: ESPHome logs - description: You can get this by clicking the **Logs** button related to your device on ESPHome Dashboard. - render: logs - validations: - required: false + label: ESPHome Logs + description: > + Access these logs via the **Logs** button on the ESPHome Dashboard. + These logs are crucial for diagnosing issues with your device. + + Please follow the guidelines below to ensure the logs are comprehensive: + - **Boot Issues**: If the problem occurs during boot, capture the logs from the start of your device to a minute or two after the boot completes. + Look for errors or unusual messages during this period. + - **TFT File Update Issues**: For problems related to TFT file updates, + include logs from the moment you press the **Update TFT Display** button until a few seconds after the device restarts. + Pay attention to any error messages or warnings during the update process. + - **Other Issues**: For other types of problems, include logs that encompass the issue's onset and continue for a short duration thereafter. + This will help in pinpointing the exact moment and nature of the issue. + + Remember, the more detailed the logs, the easier it is to identify and resolve the problem. + validations: + required: false - type: textarea attributes: - label: Home Assistant logs - description: You can get this from **Settings** > **System** > [**Logs**](https://my.home-assistant.io/redirect/logs/) in your Home Assistant. - render: logs - validations: - required: false + label: Home Assistant Logs + description: > + To access Home Assistant logs, navigate to **Settings** > **System** > [**Logs**](https://my.home-assistant.io/redirect/logs/). + + When reporting an issue, please focus on providing logs specifically relevant to the problem: + - **NSPanel Blueprint Automation**: If your issue is related to automation using the NSPanel blueprint, include only those logs that directly pertain to this process. + - **Panel and ESPHome**: For issues involving your panel and ESPHome, carefully select and share logs that show interactions or errors between these components. + - **Relevancy is Key**: To expedite troubleshooting, avoid including logs that are not related to the issue at hand. This helps in focusing on the pertinent information. + Your attention to sharing targeted and relevant log data is greatly appreciated and aids in efficient problem resolution. + validations: + required: false ... diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index e01d457..2bd5810 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,16 +1,20 @@ --- blank_issues_enabled: false + contact_links: - - name: Discussions area + - name: Questions & General Discussions url: https://github.com/Blackymas/NSPanel_HA_Blueprint/discussions - about: This is your go-to space for community conversations, questions, idea sharing, and collaboration around our project. - - name: Troubleshooting TFT Transfer + about: Join our Discussions for community chats, questions, idea sharing, and collaboration. Use Issues for reporting bugs or requesting enhancements. + + - name: Troubleshooting TFT Transfer Issues url: https://github.com/Blackymas/NSPanel_HA_Blueprint/blob/main/docs/tft_upload.md - about: Try this guide first if you are having issues to transfer a TFT file. - - name: Compiling Errors Guide + about: Having trouble transferring a TFT file? Our guide might have the solution. + + - name: Resolve Compiling Errors url: https://github.com/Blackymas/NSPanel_HA_Blueprint/blob/main/docs/error_compiling.md - about: Experiencing Compile Errors? Check This Guide! - - name: Getting Started with NSPanel HA Blueprint + about: Check this guide if you're experiencing compile errors. + + - name: Getting Started Guide url: https://github.com/Blackymas/NSPanel_HA_Blueprint/blob/main/docs/install.md - about: This is the starting poing for installing a new NSPanel HA Blueprint. + about: New to NSPanel HA Blueprint? Start here for installation and setup instructions. ... diff --git a/.github/ISSUE_TEMPLATE/question.yml b/.github/ISSUE_TEMPLATE/question.yml deleted file mode 100644 index 07f49bc..0000000 --- a/.github/ISSUE_TEMPLATE/question.yml +++ /dev/null @@ -1,24 +0,0 @@ ---- -name: Question -description: Ask a question about this project -title: "`Question` " -labels: [Question] -body: - - type: markdown - attributes: - value: "We're here to help! Ask your question below." - - - type: input - attributes: - label: Question - description: What do you want to ask? - placeholder: e.g., How do I configure XYZ? - validations: - required: true - - - type: textarea - attributes: - label: Additional Details - description: Provide any additional details or context for your question. - placeholder: "Add any more details about your question here." -... diff --git a/.github/workflows/release_tag.yml b/.github/workflows/release_tag.yml new file mode 100644 index 0000000..39b907f --- /dev/null +++ b/.github/workflows/release_tag.yml @@ -0,0 +1,30 @@ +--- +name: Update Tags + +# yamllint disable-line rule:truthy +on: + release: + types: [published] + +jobs: + update-tags: + runs-on: ubuntu-latest + steps: + - name: Checkout code + uses: actions/checkout@v4.1.0 + + - name: Set up Git + run: | + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + + - name: Move and push stable tag + run: | + git tag -f stable ${{ github.event.release.tag_name }} + git push -f origin stable + + - name: Move and push latest tag + run: | + git tag -f latest ${{ github.event.release.tag_name }} + git push -f origin latest +... diff --git a/ReleaseNotes.md b/ReleaseNotes.md index 8b45163..a548be9 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -428,6 +428,100 @@ For support, feedback, or detailed information about this update, visit our [GitHub repository](https://github.com/Blackymas/NSPanel_HA_Blueprint) or our [online documentation](https://github.com/Blackymas/NSPanel_HA_Blueprint/blob/main/docs/README.md). +## Patch v4.2.5: Celebrating 1000 Stars with Enhanced Functionality and UI Improvements +With the 1000-star milestone on GitHub, we're excited to share Patch v4.2.5, enhancing the NSPanel Firmware experience in our spare time. +This update refines climate and cover entity interfaces, boosts hardware button responsiveness, and integrates ESPHome's `friendly_name` for easier device identification. +We've also expanded direct TFT download capabilities from GitHub to Arduino users, previously only available for ESP-IDF users. +This achievement, powered by community support, is a significant stride towards [simplifying user experience for NSPanel firmware](https://github.com/Blackymas/NSPanel_HA_Blueprint/discussions/1602). + +We highly recommend all users update their components to this latest version for an optimized and enhanced user experience. +While this update is compatible with existing v4.2 components, fully updating ensures the best performance and usability. + +**Breaking Changes:** +1. **Custom entities naming changed**. +If your setup includes custom entities using `${device_name}` in their names, please modify these entities to omit `${device_name}`. +ESPHome will now automatically append the `friendly_name` or `device_name` from your substitutions, simplifying the naming process. +2. **Show while loading** input is deprecated and all pages will show components while loading as default. + +Additionally, we have updated our documentation to include comprehensive guidelines on memory requirements for ESPHome, +ensuring users are well-informed for successful system setup and operation. + +**Overview of Changes:** + +| Change | Criticality | Affected Components | +| :-- | :--: | :--: | +| Long Click Action Bug Fix for Hardware Button (#1637) | Minor | `Blueprint` | +| Fix Display of Climate Icons on Chips (#1675) | Minor | `Blueprint` | +| Fix Icon's Colors on Home Page Values (#1694) | Minor | `Blueprint` | +| Alarm Keypad Arm/Disarm Fix for US Model (#1705) | Minor | `TFT file (US model only)` | +| LocalTuya Fan Speed Controls Fix (#1706) | Minor | `Blueprint` | +| Fix Update of Media Player Icons on Custom Buttons (#1716) | Minor | `Blueprint` | +| Motion Sensor for Display Wake-Up (#1687) | Enhancement | `Blueprint` | +| Enhanced Consistency in Cover Controls (#1688) | Enhancement | `Blueprint` | +| Support ESPHome `friendly_name` (#1719) | Enhancement | `Blueprint`
`ESPHome` | +| Improved Blueprint Input Clarity (#1722 and #1782) | Enhancement | `Blueprint` | +| Enhanced Memory Allocation When Uploading TFT (`esp-idf` only) | Enhancement | `ESPHome` | +| Expanded Visualization on Chips | Enhancement | `Blueprint` | +| Direct TFT Transfer from GitHub for Arduino Users | Enhancement | `ESPHome` | +| Baud Rate Adjustment for TFT Uploads | Enhancement | `ESPHome` | +| Update docs (install.md) with memory requirements (#1720) | Documentation | `Documentation` | + + +**Key Improvements:** +- **Long Click Action Bug Fix for Hardware Button**: Resolved a bug where long click actions weren't executing on hardware buttons if no entity was assigned. +This fix ensures that custom actions linked to long presses will now run as intended, regardless of whether an entity is assigned to the button, +offering greater flexibility and reliability in user interactions. +- **Fix Display of Climate Icons on Chips**: Enhanced the functionality of climate entity chips. +Now, the chip is displayed only when the climate entity has an active HVAC action. +This change ensures that the chip is hidden in states like 'Idle' or other non-active states, +aligning the display behavior with the operational status of the climate entity for improved accuracy and user experience. +- **Fix Icon's Colors on Home Page Values**: Addressed an issue where icons for sensor domain entities on the home page were incorrectly displaying colors indicative of an "entity disabled" state. +This fix ensures that the icons now reflect their correct status, enhancing the visual accuracy and user interface experience. +- **Alarm Keypad Arm/Disarm Fix for US Model**: Resolved an issue specific to the US model, where alarms requiring a PIN to arm/disarm were not functioning correctly. +This fix, applied through an update to the TFT file, ensures that users with these alarm systems can reliably arm and disarm their security devices. +- **LocalTuya Fan Speed Controls Fix**: Addressed an issue with LocalTuya fan speed controls not functioning as expected. +Users can now seamlessly adjust their fan speeds through the Blueprint interface, enhancing control and interaction with smart home devices. +- **Fix Update of Media Player Icons on Custom Buttons**: Corrected an issue where media player icons on custom buttons were not updating in real-time to reflect the current playback status. +This fix ensures that the icons dynamically represent the media player's state, improving the interface's responsiveness and accuracy. +- **Motion Sensor for Display Wake-Up**: We've introduced a feature that allows users to specify a motion, +presence, or door sensor to wake up the display, enhancing the panel's responsiveness. +Each detected motion or sensor activation event triggers the panel to wake up, with the sleep timer resetting with every new detection. +While the panel will still follow the pre-set sleep duration settings regardless of continuous motion or sensor activity, +this initial implementation marks a significant step in making user interactions more dynamic and intuitive. +- **Enhanced Consistency in Cover Controls**: Building upon the dynamic icons feature introduced in v4.2.2, we've further refined the cover controls. +This enhancement extends the use of `device_class` to the detailed cover page, +ensuring that the icons for opening and closing covers are more accurately representative of the cover type. +This update is a step towards our goal of extending context-aware UI enhancements to other supported domains in future updates. +- **Friendly Name Support in ESPHome**: Enhanced the Blueprint's compatibility with ESPHome's `friendly_name` feature. +Previously, using `friendly_name` could disrupt communication between the Blueprint and ESPHome due to mismatches in entity and service names. +This update resolves these issues, ensuring seamless integration. +Users can now utilize the `friendly_name` substitution in their YAML setup to assign more intuitive and descriptive names to their devices, +significantly improving the ease of device identification and overall user experience. +- **Improved Blueprint Input Clarity**: Simplified the naming of Blueprint inputs for better clarity and ease of use. +Labels such as *"Button14"* have been updated to more descriptive formats like *"Button page 2, Button 6"*. +Additionally, terms like "LABEL COLOR" have been refined to "Text Color" to improve understanding related to sensor display customization. +- **Enhanced Memory Allocation When Uploading TFT (esp-idf only)**: Optimized memory management for TFT uploads on systems using the `esp-idf` framework. +This update prevents simultaneous HTTP server connections, allowing for better memory allocation and reducing the risk of system crashes due to memory shortages. +It does not affect users on the `arduino` framework. +Additionally, the log for the upload process now includes detailed memory usage data, providing valuable insights for troubleshooting and system performance enhancement. +- **Expanded Visualization on Chips**: Enhanced the home page chips to display not only Media Player entities but now also Fan entities, among previously supported domains. +This update broadens the informative visual feedback available on the home page, offering a more comprehensive and visually engaging snapshot of the device status within the user interface. +- **Direct TFT Transfer from GitHub for Arduino Users**: Enhanced the TFT update process for Arduino users by enabling direct transfer of TFT files from GitHub to Nextion displays, +mirroring the functionality previously available to ESP-IDF users. +This streamlines the update workflow, removing the need for intermediate steps like using a local HTTP server, and making it easier to keep Nextion displays up-to-date. +- **Documentation Update on Memory Requirements for ESPHome**: Enhanced the installation documentation to include detailed guidelines on memory requirements. +This update addresses frequent user-reported compilation errors in ESPHome, attributed to insufficient memory on compiler servers. +The updated section outlines recommended memory configurations for different installation scenarios, ensuring smoother compilation processes. +A special acknowledgement to @andythomas for his valuable contributions to this update. +- **Baud Rate Adjustment for TFT Uploads**: This update introduces a baud rate selector in the device's "Configuration" area, +allowing users to lower the transfer speed from the default 921600 bps. +This enhancement is particularly useful for troubleshooting transfer issues, +providing a straightforward method to improve transfer reliability by adjusting the speed to accommodate different system capabilities. + +For support, feedback, or detailed information about this update, +visit our [GitHub repository](https://github.com/Blackymas/NSPanel_HA_Blueprint) +or our [online documentation](https://github.com/Blackymas/NSPanel_HA_Blueprint/blob/main/docs/README.md). + ## What's Next? Discover what's next and what we are working on right now in our [Milestones](https://github.com/Blackymas/NSPanel_HA_Blueprint/milestones?direction=asc&sort=title&state=open). @@ -442,6 +536,7 @@ Discover what's next and what we are working on right now in our [Milestones](ht - @andythomas: - Allow to set upper and lower set points for embedded thermostat, #1573 - Bugfix for embedded climate/cool functionality, #1587 + - Update docs (install.md) with memory requirements, #1720 - Patch v4.2.5 - @PaulAntonDeen: - Add ISO8601 date formatting as an option, #1610 - Patch v4.2.2 - Fix Wi-Fi reference on QR code example, #1609 - Patch v4.2.2 @@ -454,6 +549,7 @@ Discover what's next and what we are working on right now in our [Milestones](ht - And to all users who helped with the tests during development and beta. ## Previous releases +- [v4.2.4 - Critical bug fixes](https://github.com/Blackymas/NSPanel_HA_Blueprint/releases/tag/v4.2.4) - [v4.2.3 - Bug fixes and minor enhancements](https://github.com/Blackymas/NSPanel_HA_Blueprint/releases/tag/v4.2.3) - [v4.2.2 - Bug fixes and minor enhancements](https://github.com/Blackymas/NSPanel_HA_Blueprint/releases/tag/v4.2.2) - [v4.2.1 - Bug fixes](https://github.com/Blackymas/NSPanel_HA_Blueprint/releases/tag/v4.2.1) diff --git a/advanced/esphome/nspanel_esphome_addon_climate_base.yaml b/advanced/esphome/nspanel_esphome_addon_climate_base.yaml index 68a5820..3901c16 100644 --- a/advanced/esphome/nspanel_esphome_addon_climate_base.yaml +++ b/advanced/esphome/nspanel_esphome_addon_climate_base.yaml @@ -34,7 +34,7 @@ substitutions: climate: - platform: thermostat - name: ${name} Thermostat + name: Thermostat id: thermostat_embedded sensor: temp_nspanel min_idle_time: ${min_idle_time}s @@ -71,7 +71,7 @@ globals: switch: ##### PHYSICAL SWITCH 0 (Dummy) - Used when relay is not set ##### - - name: ${name} Relay 0 (dummy) + - name: Relay 0 (dummy) platform: template id: relay_0 lambda: !lambda return false; @@ -82,26 +82,39 @@ script: - id: !extend change_climate_state then: - lambda: |- - if (embedded) { + if (embedded and !id(is_uploading_tft)) { static const char *const TAG = "addon_climate_base.script.change_climate_state"; + auto FahrenheitToCelsius = [](float fahrenheit) -> float { + return (fahrenheit - 32.0) * 5.0 / 9.0; + }; + std::string temp_units = "${temp_units}"; + bool temp_unit_fahrenheit = (temp_units == "°F" || temp_units == "F" || temp_units == "°f" || temp_units == "f"); + auto call = thermostat_embedded->make_call(); + float temperature; + id(is_addon_climate_visible) = true; disp1->set_component_value("climate.embedded", 1); - auto call = thermostat_embedded->make_call(); if (key == "temperature") { - ESP_LOGD(TAG, "set_target_temperature(%f)", (stof(value) / 10)); - call.set_target_temperature(stof(value) / 10); + temperature = stof(value) / 10; + if (temp_unit_fahrenheit) temperature = FahrenheitToCelsius(temperature); + ESP_LOGD(TAG, "set_target_temperature(%f)", temperature); + call.set_target_temperature(temperature); } else if (key == "target_temp_high") { - ESP_LOGD(TAG, "set_target_temperature_high(%f)", (stof(value) / 10)); - call.set_target_temperature_high(stof(value) / 10); + temperature = stof(value) / 10; + if (temp_unit_fahrenheit) temperature = FahrenheitToCelsius(temperature); + ESP_LOGD(TAG, "set_target_temperature_high(%f)", temperature); + call.set_target_temperature_high(temperature); } else if (key == "target_temp_low") { - ESP_LOGD(TAG, "set_target_temperature_low(%f)", (stof(value) / 10)); - call.set_target_temperature_low(stof(value) / 10); + temperature = stof(value) / 10; + if (temp_unit_fahrenheit) temperature = FahrenheitToCelsius(temperature); + ESP_LOGD(TAG, "set_target_temperature_low(%f)", temperature); + call.set_target_temperature_low(temperature); } else if (key == "hvac_mode") { ESP_LOGD(TAG, "hvac_mode(%s)", value.c_str()); call.set_mode(value); } else { ESP_LOGE(TAG, "Invalid call:"); - ESP_LOGE(TAG, " Embedded: %s", embedded ? "True" : "False"); + ESP_LOGE(TAG, " Embedded: %s", YESNO(embedded)); ESP_LOGE(TAG, " Key: %s", key.c_str()); ESP_LOGE(TAG, " Value: %s", value.c_str()); } @@ -123,27 +136,49 @@ script: then: - lambda: |- id(is_addon_climate_visible) = (current_page->state == "climate" and detailed_entity->state == "embedded_climate"); - if (id(is_addon_climate_visible)) { + if (id(is_addon_climate_visible) and !id(is_uploading_tft)) { static const char *const TAG = "addon_climate_base.script.page_climate"; + auto CelsiusToFahrenheit = [](float celsius) -> float { + return (celsius * 9 / 5) + 32; + }; + std::string temp_units = "${temp_units}"; + bool temp_unit_fahrenheit = (temp_units == "°F" || temp_units == "F" || temp_units == "°f" || temp_units == "f"); + ClimateTraits traits = thermostat_embedded->get_traits(); + ESP_LOGV(TAG, "Climate page constructor:"); ESP_LOGV(TAG, " Add-on mode: %s", (${addon_climate_dual}) ? "Dual" : ((${addon_climate_heat}) ? "Heat" : ((${addon_climate_cool}) ? "Cool" : "Unknown"))); + ESP_LOGV(TAG, " Temp. units: %s", temp_unit_fahrenheit ? "Fahrenheit" : "Celsius"); disp1->set_component_text_printf("page_label", id(addon_climate_friendly_name).c_str()); - float temp_step = ${temp_step}; - float temp_offset = ${temp_min}; - float temp_max = ${temp_max}; + float temp_step = traits.get_visual_target_temperature_step(); + float temp_offset = traits.get_visual_min_temperature(); + float temp_max = traits.get_visual_max_temperature(); + float temp_target = thermostat_embedded->target_temperature; + float temp_target_high = thermostat_embedded->target_temperature_high; + float temp_target_low = thermostat_embedded->target_temperature_low; + float temp_current = thermostat_embedded->current_temperature; + if (temp_unit_fahrenheit) { + //temp_step = CelsiusToFahrenheit(temp_step); + temp_step = temp_step * 1.8; + temp_offset = CelsiusToFahrenheit(temp_offset); + temp_max = CelsiusToFahrenheit(temp_max); + temp_target = CelsiusToFahrenheit(temp_target); + temp_target_high = CelsiusToFahrenheit(temp_target_high); + temp_target_low = CelsiusToFahrenheit(temp_target_low); + temp_current = CelsiusToFahrenheit(temp_current); + } float total_steps = (temp_max-temp_offset)/temp_step; set_climate->execute ( - thermostat_embedded->current_temperature, // current_temp - 0, // supported_features - ((${addon_climate_dual}) ? -999 : thermostat_embedded->target_temperature), // target_temp - ((${addon_climate_dual}) ? thermostat_embedded->target_temperature_high : -999), // target_temp_high - ((${addon_climate_dual}) ? thermostat_embedded->target_temperature_low : -999), // target_temp_low - int(round(${temp_step}*10)), // temp_step - int(round(total_steps)), // total_steps - int(round(${temp_min}*10)), // temp_offset - "", // climate_icon - true // embedded_climate + temp_current, // current_temp + 0, // supported_features + ((${addon_climate_dual}) ? -999 : temp_target), // target_temp + ((${addon_climate_dual}) ? temp_target_high : -999), // target_temp_high + ((${addon_climate_dual}) ? temp_target_low : -999), // target_temp_low + int(round(temp_step*10)), // temp_step + int(round(total_steps)), // total_steps + int(round(temp_offset*10)), // temp_offset + "", // climate_icon + true // embedded_climate ); // Update target temp icon @@ -172,57 +207,59 @@ script: then: - lambda: |- // Update chips - if (id(is_embedded_thermostat)) + if (id(is_embedded_thermostat) and !id(is_uploading_tft)) update_climate_icon->execute("home.icon_top_03", int(thermostat_embedded->action), int(thermostat_embedded->mode)); - id: !extend set_climate then: - lambda: |- - if (current_page->state == "climate") + if (current_page->state == "climate" and !id(is_uploading_tft)) id(is_addon_climate_visible) = embedded_climate; - id: !extend watchdog then: - lambda: |- - static const char *const TAG = "addon_climate_base.script.watchdog"; - bool addon_climate_cool = ${addon_climate_cool}; - bool addon_climate_heat = ${addon_climate_heat}; - bool addon_climate_dual = ${addon_climate_dual}; - uint cooler_relay = ${cooler_relay}; - uint heater_relay = ${heater_relay}; - ESP_LOGI(TAG, "Add-on climate:"); - if (addon_climate_cool) { - ESP_LOGI(TAG, " Cool: %s", addon_climate_cool ? "Enabled" : "Disabled"); - if (cooler_relay == 1 or cooler_relay == 2) - ESP_LOGI(TAG, " Relay: %u", cooler_relay); - else - ESP_LOGE(TAG, " Relay: %u", cooler_relay); - } - if (addon_climate_heat) { - ESP_LOGI(TAG, " Heat: %s", addon_climate_heat ? "Enabled" : "Disabled"); - if (heater_relay == 1 or heater_relay == 2) - ESP_LOGI(TAG, " Relay: %u", heater_relay); - else - ESP_LOGE(TAG, " Relay: %u", heater_relay); - } - if (addon_climate_dual) { - ESP_LOGI(TAG, " Dual: %s", addon_climate_dual ? "Enabled" : "Disabled"); - if (cooler_relay == 1 or cooler_relay == 2) - ESP_LOGI(TAG, " Relay (cooler): %u", cooler_relay); - else - ESP_LOGE(TAG, " Relay (cooler): %u", cooler_relay); - if (heater_relay == 1 or heater_relay == 2) - ESP_LOGI(TAG, " Relay (heater): %u", heater_relay); - else - ESP_LOGE(TAG, " Relay (heater): %u", heater_relay); - if (cooler_relay == heater_relay) - ESP_LOGE(TAG, " Double relay assignment"); - } + if (!id(is_uploading_tft)) { + static const char *const TAG = "addon_climate_base.script.watchdog"; + bool addon_climate_cool = ${addon_climate_cool}; + bool addon_climate_heat = ${addon_climate_heat}; + bool addon_climate_dual = ${addon_climate_dual}; + uint cooler_relay = ${cooler_relay}; + uint heater_relay = ${heater_relay}; + ESP_LOGI(TAG, "Add-on climate:"); + if (addon_climate_cool) { + ESP_LOGI(TAG, " Cool: %s", addon_climate_cool ? "Enabled" : "Disabled"); + if (cooler_relay == 1 or cooler_relay == 2) + ESP_LOGI(TAG, " Relay: %u", cooler_relay); + else + ESP_LOGE(TAG, " Relay: %u", cooler_relay); + } + if (addon_climate_heat) { + ESP_LOGI(TAG, " Heat: %s", addon_climate_heat ? "Enabled" : "Disabled"); + if (heater_relay == 1 or heater_relay == 2) + ESP_LOGI(TAG, " Relay: %u", heater_relay); + else + ESP_LOGE(TAG, " Relay: %u", heater_relay); + } + if (addon_climate_dual) { + ESP_LOGI(TAG, " Dual: %s", addon_climate_dual ? "Enabled" : "Disabled"); + if (cooler_relay == 1 or cooler_relay == 2) + ESP_LOGI(TAG, " Relay (cooler): %u", cooler_relay); + else + ESP_LOGE(TAG, " Relay (cooler): %u", cooler_relay); + if (heater_relay == 1 or heater_relay == 2) + ESP_LOGI(TAG, " Relay (heater): %u", heater_relay); + else + ESP_LOGE(TAG, " Relay (heater): %u", heater_relay); + if (cooler_relay == heater_relay) + ESP_LOGE(TAG, " Double relay assignment"); + } - if ((addon_climate_cool && addon_climate_heat) || - (addon_climate_cool && addon_climate_dual) || - (addon_climate_heat && addon_climate_dual) || - (!addon_climate_cool && !addon_climate_heat && !addon_climate_dual)) { - ESP_LOGE(TAG, "Invalid settings for add-on Climate"); + if ((addon_climate_cool && addon_climate_heat) || + (addon_climate_cool && addon_climate_dual) || + (addon_climate_heat && addon_climate_dual) || + (!addon_climate_cool && !addon_climate_heat && !addon_climate_dual)) { + ESP_LOGE(TAG, "Invalid settings for add-on Climate"); + } } ... diff --git a/advanced/esphome/nspanel_esphome_addon_upload_tft.yaml b/advanced/esphome/nspanel_esphome_addon_upload_tft.yaml index df71962..a5f419a 100644 --- a/advanced/esphome/nspanel_esphome_addon_upload_tft.yaml +++ b/advanced/esphome/nspanel_esphome_addon_upload_tft.yaml @@ -14,10 +14,15 @@ substitutions: nextion_update_base_url: "https://raw.githubusercontent.com/Blackymas/NSPanel_HA_Blueprint/" ############################################## - ##### DON'T CHANGE THIS ##### - upload_tft_chunk_size_max: "32768" - upload_tft_baud_rate: "921600" - ############################# +##### External components ##### +external_components: + - source: + type: git + url: https://github.com/edwardtfn/esphome + ref: nextion-v425 + components: + - nextion # Change this when that PR#6192 gets released (2024.2?) + refresh: 300s api: on_client_connected: @@ -50,7 +55,7 @@ api: button: ##### UPDATE TFT DISPLAY ##### - id: tft_update - name: ${name} Update TFT display + name: Update TFT display platform: template icon: mdi:file-sync entity_category: config @@ -65,46 +70,17 @@ display: tft_url: ${nextion_update_url} exit_reparse_on_start: true -esphome: - on_boot: - - priority: 601.0 - then: - - lambda: |- - // Hide TFT file selectors when using arduino - #ifdef ARDUINO - tft_file_branch->set_internal(true); - tft_file_model->set_internal(true); - #elif defined(ESP_PLATFORM) - tft_file_branch->set_internal(false); - tft_file_model->set_internal(false); - #endif - globals: - id: baud_rate_original type: uint restore_value: false initial_value: '115200' - - id: baud_rate_target - type: uint - restore_value: false - initial_value: ${upload_tft_baud_rate} - - - id: tft_branch - type: uint - restore_value: true - initial_value: '0' - - id: tft_is_valid type: bool restore_value: false initial_value: 'false' - - id: tft_model - type: uint - restore_value: true - initial_value: '0' - - id: tft_upload_attempt type: uint restore_value: false @@ -115,52 +91,31 @@ globals: restore_value: false initial_value: '"${nextion_update_url}"' + - id: tft_upload_result + type: esphome::nextion::Nextion::TFTUploadResult + restore_value: false + initial_value: 'esphome::nextion::Nextion::TFTUploadResult::UNKNOWN' + script: - - id: exit_reparse_v414 - mode: restart - then: - - logger.log: "Exit reparse" - - uart.write: - id: tf_uart - data: "DRAKJHSUYDGBNCJHGJKSHBDN" - - uart.write: - id: tf_uart - data: [0xFF, 0xFF, 0xFF] - - - id: nextion_uart_command - mode: queued - parameters: - command: string - then: - - lambda: |- - static const char *const TAG = "addon_upload_tft.script.nextion_uart_command"; - if (disp1->is_setup()) { - ESP_LOGD(TAG, "Sending `%s` directly to Nextion", command.c_str()); - disp1->send_command_printf(command.c_str()); - } else { - ESP_LOGD(TAG, "Sending `%s` directly to UART", command.c_str()); - tf_uart->write_str(command.c_str()); - const uint8_t to_send[3] = {0xFF, 0xFF, 0xFF}; - tf_uart->write_array(to_send, sizeof(to_send)); - } - App.feed_wdt(); - - id: nextion_upload mode: single + parameters: + baud_rate: uint32_t then: - lambda: |- static const char *const TAG = "addon_upload_tft.script.nextion_upload"; ESP_LOGD(TAG, "Waiting for empty UART and Nextion queues"); - wait_until: condition: - - lambda: !lambda return (disp1->queue_size()<=0); - - lambda: !lambda return (tf_uart->available()<=0); + - lambda: return (disp1->queue_size() < 1); + - lambda: return (tf_uart->available() < 1); timeout: 10s - delay: 2s - lambda: |- static const char *const TAG = "addon_upload_tft.script.nextion_upload"; ESP_LOGD(TAG, "Starting TFT upload..."); - if (disp1->upload_tft()) App.safe_reboot(); + id(tft_upload_result) = disp1->upload_tft(baud_rate, !disp1->is_setup()); + ESP_LOGD(TAG, "TFT upload: %s", esphome::nextion::Nextion::tft_upload_result_to_string(id(tft_upload_result))); - id: open_upload_dialog mode: restart @@ -173,11 +128,8 @@ script: disp1->hide_component("bt_accept"); disp1->hide_component("bt_clear"); disp1->hide_component("bt_close"); - #ifdef ARDUINO - disp1->set_component_text_printf("confirm.title", "Upload TFT\\rArduino"); - #elif defined(ESP_PLATFORM) - disp1->set_component_text_printf("confirm.title", "Upload TFT\\rESP-IDF"); - #endif + disp1->set_component_text_printf("confirm.title", "Upload TFT\\r%s", + id(framework) == 1 ? "Arduino" : (id(framework) == 2 ? "ESP-IDF" : "Unknown")); page_id->update(); - id: report_settings @@ -190,8 +142,7 @@ script: ESP_LOGI(TAG, "Substitutions:"); ESP_LOGI(TAG, " nextion_update_url: ${nextion_update_url}"); ESP_LOGI(TAG, " nextion_update_base_url: ${nextion_update_base_url}"); - ESP_LOGI(TAG, " upload_tft_chunk_size_max: ${upload_tft_chunk_size_max}"); - ESP_LOGI(TAG, " upload_tft_baud_rate: ${upload_tft_baud_rate}"); + ESP_LOGI(TAG, " TFT upload baud rate: %s bps", tft_upload_baud_rate->state.c_str()); - id: report_upload_progress mode: restart @@ -210,48 +161,23 @@ script: App.feed_wdt(); } - - id: !extend restore_settings - mode: restart - then: - - lambda: |- - static const char *const TAG = "addon_upload_tft.script.restore_settings"; - - ESP_LOGD(TAG, "Restoring TFT file branch selector to index %u", id(tft_branch)); - auto tft_file_branch_call = id(tft_file_branch).make_call(); - tft_file_branch_call.set_index(id(tft_branch)); - tft_file_branch_call.perform(); - - ESP_LOGD(TAG, "Restoring TFT file model selector to index %u", id(tft_model)); - auto tft_file_model_call = id(tft_file_model).make_call(); - tft_file_model_call.set_index(id(tft_model)); - tft_file_model_call.perform(); - - id: set_tft_file mode: restart then: - delay: 2s - lambda: |- - #ifdef ARDUINO - static const char *const TAG = "addon_upload_tft.script.set_tft_file.arduino"; - #elif defined(ESP_PLATFORM) - static const char *const TAG = "addon_upload_tft.script.set_tft_file.esp_idf"; - #endif - std::string branch = tft_file_branch->state; + static const char *const TAG = "addon_upload_tft.script.set_tft_file"; + std::string branch = "v${version}"; + if (branch.find("beta") != std::string::npos) branch = "beta"; + else if (branch.find("dev") != std::string::npos) branch = "dev"; std::string model = tft_file_model->state; ESP_LOGD(TAG, "TFT URL set:"); ESP_LOGD(TAG, " Branch: %s", branch.c_str()); ESP_LOGD(TAG, " Model: %s", model.c_str()); - if (id(is_restored_settings) and tft_file_branch->active_index().has_value()) - id(tft_branch) = tft_file_branch->active_index().value(); - if (id(is_restored_settings) and tft_file_model->active_index().has_value()) - id(tft_model) = tft_file_model->active_index().value(); if (id(is_uploading_tft)) ESP_LOGW(TAG, " TFT Upload in progress."); else { - #ifdef ARDUINO - std::string url = "${nextion_update_url}"; - #elif defined(ESP_PLATFORM) std::string url; std::string file_name; if (model == "NSPanel Blank") file_name = "nspanel_blank.tft"; @@ -272,7 +198,6 @@ script: url = url.substr(0, endPos + 1); } } - #endif ESP_LOGD(TAG, " Full URL: %s", url.c_str()); id(tft_url) = url; @@ -302,60 +227,14 @@ script: nextion_status->execute(); - uint32_t supported_baud_rates[] = {2400, 4800, 9600, 19200, 31250, 38400, 57600, 115200, 230400, 250000, 256000, 512000, 921600}; - - auto is_baud_rate_supported = [supported_baud_rates](uint32_t baud_rate_requested) -> bool { - size_t size = sizeof(supported_baud_rates) / sizeof(supported_baud_rates[0]); - for (size_t i = 0; i < size; ++i) { - if (supported_baud_rates[i] == baud_rate_requested) { - return true; - } - } - return false; // Return false if not found - }; - // The upload process starts here ESP_LOGD(TAG, "Starting the upload script"); - - // Detect baud rates to be used - id(baud_rate_original) = tf_uart->get_baud_rate(); - if (!is_baud_rate_supported(id(baud_rate_original))) id(baud_rate_original) = 115200; - - std::string upload_tft_baud_rate_string = "${upload_tft_baud_rate}"; - id(baud_rate_target) = stoi(upload_tft_baud_rate_string); - if (!is_baud_rate_supported(id(baud_rate_target))) id(baud_rate_target) = id(baud_rate_original); - - ESP_LOGD(TAG, " Target upload baud rate: %d bps", id(baud_rate_target)); + ESP_LOGD(TAG, " Valid TFT: %s", YESNO(id(tft_is_valid))); ESP_LOGD(TAG, " Current baud rate: %" PRIu32 " bps", tf_uart->get_baud_rate()); - ESP_LOGD(TAG, " Valid TFT: %s", id(tft_is_valid) ? "True" : "False"); - - // Upload URL - ESP_LOGD(TAG, " Upload URL: %s", url.c_str()); - #ifdef ARDUINO - auto startsWith = [](const std::string& str, const std::string& prefix) -> bool { - if (str.length() < prefix.length()) return false; - - std::string lowerStr = str.substr(0, prefix.length()); - std::transform(lowerStr.begin(), lowerStr.end(), lowerStr.begin(), - [](unsigned char c){ return std::tolower(c); }); - - std::string lowerPrefix = prefix; - std::transform(lowerPrefix.begin(), lowerPrefix.end(), lowerPrefix.begin(), - [](unsigned char c){ return std::tolower(c); }); - - return lowerStr == lowerPrefix; - }; - - if (startsWith(url, "https")) { - ESP_LOGE(TAG, "HTTPS is not supported by Arduino framework."); - ESP_LOGE(TAG, "This transfer will most likely fail."); - ESP_LOGE(TAG, "Please use HTTP instead."); - } - #endif + ESP_LOGD(TAG, " Target upload baud rate: %s bps", tft_upload_baud_rate->state.c_str()); + ESP_LOGD(TAG, " Upload URL: %s", url.c_str()); disp1->set_tft_url(url.c_str()); - nextion_uart_command->execute("bkcmd=3"); - - lambda: if (id(tft_is_valid)) disp1->goto_page("home"); - delay: 2s - script.execute: open_upload_dialog @@ -363,7 +242,7 @@ script: - lambda: page_id->update(); - wait_until: condition: - - lambda: !lambda return (page_id->state == 26); + - lambda: return (page_id->state == 26); timeout: 2s - script.execute: id: report_upload_progress @@ -380,59 +259,34 @@ script: - script.wait: stop_all - wait_until: condition: - - lambda: !lambda return (!id(tft_is_valid)); + - lambda: return (!id(tft_is_valid)); timeout: 1s - ### Attempt twice with upload engine from v4.1.4 (115200bps) when TFT isn't detected - # - if: - # condition: - # - lambda: !lambda return (not id(tft_is_valid)); - # then: - # - script.execute: - # id: upload_tft_sequence_attempt_v414 - # url: !lambda return url.c_str(); - # baud_rate: 115200 - # - script.wait: upload_tft_sequence_attempt_v414 - ### Attempt twice at the target baud rate - script.execute: id: upload_tft_sequence_attempt - baud_rate: !lambda return id(baud_rate_target); + baud_rate: !lambda return stoi(tft_upload_baud_rate->state); - script.wait: upload_tft_sequence_attempt ### Attempt twice at the original baud rate - - script.execute: - id: upload_tft_sequence_attempt - baud_rate: !lambda return id(baud_rate_original); - - script.wait: upload_tft_sequence_attempt + - if: + condition: + - lambda: return (stoi(tft_upload_baud_rate->state) != tf_uart->get_baud_rate()); + then: + - script.execute: + id: upload_tft_sequence_attempt + baud_rate: 0 + - script.wait: upload_tft_sequence_attempt ### Attempt twice at the Nextion's default baud rate (115200bps) - - script.execute: - id: upload_tft_sequence_attempt - baud_rate: 115200 - - script.wait: upload_tft_sequence_attempt - - ### Attempt twice with upload engine from v4.1.4 (115200bps) - - script.execute: - id: upload_tft_sequence_attempt_v414 - url: !lambda return url.c_str(); - baud_rate: 115200 - - script.wait: upload_tft_sequence_attempt_v414 - - ### Exit reparse and attempt twice again - - script.execute: - id: report_upload_progress - message: "Exiting reparse mode" - - script.execute: - id: upload_tft_sequence_attempt - baud_rate: 115200 - - script.wait: upload_tft_sequence_attempt - - ### Then attempt twice again at 9600bps - - script.execute: - id: upload_tft_sequence_attempt - baud_rate: 9600 - - script.wait: upload_tft_sequence_attempt + - if: + condition: + - lambda: return (stoi(tft_upload_baud_rate->state) != 115200 and tf_uart->get_baud_rate() != 115200); + then: + - script.execute: + id: upload_tft_sequence_attempt + baud_rate: 115200 + - script.wait: upload_tft_sequence_attempt ### Restart Nextion and attempt twice again at default baud rate (115200bps) - script.execute: @@ -441,7 +295,7 @@ script: - script.wait: report_upload_progress - wait_until: condition: - - lambda: !lambda return (!id(tft_is_valid)); + - lambda: return (!id(tft_is_valid)); timeout: 3s - switch.turn_off: screen_power - delay: 2s @@ -459,7 +313,7 @@ script: - script.wait: report_upload_progress - wait_until: condition: - - lambda: !lambda return (!id(tft_is_valid)); + - lambda: return (!id(tft_is_valid)); timeout: 5s - script.execute: id: report_upload_progress @@ -467,12 +321,12 @@ script: - script.wait: report_upload_progress - wait_until: condition: - - lambda: !lambda return (!id(tft_is_valid)); + - lambda: return (!id(tft_is_valid)); timeout: 5s - switch.turn_off: screen_power - delay: 2s # Restart ESPHome - - lambda: !lambda App.safe_reboot(); + - lambda: App.safe_reboot(); ### This code should never run - delay: 2s @@ -486,7 +340,7 @@ script: - id: upload_tft_sequence_attempt mode: single parameters: - baud_rate: uint + baud_rate: uint32_t then: - script.execute: nextion_status - script.wait: nextion_status @@ -500,743 +354,70 @@ script: definitive: false - script.wait: set_baud_rate - delay: 2s - # First attempt - - script.execute: upload_tft_attempt - - script.wait: upload_tft_attempt - - delay: 5s - # Backup attempt - - script.execute: upload_tft_attempt - - script.wait: upload_tft_attempt - - delay: 5s - - - id: upload_tft_sequence_attempt_v414 - mode: single - parameters: - url: string - baud_rate: uint - then: - - script.execute: nextion_status - - script.wait: nextion_status - - script.execute: - id: report_upload_progress - message: "Setting baud rate" - - script.wait: report_upload_progress - - script.execute: - id: set_baud_rate - baud_rate: !lambda return baud_rate; - definitive: false - - script.wait: set_baud_rate - - delay: 2s - # Attempt #7 - - script.execute: - id: upload_tft_v414 - url: !lambda return url.c_str(); - - script.wait: upload_tft_v414 - - delay: 5s - # Attempt #8 - - script.execute: - id: upload_tft_v414 - url: !lambda return url.c_str(); - - script.wait: upload_tft_v414 - - delay: 5s - - - id: upload_tft_v414 - mode: single - parameters: - url: string - then: - - lambda: |- - static const char *const TAG = "addon_upload_tft.script.upload_tft_v414"; - ESP_LOGD(TAG, "Attempting to upload TFT"); - id(tft_upload_attempt)++; - char update_msg[128]; - sprintf(update_msg, "Attempt #%d at %" PRIu32 " bps", id(tft_upload_attempt), tf_uart->get_baud_rate()); - report_upload_progress->execute(update_msg); - - script.wait: report_upload_progress - - wait_until: - condition: - - lambda: !lambda return (!id(tft_is_valid)); - timeout: 1s - - lambda: |- - static const char *const TAG = "addon_upload_tft.script.upload_tft_v414"; - ESP_LOGD(TAG, "Starting..."); - std::vector buffer_; - - bool is_updating_ = false; - - bool upload_first_chunk_sent_ = false; - - int content_length_ = 0; - int tft_size_ = 0; - - auto delay_seconds_ = [](int seconds) { - ESP_LOGD(TAG, "Wait %i seconds", seconds); - for (int i = 0; i < (seconds*4); i++) { - #ifdef ARDUINO - delay(250); - #elif defined(USE_ESP_IDF) - vTaskDelay(pdMS_TO_TICKS(250)); - #endif - App.feed_wdt(); - } - }; - - auto set_baud_rate_ = [](int baud_rate) { - #ifdef USE_ARDUINO - auto *uart = reinterpret_cast(tf_uart); - #endif - #ifdef USE_ESP_IDF - auto *uart = reinterpret_cast(tf_uart); - #endif - uart->set_baud_rate(baud_rate); - uart->setup(); - }; - - auto send_nextion_command = [](const std::string &command) -> bool - { - static const char *const TAG = "addon_upload_tft.script.upload_tft.send_nextion_command"; - ESP_LOGD(TAG, "Sending: %s", command.c_str()); - id(tf_uart).write_str(command.c_str()); - const uint8_t to_send[3] = {0xFF, 0xFF, 0xFF}; - id(tf_uart).write_array(to_send, sizeof(to_send)); - return true; - }; - - auto recv_ret_string_ = [](std::string &response, uint32_t timeout, bool recv_flag) -> uint16_t - { - static const char *const TAG = "script.upload_tft.recv_ret_string_"; - uint16_t ret; - uint8_t c = 0; - uint8_t nr_of_ff_bytes = 0; - uint64_t start; - bool exit_flag = false; - bool ff_flag = false; - - start = millis(); - - while ((timeout == 0 && id(tf_uart).available()) || millis() - start <= timeout) - { - if (!id(tf_uart).available()) - { - App.feed_wdt(); - continue; - } - - id(tf_uart).read_byte(&c); - if (c == 0xFF) - { - nr_of_ff_bytes++; - } - else - { - nr_of_ff_bytes = 0; - ff_flag = false; - } - - if (nr_of_ff_bytes >= 3) - ff_flag = true; - - response += (char) c; - if (recv_flag) - { - if (response.find(0x05) != std::string::npos) - { - exit_flag = true; - } - } - App.feed_wdt(); - delay(2); - - if (exit_flag || ff_flag) - { - break; - } - } - - if (ff_flag) - response = response.substr(0, response.length() - 3); // Remove last 3 0xFF - - ret = response.length(); - return ret; - }; - - auto upload_end_ = [&](bool completed) -> bool - { - static const char *const TAG = "script.upload_tft.upload_end_"; - ESP_LOGD(TAG, "Completed: %s", completed ? "True" : "False"); - //ESP_LOGD(TAG, "Restarting Nextion"); - //send_nextion_command("rest"); - #ifdef ARDUINO - delay(1500); - #elif defined(ESP_PLATFORM) - //vTaskDelay(pdMS_TO_TICKS(1500)); - #endif - - is_updating_ = false; - if (!completed) ESP_LOGD(TAG, "Nextion TFT upload will attempt again"); - return completed; - }; - - #ifdef ARDUINO // arduino # To do: Move to Nextion component on ESPHome - size_t transfer_buffer_size_ = 0; - uint8_t *transfer_buffer_{nullptr}; - auto upload_by_chunks_arduino = [&](HTTPClient *http, const std::string &url, int range_start) -> int - { - static const char *const TAG = "script.upload_tft.upload_by_chunks_arduino"; - int range_end; - - if (range_start == 0 && transfer_buffer_size_ > 16384) { // Start small at the first run in case of a big skip - range_end = 16384 - 1; - } else { - range_end = range_start + transfer_buffer_size_ - 1; - } - - if (range_end > tft_size_) - range_end = tft_size_; - - char range_header[64]; - sprintf(range_header, "bytes=%d-%d", range_start, range_end); - - ESP_LOGD(TAG, "Requesting range: %s", range_header); - - int tries = 1; - int code; - bool begin_status; - while (tries <= 10) { - begin_status = http->begin(url.c_str()); - - ++tries; - if (!begin_status) { - ESP_LOGD(TAG, "Connection failed"); - delay(1000); - continue; - }; - - http->addHeader("Range", range_header); - - code = http->GET(); - if (code == 200 || code == 206) { - break; - } - ESP_LOGW(TAG, "HTTP Request failed; URL: %s; Error: %s, retries(%d/10)", url.c_str(), - HTTPClient::errorToString(code).c_str(), tries); - http->end(); - delay(1000); - } - - if (tries > 10) { - return -1; - } - - std::string recv_string; - size_t size; - int fetched = 0; - int range = range_end - range_start; - int write_len; - - // fetch next segment from HTTP stream - while (fetched < range) { - size = http->getStreamPtr()->available(); - if (!size) { - App.feed_wdt(); - delay(2); - continue; - } - int c = http->getStreamPtr()->readBytes( - &transfer_buffer_[fetched], ((size > transfer_buffer_size_) ? transfer_buffer_size_ : size)); - fetched += c; - } - http->end(); - ESP_LOGD(TAG, "Fetched %d bytes", fetched); - - // upload fetched segments to the display in 4KB chunks - for (int i = 0; i < range; i += 4096) { - App.feed_wdt(); - write_len = content_length_ < 4096 ? content_length_ : 4096; - id(tf_uart).write_array(&transfer_buffer_[i], write_len); - content_length_ -= write_len; - ESP_LOGD(TAG, "Uploaded %0.1f %%, remaining %d bytes", - 100.0 * (tft_size_ - content_length_) / tft_size_, - content_length_); - - if (!upload_first_chunk_sent_) { - upload_first_chunk_sent_ = true; - delay(500); - } - - recv_ret_string_(recv_string, 5000, true); - if (recv_string[0] != 0x05) { // 0x05 == "ok" - ESP_LOGD(TAG, "recv_string [%s]", - format_hex_pretty(reinterpret_cast(recv_string.data()), recv_string.size()).c_str()); - } - - // handle partial upload request - if (recv_string[0] == 0x08 && recv_string.size() == 5) { - uint32_t result = 0; - for (int j = 0; j < 4; ++j) { - result += static_cast(recv_string[j + 1]) << (8 * j); - } - if (result > 0) { - ESP_LOGD(TAG, "Nextion reported new range %d", result); - content_length_ = tft_size_ - result; - return result; - } - } - - recv_string.clear(); - } - return range_end + 1; - }; - auto upload_tft_ = [&](const std::string &url, uint32_t update_baud_rate_) -> bool - { - static const char *const TAG = "addon_upload_tft.script.upload_tft.upload_tft_arduino"; - ESP_LOGD(TAG, "Nextion TFT upload requested"); - ESP_LOGD(TAG, " url: %s", url.c_str()); - ESP_LOGD(TAG, " baud_rate: %" PRIu32, update_baud_rate_); - - if (is_updating_) { - ESP_LOGD(TAG, "Currently updating"); - return upload_end_(false); - } - - if (!network::is_connected()) { - ESP_LOGD(TAG, "Network is not connected"); - return upload_end_(false); - } - - if (!disp1->is_setup()) { - ESP_LOGD(TAG, "Setting Nextion protocol reparse mode to passive"); - exit_reparse_v414->execute(); - delay_seconds_(5); - } - - is_updating_ = true; - - HTTPClient http; - http.setTimeout(15000); // Yes 15 seconds.... Helps 8266s along - http.setFollowRedirects(HTTPC_STRICT_FOLLOW_REDIRECTS); - bool begin_status = http.begin(url.c_str()); - if (!begin_status) { - is_updating_ = false; - ESP_LOGD(TAG, "Connection failed"); - ExternalRAMAllocator allocator(ExternalRAMAllocator::ALLOW_FAILURE); - allocator.deallocate(transfer_buffer_, transfer_buffer_size_); - return upload_end_(false); - } else { - ESP_LOGD(TAG, "Connected"); - } - - http.addHeader("Range", "bytes=0-255"); - const char *header_names[] = {"Content-Range"}; - http.collectHeaders(header_names, 1); - ESP_LOGD(TAG, "Requesting URL: %s", url.c_str()); - - http.setReuse(true); - // attempt up to 5 times. DNS sometimes needs a second attempt or so - int tries = 1; - int code = http.GET(); - delay(100); - - while (code != 200 && code != 206 && tries <= 5) { - ESP_LOGW(TAG, "HTTP Request failed; URL: %s; Error: %s, reattempting (%d/5)", url.c_str(), - HTTPClient::errorToString(code).c_str(), tries); - - delay(250); - code = http.GET(); - ++tries; - } - - if ((code != 200 && code != 206) || tries > 5) { - return upload_end_(false); - } - - String content_range_string = http.header("Content-Range"); - content_range_string.remove(0, 12); - content_length_ = content_range_string.toInt(); - tft_size_ = content_length_; - http.end(); - - if (content_length_ < 4096) { - ESP_LOGE(TAG, "Failed to get file size"); - return upload_end_(false); - } - - ESP_LOGD(TAG, "Updating Nextion"); - // The Nextion will ignore the update command if it is sleeping - - char command[128]; - // Tells the Nextion the content length of the tft file and baud rate it will be sent at - // Once the Nextion accepts the command it will wait until the file is successfully uploaded - // If it fails for any reason a power cycle of the display will be needed - sprintf(command, "whmi-wris %d,%d,1", content_length_, update_baud_rate_); - - ESP_LOGD(TAG, "Clear serial receive buffer: %d", id(tf_uart).available()); - // Clear serial receive buffer - uint8_t d; - while (id(tf_uart).available()) { - id(tf_uart).read_byte(&d); - }; - - send_nextion_command(command); - - if (update_baud_rate_ != id(tf_uart).get_baud_rate()) { - set_baud_rate_(update_baud_rate_); - //id(tf_uart).set_baud_rate(update_baud_rate_); - //id(tf_uart).setup(); - //delay_seconds_(2); - } - - ESP_LOGD(TAG, "Waiting for upgrade response"); - std::string response; - recv_ret_string_(response, 5000, true); // This can take some time to return - // The Nextion display will, if it's ready to accept data, send a 0x05 byte. - ESP_LOGD(TAG, "Upgrade response is [%s]", - format_hex_pretty(reinterpret_cast(response.data()), response.size()).c_str()); - - if (response.find(0x05) != std::string::npos) { - ESP_LOGD(TAG, "Preparation for tft update done"); - } else { - ESP_LOGD(TAG, "Preparation for tft update failed %d \"%s\"", response[0], response.c_str()); - return upload_end_(false); - } - - // Nextion wants 4096 bytes at a time. Make chunk_size a multiple of 4096 - uint32_t chunk_size = 8192; - if (ESP.getFreeHeap() > 81920) { // Ensure some FreeHeap to other things and limit chunk size - chunk_size = ESP.getFreeHeap() - 65536; - chunk_size = int(chunk_size / 4096) * 4096; - chunk_size = chunk_size > ${upload_tft_chunk_size_max} ? ${upload_tft_chunk_size_max} : chunk_size; - } else if (ESP.getFreeHeap() < 32768) { - chunk_size = 4096; - } - - if (transfer_buffer_ == nullptr) { - ExternalRAMAllocator allocator(ExternalRAMAllocator::ALLOW_FAILURE); - ESP_LOGD(TAG, "Allocating buffer size %d, Heap size is %" PRIu32, chunk_size, ESP.getFreeHeap()); - transfer_buffer_ = allocator.allocate(chunk_size); - if (transfer_buffer_ == nullptr) { // Attempt a smaller size - ESP_LOGD(TAG, "Could not allocate buffer size: %d attempting 4096 instead", chunk_size); - chunk_size = 4096; - ESP_LOGD(TAG, "Allocating %d buffer", chunk_size); - transfer_buffer_ = allocator.allocate(chunk_size); - - if (!transfer_buffer_) - { - return upload_end_(false); - } - } - - transfer_buffer_size_ = chunk_size; - } - - ESP_LOGD(TAG, "Updating tft from \"%s\" with a file size of %d using %zu chunksize, Heap Size %" PRIu32, - url.c_str(), content_length_, transfer_buffer_size_, ESP.getFreeHeap()); - - int result = 0; - while (content_length_ > 0) { - result = upload_by_chunks_arduino(&http, url, result); - if (result < 0) { - ESP_LOGD(TAG, "Error updating Nextion!"); - return upload_end_(false); - } - App.feed_wdt(); - ESP_LOGD(TAG, "Heap Size %" PRIu32 ", Bytes left %d", ESP.getFreeHeap(), content_length_); - } - is_updating_ = false; - ESP_LOGD(TAG, "Successfully updated Nextion!"); - - return upload_end_(true); - }; - #elif defined(ESP_PLATFORM) // esp-idf # To do: Move to Nextion component on ESPHome - auto upload_range_esp_idf_ = [&](const std::string &url, int range_start) -> int { - static const char *const TAG = "addon_upload_tft.script.upload_tft.upload_range_esp_idf_"; - ESP_LOGVV(TAG, "url: %s", url.c_str()); - uint32_t range_size_ = tft_size_ - range_start; - ESP_LOGVV(TAG, "tft_size_: %i", tft_size_); - ESP_LOGV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - int range_end = (range_start == 0) ? std::min(tft_size_, 16383) : tft_size_; - if (range_size_ <= 0 or range_end <= range_start) { - ESP_LOGE(TAG, "Invalid range"); - ESP_LOGD(TAG, "Range start: %i", range_start); - ESP_LOGD(TAG, "Range end: %i", range_end); - ESP_LOGD(TAG, "Range size: %" PRIu32, range_size_); - return -1; - } - - esp_http_client_config_t config = { - .url = url.c_str(), - .cert_pem = nullptr, - }; - esp_http_client_handle_t client = esp_http_client_init(&config); - - char range_header[64]; - sprintf(range_header, "bytes=%d-%d", range_start, range_end); - ESP_LOGV(TAG, "Requesting range: %s", range_header); - esp_http_client_set_header(client, "Range", range_header); - ESP_LOGVV(TAG, "Available heap: %u", esp_get_free_heap_size()); - ESP_LOGV(TAG, "Opening http connetion"); - esp_err_t err; - if ((err = esp_http_client_open(client, 0)) != ESP_OK) { - ESP_LOGE(TAG, "Failed to open HTTP connection: %s", esp_err_to_name(err)); - esp_http_client_cleanup(client); - return -1; - } - - ESP_LOGV(TAG, "Fetch content length"); - int content_length = esp_http_client_fetch_headers(client); - ESP_LOGV(TAG, "content_length = %d", content_length); - if (content_length <= 0) { - ESP_LOGE(TAG, "Failed to get content length: %d", content_length); - esp_http_client_cleanup(client); - return -1; - } - - int total_read_len = 0, read_len; - - ESP_LOGV(TAG, "Allocate buffer"); - uint8_t* buffer = new uint8_t[4096]; - std::string recv_string; - if (buffer == nullptr) { - ESP_LOGE(TAG, "Failed to allocate memory for buffer"); - ESP_LOGV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - } else { - ESP_LOGV(TAG, "Memory for buffer allocated successfully"); - - while (true) { - App.feed_wdt(); - ESP_LOGVV(TAG, "Available heap: %u", esp_get_free_heap_size()); - int read_len = esp_http_client_read(client, reinterpret_cast(buffer), 4096); - ESP_LOGVV(TAG, "Read %d bytes from HTTP client, writing to UART", read_len); - if (read_len > 0) { - tf_uart->write_array(buffer, read_len); - ESP_LOGVV(TAG, "Write to UART successful"); - recv_ret_string_(recv_string, 5000, true); - content_length_ -= read_len; - ESP_LOGD(TAG, "Uploaded %0.2f %%, remaining %d bytes", - 100.0 * (tft_size_ - content_length_) / tft_size_, - content_length_); - if (recv_string[0] != 0x05) { // 0x05 == "ok" - ESP_LOGD(TAG, "recv_string [%s]", - format_hex_pretty(reinterpret_cast(recv_string.data()), recv_string.size()).c_str()); - } - // handle partial upload request - if (recv_string[0] == 0x08 && recv_string.size() == 5) { - uint32_t result = 0; - for (int j = 0; j < 4; ++j) { - result += static_cast(recv_string[j + 1]) << (8 * j); - } - if (result > 0) { - ESP_LOGI(TAG, "Nextion reported new range %" PRIu32, result); - content_length_ = tft_size_ - result; - // Deallocate the buffer when done - delete[] buffer; - ESP_LOGVV(TAG, "Memory for buffer deallocated"); - esp_http_client_cleanup(client); - esp_http_client_close(client); - return result; - } - } - recv_string.clear(); - } else if (read_len == 0) { - ESP_LOGV(TAG, "End of HTTP response reached"); - break; // Exit the loop if there is no more data to read - } else { - ESP_LOGE(TAG, "Failed to read from HTTP client, error code: %d", read_len); - break; // Exit the loop on error - } - } - - // Deallocate the buffer when done - delete[] buffer; - ESP_LOGVV(TAG, "Memory for buffer deallocated"); - } - esp_http_client_cleanup(client); - esp_http_client_close(client); - return range_end + 1; - }; - auto upload_tft_ = [&](const std::string &url, unsigned int update_baud_rate_) -> bool { - static const char *const TAG = "addon_upload_tft.script.upload_tft.upload_tft_esp_idf"; - ESP_LOGD(TAG, "Nextion TFT upload requested"); - ESP_LOGD(TAG, " url: %s", url.c_str()); - ESP_LOGD(TAG, " baud_rate: %u", update_baud_rate_); - - if (is_updating_) { - ESP_LOGW(TAG, "Currently updating"); - return upload_end_(false); - } - - if (!network::is_connected()) { - ESP_LOGE(TAG, "Network is not connected"); - return upload_end_(false); - } - - if (!disp1->is_setup()) { - ESP_LOGD(TAG, "Setting Nextion protocol reparse mode to passive"); - exit_reparse_v414->execute(); - delay_seconds_(5); - } - - is_updating_ = true; - - // Define the configuration for the HTTP client - ESP_LOGV(TAG, "Establishing connection to HTTP server"); - ESP_LOGVV(TAG, "Available heap: %u", esp_get_free_heap_size()); - esp_http_client_config_t config = { - .url = url.c_str(), - .cert_pem = nullptr, - .method = HTTP_METHOD_HEAD, - .timeout_ms = 15000, - }; - - // Initialize the HTTP client with the configuration - ESP_LOGV(TAG, "Initializing HTTP client"); - ESP_LOGV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - esp_http_client_handle_t http = esp_http_client_init(&config); - if (!http) { - ESP_LOGE(TAG, "Failed to initialize HTTP client."); - return upload_end_(false); // return -1 to indicate an error - } - - // Perform the HTTP request - ESP_LOGV(TAG, "Check if the client could connect"); - ESP_LOGV(TAG, "Available heap: %" PRIu32, esp_get_free_heap_size()); - esp_err_t err = esp_http_client_perform(http); - if (err != ESP_OK) { - ESP_LOGE(TAG, "HTTP request failed: %s", esp_err_to_name(err)); - esp_http_client_cleanup(http); - return upload_end_(false); - } - - // Check the HTTP Status Code - int status_code = esp_http_client_get_status_code(http); - ESP_LOGV(TAG, "HTTP Status Code: %d", status_code); - size_t tft_file_size = esp_http_client_get_content_length(http); - ESP_LOGD(TAG, "TFT file size: %zu", tft_file_size); - - if (tft_file_size < 4096) { - ESP_LOGE(TAG, "File size check failed. Size: %zu", tft_file_size); - esp_http_client_cleanup(http); - return upload_end_(false); - } else { - ESP_LOGD(TAG, "File size check passed. Proceeding..."); - } - content_length_ = tft_file_size; - tft_size_ = tft_file_size; - - ESP_LOGD(TAG, "Updating Nextion"); - // The Nextion will ignore the update command if it is sleeping - - char command[128]; - // Tells the Nextion the content length of the tft file and baud rate it will be sent at - // Once the Nextion accepts the command it will wait until the file is successfully uploaded - // If it fails for any reason a power cycle of the display will be needed - sprintf(command, "whmi-wris %d,%d,1", content_length_, update_baud_rate_); - - // Clear serial receive buffer - uint8_t d; - while (id(tf_uart).available()) { - id(tf_uart).read_byte(&d); - }; - - send_nextion_command(command); - - if (update_baud_rate_ != id(tf_uart).get_baud_rate()) { - set_baud_rate_(update_baud_rate_); - //id(tf_uart).set_baud_rate(update_baud_rate_); - //id(tf_uart).setup(); - } - - std::string response; - ESP_LOGD(TAG, "Waiting for upgrade response"); - recv_ret_string_(response, 2000, true); // This can take some time to return - - // The Nextion display will, if it's ready to accept data, send a 0x05 byte. - ESP_LOGD(TAG, "Upgrade response is [%s]", - format_hex_pretty(reinterpret_cast(response.data()), response.size()).c_str()); - - if (response.find(0x05) != std::string::npos) { - ESP_LOGV(TAG, "Preparation for tft update done"); - } else { - ESP_LOGE(TAG, "Preparation for tft update failed %d \"%s\"", response[0], response.c_str()); - esp_http_client_cleanup(http); - return upload_end_(false); - } - - ESP_LOGD(TAG, "Updating tft from \"%s\" with a file size of %d, Heap Size %" PRIu32, - url.c_str(), content_length_, esp_get_free_heap_size()); - - ESP_LOGV(TAG, "Starting transfer by chunks loop"); - int result = 0; - while (content_length_ > 0) { - result = upload_range_esp_idf_(url.c_str(), result); - if (result < 0) { - ESP_LOGE(TAG, "Error updating Nextion!"); - esp_http_client_cleanup(http); - return upload_end_(false); - } - App.feed_wdt(); - ESP_LOGV(TAG, "Heap Size %" PRIu32 ", Bytes left %d", esp_get_free_heap_size(), content_length_); - } - - is_updating_ = false; - ESP_LOGD(TAG, "Successfully updated Nextion!"); - - ESP_LOGD(TAG, "Close HTTP connection"); - esp_http_client_close(http); - esp_http_client_cleanup(http); - return upload_end_(true); - }; - #endif - - if (upload_tft_(url, 115200)) App.safe_reboot(); - char update_msg[128]; - sprintf(update_msg, "Attempt #%d at %" PRIu32 " bps failed!", id(tft_upload_attempt), tf_uart->get_baud_rate()); - report_upload_progress->execute(update_msg); - ESP_LOGD(TAG, "Finished!"); - - script.wait: report_upload_progress + - repeat: + count: 2 + then: + # First attempt + - script.execute: + id: upload_tft_attempt + baud_rate: !lambda return baud_rate; + - script.wait: upload_tft_attempt + - delay: 5s - id: upload_tft_attempt mode: single + parameters: + baud_rate: uint32_t then: - logger.log: "Attempting to upload TFT" - - lambda: !lambda id(tft_upload_attempt)++; + - lambda: id(tft_upload_attempt)++; - lambda: |- char update_msg[128]; sprintf(update_msg, "Attempt #%d at %" PRIu32 " bps", id(tft_upload_attempt), tf_uart->get_baud_rate()); + id(tft_upload_result) = esphome::nextion::Nextion::TFTUploadResult::UNKNOWN; report_upload_progress->execute(update_msg); - script.wait: report_upload_progress - wait_until: condition: - - lambda: !lambda return (!id(tft_is_valid)); + - lambda: return (!id(tft_is_valid)); timeout: 1s - - script.execute: nextion_upload + - script.execute: + id: nextion_upload + baud_rate: !lambda return baud_rate; - script.wait: nextion_upload - lambda: |- char update_msg[128]; - sprintf(update_msg, "Attempt #%d at %" PRIu32 " bps failed!", id(tft_upload_attempt), tf_uart->get_baud_rate()); + sprintf(update_msg, "Attempt #%d at %" PRIu32 " bps returned: %s", id(tft_upload_attempt), + tf_uart->get_baud_rate(), esphome::nextion::Nextion::tft_upload_result_to_string(id(tft_upload_result))); report_upload_progress->execute(update_msg); - script.wait: report_upload_progress + - if: + condition: + - lambda: |- + return + id(tft_upload_result) != esphome::nextion::Nextion::TFTUploadResult::UNKNOWN and + id(tft_upload_result) != esphome::nextion::Nextion::TFTUploadResult::UPLOAD_IN_PROGRESS and + id(tft_upload_result) != esphome::nextion::Nextion::TFTUploadResult::NEXTION_ERROR_PREPARATION_FAILED and + id(tft_upload_result) != esphome::nextion::Nextion::TFTUploadResult::NEXTION_ERROR_INVALID_RESPONSE; + then: + - delay: 5s + - lambda: |- + ESP_LOGI("addon_upload_tft.script.upload_tft_attempt", "Restarting ESPHome"); + App.safe_reboot(); + + - id: !extend watchdog + then: + - lambda: |- + if (!id(is_uploading_tft)) { + static const char *const TAG = "addon_upload_tft.script.watchdog"; + ESP_LOGI(TAG, "Add-on Upload TFT:"); + ESP_LOGI(TAG, " File model: %s", tft_file_model->state.c_str()); + ESP_LOGI(TAG, " Valid TFT: %s", YESNO(id(tft_is_valid))); + } select: - - id: tft_file_branch - name: ${name} Update TFT display - Branch - platform: template - options: - - "main" - - "beta" - - "dev" - initial_option: "main" - optimistic: true - restore_value: true - internal: true - entity_category: config - disabled_by_default: true - icon: mdi:file-sync - set_action: - - script.execute: set_tft_file - - id: tft_file_model - name: ${name} Update TFT display - Model + name: Update TFT display - Model platform: template options: - "Use nextion_update_url" @@ -1250,13 +431,38 @@ select: initial_option: "Use nextion_update_url" optimistic: true restore_value: true - internal: true + internal: false entity_category: config disabled_by_default: false icon: mdi:file-sync - set_action: + on_value: - script.execute: set_tft_file + - id: tft_upload_baud_rate + name: Update TFT display - Baud rate + platform: template + options: + - "2400" + - "4800" + - "9600" + - "19200" + - "31250" + - "38400" + - "57600" + - "115200" + - "230400" + - "250000" + - "256000" + - "512000" + - "921600" + initial_option: "921600" + optimistic: true + restore_value: true + internal: false + entity_category: config + disabled_by_default: true + icon: mdi:swap-horizontal + sensor: - id: !extend display_mode on_value: diff --git a/advanced/esphome/nspanel_esphome_advanced.yaml b/advanced/esphome/nspanel_esphome_advanced.yaml index 1b8786f..2fb8df5 100644 --- a/advanced/esphome/nspanel_esphome_advanced.yaml +++ b/advanced/esphome/nspanel_esphome_advanced.yaml @@ -16,37 +16,40 @@ substitutions: button: ##### EXIT REPARSE TFT DISPLAY ##### - - name: ${name} Exit reparse + - name: Exit reparse platform: template icon: mdi:file-sync id: tft_reparse_off entity_category: config + internal: false + disabled_by_default: true on_press: - logger.log: "Button pressed: Exit reparse" - script.execute: exit_reparse - ##### UPDATE TFT BLANK DISPLAY ##### - - name: ${name} Update TFT display (blank) - platform: template - icon: mdi:file-sync - id: tft_update_blank - entity_category: config - on_press: - - lambda: |- - static const char *const TAG = "button.tft_update_blank"; - ESP_LOGD(TAG, "Button pressed: Update TFT display (blank)"); - upload_tft->execute("${nextion_blank_url}"); - captive_portal: +script: + - id: exit_reparse + mode: restart + then: + - logger.log: "Exit reparse" + - uart.write: "DRAKJHSUYDGBNCJHGJKSHBDN" + - uart.write: [0xFF, 0xFF, 0xFF] + + - id: !extend stop_all + then: + - lambda: |- + exit_reparse->stop(); + sensor: ##### Uptime Sensors ##### - - name: ${name} Uptime seconds + - name: Uptime seconds id: uptime_sec platform: uptime internal: true - - name: ${name} API uptime + - name: API uptime id: api_timestamp platform: template lambda: 'return id(time_provider).now().timestamp;' @@ -56,7 +59,7 @@ sensor: accuracy_decimals: 0 update_interval: never - - name: ${name} Device uptime + - name: Device uptime id: device_timestamp platform: template lambda: 'return (id(time_provider).now().timestamp - id(uptime_sec).state);' @@ -68,20 +71,22 @@ sensor: text_sensor: ##### ESPhome version used to compile the app ##### - - name: ${name} ESPhome Version + - name: ESPhome Version platform: version - disabled_by_default: true + disabled_by_default: false + internal: false + icon: mdi:tag-text-outline - platform: wifi_info ip_address: - name: ${name} IP + name: IP disabled_by_default: true id: ip_address ssid: - name: ${name} SSID + name: SSID disabled_by_default: true bssid: - name: ${name} BSSID + name: BSSID disabled_by_default: true time: diff --git a/advanced/esphome/nspanel_esphome_core.yaml b/advanced/esphome/nspanel_esphome_core.yaml index cd73bc6..53bd7e7 100644 --- a/advanced/esphome/nspanel_esphome_core.yaml +++ b/advanced/esphome/nspanel_esphome_core.yaml @@ -15,21 +15,16 @@ substitutions: ap_password: ${wifi_password} device_name: NSPanel name: ${device_name} + friendly_name: ${device_name} wifi_timeout: '15' ##### DON'T CHANGE THIS ###### - version: "4.2.4" + version: "4.2.5" ############################## -##### External components ##### -external_components: - - source: github://pr#6051 # Remove this and update min ver when that PR is released (Hopefully v2024.1.0) - components: - - nextion - refresh: 300s - ##### ESPHOME CONFIGURATION ##### esphome: name: ${name} + friendly_name: ${friendly_name} min_version: 2023.12.0 platformio_options: build_flags: @@ -38,10 +33,32 @@ esphome: - priority: 600.0 # This is where most sensors are set up. then: - script.execute: restore_settings + - wait_until: + condition: + - lambda: return disp1->is_setup(); + timeout: 60s + - if: + condition: + - lambda: return (not disp1->is_detected()); + then: + - switch.turn_off: screen_power + - delay: 2s + - switch.turn_on: screen_power + - delay: 5s on_shutdown: - then: - - switch.turn_off: screen_power + - priority: 0 + then: + - lambda: |- + // Make it unavailable to blueprint calls + nextion_init->publish_state(false); + // Update Wi-Fi icon + disp1->set_component_text_printf("home.wifi_icon", "\uE708"); + // Update Wi-Fi icon color + disp1->set_component_font_color("home.wifi_icon", 63488); + - priority: 600.0 + then: + - switch.turn_off: screen_power ##### TYPE OF ESP BOARD ##### esp32: @@ -133,7 +150,9 @@ api: variables: cmd: string then: - - lambda: 'disp1->send_command_printf("%s", cmd.c_str());' + - lambda: |- + if (!id(is_uploading_tft)) + disp1->send_command_printf("%s", cmd.c_str()); ##### Service to send a command "text_printf" directly to the display ##### - service: send_command_text_printf @@ -141,7 +160,9 @@ api: component: string message: string then: - - lambda: 'disp1->set_component_text_printf(component.c_str(), "%s", message.c_str());' + - lambda: |- + if (!id(is_uploading_tft)) + disp1->set_component_text_printf(component.c_str(), "%s", message.c_str()); ##### Service to send a command "component_value (Dualstate Button)" directly to the display ##### - service: send_command_value @@ -150,21 +171,26 @@ api: val: int then: - lambda: |- - disp1->set_component_value(component.c_str(), val); + if (!id(is_uploading_tft)) + disp1->set_component_value(component.c_str(), val); ##### Service to send a command "hide componente" directly to the display ##### - service: send_command_hide variables: component: string then: - - lambda: 'disp1->hide_component(component.c_str());' + - lambda: |- + if (!id(is_uploading_tft)) + disp1->hide_component(component.c_str()); ##### Service to send a command "show componente" directly to the display ##### - service: send_command_show variables: component: string then: - - lambda: 'disp1->show_component(component.c_str());' + - lambda: |- + if (!id(is_uploading_tft)) + disp1->show_component(component.c_str()); ##### Service to send a command "font color" directly to the display ##### - service: set_component_color @@ -172,7 +198,9 @@ api: component: string foreground: int[] then: - - lambda: set_component_color->execute(component, foreground); + - lambda: |- + if (!id(is_uploading_tft)) + set_component_color->execute(component, foreground); ##### Service to play a rtttl tones ##### # Example tones : https://codebender.cc/sketch:109888#RTTTL%20Songs.ino @@ -196,7 +224,7 @@ api: then: - lambda: |- // Is page Alarm visible? - if (current_page->state == "alarm") // To do: This page constructor should be moved to Blueprint + if (current_page->state == "alarm" and not id(is_uploading_tft)) // To do: This page constructor should be moved to Blueprint { // Update alarm page detailed_entity->publish_state(entity); @@ -297,6 +325,9 @@ api: relay2_icon: !lambda "return relay2_icon;" relay2_icon_color: !lambda "return relay2_icon_color;" relay2_fallback: !lambda "return relay2_fallback;" + - script.wait: relay_settings + - lambda: |- + blueprint_status->publish_state(int(blueprint_status->raw_state) | (1 << 4)); ##### Service for transferring global settings from the blueprint to ESPHome ##### - service: global_settings @@ -317,10 +348,14 @@ api: embedded_climate: !lambda "return embedded_climate;" embedded_climate_friendly_name: !lambda "return embedded_climate_friendly_name;" embedded_indoor_temperature: !lambda "return embedded_indoor_temperature;" + # temperature_unit_is_fahrenheit: !lambda "return temperature_unit_is_fahrenheit;" # Deprecated mui_please_confirm: !lambda "return mui_please_confirm;" mui_unavailable: !lambda "return mui_unavailable;" screensaver_time: !lambda "return screensaver_time;" screensaver_time_color: !lambda "return screensaver_time_color;" + - script.wait: global_settings + - lambda: |- + blueprint_status->publish_state(int(blueprint_status->raw_state) | (1 << 5)); ##### Service to show a notification-message on the screen ##### - service: notification_show @@ -329,19 +364,21 @@ api: message: string then: - lambda: |- - ESP_LOGV("service.notification_show", "Starting"); + if (!id(is_uploading_tft)) { + ESP_LOGV("service.notification_show", "Starting"); - disp1->goto_page("notification"); - disp1->set_component_text_printf("notification.notifi_label", "%s", label.c_str()); + disp1->goto_page("notification"); + disp1->set_component_text_printf("notification.notifi_label", "%s", label.c_str()); - display_wrapped_text->execute("notification.notifi_text01", message.c_str(), display_mode->state == 2 ? 23 : 32); + display_wrapped_text->execute("notification.notifi_text01", message.c_str(), display_mode->state == 2 ? 23 : 32); - notification_label->publish_state(label.c_str()); - notification_text->publish_state(message.c_str()); - timer_reset_all->execute(current_page->state.c_str()); - refresh_notification->execute(); - notification_unread->turn_on(); - if (notification_sound->state) buzzer->play("two short:d=4,o=5,b=100:16e6,16e6"); + notification_label->publish_state(label.c_str()); + notification_text->publish_state(message.c_str()); + timer_reset_all->execute(current_page->state.c_str()); + refresh_notification->execute(); + notification_unread->turn_on(); + if (notification_sound->state) buzzer->play("two short:d=4,o=5,b=100:16e6,16e6"); + } ##### Service to clear the notification ##### - service: notification_clear @@ -375,9 +412,12 @@ api: show: bool then: - lambda: |- - disp1->set_component_text_printf("qrcode.qrcode_label", "%s", title.c_str()); - disp1->set_component_text_printf("qrcode.qrcode_value", "%s", qrcode.c_str()); - if (show) disp1->goto_page("qrcode"); + if (!id(is_uploading_tft)) { + disp1->set_component_text_printf("qrcode.qrcode_label", "%s", title.c_str()); + disp1->set_component_text_printf("qrcode.qrcode_value", "%s", qrcode.c_str()); + if (show) disp1->goto_page("qrcode"); + blueprint_status->publish_state(int(blueprint_status->raw_state) | (1 << 2)); + } #### Service to set climate state #### - service: set_climate @@ -394,20 +434,24 @@ api: embedded_climate: bool entity: string then: - - lambda: |- - if (current_page->state == "climate") detailed_entity->publish_state(entity); - - script.execute: - id: set_climate - current_temp: !lambda "return current_temp;" - supported_features: !lambda "return supported_features;" - target_temp: !lambda "return target_temp;" - target_temp_high: !lambda "return target_temp_high;" - target_temp_low: !lambda "return target_temp_low;" - temp_step: !lambda "return temp_step;" - total_steps: !lambda "return total_steps;" - temp_offset: !lambda "return temp_offset;" - climate_icon: !lambda "return climate_icon;" - embedded_climate: !lambda "return embedded_climate;" + - if: + condition: + lambda: 'return not id(is_uploading_tft);' + then: + - lambda: |- + if (current_page->state == "climate") detailed_entity->publish_state(entity); + - script.execute: + id: set_climate + current_temp: !lambda "return current_temp;" + supported_features: !lambda "return supported_features;" + target_temp: !lambda "return target_temp;" + target_temp_high: !lambda "return target_temp_high;" + target_temp_low: !lambda "return target_temp_low;" + temp_step: !lambda "return temp_step;" + total_steps: !lambda "return total_steps;" + temp_offset: !lambda "return temp_offset;" + climate_icon: !lambda "return climate_icon;" + embedded_climate: !lambda "return embedded_climate;" #### Service to set the buttons #### - service: set_button @@ -422,11 +466,11 @@ api: label: string then: - lambda: |- - static const char *const TAG = "service.set_button"; - if (page == current_page->state) { + if (page == current_page->state and not id(is_uploading_tft)) { std::string btnicon = id.c_str() + std::string("icon"); std::string btntext = id.c_str() + std::string("text"); std::string btnbri = id.c_str() + std::string("bri"); + std::string btnpic = id.c_str() + std::string("pic"); uint8_t bg_pic = state ? 47 : 46; uint16_t txt_color = state ? 10597 : 65535; disp1->send_command_printf("%spic.picc=%u", id.c_str(), bg_pic); @@ -443,8 +487,13 @@ api: disp1->set_component_text_printf(btnbri.c_str(), "%s", bri.c_str()); else disp1->set_component_text_printf(btnbri.c_str(), " "); + disp1->show_component(btnpic.c_str()); + disp1->show_component(btnicon.c_str()); + disp1->show_component(btntext.c_str()); + disp1->show_component(btnbri.c_str()); + disp1->show_component(id.c_str()); } else { - ESP_LOGW(TAG, "Skipping button `%s.%s` as page has changed to %s.", page.c_str(), id.c_str(), current_page->state.c_str()); + ESP_LOGW("service.set_button", "Skipping button `%s.%s` update.", page.c_str(), id.c_str()); } ##### SERVICE TO WAKE UP THE DISPLAY ##### @@ -453,12 +502,14 @@ api: reset_timer: bool then: - lambda: |- - if (current_page->state == "screensaver") disp1->goto_page(id(wakeup_page_id)); - if (reset_timer) - timer_reset_all->execute(id(page_names)[id(wakeup_page_id)].c_str()); - else { - timer_sleep->execute(id(page_names)[id(wakeup_page_id)].c_str(), int(timeout_sleep->state)); - timer_dim->execute(id(page_names)[id(wakeup_page_id)].c_str(), int(timeout_dim->state)); + if (not id(is_uploading_tft)) { + if (current_page->state == "screensaver") disp1->goto_page(wakeup_page_name->state.c_str()); + if (reset_timer) + timer_reset_all->execute(wakeup_page_name->state.c_str()); + else { + timer_sleep->execute(wakeup_page_name->state.c_str(), int(timeout_sleep->state)); + timer_dim->execute(wakeup_page_name->state.c_str(), int(timeout_dim->state)); + } } #### Service to set the entities #### @@ -471,14 +522,16 @@ api: ent_value_xcen: string then: - lambda: |- - std::string enticon = ent_id.c_str() + std::string("_pic"); - std::string entlabel = ent_id.c_str() + std::string("_label"); - std::string entxcen = ent_id.c_str() + std::string(".xcen=") + ent_value_xcen.c_str(); - disp1->set_component_text_printf(enticon.c_str(), "%s", ent_icon.c_str()); - if (strcmp(ent_icon.c_str(), "0") != 0) disp1->set_component_text_printf(enticon.c_str(), "%s", ent_icon.c_str()); - disp1->set_component_text_printf(entlabel.c_str(), "%s", ent_label.c_str()); - disp1->set_component_text_printf(ent_id.c_str(), "%s", ent_value.c_str()); - if (strcmp(ent_value_xcen.c_str(), "0") != 0) disp1->send_command_printf("%s", entxcen.c_str()); + if (not id(is_uploading_tft)) { + std::string enticon = ent_id.c_str() + std::string("_pic"); + std::string entlabel = ent_id.c_str() + std::string("_label"); + std::string entxcen = ent_id.c_str() + std::string(".xcen=") + ent_value_xcen.c_str(); + disp1->set_component_text_printf(enticon.c_str(), "%s", ent_icon.c_str()); + if (strcmp(ent_icon.c_str(), "0") != 0) disp1->set_component_text_printf(enticon.c_str(), "%s", ent_icon.c_str()); + disp1->set_component_text_printf(entlabel.c_str(), "%s", ent_label.c_str()); + disp1->set_component_text_printf(ent_id.c_str(), "%s", ent_value.c_str()); + if (strcmp(ent_value_xcen.c_str(), "0") != 0) disp1->send_command_printf("%s", entxcen.c_str()); + } #### Service to populate the page Home ##### - service: page_home @@ -500,73 +553,77 @@ api: entities_pages_icon_color: int[] then: - lambda: |- - static const char *const TAG = "service.page_home"; - ESP_LOGV(TAG, "date_color: %" PRIi32, date_color); - ESP_LOGV(TAG, "time_format: %s", time_format.c_str()); - ESP_LOGV(TAG, "time_color: %" PRIi32, time_color); - ESP_LOGV(TAG, "meridiem: %i", meridiem.size()); - ESP_LOGV(TAG, "chip_font_size: %" PRIi32, chip_font_size); - ESP_LOGV(TAG, "custom_buttons_font_size: %" PRIi32, custom_buttons_font_size); - ESP_LOGV(TAG, "notification_icon: %s", notification_icon.c_str()); - ESP_LOGV(TAG, "notification_icon_color_normal: %i", notification_icon_color_normal.size()); - ESP_LOGV(TAG, "notification_icon_color_unread: %i", notification_icon_color_unread.size()); - ESP_LOGV(TAG, "qrcode: %s", qrcode ? "True" : "False"); - ESP_LOGV(TAG, "qrcode_icon: %s", qrcode_icon.c_str()); - ESP_LOGV(TAG, "qrcode_icon_color: %i", qrcode_icon_color.size()); - ESP_LOGV(TAG, "entities_pages: %s", entities_pages ? "True" : "False"); - ESP_LOGV(TAG, "entities_pages_icon: %s", entities_pages_icon.c_str()); - ESP_LOGV(TAG, "entities_pages_icon_color: %i", entities_pages_icon_color.size()); + if (not id(is_uploading_tft)) { + static const char *const TAG = "service.page_home"; + ESP_LOGV(TAG, "date_color: %" PRIi32, date_color); + ESP_LOGV(TAG, "time_format: %s", time_format.c_str()); + ESP_LOGV(TAG, "time_color: %" PRIi32, time_color); + ESP_LOGV(TAG, "meridiem: %i", meridiem.size()); + ESP_LOGV(TAG, "chip_font_size: %" PRIi32, chip_font_size); + ESP_LOGV(TAG, "custom_buttons_font_size: %" PRIi32, custom_buttons_font_size); + ESP_LOGV(TAG, "notification_icon: %s", notification_icon.c_str()); + ESP_LOGV(TAG, "notification_icon_color_normal: %i", notification_icon_color_normal.size()); + ESP_LOGV(TAG, "notification_icon_color_unread: %i", notification_icon_color_unread.size()); + ESP_LOGV(TAG, "qrcode: %s", YESNO(qrcode)); + ESP_LOGV(TAG, "qrcode_icon: %s", qrcode_icon.c_str()); + ESP_LOGV(TAG, "qrcode_icon_color: %i", qrcode_icon_color.size()); + ESP_LOGV(TAG, "entities_pages: %s", YESNO(entities_pages)); + ESP_LOGV(TAG, "entities_pages_icon: %s", entities_pages_icon.c_str()); + ESP_LOGV(TAG, "entities_pages_icon_color: %i", entities_pages_icon_color.size()); - // Localization - ESP_LOGV(TAG, "Load localization"); - id(mui_time_format) = time_format; - id(mui_meridiem) = meridiem; + // Localization + ESP_LOGV(TAG, "Load localization"); + id(mui_time_format) = time_format; + id(mui_meridiem) = meridiem; - // Date/Time colors - ESP_LOGV(TAG, "Load date/time colors"); - disp1->set_component_font_color("home.date", date_color); - disp1->set_component_font_color("home.time", time_color); - id(home_date_color) = date_color; - id(home_time_color) = time_color; + // Date/Time colors + ESP_LOGV(TAG, "Load date/time colors"); + disp1->set_component_font_color("home.date", date_color); + disp1->set_component_font_color("home.time", time_color); + id(home_date_color) = date_color; + id(home_time_color) = time_color; - // Chips icon size - ESP_LOGV(TAG, "Chips size"); - for (int i = 1; i <= 10; ++i) { - disp1->send_command_printf("home.icon_top_%02d.font=%" PRIu32, i, chip_font_size); + // Chips icon size + ESP_LOGV(TAG, "Chips size"); + for (int i = 1; i <= 10; ++i) { + disp1->send_command_printf("home.icon_top_%02d.font=%" PRIu32, i, chip_font_size); + } + disp1->send_command_printf("home.wifi_icon.font=%" PRIu32, chip_font_size); + id(home_chip_font_size) = chip_font_size; + + // Custom buttons icon size + ESP_LOGV(TAG, "Custom buttons sizes"); + id(home_custom_buttons_font_size) = custom_buttons_font_size; + for (int i = 1; i <= 7; ++i) { + disp1->send_command_printf("home.button%02d.font=%i", i, id(home_custom_buttons_font_size)); + } + disp1->send_command_printf("home.bt_notific.font=%i", id(home_custom_buttons_font_size)); + disp1->send_command_printf("home.bt_qrcode.font=%i", id(home_custom_buttons_font_size)); + disp1->send_command_printf("home.bt_entities.font=%i", id(home_custom_buttons_font_size)); + + // Notification button + ESP_LOGV(TAG, "Set Notification button"); + disp1->send_command_printf("is_notification=%i", (notification_text->state.empty() and notification_label->state.empty()) ? 0 : 1); + disp1->set_component_text_printf("home.bt_notific", "%s", notification_icon.c_str()); + set_component_color->execute("home.bt_notific", notification_unread->state ? notification_icon_color_unread : notification_icon_color_normal); + id(home_notify_icon_color_normal) = notification_icon_color_normal; + id(home_notify_icon_color_unread) = notification_icon_color_unread; + + // QRCode button + ESP_LOGV(TAG, "Set QRCode button"); + disp1->send_command_printf("is_qrcode=%i", qrcode ? 1 : 0); + disp1->set_component_text_printf("home.bt_qrcode", "%s", qrcode_icon.c_str()); + set_component_color->execute("home.bt_qrcode", qrcode_icon_color); + + // Entities pages button + ESP_LOGV(TAG, "Set Entities button"); + disp1->send_command_printf("is_entities=%i", entities_pages ? 1 : 0); + disp1->set_component_text_printf("home.bt_entities", "%s", entities_pages_icon.c_str()); + //set_component_color->execute("home.bt_entities", entities_pages_icon_color); + set_component_color->execute("home.bt_entities", entities_pages_icon_color); + + blueprint_status->publish_state(int(blueprint_status->raw_state) | (1 << 1)); } - disp1->send_command_printf("home.wifi_icon.font=%" PRIu32, chip_font_size); - id(home_chip_font_size) = chip_font_size; - - // Custom buttons icon size - ESP_LOGV(TAG, "Custom buttons sizes"); - id(home_custom_buttons_font_size) = custom_buttons_font_size; - for (int i = 1; i <= 7; ++i) { - disp1->send_command_printf("home.button%02d.font=%i", i, id(home_custom_buttons_font_size)); - } - disp1->send_command_printf("home.bt_notific.font=%i", id(home_custom_buttons_font_size)); - disp1->send_command_printf("home.bt_qrcode.font=%i", id(home_custom_buttons_font_size)); - disp1->send_command_printf("home.bt_entities.font=%i", id(home_custom_buttons_font_size)); - - // Notification button - ESP_LOGV(TAG, "Set Notification button"); - disp1->send_command_printf("is_notification=%i", (notification_text->state.empty() and notification_label->state.empty()) ? 0 : 1); - disp1->set_component_text_printf("home.bt_notific", "%s", notification_icon.c_str()); - set_component_color->execute("home.bt_notific", notification_unread->state ? notification_icon_color_unread : notification_icon_color_normal); - id(home_notify_icon_color_normal) = notification_icon_color_normal; - id(home_notify_icon_color_unread) = notification_icon_color_unread; - - // QRCode button - ESP_LOGV(TAG, "Set QRCode button"); - disp1->send_command_printf("is_qrcode=%i", qrcode ? 1 : 0); - disp1->set_component_text_printf("home.bt_qrcode", "%s", qrcode_icon.c_str()); - set_component_color->execute("home.bt_qrcode", qrcode_icon_color); - - // Entities pages button - ESP_LOGV(TAG, "Set Entities button"); - disp1->send_command_printf("is_entities=%i", entities_pages ? 1 : 0); - disp1->set_component_text_printf("home.bt_entities", "%s", entities_pages_icon.c_str()); - //set_component_color->execute("home.bt_entities", entities_pages_icon_color); - set_component_color->execute("home.bt_entities", entities_pages_icon_color); #### Service to populate the page Settings ##### - service: page_settings @@ -577,10 +634,13 @@ api: dim: string then: - lambda: |- - if (not reboot.empty()) disp1->set_component_text_printf("settings.lbl_reboot", " %s", reboot.c_str()); - disp1->set_component_text_printf("settings.lbl_brightness", " %s", brightness.c_str()); - display_wrapped_text->execute("settings.lbl_bright", bright.c_str(), display_mode->state == 2 ? 25 : 10); - display_wrapped_text->execute("settings.lbl_dim", dim.c_str(), display_mode->state == 2 ? 25 : 10); + if (not id(is_uploading_tft)) { + if (not reboot.empty()) disp1->set_component_text_printf("settings.lbl_reboot", " %s", reboot.c_str()); + disp1->set_component_text_printf("settings.lbl_brightness", " %s", brightness.c_str()); + display_wrapped_text->execute("settings.lbl_bright", bright.c_str(), display_mode->state == 2 ? 25 : 10); + display_wrapped_text->execute("settings.lbl_dim", dim.c_str(), display_mode->state == 2 ? 25 : 10); + blueprint_status->publish_state(int(blueprint_status->raw_state) | (1 << 3)); + } #### Service to populate the media player page ##### - service: media_player @@ -598,106 +658,85 @@ api: supported_features: int then: - lambda: |- - if (current_page->state == "media_player") - { - detailed_entity->publish_state(entity); - disp1->set_component_text_printf("page_label", "%s", friendly_name.c_str()); - display_wrapped_text->execute("track", media_title.c_str(), display_mode->state == 2 ? 16 : 27); - display_wrapped_text->execute("artist", media_artist.c_str(), display_mode->state == 2 ? 26 : 40); + if (current_page->state == "media_player" and not id(is_uploading_tft)) { + detailed_entity->publish_state(entity); + disp1->set_component_text_printf("page_label", "%s", friendly_name.c_str()); + display_wrapped_text->execute("track", media_title.c_str(), display_mode->state == 2 ? 16 : 27); + display_wrapped_text->execute("artist", media_artist.c_str(), display_mode->state == 2 ? 26 : 40); - // on/off button - if (supported_features & 128 and state == "off") //TURN_ON - { - disp1->set_component_foreground_color("bt_on_off", 65535); - disp1->show_component("bt_on_off"); - } - else if (supported_features & 256 and state != "off") //TURN_OFF - { - disp1->set_component_foreground_color("bt_on_off", 10597); - disp1->show_component("bt_on_off"); - } - else disp1->hide_component("bt_on_off"); + // on/off button + if (supported_features & 128 and state == "off") { //TURN_ON + disp1->set_component_foreground_color("bt_on_off", 65535); + disp1->show_component("bt_on_off"); + } else if (supported_features & 256 and state != "off") { //TURN_OFF + disp1->set_component_foreground_color("bt_on_off", 10597); + disp1->show_component("bt_on_off"); + } else disp1->hide_component("bt_on_off"); - // play/pause button - if ((supported_features & 512 or supported_features & 16384) and state != "playing" and state != "off") //PLAY_MEDIA+PLAY - { - disp1->set_component_text_printf("bt_play_pause", "%s", "\uE409"); // mdi:play - disp1->show_component("bt_play_pause"); - } - else if (supported_features & 1 and state == "playing" ) //PAUSE - { - disp1->set_component_text_printf("bt_play_pause", "%s", "\uE3E3"); // mdi:pause - disp1->show_component("bt_play_pause"); - } - else disp1->hide_component("bt_play_pause"); + // play/pause button + if ((supported_features & 512 or supported_features & 16384) and state != "playing" and state != "off") { //PLAY_MEDIA+PLAY + disp1->set_component_text_printf("bt_play_pause", "%s", "\uE409"); // mdi:play + disp1->show_component("bt_play_pause"); + } else if (supported_features & 1 and state == "playing" ) { //PAUSE + disp1->set_component_text_printf("bt_play_pause", "%s", "\uE3E3"); // mdi:pause + disp1->show_component("bt_play_pause"); + } else disp1->hide_component("bt_play_pause"); - // bt_prev button - PREVIOUS_TRACK - if (supported_features & 16 and state != "off") disp1->show_component("bt_prev"); else disp1->hide_component("bt_prev"); - // bt_next button - NEXT_TRACK - if (supported_features & 32 and state != "off") disp1->show_component("bt_next"); else disp1->hide_component("bt_next"); + // bt_prev button - PREVIOUS_TRACK + if (supported_features & 16 and state != "off") disp1->show_component("bt_prev"); else disp1->hide_component("bt_prev"); + // bt_next button - NEXT_TRACK + if (supported_features & 32 and state != "off") disp1->show_component("bt_next"); else disp1->hide_component("bt_next"); - // Stop button - STOP - //if (supported_features & 4096 and (state == "playing" or state == "paused")) disp1->show_component("bt_stop"); else disp1->hide_component("bt_stop"); + // Stop button - STOP + //if (supported_features & 4096 and (state == "playing" or state == "paused")) disp1->show_component("bt_stop"); else disp1->hide_component("bt_stop"); - // mute/unmute button - VOLUME_MUTE - disp1->set_component_value("is_muted", is_volume_muted ? 1 : 0); - if (supported_features & 8 and is_volume_muted) // unmute - { - disp1->set_component_text_printf("bt_mute", "%s", "\uEE07"); // mdi:volume-variant-off - disp1->show_component("bt_mute"); - } - else if (supported_features & 8) // mute - { - disp1->set_component_text_printf("bt_mute", "%s", "\uE57E"); // mdi:volume-low - disp1->show_component("bt_mute"); - } - else disp1->hide_component("bt_mute"); + // mute/unmute button - VOLUME_MUTE + disp1->set_component_value("is_muted", is_volume_muted ? 1 : 0); + if (supported_features & 8 and is_volume_muted) { // unmute + disp1->set_component_text_printf("bt_mute", "%s", "\uEE07"); // mdi:volume-variant-off + disp1->show_component("bt_mute"); + } else if (supported_features & 8) { // mute + disp1->set_component_text_printf("bt_mute", "%s", "\uE57E"); // mdi:volume-low + disp1->show_component("bt_mute"); + } else disp1->hide_component("bt_mute"); - // VOLUME_SET - if (supported_features & 4) - { - if (volume_level != id(last_volume_level)) - { - id(last_volume_level) = volume_level; - disp1->set_component_text_printf("vol_text", "%" PRIu32 "%%", volume_level); - disp1->set_component_value("vol_slider", volume_level); - } - disp1->show_component("vol_slider"); - disp1->show_component("bt_vol_down"); - disp1->show_component("bt_vol_up"); - disp1->show_component("vol_text"); - } - else - { - disp1->hide_component("vol_slider"); - disp1->hide_component("bt_vol_down"); - disp1->hide_component("bt_vol_up"); - disp1->hide_component("vol_text"); - } - - if (media_duration > 0) - { - if (media_duration != id(last_media_duration) or media_position != id(last_media_position)) - { - id(last_media_duration) = media_duration; - id(last_media_position) = media_position; - disp1->set_component_value("prg_current", int(round(min(media_position + media_position_delta, media_duration)))); - } - disp1->set_component_value("prg_total", int(round(media_duration))); - disp1->send_command_printf("prg_timer.en=%i", (state == "playing") ? 1 : 0); - disp1->show_component("time_current"); - disp1->show_component("time_total"); - disp1->show_component("time_progress"); - } - else - { - disp1->send_command_printf("prg_timer.en=0"); - disp1->hide_component("time_current"); - disp1->hide_component("time_total"); - disp1->hide_component("time_progress"); - } + // VOLUME_SET + if (supported_features & 4) { + if (volume_level != id(last_volume_level)) { + id(last_volume_level) = volume_level; + disp1->set_component_text_printf("vol_text", "%" PRIu32 "%%", volume_level); + disp1->set_component_value("vol_slider", volume_level); + } + disp1->show_component("vol_slider"); + disp1->show_component("bt_vol_down"); + disp1->show_component("bt_vol_up"); + disp1->show_component("vol_text"); + } else { + disp1->hide_component("vol_slider"); + disp1->hide_component("bt_vol_down"); + disp1->hide_component("bt_vol_up"); + disp1->hide_component("vol_text"); } + if (media_duration > 0) { + if (media_duration != id(last_media_duration) or media_position != id(last_media_position)) { + id(last_media_duration) = media_duration; + id(last_media_position) = media_position; + disp1->set_component_value("prg_current", int(round(min(media_position + media_position_delta, media_duration)))); + } + disp1->set_component_value("prg_total", int(round(media_duration))); + disp1->send_command_printf("prg_timer.en=%i", (state == "playing") ? 1 : 0); + disp1->show_component("time_current"); + disp1->show_component("time_total"); + disp1->show_component("time_progress"); + } else { + disp1->send_command_printf("prg_timer.en=0"); + disp1->hide_component("time_current"); + disp1->hide_component("time_total"); + disp1->hide_component("time_progress"); + } + } + ##### START - DISPLAY START CONFIGURATION ##### display: - id: disp1 @@ -732,12 +771,6 @@ display: ##### START - GLOBALS CONFIGURATION ##### globals: - ##### Wake-up page id ##### - - id: wakeup_page_id - type: uint - restore_value: true - initial_value: '0' - ##### Wi-Fi timeout ##### - id: wifi_timeout type: uint @@ -750,24 +783,6 @@ globals: restore_value: false initial_value: 'false' - ##### Is blueprint updated ##### - - id: is_blueprint_updated - type: bool - restore_value: false - initial_value: 'false' - - ##### Is global settings loaded ##### - - id: is_global_settings_loaded - type: bool - restore_value: false - initial_value: 'false' - - ##### Is settings restored #### - - id: is_restored_settings - type: bool - restore_value: false - initial_value: 'false' - ##### Is boot sequence completed? ##### - id: setup_sequence_completed type: bool @@ -903,12 +918,6 @@ globals: restore_value: false initial_value: '{64, 64, 64}' - ##### Versions ##### - - id: version_blueprint - type: std::string - restore_value: false - initial_value: '' - - id: page_names type: std::vector restore_value: false @@ -943,11 +952,16 @@ globals: "confirm" }' + - id: framework + type: uint8_t + restore_value: false + initial_value: '0' # 0 = unknown, 1 = Arduino, 2 = ESP-IDF + ##### START - BINARY SENSOR CONFIGURATION ##### binary_sensor: ###### LEFT BUTTON BELOW DISPLAY TO TOGGLE RELAY##### - - name: ${name} Left Button + - name: Left Button platform: gpio id: left_button pin: @@ -1000,7 +1014,7 @@ binary_sensor: - script.execute: setup_sequence ##### RIGHT BUTTON BELOW DISPLAY TO TOGGLE RELAY ##### - - name: ${name} Right Button + - name: Right Button platform: gpio id: right_button pin: @@ -1044,7 +1058,7 @@ binary_sensor: - button.press: restart_nspanel ##### Restart NSPanel Button - Setting Page ##### - - name: ${name} Restart + - name: Restart platform: nextion page_id: 7 component_id: 9 @@ -1052,7 +1066,7 @@ binary_sensor: on_click: - button.press: restart_nspanel ##### Restart NSPanel Button - Boot Page ##### - - name: ${name} Restart + - name: Restart platform: nextion page_id: 8 component_id: 4 @@ -1061,7 +1075,7 @@ binary_sensor: - button.press: restart_nspanel ## Delays initial info from HA to the display ##### - - name: ${name} Nextion display + - name: Nextion display id: nextion_init platform: template device_class: connectivity @@ -1070,7 +1084,7 @@ binary_sensor: icon: mdi:tablet-dashboard ##### API connection status - - name: ${name} Status + - name: Status platform: status id: api_status on_state: @@ -1079,15 +1093,36 @@ binary_sensor: ##### START - BUTTON CONFIGURATION ##### button: + ###### Factory Reset button ##### + - name: Factory reset + platform: factory_reset + id: nspanel_factory_reset + internal: false + disabled_by_default: true + icon: mdi:restart-alert + ###### REBOOT BUTTON ##### - - name: ${name} Restart + - name: Restart platform: restart id: restart_nspanel + ###### Power cycle Nextion Display ###### + - name: Nextion display - Power cycle + id: screen_power_cycle + platform: template + internal: false + disabled_by_default: true + icon: mdi:power-cycle + entity_category: diagnostic + on_press: + - switch.turn_off: screen_power + - delay: 1s + - switch.turn_on: screen_power + ##### START - NUMBER CONFIGURATION ##### number: ##### SCREEN BRIGHTNESS ##### - - name: ${name} Display Brightness + - name: Display Brightness id: display_brightness platform: template entity_category: config @@ -1114,7 +1149,7 @@ number: } ##### SCREEN BRIGHTNESS DIMMED DOWN ##### - - name: ${name} Display Brightness Dimdown + - name: Display Brightness Dimdown id: display_dim_brightness platform: template entity_category: config @@ -1139,7 +1174,7 @@ number: } ##### SCREEN BRIGHTNESS SLEEP ##### - - name: ${name} Display Brightness Sleep + - name: Display Brightness Sleep id: display_sleep_brightness platform: template entity_category: config @@ -1158,11 +1193,11 @@ number: page_screensaver->execute(); ##### Temperature Correction ##### - - name: ${name} Temperature Correction + - name: Temperature Correction platform: template id: temperature_correction entity_category: config - unit_of_measurement: ${temp_units} + unit_of_measurement: °C min_value: -10 max_value: 10 initial_value: 0 @@ -1177,7 +1212,7 @@ number: - lambda: temp_nspanel->publish_state(temp_nspanel->raw_state); ##### Timers settings ##### - - name: ${name} Timeout Page + - name: Timeout Page platform: template id: timeout_page entity_category: config @@ -1191,7 +1226,7 @@ number: unit_of_measurement: "s" set_action: - lambda: timer_page->execute(current_page->state.c_str(), int(x)); - - name: ${name} Timeout Dimming + - name: Timeout Dimming platform: template id: timeout_dim entity_category: config @@ -1205,7 +1240,7 @@ number: unit_of_measurement: "s" set_action: - lambda: timer_dim->execute(current_page->state.c_str(), int(x)); - - name: ${name} Timeout Sleep + - name: Timeout Sleep platform: template id: timeout_sleep entity_category: config @@ -1225,7 +1260,7 @@ number: ##### START - SELECT CONFIGURATION ##### select: - id: baud_rate - name: ${name} Baud rate + name: Baud rate platform: template options: - "2400" @@ -1248,11 +1283,11 @@ select: entity_category: config disabled_by_default: true icon: mdi:swap-horizontal - set_action: + on_value: - lambda: set_baud_rate->execute(stoi(x), true); - id: wakeup_page_name - name: ${name} Wake-up page + name: Wake-up page platform: template options: - buttonpage01 @@ -1272,16 +1307,44 @@ select: internal: false entity_category: config icon: mdi:page-next-outline - set_action: + on_value: - lambda: |- static const char *const TAG = "select.wakeup_page_name"; ESP_LOGD(TAG, "New wake-up page selected: %s", x.c_str()); - if (id(is_restored_settings)) - set_page_id->execute("wakeup_page_id", x.c_str()); - - script.execute: page_screensaver + page_screensaver->execute(); ##### START - SENSOR CONFIGURATION ##### sensor: + ##### Blueprint status ##### + # Bit # Settings step # + # 0 # reserved # + # 1 # page_home # + # 2 # qrcode # + # 3 # page_settings # + # 4 # relay_settings # + # 5 # global_settings # + # 6 # reserved # + # 7 # reserved # + ############################## + - name: Blueprint + id: blueprint_status + platform: template + unit_of_measurement: "%" + accuracy_decimals: 1 + entity_category: diagnostic + icon: mdi:link-variant + internal: false + disabled_by_default: false + filters: + - lambda: return (x / 62) * 100.0f; + on_value: + then: + - lambda: |- + static const char *const TAG = "sensor.blueprint_status"; + ESP_LOGD(TAG, "Blueprint progress: %i%%", int(round(x))); + // Update api value on Nextion + disp1->send_command_printf("api=%i", (x > 99) ? 1 : 0); + ##### INTERNAL TEMPERATURE SENSOR, ADC VALUE ##### - id: ntc_source platform: adc @@ -1298,10 +1361,10 @@ sensor: ##### INTERNAL TEMPERATURE SENSOR, resistance to temperature (calculation) ##### - id: temp_nspanel - name: ${name} Temperature + name: Temperature platform: ntc sensor: resistance_sensor - unit_of_measurement: ${temp_units} + unit_of_measurement: °C internal: false calibration: b_constant: 3950 @@ -1309,11 +1372,7 @@ sensor: reference_resistance: 10kOhm filters: - lambda: |- - std::string temp_unit = "${temp_units}"; - if (temp_unit == "°F" or temp_unit == "F" or temp_unit == "°f" or temp_unit == "f") - return (x * (9.0/5.0)) + 32.0 + temperature_correction->state; - else - return x + temperature_correction->state; + return x + temperature_correction->state; on_value: then: # Show panel's temperature if API or Wi-Fi are out @@ -1321,7 +1380,7 @@ sensor: ###### Display Brightness GET VALUE FROM NSPanel SLIDER ##### - id: brightslider - name: ${name} brightness Slider + name: brightness Slider platform: nextion variable_name: brightslider internal: true @@ -1335,7 +1394,7 @@ sensor: ###### Display DIM Brightness GET VALUE FROM NSPanel SLIDER ##### - id: dimslider - name: ${name} dim brightness slider + name: dim brightness slider platform: nextion variable_name: dimslider internal: true @@ -1349,16 +1408,15 @@ sensor: ###### Display Brightness - Current value (%) ##### - id: current_brightness - name: ${name} Display Current brightness + name: Display Current brightness platform: nextion variable_name: dim precision: 0 accuracy_decimals: 0 unit_of_measurement: "%" icon: mdi:brightness-percent - #update_interval: 60s internal: false - disabled_by_default: true + disabled_by_default: false on_value: then: - lambda: |- @@ -1367,7 +1425,7 @@ sensor: ###### Page Id - Current ##### - id: page_id - name: ${name} Page Id + name: Page Id platform: nextion variable_name: dp precision: 0 @@ -1390,37 +1448,40 @@ sensor: ##### Display mode (1 = EU, 2 = US, 3 = US Landscape) - id: display_mode - name: ${name} Display mode + name: Display mode platform: nextion variable_name: display_mode precision: 0 accuracy_decimals: 0 - internal: true + internal: false + icon: mdi:phone-rotate-portrait entity_category: diagnostic ##### Charset (1 = International (original), 2 = CJK languages) - - name: ${name} Display charset + - name: Display charset id: display_charset platform: nextion variable_name: charset precision: 0 accuracy_decimals: 0 - internal: true + internal: false + icon: mdi:translate entity_category: diagnostic - ##### WIFI Signal stregth - - name: ${name} RSSI + ##### Wi-Fi Signal stregth + - name: RSSI id: wifi_rssi platform: wifi_signal internal: false - disabled_by_default: true + disabled_by_default: false + icon: mdi:wifi entity_category: diagnostic ##### START - SWITCH CONFIGURATION ##### switch: ##### Notification unread ##### - - name: ${name} Notification unread + - name: Notification unread platform: template id: notification_unread entity_category: config @@ -1429,16 +1490,16 @@ switch: on_turn_on: - wait_until: condition: - - lambda: !lambda return id(is_global_settings_loaded); + - lambda: !lambda return (blueprint_status->state > 99); - lambda: set_component_color->execute("home.bt_notific", id(home_notify_icon_color_unread)); on_turn_off: - wait_until: condition: - - lambda: !lambda return id(is_global_settings_loaded); + - lambda: !lambda return (blueprint_status->state > 99); - lambda: set_component_color->execute("home.bt_notific", id(home_notify_icon_color_normal)); ##### Notification sound ##### - - name: ${name} Notification sound + - name: Notification sound platform: template id: notification_sound entity_category: config @@ -1446,7 +1507,7 @@ switch: restore_mode: RESTORE_DEFAULT_OFF ##### PHYSICAL SWITCH 1 ##### - - name: ${name} Relay 1 + - name: Relay 1 platform: gpio id: relay_1 pin: @@ -1459,7 +1520,7 @@ switch: then: - script.execute: refresh_relays ##### PHYSICAL SWITCH 2 ###### - - name: ${name} Relay 2 + - name: Relay 2 platform: gpio id: relay_2 pin: @@ -1473,7 +1534,7 @@ switch: - script.execute: refresh_relays ##### DISPLAY ALWAYS ON ##### - - name: ${name} Nextion display - Power + - name: Nextion display - Power platform: gpio id: screen_power entity_category: diagnostic @@ -1481,8 +1542,8 @@ switch: number: 4 inverted: true restore_mode: ALWAYS_ON - internal: false - disabled_by_default: true + internal: true + disabled_by_default: false on_turn_on: - wait_until: condition: @@ -1491,14 +1552,14 @@ switch: - lambda: |- if (id(setup_sequence_completed)) { nextion_init->publish_state(disp1->is_setup()); - disp1->goto_page(id(wakeup_page_id)); + disp1->goto_page(wakeup_page_name->state.c_str()); } on_turn_off: - lambda: |- nextion_init->publish_state(false); ##### Relay Local control ##### - - name: ${name} Relay 1 Local + - name: Relay 1 Local platform: template id: relay1_local entity_category: config @@ -1509,7 +1570,7 @@ switch: - logger.log: "Relay 1 Local turned On!" on_turn_off: - logger.log: "Relay 1 Local turned Off!" - - name: ${name} Relay 2 Local + - name: Relay 2 Local platform: template id: relay2_local entity_category: config @@ -1523,9 +1584,8 @@ switch: ##### START - TEXT SENSOR CONFIGURATION ##### text_sensor: - ##### Entity Id of the entity displayed on the detailed pages - - name: ${name} Detailed Entity + - name: Detailed Entity id: detailed_entity platform: template icon: mdi:tablet-dashboard @@ -1533,23 +1593,23 @@ text_sensor: disabled_by_default: false ##### Current page name ##### - - name: ${name} Current page + - name: Current page id: current_page platform: template icon: mdi:tablet-dashboard internal: false disabled_by_default: false - - name: ${name} Notification Label + - name: Notification Label platform: template id: notification_label - - name: ${name} Notification Text + - name: Notification Text platform: template id: notification_text ##### NSPanel event sensor, the main action sensor - push to HA ##### - - name: ${name} NSPanel event + - name: NSPanel event platform: nextion nextion_id: disp1 id: disp1_nspanel_event @@ -1587,7 +1647,7 @@ text_sensor: }); ##### NSPanel event - Execute actions from ESPHome - NO push to HA ##### - - name: ${name} NSPanel local event + - name: NSPanel local event platform: nextion nextion_id: disp1 id: disp1_local_event @@ -1677,16 +1737,60 @@ text_sensor: else if (not key.empty()) ha_call_service->execute((std::string("media_player.") + key.c_str()), "", "", entity.c_str()); } + ##### Versioning ##### + - id: version_blueprint + name: Version Blueprint + platform: template + entity_category: diagnostic + icon: mdi:tag-text-outline + internal: false + update_interval: never + lambda: |- + return {"unknown"}; + on_value: + - lambda: |- + static const char *const TAG = "text_sensor.version_blueprint"; + ESP_LOGD(TAG, "Blueprint version: %s", x.c_str()); + if (current_page->state == "boot") { + disp1->set_component_text_printf("boot.bluep_version", "%s", x.c_str()); + disp1->send_command_printf("tm_esphome.en=0"); + page_boot->execute(); + timer_reset_all->execute("boot"); + } + check_versions->execute(); + + - id: version_esphome + name: Version ESPHome + platform: template + entity_category: diagnostic + icon: mdi:tag-text-outline + internal: false + lambda: |- + return {"${version}"}; + on_value: + - lambda: |- + static const char *const TAG = "text_sensor.version_esphome"; + ESP_LOGD(TAG, "ESPHome version: %s", x.c_str()); + if (current_page->state == "boot") { + disp1->set_component_text_printf("esph_version", x.c_str()); + disp1->send_command_printf("tm_esphome.en=0"); + page_boot->execute(); + timer_reset_all->execute("boot"); + } + check_versions->execute(); + - id: version_tft - name: ${name} TFT version + name: Version TFT platform: nextion component_name: tft_version entity_category: diagnostic - internal: true + icon: mdi:tag-text-outline + internal: false + update_interval: never on_value: - lambda: |- static const char *const TAG = "text_sensor.version_tft"; - ESP_LOGD(TAG, "TFT version: %s", version_tft->state.c_str()); + ESP_LOGD(TAG, "TFT version: %s", x.c_str()); if (current_page->state == "boot") { disp1->send_command_printf("tm_esphome.en=0"); page_boot->execute(); @@ -1704,6 +1808,7 @@ script: value: string then: - lambda: |- + if (id(is_uploading_tft)) change_climate_state->stop(); if (!embedded) { if (key == "temperature" or key == "target_temp_high" or key == "target_temp_low") ha_call_service->execute("climate.set_temperature", key.c_str(), to_string(stof(value) / 10), detailed_entity->state.c_str()); @@ -1727,9 +1832,10 @@ script: return (major1 == major2) && (minor1 == minor2); }; - return (compareVersions("${version}", version_tft->state.c_str()) and compareVersions("${version}", id(version_blueprint).c_str())); + return (compareVersions("${version}", version_tft->state.c_str()) and compareVersions("${version}", version_blueprint->state.c_str())); timeout: 60s - lambda: |- + if (id(is_uploading_tft)) check_versions->stop(); static const char *const TAG = "script.check_versions"; auto compareVersions = [](const char* version1, const char* version2) -> bool { @@ -1741,20 +1847,12 @@ script: return (major1 == major2) && (minor1 == minor2); }; - ESP_LOGD(TAG, "ESPHome version: ${version}"); - ESP_LOGD(TAG, "TFT version: %s", version_tft->state.c_str()); + ESP_LOGD(TAG, "Versions:"); + ESP_LOGD(TAG, " ESPHome: ${version}"); + ESP_LOGD(TAG, " TFT: %s", version_tft->state.c_str()); if (not compareVersions("${version}", version_tft->state.c_str())) ESP_LOGE(TAG, "TFT version mismatch!"); - ESP_LOGD(TAG, "Blueprint version: %s", id(version_blueprint).c_str()); - if (not compareVersions("${version}", id(version_blueprint).c_str())) ESP_LOGE(TAG, "Blueprint version mismatch!"); - - std::string framework = "unknown"; - #ifdef ARDUINO - framework = "arduino"; - #elif defined(USE_ESP_IDF) - framework = "esp-idf"; - #endif - ESP_LOGD(TAG, "Framework: %s", framework.c_str()); - ESP_LOGD(TAG, "Baud rate: %" PRIu32, id(tf_uart).get_baud_rate()); + ESP_LOGD(TAG, " Blueprint: %s", version_blueprint->state.c_str()); + if (not compareVersions("${version}", version_blueprint->state.c_str())) ESP_LOGE(TAG, "Blueprint version mismatch!"); auto ha_event = new esphome::api::CustomAPIDevice(); ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint", @@ -1762,17 +1860,20 @@ script: {"type", "version"}, {"tft", version_tft->state.c_str()}, {"esphome", "${version}"}, - {"blueprint", id(version_blueprint).c_str()}, - {"framework", framework.c_str()}, - {"baud_rate", to_string(id(tf_uart).get_baud_rate())} + {"blueprint", version_blueprint->state.c_str()} }); - id: display_embedded_temp mode: restart then: - lambda: |- - if (id(embedded_indoor_temp) or (!wifi_component->is_connected()) or (!api_server->is_connected())) - disp1->set_component_text_printf("home.current_temp", "%.1f${temp_units}", temp_nspanel->state); + if (id(embedded_indoor_temp) or (!wifi_component->is_connected()) or (!api_server->is_connected())) { + float unit_based_temperature = temp_nspanel->state; + std::string temp_units = "${temp_units}"; + if (temp_units == "°F" || temp_units == "F" || temp_units == "°f" || temp_units == "f") + unit_based_temperature = (unit_based_temperature * 9 / 5) + 32; + disp1->set_component_text_printf("home.current_temp", "%.1f${temp_units}", unit_based_temperature); + } - id: display_wrapped_text mode: queued @@ -1809,24 +1910,6 @@ script: } disp1->set_component_text_printf(component.c_str(), "%s", wrappedText.c_str()); - - id: exit_reparse - mode: restart - then: - - logger.log: "Exit reparse" - - uart.write: "DRAKJHSUYDGBNCJHGJKSHBDN" - - uart.write: [0xFF, 0xFF, 0xFF] - - uart.write: "recmod=0" - - uart.write: [0xFF, 0xFF, 0xFF] - - uart.write: "recmod=0" - - uart.write: [0xFF, 0xFF, 0xFF] - - uart.write: "connect" - - uart.write: [0xFF, 0xFF, 0xFF] - - uart.write: [0xFF, 0xFF] - - uart.write: "connect" - - uart.write: [0xFF, 0xFF, 0xFF] - - uart.write: "bkcmd=3" - - uart.write: [0xFF, 0xFF, 0xFF] - - id: global_settings mode: restart parameters: @@ -1834,16 +1917,18 @@ script: embedded_climate: bool embedded_climate_friendly_name: string embedded_indoor_temperature: bool + # temperature_unit_is_fahrenheit: bool # Deprecated mui_please_confirm: string mui_unavailable: string screensaver_time: bool screensaver_time_color: int32_t[] then: - lambda: |- + if (id(is_uploading_tft)) global_settings->stop(); static const char *const TAG = "script.global_settings"; // Blueprint version ESP_LOGV(TAG, "Check Blueprint version"); - id(version_blueprint) = blueprint_version; + version_blueprint->publish_state(blueprint_version.c_str()); check_versions->execute(); // Embedded thermostat @@ -1865,10 +1950,6 @@ script: id(screensaver_display_time_color) = screensaver_time_color; page_screensaver->execute(); - id(is_global_settings_loaded) = true; - id(is_blueprint_updated) = true; - disp1->send_command_printf("api=1"); - if (current_page->state != "boot") { // Update current page ESP_LOGV(TAG, "Update current page"); @@ -1907,9 +1988,9 @@ script: - rtttl.play: rtttl: 'two short:d=4,o=5,b=100:16e6,16e6' - lambda: |- - ESP_LOGD("script.global_settings", "Jump to wake-up page: %s", id(page_names)[id(wakeup_page_id)].c_str()); - disp1->goto_page(id(wakeup_page_id)); - timer_reset_all->execute(id(page_names)[id(wakeup_page_id)].c_str()); + ESP_LOGD("script.global_settings", "Jump to wake-up page: %s", wakeup_page_name->state.c_str()); + disp1->goto_page(wakeup_page_name->state.c_str()); + timer_reset_all->execute(wakeup_page_name->state.c_str()); - lambda: |- ESP_LOGV("script.global_settings", "Finished"); @@ -1922,6 +2003,7 @@ script: command: string then: - lambda: |- + if (id(is_uploading_tft)) ha_button->stop(); timer_reset_all->execute(page.c_str()); auto ha_event = new esphome::api::CustomAPIDevice(); ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint", @@ -1941,6 +2023,7 @@ script: entity: string then: - lambda: |- + if (id(is_uploading_tft)) ha_call_service->stop(); static const char *const TAG = "script.ha_call_service"; ESP_LOGV(TAG, "Calling Home Assisant service"); ESP_LOGV(TAG, " Type: service_call"); @@ -1968,19 +2051,21 @@ script: - lambda: |- static const char *const TAG = "script.nextion_status"; ESP_LOGD(TAG, "Nextion status:"); - ESP_LOGD(TAG, " Is detected: %s", disp1->is_detected() ? "True" : "False"); - ESP_LOGD(TAG, " Is setup: %s", disp1->is_setup() ? "True" : "False"); + ESP_LOGD(TAG, " Is detected: %s", YESNO(disp1->is_detected())); + ESP_LOGD(TAG, " Is setup: %s", YESNO(disp1->is_setup())); ESP_LOGD(TAG, " Queue size: %d", disp1->queue_size()); - id: notification_clear mode: restart then: - lambda: |- - if (current_page->state == "notification") disp1->goto_page("home"); - notification_label->publish_state(""); - notification_text->publish_state(""); - notification_unread->turn_off(); - refresh_notification->execute(); + if (not id(is_uploading_tft)) { + notification_label->publish_state(""); + notification_text->publish_state(""); + notification_unread->turn_off(); + refresh_notification->execute(); + if (current_page->state == "notification") disp1->goto_page("home"); + } - id: open_entity_settings_page mode: restart @@ -1993,22 +2078,24 @@ script: back_page: string then: - lambda: |- - detailed_entity->publish_state(entity); - if (page == "alarm_control_panel") page = "alarm"; - std::string cmd_page = std::string("page ") + page.c_str(); - disp1->send_command_printf(cmd_page.c_str()); - if (page_label.find("\\r") != std::string::npos) - page_label = page_label.replace(page_label.find("\\r"), 2, " "); - disp1->set_component_text_printf("page_label", "%s", page_label.c_str()); - set_page_id->execute("back_page_id", back_page.c_str()); - if (page == "climate") - disp1->set_component_value("embedded", (entity == "embedded_climate") ? 1 : 0); - else - { - if ((page_icon != std::string()) and (page_icon != "")) - disp1->set_component_text_printf("icon_state", "%s", page_icon.c_str()); - set_component_color->execute("icon_state", page_icon_color); - } + if (not id(is_uploading_tft)) { + detailed_entity->publish_state(entity); + if (page == "alarm_control_panel") page = "alarm"; + std::string cmd_page = std::string("page ") + page.c_str(); + disp1->send_command_printf(cmd_page.c_str()); + if (page_label.find("\\r") != std::string::npos) + page_label = page_label.replace(page_label.find("\\r"), 2, " "); + disp1->set_component_text_printf("page_label", "%s", page_label.c_str()); + set_page_id->execute("back_page_id", back_page.c_str()); + if (page == "climate") + disp1->set_component_value("embedded", (entity == "embedded_climate") ? 1 : 0); + else + { + if ((page_icon != std::string()) and (page_icon != "")) + disp1->set_component_text_printf("icon_state", "%s", page_icon.c_str()); + set_component_color->execute("icon_state", page_icon_color); + } + } - id: page_alarm mode: restart @@ -2020,14 +2107,9 @@ script: - lambda: |- static const char *const TAG = "script.page_blank"; ESP_LOGV(TAG, "Construct blank page"); - std::string framework = "unknown"; - #ifdef ARDUINO - framework = "arduino"; - #elif defined(USE_ESP_IDF) - framework = "esp-idf"; - #endif disp1->set_component_text_printf("esp_version", "ESP: ${version}"); // ESPHome version - disp1->set_component_text_printf("framework", framework.c_str()); // ESPHome framework + disp1->set_component_text_printf("framework", "%s", id(framework) == 1 ? "Arduino" : + (id(framework) == 2 ? "ESP-IDF" : "Unknown")); // ESPHome framework disp1->send_command_printf("tm_esphome.en=0"); - id: page_boot @@ -2038,15 +2120,11 @@ script: ESP_LOGV(TAG, "Construct boot page"); set_brightness->execute(100); - std::string framework = "unknown"; - #ifdef ARDUINO - framework = "arduino"; - #elif defined(USE_ESP_IDF) - framework = "esp-idf"; - #endif - disp1->set_component_text_printf("esph_version", "${version}"); // ESPHome version - disp1->set_component_text_printf("framework", framework.c_str()); // ESPHome framework - disp1->show_component("bt_reboot"); + disp1->set_component_text_printf("esph_version", "${version}"); // ESPHome version + disp1->set_component_text_printf("framework", "%s", id(framework) == 1 ? "Arduino" : + (id(framework) == 2 ? "ESP-IDF" : "Unknown")); // ESPHome framework + disp1->send_command_printf("tm_esphome.en=0"); + // disp1->show_component("bt_reboot"); - id: page_buttonpage mode: restart @@ -2206,6 +2284,7 @@ script: then: - script.execute: refresh_relays - script.execute: refresh_wifi_icon + - script.execute: refresh_notification - id: page_keyb_num mode: restart @@ -2239,7 +2318,8 @@ script: if (current_page->state == "screensaver" and not id(is_uploading_tft)) { static const char *const TAG = "script.page_screensaver"; ESP_LOGV(TAG, "Updating screensaver page"); - disp1->send_command_printf("back_page_id=%i", id(wakeup_page_id)); + set_page_id->execute("back_page_id", wakeup_page_name->state.c_str()); + // disp1->send_command_printf("back_page_id=%i", id(wakeup_page_id)); if (id(screensaver_display_time)) { disp1->show_component("text"); set_component_color->execute("screensaver.text",id(screensaver_display_time_color)); @@ -2338,9 +2418,10 @@ script: condition: - lambda: !lambda return id(setup_sequence_completed); - lambda: |- - bool is_notification = (notification_text->state.empty() and notification_label->state.empty()); + static const char *const TAG = "script.refresh_notification"; + bool is_notification = ((not notification_text->state.empty()) or (not notification_label->state.empty())); + ESP_LOGV(TAG, "Notification: %s", YESNO(is_notification)); disp1->send_command_printf("is_notification=%i", is_notification ? 0 : 1); - set_component_color->execute("home.bt_notific", notification_unread->state ? id(home_notify_icon_color_unread) : id(home_notify_icon_color_normal)); if (current_page->state == "home") { if (is_notification) { disp1->show_component("bt_notific"); @@ -2348,6 +2429,11 @@ script: disp1->hide_component("bt_notific"); } } + - wait_until: + condition: + - lambda: return (blueprint_status->state > 99); + - lambda: |- + set_component_color->execute("home.bt_notific", notification_unread->state ? id(home_notify_icon_color_unread) : id(home_notify_icon_color_normal)); - id: refresh_relays mode: restart @@ -2366,15 +2452,15 @@ script: - lambda: |- if (nextion_init->state) { // Update Wi-Fi icon color - disp1->set_component_font_color("home.wifi_icon", (id(is_blueprint_updated)) ? (wifi_rssi->state > -70 ? 33808 : 64992) : 63488); + disp1->set_component_font_color("home.wifi_icon", (blueprint_status->state > 99) ? (wifi_rssi->state > -70 ? 33808 : 64992) : 63488); // Update Wi-Fi icon disp1->set_component_text_printf("home.wifi_icon", "%s", wifi_component->is_connected() ? (api_server->is_connected() ? - (id(is_blueprint_updated) ? "\uE5A8" : // mdi:wifi - All right! - "\uE7CF") : // mdi:home-assistant - Blueprint is out - "\uF256") : // mdi:api-off - "\uE5A9"); // mdi:wifi-off + ((blueprint_status->state > 99) ? "\uE5A8" : // mdi:wifi - All right! + "\uE7CF") : // mdi:home-assistant - Blueprint is out + "\uF256") : // mdi:api-off + "\uE5A9"); // mdi:wifi-off } - id: relay_settings @@ -2389,6 +2475,11 @@ script: relay2_icon_color: int relay2_fallback: bool then: + - if: + condition: + lambda: 'return id(is_uploading_tft);' + then: + - script.stop: relay_settings - lambda: |- static const char *const TAG = "script.relay_settings"; // Relays @@ -2411,19 +2502,27 @@ script: mode: restart then: - lambda: |- - static const char *const TAG = "script.restore_settings"; - ESP_LOGD(TAG, "Restoring settings"); + ESP_LOGD("script.restore_settings", "Restoring settings"); - ESP_LOGV(TAG, "Restoring baud rate"); + #ifdef ARDUINO + id(framework) = 1; + #elif defined(USE_ESP_IDF) + id(framework) = 2; + #endif + + // ESP_LOGV(TAG, "Restoring wake-up page selector"); + // auto wakeup_page_name_call = id(wakeup_page_name).make_call(); + // wakeup_page_name_call.set_option(id(page_names)[id(wakeup_page_id)]); + // wakeup_page_name_call.perform(); + + // id(is_restored_settings) = true; + - wait_until: + condition: + - lambda: return (not isnan(stoi(baud_rate->state))); + - lambda: |- + ESP_LOGV("script.restore_settings", "Restoring baud rate"); set_baud_rate->execute(stoi(baud_rate->state), true); - - ESP_LOGV(TAG, "Restoring wake-up page selector"); - auto wakeup_page_name_call = id(wakeup_page_name).make_call(); - wakeup_page_name_call.set_option(id(page_names)[id(wakeup_page_id)]); - wakeup_page_name_call.perform(); - - ESP_LOGV(TAG, "Finishing"); - id(is_restored_settings) = true; + ESP_LOGV("script.restore_settings", "Done!"); - id: service_call_alarm_control_panel mode: restart @@ -2461,7 +2560,7 @@ script: - id: set_baud_rate mode: restart parameters: - baud_rate: int + baud_rate: uint32_t definitive: bool then: - if: @@ -2470,29 +2569,27 @@ script: then: - lambda: |- static const char *const TAG = "script.set_baud_rate"; - ESP_LOGD(TAG, "Baud rate changing from %" PRIu32 " to %i bps", tf_uart->get_baud_rate(), baud_rate); + ESP_LOGD(TAG, "Baud rate changing from %" PRIu32 " to %" PRIu32 " bps", tf_uart->get_baud_rate(), baud_rate); ESP_LOGD(TAG, "Flush UART"); - wait_until: condition: - lambda: !lambda return (tf_uart->available() < 1); - timeout: 3s + timeout: 5s - lambda: |- - tf_uart->flush(); static const char *const TAG = "script.set_baud_rate"; - ESP_LOGD(TAG, "Sending instruction '%s=%i' to Nextion", definitive ? "bauds" : "baud", baud_rate); - disp1->send_command_printf("%s=%i", definitive ? "bauds" : "baud", baud_rate); + ESP_LOGD(TAG, "Sending instruction '%s=%" PRIu32 "' to Nextion", definitive ? "bauds" : "baud", baud_rate); + disp1->send_command_printf("%s=%" PRIu32, definitive ? "bauds" : "baud", baud_rate); ESP_LOGD(TAG, "Flush UART"); - wait_until: condition: - lambda: !lambda return (tf_uart->available() < 1); - timeout: 3s + timeout: 5s - lambda: |- - tf_uart->flush(); static const char *const TAG = "script.set_baud_rate"; - ESP_LOGD(TAG, "Set ESPHome new baud rate to %i bps", baud_rate); + ESP_LOGD(TAG, "Set ESPHome new baud rate to %" PRIu32 " bps", baud_rate); tf_uart->set_baud_rate(baud_rate); tf_uart->load_settings(); - ESP_LOGD(TAG, "Baud rate is changet to %i bps", baud_rate); + ESP_LOGD(TAG, "Current baud rate: %" PRIu32 " bps", tf_uart->get_baud_rate()); - id: set_brightness mode: restart @@ -2537,7 +2634,7 @@ script: ESP_LOGD(TAG, " total_steps: %d", total_steps); ESP_LOGD(TAG, " temp_offset: %i", temp_offset); ESP_LOGD(TAG, " climate_icon: %s", climate_icon.c_str()); - ESP_LOGD(TAG, " embedded_climate: %s", embedded_climate ? "True" : "False"); + ESP_LOGD(TAG, " embedded_climate: %s", YESNO(embedded_climate)); if (current_page->state == "climate") { ESP_LOGD(TAG, "Page climate is visible"); disp1->send_command_printf("climateslider.maxval=%i", total_steps); @@ -2604,6 +2701,7 @@ script: foreground: int32_t[] then: - lambda: |- + if (id(is_uploading_tft)) set_component_color->stop(); static const char *const TAG = "script.set_component_color"; ESP_LOGVV(TAG, "Starting:"); ESP_LOGVV(TAG, " Component: %s", component.c_str()); @@ -2648,10 +2746,7 @@ script: uint detected_page_id = pageIndex(page.c_str()); ESP_LOGV(TAG, "%s=%i", variable.c_str(), detected_page_id); - if (variable == "wakeup_page_id") - id(wakeup_page_id) = detected_page_id; - else - disp1->send_command_printf("%s=%i", variable.c_str(), detected_page_id); + disp1->send_command_printf("%s=%i", variable.c_str(), detected_page_id); - id: setup_sequence mode: restart @@ -2659,19 +2754,19 @@ script: - lambda: |- static const char *const TAG = "script.setup_sequence"; ESP_LOGD(TAG, "Starting Nextion setup sequence"); - ESP_LOGD(TAG, "Fetching page id"); + ESP_LOGD(TAG, "Fetching Page Id"); page_id->update(); - wait_until: condition: - - lambda: !lambda return (page_id->state > 0); - timeout: 5s + - lambda: !lambda return (not isnan(page_id->state)); + timeout: 15s - lambda: |- static const char *const TAG = "script.setup_sequence"; ESP_LOGD(TAG, "Fetching charset"); display_charset->update(); - wait_until: condition: - - lambda: !lambda return (display_charset->state > 0); + - lambda: !lambda return (not isnan(display_charset->state)); timeout: 5s - lambda: |- static const char *const TAG = "script.setup_sequence"; @@ -2679,11 +2774,11 @@ script: display_mode->update(); - wait_until: condition: - - lambda: !lambda return (display_mode->state > 0); + - lambda: !lambda return (not isnan(display_mode->state)); timeout: 5s - if: condition: - - lambda: !lambda return (display_mode->state > 0); + - lambda: !lambda return (not isnan(display_mode->state)); then: # Project's TFT detected - lambda: |- static const char *const TAG = "script.setup_sequence"; @@ -2798,11 +2893,11 @@ script: state: boot timeout: 10s - lambda: |- - if (current_page->state == "boot") disp1->goto_page(id(wakeup_page_id)); + if (current_page->state == "boot") disp1->goto_page(wakeup_page_name->state.c_str()); else: # Unknown TFT - lambda: |- static const char *const TAG = "script.setup_sequence"; - ESP_LOGE(TAG, "A non-compatible TFT is installed"); + ESP_LOGE(TAG, "No compatible TFT detected"); ESP_LOGE(TAG, "Display mode: %f", display_mode->state); - lambda: |- static const char *const TAG = "script.setup_sequence"; @@ -2818,7 +2913,6 @@ script: check_versions->stop(); display_embedded_temp->stop(); display_wrapped_text->stop(); - exit_reparse->stop(); global_settings->stop(); ha_button->stop(); ha_call_service->stop(); @@ -3129,13 +3223,12 @@ script: } // report API status - bool previous_blueprint_status = id(is_blueprint_updated); bool api_connected = api_server->is_connected(); if (api_connected) { ESP_LOGI(TAG, "API: Connected"); } else { ESP_LOGW(TAG, "API: DISCONNECTED"); - id(is_blueprint_updated) = false; + blueprint_status->publish_state(0); if (current_page->state != "blank" and current_page->state != "boot" and current_page->state != "home" and @@ -3147,12 +3240,16 @@ script: } } + if (!wifi_connected or !api_connected) blueprint_status->publish_state(0); + // Report blueprint version - id(is_blueprint_updated) = id(is_blueprint_updated) and wifi_connected and api_connected and (not id(version_blueprint).empty()); - if (id(is_blueprint_updated)) - ESP_LOGI(TAG, "Blueprint: %s", id(version_blueprint).c_str()); - else { - ESP_LOGW(TAG, "Blueprint: %s", (wifi_connected and api_connected) ? "Pending" : "DISCONNECTED"); + ESP_LOGI(TAG, "Blueprint:"); + if (blueprint_status->state > 99) { + ESP_LOGI(TAG, " Version: %s", version_blueprint->state.c_str()); + ESP_LOGI(TAG, " Init steps: %i (%0.1f%%)", int(blueprint_status->raw_state), blueprint_status->state); + } else { + ESP_LOGW(TAG, " Init steps: %i (%0.1f%%)", int(blueprint_status->raw_state), blueprint_status->state); + ESP_LOGW(TAG, " State: %s", (wifi_connected and api_connected) ? "Pending" : "DISCONNECTED"); ESP_LOGI(TAG, "Requesting blueprint settings"); auto ha_event = new esphome::api::CustomAPIDevice(); ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint", @@ -3167,10 +3264,17 @@ script: ESP_LOGI(TAG, " Version: ${version}"); // Report framework #ifdef ARDUINO - ESP_LOGI(TAG, " Framework: arduino"); + size_t total_heap_size = ESP.getHeapSize(); + size_t free_heap_size = ESP.getFreeHeap(); #elif defined(USE_ESP_IDF) - ESP_LOGI(TAG, " Framework: esp-idf"); + size_t total_heap_size = heap_caps_get_total_size(MALLOC_CAP_DEFAULT); + size_t free_heap_size = esp_get_free_heap_size(); #endif + if (total_heap_size != 0) + ESP_LOGI(TAG, " Heap: %zu bytes (%d%%)", free_heap_size, + int(round(((float)free_heap_size / total_heap_size) * 100.0f))); + ESP_LOGI(TAG, " Framework: %s", id(framework) == 1 ? "Arduino" : + (id(framework) == 2 ? "ESP-IDF" : "Unknown")); // ESPHome framework // Report UART ESP_LOGI(TAG, "UART:"); @@ -3185,13 +3289,11 @@ script: ESP_LOGI(TAG, " Is setup: True"); else { ESP_LOGW(TAG, " Is setup: False"); - ESP_LOGW(TAG, " Is detected: %s", disp1->is_detected() ? "True" : "False"); + ESP_LOGW(TAG, " Is detected: %s", YESNO(disp1->is_detected())); //exit_reparse->execute(); } if (nextion_init->state) { ESP_LOGI(TAG, " Init: True"); - // Update api value on Nextion - if (id(is_blueprint_updated) != previous_blueprint_status) disp1->send_command_printf("api=%i", id(is_blueprint_updated) ? 1 : 0); } else ESP_LOGW(TAG, " Init: False"); if (version_tft->state.empty()) diff --git a/advanced/hmi/nspanel_CJK_eu.HMI b/advanced/hmi/nspanel_CJK_eu.HMI index d9440c6..f31717a 100644 Binary files a/advanced/hmi/nspanel_CJK_eu.HMI and b/advanced/hmi/nspanel_CJK_eu.HMI differ diff --git a/advanced/hmi/nspanel_CJK_eu.tft b/advanced/hmi/nspanel_CJK_eu.tft index 4859e00..0405171 100644 Binary files a/advanced/hmi/nspanel_CJK_eu.tft and b/advanced/hmi/nspanel_CJK_eu.tft differ diff --git a/advanced/hmi/nspanel_CJK_eu_code/alarm.txt b/advanced/hmi/nspanel_CJK_eu_code/alarm.txt index 9732c03..d4778be 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/alarm.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/alarm.txt @@ -23,6 +23,7 @@ Page alarm vis bt_vacat,0 vis bt_bypass,0 } + vis unavailable,0 Postinitialize Event sendme @@ -188,6 +189,16 @@ Text bt_disarm_icon Text :  Max. Text Size : 3 +Text unavailable + Attributes + ID : 32 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture bt_home_pic Attributes ID : 4 diff --git a/advanced/hmi/nspanel_CJK_eu_code/boot.txt b/advanced/hmi/nspanel_CJK_eu_code/boot.txt index 67902b2..8285c16 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/boot.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/boot.txt @@ -15,6 +15,7 @@ Page boot dim=100 covx baud,baud_rate.txt,0,0 baud_rate.txt+=" bps" + vis unavailable,0 Postinitialize Event sendme @@ -102,7 +103,7 @@ Text tft_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : 4.2.4 + Text : 4.2.5 Max. Text Size : 9 Text esph_version @@ -145,6 +146,16 @@ Text framework Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Dual-state Button bt_reboot Attributes ID : 4 diff --git a/advanced/hmi/nspanel_CJK_eu_code/buttonpage01.txt b/advanced/hmi/nspanel_CJK_eu_code/buttonpage01.txt index 631f112..9446a71 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/buttonpage01.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/buttonpage01.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_eu_code/buttonpage02.txt b/advanced/hmi/nspanel_CJK_eu_code/buttonpage02.txt index 0fc97d4..87af814 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/buttonpage02.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/buttonpage02.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_eu_code/buttonpage03.txt b/advanced/hmi/nspanel_CJK_eu_code/buttonpage03.txt index 2740b5e..bb36625 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/buttonpage03.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/buttonpage03.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_eu_code/buttonpage04.txt b/advanced/hmi/nspanel_CJK_eu_code/buttonpage04.txt index 96ae9e1..38c8cdd 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/buttonpage04.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/buttonpage04.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_eu_code/climate.txt b/advanced/hmi/nspanel_CJK_eu_code/climate.txt index b3c6df4..b9f183a 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/climate.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/climate.txt @@ -32,6 +32,7 @@ Page climate { page home } + vis unavailable,0 Postinitialize Event sendme @@ -530,6 +531,16 @@ Text target_low Touch Release Event active_slider.val=2 +Text unavailable + Attributes + ID : 54 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider slider_high Attributes ID : 7 diff --git a/advanced/hmi/nspanel_CJK_eu_code/confirm.txt b/advanced/hmi/nspanel_CJK_eu_code/confirm.txt index 7c4b289..131e50e 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/confirm.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/confirm.txt @@ -16,6 +16,7 @@ Page confirm { page home } + vis unavailable,0 Postinitialize Event sendme @@ -77,6 +78,16 @@ Text body Text : Please confirm Max. Text Size : 255 +Text unavailable + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button bclose Attributes ID : 2 diff --git a/advanced/hmi/nspanel_CJK_eu_code/cover.txt b/advanced/hmi/nspanel_CJK_eu_code/cover.txt index 9b0b036..b7afc34 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/cover.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/cover.txt @@ -16,6 +16,7 @@ Page cover { page home } + vis unavailable,0 Postinitialize Event sendme @@ -84,6 +85,16 @@ Text battery_icon Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider coverslider Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_eu_code/entitypage01.txt b/advanced/hmi/nspanel_CJK_eu_code/entitypage01.txt index d4cd469..7e9a7ae 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/entitypage01.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/entitypage01.txt @@ -16,6 +16,7 @@ Page entitypage01 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ●○○○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_CJK_eu_code/entitypage02.txt b/advanced/hmi/nspanel_CJK_eu_code/entitypage02.txt index 19650c4..deb1259 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/entitypage02.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/entitypage02.txt @@ -16,6 +16,7 @@ Page entitypage02 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○●○○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_CJK_eu_code/entitypage03.txt b/advanced/hmi/nspanel_CJK_eu_code/entitypage03.txt index 12fb2e4..3825618 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/entitypage03.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/entitypage03.txt @@ -16,6 +16,7 @@ Page entitypage03 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○○●○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 29 diff --git a/advanced/hmi/nspanel_CJK_eu_code/entitypage04.txt b/advanced/hmi/nspanel_CJK_eu_code/entitypage04.txt index 3d05e25..b2b1238 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/entitypage04.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/entitypage04.txt @@ -16,6 +16,7 @@ Page entitypage04 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○○○● Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_CJK_eu_code/fan.txt b/advanced/hmi/nspanel_CJK_eu_code/fan.txt index 2533bf7..6909a73 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/fan.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/fan.txt @@ -16,6 +16,7 @@ Page fan { page home } + vis unavailable,0 Postinitialize Event sendme @@ -64,6 +65,16 @@ Text icon_state Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider fanslider Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_eu_code/home.txt b/advanced/hmi/nspanel_CJK_eu_code/home.txt index 8950606..a6a5668 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/home.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/home.txt @@ -21,6 +21,7 @@ Page home vis left_bt_text,0 vis right_bt_text,0 } + vis unavailable,0 Postinitialize Event sendme @@ -579,6 +580,16 @@ Text button06 printh FF FF FF } +Text unavailable + Attributes + ID : 46 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather Attributes ID : 7 diff --git a/advanced/hmi/nspanel_CJK_eu_code/keyb_num.txt b/advanced/hmi/nspanel_CJK_eu_code/keyb_num.txt index b011257..07c3562 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/keyb_num.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/keyb_num.txt @@ -16,6 +16,7 @@ Page keyb_num { page page_id.val } + vis unavailable,0 Postinitialize Event sendme @@ -84,6 +85,16 @@ Text title Text : Alarm Max. Text Size : 30 +Text unavailable + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button b1 Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_eu_code/light.txt b/advanced/hmi/nspanel_CJK_eu_code/light.txt index 1044901..5a1d342 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/light.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/light.txt @@ -36,6 +36,7 @@ Page light vis color_touch,0 vis color_button,0 } + vis unavailable,0 Postinitialize Event sendme @@ -158,6 +159,16 @@ Text icon_state Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture light_button Attributes ID : 8 diff --git a/advanced/hmi/nspanel_CJK_eu_code/media_player.txt b/advanced/hmi/nspanel_CJK_eu_code/media_player.txt index c2e2d55..7aceec7 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/media_player.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/media_player.txt @@ -16,6 +16,7 @@ Page media_player { page home } + vis unavailable,0 Postinitialize Event sendme @@ -278,6 +279,16 @@ Text bt_on_off printh 00 printh FF FF FF +Text unavailable + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Progress Bar time_progress Attributes ID : 9 diff --git a/advanced/hmi/nspanel_CJK_eu_code/notification.txt b/advanced/hmi/nspanel_CJK_eu_code/notification.txt index 5e5654e..b3e282f 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/notification.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/notification.txt @@ -16,6 +16,7 @@ Page notification { page home } + vis unavailable,0 Postinitialize Event sendme @@ -47,6 +48,16 @@ Text notifi_label Text : Max. Text Size : 100 +Text unavailable + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_eu_code/qrcode.txt b/advanced/hmi/nspanel_CJK_eu_code/qrcode.txt index 84a0acf..e9a780b 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/qrcode.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/qrcode.txt @@ -11,6 +11,9 @@ Page qrcode Swide right page ID: disabled Events + Preinitialize Event + vis unavailable,0 + Postinitialize Event sendme @@ -24,6 +27,16 @@ Text qrcode_label Text : Max. Text Size : 100 +Text unavailable + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + QR Code qrcode_value Attributes ID : 4 diff --git a/advanced/hmi/nspanel_CJK_eu_code/screensaver.txt b/advanced/hmi/nspanel_CJK_eu_code/screensaver.txt index ea216f1..4c0ad19 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/screensaver.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/screensaver.txt @@ -14,6 +14,7 @@ Page screensaver Preinitialize Event vis text,0 dim=brightness_sleep + vis unavailable,0 Postinitialize Event sendme @@ -35,6 +36,16 @@ Text text Touch Release Event page back_page_id +Text unavailable + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Timer swipestore Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_eu_code/settings.txt b/advanced/hmi/nspanel_CJK_eu_code/settings.txt index 0b83161..adaf793 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/settings.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/settings.txt @@ -18,6 +18,7 @@ Page settings dim_text.txt+="%" vis lbl_sleep,0 vis bt_sleep,0 + vis unavailable,0 Postinitialize Event sendme @@ -99,6 +100,16 @@ Text lbl_brightness Text : Brightness Max. Text Size : 25 +Text unavailable + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider brightslider Attributes ID : 1 diff --git a/advanced/hmi/nspanel_CJK_eu_code/weather01.txt b/advanced/hmi/nspanel_CJK_eu_code/weather01.txt index dfbe294..31c8edc 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/weather01.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/weather01.txt @@ -16,6 +16,7 @@ Page weather01 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ●○○○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_eu_code/weather02.txt b/advanced/hmi/nspanel_CJK_eu_code/weather02.txt index 9f80e06..d1e703a 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/weather02.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/weather02.txt @@ -16,6 +16,7 @@ Page weather02 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○●○○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_eu_code/weather03.txt b/advanced/hmi/nspanel_CJK_eu_code/weather03.txt index 164d84e..be8be75 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/weather03.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/weather03.txt @@ -16,6 +16,7 @@ Page weather03 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○●○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_eu_code/weather04.txt b/advanced/hmi/nspanel_CJK_eu_code/weather04.txt index 6438372..9760d9e 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/weather04.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/weather04.txt @@ -16,6 +16,7 @@ Page weather04 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○○●○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_eu_code/weather05.txt b/advanced/hmi/nspanel_CJK_eu_code/weather05.txt index da0e71f..04ea0f0 100644 --- a/advanced/hmi/nspanel_CJK_eu_code/weather05.txt +++ b/advanced/hmi/nspanel_CJK_eu_code/weather05.txt @@ -16,6 +16,7 @@ Page weather05 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○○○● Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_us.HMI b/advanced/hmi/nspanel_CJK_us.HMI index 21a9b57..49c15ad 100644 Binary files a/advanced/hmi/nspanel_CJK_us.HMI and b/advanced/hmi/nspanel_CJK_us.HMI differ diff --git a/advanced/hmi/nspanel_CJK_us.tft b/advanced/hmi/nspanel_CJK_us.tft index 03fddf4..377dce8 100644 Binary files a/advanced/hmi/nspanel_CJK_us.tft and b/advanced/hmi/nspanel_CJK_us.tft differ diff --git a/advanced/hmi/nspanel_CJK_us_code/alarm.txt b/advanced/hmi/nspanel_CJK_us_code/alarm.txt index 489f0fd..a358203 100644 --- a/advanced/hmi/nspanel_CJK_us_code/alarm.txt +++ b/advanced/hmi/nspanel_CJK_us_code/alarm.txt @@ -23,6 +23,7 @@ Page alarm vis bt_vacat,0 vis bt_bypass,0 } + vis unavailable,0 Postinitialize Event sendme @@ -195,6 +196,16 @@ Text bt_disarm_icon Text :  Max. Text Size : 3 +Text unavailable + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture bt_home_pic Attributes ID : 4 @@ -267,7 +278,7 @@ Hotspot bt_home bt_home_icon.pco=0 Touch Release Event - lastclick.txt="{\"page\": \"alarm\", \"key\": \"home\", \"value\": \"click\", \"entity\": \""+entity.txt+"\", \"mui\": \""+bt_home_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" + lastclick.txt="{\"page\": \"alarm\", \"key\": \"home\", \"value\": \"click\", \"mui\": \""+bt_home_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" printh 92 prints "localevent",0 printh 00 @@ -291,7 +302,7 @@ Hotspot bt_away bt_away_icon.pco=0 Touch Release Event - lastclick.txt="{\"page\": \"alarm\", \"key\": \"away\", \"value\": \"click\", \"entity\": \""+entity.txt+"\", \"mui\": \""+bt_away_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" + lastclick.txt="{\"page\": \"alarm\", \"key\": \"away\", \"value\": \"click\", \"mui\": \""+bt_away_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" printh 92 prints "localevent",0 printh 00 @@ -315,7 +326,7 @@ Hotspot bt_night bt_night_icon.pco=0 Touch Release Event - lastclick.txt="{\"page\": \"alarm\", \"key\": \"night\", \"value\": \"click\", \"entity\": \""+entity.txt+"\", \"mui\": \""+bt_night_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" + lastclick.txt="{\"page\": \"alarm\", \"key\": \"night\", \"value\": \"click\", \"mui\": \""+bt_night_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" printh 92 prints "localevent",0 printh 00 @@ -339,7 +350,7 @@ Hotspot bt_vacat bt_vacat_icon.pco=0 Touch Release Event - lastclick.txt="{\"page\": \"alarm\", \"key\": \"vacation\", \"value\": \"click\", \"entity\": \""+entity.txt+"\", \"mui\": \""+bt_vacat_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" + lastclick.txt="{\"page\": \"alarm\", \"key\": \"vacation\", \"value\": \"click\", \"mui\": \""+bt_vacat_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" printh 92 prints "localevent",0 printh 00 @@ -363,7 +374,7 @@ Hotspot bt_bypass bt_bypass_icon.pco=0 Touch Release Event - lastclick.txt="{\"page\": \"alarm\", \"key\": \"bypass\", \"value\": \"click\", \"entity\": \""+entity.txt+"\", \"mui\": \""+bt_bypass_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" + lastclick.txt="{\"page\": \"alarm\", \"key\": \"bypass\", \"value\": \"click\", \"mui\": \""+bt_bypass_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" printh 92 prints "localevent",0 printh 00 @@ -387,7 +398,7 @@ Hotspot bt_disarm bt_disarm_icon.pco=0 Touch Release Event - lastclick.txt="{\"page\": \"alarm\", \"key\": \"disarm\", \"value\": \"click\", \"entity\": \""+entity.txt+"\", \"mui\": \""+bt_disarm_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" + lastclick.txt="{\"page\": \"alarm\", \"key\": \"disarm\", \"value\": \"click\", \"mui\": \""+bt_disarm_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" printh 92 prints "localevent",0 printh 00 diff --git a/advanced/hmi/nspanel_CJK_us_code/boot.txt b/advanced/hmi/nspanel_CJK_us_code/boot.txt index 34e18cf..cc191cb 100644 --- a/advanced/hmi/nspanel_CJK_us_code/boot.txt +++ b/advanced/hmi/nspanel_CJK_us_code/boot.txt @@ -15,6 +15,7 @@ Page boot dim=100 covx baud,baud_rate.txt,0,0 baud_rate.txt+=" bps" + vis unavailable,0 Postinitialize Event sendme @@ -102,7 +103,7 @@ Text tft_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : 4.2.4 + Text : 4.2.5 Max. Text Size : 9 Events @@ -152,6 +153,16 @@ Text framework Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Dual-state Button bt_reboot Attributes ID : 4 diff --git a/advanced/hmi/nspanel_CJK_us_code/buttonpage01.txt b/advanced/hmi/nspanel_CJK_us_code/buttonpage01.txt index 631f112..9446a71 100644 --- a/advanced/hmi/nspanel_CJK_us_code/buttonpage01.txt +++ b/advanced/hmi/nspanel_CJK_us_code/buttonpage01.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_us_code/buttonpage02.txt b/advanced/hmi/nspanel_CJK_us_code/buttonpage02.txt index 0fc97d4..87af814 100644 --- a/advanced/hmi/nspanel_CJK_us_code/buttonpage02.txt +++ b/advanced/hmi/nspanel_CJK_us_code/buttonpage02.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_us_code/buttonpage03.txt b/advanced/hmi/nspanel_CJK_us_code/buttonpage03.txt index 2740b5e..bb36625 100644 --- a/advanced/hmi/nspanel_CJK_us_code/buttonpage03.txt +++ b/advanced/hmi/nspanel_CJK_us_code/buttonpage03.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_us_code/buttonpage04.txt b/advanced/hmi/nspanel_CJK_us_code/buttonpage04.txt index 96ae9e1..38c8cdd 100644 --- a/advanced/hmi/nspanel_CJK_us_code/buttonpage04.txt +++ b/advanced/hmi/nspanel_CJK_us_code/buttonpage04.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_us_code/climate.txt b/advanced/hmi/nspanel_CJK_us_code/climate.txt index cfd6503..2d3bc7c 100644 --- a/advanced/hmi/nspanel_CJK_us_code/climate.txt +++ b/advanced/hmi/nspanel_CJK_us_code/climate.txt @@ -32,6 +32,7 @@ Page climate { page home } + vis unavailable,0 Postinitialize Event sendme @@ -530,6 +531,16 @@ Text target_low Touch Release Event active_slider.val=2 +Text unavailable + Attributes + ID : 54 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider slider_high Attributes ID : 7 diff --git a/advanced/hmi/nspanel_CJK_us_code/confirm.txt b/advanced/hmi/nspanel_CJK_us_code/confirm.txt index 7c4b289..131e50e 100644 --- a/advanced/hmi/nspanel_CJK_us_code/confirm.txt +++ b/advanced/hmi/nspanel_CJK_us_code/confirm.txt @@ -16,6 +16,7 @@ Page confirm { page home } + vis unavailable,0 Postinitialize Event sendme @@ -77,6 +78,16 @@ Text body Text : Please confirm Max. Text Size : 255 +Text unavailable + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button bclose Attributes ID : 2 diff --git a/advanced/hmi/nspanel_CJK_us_code/cover.txt b/advanced/hmi/nspanel_CJK_us_code/cover.txt index 718e467..d2d624e 100644 --- a/advanced/hmi/nspanel_CJK_us_code/cover.txt +++ b/advanced/hmi/nspanel_CJK_us_code/cover.txt @@ -16,6 +16,7 @@ Page cover { page home } + vis unavailable,0 Postinitialize Event sendme @@ -84,6 +85,16 @@ Text battery_icon Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider coverslider Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_us_code/entitypage01.txt b/advanced/hmi/nspanel_CJK_us_code/entitypage01.txt index d4cd469..7e9a7ae 100644 --- a/advanced/hmi/nspanel_CJK_us_code/entitypage01.txt +++ b/advanced/hmi/nspanel_CJK_us_code/entitypage01.txt @@ -16,6 +16,7 @@ Page entitypage01 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ●○○○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_CJK_us_code/entitypage02.txt b/advanced/hmi/nspanel_CJK_us_code/entitypage02.txt index 19650c4..deb1259 100644 --- a/advanced/hmi/nspanel_CJK_us_code/entitypage02.txt +++ b/advanced/hmi/nspanel_CJK_us_code/entitypage02.txt @@ -16,6 +16,7 @@ Page entitypage02 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○●○○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_CJK_us_code/entitypage03.txt b/advanced/hmi/nspanel_CJK_us_code/entitypage03.txt index 19da4ec..1a14754 100644 --- a/advanced/hmi/nspanel_CJK_us_code/entitypage03.txt +++ b/advanced/hmi/nspanel_CJK_us_code/entitypage03.txt @@ -16,6 +16,7 @@ Page entitypage03 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○○●○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_CJK_us_code/entitypage04.txt b/advanced/hmi/nspanel_CJK_us_code/entitypage04.txt index 3d05e25..b2b1238 100644 --- a/advanced/hmi/nspanel_CJK_us_code/entitypage04.txt +++ b/advanced/hmi/nspanel_CJK_us_code/entitypage04.txt @@ -16,6 +16,7 @@ Page entitypage04 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○○○● Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_CJK_us_code/fan.txt b/advanced/hmi/nspanel_CJK_us_code/fan.txt index 2533bf7..6909a73 100644 --- a/advanced/hmi/nspanel_CJK_us_code/fan.txt +++ b/advanced/hmi/nspanel_CJK_us_code/fan.txt @@ -16,6 +16,7 @@ Page fan { page home } + vis unavailable,0 Postinitialize Event sendme @@ -64,6 +65,16 @@ Text icon_state Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider fanslider Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_us_code/home.txt b/advanced/hmi/nspanel_CJK_us_code/home.txt index 8950606..a6a5668 100644 --- a/advanced/hmi/nspanel_CJK_us_code/home.txt +++ b/advanced/hmi/nspanel_CJK_us_code/home.txt @@ -21,6 +21,7 @@ Page home vis left_bt_text,0 vis right_bt_text,0 } + vis unavailable,0 Postinitialize Event sendme @@ -579,6 +580,16 @@ Text button06 printh FF FF FF } +Text unavailable + Attributes + ID : 46 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather Attributes ID : 7 diff --git a/advanced/hmi/nspanel_CJK_us_code/keyb_num.txt b/advanced/hmi/nspanel_CJK_us_code/keyb_num.txt index b8c3a2d..aea6a3e 100644 --- a/advanced/hmi/nspanel_CJK_us_code/keyb_num.txt +++ b/advanced/hmi/nspanel_CJK_us_code/keyb_num.txt @@ -16,6 +16,7 @@ Page keyb_num { page page_id.val } + vis unavailable,0 Postinitialize Event sendme @@ -84,6 +85,16 @@ Text title Text : Alarm Max. Text Size : 30 +Text unavailable + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button b1 Attributes ID : 3 @@ -265,6 +276,12 @@ Button benter Events Touch Release Event aux.txt="{\"page\": \"keyb_num\", \"key\": \""+key.txt+"\", \"value\": \""+value.txt+"\", \"pin\": \""+pin.txt+"\", \"base_domain\": \""+domain.txt+"\"}" + printh 92 + prints "localevent",0 + printh 00 + prints aux.txt,0 + printh 00 + printh FF FF FF Button bview Attributes diff --git a/advanced/hmi/nspanel_CJK_us_code/light.txt b/advanced/hmi/nspanel_CJK_us_code/light.txt index 660e23a..25a940f 100644 --- a/advanced/hmi/nspanel_CJK_us_code/light.txt +++ b/advanced/hmi/nspanel_CJK_us_code/light.txt @@ -36,6 +36,7 @@ Page light vis color_touch,0 vis color_button,0 } + vis unavailable,0 Postinitialize Event sendme @@ -158,6 +159,16 @@ Text icon_state Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture light_button Attributes ID : 8 diff --git a/advanced/hmi/nspanel_CJK_us_code/media_player.txt b/advanced/hmi/nspanel_CJK_us_code/media_player.txt index 3cd1ed6..a0d7d1d 100644 --- a/advanced/hmi/nspanel_CJK_us_code/media_player.txt +++ b/advanced/hmi/nspanel_CJK_us_code/media_player.txt @@ -16,6 +16,7 @@ Page media_player { page home } + vis unavailable,0 Postinitialize Event sendme @@ -277,6 +278,16 @@ Text bt_on_off printh 00 printh FF FF FF +Text unavailable + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Progress Bar time_progress Attributes ID : 9 diff --git a/advanced/hmi/nspanel_CJK_us_code/notification.txt b/advanced/hmi/nspanel_CJK_us_code/notification.txt index 5907e7f..089013e 100644 --- a/advanced/hmi/nspanel_CJK_us_code/notification.txt +++ b/advanced/hmi/nspanel_CJK_us_code/notification.txt @@ -16,6 +16,7 @@ Page notification { page home } + vis unavailable,0 Postinitialize Event sendme @@ -47,6 +48,16 @@ Text notifi_label Text : Max. Text Size : 100 +Text unavailable + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_us_code/qrcode.txt b/advanced/hmi/nspanel_CJK_us_code/qrcode.txt index 84a0acf..e9a780b 100644 --- a/advanced/hmi/nspanel_CJK_us_code/qrcode.txt +++ b/advanced/hmi/nspanel_CJK_us_code/qrcode.txt @@ -11,6 +11,9 @@ Page qrcode Swide right page ID: disabled Events + Preinitialize Event + vis unavailable,0 + Postinitialize Event sendme @@ -24,6 +27,16 @@ Text qrcode_label Text : Max. Text Size : 100 +Text unavailable + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + QR Code qrcode_value Attributes ID : 4 diff --git a/advanced/hmi/nspanel_CJK_us_code/screensaver.txt b/advanced/hmi/nspanel_CJK_us_code/screensaver.txt index ea216f1..4c0ad19 100644 --- a/advanced/hmi/nspanel_CJK_us_code/screensaver.txt +++ b/advanced/hmi/nspanel_CJK_us_code/screensaver.txt @@ -14,6 +14,7 @@ Page screensaver Preinitialize Event vis text,0 dim=brightness_sleep + vis unavailable,0 Postinitialize Event sendme @@ -35,6 +36,16 @@ Text text Touch Release Event page back_page_id +Text unavailable + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Timer swipestore Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_us_code/settings.txt b/advanced/hmi/nspanel_CJK_us_code/settings.txt index 1644740..501cdd2 100644 --- a/advanced/hmi/nspanel_CJK_us_code/settings.txt +++ b/advanced/hmi/nspanel_CJK_us_code/settings.txt @@ -18,6 +18,7 @@ Page settings dim_text.txt+="%" vis lbl_sleep,0 vis bt_sleep,0 + vis unavailable,0 Postinitialize Event sendme @@ -195,6 +196,16 @@ Text t3 printh FF FF FF } +Text unavailable + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider brightslider Attributes ID : 1 diff --git a/advanced/hmi/nspanel_CJK_us_code/weather01.txt b/advanced/hmi/nspanel_CJK_us_code/weather01.txt index dfbe294..31c8edc 100644 --- a/advanced/hmi/nspanel_CJK_us_code/weather01.txt +++ b/advanced/hmi/nspanel_CJK_us_code/weather01.txt @@ -16,6 +16,7 @@ Page weather01 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ●○○○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_us_code/weather02.txt b/advanced/hmi/nspanel_CJK_us_code/weather02.txt index 9f80e06..d1e703a 100644 --- a/advanced/hmi/nspanel_CJK_us_code/weather02.txt +++ b/advanced/hmi/nspanel_CJK_us_code/weather02.txt @@ -16,6 +16,7 @@ Page weather02 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○●○○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_us_code/weather03.txt b/advanced/hmi/nspanel_CJK_us_code/weather03.txt index 164d84e..be8be75 100644 --- a/advanced/hmi/nspanel_CJK_us_code/weather03.txt +++ b/advanced/hmi/nspanel_CJK_us_code/weather03.txt @@ -16,6 +16,7 @@ Page weather03 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○●○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_us_code/weather04.txt b/advanced/hmi/nspanel_CJK_us_code/weather04.txt index 6438372..9760d9e 100644 --- a/advanced/hmi/nspanel_CJK_us_code/weather04.txt +++ b/advanced/hmi/nspanel_CJK_us_code/weather04.txt @@ -16,6 +16,7 @@ Page weather04 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○○●○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_us_code/weather05.txt b/advanced/hmi/nspanel_CJK_us_code/weather05.txt index da0e71f..04ea0f0 100644 --- a/advanced/hmi/nspanel_CJK_us_code/weather05.txt +++ b/advanced/hmi/nspanel_CJK_us_code/weather05.txt @@ -16,6 +16,7 @@ Page weather05 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○○○● Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_us_land.HMI b/advanced/hmi/nspanel_CJK_us_land.HMI index d8a0891..5139408 100644 Binary files a/advanced/hmi/nspanel_CJK_us_land.HMI and b/advanced/hmi/nspanel_CJK_us_land.HMI differ diff --git a/advanced/hmi/nspanel_CJK_us_land.tft b/advanced/hmi/nspanel_CJK_us_land.tft index 1d17078..8b1dfc3 100644 Binary files a/advanced/hmi/nspanel_CJK_us_land.tft and b/advanced/hmi/nspanel_CJK_us_land.tft differ diff --git a/advanced/hmi/nspanel_CJK_us_land_code/alarm.txt b/advanced/hmi/nspanel_CJK_us_land_code/alarm.txt index 9732c03..d4778be 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/alarm.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/alarm.txt @@ -23,6 +23,7 @@ Page alarm vis bt_vacat,0 vis bt_bypass,0 } + vis unavailable,0 Postinitialize Event sendme @@ -188,6 +189,16 @@ Text bt_disarm_icon Text :  Max. Text Size : 3 +Text unavailable + Attributes + ID : 32 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture bt_home_pic Attributes ID : 4 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/boot.txt b/advanced/hmi/nspanel_CJK_us_land_code/boot.txt index 67902b2..8285c16 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/boot.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/boot.txt @@ -15,6 +15,7 @@ Page boot dim=100 covx baud,baud_rate.txt,0,0 baud_rate.txt+=" bps" + vis unavailable,0 Postinitialize Event sendme @@ -102,7 +103,7 @@ Text tft_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : 4.2.4 + Text : 4.2.5 Max. Text Size : 9 Text esph_version @@ -145,6 +146,16 @@ Text framework Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Dual-state Button bt_reboot Attributes ID : 4 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/buttonpage01.txt b/advanced/hmi/nspanel_CJK_us_land_code/buttonpage01.txt index 631f112..9446a71 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/buttonpage01.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/buttonpage01.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/buttonpage02.txt b/advanced/hmi/nspanel_CJK_us_land_code/buttonpage02.txt index 0fc97d4..87af814 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/buttonpage02.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/buttonpage02.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/buttonpage03.txt b/advanced/hmi/nspanel_CJK_us_land_code/buttonpage03.txt index 2740b5e..bb36625 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/buttonpage03.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/buttonpage03.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/buttonpage04.txt b/advanced/hmi/nspanel_CJK_us_land_code/buttonpage04.txt index 96ae9e1..38c8cdd 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/buttonpage04.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/buttonpage04.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/climate.txt b/advanced/hmi/nspanel_CJK_us_land_code/climate.txt index b3c6df4..b9f183a 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/climate.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/climate.txt @@ -32,6 +32,7 @@ Page climate { page home } + vis unavailable,0 Postinitialize Event sendme @@ -530,6 +531,16 @@ Text target_low Touch Release Event active_slider.val=2 +Text unavailable + Attributes + ID : 54 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider slider_high Attributes ID : 7 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/confirm.txt b/advanced/hmi/nspanel_CJK_us_land_code/confirm.txt index 7c4b289..131e50e 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/confirm.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/confirm.txt @@ -16,6 +16,7 @@ Page confirm { page home } + vis unavailable,0 Postinitialize Event sendme @@ -77,6 +78,16 @@ Text body Text : Please confirm Max. Text Size : 255 +Text unavailable + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button bclose Attributes ID : 2 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/cover.txt b/advanced/hmi/nspanel_CJK_us_land_code/cover.txt index 9b0b036..b7afc34 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/cover.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/cover.txt @@ -16,6 +16,7 @@ Page cover { page home } + vis unavailable,0 Postinitialize Event sendme @@ -84,6 +85,16 @@ Text battery_icon Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider coverslider Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/entitypage01.txt b/advanced/hmi/nspanel_CJK_us_land_code/entitypage01.txt index d4cd469..7e9a7ae 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/entitypage01.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/entitypage01.txt @@ -16,6 +16,7 @@ Page entitypage01 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ●○○○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/entitypage02.txt b/advanced/hmi/nspanel_CJK_us_land_code/entitypage02.txt index 19650c4..deb1259 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/entitypage02.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/entitypage02.txt @@ -16,6 +16,7 @@ Page entitypage02 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○●○○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/entitypage03.txt b/advanced/hmi/nspanel_CJK_us_land_code/entitypage03.txt index 12fb2e4..3825618 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/entitypage03.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/entitypage03.txt @@ -16,6 +16,7 @@ Page entitypage03 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○○●○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 29 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/entitypage04.txt b/advanced/hmi/nspanel_CJK_us_land_code/entitypage04.txt index 3d05e25..b2b1238 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/entitypage04.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/entitypage04.txt @@ -16,6 +16,7 @@ Page entitypage04 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○○○● Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/fan.txt b/advanced/hmi/nspanel_CJK_us_land_code/fan.txt index 2533bf7..6909a73 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/fan.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/fan.txt @@ -16,6 +16,7 @@ Page fan { page home } + vis unavailable,0 Postinitialize Event sendme @@ -64,6 +65,16 @@ Text icon_state Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider fanslider Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/home.txt b/advanced/hmi/nspanel_CJK_us_land_code/home.txt index 8950606..a6a5668 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/home.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/home.txt @@ -21,6 +21,7 @@ Page home vis left_bt_text,0 vis right_bt_text,0 } + vis unavailable,0 Postinitialize Event sendme @@ -579,6 +580,16 @@ Text button06 printh FF FF FF } +Text unavailable + Attributes + ID : 46 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather Attributes ID : 7 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/keyb_num.txt b/advanced/hmi/nspanel_CJK_us_land_code/keyb_num.txt index b011257..07c3562 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/keyb_num.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/keyb_num.txt @@ -16,6 +16,7 @@ Page keyb_num { page page_id.val } + vis unavailable,0 Postinitialize Event sendme @@ -84,6 +85,16 @@ Text title Text : Alarm Max. Text Size : 30 +Text unavailable + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button b1 Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/light.txt b/advanced/hmi/nspanel_CJK_us_land_code/light.txt index 1044901..5a1d342 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/light.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/light.txt @@ -36,6 +36,7 @@ Page light vis color_touch,0 vis color_button,0 } + vis unavailable,0 Postinitialize Event sendme @@ -158,6 +159,16 @@ Text icon_state Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture light_button Attributes ID : 8 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/media_player.txt b/advanced/hmi/nspanel_CJK_us_land_code/media_player.txt index c2e2d55..7aceec7 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/media_player.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/media_player.txt @@ -16,6 +16,7 @@ Page media_player { page home } + vis unavailable,0 Postinitialize Event sendme @@ -278,6 +279,16 @@ Text bt_on_off printh 00 printh FF FF FF +Text unavailable + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Progress Bar time_progress Attributes ID : 9 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/notification.txt b/advanced/hmi/nspanel_CJK_us_land_code/notification.txt index 5e5654e..b3e282f 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/notification.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/notification.txt @@ -16,6 +16,7 @@ Page notification { page home } + vis unavailable,0 Postinitialize Event sendme @@ -47,6 +48,16 @@ Text notifi_label Text : Max. Text Size : 100 +Text unavailable + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/qrcode.txt b/advanced/hmi/nspanel_CJK_us_land_code/qrcode.txt index 84a0acf..e9a780b 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/qrcode.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/qrcode.txt @@ -11,6 +11,9 @@ Page qrcode Swide right page ID: disabled Events + Preinitialize Event + vis unavailable,0 + Postinitialize Event sendme @@ -24,6 +27,16 @@ Text qrcode_label Text : Max. Text Size : 100 +Text unavailable + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + QR Code qrcode_value Attributes ID : 4 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/screensaver.txt b/advanced/hmi/nspanel_CJK_us_land_code/screensaver.txt index ea216f1..4c0ad19 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/screensaver.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/screensaver.txt @@ -14,6 +14,7 @@ Page screensaver Preinitialize Event vis text,0 dim=brightness_sleep + vis unavailable,0 Postinitialize Event sendme @@ -35,6 +36,16 @@ Text text Touch Release Event page back_page_id +Text unavailable + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Timer swipestore Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/settings.txt b/advanced/hmi/nspanel_CJK_us_land_code/settings.txt index 0b83161..adaf793 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/settings.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/settings.txt @@ -18,6 +18,7 @@ Page settings dim_text.txt+="%" vis lbl_sleep,0 vis bt_sleep,0 + vis unavailable,0 Postinitialize Event sendme @@ -99,6 +100,16 @@ Text lbl_brightness Text : Brightness Max. Text Size : 25 +Text unavailable + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider brightslider Attributes ID : 1 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/weather01.txt b/advanced/hmi/nspanel_CJK_us_land_code/weather01.txt index dfbe294..31c8edc 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/weather01.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/weather01.txt @@ -16,6 +16,7 @@ Page weather01 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ●○○○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/weather02.txt b/advanced/hmi/nspanel_CJK_us_land_code/weather02.txt index 9f80e06..d1e703a 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/weather02.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/weather02.txt @@ -16,6 +16,7 @@ Page weather02 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○●○○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/weather03.txt b/advanced/hmi/nspanel_CJK_us_land_code/weather03.txt index 164d84e..be8be75 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/weather03.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/weather03.txt @@ -16,6 +16,7 @@ Page weather03 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○●○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/weather04.txt b/advanced/hmi/nspanel_CJK_us_land_code/weather04.txt index 6438372..9760d9e 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/weather04.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/weather04.txt @@ -16,6 +16,7 @@ Page weather04 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○○●○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_CJK_us_land_code/weather05.txt b/advanced/hmi/nspanel_CJK_us_land_code/weather05.txt index da0e71f..04ea0f0 100644 --- a/advanced/hmi/nspanel_CJK_us_land_code/weather05.txt +++ b/advanced/hmi/nspanel_CJK_us_land_code/weather05.txt @@ -16,6 +16,7 @@ Page weather05 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○○○● Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_eu.HMI b/advanced/hmi/nspanel_eu.HMI index 50a925d..8fff721 100644 Binary files a/advanced/hmi/nspanel_eu.HMI and b/advanced/hmi/nspanel_eu.HMI differ diff --git a/advanced/hmi/nspanel_eu_code/alarm.txt b/advanced/hmi/nspanel_eu_code/alarm.txt index 9732c03..d4778be 100644 --- a/advanced/hmi/nspanel_eu_code/alarm.txt +++ b/advanced/hmi/nspanel_eu_code/alarm.txt @@ -23,6 +23,7 @@ Page alarm vis bt_vacat,0 vis bt_bypass,0 } + vis unavailable,0 Postinitialize Event sendme @@ -188,6 +189,16 @@ Text bt_disarm_icon Text :  Max. Text Size : 3 +Text unavailable + Attributes + ID : 32 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture bt_home_pic Attributes ID : 4 diff --git a/advanced/hmi/nspanel_eu_code/boot.txt b/advanced/hmi/nspanel_eu_code/boot.txt index 67902b2..8285c16 100644 --- a/advanced/hmi/nspanel_eu_code/boot.txt +++ b/advanced/hmi/nspanel_eu_code/boot.txt @@ -15,6 +15,7 @@ Page boot dim=100 covx baud,baud_rate.txt,0,0 baud_rate.txt+=" bps" + vis unavailable,0 Postinitialize Event sendme @@ -102,7 +103,7 @@ Text tft_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : 4.2.4 + Text : 4.2.5 Max. Text Size : 9 Text esph_version @@ -145,6 +146,16 @@ Text framework Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Dual-state Button bt_reboot Attributes ID : 4 diff --git a/advanced/hmi/nspanel_eu_code/buttonpage01.txt b/advanced/hmi/nspanel_eu_code/buttonpage01.txt index 631f112..9446a71 100644 --- a/advanced/hmi/nspanel_eu_code/buttonpage01.txt +++ b/advanced/hmi/nspanel_eu_code/buttonpage01.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_eu_code/buttonpage02.txt b/advanced/hmi/nspanel_eu_code/buttonpage02.txt index 0fc97d4..87af814 100644 --- a/advanced/hmi/nspanel_eu_code/buttonpage02.txt +++ b/advanced/hmi/nspanel_eu_code/buttonpage02.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_eu_code/buttonpage03.txt b/advanced/hmi/nspanel_eu_code/buttonpage03.txt index 2740b5e..bb36625 100644 --- a/advanced/hmi/nspanel_eu_code/buttonpage03.txt +++ b/advanced/hmi/nspanel_eu_code/buttonpage03.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_eu_code/buttonpage04.txt b/advanced/hmi/nspanel_eu_code/buttonpage04.txt index 96ae9e1..38c8cdd 100644 --- a/advanced/hmi/nspanel_eu_code/buttonpage04.txt +++ b/advanced/hmi/nspanel_eu_code/buttonpage04.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_eu_code/climate.txt b/advanced/hmi/nspanel_eu_code/climate.txt index b3c6df4..b9f183a 100644 --- a/advanced/hmi/nspanel_eu_code/climate.txt +++ b/advanced/hmi/nspanel_eu_code/climate.txt @@ -32,6 +32,7 @@ Page climate { page home } + vis unavailable,0 Postinitialize Event sendme @@ -530,6 +531,16 @@ Text target_low Touch Release Event active_slider.val=2 +Text unavailable + Attributes + ID : 54 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider slider_high Attributes ID : 7 diff --git a/advanced/hmi/nspanel_eu_code/confirm.txt b/advanced/hmi/nspanel_eu_code/confirm.txt index 7c4b289..131e50e 100644 --- a/advanced/hmi/nspanel_eu_code/confirm.txt +++ b/advanced/hmi/nspanel_eu_code/confirm.txt @@ -16,6 +16,7 @@ Page confirm { page home } + vis unavailable,0 Postinitialize Event sendme @@ -77,6 +78,16 @@ Text body Text : Please confirm Max. Text Size : 255 +Text unavailable + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button bclose Attributes ID : 2 diff --git a/advanced/hmi/nspanel_eu_code/cover.txt b/advanced/hmi/nspanel_eu_code/cover.txt index 9b0b036..b7afc34 100644 --- a/advanced/hmi/nspanel_eu_code/cover.txt +++ b/advanced/hmi/nspanel_eu_code/cover.txt @@ -16,6 +16,7 @@ Page cover { page home } + vis unavailable,0 Postinitialize Event sendme @@ -84,6 +85,16 @@ Text battery_icon Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider coverslider Attributes ID : 6 diff --git a/advanced/hmi/nspanel_eu_code/entitypage01.txt b/advanced/hmi/nspanel_eu_code/entitypage01.txt index d4cd469..7e9a7ae 100644 --- a/advanced/hmi/nspanel_eu_code/entitypage01.txt +++ b/advanced/hmi/nspanel_eu_code/entitypage01.txt @@ -16,6 +16,7 @@ Page entitypage01 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ●○○○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_eu_code/entitypage02.txt b/advanced/hmi/nspanel_eu_code/entitypage02.txt index 19650c4..deb1259 100644 --- a/advanced/hmi/nspanel_eu_code/entitypage02.txt +++ b/advanced/hmi/nspanel_eu_code/entitypage02.txt @@ -16,6 +16,7 @@ Page entitypage02 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○●○○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_eu_code/entitypage03.txt b/advanced/hmi/nspanel_eu_code/entitypage03.txt index 12fb2e4..3825618 100644 --- a/advanced/hmi/nspanel_eu_code/entitypage03.txt +++ b/advanced/hmi/nspanel_eu_code/entitypage03.txt @@ -16,6 +16,7 @@ Page entitypage03 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○○●○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 29 diff --git a/advanced/hmi/nspanel_eu_code/entitypage04.txt b/advanced/hmi/nspanel_eu_code/entitypage04.txt index 3d05e25..b2b1238 100644 --- a/advanced/hmi/nspanel_eu_code/entitypage04.txt +++ b/advanced/hmi/nspanel_eu_code/entitypage04.txt @@ -16,6 +16,7 @@ Page entitypage04 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○○○● Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_eu_code/fan.txt b/advanced/hmi/nspanel_eu_code/fan.txt index 2533bf7..6909a73 100644 --- a/advanced/hmi/nspanel_eu_code/fan.txt +++ b/advanced/hmi/nspanel_eu_code/fan.txt @@ -16,6 +16,7 @@ Page fan { page home } + vis unavailable,0 Postinitialize Event sendme @@ -64,6 +65,16 @@ Text icon_state Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider fanslider Attributes ID : 3 diff --git a/advanced/hmi/nspanel_eu_code/home.txt b/advanced/hmi/nspanel_eu_code/home.txt index 8950606..a6a5668 100644 --- a/advanced/hmi/nspanel_eu_code/home.txt +++ b/advanced/hmi/nspanel_eu_code/home.txt @@ -21,6 +21,7 @@ Page home vis left_bt_text,0 vis right_bt_text,0 } + vis unavailable,0 Postinitialize Event sendme @@ -579,6 +580,16 @@ Text button06 printh FF FF FF } +Text unavailable + Attributes + ID : 46 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather Attributes ID : 7 diff --git a/advanced/hmi/nspanel_eu_code/keyb_num.txt b/advanced/hmi/nspanel_eu_code/keyb_num.txt index b011257..07c3562 100644 --- a/advanced/hmi/nspanel_eu_code/keyb_num.txt +++ b/advanced/hmi/nspanel_eu_code/keyb_num.txt @@ -16,6 +16,7 @@ Page keyb_num { page page_id.val } + vis unavailable,0 Postinitialize Event sendme @@ -84,6 +85,16 @@ Text title Text : Alarm Max. Text Size : 30 +Text unavailable + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button b1 Attributes ID : 3 diff --git a/advanced/hmi/nspanel_eu_code/light.txt b/advanced/hmi/nspanel_eu_code/light.txt index 1044901..5a1d342 100644 --- a/advanced/hmi/nspanel_eu_code/light.txt +++ b/advanced/hmi/nspanel_eu_code/light.txt @@ -36,6 +36,7 @@ Page light vis color_touch,0 vis color_button,0 } + vis unavailable,0 Postinitialize Event sendme @@ -158,6 +159,16 @@ Text icon_state Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture light_button Attributes ID : 8 diff --git a/advanced/hmi/nspanel_eu_code/media_player.txt b/advanced/hmi/nspanel_eu_code/media_player.txt index c2e2d55..7aceec7 100644 --- a/advanced/hmi/nspanel_eu_code/media_player.txt +++ b/advanced/hmi/nspanel_eu_code/media_player.txt @@ -16,6 +16,7 @@ Page media_player { page home } + vis unavailable,0 Postinitialize Event sendme @@ -278,6 +279,16 @@ Text bt_on_off printh 00 printh FF FF FF +Text unavailable + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Progress Bar time_progress Attributes ID : 9 diff --git a/advanced/hmi/nspanel_eu_code/notification.txt b/advanced/hmi/nspanel_eu_code/notification.txt index 5e5654e..b3e282f 100644 --- a/advanced/hmi/nspanel_eu_code/notification.txt +++ b/advanced/hmi/nspanel_eu_code/notification.txt @@ -16,6 +16,7 @@ Page notification { page home } + vis unavailable,0 Postinitialize Event sendme @@ -47,6 +48,16 @@ Text notifi_label Text : Max. Text Size : 100 +Text unavailable + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_eu_code/qrcode.txt b/advanced/hmi/nspanel_eu_code/qrcode.txt index 84a0acf..e9a780b 100644 --- a/advanced/hmi/nspanel_eu_code/qrcode.txt +++ b/advanced/hmi/nspanel_eu_code/qrcode.txt @@ -11,6 +11,9 @@ Page qrcode Swide right page ID: disabled Events + Preinitialize Event + vis unavailable,0 + Postinitialize Event sendme @@ -24,6 +27,16 @@ Text qrcode_label Text : Max. Text Size : 100 +Text unavailable + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + QR Code qrcode_value Attributes ID : 4 diff --git a/advanced/hmi/nspanel_eu_code/screensaver.txt b/advanced/hmi/nspanel_eu_code/screensaver.txt index ea216f1..4c0ad19 100644 --- a/advanced/hmi/nspanel_eu_code/screensaver.txt +++ b/advanced/hmi/nspanel_eu_code/screensaver.txt @@ -14,6 +14,7 @@ Page screensaver Preinitialize Event vis text,0 dim=brightness_sleep + vis unavailable,0 Postinitialize Event sendme @@ -35,6 +36,16 @@ Text text Touch Release Event page back_page_id +Text unavailable + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Timer swipestore Attributes ID : 3 diff --git a/advanced/hmi/nspanel_eu_code/settings.txt b/advanced/hmi/nspanel_eu_code/settings.txt index 0b83161..adaf793 100644 --- a/advanced/hmi/nspanel_eu_code/settings.txt +++ b/advanced/hmi/nspanel_eu_code/settings.txt @@ -18,6 +18,7 @@ Page settings dim_text.txt+="%" vis lbl_sleep,0 vis bt_sleep,0 + vis unavailable,0 Postinitialize Event sendme @@ -99,6 +100,16 @@ Text lbl_brightness Text : Brightness Max. Text Size : 25 +Text unavailable + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider brightslider Attributes ID : 1 diff --git a/advanced/hmi/nspanel_eu_code/weather01.txt b/advanced/hmi/nspanel_eu_code/weather01.txt index dfbe294..31c8edc 100644 --- a/advanced/hmi/nspanel_eu_code/weather01.txt +++ b/advanced/hmi/nspanel_eu_code/weather01.txt @@ -16,6 +16,7 @@ Page weather01 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ●○○○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_eu_code/weather02.txt b/advanced/hmi/nspanel_eu_code/weather02.txt index 9f80e06..d1e703a 100644 --- a/advanced/hmi/nspanel_eu_code/weather02.txt +++ b/advanced/hmi/nspanel_eu_code/weather02.txt @@ -16,6 +16,7 @@ Page weather02 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○●○○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_eu_code/weather03.txt b/advanced/hmi/nspanel_eu_code/weather03.txt index 164d84e..be8be75 100644 --- a/advanced/hmi/nspanel_eu_code/weather03.txt +++ b/advanced/hmi/nspanel_eu_code/weather03.txt @@ -16,6 +16,7 @@ Page weather03 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○●○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_eu_code/weather04.txt b/advanced/hmi/nspanel_eu_code/weather04.txt index 6438372..9760d9e 100644 --- a/advanced/hmi/nspanel_eu_code/weather04.txt +++ b/advanced/hmi/nspanel_eu_code/weather04.txt @@ -16,6 +16,7 @@ Page weather04 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○○●○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_eu_code/weather05.txt b/advanced/hmi/nspanel_eu_code/weather05.txt index da0e71f..04ea0f0 100644 --- a/advanced/hmi/nspanel_eu_code/weather05.txt +++ b/advanced/hmi/nspanel_eu_code/weather05.txt @@ -16,6 +16,7 @@ Page weather05 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○○○● Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_us.HMI b/advanced/hmi/nspanel_us.HMI index 2735cca..e2df797 100644 Binary files a/advanced/hmi/nspanel_us.HMI and b/advanced/hmi/nspanel_us.HMI differ diff --git a/advanced/hmi/nspanel_us_code/alarm.txt b/advanced/hmi/nspanel_us_code/alarm.txt index 489f0fd..a358203 100644 --- a/advanced/hmi/nspanel_us_code/alarm.txt +++ b/advanced/hmi/nspanel_us_code/alarm.txt @@ -23,6 +23,7 @@ Page alarm vis bt_vacat,0 vis bt_bypass,0 } + vis unavailable,0 Postinitialize Event sendme @@ -195,6 +196,16 @@ Text bt_disarm_icon Text :  Max. Text Size : 3 +Text unavailable + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture bt_home_pic Attributes ID : 4 @@ -267,7 +278,7 @@ Hotspot bt_home bt_home_icon.pco=0 Touch Release Event - lastclick.txt="{\"page\": \"alarm\", \"key\": \"home\", \"value\": \"click\", \"entity\": \""+entity.txt+"\", \"mui\": \""+bt_home_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" + lastclick.txt="{\"page\": \"alarm\", \"key\": \"home\", \"value\": \"click\", \"mui\": \""+bt_home_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" printh 92 prints "localevent",0 printh 00 @@ -291,7 +302,7 @@ Hotspot bt_away bt_away_icon.pco=0 Touch Release Event - lastclick.txt="{\"page\": \"alarm\", \"key\": \"away\", \"value\": \"click\", \"entity\": \""+entity.txt+"\", \"mui\": \""+bt_away_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" + lastclick.txt="{\"page\": \"alarm\", \"key\": \"away\", \"value\": \"click\", \"mui\": \""+bt_away_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" printh 92 prints "localevent",0 printh 00 @@ -315,7 +326,7 @@ Hotspot bt_night bt_night_icon.pco=0 Touch Release Event - lastclick.txt="{\"page\": \"alarm\", \"key\": \"night\", \"value\": \"click\", \"entity\": \""+entity.txt+"\", \"mui\": \""+bt_night_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" + lastclick.txt="{\"page\": \"alarm\", \"key\": \"night\", \"value\": \"click\", \"mui\": \""+bt_night_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" printh 92 prints "localevent",0 printh 00 @@ -339,7 +350,7 @@ Hotspot bt_vacat bt_vacat_icon.pco=0 Touch Release Event - lastclick.txt="{\"page\": \"alarm\", \"key\": \"vacation\", \"value\": \"click\", \"entity\": \""+entity.txt+"\", \"mui\": \""+bt_vacat_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" + lastclick.txt="{\"page\": \"alarm\", \"key\": \"vacation\", \"value\": \"click\", \"mui\": \""+bt_vacat_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" printh 92 prints "localevent",0 printh 00 @@ -363,7 +374,7 @@ Hotspot bt_bypass bt_bypass_icon.pco=0 Touch Release Event - lastclick.txt="{\"page\": \"alarm\", \"key\": \"bypass\", \"value\": \"click\", \"entity\": \""+entity.txt+"\", \"mui\": \""+bt_bypass_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" + lastclick.txt="{\"page\": \"alarm\", \"key\": \"bypass\", \"value\": \"click\", \"mui\": \""+bt_bypass_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" printh 92 prints "localevent",0 printh 00 @@ -387,7 +398,7 @@ Hotspot bt_disarm bt_disarm_icon.pco=0 Touch Release Event - lastclick.txt="{\"page\": \"alarm\", \"key\": \"disarm\", \"value\": \"click\", \"entity\": \""+entity.txt+"\", \"mui\": \""+bt_disarm_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" + lastclick.txt="{\"page\": \"alarm\", \"key\": \"disarm\", \"value\": \"click\", \"mui\": \""+bt_disarm_text.txt+"\", \"code_format\": \""+code_format.txt+"\", \"code_arm_req\": \""+code_arm_req.txt+"\"}" printh 92 prints "localevent",0 printh 00 diff --git a/advanced/hmi/nspanel_us_code/boot.txt b/advanced/hmi/nspanel_us_code/boot.txt index 34e18cf..cc191cb 100644 --- a/advanced/hmi/nspanel_us_code/boot.txt +++ b/advanced/hmi/nspanel_us_code/boot.txt @@ -15,6 +15,7 @@ Page boot dim=100 covx baud,baud_rate.txt,0,0 baud_rate.txt+=" bps" + vis unavailable,0 Postinitialize Event sendme @@ -102,7 +103,7 @@ Text tft_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : 4.2.4 + Text : 4.2.5 Max. Text Size : 9 Events @@ -152,6 +153,16 @@ Text framework Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Dual-state Button bt_reboot Attributes ID : 4 diff --git a/advanced/hmi/nspanel_us_code/buttonpage01.txt b/advanced/hmi/nspanel_us_code/buttonpage01.txt index 631f112..9446a71 100644 --- a/advanced/hmi/nspanel_us_code/buttonpage01.txt +++ b/advanced/hmi/nspanel_us_code/buttonpage01.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_us_code/buttonpage02.txt b/advanced/hmi/nspanel_us_code/buttonpage02.txt index 0fc97d4..87af814 100644 --- a/advanced/hmi/nspanel_us_code/buttonpage02.txt +++ b/advanced/hmi/nspanel_us_code/buttonpage02.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_us_code/buttonpage03.txt b/advanced/hmi/nspanel_us_code/buttonpage03.txt index 2740b5e..bb36625 100644 --- a/advanced/hmi/nspanel_us_code/buttonpage03.txt +++ b/advanced/hmi/nspanel_us_code/buttonpage03.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_us_code/buttonpage04.txt b/advanced/hmi/nspanel_us_code/buttonpage04.txt index 96ae9e1..38c8cdd 100644 --- a/advanced/hmi/nspanel_us_code/buttonpage04.txt +++ b/advanced/hmi/nspanel_us_code/buttonpage04.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_us_code/climate.txt b/advanced/hmi/nspanel_us_code/climate.txt index cfd6503..2d3bc7c 100644 --- a/advanced/hmi/nspanel_us_code/climate.txt +++ b/advanced/hmi/nspanel_us_code/climate.txt @@ -32,6 +32,7 @@ Page climate { page home } + vis unavailable,0 Postinitialize Event sendme @@ -530,6 +531,16 @@ Text target_low Touch Release Event active_slider.val=2 +Text unavailable + Attributes + ID : 54 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider slider_high Attributes ID : 7 diff --git a/advanced/hmi/nspanel_us_code/confirm.txt b/advanced/hmi/nspanel_us_code/confirm.txt index 7c4b289..131e50e 100644 --- a/advanced/hmi/nspanel_us_code/confirm.txt +++ b/advanced/hmi/nspanel_us_code/confirm.txt @@ -16,6 +16,7 @@ Page confirm { page home } + vis unavailable,0 Postinitialize Event sendme @@ -77,6 +78,16 @@ Text body Text : Please confirm Max. Text Size : 255 +Text unavailable + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button bclose Attributes ID : 2 diff --git a/advanced/hmi/nspanel_us_code/cover.txt b/advanced/hmi/nspanel_us_code/cover.txt index 718e467..d2d624e 100644 --- a/advanced/hmi/nspanel_us_code/cover.txt +++ b/advanced/hmi/nspanel_us_code/cover.txt @@ -16,6 +16,7 @@ Page cover { page home } + vis unavailable,0 Postinitialize Event sendme @@ -84,6 +85,16 @@ Text battery_icon Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider coverslider Attributes ID : 6 diff --git a/advanced/hmi/nspanel_us_code/entitypage01.txt b/advanced/hmi/nspanel_us_code/entitypage01.txt index d4cd469..7e9a7ae 100644 --- a/advanced/hmi/nspanel_us_code/entitypage01.txt +++ b/advanced/hmi/nspanel_us_code/entitypage01.txt @@ -16,6 +16,7 @@ Page entitypage01 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ●○○○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_us_code/entitypage02.txt b/advanced/hmi/nspanel_us_code/entitypage02.txt index 19650c4..deb1259 100644 --- a/advanced/hmi/nspanel_us_code/entitypage02.txt +++ b/advanced/hmi/nspanel_us_code/entitypage02.txt @@ -16,6 +16,7 @@ Page entitypage02 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○●○○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_us_code/entitypage03.txt b/advanced/hmi/nspanel_us_code/entitypage03.txt index 19da4ec..1a14754 100644 --- a/advanced/hmi/nspanel_us_code/entitypage03.txt +++ b/advanced/hmi/nspanel_us_code/entitypage03.txt @@ -16,6 +16,7 @@ Page entitypage03 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○○●○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_us_code/entitypage04.txt b/advanced/hmi/nspanel_us_code/entitypage04.txt index 3d05e25..b2b1238 100644 --- a/advanced/hmi/nspanel_us_code/entitypage04.txt +++ b/advanced/hmi/nspanel_us_code/entitypage04.txt @@ -16,6 +16,7 @@ Page entitypage04 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○○○● Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_us_code/fan.txt b/advanced/hmi/nspanel_us_code/fan.txt index 2533bf7..6909a73 100644 --- a/advanced/hmi/nspanel_us_code/fan.txt +++ b/advanced/hmi/nspanel_us_code/fan.txt @@ -16,6 +16,7 @@ Page fan { page home } + vis unavailable,0 Postinitialize Event sendme @@ -64,6 +65,16 @@ Text icon_state Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider fanslider Attributes ID : 3 diff --git a/advanced/hmi/nspanel_us_code/home.txt b/advanced/hmi/nspanel_us_code/home.txt index 8950606..a6a5668 100644 --- a/advanced/hmi/nspanel_us_code/home.txt +++ b/advanced/hmi/nspanel_us_code/home.txt @@ -21,6 +21,7 @@ Page home vis left_bt_text,0 vis right_bt_text,0 } + vis unavailable,0 Postinitialize Event sendme @@ -579,6 +580,16 @@ Text button06 printh FF FF FF } +Text unavailable + Attributes + ID : 46 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather Attributes ID : 7 diff --git a/advanced/hmi/nspanel_us_code/keyb_num.txt b/advanced/hmi/nspanel_us_code/keyb_num.txt index b8c3a2d..aea6a3e 100644 --- a/advanced/hmi/nspanel_us_code/keyb_num.txt +++ b/advanced/hmi/nspanel_us_code/keyb_num.txt @@ -16,6 +16,7 @@ Page keyb_num { page page_id.val } + vis unavailable,0 Postinitialize Event sendme @@ -84,6 +85,16 @@ Text title Text : Alarm Max. Text Size : 30 +Text unavailable + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button b1 Attributes ID : 3 @@ -265,6 +276,12 @@ Button benter Events Touch Release Event aux.txt="{\"page\": \"keyb_num\", \"key\": \""+key.txt+"\", \"value\": \""+value.txt+"\", \"pin\": \""+pin.txt+"\", \"base_domain\": \""+domain.txt+"\"}" + printh 92 + prints "localevent",0 + printh 00 + prints aux.txt,0 + printh 00 + printh FF FF FF Button bview Attributes diff --git a/advanced/hmi/nspanel_us_code/light.txt b/advanced/hmi/nspanel_us_code/light.txt index 660e23a..25a940f 100644 --- a/advanced/hmi/nspanel_us_code/light.txt +++ b/advanced/hmi/nspanel_us_code/light.txt @@ -36,6 +36,7 @@ Page light vis color_touch,0 vis color_button,0 } + vis unavailable,0 Postinitialize Event sendme @@ -158,6 +159,16 @@ Text icon_state Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture light_button Attributes ID : 8 diff --git a/advanced/hmi/nspanel_us_code/media_player.txt b/advanced/hmi/nspanel_us_code/media_player.txt index 3cd1ed6..a0d7d1d 100644 --- a/advanced/hmi/nspanel_us_code/media_player.txt +++ b/advanced/hmi/nspanel_us_code/media_player.txt @@ -16,6 +16,7 @@ Page media_player { page home } + vis unavailable,0 Postinitialize Event sendme @@ -277,6 +278,16 @@ Text bt_on_off printh 00 printh FF FF FF +Text unavailable + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Progress Bar time_progress Attributes ID : 9 diff --git a/advanced/hmi/nspanel_us_code/notification.txt b/advanced/hmi/nspanel_us_code/notification.txt index 5907e7f..089013e 100644 --- a/advanced/hmi/nspanel_us_code/notification.txt +++ b/advanced/hmi/nspanel_us_code/notification.txt @@ -16,6 +16,7 @@ Page notification { page home } + vis unavailable,0 Postinitialize Event sendme @@ -47,6 +48,16 @@ Text notifi_label Text : Max. Text Size : 100 +Text unavailable + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_us_code/qrcode.txt b/advanced/hmi/nspanel_us_code/qrcode.txt index 84a0acf..e9a780b 100644 --- a/advanced/hmi/nspanel_us_code/qrcode.txt +++ b/advanced/hmi/nspanel_us_code/qrcode.txt @@ -11,6 +11,9 @@ Page qrcode Swide right page ID: disabled Events + Preinitialize Event + vis unavailable,0 + Postinitialize Event sendme @@ -24,6 +27,16 @@ Text qrcode_label Text : Max. Text Size : 100 +Text unavailable + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + QR Code qrcode_value Attributes ID : 4 diff --git a/advanced/hmi/nspanel_us_code/screensaver.txt b/advanced/hmi/nspanel_us_code/screensaver.txt index ea216f1..4c0ad19 100644 --- a/advanced/hmi/nspanel_us_code/screensaver.txt +++ b/advanced/hmi/nspanel_us_code/screensaver.txt @@ -14,6 +14,7 @@ Page screensaver Preinitialize Event vis text,0 dim=brightness_sleep + vis unavailable,0 Postinitialize Event sendme @@ -35,6 +36,16 @@ Text text Touch Release Event page back_page_id +Text unavailable + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Timer swipestore Attributes ID : 3 diff --git a/advanced/hmi/nspanel_us_code/settings.txt b/advanced/hmi/nspanel_us_code/settings.txt index 1644740..501cdd2 100644 --- a/advanced/hmi/nspanel_us_code/settings.txt +++ b/advanced/hmi/nspanel_us_code/settings.txt @@ -18,6 +18,7 @@ Page settings dim_text.txt+="%" vis lbl_sleep,0 vis bt_sleep,0 + vis unavailable,0 Postinitialize Event sendme @@ -195,6 +196,16 @@ Text t3 printh FF FF FF } +Text unavailable + Attributes + ID : 25 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider brightslider Attributes ID : 1 diff --git a/advanced/hmi/nspanel_us_code/weather01.txt b/advanced/hmi/nspanel_us_code/weather01.txt index dfbe294..31c8edc 100644 --- a/advanced/hmi/nspanel_us_code/weather01.txt +++ b/advanced/hmi/nspanel_us_code/weather01.txt @@ -16,6 +16,7 @@ Page weather01 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ●○○○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_us_code/weather02.txt b/advanced/hmi/nspanel_us_code/weather02.txt index 9f80e06..d1e703a 100644 --- a/advanced/hmi/nspanel_us_code/weather02.txt +++ b/advanced/hmi/nspanel_us_code/weather02.txt @@ -16,6 +16,7 @@ Page weather02 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○●○○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_us_code/weather03.txt b/advanced/hmi/nspanel_us_code/weather03.txt index 164d84e..be8be75 100644 --- a/advanced/hmi/nspanel_us_code/weather03.txt +++ b/advanced/hmi/nspanel_us_code/weather03.txt @@ -16,6 +16,7 @@ Page weather03 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○●○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_us_code/weather04.txt b/advanced/hmi/nspanel_us_code/weather04.txt index 6438372..9760d9e 100644 --- a/advanced/hmi/nspanel_us_code/weather04.txt +++ b/advanced/hmi/nspanel_us_code/weather04.txt @@ -16,6 +16,7 @@ Page weather04 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○○●○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_us_code/weather05.txt b/advanced/hmi/nspanel_us_code/weather05.txt index da0e71f..04ea0f0 100644 --- a/advanced/hmi/nspanel_us_code/weather05.txt +++ b/advanced/hmi/nspanel_us_code/weather05.txt @@ -16,6 +16,7 @@ Page weather05 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○○○● Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_us_land.HMI b/advanced/hmi/nspanel_us_land.HMI index 72aad06..530897c 100644 Binary files a/advanced/hmi/nspanel_us_land.HMI and b/advanced/hmi/nspanel_us_land.HMI differ diff --git a/advanced/hmi/nspanel_us_land_code/alarm.txt b/advanced/hmi/nspanel_us_land_code/alarm.txt index 9732c03..d4778be 100644 --- a/advanced/hmi/nspanel_us_land_code/alarm.txt +++ b/advanced/hmi/nspanel_us_land_code/alarm.txt @@ -23,6 +23,7 @@ Page alarm vis bt_vacat,0 vis bt_bypass,0 } + vis unavailable,0 Postinitialize Event sendme @@ -188,6 +189,16 @@ Text bt_disarm_icon Text :  Max. Text Size : 3 +Text unavailable + Attributes + ID : 32 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture bt_home_pic Attributes ID : 4 diff --git a/advanced/hmi/nspanel_us_land_code/boot.txt b/advanced/hmi/nspanel_us_land_code/boot.txt index 67902b2..8285c16 100644 --- a/advanced/hmi/nspanel_us_land_code/boot.txt +++ b/advanced/hmi/nspanel_us_land_code/boot.txt @@ -15,6 +15,7 @@ Page boot dim=100 covx baud,baud_rate.txt,0,0 baud_rate.txt+=" bps" + vis unavailable,0 Postinitialize Event sendme @@ -102,7 +103,7 @@ Text tft_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : 4.2.4 + Text : 4.2.5 Max. Text Size : 9 Text esph_version @@ -145,6 +146,16 @@ Text framework Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Dual-state Button bt_reboot Attributes ID : 4 diff --git a/advanced/hmi/nspanel_us_land_code/buttonpage01.txt b/advanced/hmi/nspanel_us_land_code/buttonpage01.txt index 631f112..9446a71 100644 --- a/advanced/hmi/nspanel_us_land_code/buttonpage01.txt +++ b/advanced/hmi/nspanel_us_land_code/buttonpage01.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_us_land_code/buttonpage02.txt b/advanced/hmi/nspanel_us_land_code/buttonpage02.txt index 0fc97d4..87af814 100644 --- a/advanced/hmi/nspanel_us_land_code/buttonpage02.txt +++ b/advanced/hmi/nspanel_us_land_code/buttonpage02.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_us_land_code/buttonpage03.txt b/advanced/hmi/nspanel_us_land_code/buttonpage03.txt index 2740b5e..bb36625 100644 --- a/advanced/hmi/nspanel_us_land_code/buttonpage03.txt +++ b/advanced/hmi/nspanel_us_land_code/buttonpage03.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_us_land_code/buttonpage04.txt b/advanced/hmi/nspanel_us_land_code/buttonpage04.txt index 96ae9e1..38c8cdd 100644 --- a/advanced/hmi/nspanel_us_land_code/buttonpage04.txt +++ b/advanced/hmi/nspanel_us_land_code/buttonpage04.txt @@ -392,6 +392,16 @@ Text button08bri Text : Max. Text Size : 4 +Text unavailable + Attributes + ID : 52 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_us_land_code/climate.txt b/advanced/hmi/nspanel_us_land_code/climate.txt index b3c6df4..b9f183a 100644 --- a/advanced/hmi/nspanel_us_land_code/climate.txt +++ b/advanced/hmi/nspanel_us_land_code/climate.txt @@ -32,6 +32,7 @@ Page climate { page home } + vis unavailable,0 Postinitialize Event sendme @@ -530,6 +531,16 @@ Text target_low Touch Release Event active_slider.val=2 +Text unavailable + Attributes + ID : 54 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider slider_high Attributes ID : 7 diff --git a/advanced/hmi/nspanel_us_land_code/confirm.txt b/advanced/hmi/nspanel_us_land_code/confirm.txt index 7c4b289..131e50e 100644 --- a/advanced/hmi/nspanel_us_land_code/confirm.txt +++ b/advanced/hmi/nspanel_us_land_code/confirm.txt @@ -16,6 +16,7 @@ Page confirm { page home } + vis unavailable,0 Postinitialize Event sendme @@ -77,6 +78,16 @@ Text body Text : Please confirm Max. Text Size : 255 +Text unavailable + Attributes + ID : 12 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button bclose Attributes ID : 2 diff --git a/advanced/hmi/nspanel_us_land_code/cover.txt b/advanced/hmi/nspanel_us_land_code/cover.txt index 9b0b036..b7afc34 100644 --- a/advanced/hmi/nspanel_us_land_code/cover.txt +++ b/advanced/hmi/nspanel_us_land_code/cover.txt @@ -16,6 +16,7 @@ Page cover { page home } + vis unavailable,0 Postinitialize Event sendme @@ -84,6 +85,16 @@ Text battery_icon Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 14 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider coverslider Attributes ID : 6 diff --git a/advanced/hmi/nspanel_us_land_code/entitypage01.txt b/advanced/hmi/nspanel_us_land_code/entitypage01.txt index d4cd469..7e9a7ae 100644 --- a/advanced/hmi/nspanel_us_land_code/entitypage01.txt +++ b/advanced/hmi/nspanel_us_land_code/entitypage01.txt @@ -16,6 +16,7 @@ Page entitypage01 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ●○○○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_us_land_code/entitypage02.txt b/advanced/hmi/nspanel_us_land_code/entitypage02.txt index 19650c4..deb1259 100644 --- a/advanced/hmi/nspanel_us_land_code/entitypage02.txt +++ b/advanced/hmi/nspanel_us_land_code/entitypage02.txt @@ -16,6 +16,7 @@ Page entitypage02 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○●○○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_us_land_code/entitypage03.txt b/advanced/hmi/nspanel_us_land_code/entitypage03.txt index 12fb2e4..3825618 100644 --- a/advanced/hmi/nspanel_us_land_code/entitypage03.txt +++ b/advanced/hmi/nspanel_us_land_code/entitypage03.txt @@ -16,6 +16,7 @@ Page entitypage03 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○○●○ Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 29 diff --git a/advanced/hmi/nspanel_us_land_code/entitypage04.txt b/advanced/hmi/nspanel_us_land_code/entitypage04.txt index 3d05e25..b2b1238 100644 --- a/advanced/hmi/nspanel_us_land_code/entitypage04.txt +++ b/advanced/hmi/nspanel_us_land_code/entitypage04.txt @@ -16,6 +16,7 @@ Page entitypage04 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -280,6 +281,16 @@ Text page_index Text : ○○○● Max. Text Size : 12 +Text unavailable + Attributes + ID : 31 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 28 diff --git a/advanced/hmi/nspanel_us_land_code/fan.txt b/advanced/hmi/nspanel_us_land_code/fan.txt index 2533bf7..6909a73 100644 --- a/advanced/hmi/nspanel_us_land_code/fan.txt +++ b/advanced/hmi/nspanel_us_land_code/fan.txt @@ -16,6 +16,7 @@ Page fan { page home } + vis unavailable,0 Postinitialize Event sendme @@ -64,6 +65,16 @@ Text icon_state Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 16 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider fanslider Attributes ID : 3 diff --git a/advanced/hmi/nspanel_us_land_code/home.txt b/advanced/hmi/nspanel_us_land_code/home.txt index 8950606..a6a5668 100644 --- a/advanced/hmi/nspanel_us_land_code/home.txt +++ b/advanced/hmi/nspanel_us_land_code/home.txt @@ -21,6 +21,7 @@ Page home vis left_bt_text,0 vis right_bt_text,0 } + vis unavailable,0 Postinitialize Event sendme @@ -579,6 +580,16 @@ Text button06 printh FF FF FF } +Text unavailable + Attributes + ID : 46 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather Attributes ID : 7 diff --git a/advanced/hmi/nspanel_us_land_code/keyb_num.txt b/advanced/hmi/nspanel_us_land_code/keyb_num.txt index b011257..07c3562 100644 --- a/advanced/hmi/nspanel_us_land_code/keyb_num.txt +++ b/advanced/hmi/nspanel_us_land_code/keyb_num.txt @@ -16,6 +16,7 @@ Page keyb_num { page page_id.val } + vis unavailable,0 Postinitialize Event sendme @@ -84,6 +85,16 @@ Text title Text : Alarm Max. Text Size : 30 +Text unavailable + Attributes + ID : 24 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button b1 Attributes ID : 3 diff --git a/advanced/hmi/nspanel_us_land_code/light.txt b/advanced/hmi/nspanel_us_land_code/light.txt index 1044901..5a1d342 100644 --- a/advanced/hmi/nspanel_us_land_code/light.txt +++ b/advanced/hmi/nspanel_us_land_code/light.txt @@ -36,6 +36,7 @@ Page light vis color_touch,0 vis color_button,0 } + vis unavailable,0 Postinitialize Event sendme @@ -158,6 +159,16 @@ Text icon_state Text : Max. Text Size : 10 +Text unavailable + Attributes + ID : 33 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture light_button Attributes ID : 8 diff --git a/advanced/hmi/nspanel_us_land_code/media_player.txt b/advanced/hmi/nspanel_us_land_code/media_player.txt index c2e2d55..7aceec7 100644 --- a/advanced/hmi/nspanel_us_land_code/media_player.txt +++ b/advanced/hmi/nspanel_us_land_code/media_player.txt @@ -16,6 +16,7 @@ Page media_player { page home } + vis unavailable,0 Postinitialize Event sendme @@ -278,6 +279,16 @@ Text bt_on_off printh 00 printh FF FF FF +Text unavailable + Attributes + ID : 26 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Progress Bar time_progress Attributes ID : 9 diff --git a/advanced/hmi/nspanel_us_land_code/notification.txt b/advanced/hmi/nspanel_us_land_code/notification.txt index 5e5654e..b3e282f 100644 --- a/advanced/hmi/nspanel_us_land_code/notification.txt +++ b/advanced/hmi/nspanel_us_land_code/notification.txt @@ -16,6 +16,7 @@ Page notification { page home } + vis unavailable,0 Postinitialize Event sendme @@ -47,6 +48,16 @@ Text notifi_label Text : Max. Text Size : 100 +Text unavailable + Attributes + ID : 10 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Button button_back Attributes ID : 6 diff --git a/advanced/hmi/nspanel_us_land_code/qrcode.txt b/advanced/hmi/nspanel_us_land_code/qrcode.txt index 84a0acf..e9a780b 100644 --- a/advanced/hmi/nspanel_us_land_code/qrcode.txt +++ b/advanced/hmi/nspanel_us_land_code/qrcode.txt @@ -11,6 +11,9 @@ Page qrcode Swide right page ID: disabled Events + Preinitialize Event + vis unavailable,0 + Postinitialize Event sendme @@ -24,6 +27,16 @@ Text qrcode_label Text : Max. Text Size : 100 +Text unavailable + Attributes + ID : 7 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + QR Code qrcode_value Attributes ID : 4 diff --git a/advanced/hmi/nspanel_us_land_code/screensaver.txt b/advanced/hmi/nspanel_us_land_code/screensaver.txt index ea216f1..4c0ad19 100644 --- a/advanced/hmi/nspanel_us_land_code/screensaver.txt +++ b/advanced/hmi/nspanel_us_land_code/screensaver.txt @@ -14,6 +14,7 @@ Page screensaver Preinitialize Event vis text,0 dim=brightness_sleep + vis unavailable,0 Postinitialize Event sendme @@ -35,6 +36,16 @@ Text text Touch Release Event page back_page_id +Text unavailable + Attributes + ID : 5 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Timer swipestore Attributes ID : 3 diff --git a/advanced/hmi/nspanel_us_land_code/settings.txt b/advanced/hmi/nspanel_us_land_code/settings.txt index 0b83161..adaf793 100644 --- a/advanced/hmi/nspanel_us_land_code/settings.txt +++ b/advanced/hmi/nspanel_us_land_code/settings.txt @@ -18,6 +18,7 @@ Page settings dim_text.txt+="%" vis lbl_sleep,0 vis bt_sleep,0 + vis unavailable,0 Postinitialize Event sendme @@ -99,6 +100,16 @@ Text lbl_brightness Text : Brightness Max. Text Size : 25 +Text unavailable + Attributes + ID : 21 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Slider brightslider Attributes ID : 1 diff --git a/advanced/hmi/nspanel_us_land_code/weather01.txt b/advanced/hmi/nspanel_us_land_code/weather01.txt index dfbe294..31c8edc 100644 --- a/advanced/hmi/nspanel_us_land_code/weather01.txt +++ b/advanced/hmi/nspanel_us_land_code/weather01.txt @@ -16,6 +16,7 @@ Page weather01 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ●○○○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_us_land_code/weather02.txt b/advanced/hmi/nspanel_us_land_code/weather02.txt index 9f80e06..d1e703a 100644 --- a/advanced/hmi/nspanel_us_land_code/weather02.txt +++ b/advanced/hmi/nspanel_us_land_code/weather02.txt @@ -16,6 +16,7 @@ Page weather02 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○●○○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_us_land_code/weather03.txt b/advanced/hmi/nspanel_us_land_code/weather03.txt index 164d84e..be8be75 100644 --- a/advanced/hmi/nspanel_us_land_code/weather03.txt +++ b/advanced/hmi/nspanel_us_land_code/weather03.txt @@ -16,6 +16,7 @@ Page weather03 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○●○○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_us_land_code/weather04.txt b/advanced/hmi/nspanel_us_land_code/weather04.txt index 6438372..9760d9e 100644 --- a/advanced/hmi/nspanel_us_land_code/weather04.txt +++ b/advanced/hmi/nspanel_us_land_code/weather04.txt @@ -16,6 +16,7 @@ Page weather04 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○○●○ Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/advanced/hmi/nspanel_us_land_code/weather05.txt b/advanced/hmi/nspanel_us_land_code/weather05.txt index da0e71f..04ea0f0 100644 --- a/advanced/hmi/nspanel_us_land_code/weather05.txt +++ b/advanced/hmi/nspanel_us_land_code/weather05.txt @@ -16,6 +16,7 @@ Page weather05 { page home } + vis unavailable,0 Postinitialize Event sendme @@ -160,6 +161,16 @@ Text page_index Text : ○○○○● Max. Text Size : 15 +Text unavailable + Attributes + ID : 20 + Scope : local + Dragging : 0 + Send Component ID : disabled + Associated Keyboard: none + Text : + Max. Text Size : 1 + Picture weather_icon Attributes ID : 3 diff --git a/dev/ui/eu/pics/1.png b/dev/ui/eu/pics/1.png new file mode 100644 index 0000000..6fcfab9 Binary files /dev/null and b/dev/ui/eu/pics/1.png differ diff --git a/dev/ui/eu/pics/10.png b/dev/ui/eu/pics/10.png new file mode 100644 index 0000000..10b33a7 Binary files /dev/null and b/dev/ui/eu/pics/10.png differ diff --git a/dev/ui/eu/pics/11.png b/dev/ui/eu/pics/11.png new file mode 100644 index 0000000..d1dd38d Binary files /dev/null and b/dev/ui/eu/pics/11.png differ diff --git a/dev/ui/eu/pics/12.png b/dev/ui/eu/pics/12.png new file mode 100644 index 0000000..8ce5dfd Binary files /dev/null and b/dev/ui/eu/pics/12.png differ diff --git a/dev/ui/eu/pics/13.png b/dev/ui/eu/pics/13.png new file mode 100644 index 0000000..9e7f579 Binary files /dev/null and b/dev/ui/eu/pics/13.png differ diff --git a/dev/ui/eu/pics/14.png b/dev/ui/eu/pics/14.png new file mode 100644 index 0000000..8c8e057 Binary files /dev/null and b/dev/ui/eu/pics/14.png differ diff --git a/dev/ui/eu/pics/15.png b/dev/ui/eu/pics/15.png new file mode 100644 index 0000000..e0a99a9 Binary files /dev/null and b/dev/ui/eu/pics/15.png differ diff --git a/dev/ui/eu/pics/16.png b/dev/ui/eu/pics/16.png new file mode 100644 index 0000000..cb908bc Binary files /dev/null and b/dev/ui/eu/pics/16.png differ diff --git a/dev/ui/eu/pics/17.png b/dev/ui/eu/pics/17.png new file mode 100644 index 0000000..1656cb5 Binary files /dev/null and b/dev/ui/eu/pics/17.png differ diff --git a/dev/ui/eu/pics/18.png b/dev/ui/eu/pics/18.png new file mode 100644 index 0000000..392651a Binary files /dev/null and b/dev/ui/eu/pics/18.png differ diff --git a/dev/ui/eu/pics/19.png b/dev/ui/eu/pics/19.png new file mode 100644 index 0000000..03fb75f Binary files /dev/null and b/dev/ui/eu/pics/19.png differ diff --git a/dev/ui/eu/pics/2.png b/dev/ui/eu/pics/2.png new file mode 100644 index 0000000..54d6caa Binary files /dev/null and b/dev/ui/eu/pics/2.png differ diff --git a/dev/ui/eu/pics/20.png b/dev/ui/eu/pics/20.png new file mode 100644 index 0000000..e9eb44c Binary files /dev/null and b/dev/ui/eu/pics/20.png differ diff --git a/dev/ui/eu/pics/21.png b/dev/ui/eu/pics/21.png new file mode 100644 index 0000000..704687e Binary files /dev/null and b/dev/ui/eu/pics/21.png differ diff --git a/dev/ui/eu/pics/22.png b/dev/ui/eu/pics/22.png new file mode 100644 index 0000000..7a11aec Binary files /dev/null and b/dev/ui/eu/pics/22.png differ diff --git a/dev/ui/eu/pics/23.png b/dev/ui/eu/pics/23.png new file mode 100644 index 0000000..73678ed Binary files /dev/null and b/dev/ui/eu/pics/23.png differ diff --git a/dev/ui/eu/pics/24.png b/dev/ui/eu/pics/24.png new file mode 100644 index 0000000..bd08d4c Binary files /dev/null and b/dev/ui/eu/pics/24.png differ diff --git a/dev/ui/eu/pics/25.png b/dev/ui/eu/pics/25.png new file mode 100644 index 0000000..0eafd04 Binary files /dev/null and b/dev/ui/eu/pics/25.png differ diff --git a/dev/ui/eu/pics/26.png b/dev/ui/eu/pics/26.png new file mode 100644 index 0000000..33e2d99 Binary files /dev/null and b/dev/ui/eu/pics/26.png differ diff --git a/dev/ui/eu/pics/27.png b/dev/ui/eu/pics/27.png new file mode 100644 index 0000000..7f63f94 Binary files /dev/null and b/dev/ui/eu/pics/27.png differ diff --git a/dev/ui/eu/pics/28.png b/dev/ui/eu/pics/28.png new file mode 100644 index 0000000..b327162 Binary files /dev/null and b/dev/ui/eu/pics/28.png differ diff --git a/dev/ui/eu/pics/29.png b/dev/ui/eu/pics/29.png new file mode 100644 index 0000000..5e3ec77 Binary files /dev/null and b/dev/ui/eu/pics/29.png differ diff --git a/dev/ui/eu/pics/3.png b/dev/ui/eu/pics/3.png new file mode 100644 index 0000000..20d32f4 Binary files /dev/null and b/dev/ui/eu/pics/3.png differ diff --git a/dev/ui/eu/pics/32.jpg b/dev/ui/eu/pics/32.jpg new file mode 100644 index 0000000..26377bf Binary files /dev/null and b/dev/ui/eu/pics/32.jpg differ diff --git a/dev/ui/eu/pics/33.png b/dev/ui/eu/pics/33.png new file mode 100644 index 0000000..cdc7600 Binary files /dev/null and b/dev/ui/eu/pics/33.png differ diff --git a/dev/ui/eu/pics/34.png b/dev/ui/eu/pics/34.png new file mode 100644 index 0000000..78f138a Binary files /dev/null and b/dev/ui/eu/pics/34.png differ diff --git a/dev/ui/eu/pics/37.png b/dev/ui/eu/pics/37.png new file mode 100644 index 0000000..ea7832f Binary files /dev/null and b/dev/ui/eu/pics/37.png differ diff --git a/dev/ui/eu/pics/38.png b/dev/ui/eu/pics/38.png new file mode 100644 index 0000000..fa95a55 Binary files /dev/null and b/dev/ui/eu/pics/38.png differ diff --git a/dev/ui/eu/pics/39.png b/dev/ui/eu/pics/39.png new file mode 100644 index 0000000..b327162 Binary files /dev/null and b/dev/ui/eu/pics/39.png differ diff --git a/dev/ui/eu/pics/4.png b/dev/ui/eu/pics/4.png new file mode 100644 index 0000000..5ec3dba Binary files /dev/null and b/dev/ui/eu/pics/4.png differ diff --git a/dev/ui/eu/pics/40.png b/dev/ui/eu/pics/40.png new file mode 100644 index 0000000..5e3ec77 Binary files /dev/null and b/dev/ui/eu/pics/40.png differ diff --git a/dev/ui/eu/pics/41.png b/dev/ui/eu/pics/41.png new file mode 100644 index 0000000..3f56d7a Binary files /dev/null and b/dev/ui/eu/pics/41.png differ diff --git a/dev/ui/eu/pics/42.png b/dev/ui/eu/pics/42.png new file mode 100644 index 0000000..5f813b2 Binary files /dev/null and b/dev/ui/eu/pics/42.png differ diff --git a/dev/ui/eu/pics/43.png b/dev/ui/eu/pics/43.png new file mode 100644 index 0000000..3ab4886 Binary files /dev/null and b/dev/ui/eu/pics/43.png differ diff --git a/dev/ui/eu/pics/44.png b/dev/ui/eu/pics/44.png new file mode 100644 index 0000000..e6d24ae Binary files /dev/null and b/dev/ui/eu/pics/44.png differ diff --git a/dev/ui/eu/pics/45.png b/dev/ui/eu/pics/45.png new file mode 100644 index 0000000..fee4c31 Binary files /dev/null and b/dev/ui/eu/pics/45.png differ diff --git a/dev/ui/eu/pics/5.png b/dev/ui/eu/pics/5.png new file mode 100644 index 0000000..d7ece59 Binary files /dev/null and b/dev/ui/eu/pics/5.png differ diff --git a/dev/ui/eu/pics/6.png b/dev/ui/eu/pics/6.png new file mode 100644 index 0000000..e0bf94f Binary files /dev/null and b/dev/ui/eu/pics/6.png differ diff --git a/dev/ui/eu/pics/7.png b/dev/ui/eu/pics/7.png new file mode 100644 index 0000000..94221e5 Binary files /dev/null and b/dev/ui/eu/pics/7.png differ diff --git a/dev/ui/eu/pics/8.png b/dev/ui/eu/pics/8.png new file mode 100644 index 0000000..7d5246a Binary files /dev/null and b/dev/ui/eu/pics/8.png differ diff --git a/dev/ui/eu/pics/9.png b/dev/ui/eu/pics/9.png new file mode 100644 index 0000000..036761f Binary files /dev/null and b/dev/ui/eu/pics/9.png differ diff --git a/dev/ui/eu/pics/NSPanel - EU.pptx b/dev/ui/eu/pics/NSPanel - EU.pptx index 8663357..6a0bdf9 100644 Binary files a/dev/ui/eu/pics/NSPanel - EU.pptx and b/dev/ui/eu/pics/NSPanel - EU.pptx differ diff --git a/dev/ui/fonts/2248-International-charset.txt b/dev/ui/fonts/2248-International-charset.txt deleted file mode 100644 index 4d652be..0000000 --- a/dev/ui/fonts/2248-International-charset.txt +++ /dev/null @@ -1 +0,0 @@ -!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏƐƑƒƓƔƕƖƗƘƙƚƛƜƝƞƟƠơƢƣƤƥƦƧƨƩƪƫƬƭƮƯưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿǀǁǂǃDŽDždžLJLjljNJNjnjǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏ̴̵̶̷̸̡̢̧̨̛̖̗̘̙̜̝̞̟̠̣̤̥̦̩̪̫̬̭̮̯̰̱̲̳̹̺̻̼͇͈͉͍͎̀́̂̃̄̅̆̇̈̉̊̋̌̍̎̏̐̑̒̓̔̽̾̿̀́͂̓̈́͆͊͋͌̕̚ͅ͏͓͔͕͖͙͚͐͑͒͗͛ͣͤͥͦͧͨͩͪͫͬͭͮͯ͘͜͟͢͝͞͠͡ͰͱͲͳʹ͵Ͷͷ͸͹ͺͻͼͽ;Ϳ΀΁΂΃΄΅Ά·ΈΉΊ΋Ό΍ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώϏϐϑϒϓϔϕϖϗϘϙϚϛϜϝϞϟϠϡϢϣϤϥϦϧϨϩϪϫϬϭϮϯϰϱϲϳϴϵ϶ϷϸϹϺϻϼϽϾϿЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџѠѡѢѣѤѥѦѧѨѩѪѫѬѭѮѯѰѱѲѳѴѵѶѷѸѹѺѻѼѽѾѿҀҁ҂҃҄҅҆҇҈҉ҊҋҌҍҎҏҐґҒғҔҕҖҗҘҙҚқҜҝҞҟҠҡҢңҤҥҦҧҨҩҪҫҬҭҮүҰұҲҳҴҵҶҷҸҹҺһҼҽҾҿӀӁӂӃӄӅӆӇӈӉӊӋӌӍӎӏӐӑӒӓӔӕӖӗӘәӚӛӜӝӞӟӠӡӢӣӤӥӦӧӨөӪӫӬӭӮӯӰӱӲӳӴӵӶӷӸӹӺӻӼӽӾӿ԰ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖ՗՘ՙ՚՛՜՝՞՟ՠաբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆևֈ։֊֋֌֍֎֏֐ְֱֲֳִֵֶַָֹֺֻּֽ֑֖֛֢֣֤֥֦֧֪֚֭֮֒֓֔֕֗֘֙֜֝֞֟֠֡֨֩֫֬֯־ֿ׀ׁׂ׃ׅׄ׆ׇ׈׉׊׋׌׍׎׏אבגדהוזחטיךכלםמןנסעףפץצקרשת׫׬׭׮ׯװױײ׳״׵׶׷׸׹׺׻׼׽׾׿؀؁؂؃؄؅؆؇؈؉؊؋،؍؎؏ؘؙؚؐؑؒؓؔؕؖؗ؛؜؝؞؟ؠءآأؤإئابةتثجحخدذرزسشصضطظعغػؼؽؾؿـفقكلمنهوىيًٌٍَُِّْٕٖٜٟٓٔٗ٘ٙٚٛٝٞ٠١٢٣٤٥٦٧٨٩٪٫٬٭ٮٯٰٱٲٳٴٵٶٷٸٹٺٻټٽپٿڀځڂڃڄڅچڇڈډڊڋڌڍڎڏڐڑڒړڔڕږڗژڙښڛڜڝڞڟڠڡڢڣڤڥڦڧڨکڪګڬڭڮگڰڱڲڳڴڵڶڷڸڹںڻڼڽھڿۀہۂۃۄۅۆۇۈۉۊۋیۍێۏېۑےۓ۔ەۖۗۘۙۚۛۜ۝۞ۣ۟۠ۡۢۤۥۦۧۨ۩۪ۭ۫۬ۮۯ۰۱۲۳۴۵۶۷۸۹ۺۻۼ۽۾ۿ฀กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู฻฼฽฾฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛๜๝๞๟๠๡๢๣๤๥๦๧๨๩๪๫๬๭๮๯๰๱๲๳๴๵๶๷๸๹๺๻๼๽๾๿ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅ჆Ⴧ჈჉჊჋჌Ⴭ჎჏აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶჷჸჹჺ჻ჼჽჾჿḀḁḂḃḄḅḆḇḈḉḊḋḌḍḎḏḐḑḒḓḔḕḖḗḘḙḚḛḜḝḞḟḠḡḢḣḤḥḦḧḨḩḪḫḬḭḮḯḰḱḲḳḴḵḶḷḸḹḺḻḼḽḾḿṀṁṂṃṄṅṆṇṈṉṊṋṌṍṎṏṐṑṒṓṔṕṖṗṘṙṚṛṜṝṞṟṠṡṢṣṤṥṦṧṨṩṪṫṬṭṮṯṰṱṲṳṴṵṶṷṸṹṺṻṼṽṾṿẀẁẂẃẄẅẆẇẈẉẊẋẌẍẎẏẐẑẒẓẔẕẖẗẘẙẚẛẜẝẞẟẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈỉỊịỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹỺỻỼỽỾỿ₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲₳₴₵₶₷₸₹₺₻₼₽₾₿⃀⃁⃂⃃⃄⃅⃆⃇⃈⃉⃊⃋⃌⃍⃎⃏一七三上下东中串主义九书乾二五亮人件位低假偵像全八六关冷出分判制前助北十南卧危厅厨发台右后启周啟器四在地執壁外多夜大头安定客室家密小少层層左已帘常干年度廚廳开异式当後态態戒房扇手扫按掃接控摄播攝放断斷日时星時暖書月有期未机条東柜模機橱櫃櫥正气氣水泵洗活浴润清温測湿溫潤激濕灯热無熱燈燥状狀用电略異發百目码確碼离秒空窗簾組網線组网置群臥自色落行西解触觸調警讀读调輔轉辅过运连送速連運量鎖鏡锁镜門閉開閒間閱關门闭闲间阅阳除陽險離電頭風风高 \ No newline at end of file diff --git a/dev/ui/fonts/2271-International-charset.txt b/dev/ui/fonts/2271-International-charset.txt new file mode 100644 index 0000000..c815421 --- /dev/null +++ b/dev/ui/fonts/2271-International-charset.txt @@ -0,0 +1 @@ +!"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹º»¼½¾¿ÀÁÂÃÄÅÆÇÈÉÊËÌÍÎÏÐÑÒÓÔÕÖרÙÚÛÜÝÞßàáâãäåæçèéêëìíîïðñòóôõö÷øùúûüýþÿĀāĂ㥹ĆćĈĉĊċČčĎďĐđĒēĔĕĖėĘęĚěĜĝĞğĠġĢģĤĥĦħĨĩĪīĬĭĮįİıIJijĴĵĶķĸĹĺĻļĽľĿŀŁłŃńŅņŇňʼnŊŋŌōŎŏŐőŒœŔŕŖŗŘřŚśŜŝŞşŠšŢţŤťŦŧŨũŪūŬŭŮůŰűŲųŴŵŶŷŸŹźŻżŽžſƀƁƂƃƄƅƆƇƈƉƊƋƌƍƎƏƐƑƒƓƔƕƖƗƘƙƚƛƜƝƞƟƠơƢƣƤƥƦƧƨƩƪƫƬƭƮƯưƱƲƳƴƵƶƷƸƹƺƻƼƽƾƿǀǁǂǃDŽDždžLJLjljNJNjnjǍǎǏǐǑǒǓǔǕǖǗǘǙǚǛǜǝǞǟǠǡǢǣǤǥǦǧǨǩǪǫǬǭǮǯǰDZDzdzǴǵǶǷǸǹǺǻǼǽǾǿȀȁȂȃȄȅȆȇȈȉȊȋȌȍȎȏȐȑȒȓȔȕȖȗȘșȚțȜȝȞȟȠȡȢȣȤȥȦȧȨȩȪȫȬȭȮȯȰȱȲȳȴȵȶȷȸȹȺȻȼȽȾȿɀɁɂɃɄɅɆɇɈɉɊɋɌɍɎɏ̴̵̶̷̸̡̢̧̨̛̖̗̘̙̜̝̞̟̠̣̤̥̦̩̪̫̬̭̮̯̰̱̲̳̹̺̻̼͇͈͉͍͎̀́̂̃̄̅̆̇̈̉̊̋̌̍̎̏̐̑̒̓̔̽̾̿͂͆͊͋͌̕̚ͅ͏͓͔͕͖͙͚͐͑͒͗͛ͣͤͥͦͧͨͩͪͫͬͭͮͯ͘͜͟͢͝͞͠͡ͰͱͲͳʹ͵Ͷͷ͸͹ͺͻͼͽ;Ϳ΀΁΂΃΄΅Ά·ΈΉΊ΋Ό΍ΎΏΐΑΒΓΔΕΖΗΘΙΚΛΜΝΞΟΠΡ΢ΣΤΥΦΧΨΩΪΫάέήίΰαβγδεζηθικλμνξοπρςστυφχψωϊϋόύώϏϐϑϒϓϔϕϖϗϘϙϚϛϜϝϞϟϠϡϢϣϤϥϦϧϨϩϪϫϬϭϮϯϰϱϲϳϴϵ϶ϷϸϹϺϻϼϽϾϿЀЁЂЃЄЅІЇЈЉЊЋЌЍЎЏАБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯабвгдежзийклмнопрстуфхцчшщъыьэюяѐёђѓєѕіїјљњћќѝўџѠѡѢѣѤѥѦѧѨѩѪѫѬѭѮѯѰѱѲѳѴѵѶѷѸѹѺѻѼѽѾѿҀҁ҂҃҄҅҆҇҈҉ҊҋҌҍҎҏҐґҒғҔҕҖҗҘҙҚқҜҝҞҟҠҡҢңҤҥҦҧҨҩҪҫҬҭҮүҰұҲҳҴҵҶҷҸҹҺһҼҽҾҿӀӁӂӃӄӅӆӇӈӉӊӋӌӍӎӏӐӑӒӓӔӕӖӗӘәӚӛӜӝӞӟӠӡӢӣӤӥӦӧӨөӪӫӬӭӮӯӰӱӲӳӴӵӶӷӸӹӺӻӼӽӾӿ԰ԱԲԳԴԵԶԷԸԹԺԻԼԽԾԿՀՁՂՃՄՅՆՇՈՉՊՋՌՍՎՏՐՑՒՓՔՕՖ՗՘ՙ՚՛՜՝՞՟ՠաբգդեզէըթժիլխծկհձղճմյնշոչպջռսվտրցւփքօֆևֈ։֊֋֌֍֎֏֐ְֱֲֳִֵֶַָֹֺֻּֽ֑֖֛֢֣֤֥֦֧֪֚֭֮֒֓֔֕֗֘֙֜֝֞֟֠֡֨֩֫֬֯־ֿ׀ׁׂ׃ׅׄ׆ׇ׈׉׊׋׌׍׎׏אבגדהוזחטיךכלםמןנסעףפץצקרשת׫׬׭׮ׯװױײ׳״׵׶׷׸׹׺׻׼׽׾׿؀؁؂؃؄؅؆؇؈؉؊؋،؍؎؏ؘؙؚؐؑؒؓؔؕؖؗ؛؜؝؞؟ؠءآأؤإئابةتثجحخدذرزسشصضطظعغػؼؽؾؿـفقكلمنهوىيًٌٍَُِّْٕٖٜٟٓٔٗ٘ٙٚٛٝٞ٠١٢٣٤٥٦٧٨٩٪٫٬٭ٮٯٰٱٲٳٴٵٶٷٸٹٺٻټٽپٿڀځڂڃڄڅچڇڈډڊڋڌڍڎڏڐڑڒړڔڕږڗژڙښڛڜڝڞڟڠڡڢڣڤڥڦڧڨکڪګڬڭڮگڰڱڲڳڴڵڶڷڸڹںڻڼڽھڿۀہۂۃۄۅۆۇۈۉۊۋیۍێۏېۑےۓ۔ەۖۗۘۙۚۛۜ۝۞ۣ۟۠ۡۢۤۥۦۧۨ۩۪ۭ۫۬ۮۯ۰۱۲۳۴۵۶۷۸۹ۺۻۼ۽۾ۿ฀กขฃคฅฆงจฉชซฌญฎฏฐฑฒณดตถทธนบปผฝพฟภมยรฤลฦวศษสหฬอฮฯะัาำิีึืฺุู฻฼฽฾฿เแโใไๅๆ็่้๊๋์ํ๎๏๐๑๒๓๔๕๖๗๘๙๚๛๜๝๞๟๠๡๢๣๤๥๦๧๨๩๪๫๬๭๮๯๰๱๲๳๴๵๶๷๸๹๺๻๼๽๾๿ႠႡႢႣႤႥႦႧႨႩႪႫႬႭႮႯႰႱႲႳႴႵႶႷႸႹႺႻႼႽႾႿჀჁჂჃჄჅ჆Ⴧ჈჉჊჋჌Ⴭ჎჏აბგდევზთიკლმნოპჟრსტუფქღყშჩცძწჭხჯჰჱჲჳჴჵჶჷჸჹჺ჻ჼჽჾჿḀḁḂḃḄḅḆḇḈḉḊḋḌḍḎḏḐḑḒḓḔḕḖḗḘḙḚḛḜḝḞḟḠḡḢḣḤḥḦḧḨḩḪḫḬḭḮḯḰḱḲḳḴḵḶḷḸḹḺḻḼḽḾḿṀṁṂṃṄṅṆṇṈṉṊṋṌṍṎṏṐṑṒṓṔṕṖṗṘṙṚṛṜṝṞṟṠṡṢṣṤṥṦṧṨṩṪṫṬṭṮṯṰṱṲṳṴṵṶṷṸṹṺṻṼṽṾṿẀẁẂẃẄẅẆẇẈẉẊẋẌẍẎẏẐẑẒẓẔẕẖẗẘẙẚẛẜẝẞẟẠạẢảẤấẦầẨẩẪẫẬậẮắẰằẲẳẴẵẶặẸẹẺẻẼẽẾếỀềỂểỄễỆệỈỉỊịỌọỎỏỐốỒồỔổỖỗỘộỚớỜờỞởỠỡỢợỤụỦủỨứỪừỬửỮữỰựỲỳỴỵỶỷỸỹỺỻỼỽỾỿ₠₡₢₣₤₥₦₧₨₩₪₫€₭₮₯₰₱₲₳₴₵₶₷₸₹₺₻₼₽₾₿⃀⃁⃂⃃⃄⃅⃆⃇⃈⃉⃊⃋⃌⃍⃎⃏一七三上下东中串主义九书乾二五亮人件位低假偵像全八六关冷出分判制前助北十午南卧危厅厨发台右后启周啟器四在地執壁外多夜大头安定客室家密小少层層左已帘常干年度廚廳开异式当後态態戒房扇手扫按掃接控摄播攝放断斷日时星時暖書月有期未机条東柜模機橱櫃櫥正气氣水泵洗活浴润清温測湿溫潤激濕灯热無熱燈燥状狀用电略異發百目码確碼离秒空窗簾組網線组网置群臥自色落行西解触觸調警讀读调輔轉辅过运连送速連運量鎖鏡锁镜門閉開閒間閱關门闭闲间阅阳除陽險離電頭風风高法使未知命名利不可明なし사용 불가알수없음이름 diff --git a/dev/ui/fonts/CJK/ubuntu48_language.zi b/dev/ui/fonts/CJK/ubuntu48_language.zi index fa91aef..7258be0 100644 Binary files a/dev/ui/fonts/CJK/ubuntu48_language.zi and b/dev/ui/fonts/CJK/ubuntu48_language.zi differ diff --git a/dev/ui/us/pics/NSPanel - US.pptx b/dev/ui/us/pics/NSPanel - US.pptx index a4d1fee..baa032a 100644 Binary files a/dev/ui/us/pics/NSPanel - US.pptx and b/dev/ui/us/pics/NSPanel - US.pptx differ diff --git a/docs/README.md b/docs/README.md index 8f66de4..88ea727 100644 --- a/docs/README.md +++ b/docs/README.md @@ -3,6 +3,7 @@ - [First Steps | Installation and Setup](install.md) - [Blueprint | Setup and explanation of the Blueprint](blueprint.md) - [HowTo | All important things you should know](howto.md) +- [Version compatibility matrix](version_compatibility.md) ## Common issues - [TFT Upload](tft_upload.md) @@ -13,6 +14,7 @@ - [Customization](customization.md) - [Add-on climate](addon_climate.md) - [Alarm Control Panel](alarm.md) +- [Using Different Versions of This Project](different_version.md) ## Setup and overview videos: - **_[Overview and features](https://www.youtube.com/watch?v=b7vW4YtUaTs) - Mark Watt Tech_** diff --git a/docs/addon_climate.md b/docs/addon_climate.md index da089ed..273c7c0 100644 --- a/docs/addon_climate.md +++ b/docs/addon_climate.md @@ -23,7 +23,8 @@ and after the `remote_package` (base code), as shown bellow (for `heat` in this ```yaml substitutions: # Settings - Editable values - device_name: "YOUR_NSPANEL_NAME" + device_name: "YOUR_NSPANEL_NAME" + friendly_name: "Your panel's friendly name" wifi_ssid: !secret wifi_ssid wifi_password: !secret wifi_password @@ -90,7 +91,8 @@ and [ESPHome Climate Thermostat - Additional actions behavior](https://esphome.i ```yaml substitutions: # Settings - Editable values - device_name: "YOUR_NSPANEL_NAME" + device_name: "YOUR_NSPANEL_NAME" + friendly_name: "Your panel's friendly name" wifi_ssid: !secret wifi_ssid wifi_password: !secret wifi_password @@ -132,7 +134,8 @@ esp32: ```yaml substitutions: # Settings - Editable values - device_name: "YOUR_NSPANEL_NAME" + device_name: "YOUR_NSPANEL_NAME" + friendly_name: "Your panel's friendly name" wifi_ssid: !secret wifi_ssid wifi_password: !secret wifi_password @@ -174,7 +177,8 @@ esp32: ```yaml substitutions: # Settings - Editable values - device_name: "YOUR_NSPANEL_NAME" + device_name: "YOUR_NSPANEL_NAME" + friendly_name: "Your panel's friendly name" wifi_ssid: !secret wifi_ssid wifi_password: !secret wifi_password diff --git a/docs/alarm.md b/docs/alarm.md index 1dc0151..b4ff61c 100644 --- a/docs/alarm.md +++ b/docs/alarm.md @@ -1,76 +1,75 @@ # Alarm Control Panel -You can control an Alarm Control Panel from your NSPanel, -which will allow you to set the alarm mode between the standard modes supported by -Home Assistant (Home, Away, Night, Vacation or Custom bypass) or disarm the alarm. +You can control an Alarm Control Panel from your NSPanel, which allows you to set the alarm mode to standard +modes supported by Home Assistant (Home, Away, Night, Vacation, or Custom bypass) or disarm the alarm. -Currently, only alarms without a code or alarms with a numeric code will be supported. -If your alarm requires a text code, you will still be able to display it on your NSPanel, -however, when you click in any button it will send services calls to Home Assistant -without the code and it will fail for the calls where a code is required. +Currently, the NSPanel supports alarms without a code or with a numeric code. For alarms using a text code, +the NSPanel will display it, but interactions (like button clicks) will send service calls to Home Assistant +without the code, leading to failed operations that require a code. > [!IMPORTANT] > **Security advisory** -> By default, the communication between your NSPanel (ESPHome) and Home Assistant (HA) is not encrypted, -> which means a person with access to your network could potentially monitor the communication between your panel and HA and replicate the service calls. -> Although this is not a big issue for most of the service calls (turn-on a light, -close a curtain, etc.), it can be a problem when controlling your alarm system. +> The default communication between your NSPanel (ESPHome) and Home Assistant (HA) is not encrypted. This +> could allow someone with network access to monitor and replicate the service calls. This risk is +> particularly relevant when controlling your alarm system. > -> Based on that, we hardly reccoment the use of API encryption for all users controlling an Alarm system via a NSPanel. -> You can easily enable this by following the ["API encryption" example available here](customization.md#api-encryption). - +> To enhance security, we strongly recommend enabling API encryption for NSPanel users managing an Alarm +> system. Follow the instructions in the ["API encryption" example here](customization.md#api-encryption) +> to implement this security measure. ## Configuration ### Allow the device to make Home Assistant service calls -First, you have to configure your Home Assistant to allow your panel to make service calls. -All other services are called from the Blueprint, however this requires the ESPHome to send -an event containing in plain text all the information needed to the service call, -which could be a security issue, so all the alarm calls will be driven by the panel to ensure a safer environment. +First, you need to configure your Home Assistant to permit your NSPanel to make service calls. While +most services are handled via the Blueprint, ESPHome needs to send events with all necessary data in +plain text for these service calls. To mitigate any security risks, alarm-related calls are managed +directly by the panel. -To enable this option, go to your ESPHome integrations panel (Settings > Devices and Services > ESPHome) -and click "Configure" next to the entry related to your panel: +To enable this: +1. Go to your ESPHome integrations panel (Settings > Devices and Services > ESPHome). +2. Click "Configure" next to your panel's entry. -![image](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/37bfc622-c0cd-4941-a397-3eeb2ddbe6a2) + ![Configure option in ESPHome integrations panel](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/37bfc622-c0cd-4941-a397-3eeb2ddbe6a2) -Then check the option "Allow the device to make Home Assistant service calls": +3. Select the "Allow the device to make Home Assistant service calls" option. -![image](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/9b20a1b6-94ad-4fff-aef2-eb3599db9bf1) + ![Allow service calls option in ESPHome configuration](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/9b20a1b6-94ad-4fff-aef2-eb3599db9bf1) ### Blueprint settings -Open the automation based on the NSPanel Blueprint and look for a section related to "Alarm Control Panel". +To assign Alarm Control Panel entities to buttons: +1. Open the NSPanel Blueprint automation. +2. Find the button configuration section. +3. Choose a button and select your alarm control panel entity. +4. Click "Save" to complete setup. -Select your alarm control panel entity, click "Save", and your are done. :sunglasses: - -![image](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/859d3f4b-9a05-4694-9e2c-c32ab3a5e22f) + ![Assigning Alarm Control Panel entities in Blueprint](pics/ha_blueprint_home_custom_buttons_alarm.png) +Follow these steps to ensure your NSPanel is correctly configured for controlling your alarm system. ## Controlling your alarm from your panel -When an alarm control panel is set in your Blueprint automation, -you will see the alarm icon on your panel's Home page. -This icon will change following the alarm state as described in the table below. +When an alarm control panel is configured in your Blueprint automation, the alarm icon appears on your +NSPanel's Home page or the respective button page. This icon changes based on the alarm state, detailed +in the following table. -A click on that icon will show the Alarm Control Panel page: - - -![image](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/bc312981-3d5a-42c7-b0b4-203457ff549f) - -You can change your alarm settings with a single click on the button related to the new state -you want to set your alarm to, or close the page to go back to Home page. +Clicking this button opens the Alarm Control Panel page. Here, you can adjust alarm settings with a +single click or return to the Home page. +![View of the Alarm Control Panel page on NSPanel](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/bc312981-3d5a-42c7-b0b4-203457ff549f) ### Description of states shown with the alarm icon -State | Color | Icon | Icon name | Description + +State | Color | Icon | Icon Name | Description -- | -- | -- | -- | -- -disarmed | White |![shield-off-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/5b1c8219-3958-4096-9100-0b4ef47e7dac)|mdi:shield-off-outline | The alarm is disarmed (off). -armed_home | Green |![shield-home-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/1ed9347b-139a-4729-a795-b08934b56581)| mdi:shield-home-outline | The alarm is armed in home mode. -armed_away | Green |![shield-lock-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/998db33c-3ec5-47dd-9686-c28eee81e9eb)| mdi:shield-lock-outline | The alarm is armed in away mode. -armed_night | Green |![shield-moon-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/84528bca-577d-4a43-8366-e6f9e41bc7b4)| mdi:shield-moon-outline | The alarm is armed in night mode. -armed_vacation | Green |![shield-airplane-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/067218de-ec8c-4fce-a427-7848a7ae9f27)| mdi:shield-airplane-outline | The alarm is armed in vacation mode. -armed_custom_bypass | Green |![shield-half-full](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/af7ed346-28eb-4796-b62b-2a51e9cb6272)| mdi:shield-half-full | The alarm is armed in bypass mode. -pending | Amber |![shield-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/31bcd613-04d6-455a-a443-3299211d487e)| mdi:shield-outline | The alarm is pending (towards triggered). -arming | Amber |![shield-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/31bcd613-04d6-455a-a443-3299211d487e)| mdi:shield-outline | The alarm is arming. -disarming | Amber |![shield-off-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/37c02584-dd65-4575-8d95-c7346de599e4)| mdi:shield-off-outline | The alarm is disarming. -triggered | Red |![shield-alert-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/ee1ec55b-e671-4aa0-9baa-77eb2a8c8c7f)| mdi:shield-alert-outline | The alarm is triggered. -unknown / unavailable | White |![shield-alert-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/a382e5ab-2e16-453c-bc9b-b3dcd3825de7)| mdi:shield-alert-outline | The alarm state is unknown or unavailable. +disarmed | White | ![shield-off-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/5b1c8219-3958-4096-9100-0b4ef47e7dac) | mdi:shield-off-outline | The alarm is disarmed (off). +armed_home | Green | ![shield-home-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/1ed9347b-139a-4729-a795-b08934b56581) | mdi:shield-home-outline | The alarm is armed in home mode. +armed_away | Green | ![shield-lock-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/998db33c-3ec5-47dd-9686-c28eee81e9eb) | mdi:shield-lock-outline | The alarm is armed in away mode. +armed_night | Green | ![shield-moon-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/84528bca-577d-4a43-8366-e6f9e41bc7b4) | mdi:shield-moon-outline | The alarm is armed in night mode. +armed_vacation | Green | ![shield-airplane-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/067218de-ec8c-4fce-a427-7848a7ae9f27) | mdi:shield-airplane-outline | The alarm is armed in vacation mode. +armed_custom_bypass | Green | ![shield-half-full](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/af7ed346-28eb-4796-b62b-2a51e9cb6272) | mdi:shield-half-full | The alarm is armed in bypass mode. +pending | Amber | ![shield-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/31bcd613-04d6-455a-a443-3299211d487e) | mdi:shield-outline | The alarm is pending (towards triggered). +arming | Amber | ![shield-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/31bcd613-04d6-455a-a443-3299211d487e) | mdi:shield-outline | The alarm is arming. +disarming | Amber | ![shield-off-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/37c02584-dd65-4575-8d95-c7346de599e4) | mdi:shield-off-outline | The alarm is disarming. +triggered | Red | ![shield-alert-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/ee1ec55b-e671-4aa0-9baa-77eb2a8c8c7f) | mdi:shield-alert-outline | The alarm is triggered. +unknown/unavailable | White | ![shield-alert-outline](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/a382e5ab-2e16-453c-bc9b-b3dcd3825de7) | mdi:shield-alert-outline | The alarm state is unknown or unavailable. + diff --git a/docs/customization.md b/docs/customization.md index 8047bbf..1bc4e89 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -21,12 +21,15 @@ Table of contents: - [Scheduled actions](#scheduled-actions) - [Scheduled relay](#scheduled-relay) - [Scheduled climate](#scheduled-climate) - - [Framework `esp-idf`](#framework-esp-idf) + - [Frameworks](#frameworks) + - [Framework `arduino`](#framework-arduino) + - [Framework `esp-idf`](#framework-esp-idf) - [Bluetooth proxy](#bluetooth-proxy) - [Logger via UART](#logger-via-uart) - [Climate custom presets](#climate-custom-presets) - [Push button / Momentary switch](#push-button--momentary-switch) - [Expose relay fallback switch](#expose-relay-fallback-switch) + - [Relay Interlocking](#relay-interlocking)     @@ -55,7 +58,8 @@ You should add your customizations at the end of your ESPHome yaml, as in the ex ```yaml substitutions: # Settings - Editable values - device_name: "YOUR_NSPANEL_NAME" + device_name: "YOUR_NSPANEL_NAME" + friendly_name: "Your panel's friendly name" wifi_ssid: !secret wifi_ssid wifi_password: !secret wifi_password @@ -225,7 +229,7 @@ Creates a binary sensor to indicate either when the display is showing some page ```yaml # Is display awake? binary_sensor: - - name: ${device_name} Display state + - name: Display state id: display_state platform: template lambda: |- @@ -237,7 +241,7 @@ You can easily invert the meaning to have a sensor for display sleeping: ```yaml # Is display sleeping? binary_sensor: - - name: ${device_name} Display sleeping + - name: Display sleeping id: display_sleeping platform: template lambda: |- @@ -306,7 +310,7 @@ There are several ways to wake-up or put your panel to sleep, but in this exampl ```yaml button: # Adds a button to put the panel to sleep - - name: ${device_name} Sleep + - name: Sleep id: force_sleep platform: template icon: mdi:sleep @@ -317,7 +321,7 @@ button: if (id(current_page).state != "screensaver") id(disp1).goto_page("screensaver"); # Adds a button to wake-up the panel (similar to the existing service) - - name: ${device_name} Wake-up + - name: Wake-up id: force_wake_up platform: template icon: mdi:alarm @@ -338,7 +342,7 @@ and even use this in your automation to control when your panel is on with the s ```yaml light: # Add the display as a light in Home Assistant - - name: ${device_name} Display + - name: Display id: display_light icon: mdi:tablet-dashboard platform: monochromatic @@ -474,7 +478,7 @@ time: target_temperature: 18°C ``` -### Framework `esp-idf` +### Frameworks > [!IMPORTANT] > When switching from `arduino` to `esp-idf`, make sure to update the device with a serial cable as the partition table is different between the two frameworks as [OTA Update Component](https://esphome.io/components/ota) updates will not change the partition table. @@ -489,6 +493,14 @@ In any case, you can overlap the settings with this customization. > [!NOTE] > For more info about frameworks, please visit [ESPHome docs](https://esphome.io/components/esp32). +#### Framework `arduino` +```yaml +# Change framework to `arduino` +esp32: + framework: + type: arduino +``` +#### Framework `esp-idf` ```yaml # Change framework to `esp-idf` esp32: @@ -592,3 +604,22 @@ switch: - id: !extend relay2_local internal: false ``` + +### Relay Interlocking +This is using ESPHome capability to prevents the two relays to be active at the same time, which could be useful in some cases, +like to control a cover like discussed in [#965](https://github.com/Blackymas/NSPanel_HA_Blueprint/issues/965). + +> [!ATTENTION] +> There are some considerations about using software interlocking on the [ESPHome GPIO Switch documentation](https://esphome.io/components/switch/gpio.html#interlocking). +Please read that carefully to understand what this is doing. + +```yaml +switch: + # Prevents the two relays to be on simultaneously + - id: !extend relay_1 + interlock: [relay_1, relay_2] + interlock_wait_time: 500ms # Please adjust this accordingly + - id: !extend relay_2 + interlock: [relay_1, relay_2] + interlock_wait_time: 500ms # Please adjust this accordingly +``` \ No newline at end of file diff --git a/docs/different_version.md b/docs/different_version.md new file mode 100644 index 0000000..009ee3c --- /dev/null +++ b/docs/different_version.md @@ -0,0 +1,103 @@ +# Guide to Using Different Versions of This Project + +## Introduction +This guide provides instructions on how to switch between different versions for each component of this project: +Blueprint, ESPHome, and Nextion TFT, allowing users to access development (`dev`), beta, or previous versions. + + +> [!WARNING] +> Use non-main versions at your own risk. Only the `main`/latest release is officially supported. + +> [!IMPORTANT] +> Ensure all three components (Blueprint, ESPHome, TFT) are synchronized at the same version for system stability. + + +## Suggested Update Order +1. **ESPHome**: Start with ESPHome for its straightforward update process. +2. **TFT**: Then proceed with Nextion TFT. +3. **Blueprint**: Finally, update Blueprint, as it requires more manual effort and careful handling. + +## Finding Available Versions +For available versions and branches, visit: [NSPanel_HA_Blueprint Tags](https://github.com/Blackymas/NSPanel_HA_Blueprint/tags). +Take note of the branch (`dev`, `beta`, or `main`) or version name exactly as it is published, as this is case-sensitive. + +> [!NOTE] +> **Understanding Tags in GitHub** +> Tags on GitHub mark specific versions of a project, akin to bookmarks. +They're created for each new release, allowing easy access to different project stages. + +### Special Versions +- **dev**: The development version, containing the latest code but potentially unstable. +- **beta**: The pre-release version, more stable than `dev` but still undergoing final testing. +- **main**: The default latest version, where you will find the most recent release code. + +> [!NOTE] +> When using `dev` or `beta`, report findings in the [issues](https://github.com/Blackymas/NSPanel_HA_Blueprint/issues) section, clearly stating the version. +> +> **Please do not report issues related to old released versions.** + +## Instructions + +### For ESPHome Component +1. Open your device's YAML config and find the key `ref:`, which is under `remote_package:` in the `packages:` area: + + ![Image](pics/esphome_dashboard_yaml_ref_main.png) + +2. Change the value of `ref:` to the version you want to install, like `ref: dev` or `ref: v4.1.4`: + + ![Image](pics/esphome_dashboard_yaml_ref_v414.png) + +3. Save your settings and then install it. + + +> [!IMPORTANT] +> Older versions may require `arduino` framework. +> Please refer to this guide for setting the framework properly: [Change framework](customization.md#frameworks) + +> [!WARNING] +> Older versions of the components may not be compatible with the latest ESPHome compiler or Home Assistant. +> +> Ensure you are using a compatible version of Home Assistant and the compiler when working with older project versions to avoid potential issues. +> You can use our [Version compatibility matrix](version_compatibility.md) to identify the minimum requirement per version as a reference for possible version incompatibility, +> although we don't have a register of the "Maximum version" supported. + + +### For Nextion TFT Component +The instructions to upload TFT will vary depending on the version you are installing and the framework you are using. + +#### v4.2 or later (ESP-IDF) or v4.2.5 or later (Arduino) +1. Go to your device's page under **Settings** > **Devices & Services** > **ESPHome**. +2. On the **Configuration** group, select your option for **Update TFT display - Branch** (either the version you want or `dev`/`beta`). +If that option is not visible, please expand the **+n entities not shown** and enable it. + + ![Image](pics/ha_device_configuration_tft_update_branch_selector.png) +3. Press **Update TFT display** and wait for the upload to complete. + +#### v4.1 or earlier, or v4.2.4 or earlier for Arduino framework +1. On the GitHub repository, click on your chosen version name on the [NSPanel_HA_Blueprint Tags](https://github.com/Blackymas/NSPanel_HA_Blueprint/tags) list, then select the tab **Code**. +2. Double-check that the correct version is shown below the repository name: + + ![Image](pics/GitHub_repo_select_tag_tft_files.png) +3. Locate the TFT file related to your model and download it to your local http server. +4. Double check your `nextion_update_url` substitution is pointing to the right URL where the file you just downloaded is available. + + ![Image](pics/esphome_dashboard_yaml_nextion_update_url.png) +5. Go to your device's page under **Settings** > **Devices & Services** > **ESPHome**. +6. On the **Configuration** group, press **Update TFT display** and wait for the upload to complete. + +### For Blueprint Component +1. Use your preferred code editor to edit the blueprint file under `/homeassistant/blueprints/automation/Blackymas/nspanel_blueprint.yaml`. +2. In the `source_url` key, change the URL replacing `main` by the version you want to install. +3. Go to **Developer Tools**, select the tab **YAML** and click the button to reload **AUTOMATIONS**. +4. Go to the [Blueprints dashboard](https://my.home-assistant.io/redirect/blueprints/) (under **Settings** > **Automations & Scenes**, then select tab **Blueprints**). +5. Find the Blueprint named **NSPanel Configuration** and click on the 3-dot menu related to that. +6. Click **Re-import blueprint**. +7. Go back to **Developer Tools**, select the tab **YAML** and click the button to reload **AUTOMATIONS**. + +## Additional Notes +- Please note that the images provided in this guide might become outdated as the project evolves. +It's always a good idea to refer to the latest version of the project for current details. +- For the most up-to-date information and updates, +refer to the [project's documents](README.md) +and check the [issues](https://github.com/Blackymas/NSPanel_HA_Blueprint/issues) +and [discussions](https://github.com/Blackymas/NSPanel_HA_Blueprint/discussions) sections on our GitHub repository. diff --git a/docs/howto.md b/docs/howto.md index 7684906..d908cf0 100644 --- a/docs/howto.md +++ b/docs/howto.md @@ -70,9 +70,6 @@ use_blueprint: accuweather: home_wetter outdoortemp: sensor.terrasse_garage_motion_sensor_temperature humidity: sensor.kinderzimmer_lea_temperatur_sensor_humidity - hotwatertemp: sensor.hotwater_temp - hotwatercharge: switch.charge - heatingsystemflame: binary_sensor.flamestatus climate: climate.nspanel_buro left_button_entity: light.haustur_spot_2 right_button_entity: light.haustur_spot_1 @@ -135,11 +132,10 @@ The new firmware will be built and then flashed to your panel, which will restar > [!IMPORTANT] > These instructions are for updating a panel where an older version of these files are already installed. -1. (**Arduino only**) Download from our [GitHub repository](https://github.com/Blackymas/NSPanel_HA_Blueprint/) the latest version of the TFT file relative to your panel's model. -2. (**Arduino only**) Upload this file to your local www (http) server. Please use the same URL as indicated by the substitution `nextion_update_url` in your device's YAML. -3. Go to ***Settings --> Devices & Services --> Integrations***, select the display under the ESPHome integration. -4. Press the switch "**Update TFT Display**" under **Configuration**. -5. The display starts the update process and then restarts. +1. Go to ***Settings --> Devices & Services --> Integrations***, select the display under the ESPHome integration. +2. Select the "**Update TFT Display - Model**" accordingly, under **Configuration**. +3. Press the button "**Update TFT Display**". +4. The display starts the update process and then restarts. ## Notification via HA To show a notification on the NSPAnel, the following service call can be used: diff --git a/docs/install.md b/docs/install.md index 1e56bc3..78acedb 100644 --- a/docs/install.md +++ b/docs/install.md @@ -8,7 +8,7 @@ Let’s embark on this journey together to create a smart home that’s uniquely > [!TIP] -> For troubleshooting TFT transfer issues, the most popular topic for new sers, please consult our [TFT Transfer Troubleshooting Guide](tft_upload.md). +> For troubleshooting TFT transfer issues, the most popular topic for new users, please consult our [TFT Transfer Troubleshooting Guide](tft_upload.md). > [!NOTE] > We encourage users with absolute beginner-level knowledge in Home Assistant, ESPHome, or YAML editing to familiarize themselves with the basics of these platforms. @@ -60,6 +60,12 @@ To flash your NSPanel, ESPHome firmware is required. ESPHome can be integrated into your setup in various ways, including as a Home Assistant add-on or through a local installation on your computer. This guide is based on using the ESPHome dashboard, which is available in all standard implementations. +> [!NOTE] +> 4GB of memory are recommended if you are installing ESPHome as a Home Assistant add-on. +Therefore, a RasPi 4 with 4GB RAM is the minimum if you are using a Raspberry Pi. +A manual installation requires at least 2GB of memory and 500MB of swap space or 3GB of memory. +With less memory the compiler will crash! + - **Installing ESPHome as a Home Assistant Add-On**: For seamless integration with Home Assistant, ESPHome can be installed as an add-on. This method provides an easy-to-navigate interface and direct integration with your Home Assistant setup. For detailed instructions on this installation method, refer to [Getting Started with ESPHome and Home Assistant](https://esphome.io/guides/getting_started_hassio). @@ -90,10 +96,11 @@ Follow these steps to add a new device in the ESPHome Dashboard: ```yaml substitutions: # Settings - Editable values - device_name: "YOUR_NSPANEL_NAME" + device_name: "YOUR_NSPANEL_NAME" + friendly_name: "Your panel's friendly name" wifi_ssid: !secret wifi_ssid wifi_password: !secret wifi_password - nextion_update_url: "http://homeassistant.local:8123/local/nspanel_eu.tft" # Optional for `esp-idf` framework + nextion_update_url: "http://homeassistant.local:8123/local/nspanel_eu.tft" # Optional # Add-on configuration (if needed) # heater_relay: "1" # Possible values: "1" or "2" @@ -125,7 +132,7 @@ Follow these steps to add a new device in the ESPHome Dashboard: ![Edit Settings](pics/ha_esphome_dashboard_new_device_06b.png) 10. For Wi-Fi credentials, use `!secret` for added security or input them directly. Learn about secrets in ESPHome: [Home Assistant Secrets in ESPHome](https://www.youtube.com/watch?v=eW4vKDeHh7Y). -11. (Optionally when using `esp-idf`) Adjust `nextion_update_url` to the URL of a TFT file hosted on an HTTP or HTTPS server, +11. (Optional) Adjust `nextion_update_url` to the URL of a TFT file hosted on an HTTP or HTTPS server, ensuring that the file is accessible to the NSPanel. This URL will be used by ESPHome to download the TFT file to your panel. For more information on hosting the TFT file and setting up the URL, see the [Upload TFT](#upload-tft) section. @@ -437,10 +444,11 @@ To use a local copy of `nspanel_esphome.yaml`, copy the file from GitHub to your ```yaml substitutions: # Editable settings - device_name: "YOUR_NSPANEL_NAME" + device_name: "YOUR_NSPANEL_NAME" + friendly_name: "Your panel's friendly name" wifi_ssid: !secret wifi_ssid wifi_password: !secret wifi_password - nextion_update_url: "http://homeassistant.local:8123/local/nspanel_eu.tft" + nextion_update_url: "http://homeassistant.local:8123/local/nspanel_eu.tft" # Optional # Add-on configuration # heater_relay: "1" - possible values: 1/2 diff --git a/docs/nspanel_blank.md b/docs/nspanel_blank.md index 6814916..5cb1436 100644 --- a/docs/nspanel_blank.md +++ b/docs/nspanel_blank.md @@ -18,55 +18,9 @@ please refeer to the [Troubleshooting TFT transfer](tft_upload.md) guide. ## How to install a different `tft` file? -**v4.2 or later and `esp-idf` framework:** - Just go to your devices's page (under **Settings** > **Devices and Services** > **ESPHome**), select your **Upload TFT display - Model** and then press **Upload TFT display**. -**Older versions or `arduino` framework:** - -On your ESPHome settings, you have entered a url for `nextion_update_url`, in the substitutions, like this: - -```yaml -substitutions: - ###### CHANGE ME START ###### - device_name: "YOUR_NSPANEL_NAME" - wifi_ssid: !secret wifi_ssid - wifi_password: !secret wifi_password - - nextion_update_url: "http://homeassistant.local:8123/local/nspanel_eu.tft" - nextion_blank_url: "http://homeassistant.local:8123/local/nspanel_blank.tft" - - ##### addon-configuration ##### - ## addon_climate ## - # addon_climate_heater_relay: "1" # possible values: 1/2 - - ##### CHANGE ME END ##### - -packages: - remote_package: - url: https://github.com/Blackymas/NSPanel_HA_Blueprint - ref: main - files: - - nspanel_esphome.yaml # Core package - # - nspanel_esphome_addon_climate_cool.yaml # activate for local climate (cooling) control - # - nspanel_esphome_addon_climate_heat.yaml # activate for local climate (heater) control - # - nspanel_esphome_addon_climate_dual.yaml # activate for local climate (dual) control - refresh: 300s - -esp32: - framework: - type: esp-idf -``` - -This url will indicate where your panel will look for the `tft` file when you click the "Upload TFT" button (under device's page) -or call the service `esphome.xxxxx_upload_tft`. - -The most popular way to switch between the `nspanel_blank.tft` and `nspanel_xx.tft` is replacing the URL on the ESPHome settings -and flashing the device again, however, you can also do this calling the service `esphome.xxxxx_upload_tft_url` -adding the URL of the alternative file as a parameter. -It's up to you, as both ways will give the same result. - ## What to do after installing `nspanel_blank.tft`? ![image](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/94725493/3b0bb950-4857-4c22-a53a-062d09f315dc) @@ -74,21 +28,9 @@ It's up to you, as both ways will give the same result. Once you have sucessfully installed any of the `tft` files from this project, the `nspanel_blank.tft` file shouldn't be necessary anymore and you should be able to always install the final `tft` file. -**v4.2 or later and `esp-idf` framework:** - Just go to your devices's page (under **Settings** > **Devices and Services** > **ESPHome**), select your **Upload TFT display - Model** and then press **Upload TFT display**. -**Older versions or `arduino` framework:** - -Make sure you have one of the following final TFT files in your local http server (typically Home Assistant on ***www*** folder): -- [`nspanel_eu.tft`](../nspanel_eu.tft) -- [`nspanel_us.tft`](../nspanel_us.tft) -- [`nspanel_us_land.tft`](../nspanel_us_land.tft) - -Now Flash your panel with `nextion_update_url` pointing to one of the final TFT files and -press **Upload TFT** in the device's page (**Settings** > **Devices & Services** > **ESPHome**). - ## Additional Tips and Resources We have an useful guide for [troubleshooting TFT transfer issues](tft_upload.md). Please take a look there first. diff --git a/docs/pics/GitHub_repo_select_tag_tft_files.png b/docs/pics/GitHub_repo_select_tag_tft_files.png new file mode 100644 index 0000000..44e710c Binary files /dev/null and b/docs/pics/GitHub_repo_select_tag_tft_files.png differ diff --git a/docs/pics/esphome_dashboard_yaml_nextion_update_url.png b/docs/pics/esphome_dashboard_yaml_nextion_update_url.png new file mode 100644 index 0000000..31b88b3 Binary files /dev/null and b/docs/pics/esphome_dashboard_yaml_nextion_update_url.png differ diff --git a/docs/pics/esphome_dashboard_yaml_ref_main.png b/docs/pics/esphome_dashboard_yaml_ref_main.png new file mode 100644 index 0000000..74ccbcd Binary files /dev/null and b/docs/pics/esphome_dashboard_yaml_ref_main.png differ diff --git a/docs/pics/esphome_dashboard_yaml_ref_v414.png b/docs/pics/esphome_dashboard_yaml_ref_v414.png new file mode 100644 index 0000000..fc75a7b Binary files /dev/null and b/docs/pics/esphome_dashboard_yaml_ref_v414.png differ diff --git a/docs/pics/ha_blueprint_home_custom_buttons_alarm.png b/docs/pics/ha_blueprint_home_custom_buttons_alarm.png new file mode 100644 index 0000000..197de2b Binary files /dev/null and b/docs/pics/ha_blueprint_home_custom_buttons_alarm.png differ diff --git a/docs/pics/ha_device_configuration_tft_update_branch_selector.png b/docs/pics/ha_device_configuration_tft_update_branch_selector.png new file mode 100644 index 0000000..8b54cf2 Binary files /dev/null and b/docs/pics/ha_device_configuration_tft_update_branch_selector.png differ diff --git a/docs/pics/ha_file_editor_blueprint_source_url_v414.png b/docs/pics/ha_file_editor_blueprint_source_url_v414.png new file mode 100644 index 0000000..e3dc696 Binary files /dev/null and b/docs/pics/ha_file_editor_blueprint_source_url_v414.png differ diff --git a/docs/version_compatibility.md b/docs/version_compatibility.md new file mode 100644 index 0000000..2c0bf83 --- /dev/null +++ b/docs/version_compatibility.md @@ -0,0 +1,11 @@ +# Version compatibility matrix + + +| NSPanel_HA_Blueprint
Version | Home Assistant
Min version | ESPHome
Min version | +| :--: | :--: | :--: | +| v4.2.2+ | 2023.12.0 | 2023.12.0 | +| v4.2.1
v4.2 | 2023.9.0 | 2023.12.0 | +| v4.1 | 2023.9.0 | 2023.5.0 | +| v4.0 | 2023.5.0 | 2023.5.0 | +| Older | 2022.11.1 | 2022.10.2 | + diff --git a/nspanel_blueprint.yaml b/nspanel_blueprint.yaml index cfc3f7f..ceba515 100644 --- a/nspanel_blueprint.yaml +++ b/nspanel_blueprint.yaml @@ -4,7 +4,6 @@ ##### PLEASE only make changes if it is necessary and also the required knowledge is available. ##### ##### For normal use with the Blueprint, no changes are necessary. ##### ####################################################################################################### - --- blueprint: name: NSPanel Configuration @@ -37,7 +36,7 @@ blueprint: 🎉 Roadmap can be found here: [Roadmap](https://github.com/Blackymas/NSPanel_HA_Blueprint/labels/roadmap) - ℹ️ Version: v4.2.4 + ℹ️ Version: v4.2.5 source_url: https://github.com/Blackymas/NSPanel_HA_Blueprint/blob/main/nspanel_blueprint.yaml domain: automation @@ -47,7 +46,7 @@ blueprint: # yamllint disable rule:indentation rule:comments-indentation input: ##### MAIN NAME ##### - nspanel_name: + nspanel_name: # This key was kept with this name to support inputs from legacy versions where the panel name was used name: NSPanel device (REQUIRED) description: > *SYSTEM settings* @@ -173,11 +172,11 @@ blueprint: device_class: - temperature home_outdoor_temp_label_color: - name: Outdoor Temperature Sensor - LABEL COLOR (Optional) + name: Outdoor Temperature Sensor - Text Color (Optional) description: > *HOME page* - *Label color which should be displayed* + *Choose a color for the sensor's display text.* default: [255, 255, 255] # 65535 White selector: &color_selector color_rgb: @@ -237,11 +236,11 @@ blueprint: default: [255, 255, 255] # 65535 White selector: *color_selector home_indoor_temp_label_color: - name: Indoor Temperature Sensor - LABEL COLOR (Optional) + name: Indoor Temperature Sensor - Text Color (Optional) description: > *HOME page* - *Label color which should be displayed* + *Choose a color for the sensor's display text.* default: [255, 255, 255] # 65535 White selector: *color_selector ##### Sensors - Page Home ##### @@ -264,13 +263,20 @@ blueprint: filter: domain: - sensor + home_value01_label_color: + name: Sensor 01 - Text Color (Optional) + description: > + *HOME page* + + *Choose a color for the sensor's display text.* + default: [200, 204, 200] # 52857 Grey super light + selector: *color_selector home_value01_icon: name: Sensor 01 - ICON (Optional) description: > *HOME page* - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + ***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.* default: [] selector: *icon-selector home_value01_icon_color: @@ -281,14 +287,6 @@ blueprint: *Icon color which should be displayed* default: [200, 204, 200] # 52857 Grey super light selector: *color_selector - home_value01_label_color: - name: Sensor 01 - LABEL COLOR (Optional) - description: > - *HOME page* - - *Label color which should be displayed* - default: [200, 204, 200] # 52857 Grey super light - selector: *color_selector home_value02: name: Sensor 02 - ENTITY (Optional) description: > @@ -297,13 +295,20 @@ blueprint: *Entity which should be displayed* default: [] selector: *entity_sensor-selector + home_value02_label_color: + name: Sensor 02 - Text Color (Optional) + description: > + *HOME page* + + *Choose a color for the sensor's display text.* + default: [200, 204, 200] # 52857 Grey super light + selector: *color_selector home_value02_icon: name: Sensor 02 - ICON (Optional) description: > *HOME page* - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + ***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.* default: [] selector: *icon-selector home_value02_icon_color: @@ -314,14 +319,6 @@ blueprint: *Icon color which should be displayed* default: [200, 204, 200] # 52857 Grey super light selector: *color_selector - home_value02_label_color: - name: Sensor 02 - LABEL COLOR (Optional) - description: > - *HOME page* - - *Label color which should be displayed* - default: [200, 204, 200] # 52857 Grey super light - selector: *color_selector home_value03: name: Sensor 03 - ENTITY (Optional) description: > @@ -330,13 +327,20 @@ blueprint: *Entity which should be displayed* default: [] selector: *entity_sensor-selector + home_value03_label_color: + name: Sensor 03 - Text Color (Optional) + description: > + *HOME page* + + *Choose a color for the sensor's display text.* + default: [200, 204, 200] # 52857 Grey super light + selector: *color_selector home_value03_icon: name: Sensor 03 - ICON (Optional) description: > *HOME page* - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + ***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.* default: [] selector: *icon-selector home_value03_icon_color: @@ -347,14 +351,6 @@ blueprint: *Icon color which should be displayed* default: [200, 204, 200] # 52857 Grey super light selector: *color_selector - home_value03_label_color: - name: Sensor 03 - LABEL COLOR (Optional) - description: > - *HOME page* - - *Label color which should be displayed* - default: [200, 204, 200] # 52857 Grey super light - selector: *color_selector ##### Chips - Page Home ##### ##### PLACEHOLDER ###################################################################### placeholder03: @@ -393,8 +389,10 @@ blueprint: - binary_sensor - climate - cover + - fan - input_boolean - light + - media_player - sensor - switch chip01_inverted: @@ -782,7 +780,7 @@ blueprint: default: [] selector: *icon-selector ## Page Home - Custom button 07 - alarm: + alarm: # This key was kept with this name to support inputs from legacy versions where the alarm was the only option at that button name: Custom button 07 - ENTITY (Optional) description: > *HOME page* @@ -926,8 +924,7 @@ blueprint: description: > *CLIMATE page* - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + ***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.* default: [] selector: *icon-selector climate_value01_icon_color: @@ -939,11 +936,11 @@ blueprint: default: [200, 204, 200] # 52857 Grey super light selector: *color_selector climate_value01_label_color: - name: Sensor 01 - LABEL COLOR (Optional) + name: Sensor 01 - Text Color (Optional) description: > *CLIMATE page* - *Label color which should be displayed* + *Choose a color for the sensor's display text.* default: [200, 204, 200] # 52857 Grey super light selector: *color_selector ## Climate page - Sensor 02 @@ -960,8 +957,7 @@ blueprint: description: > *CLIMATE page* - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + ***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.* default: [] selector: *icon-selector climate_value02_icon_color: @@ -973,11 +969,11 @@ blueprint: default: [200, 204, 200] # 52857 Grey super light selector: *color_selector climate_value02_label_color: - name: Sensor 02 - LABEL COLOR (Optional) + name: Sensor 02 - Text Color (Optional) description: > *CLIMATE page* - *Label color which should be displayed* + *Choose a color for the sensor's display text.* default: [200, 204, 200] # 52857 Grey super light selector: *color_selector ## Climate page - Sensor 03 @@ -994,8 +990,7 @@ blueprint: description: > *CLIMATE page* - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + ***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.* default: [] selector: *icon-selector climate_value03_icon_color: @@ -1007,11 +1002,11 @@ blueprint: default: [200, 204, 200] # 52857 Grey super light selector: *color_selector climate_value03_label_color: - name: Sensor 03 - LABEL COLOR (Optional) + name: Sensor 03 - Text Color (Optional) description: > *CLIMATE page* - *Label color which should be displayed* + *Choose a color for the sensor's display text.* default: [200, 204, 200] # 52857 Grey super light selector: *color_selector ## Climate page - Sensor 04 @@ -1028,8 +1023,7 @@ blueprint: description: > *CLIMATE page* - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + ***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.* default: [] selector: *icon-selector climate_value04_icon_color: @@ -1041,11 +1035,11 @@ blueprint: default: [200, 204, 200] # 52857 Grey super light selector: *color_selector climate_value04_label_color: - name: Sensor 04 - LABEL COLOR (Optional) + name: Sensor 04 - Text Color (Optional) description: > *CLIMATE page* - *Label color which should be displayed* + *Choose a color for the sensor's display text.* default: [200, 204, 200] # 52857 Grey super light selector: *color_selector @@ -1067,7 +1061,7 @@ blueprint: selector: boolean: qrcode_label: - name: QR Code page name - LABEL (Optional) + name: QR Code page - LABEL (Optional) description: > *QRCODE page* @@ -1146,7 +1140,7 @@ blueprint: - script - switch left_button_name: - name: Left hardware button name - LABEL (Optional) + name: Left hardware button - LABEL (Optional) description: > *HOME page* @@ -1178,11 +1172,11 @@ blueprint: selector: action: left_button_color: - name: Left hardware button - LABEL COLOR (Optional) + name: Left hardware button - Text Color (Optional) description: > *HOME page* - *LABEL color which should be displayed* + *Choose a color for the button's display text.* default: [200, 204, 200] # 52857 Grey super light selector: *color_selector relay_2_local_fallback: @@ -1205,7 +1199,7 @@ blueprint: default: [] selector: *hardware-button-selector right_button_name: - name: Right hardware button name - LABEL (Optional) + name: Right hardware button - LABEL (Optional) description: > *HOME page* @@ -1233,11 +1227,11 @@ blueprint: selector: action: right_button_color: - name: Right hardware button - LABEL COLOR (Optional) + name: Right hardware button - Text Color (Optional) description: > *HOME page* - *LABEL color which should be displayed* + *Choose a color for the button's display text.* default: [200, 204, 200] # 52857 Grey super light selector: *color_selector @@ -1277,19 +1271,15 @@ blueprint: selector: *placeholder-selector ##### PLACEHOLDER ###################################################################### button_page01_label: - name: Button page 01 name - LABEL (Optional) + name: Button page 01 - LABEL (Optional) description: > - *ButtonPage01* - *Label which should be displayed* default: [] selector: text: {} entity01: - name: Button 01 - ENTITY (Optional) + name: Button page 1, Button 1 - ENTITY (Optional) description: > - *ButtonPage01* - *Entity which should be switched* default: [] selector: &button-entity-selector @@ -1313,339 +1303,261 @@ blueprint: - script - switch entity01_name: - name: Button 01 name - LABEL (Optional) + name: Button page 1, Button 1 - LABEL (Optional) description: > - *ButtonPage01* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity01_icon: - name: Button 01 - ICON (Optional) + name: Button page 1, Button 1 - ICON (Optional) description: > - *ButtonPage01* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity01_icon_color: - name: Button 01 - ICON COLOR (Optional) + name: Button page 1, Button 1 - ICON COLOR (Optional) description: > - *ButtonPage01* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity01_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 1, Button 1 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage01* - - *Ask for confirmation to execute **Button01** action* + *Ask for confirmation to execute action* selector: boolean: entity02: - name: Button 02 - ENTITY (Optional) + name: Button page 1, Button 2 - ENTITY (Optional) description: > - *ButtonPage01* - *Entity which should be switched* default: [] selector: *button-entity-selector entity02_name: - name: Button 02 name - LABEL (Optional) + name: Button page 1, Button 2 - LABEL (Optional) description: > - *ButtonPage01* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity02_icon: - name: Button 02 - ICON (Optional) + name: Button page 1, Button 2 - ICON (Optional) description: > - *ButtonPage01* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity02_icon_color: - name: Button 02 - ICON COLOR (Optional) + name: Button page 1, Button 2 - ICON COLOR (Optional) description: > - *ButtonPage01* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity02_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 1, Button 2 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage01* - - *Ask for confirmation to execute **Button02** action* + *Ask for confirmation to execute action* selector: boolean: entity03: - name: Button 03 - ENTITY (Optional) + name: Button page 1, Button 3 - ENTITY (Optional) description: > - *ButtonPage01* - *Entity which should be switched* default: [] selector: *button-entity-selector entity03_name: - name: Button 03 name - LABEL (Optional) + name: Button page 1, Button 3 - LABEL (Optional) description: > - *ButtonPage01* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity03_icon: - name: Button 03 - ICON (Optional) + name: Button page 1, Button 3 - ICON (Optional) description: > - *ButtonPage01* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity03_icon_color: - name: Button 03 - ICON COLOR (Optional) + name: Button page 1, Button 3 - ICON COLOR (Optional) description: > - *ButtonPage01* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity03_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 1, Button 3 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage01* - - *Ask for confirmation to execute **Button03** action* + *Ask for confirmation to execute action* selector: boolean: entity04: - name: Button 04 - ENTITY (Optional) + name: Button page 1, Button 4 - ENTITY (Optional) description: > - *ButtonPage01* - *Entity which should be switched* default: [] selector: *button-entity-selector entity04_name: - name: Button 04 name - LABEL (Optional) + name: Button page 1, Button 4 - LABEL (Optional) description: > - *ButtonPage01* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity04_icon: - name: Button 04 - ICON (Optional) + name: Button page 1, Button 4 - ICON (Optional) description: > - *ButtonPage01* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity04_icon_color: - name: Button 04 - ICON COLOR (Optional) + name: Button page 1, Button 4 - ICON COLOR (Optional) description: > - *ButtonPage01* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity04_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 1, Button 4 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage01* - - *Ask for confirmation to execute **Button04** action* + *Ask for confirmation to execute action* selector: boolean: entity05: - name: Button 05 - ENTITY (Optional) + name: Button page 1, Button 5 - ENTITY (Optional) description: > - *ButtonPage01* - *Entity which should be switched* default: [] selector: *button-entity-selector entity05_name: - name: Button 05 name - LABEL (Optional) + name: Button page 1, Button 5 - LABEL (Optional) description: > - *ButtonPage01* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity05_icon: - name: Button 05 - ICON (Optional) + name: Button page 1, Button 5 - ICON (Optional) description: > - *ButtonPage01* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity05_icon_color: - name: Button 05 - ICON COLOR (Optional) + name: Button page 1, Button 5 - ICON COLOR (Optional) description: > - *ButtonPage01* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity05_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 1, Button 5 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage01* - - *Ask for confirmation to execute **Button05** action* + *Ask for confirmation to execute action* selector: boolean: entity06: - name: Button 06 - ENTITY (Optional) + name: Button page 1, Button 6 - ENTITY (Optional) description: > - *ButtonPage01* - *Entity which should be switched* default: [] selector: *button-entity-selector entity06_name: - name: Button 06 name - LABEL (Optional) + name: Button page 1, Button 6 - LABEL (Optional) description: > - *ButtonPage01* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity06_icon: - name: Button 06 - ICON (Optional) + name: Button page 1, Button 6 - ICON (Optional) description: > - *ButtonPage01* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity06_icon_color: - name: Button 06 - ICON COLOR (Optional) + name: Button page 1, Button 6 - ICON COLOR (Optional) description: > - *ButtonPage01* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity06_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 1, Button 6 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage01* - - *Ask for confirmation to execute **Button06** action* + *Ask for confirmation to execute action* selector: boolean: entity07: - name: Button 07 - ENTITY (Optional) + name: Button page 1, Button 7 - ENTITY (Optional) description: > - *ButtonPage01* - *Entity which should be switched* default: [] selector: *button-entity-selector entity07_name: - name: Button 07 name - LABEL (Optional) + name: Button page 1, Button 7 - LABEL (Optional) description: > - *ButtonPage01* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity07_icon: - name: Button 07 - ICON (Optional) + name: Button page 1, Button 7 - ICON (Optional) description: > - *ButtonPage01* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity07_icon_color: - name: Button 07 - ICON COLOR (Optional) + name: Button page 1, Button 7 - ICON COLOR (Optional) description: > - *ButtonPage01* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity07_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 1, Button 7 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage01* - - *Ask for confirmation to execute **Button07** action* + *Ask for confirmation to execute action* selector: boolean: entity08: - name: Button 08 - ENTITY (Optional) + name: Button page 1, Button 8 - ENTITY (Optional) description: > - *ButtonPage01* - *Entity which should be switched* default: [] selector: *button-entity-selector entity08_name: - name: Button 08 name - LABEL (Optional) + name: Button page 1, Button 8 - LABEL (Optional) description: > - *ButtonPage01* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity08_icon: - name: Button 08 - ICON (Optional) + name: Button page 1, Button 8 - ICON (Optional) description: > - *ButtonPage01* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity08_icon_color: - name: Button 08 - ICON COLOR (Optional) + name: Button page 1, Button 8 - ICON COLOR (Optional) description: > - *ButtonPage01* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity08_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 1, Button 8 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage01* - - *Ask for confirmation to execute **Button08** action* + *Ask for confirmation to execute action* selector: boolean: ##### Button page 02 ##### @@ -1657,356 +1569,274 @@ blueprint: selector: *placeholder-selector ##### PLACEHOLDER ###################################################################### button_page02_label: - name: Button page 02 name - LABEL (Optional) + name: Button page 02 - LABEL (Optional) description: > - *ButtonPage02* - *Label which should be displayed* default: [] selector: text: {} entity09: - name: Button 09 - ENTITY (Optional) + name: Button page 2, Button 1 - ENTITY (Optional) description: > - *ButtonPage02* - *Entity which should be switched* default: [] selector: *button-entity-selector entity09_name: - name: Button 09 name - LABEL (Optional) + name: Button page 2, Button 1 - LABEL (Optional) description: > - *ButtonPage02* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity09_icon: - name: Button 09 - ICON (Optional) + name: Button page 2, Button 1 - ICON (Optional) description: > - *ButtonPage02* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity09_icon_color: - name: Button 09 - ICON COLOR (Optional) + name: Button page 2, Button 1 - ICON COLOR (Optional) description: > - *ButtonPage02* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity09_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 2, Button 1 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage02* - - *Ask for confirmation to execute **Button09** action* + *Ask for confirmation to execute action* selector: boolean: entity10: - name: Button 10 - ENTITY (Optional) + name: Button page 2, Button 2 - ENTITY (Optional) description: > - *ButtonPage02* - *Entity which should be switched* default: [] selector: *button-entity-selector entity10_name: - name: Button 10 name - LABEL (Optional) + name: Button page 2, Button 2 - LABEL (Optional) description: > - *ButtonPage02* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity10_icon: - name: Button 10 - ICON (Optional) + name: Button page 2, Button 2 - ICON (Optional) description: > - *ButtonPage02* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity10_icon_color: - name: Button 10 - ICON COLOR (Optional) + name: Button page 2, Button 2 - ICON COLOR (Optional) description: > - *ButtonPage02* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity10_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 2, Button 2 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage02* - - *Ask for confirmation to execute **Button10** action* + *Ask for confirmation to execute action* selector: boolean: entity11: - name: Button 11 - ENTITY (Optional) + name: Button page 2, Button 3 - ENTITY (Optional) description: > - *ButtonPage02* - *Entity which should be switched* default: [] selector: *button-entity-selector entity11_name: - name: Button 11 name - LABEL (Optional) + name: Button page 2, Button 3 - LABEL (Optional) description: > - *ButtonPage02* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity11_icon: - name: Button 11 - ICON (Optional) + name: Button page 2, Button 3 - ICON (Optional) description: > - *ButtonPage02* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity11_icon_color: - name: Button 11 - ICON COLOR (Optional) + name: Button page 2, Button 3 - ICON COLOR (Optional) description: > - *ButtonPage02* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity11_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 2, Button 3 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage02* - - *Ask for confirmation to execute **Button11** action* + *Ask for confirmation to execute action* selector: boolean: entity12: - name: Button 12 - ENTITY (Optional) + name: Button page 2, Button 4 - ENTITY (Optional) description: > - *ButtonPage02* - *Entity which should be switched* default: [] selector: *button-entity-selector entity12_name: - name: Button 12 name - LABEL (Optional) + name: Button page 2, Button 4 - LABEL (Optional) description: > - *ButtonPage02* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity12_icon: - name: Button 12 - ICON (Optional) + name: Button page 2, Button 4 - ICON (Optional) description: > - *ButtonPage02* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity12_icon_color: - name: Button 12 - ICON COLOR (Optional) + name: Button page 2, Button 4 - ICON COLOR (Optional) description: > - *ButtonPage02* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity12_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 2, Button 4 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage02* - - *Ask for confirmation to execute **Button12** action* + *Ask for confirmation to execute action* selector: boolean: entity13: - name: Button 13 - ENTITY (Optional) + name: Button page 2, Button 5 - ENTITY (Optional) description: > - *ButtonPage02* - *Entity which should be switched* default: [] selector: *button-entity-selector entity13_name: - name: Button 13 name - LABEL (Optional) + name: Button page 2, Button 5 - LABEL (Optional) description: > - *ButtonPage02* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity13_icon: - name: Button 13 - ICON (Optional) + name: Button page 2, Button 5 - ICON (Optional) description: > - *ButtonPage02* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity13_icon_color: - name: Button 13 - ICON COLOR (Optional) + name: Button page 2, Button 5 - ICON COLOR (Optional) description: > - *ButtonPage02* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity13_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 2, Button 5 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage02* - - *Ask for confirmation to execute **Button13** action* + *Ask for confirmation to execute action* selector: boolean: entity14: - name: Button 14 - ENTITY (Optional) + name: Button page 2, Button 6 - ENTITY (Optional) description: > - *ButtonPage02* - *Entity which should be switched* default: [] selector: *button-entity-selector entity14_name: - name: Button 14 name - LABEL (Optional) + name: Button page 2, Button 6 - LABEL (Optional) description: > - *ButtonPage02* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity14_icon: - name: Button 14 - ICON (Optional) + name: Button page 2, Button 6 - ICON (Optional) description: > - *ButtonPage02* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity14_icon_color: - name: Button 14 - ICON COLOR (Optional) + name: Button page 2, Button 6 - ICON COLOR (Optional) description: > - *ButtonPage02* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity14_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 2, Button 6 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage02* - - *Ask for confirmation to execute **Button14** action* + *Ask for confirmation to execute action* selector: boolean: entity15: - name: Button 15 - ENTITY (Optional) + name: Button page 2, Button 7 - ENTITY (Optional) description: > - *ButtonPage02* - *Entity which should be switched* default: [] selector: *button-entity-selector entity15_name: - name: Button 15 name - LABEL (Optional) + name: Button page 2, Button 7 - LABEL (Optional) description: > - *ButtonPage02* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity15_icon: - name: Button 15 - ICON (Optional) + name: Button page 2, Button 7 - ICON (Optional) description: > - *ButtonPage02* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity15_icon_color: - name: Button 15 - ICON COLOR (Optional) + name: Button page 2, Button 7 - ICON COLOR (Optional) description: > - *ButtonPage02* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity15_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 2, Button 7 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage02* - - *Ask for confirmation to execute **Button15** action* + *Ask for confirmation to execute action* selector: boolean: entity16: - name: Button 16 - ENTITY (Optional) + name: Button page 2, Button 8 - ENTITY (Optional) description: > - *ButtonPage02* - *Entity which should be switched* default: [] selector: *button-entity-selector entity16_name: - name: Button 16 name - LABEL (Optional) + name: Button page 2, Button 8 - LABEL (Optional) description: > - *ButtonPage02* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity16_icon: - name: Button 16 - ICON (Optional) + name: Button page 2, Button 8 - ICON (Optional) description: > - *ButtonPage02* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity16_icon_color: - name: Button 16 - ICON COLOR (Optional) + name: Button page 2, Button 8 - ICON COLOR (Optional) description: > - *ButtonPage02* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity16_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 2, Button 8 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage02* - - *Ask for confirmation to execute **Button16** action* + *Ask for confirmation to execute action* selector: boolean: ##### Button page 03 ##### @@ -2018,356 +1848,274 @@ blueprint: selector: *placeholder-selector ##### PLACEHOLDER ###################################################################### button_page03_label: - name: Button page 03 name - LABEL (Optional) + name: Button page 03 - LABEL (Optional) description: > - *ButtonPage03* - *Label which should be displayed* default: [] selector: text: {} entity17: - name: Button 17 - ENTITY (Optional) + name: Button page 3, Button 1 - ENTITY (Optional) description: > - *ButtonPage03* - *Entity which should be switched* default: [] selector: *button-entity-selector entity17_name: - name: Button 17 name - LABEL (Optional) + name: Button page 3, Button 1 - LABEL (Optional) description: > - *ButtonPage03* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity17_icon: - name: Button 17 - ICON (Optional) + name: Button page 3, Button 1 - ICON (Optional) description: > - *ButtonPage03* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity17_icon_color: - name: Button 17 - ICON COLOR (Optional) + name: Button page 3, Button 1 - ICON COLOR (Optional) description: > - *ButtonPage03* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity17_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 3, Button 1 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage03* - - *Ask for confirmation to execute **Button17** action* + *Ask for confirmation to execute action* selector: boolean: entity18: - name: Button 18 - ENTITY (Optional) + name: Button page 3, Button 2 - ENTITY (Optional) description: > - *ButtonPage03* - *Entity which should be switched* default: [] selector: *button-entity-selector entity18_name: - name: Button 18 name - LABEL (Optional) + name: Button page 3, Button 2 - LABEL (Optional) description: > - *ButtonPage03* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity18_icon: - name: Button 18 - ICON (Optional) + name: Button page 3, Button 2 - ICON (Optional) description: > - *ButtonPage03* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity18_icon_color: - name: Button 18 - ICON COLOR (Optional) + name: Button page 3, Button 2 - ICON COLOR (Optional) description: > - *ButtonPage03* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity18_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 3, Button 2 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage03* - - *Ask for confirmation to execute **Button18** action* + *Ask for confirmation to execute action* selector: boolean: entity19: - name: Button 19 - ENTITY (Optional) + name: Button page 3, Button 3 - ENTITY (Optional) description: > - *ButtonPage03* - *Entity which should be switched* default: [] selector: *button-entity-selector entity19_name: - name: Button 19 name - LABEL (Optional) + name: Button page 3, Button 3 - LABEL (Optional) description: > - *ButtonPage03* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity19_icon: - name: Button 19 - ICON (Optional) + name: Button page 3, Button 3 - ICON (Optional) description: > - *ButtonPage03* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity19_icon_color: - name: Button 19 - ICON COLOR (Optional) + name: Button page 3, Button 3 - ICON COLOR (Optional) description: > - *ButtonPage03* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity19_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 3, Button 3 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage03* - - *Ask for confirmation to execute **Button19** action* + *Ask for confirmation to execute action* selector: boolean: entity20: - name: Button 20 - ENTITY (Optional) + name: Button page 3, Button 4 - ENTITY (Optional) description: > - *ButtonPage03* - *Entity which should be switched* default: [] selector: *button-entity-selector entity20_name: - name: Button 20 name - LABEL (Optional) + name: Button page 3, Button 4 - LABEL (Optional) description: > - *ButtonPage03* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity20_icon: - name: Button 20 - ICON (Optional) + name: Button page 3, Button 4 - ICON (Optional) description: > - *ButtonPage03* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity20_icon_color: - name: Button 20 - ICON COLOR (Optional) + name: Button page 3, Button 4 - ICON COLOR (Optional) description: > - *ButtonPage03* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity20_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 3, Button 4 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage03* - - *Ask for confirmation to execute **Button20** action* + *Ask for confirmation to execute action* selector: boolean: entity21: - name: Button 21 - ENTITY (Optional) + name: Button page 3, Button 5 - ENTITY (Optional) description: > - *ButtonPage03* - *Entity which should be switched* default: [] selector: *button-entity-selector entity21_name: - name: Button 21 name - LABEL (Optional) + name: Button page 3, Button 5 - LABEL (Optional) description: > - *ButtonPage03* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity21_icon: - name: Button 21 - ICON (Optional) + name: Button page 3, Button 5 - ICON (Optional) description: > - *ButtonPage03* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity21_icon_color: - name: Button 21 - ICON COLOR (Optional) + name: Button page 3, Button 5 - ICON COLOR (Optional) description: > - *ButtonPage03* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity21_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 3, Button 5 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage03* - - *Ask for confirmation to execute **Button21** action* + *Ask for confirmation to execute action* selector: boolean: entity22: - name: Button 22 - ENTITY (Optional) + name: Button page 3, Button 6 - ENTITY (Optional) description: > - *ButtonPage03* - *Entity which should be switched* default: [] selector: *button-entity-selector entity22_name: - name: Button 22 name - LABEL (Optional) + name: Button page 3, Button 6 - LABEL (Optional) description: > - *ButtonPage03* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity22_icon: - name: Button 22 - ICON (Optional) + name: Button page 3, Button 6 - ICON (Optional) description: > - *ButtonPage03* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity22_icon_color: - name: Button 22 - ICON COLOR (Optional) + name: Button page 3, Button 6 - ICON COLOR (Optional) description: > - *ButtonPage03* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity22_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 3, Button 6 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage03* - - *Ask for confirmation to execute **Button22** action* + *Ask for confirmation to execute action* selector: boolean: entity23: - name: Button 23 - ENTITY (Optional) + name: Button page 3, Button 7 - ENTITY (Optional) description: > - *ButtonPage03* - *Entity which should be switched* default: [] selector: *button-entity-selector entity23_name: - name: Button 23 name - LABEL (Optional) + name: Button page 3, Button 7 - LABEL (Optional) description: > - *ButtonPage03* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity23_icon: - name: Button 23 - ICON (Optional) + name: Button page 3, Button 7 - ICON (Optional) description: > - *ButtonPage03* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity23_icon_color: - name: Button 23 - ICON COLOR (Optional) + name: Button page 3, Button 7 - ICON COLOR (Optional) description: > - *ButtonPage03* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity23_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 3, Button 7 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage03* - - *Ask for confirmation to execute **Button23** action* + *Ask for confirmation to execute action* selector: boolean: entity24: - name: Button 24 - ENTITY (Optional) + name: Button page 3, Button 8 - ENTITY (Optional) description: > - *ButtonPage03* - *Entity which should be switched* default: [] selector: *button-entity-selector entity24_name: - name: Button 24 name - LABEL (Optional) + name: Button page 3, Button 8 - LABEL (Optional) description: > - *ButtonPage03* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity24_icon: - name: Button 24 - ICON (Optional) + name: Button page 3, Button 8 - ICON (Optional) description: > - *ButtonPage03* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity24_icon_color: - name: Button 24 - ICON COLOR (Optional) + name: Button page 3, Button 8 - ICON COLOR (Optional) description: > - *ButtonPage03* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity24_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 3, Button 8 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage03* - - *Ask for confirmation to execute **Button24** action* + *Ask for confirmation to execute action* selector: boolean: ##### Button page 04 ##### @@ -2379,356 +2127,274 @@ blueprint: selector: *placeholder-selector ##### PLACEHOLDER ###################################################################### button_page04_label: - name: Button page 04 name - LABEL (Optional) + name: Button page 04 - LABEL (Optional) description: > - *ButtonPage04* - *Label which should be displayed* default: [] selector: text: {} entity25: - name: Button 25 - ENTITY (Optional) + name: Button page 4, Button 1 - ENTITY (Optional) description: > - *ButtonPage04* - *Entity which should be switched* default: [] selector: *button-entity-selector entity25_name: - name: Button 25 name - LABEL (Optional) + name: Button page 4, Button 1 - LABEL (Optional) description: > - *ButtonPage04* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity25_icon: - name: Button 25 - ICON (Optional) + name: Button page 4, Button 1 - ICON (Optional) description: > - *ButtonPage04* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity25_icon_color: - name: Button 25 - ICON COLOR (Optional) + name: Button page 4, Button 1 - ICON COLOR (Optional) description: > - *ButtonPage04* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity25_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 4, Button 1 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage04* - - *Ask for confirmation to execute **Button25** action* + *Ask for confirmation to execute action* selector: boolean: entity26: - name: Button 26 - ENTITY (Optional) + name: Button page 4, Button 2 - ENTITY (Optional) description: > - *ButtonPage04* - *Entity which should be switched* default: [] selector: *button-entity-selector entity26_name: - name: Button 26 name - LABEL (Optional) + name: Button page 4, Button 2 - LABEL (Optional) description: > - *ButtonPage04* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity26_icon: - name: Button 26 - ICON (Optional) + name: Button page 4, Button 2 - ICON (Optional) description: > - *ButtonPage04* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity26_icon_color: - name: Button 26 - ICON COLOR (Optional) + name: Button page 4, Button 2 - ICON COLOR (Optional) description: > - *ButtonPage04* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity26_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 4, Button 2 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage04* - - *Ask for confirmation to execute **Button26** action* + *Ask for confirmation to execute action* selector: boolean: entity27: - name: Button 27 - ENTITY (Optional) + name: Button page 4, Button 3 - ENTITY (Optional) description: > - *ButtonPage04* - *Entity which should be switched* default: [] selector: *button-entity-selector entity27_name: - name: Button 27 name - LABEL (Optional) + name: Button page 4, Button 3 - LABEL (Optional) description: > - *ButtonPage04* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity27_icon: - name: Button 27 - ICON (Optional) + name: Button page 4, Button 3 - ICON (Optional) description: > - *ButtonPage04* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity27_icon_color: - name: Button 27 - ICON COLOR (Optional) + name: Button page 4, Button 3 - ICON COLOR (Optional) description: > - *ButtonPage04* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity27_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 4, Button 3 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage04* - - *Ask for confirmation to execute **Button27** action* + *Ask for confirmation to execute action* selector: boolean: entity28: - name: Button 28 - ENTITY (Optional) + name: Button page 4, Button 4 - ENTITY (Optional) description: > - *ButtonPage04* - *Entity which should be switched* default: [] selector: *button-entity-selector entity28_name: - name: Button 28 name - LABEL (Optional) + name: Button page 4, Button 4 - LABEL (Optional) description: > - *ButtonPage04* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity28_icon: - name: Button 28 - ICON (Optional) + name: Button page 4, Button 4 - ICON (Optional) description: > - *ButtonPage04* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity28_icon_color: - name: Button 28 - ICON COLOR (Optional) + name: Button page 4, Button 4 - ICON COLOR (Optional) description: > - *ButtonPage04* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity28_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 4, Button 4 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage04* - - *Ask for confirmation to execute **Button28** action* + *Ask for confirmation to execute action* selector: boolean: entity29: - name: Button 29 - ENTITY (Optional) + name: Button page 4, Button 5 - ENTITY (Optional) description: > - *ButtonPage04* - *Entity which should be switched* default: [] selector: *button-entity-selector entity29_name: - name: Button 29 name - LABEL (Optional) + name: Button page 4, Button 5 - LABEL (Optional) description: > - *ButtonPage04* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity29_icon: - name: Button 29 - ICON (Optional) + name: Button page 4, Button 5 - ICON (Optional) description: > - *ButtonPage04* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity29_icon_color: - name: Button 29 - ICON COLOR (Optional) + name: Button page 4, Button 5 - ICON COLOR (Optional) description: > - *ButtonPage04* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity29_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 4, Button 5 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage04* - - *Ask for confirmation to execute **Button29** action* + *Ask for confirmation to execute action* selector: boolean: entity30: - name: Button 30 - ENTITY (Optional) + name: Button page 4, Button 6 - ENTITY (Optional) description: > - *ButtonPage04* - *Entity which should be switched* default: [] selector: *button-entity-selector entity30_name: - name: Button 30 name - LABEL (Optional) + name: Button page 4, Button 6 - LABEL (Optional) description: > - *ButtonPage04* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity30_icon: - name: Button 30 - ICON (Optional) + name: Button page 4, Button 6 - ICON (Optional) description: > - *ButtonPage04* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity30_icon_color: - name: Button 30 - ICON COLOR (Optional) + name: Button page 4, Button 6 - ICON COLOR (Optional) description: > - *ButtonPage04* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity30_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 4, Button 6 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage04* - - *Ask for confirmation to execute **Button30** action* + *Ask for confirmation to execute action* selector: boolean: entity31: - name: Button 31 - ENTITY (Optional) + name: Button page 4, Button 7 - ENTITY (Optional) description: > - *ButtonPage04* - *Entity which should be switched* default: [] selector: *button-entity-selector entity31_name: - name: Button 31 name - LABEL (Optional) + name: Button page 4, Button 7 - LABEL (Optional) description: > - *ButtonPage04* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity31_icon: - name: Button 31 - ICON (Optional) + name: Button page 4, Button 7 - ICON (Optional) description: > - *ButtonPage04* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity31_icon_color: - name: Button 31 - ICON COLOR (Optional) + name: Button page 4, Button 7 - ICON COLOR (Optional) description: > - *ButtonPage04* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity31_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 4, Button 7 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage04* - - *Ask for confirmation to execute **Button31** action* + *Ask for confirmation to execute action* selector: boolean: entity32: - name: Button 32 - ENTITY (Optional) + name: Button page 4, Button 8 - ENTITY (Optional) description: > - *ButtonPage04* - *Entity which should be switched* default: [] selector: *button-entity-selector entity32_name: - name: Button 32 name - LABEL (Optional) + name: Button page 4, Button 8 - LABEL (Optional) description: > - *ButtonPage04* - *Label which should be displayed (10 characters are supported)* default: [] selector: text: {} entity32_icon: - name: Button 32 - ICON (Optional) + name: Button page 4, Button 8 - ICON (Optional) description: > - *ButtonPage04* - *Icon which should be displayed (Default - an icon matching the entity will be set automatically)* default: [] selector: *icon-selector entity32_icon_color: - name: Button 32 - ICON COLOR (Optional) + name: Button page 4, Button 8 - ICON COLOR (Optional) description: > - *ButtonPage04* - *Icon color which should be displayed when button is on* default: [0, 128, 248] # 1055 Blue selector: *color_selector entity32_confirm: - name: Confirm execution of the button press - TRUE/FALSE (Optional) + name: Button page 4, Button 8 - Confirm execution of the button press (Optional) default: false description: > - *ButtonPage04* - - *Ask for confirmation to execute **Button32** action* + *Ask for confirmation to execute action* selector: boolean: @@ -2791,228 +2457,146 @@ blueprint: selector: *placeholder-selector ##### PLACEHOLDER ###################################################################### entity_page01_label: - name: Entity page 01 name - LABEL (Optional) + name: Entity page 01 - LABEL (Optional) description: > - *EntityPage01* - *Label which should be displayed* default: [] selector: text: {} entities_entity01: - name: Entity 01 - ENTITY (Optional) - description: > - *EntityPage01* - - *Entity which should be displayed* + name: Entity page 1, Row 1 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity01_name: - name: Entity 01 name - LABEL (Optional) - description: > - *EntityPage01* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 1, Row 1 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity01_icon: - name: Entity 01 - ICON (Optional) - description: > - *EntityPage01* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 1, Row 1 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity02: - name: Entity 02 - ENTITY (Optional) - description: > - *EntityPage01* - - *Entity which should be displayed* + name: Entity page 1, Row 2 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity02_name: - name: Entity 02 name - LABEL (Optional) - description: > - *EntityPage01* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 1, Row 2 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity02_icon: - name: Entity 02 - ICON (Optional) - description: > - *EntityPage01* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 1, Row 2 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity03: - name: Entity 03 - ENTITY (Optional) - description: > - *EntityPage01* - - *Entity which should be displayed* + name: Entity page 1, Row 3 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity03_name: - name: Entity 03 name - LABEL (Optional) - description: > - *EntityPage01* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 1, Row 3 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity03_icon: - name: Entity 03 - ICON (Optional) - description: > - *EntityPage01* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 1, Row 3 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity04: - name: Entity 04 - ENTITY (Optional) - description: > - *EntityPage01* - - *Entity which should be displayed* + name: Entity page 1, Row 4 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity04_name: - name: Entity 04 name - LABEL (Optional) - description: > - *EntityPage01* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 1, Row 4 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity04_icon: - name: Entity 04 - ICON (Optional) - description: > - *EntityPage01* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 1, Row 4 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity05: - name: Entity 05 - ENTITY (Optional) - description: > - *EntityPage01* - - *Entity which should be displayed* + name: Entity page 1, Row 5 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity05_name: - name: Entity 05 name - LABEL (Optional) - description: > - *EntityPage01* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 1, Row 5 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity05_icon: - name: Entity 05 - ICON (Optional) - description: > - *EntityPage01* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 1, Row 5 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity06: - name: Entity 06 - ENTITY (Optional) - description: > - *EntityPage01* - - *Entity which should be displayed* + name: Entity page 1, Row 6 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity06_name: - name: Entity 06 name - LABEL (Optional) - description: > - *EntityPage01* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 1, Row 6 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity06_icon: - name: Entity 06 - ICON (Optional) - description: > - *EntityPage01* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 1, Row 6 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity07: - name: Entity 07 - ENTITY (Optional) - description: > - *EntityPage01* - - *Entity which should be displayed* + name: Entity page 1, Row 7 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity07_name: - name: Entity 07 name - LABEL (Optional) - description: > - *EntityPage01* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 1, Row 7 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity07_icon: - name: Entity 07 - ICON (Optional) - description: > - *EntityPage01* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 1, Row 7 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity08: - name: Entity 08 - ENTITY (Optional) - description: > - *EntityPage01* - - *Entity which should be displayed* + name: Entity page 1, Row 8 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity08_name: - name: Entity 08 name - LABEL (Optional) - description: > - *EntityPage01* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 1, Row 8 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity08_icon: - name: Entity 08 - ICON (Optional) - description: > - *EntityPage01* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 1, Row 8 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector ##### Entity page 02 - Entities ##### @@ -3024,228 +2608,146 @@ blueprint: selector: *placeholder-selector ##### PLACEHOLDER ###################################################################### entity_page02_label: - name: Entity page 02 name - LABEL (Optional) + name: Entity page 02 - LABEL (Optional) description: > - *EntityPage02* - *Label which should be displayed* default: [] selector: text: {} entities_entity09: - name: Entity 09 - ENTITY (Optional) - description: > - *EntityPage02* - - *Entity which should be displayed* + name: Entity page 2, Row 1 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity09_name: - name: Entity 09 name - LABEL (Optional) - description: > - *EntityPage02* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 2, Row 1 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity09_icon: - name: Entity 09 - ICON (Optional) - description: > - *EntityPage02* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 2, Row 1 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity10: - name: Entity 10 - ENTITY (Optional) - description: > - *EntityPage02* - - *Entity which should be displayed* + name: Entity page 2, Row 2 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity10_name: - name: Entity 10 name - LABEL (Optional) - description: > - *EntityPage02* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 2, Row 2 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity10_icon: - name: Entity 10 - ICON (Optional) - description: > - *EntityPage02* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 2, Row 2 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity11: - name: Entity 11 - ENTITY (Optional) - description: > - *EntityPage02* - - *Entity which should be displayed* + name: Entity page 2, Row 3 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity11_name: - name: Entity 11 name - LABEL (Optional) - description: > - *EntityPage02* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 2, Row 3 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity11_icon: - name: Entity 11 - ICON (Optional) - description: > - *EntityPage02* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 2, Row 3 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity12: - name: Entity 12 - ENTITY (Optional) - description: > - *EntityPage02* - - *Entity which should be displayed* + name: Entity page 2, Row 4 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity12_name: - name: Entity 12 name - LABEL (Optional) - description: > - *EntityPage02* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 2, Row 4 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity12_icon: - name: Entity 12 - ICON (Optional) - description: > - *EntityPage02* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 2, Row 4 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity13: - name: Entity 13 - ENTITY (Optional) - description: > - *EntityPage02* - - *Entity which should be displayed* + name: Entity page 2, Row 5 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity13_name: - name: Entity 13 name - LABEL (Optional) - description: > - *EntityPage02* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 2, Row 5 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity13_icon: - name: Entity 13 - ICON (Optional) - description: > - *EntityPage02* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 2, Row 5 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity14: - name: Entity 14 - ENTITY (Optional) - description: > - *EntityPage02* - - *Entity which should be displayed* + name: Entity page 2, Row 6 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity14_name: - name: Entity 14 name - LABEL (Optional) - description: > - *EntityPage02* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 2, Row 6 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity14_icon: - name: Entity 14 - ICON (Optional) - description: > - *EntityPage02* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 2, Row 6 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity15: - name: Entity 15 - ENTITY (Optional) - description: > - *EntityPage02* - - *Entity which should be displayed* + name: Entity page 2, Row 7 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity15_name: - name: Entity 15 name - LABEL (Optional) - description: > - *EntityPage02* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 2, Row 7 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity15_icon: - name: Entity 15 - ICON (Optional) - description: > - *EntityPage02* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 2, Row 7 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity16: - name: Entity 16 - ENTITY (Optional) - description: > - *EntityPage02* - - *Entity which should be displayed* + name: Entity page 2, Row 8 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity16_name: - name: Entity 16 name - LABEL (Optional) - description: > - *EntityPage02* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 2, Row 8 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity16_icon: - name: Entity 16 - ICON (Optional) - description: > - *EntityPage02* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 2, Row 8 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector ##### Entity page 03 - Entities ##### @@ -3257,228 +2759,146 @@ blueprint: selector: *placeholder-selector ##### PLACEHOLDER ###################################################################### entity_page03_label: - name: Entity page 03 name - LABEL (Optional) + name: Entity page 03 - LABEL (Optional) description: > - *EntityPage03* - *Label which should be displayed* default: [] selector: text: {} entities_entity17: - name: Entity 17 - ENTITY (Optional) - description: > - *EntityPage03* - - *Entity which should be displayed* + name: Entity page 3, Row 1 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity17_name: - name: Entity 17 name - LABEL (Optional) - description: > - *EntityPage03* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 3, Row 1 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity17_icon: - name: Entity 17 - ICON (Optional) - description: > - *EntityPage03* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 3, Row 1 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity18: - name: Entity 18 - ENTITY (Optional) - description: > - *EntityPage03* - - *Entity which should be displayed* + name: Entity page 3, Row 2 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity18_name: - name: Entity 18 name - LABEL (Optional) - description: > - *EntityPage03* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 3, Row 2 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity18_icon: - name: Entity 18 - ICON (Optional) - description: > - *EntityPage03* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 3, Row 2 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity19: - name: Entity 19 - ENTITY (Optional) - description: > - *EntityPage03* - - *Entity which should be displayed* + name: Entity page 3, Row 3 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity19_name: - name: Entity 19 name - LABEL (Optional) - description: > - *EntityPage03* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 3, Row 3 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity19_icon: - name: Entity 19 - ICON (Optional) - description: > - *EntityPage03* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 3, Row 3 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity20: - name: Entity 20 - ENTITY (Optional) - description: > - *EntityPage03* - - *Entity which should be displayed* + name: Entity page 3, Row 4 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity20_name: - name: Entity 20 name - LABEL (Optional) - description: > - *EntityPage03* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 3, Row 4 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity20_icon: - name: Entity 20 - ICON (Optional) - description: > - *EntityPage03* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 3, Row 4 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity21: - name: Entity 21 - ENTITY (Optional) - description: > - *EntityPage03* - - *Entity which should be displayed* + name: Entity page 3, Row 5 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity21_name: - name: Entity 21 name - LABEL (Optional) - description: > - *EntityPage03* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 3, Row 5 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity21_icon: - name: Entity 21 - ICON (Optional) - description: > - *EntityPage03* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 3, Row 5 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity22: - name: Entity 22 - ENTITY (Optional) - description: > - *EntityPage03* - - *Entity which should be displayed* + name: Entity page 3, Row 6 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity22_name: - name: Entity 22 name - LABEL (Optional) - description: > - *EntityPage03* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 3, Row 6 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity22_icon: - name: Entity 22 - ICON (Optional) - description: > - *EntityPage03* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 3, Row 6 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity23: - name: Entity 23 - ENTITY (Optional) - description: > - *EntityPage03* - - *Entity which should be displayed* + name: Entity page 3, Row 7 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity23_name: - name: Entity 23 name - LABEL (Optional) - description: > - *EntityPage03* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 3, Row 7 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity23_icon: - name: Entity 23 - ICON (Optional) - description: > - *EntityPage03* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 3, Row 7 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity24: - name: Entity 24 - ENTITY (Optional) - description: > - *EntityPage03* - - *Entity which should be displayed* + name: Entity page 3, Row 8 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity24_name: - name: Entity 24 name - LABEL (Optional) - description: > - *EntityPage03* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 3, Row 8 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity24_icon: - name: Entity 24 - ICON (Optional) - description: > - *EntityPage03* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 3, Row 8 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector ##### Entity page 04 - Entities ##### @@ -3490,228 +2910,146 @@ blueprint: selector: *placeholder-selector ##### PLACEHOLDER ###################################################################### entity_page04_label: - name: Entity page 04 name - LABEL (Optional) + name: Entity page 04 - LABEL (Optional) description: > - *EntityPage04* - *Label which should be displayed* default: [] selector: text: {} entities_entity25: - name: Entity 25 - ENTITY (Optional) - description: > - *EntityPage04* - - *Entity which should be displayed* + name: Entity page 4, Row 1 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity25_name: - name: Entity 25 name - LABEL (Optional) - description: > - *EntityPage04* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 4, Row 1 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity25_icon: - name: Entity 25 - ICON (Optional) - description: > - *EntityPage04* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 4, Row 1 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity26: - name: Entity 26 - ENTITY (Optional) - description: > - *EntityPage04* - - *Entity which should be displayed* + name: Entity page 4, Row 2 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity26_name: - name: Entity 26 name - LABEL (Optional) - description: > - *EntityPage04* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 4, Row 2 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity26_icon: - name: Entity 26 - ICON (Optional) - description: > - *EntityPage04* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 4, Row 2 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity27: - name: Entity 27 - ENTITY (Optional) - description: > - *EntityPage04* - - *Entity which should be displayed* + name: Entity page 4, Row 3 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity27_name: - name: Entity 27 name - LABEL (Optional) - description: > - *EntityPage04* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 4, Row 3 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity27_icon: - name: Entity 27 - ICON (Optional) - description: > - *EntityPage04* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 4, Row 3 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity28: - name: Entity 28 - ENTITY (Optional) - description: > - *EntityPage04* - - *Entity which should be displayed* + name: Entity page 4, Row 4 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity28_name: - name: Entity 28 name - LABEL (Optional) - description: > - *EntityPage04* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 4, Row 4 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity28_icon: - name: Entity 28 - ICON (Optional) - description: > - *EntityPage04* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 4, Row 4 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity29: - name: Entity 29 - ENTITY (Optional) - description: > - *EntityPage04* - - *Entity which should be displayed* + name: Entity page 4, Row 5 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity29_name: - name: Entity 29 name - LABEL (Optional) - description: > - *EntityPage04* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 4, Row 5 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity29_icon: - name: Entity 29 - ICON (Optional) - description: > - *EntityPage04* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 4, Row 5 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity30: - name: Entity 30 - ENTITY (Optional) - description: > - *EntityPage04* - - *Entity which should be displayed* + name: Entity page 4, Row 6 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity30_name: - name: Entity 30 name - LABEL (Optional) - description: > - *EntityPage04* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 4, Row 6 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity30_icon: - name: Entity 30 - ICON (Optional) - description: > - *EntityPage04* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 4, Row 6 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity31: - name: Entity 31 - ENTITY (Optional) - description: > - *EntityPage04* - - *Entity which should be displayed* + name: Entity page 4, Row 7 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity31_name: - name: Entity 31 name - LABEL (Optional) - description: > - *EntityPage04* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 4, Row 7 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity31_icon: - name: Entity 31 - ICON (Optional) - description: > - *EntityPage04* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 4, Row 7 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector entities_entity32: - name: Entity 32 - ENTITY (Optional) - description: > - *EntityPage04* - - *Entity which should be displayed* + name: Entity page 4, Row 8 - ENTITY (Optional) + description: '*Entity which should be displayed*' default: [] selector: entity: entities_entity32_name: - name: Entity 32 name - LABEL (Optional) - description: > - *EntityPage04* - - *Label which should be displayed (replaces the **"friendly_name"** of the entity)* + name: Entity page 4, Row 8 - LABEL (Optional) + description: '*Label Display Name (Replaces the "**friendly_name**" Attribute of the Entity).*' default: [] selector: text: {} entities_entity32_icon: - name: Entity 32 - ICON (Optional) - description: > - *EntityPage04* - - *Icon which should be displayed - (if not set, it would be used an icon from attributes, if available, or no icon is shown)* + name: Entity page 4, Row 8 - ICON (Optional) + description: '***Icon Display:** If not specified, an attribute-defined icon will be used, if available. Otherwise, no icon will be shown.*' default: [] selector: *icon-selector @@ -3784,20 +3122,20 @@ blueprint: selector: *color_selector ##### Time label ###### time_label_color: - name: Time - LABEL COLOR (Optional) + name: Time - Text Color (Optional) description: > *HOME page* - *Label color which should be displayed (default color is set)* + *Choose a color for the time's display text.* default: [255, 255, 255] # 65535 White selector: *color_selector ##### Date label ###### date_label_color: - name: Date - LABEL COLOR (Optional) + name: Date - Text Color (Optional) description: > *HOME page* - *Label color which should be displayed (default color is set)* + *Choose a color for the date's display text.* default: [255, 255, 255] # 65535 White selector: *color_selector ##### Screensaver ##### @@ -3873,19 +3211,6 @@ blueprint: default: [] selector: text: {} - ##### Show while loading ##### - show_while_loading: - name: Show pages while loading? - description: > - *SYSTEM settings* - - *When this is enable, the pages will be shown earlier, but some information might not be visible from the begining and will be shown when available.* - *When disabled (default), the pages will be shown when all the data is loaded and ready to be displayed.* - - **This may be useful when your pages takes too long to load and can help you identifying the elements slowing down the page construction.** - default: false - selector: - boolean: ##### Media player update ##### media_player_update_interval: name: Media player - Update interval @@ -3927,6 +3252,26 @@ blueprint: value: "toggle" - label: "Trigger" value: "trigger" + ##### Wake-up sensors ##### + wake_up_sensors: + name: Wake-up sensors + description: > + *SYSTEM settings* + + *Select a sensors to wake-up the panel when the sensor turns **ON**.* + + default: [] + selector: + entity: + multiple: true + filter: + domain: + - binary_sensor + device_class: + - motion + - occupancy + - door + # yamllint enable rule:indentation rule:comments-indentation ############################################################# ##### CLOSE - INPUT ##### @@ -3946,31 +3291,89 @@ trigger_variables: nspanel_deviceid: !input 'nspanel_name' nspanel_entities: '{{ device_entities(nspanel_deviceid) }}' nspanel_name: > - {% if nspanel_entities | count > 0 %}{{ (nspanel_entities | selectattr(None, "search", "_nextion_display") | list | first).split(".")[1].split("_nextion_display")[0] }} - {% elif nspanel_deviceid is string %}{{ nspanel_deviceid | replace("-","_") | replace(" ","_") | replace("___","_") | replace("__","_") }} - {% endif %} - left_button: 'binary_sensor.{{ nspanel_name }}_left_button' - right_button: 'binary_sensor.{{ nspanel_name }}_right_button' - nextion_inited: 'binary_sensor.{{ nspanel_name }}_nextion_display' - currentpage: 'sensor.{{ nspanel_name }}_current_page' - relay01_entity: 'switch.{{ nspanel_name }}_relay_1' - relay02_entity: 'switch.{{ nspanel_name }}_relay_2' - nspaneltemp: 'sensor.{{ nspanel_name }}_temperature' - thermostat_embedded: 'climate.{{ nspanel_name }}_thermostat' - detailed_entity: 'sensor.{{ nspanel_name }}_detailed_entity' - notification_unread: 'switch.{{ nspanel_name }}_notification_unread' + {%- if nspanel_entities | count > 0 %} + {{ (nspanel_entities | selectattr(None, "search", "_nextion_display") | list | first).split(".")[1].split("_nextion_display")[0] }} + {%- elif nspanel_deviceid is string %} + {{ nspanel_deviceid | regex_replace("[^a-zA-Z0-9]", "_") | regex_replace("_+", "_") | lower }} + {%- endif %} + + left_button: > + {{ + nspanel_entities | selectattr(None, "search", "binary_sensor.*_left_button") | list | last + if nspanel_entities | selectattr(None, "search", "binary_sensor.*_left_button") | list | count > 0 + else ("binary_sensor." ~ nspanel_name ~ "_left_button") + }} + right_button: > + {{ + nspanel_entities | selectattr(None, "search", "binary_sensor.*_right_button") | list | last + if nspanel_entities | selectattr(None, "search", "binary_sensor.*_right_button") | list | count > 0 + else ("binary_sensor." ~ nspanel_name ~ "_right_button") + }} + + relay01_entity: > + {{ + nspanel_entities | selectattr(None, "search", "switch.*_relay_1") | list | last + if nspanel_entities | selectattr(None, "search", "switch.*_relay_1") | list | count > 0 + else ("switch." ~ nspanel_name ~ "_relay_1") + }} + relay02_entity: > + {{ + nspanel_entities | selectattr(None, "search", "switch.*_relay_2") | list | last + if nspanel_entities | selectattr(None, "search", "switch.*_relay_2") | list | count > 0 + else ("switch." ~ nspanel_name ~ "_relay_2") + }} + + blueprint_entity: > + {{ + nspanel_entities | selectattr(None, "search", "binary_sensor.*_blueprint") | list | last + if nspanel_entities | selectattr(None, "search", "binary_sensor.*_blueprint") | list | count > 0 + else ("binary_sensor." ~ nspanel_name ~ "_blueprint") + }} + currentpage: > + {{ + nspanel_entities | selectattr(None, "search", "sensor.*_current_page") | list | last + if nspanel_entities | selectattr(None, "search", "sensor.*_current_page") | list | count > 0 + else ("sensor." ~ nspanel_name ~ "_current_page") + }} + detailed_entity: > + {{ + nspanel_entities | selectattr(None, "search", "sensor.*_detailed_entity") | list | last + if nspanel_entities | selectattr(None, "search", "sensor.*_detailed_entity") | list | count > 0 + else ("sensor." ~ nspanel_name ~ "_detailed_entity") + }} + nextion_inited: > + {{ + nspanel_entities | selectattr(None, "search", "binary_sensor.*_nextion_display") | list | last + if nspanel_entities | selectattr(None, "search", "binary_sensor.*_nextion_display") | list | count > 0 + else ("binary_sensor." ~ nspanel_name ~ "_nextion_display") + }} + + nspaneltemp: > + {{ + nspanel_entities | selectattr(None, "search", "sensor.*_temperature") | list | last + if nspanel_entities | selectattr(None, "search", "sensor.*_temperature") | list | count > 0 + else ("sensor." ~ nspanel_name ~ "_temperature") + }} + notification_unread: > + {{ + nspanel_entities | selectattr(None, "search", "switch.*_notification_unread") | list | last + if nspanel_entities | selectattr(None, "search", "switch.*_notification_unread") | list | count > 0 + else ("switch." ~ nspanel_name ~ "_notification_unread") + }} + + thermostat_embedded: > + {{ + nspanel_entities | selectattr(None, "search", "climate.*_thermostat") | list | last + if nspanel_entities | selectattr(None, "search", "climate.*_thermostat") | list | count > 0 + else ("climate." ~ nspanel_name ~ "_thermostat") + }} variables: ##### GENERAL ##### - blueprint_version: '4.2.4' + blueprint_version: '4.2.5' date_format_temp: !input 'date_format' # Avoid breaking change for existing users with legacy type format - date_format: > - {{ - date_format_temp - if date_format_temp not in ["%d.%m", "%d/%m", "%-d/%-m", "%-m/%-d"] - else "%A, " ~ date_format_temp - }} + date_format: '{{ date_format_temp if date_format_temp not in ["%d.%m", "%d/%m", "%-d/%-m", "%-m/%-d"] else "%A, " ~ date_format_temp }}' sun_is_up: '{{ is_state("sun.sun", "above_horizon") }}' @@ -3983,6 +3386,8 @@ variables: all_icons: { blank: "\uFFFF", unknown: "\uE027", unavailable: "\uE027", ab-testing: "\uE1C8", abacus: "\uF6DF", abjad-arabic: "\uF327", abjad-hebrew: "\uF328", abugida-devanagari: "\uF329", abugida-thai: "\uF32A", access-point: "\uE002", access-point-check: "\uF537", access-point-minus: "\uF538", access-point-network: "\uE001", access-point-network-off: "\uEBE0", access-point-off: "\uF510", access-point-plus: "\uF539", access-point-remove: "\uF53A", account: "\uE003", account-alert: "\uE004", account-alert-outline: "\uEB4F", account-arrow-down: "\uF867", account-arrow-down-outline: "\uF868", account-arrow-left: "\uEB50", account-arrow-left-outline: "\uEB51", account-arrow-right: "\uEB52", account-arrow-right-outline: "\uEB53", account-arrow-up: "\uF866", account-arrow-up-outline: "\uF869", account-box: "\uE005", account-box-multiple: "\uE933", account-box-multiple-outline: "\uF009", account-box-outline: "\uE006", account-cancel: "\uF2DE", account-cancel-outline: "\uF2DF", account-cash: "\uF096", account-cash-outline: "\uF097", account-check: "\uE007", account-check-outline: "\uEBE1", account-child: "\uEA88", account-child-circle: "\uEA89", account-child-outline: "\uF0C7", account-circle: "\uE008", account-circle-outline: "\uEB54", account-clock: "\uEB55", account-clock-outline: "\uEB56", account-cog: "\uF36F", account-cog-outline: "\uF370", account-convert: "\uE009", account-convert-outline: "\uF300", account-cowboy-hat: "\uEE9A", account-cowboy-hat-outline: "\uF7F2", account-details: "\uE630", account-details-outline: "\uF371", account-edit: "\uE6BB", account-edit-outline: "\uEFFA", account-eye: "\uE41F", account-eye-outline: "\uF27A", account-filter: "\uE935", account-filter-outline: "\uEF9C", account-group: "\uE848", account-group-outline: "\uEB57", account-hard-hat: "\uE5B4", account-hard-hat-outline: "\uFA1E", account-heart: "\uE898", account-heart-outline: "\uEBE2", account-injury: "\uF814", account-injury-outline: "\uF815", account-key: "\uE00A", account-key-outline: "\uEBE3", account-lock: "\uF15D", account-lock-open: "\uF95F", account-lock-open-outline: "\uF960", account-lock-outline: "\uF15E", account-minus: "\uE00C", account-minus-outline: "\uEAEB", account-multiple: "\uE00D", account-multiple-check: "\uE8C4", account-multiple-check-outline: "\uF1FD", account-multiple-minus: "\uE5D2", account-multiple-minus-outline: "\uEBE4", account-multiple-outline: "\uE00E", account-multiple-plus: "\uE00F", account-multiple-plus-outline: "\uE7FF", account-multiple-remove: "\uF209", account-multiple-remove-outline: "\uF20A", account-music: "\uE802", account-music-outline: "\uECE8", account-network: "\uE010", account-network-outline: "\uEBE5", account-off: "\uE011", account-off-outline: "\uEBE6", account-outline: "\uE012", account-plus: "\uE013", account-plus-outline: "\uE800", account-question: "\uEB58", account-question-outline: "\uEB59", account-reactivate: "\uF52A", account-reactivate-outline: "\uF52B", account-remove: "\uE014", account-remove-outline: "\uEAEC", account-school: "\uFA1F", account-school-outline: "\uFA20", account-search: "\uE015", account-search-outline: "\uE934", account-settings: "\uE62F", account-settings-outline: "\uF0C8", account-star: "\uE016", account-star-outline: "\uEBE7", account-supervisor: "\uEA8A", account-supervisor-circle: "\uEA8B", account-supervisor-circle-outline: "\uF4EB", account-supervisor-outline: "\uF12C", account-switch: "\uE018", account-switch-outline: "\uE4CA", account-sync: "\uF91A", account-sync-outline: "\uF91B", account-tie: "\uECE2", account-tie-hat: "\uF897", account-tie-hat-outline: "\uF898", account-tie-outline: "\uF0C9", account-tie-voice: "\uF307", account-tie-voice-off: "\uF309", account-tie-voice-off-outline: "\uF30A", account-tie-voice-outline: "\uF308", account-tie-woman: "\uFA8B", account-voice: "\uE5CA", account-voice-off: "\uEED3", account-wrench: "\uF899", account-wrench-outline: "\uF89A", adjust: "\uE019", advertisements: "\uF929", advertisements-off: "\uF92A", air-conditioner: "\uE01A", air-filter: "\uED42", air-horn: "\uEDAB", air-humidifier: "\uF098", air-humidifier-off: "\uF465", air-purifier: "\uED43", airbag: "\uEBE8", airballoon: "\uE01B", airballoon-outline: "\uF00A", airplane: "\uE01C", airplane-alert: "\uF879", airplane-check: "\uF87A", airplane-clock: "\uF87B", airplane-cog: "\uF87C", airplane-edit: "\uF87D", airplane-landing: "\uE5D3", airplane-marker: "\uF87E", airplane-minus: "\uF87F", airplane-off: "\uE01D", airplane-plus: "\uF880", airplane-remove: "\uF881", airplane-search: "\uF882", airplane-settings: "\uF883", airplane-takeoff: "\uE5D4", airport: "\uE84A", alarm: "\uE01F", alarm-bell: "\uE78D", alarm-check: "\uE020", alarm-light: "\uE78E", alarm-light-off: "\uF71D", alarm-light-off-outline: "\uF71E", alarm-light-outline: "\uEBE9", alarm-multiple: "\uE021", alarm-note: "\uEE70", alarm-note-off: "\uEE71", alarm-off: "\uE022", alarm-panel: "\uF5C3", alarm-panel-outline: "\uF5C4", alarm-plus: "\uE023", alarm-snooze: "\uE68D", album: "\uE024", alert: "\uE025", alert-box: "\uE026", alert-box-outline: "\uECE3", alert-circle: "\uE027", alert-circle-check: "\uF1EC", alert-circle-check-outline: "\uF1ED", alert-circle-outline: "\uE5D5", alert-decagram: "\uE6BC", alert-decagram-outline: "\uECE4", alert-minus: "\uF4BA", alert-minus-outline: "\uF4BD", alert-octagon: "\uE028", alert-octagon-outline: "\uECE5", alert-octagram: "\uE766", alert-octagram-outline: "\uECE6", alert-outline: "\uE029", alert-plus: "\uF4B9", alert-plus-outline: "\uF4BC", alert-remove: "\uF4BB", alert-remove-outline: "\uF4BE", alert-rhombus: "\uF1CD", alert-rhombus-outline: "\uF1CE", alien: "\uE899", alien-outline: "\uF0CA", align-horizontal-center: "\uF1C2", align-horizontal-distribute: "\uF961", align-horizontal-left: "\uF1C1", align-horizontal-right: "\uF1C3", align-vertical-bottom: "\uF1C4", align-vertical-center: "\uF1C5", align-vertical-distribute: "\uF962", align-vertical-top: "\uF1C6", all-inclusive: "\uE6BD", all-inclusive-box: "\uF88C", all-inclusive-box-outline: "\uF88D", allergy: "\uF257", alpha: "\uE02A", alpha-a: "\uEAED", alpha-a-box: "\uEB07", alpha-a-box-outline: "\uEBEA", alpha-a-circle: "\uEBEB", alpha-a-circle-outline: "\uEBEC", alpha-b: "\uEAEE", alpha-b-box: "\uEB08", alpha-b-box-outline: "\uEBED", alpha-b-circle: "\uEBEE", alpha-b-circle-outline: "\uEBEF", alpha-c: "\uEAEF", alpha-c-box: "\uEB09", alpha-c-box-outline: "\uEBF0", alpha-c-circle: "\uEBF1", alpha-c-circle-outline: "\uEBF2", alpha-d: "\uEAF0", alpha-d-box: "\uEB0A", alpha-d-box-outline: "\uEBF3", alpha-d-circle: "\uEBF4", alpha-d-circle-outline: "\uEBF5", alpha-e: "\uEAF1", alpha-e-box: "\uEB0B", alpha-e-box-outline: "\uEBF6", alpha-e-circle: "\uEBF7", alpha-e-circle-outline: "\uEBF8", alpha-f: "\uEAF2", alpha-f-box: "\uEB0C", alpha-f-box-outline: "\uEBF9", alpha-f-circle: "\uEBFA", alpha-f-circle-outline: "\uEBFB", alpha-g: "\uEAF3", alpha-g-box: "\uEB0D", alpha-g-box-outline: "\uEBFC", alpha-g-circle: "\uEBFD", alpha-g-circle-outline: "\uEBFE", alpha-h: "\uEAF4", alpha-h-box: "\uEB0E", alpha-h-box-outline: "\uEBFF", alpha-h-circle: "\uEC00", alpha-h-circle-outline: "\uEC01", alpha-i: "\uEAF5", alpha-i-box: "\uEB0F", alpha-i-box-outline: "\uEC02", alpha-i-circle: "\uEC03", alpha-i-circle-outline: "\uEC04", alpha-j: "\uEAF6", alpha-j-box: "\uEB10", alpha-j-box-outline: "\uEC05", alpha-j-circle: "\uEC06", alpha-j-circle-outline: "\uEC07", alpha-k: "\uEAF7", alpha-k-box: "\uEB11", alpha-k-box-outline: "\uEC08", alpha-k-circle: "\uEC09", alpha-k-circle-outline: "\uEC0A", alpha-l: "\uEAF8", alpha-l-box: "\uEB12", alpha-l-box-outline: "\uEC0B", alpha-l-circle: "\uEC0C", alpha-l-circle-outline: "\uEC0D", alpha-m: "\uEAF9", alpha-m-box: "\uEB13", alpha-m-box-outline: "\uEC0E", alpha-m-circle: "\uEC0F", alpha-m-circle-outline: "\uEC10", alpha-n: "\uEAFA", alpha-n-box: "\uEB14", alpha-n-box-outline: "\uEC11", alpha-n-circle: "\uEC12", alpha-n-circle-outline: "\uEC13", alpha-o: "\uEAFB", alpha-o-box: "\uEB15", alpha-o-box-outline: "\uEC14", alpha-o-circle: "\uEC15", alpha-o-circle-outline: "\uEC16", alpha-p: "\uEAFC", alpha-p-box: "\uEB16", alpha-p-box-outline: "\uEC17", alpha-p-circle: "\uEC18", alpha-p-circle-outline: "\uEC19", alpha-q: "\uEAFD", alpha-q-box: "\uEB17", alpha-q-box-outline: "\uEC1A", alpha-q-circle: "\uEC1B", alpha-q-circle-outline: "\uEC1C", alpha-r: "\uEAFE", alpha-r-box: "\uEB18", alpha-r-box-outline: "\uEC1D", alpha-r-circle: "\uEC1E", alpha-r-circle-outline: "\uEC1F", alpha-s: "\uEAFF", alpha-s-box: "\uEB19", alpha-s-box-outline: "\uEC20", alpha-s-circle: "\uEC21", alpha-s-circle-outline: "\uEC22", alpha-t: "\uEB00", alpha-t-box: "\uEB1A", alpha-t-box-outline: "\uEC23", alpha-t-circle: "\uEC24", alpha-t-circle-outline: "\uEC25", alpha-u: "\uEB01", alpha-u-box: "\uEB1B", alpha-u-box-outline: "\uEC26", alpha-u-circle: "\uEC27", alpha-u-circle-outline: "\uEC28", alpha-v: "\uEB02", alpha-v-box: "\uEB1C", alpha-v-box-outline: "\uEC29", alpha-v-circle: "\uEC2A", alpha-v-circle-outline: "\uEC2B", alpha-w: "\uEB03", alpha-w-box: "\uEB1D", alpha-w-box-outline: "\uEC2C", alpha-w-circle: "\uEC2D", alpha-w-circle-outline: "\uEC2E", alpha-x: "\uEB04", alpha-x-box: "\uEB1E", alpha-x-box-outline: "\uEC2F", alpha-x-circle: "\uEC30", alpha-x-circle-outline: "\uEC31", alpha-y: "\uEB05", alpha-y-box: "\uEB1F", alpha-y-box-outline: "\uEC32", alpha-y-circle: "\uEC33", alpha-y-circle-outline: "\uEC34", alpha-z: "\uEB06", alpha-z-box: "\uEB20", alpha-z-box-outline: "\uEC35", alpha-z-circle: "\uEC36", alpha-z-circle-outline: "\uEC37", alphabet-aurebesh: "\uF32B", alphabet-cyrillic: "\uF32C", alphabet-greek: "\uF32D", alphabet-latin: "\uF32E", alphabet-piqad: "\uF32F", alphabet-tengwar: "\uF336", alphabetical: "\uE02B", alphabetical-off: "\uF00B", alphabetical-variant: "\uF00C", alphabetical-variant-off: "\uF00D", altimeter: "\uE5D6", ambulance: "\uE02E", ammunition: "\uECE7", ampersand: "\uEA8C", amplifier: "\uE02F", amplifier-off: "\uF1B4", anchor: "\uE030", android: "\uE031", android-messages: "\uED44", android-studio: "\uE033", angle-acute: "\uE936", angle-obtuse: "\uE937", angle-right: "\uE938", angular: "\uE6B1", angularjs: "\uE6BE", animation: "\uE5D7", animation-outline: "\uEA8E", animation-play: "\uE939", animation-play-outline: "\uEA8F", ansible: "\uF099", antenna: "\uF118", anvil: "\uE89A", apache-kafka: "\uF00E", api: "\uF09A", api-off: "\uF256", apple: "\uE034", apple-finder: "\uE035", apple-icloud: "\uE037", apple-ios: "\uE036", apple-keyboard-caps: "\uE631", apple-keyboard-command: "\uE632", apple-keyboard-control: "\uE633", apple-keyboard-option: "\uE634", apple-keyboard-shift: "\uE635", apple-safari: "\uE038", application: "\uE8C5", application-array: "\uF0F4", application-array-outline: "\uF0F5", application-braces: "\uF0F6", application-braces-outline: "\uF0F7", application-brackets: "\uEC8A", application-brackets-outline: "\uEC8B", application-cog: "\uE674", application-cog-outline: "\uF576", application-edit: "\uE0AD", application-edit-outline: "\uE618", application-export: "\uEDAC", application-import: "\uEDAD", application-outline: "\uE613", application-parentheses: "\uF0F8", application-parentheses-outline: "\uF0F9", application-settings: "\uEB5F", application-settings-outline: "\uF554", application-variable: "\uF0FA", application-variable-outline: "\uF0FB", approximately-equal: "\uEF9D", approximately-equal-box: "\uEF9E", apps: "\uE03A", apps-box: "\uED45", arch: "\uE8C6", archive: "\uE03B", archive-alert: "\uF4FC", archive-alert-outline: "\uF4FD", archive-arrow-down: "\uF258", archive-arrow-down-outline: "\uF259", archive-arrow-up: "\uF25A", archive-arrow-up-outline: "\uF25B", archive-cancel: "\uF74A", archive-cancel-outline: "\uF74B", archive-check: "\uF74C", archive-check-outline: "\uF74D", archive-clock: "\uF74E", archive-clock-outline: "\uF74F", archive-cog: "\uF750", archive-cog-outline: "\uF751", archive-edit: "\uF752", archive-edit-outline: "\uF753", archive-eye: "\uF754", archive-eye-outline: "\uF755", archive-lock: "\uF756", archive-lock-open: "\uF757", archive-lock-open-outline: "\uF758", archive-lock-outline: "\uF759", archive-marker: "\uF75A", archive-marker-outline: "\uF75B", archive-minus: "\uF75C", archive-minus-outline: "\uF75D", archive-music: "\uF75E", archive-music-outline: "\uF75F", archive-off: "\uF760", archive-off-outline: "\uF761", archive-outline: "\uF20D", archive-plus: "\uF762", archive-plus-outline: "\uF763", archive-refresh: "\uF764", archive-refresh-outline: "\uF765", archive-remove: "\uF766", archive-remove-outline: "\uF767", archive-search: "\uF768", archive-search-outline: "\uF769", archive-settings: "\uF76A", archive-settings-outline: "\uF76B", archive-star: "\uF76C", archive-star-outline: "\uF76D", archive-sync: "\uF76E", archive-sync-outline: "\uF76F", arm-flex: "\uEFD6", arm-flex-outline: "\uEFD5", arrange-bring-forward: "\uE03C", arrange-bring-to-front: "\uE03D", arrange-send-backward: "\uE03E", arrange-send-to-back: "\uE03F", arrow-all: "\uE040", arrow-bottom-left: "\uE041", arrow-bottom-left-bold-box: "\uF963", arrow-bottom-left-bold-box-outline: "\uF964", arrow-bottom-left-bold-outline: "\uE9B6", arrow-bottom-left-thick: "\uE9B7", arrow-bottom-left-thin: "\uF9B5", arrow-bottom-left-thin-circle-outline: "\uF595", arrow-bottom-right: "\uE042", arrow-bottom-right-bold-box: "\uF965", arrow-bottom-right-bold-box-outline: "\uF966", arrow-bottom-right-bold-outline: "\uE9B8", arrow-bottom-right-thick: "\uE9B9", arrow-bottom-right-thin: "\uF9B6", arrow-bottom-right-thin-circle-outline: "\uF594", arrow-collapse: "\uE614", arrow-collapse-all: "\uE043", arrow-collapse-down: "\uE791", arrow-collapse-horizontal: "\uE84B", arrow-collapse-left: "\uE792", arrow-collapse-right: "\uE793", arrow-collapse-up: "\uE794", arrow-collapse-vertical: "\uE84C", arrow-decision: "\uE9BA", arrow-decision-auto: "\uE9BB", arrow-decision-auto-outline: "\uE9BC", arrow-decision-outline: "\uE9BD", arrow-down: "\uE044", arrow-down-bold: "\uE72D", arrow-down-bold-box: "\uE72E", arrow-down-bold-box-outline: "\uE72F", arrow-down-bold-circle: "\uE046", arrow-down-bold-circle-outline: "\uE047", arrow-down-bold-hexagon-outline: "\uE048", arrow-down-bold-outline: "\uE9BE", arrow-down-box: "\uE6BF", arrow-down-circle: "\uECDA", arrow-down-circle-outline: "\uECDB", arrow-down-drop-circle: "\uE049", arrow-down-drop-circle-outline: "\uE04A", arrow-down-left: "\uF7A0", arrow-down-left-bold: "\uF7A1", arrow-down-right: "\uF7A2", arrow-down-right-bold: "\uF7A3", arrow-down-thick: "\uE045", arrow-down-thin: "\uF9B2", arrow-down-thin-circle-outline: "\uF598", arrow-expand: "\uE615", arrow-expand-all: "\uE04B", arrow-expand-down: "\uE795", arrow-expand-horizontal: "\uE84D", arrow-expand-left: "\uE796", arrow-expand-right: "\uE797", arrow-expand-up: "\uE798", arrow-expand-vertical: "\uE84E", arrow-horizontal-lock: "\uF15A", arrow-left: "\uE04C", arrow-left-bold: "\uE730", arrow-left-bold-box: "\uE731", arrow-left-bold-box-outline: "\uE732", arrow-left-bold-circle: "\uE04E", arrow-left-bold-circle-outline: "\uE04F", arrow-left-bold-hexagon-outline: "\uE050", arrow-left-bold-outline: "\uE9BF", arrow-left-bottom: "\uF7A4", arrow-left-bottom-bold: "\uF7A5", arrow-left-box: "\uE6C0", arrow-left-circle: "\uECDC", arrow-left-circle-outline: "\uECDD", arrow-left-drop-circle: "\uE051", arrow-left-drop-circle-outline: "\uE052", arrow-left-right: "\uEE72", arrow-left-right-bold: "\uEE73", arrow-left-right-bold-outline: "\uE9C0", arrow-left-thick: "\uE04D", arrow-left-thin: "\uF9B0", arrow-left-thin-circle-outline: "\uF599", arrow-left-top: "\uF7A6", arrow-left-top-bold: "\uF7A7", arrow-projectile: "\uF83F", arrow-projectile-multiple: "\uF83E", arrow-right: "\uE053", arrow-right-bold: "\uE733", arrow-right-bold-box: "\uE734", arrow-right-bold-box-outline: "\uE735", arrow-right-bold-circle: "\uE055", arrow-right-bold-circle-outline: "\uE056", arrow-right-bold-hexagon-outline: "\uE057", arrow-right-bold-outline: "\uE9C1", arrow-right-bottom: "\uF7A8", arrow-right-bottom-bold: "\uF7A9", arrow-right-box: "\uE6C1", arrow-right-circle: "\uECDE", arrow-right-circle-outline: "\uECDF", arrow-right-drop-circle: "\uE058", arrow-right-drop-circle-outline: "\uE059", arrow-right-thick: "\uE054", arrow-right-thin: "\uF9AF", arrow-right-thin-circle-outline: "\uF597", arrow-right-top: "\uF7AA", arrow-right-top-bold: "\uF7AB", arrow-split-horizontal: "\uE93A", arrow-split-vertical: "\uE93B", arrow-top-left: "\uE05A", arrow-top-left-bold-box: "\uF967", arrow-top-left-bold-box-outline: "\uF968", arrow-top-left-bold-outline: "\uE9C2", arrow-top-left-bottom-right: "\uEE74", arrow-top-left-bottom-right-bold: "\uEE75", arrow-top-left-thick: "\uE9C3", arrow-top-left-thin: "\uF9B4", arrow-top-left-thin-circle-outline: "\uF592", arrow-top-right: "\uE05B", arrow-top-right-bold-box: "\uF969", arrow-top-right-bold-box-outline: "\uF96A", arrow-top-right-bold-outline: "\uE9C4", arrow-top-right-bottom-left: "\uEE76", arrow-top-right-bottom-left-bold: "\uEE77", arrow-top-right-thick: "\uE9C5", arrow-top-right-thin: "\uF9B3", arrow-top-right-thin-circle-outline: "\uF593", arrow-u-down-left: "\uF7AC", arrow-u-down-left-bold: "\uF7AD", arrow-u-down-right: "\uF7AE", arrow-u-down-right-bold: "\uF7AF", arrow-u-left-bottom: "\uF7B0", arrow-u-left-bottom-bold: "\uF7B1", arrow-u-left-top: "\uF7B2", arrow-u-left-top-bold: "\uF7B3", arrow-u-right-bottom: "\uF7B4", arrow-u-right-bottom-bold: "\uF7B5", arrow-u-right-top: "\uF7B6", arrow-u-right-top-bold: "\uF7B7", arrow-u-up-left: "\uF7B8", arrow-u-up-left-bold: "\uF7B9", arrow-u-up-right: "\uF7BA", arrow-u-up-right-bold: "\uF7BB", arrow-up: "\uE05C", arrow-up-bold: "\uE736", arrow-up-bold-box: "\uE737", arrow-up-bold-box-outline: "\uE738", arrow-up-bold-circle: "\uE05E", arrow-up-bold-circle-outline: "\uE05F", arrow-up-bold-hexagon-outline: "\uE060", arrow-up-bold-outline: "\uE9C6", arrow-up-box: "\uE6C2", arrow-up-circle: "\uECE0", arrow-up-circle-outline: "\uECE1", arrow-up-down: "\uEE78", arrow-up-down-bold: "\uEE79", arrow-up-down-bold-outline: "\uE9C7", arrow-up-drop-circle: "\uE061", arrow-up-drop-circle-outline: "\uE062", arrow-up-left: "\uF7BC", arrow-up-left-bold: "\uF7BD", arrow-up-right: "\uF7BE", arrow-up-right-bold: "\uF7BF", arrow-up-thick: "\uE05D", arrow-up-thin: "\uF9B1", arrow-up-thin-circle-outline: "\uF596", arrow-vertical-lock: "\uF15B", artstation: "\uEB5A", aspect-ratio: "\uEA23", assistant: "\uE063", asterisk: "\uE6C3", asterisk-circle-outline: "\uFA26", at: "\uE064", atlassian: "\uE803", atm: "\uED46", atom: "\uE767", atom-variant: "\uEE7A", attachment: "\uE065", attachment-check: "\uFAC0", attachment-lock: "\uF9C3", attachment-minus: "\uFAC1", attachment-off: "\uFAC2", attachment-plus: "\uFAC3", attachment-remove: "\uFAC4", audio-input-rca: "\uF86A", audio-input-stereo-minijack: "\uF86B", audio-input-xlr: "\uF86C", audio-video: "\uE93C", audio-video-off: "\uF1B5", augmented-reality: "\uE84F", auto-download: "\uF37D", auto-fix: "\uE067", auto-upload: "\uE068", autorenew: "\uE069", autorenew-off: "\uF9E6", av-timer: "\uE06A", aws: "\uEE0E", axe: "\uE8C7", axe-battle: "\uF841", axis: "\uED47", axis-arrow: "\uED48", axis-arrow-info: "\uF40D", axis-arrow-lock: "\uED49", axis-lock: "\uED4A", axis-x-arrow: "\uED4B", axis-x-arrow-lock: "\uED4C", axis-x-rotate-clockwise: "\uED4D", axis-x-rotate-counterclockwise: "\uED4E", axis-x-y-arrow-lock: "\uED4F", axis-y-arrow: "\uED50", axis-y-arrow-lock: "\uED51", axis-y-rotate-clockwise: "\uED52", axis-y-rotate-counterclockwise: "\uED53", axis-z-arrow: "\uED54", axis-z-arrow-lock: "\uED55", axis-z-rotate-clockwise: "\uED56", axis-z-rotate-counterclockwise: "\uED57", babel: "\uEA24", baby: "\uE06B", baby-bottle: "\uEF38", baby-bottle-outline: "\uEF39", baby-buggy: "\uF3DF", baby-carriage: "\uE68E", baby-carriage-off: "\uEF9F", baby-face: "\uEE7B", baby-face-outline: "\uEE7C", backburger: "\uE06C", backspace: "\uE06D", backspace-outline: "\uEB5B", backspace-reverse: "\uEE7D", backspace-reverse-outline: "\uEE7E", backup-restore: "\uE06E", bacteria: "\uEED4", bacteria-outline: "\uEED5", badge-account: "\uEDA6", badge-account-alert: "\uEDA7", badge-account-alert-outline: "\uEDA8", badge-account-horizontal: "\uEE0C", badge-account-horizontal-outline: "\uEE0D", badge-account-outline: "\uEDA9", badminton: "\uE850", bag-carry-on: "\uEF3A", bag-carry-on-check: "\uED64", bag-carry-on-off: "\uEF3B", bag-checked: "\uEF3C", bag-personal: "\uEE0F", bag-personal-off: "\uEE10", bag-personal-off-outline: "\uEE11", bag-personal-outline: "\uEE12", bag-suitcase: "\uF58A", bag-suitcase-off: "\uF58C", bag-suitcase-off-outline: "\uF58D", bag-suitcase-outline: "\uF58B", baguette: "\uEF3D", balcony: "\uF816", balloon: "\uEA25", ballot: "\uE9C8", ballot-outline: "\uE9C9", ballot-recount: "\uEC38", ballot-recount-outline: "\uEC39", bandage: "\uEDAE", bank: "\uE06F", bank-check: "\uF654", bank-minus: "\uEDAF", bank-off: "\uF655", bank-off-outline: "\uF656", bank-outline: "\uEE7F", bank-plus: "\uEDB0", bank-remove: "\uEDB1", bank-transfer: "\uEA26", bank-transfer-in: "\uEA27", bank-transfer-out: "\uEA28", barcode: "\uE070", barcode-off: "\uF235", barcode-scan: "\uE071", barley: "\uE072", barley-off: "\uEB5C", barn: "\uEB5D", barrel: "\uE073", barrel-outline: "\uFA27", baseball: "\uE851", baseball-bat: "\uE852", baseball-diamond: "\uF5EB", baseball-diamond-outline: "\uF5EC", bash: "\uF182", basket: "\uE075", basket-check: "\uF8E4", basket-check-outline: "\uF8E5", basket-fill: "\uE076", basket-minus: "\uF522", basket-minus-outline: "\uF523", basket-off: "\uF524", basket-off-outline: "\uF525", basket-outline: "\uF180", basket-plus: "\uF526", basket-plus-outline: "\uF527", basket-remove: "\uF528", basket-remove-outline: "\uF529", basket-unfill: "\uE077", basketball: "\uE805", basketball-hoop: "\uEC3A", basketball-hoop-outline: "\uEC3B", bat: "\uEB5E", bathtub: "\uF817", bathtub-outline: "\uF818", battery: "\uE078", battery-10: "\uE079", battery-10-bluetooth: "\uE93D", battery-20: "\uE07A", battery-20-bluetooth: "\uE93E", battery-30: "\uE07B", battery-30-bluetooth: "\uE93F", battery-40: "\uE07C", battery-40-bluetooth: "\uE940", battery-50: "\uE07D", battery-50-bluetooth: "\uE941", battery-60: "\uE07E", battery-60-bluetooth: "\uE942", battery-70: "\uE07F", battery-70-bluetooth: "\uE943", battery-80: "\uE080", battery-80-bluetooth: "\uE944", battery-90: "\uE081", battery-90-bluetooth: "\uE945", battery-alert: "\uE082", battery-alert-bluetooth: "\uE946", battery-alert-variant: "\uF0CB", battery-alert-variant-outline: "\uF0CC", battery-arrow-down: "\uF7DD", battery-arrow-down-outline: "\uF7DE", battery-arrow-up: "\uF7DF", battery-arrow-up-outline: "\uF7E0", battery-bluetooth: "\uE947", battery-bluetooth-variant: "\uE948", battery-charging: "\uE083", battery-charging-10: "\uE89B", battery-charging-100: "\uE084", battery-charging-20: "\uE085", battery-charging-30: "\uE086", battery-charging-40: "\uE087", battery-charging-50: "\uE89C", battery-charging-60: "\uE088", battery-charging-70: "\uE89D", battery-charging-80: "\uE089", battery-charging-90: "\uE08A", battery-charging-high: "\uF2A5", battery-charging-low: "\uF2A3", battery-charging-medium: "\uF2A4", battery-charging-outline: "\uE89E", battery-charging-wireless: "\uE806", battery-charging-wireless-10: "\uE807", battery-charging-wireless-20: "\uE808", battery-charging-wireless-30: "\uE809", battery-charging-wireless-40: "\uE80A", battery-charging-wireless-50: "\uE80B", battery-charging-wireless-60: "\uE80C", battery-charging-wireless-70: "\uE80D", battery-charging-wireless-80: "\uE80E", battery-charging-wireless-90: "\uE80F", battery-charging-wireless-alert: "\uE810", battery-charging-wireless-outline: "\uE811", battery-check: "\uF7E1", battery-check-outline: "\uF7E2", battery-clock: "\uF9E4", battery-clock-outline: "\uF9E5", battery-heart: "\uF20E", battery-heart-outline: "\uF20F", battery-heart-variant: "\uF210", battery-high: "\uF2A2", battery-lock: "\uF79B", battery-lock-open: "\uF79C", battery-low: "\uF2A0", battery-medium: "\uF2A1", battery-minus: "\uF7E3", battery-minus-outline: "\uF7E4", battery-minus-variant: "\uE08B", battery-negative: "\uE08C", battery-off: "\uF25C", battery-off-outline: "\uF25D", battery-outline: "\uE08D", battery-plus: "\uF7E5", battery-plus-outline: "\uF7E6", battery-plus-variant: "\uE08E", battery-positive: "\uE08F", battery-remove: "\uF7E7", battery-remove-outline: "\uF7E8", battery-sync: "\uF833", battery-sync-outline: "\uF834", battery-unknown: "\uE090", battery-unknown-bluetooth: "\uE949", beach: "\uE091", beaker: "\uECE9", beaker-alert: "\uF228", beaker-alert-outline: "\uF229", beaker-check: "\uF22A", beaker-check-outline: "\uF22B", beaker-minus: "\uF22C", beaker-minus-outline: "\uF22D", beaker-outline: "\uE68F", beaker-plus: "\uF22E", beaker-plus-outline: "\uF22F", beaker-question: "\uF230", beaker-question-outline: "\uF231", beaker-remove: "\uF232", beaker-remove-outline: "\uF233", bed: "\uE2E2", bed-double: "\uEFD3", bed-double-outline: "\uEFD2", bed-empty: "\uE89F", bed-king: "\uEFD1", bed-king-outline: "\uEFD0", bed-outline: "\uE098", bed-queen: "\uEFCF", bed-queen-outline: "\uEFDA", bed-single: "\uF06C", bed-single-outline: "\uF06D", bee: "\uEFA0", bee-flower: "\uEFA1", beehive-off-outline: "\uF3EC", beehive-outline: "\uF0CD", beekeeper: "\uF4E1", beer: "\uE097", beer-outline: "\uF30B", bell: "\uE099", bell-alert: "\uED58", bell-alert-outline: "\uEE80", bell-badge: "\uF16A", bell-badge-outline: "\uE177", bell-cancel: "\uF3E6", bell-cancel-outline: "\uF3E7", bell-check: "\uF1E4", bell-check-outline: "\uF1E5", bell-circle: "\uED59", bell-circle-outline: "\uED5A", bell-cog: "\uFA28", bell-cog-outline: "\uFA29", bell-minus: "\uF3E8", bell-minus-outline: "\uF3E9", bell-off: "\uE09A", bell-off-outline: "\uEA90", bell-outline: "\uE09B", bell-plus: "\uE09C", bell-plus-outline: "\uEA91", bell-remove: "\uF3EA", bell-remove-outline: "\uF3EB", bell-ring: "\uE09D", bell-ring-outline: "\uE09E", bell-sleep: "\uE09F", bell-sleep-outline: "\uEA92", beta: "\uE0A0", betamax: "\uE9CA", biathlon: "\uEE13", bicycle: "\uF09B", bicycle-basket: "\uF234", bicycle-cargo: "\uF89B", bicycle-electric: "\uF5B3", bicycle-penny-farthing: "\uF5E8", bike: "\uE0A2", bike-fast: "\uF11E", billboard: "\uF00F", billiards: "\uEB60", billiards-rack: "\uEB61", binoculars: "\uE0A4", bio: "\uE0A5", biohazard: "\uE0A6", bird: "\uF5C5", bitbucket: "\uE0A7", bitcoin: "\uE812", black-mesa: "\uE0A8", blender: "\uECEA", blender-outline: "\uF819", blender-software: "\uE0AA", blinds: "\uE0AB", blinds-horizontal: "\uFA2A", blinds-horizontal-closed: "\uFA2B", blinds-open: "\uF010", blinds-vertical: "\uFA2C", blinds-vertical-closed: "\uFA2D", block-helper: "\uE0AC", blood-bag: "\uECEB", bluetooth: "\uE0AE", bluetooth-audio: "\uE0AF", bluetooth-connect: "\uE0B0", bluetooth-off: "\uE0B1", bluetooth-settings: "\uE0B2", bluetooth-transfer: "\uE0B3", blur: "\uE0B4", blur-linear: "\uE0B5", blur-off: "\uE0B6", blur-radial: "\uE0B7", bolt: "\uEDB2", bomb: "\uE690", bomb-off: "\uE6C4", bone: "\uE0B8", bone-off: "\uF9DF", book: "\uE0B9", book-account: "\uF3AC", book-account-outline: "\uF3AD", book-alert: "\uF67B", book-alert-outline: "\uF67C", book-alphabet: "\uE61C", book-arrow-down: "\uF67D", book-arrow-down-outline: "\uF67E", book-arrow-left: "\uF67F", book-arrow-left-outline: "\uF680", book-arrow-right: "\uF681", book-arrow-right-outline: "\uF682", book-arrow-up: "\uF683", book-arrow-up-outline: "\uF684", book-cancel: "\uF685", book-cancel-outline: "\uF686", book-check: "\uF4F2", book-check-outline: "\uF4F3", book-clock: "\uF687", book-clock-outline: "\uF688", book-cog: "\uF689", book-cog-outline: "\uF68A", book-cross: "\uE0A1", book-edit: "\uF68B", book-edit-outline: "\uF68C", book-education: "\uF6C8", book-education-outline: "\uF6C9", book-heart: "\uFA1C", book-heart-outline: "\uFA1D", book-information-variant: "\uF06E", book-lock: "\uE799", book-lock-open: "\uE79A", book-lock-open-outline: "\uF68D", book-lock-outline: "\uF68E", book-marker: "\uF68F", book-marker-outline: "\uF690", book-minus: "\uE5D8", book-minus-multiple: "\uEA93", book-minus-multiple-outline: "\uE90A", book-minus-outline: "\uF691", book-multiple: "\uE0BA", book-multiple-outline: "\uE435", book-music: "\uE066", book-music-outline: "\uF692", book-off: "\uF693", book-off-outline: "\uF694", book-open: "\uE0BC", book-open-blank-variant: "\uE0BD", book-open-outline: "\uEB62", book-open-page-variant: "\uE5D9", book-open-page-variant-outline: "\uF5D5", book-open-variant: "\uF4F6", book-outline: "\uEB63", book-play: "\uEE81", book-play-outline: "\uEE82", book-plus: "\uE5DA", book-plus-multiple: "\uEA94", book-plus-multiple-outline: "\uEADD", book-plus-outline: "\uF695", book-refresh: "\uF696", book-refresh-outline: "\uF697", book-remove: "\uEA96", book-remove-multiple: "\uEA95", book-remove-multiple-outline: "\uE4C9", book-remove-outline: "\uF698", book-search: "\uEE83", book-search-outline: "\uEE84", book-settings: "\uF699", book-settings-outline: "\uF69A", book-sync: "\uF69B", book-sync-outline: "\uF6C7", book-variant: "\uE0BE", book-variant-multiple: "\uE0BB", bookmark: "\uE0BF", bookmark-box-multiple: "\uF96B", bookmark-box-multiple-outline: "\uF96C", bookmark-check: "\uE0C0", bookmark-check-outline: "\uF37A", bookmark-minus: "\uE9CB", bookmark-minus-outline: "\uE9CC", bookmark-multiple: "\uEE14", bookmark-multiple-outline: "\uEE15", bookmark-music: "\uE0C1", bookmark-music-outline: "\uF378", bookmark-off: "\uE9CD", bookmark-off-outline: "\uE9CE", bookmark-outline: "\uE0C2", bookmark-plus: "\uE0C4", bookmark-plus-outline: "\uE0C3", bookmark-remove: "\uE0C5", bookmark-remove-outline: "\uF379", bookshelf: "\uF25E", boom-gate: "\uEE85", boom-gate-alert: "\uEE86", boom-gate-alert-outline: "\uEE87", boom-gate-arrow-down: "\uEE88", boom-gate-arrow-down-outline: "\uEE89", boom-gate-arrow-up: "\uEE8B", boom-gate-arrow-up-outline: "\uEE8C", boom-gate-outline: "\uEE8A", boom-gate-up: "\uF7F8", boom-gate-up-outline: "\uF7F9", boombox: "\uE5DB", boomerang: "\uF0CE", bootstrap: "\uE6C5", border-all: "\uE0C6", border-all-variant: "\uE8A0", border-bottom: "\uE0C7", border-bottom-variant: "\uE8A1", border-color: "\uE0C8", border-horizontal: "\uE0C9", border-inside: "\uE0CA", border-left: "\uE0CB", border-left-variant: "\uE8A2", border-none: "\uE0CC", border-none-variant: "\uE8A3", border-outside: "\uE0CD", border-right: "\uE0CE", border-right-variant: "\uE8A4", border-style: "\uE0CF", border-top: "\uE0D0", border-top-variant: "\uE8A5", border-vertical: "\uE0D1", bottle-soda: "\uF06F", bottle-soda-classic: "\uF070", bottle-soda-classic-outline: "\uF362", bottle-soda-outline: "\uF071", bottle-tonic: "\uF12D", bottle-tonic-outline: "\uF12E", bottle-tonic-plus: "\uF12F", bottle-tonic-plus-outline: "\uF130", bottle-tonic-skull: "\uF131", bottle-tonic-skull-outline: "\uF132", bottle-wine: "\uE853", bottle-wine-outline: "\uF30F", bow-arrow: "\uF840", bow-tie: "\uE677", bowl: "\uE28D", bowl-mix: "\uE616", bowl-mix-outline: "\uE2E3", bowl-outline: "\uE2A8", bowling: "\uE0D2", box: "\uE0D3", box-cutter: "\uE0D4", box-cutter-off: "\uEB49", box-shadow: "\uE636", boxing-glove: "\uEB64", braille: "\uE9CF", brain: "\uE9D0", bread-slice: "\uECED", bread-slice-outline: "\uECEE", bridge: "\uE617", briefcase: "\uE0D5", briefcase-account: "\uECEF", briefcase-account-outline: "\uECF0", briefcase-arrow-left-right: "\uFA8C", briefcase-arrow-left-right-outline: "\uFA8D", briefcase-arrow-up-down: "\uFA8E", briefcase-arrow-up-down-outline: "\uFA8F", briefcase-check: "\uE0D6", briefcase-check-outline: "\uF31D", briefcase-clock: "\uF0CF", briefcase-clock-outline: "\uF0D0", briefcase-download: "\uE0D7", briefcase-download-outline: "\uEC3C", briefcase-edit: "\uEA97", briefcase-edit-outline: "\uEC3D", briefcase-eye: "\uF7D8", briefcase-eye-outline: "\uF7D9", briefcase-minus: "\uEA29", briefcase-minus-outline: "\uEC3E", briefcase-off: "\uF657", briefcase-off-outline: "\uF658", briefcase-outline: "\uE813", briefcase-plus: "\uEA2A", briefcase-plus-outline: "\uEC3F", briefcase-remove: "\uEA2B", briefcase-remove-outline: "\uEC40", briefcase-search: "\uEA2C", briefcase-search-outline: "\uEC41", briefcase-upload: "\uE0D8", briefcase-upload-outline: "\uEC42", briefcase-variant: "\uF493", briefcase-variant-off: "\uF659", briefcase-variant-off-outline: "\uF65A", briefcase-variant-outline: "\uF494", brightness-1: "\uE0D9", brightness-2: "\uE0DA", brightness-3: "\uE0DB", brightness-4: "\uE0DC", brightness-5: "\uE0DD", brightness-6: "\uE0DE", brightness-7: "\uE0DF", brightness-auto: "\uE0E0", brightness-percent: "\uECF1", broadcast: "\uF71F", broadcast-off: "\uF720", broom: "\uE0E1", brush: "\uE0E2", brush-off: "\uF770", brush-outline: "\uFA0C", brush-variant: "\uF812", bucket: "\uF414", bucket-outline: "\uF415", buffet: "\uE577", bug: "\uE0E3", bug-check: "\uEA2D", bug-check-outline: "\uEA2E", bug-outline: "\uEA2F", bugle: "\uEDB3", bulkhead-light: "\uFA2E", bulldozer: "\uEB21", bullet: "\uECF2", bulletin-board: "\uE0E4", bullhorn: "\uE0E5", bullhorn-outline: "\uEB22", bullhorn-variant: "\uF96D", bullhorn-variant-outline: "\uF96E", bullseye: "\uE5DC", bullseye-arrow: "\uE8C8", bulma: "\uF2E6", bunk-bed: "\uF301", bunk-bed-outline: "\uE096", bus: "\uE0E6", bus-alert: "\uEA98", bus-articulated-end: "\uE79B", bus-articulated-front: "\uE79C", bus-clock: "\uE8C9", bus-double-decker: "\uE79D", bus-electric: "\uF91C", bus-marker: "\uF211", bus-multiple: "\uEF3E", bus-school: "\uE79E", bus-side: "\uE79F", bus-stop: "\uF011", bus-stop-covered: "\uF012", bus-stop-uncovered: "\uF013", butterfly: "\uF588", butterfly-outline: "\uF589", cabin-a-frame: "\uF88B", cable-data: "\uF393", cached: "\uE0E7", cactus: "\uEDB4", cake: "\uE0E8", cake-layered: "\uE0E9", cake-variant: "\uE0EA", cake-variant-outline: "\uF7EF", calculator: "\uE0EB", calculator-variant: "\uEA99", calculator-variant-outline: "\uF5A5", calendar: "\uE0EC", calendar-account: "\uEED6", calendar-account-outline: "\uEED7", calendar-alert: "\uEA30", calendar-arrow-left: "\uF133", calendar-arrow-right: "\uF134", calendar-blank: "\uE0ED", calendar-blank-multiple: "\uF072", calendar-blank-outline: "\uEB65", calendar-check: "\uE0EE", calendar-check-outline: "\uEC43", calendar-clock: "\uE0EF", calendar-clock-outline: "\uF6E0", calendar-collapse-horizontal: "\uF89C", calendar-cursor: "\uF57A", calendar-edit: "\uE8A6", calendar-end: "\uF66B", calendar-expand-horizontal: "\uF89D", calendar-export: "\uEB23", calendar-heart: "\uE9D1", calendar-import: "\uEB24", calendar-lock: "\uF640", calendar-lock-outline: "\uF641", calendar-minus: "\uED5B", calendar-month: "\uEE16", calendar-month-outline: "\uEE17", calendar-multiple: "\uE0F0", calendar-multiple-check: "\uE0F1", calendar-multiselect: "\uEA31", calendar-outline: "\uEB66", calendar-plus: "\uE0F2", calendar-question: "\uE691", calendar-range: "\uE678", calendar-range-outline: "\uEB67", calendar-refresh: "\uE1E0", calendar-refresh-outline: "\uE202", calendar-remove: "\uE0F3", calendar-remove-outline: "\uEC44", calendar-search: "\uE94B", calendar-star: "\uE9D2", calendar-start: "\uF66C", calendar-sync: "\uEE8D", calendar-sync-outline: "\uEE8E", calendar-text: "\uE0F4", calendar-text-outline: "\uEC45", calendar-today: "\uE0F5", calendar-today-outline: "\uFA2F", calendar-week: "\uEA32", calendar-week-begin: "\uEA33", calendar-week-begin-outline: "\uFA30", calendar-week-end: "\uFA31", calendar-week-end-outline: "\uFA32", calendar-week-outline: "\uFA33", calendar-weekend: "\uEED8", calendar-weekend-outline: "\uEED9", call-made: "\uE0F6", call-merge: "\uE0F7", call-missed: "\uE0F8", call-received: "\uE0F9", call-split: "\uE0FA", camcorder: "\uE0FB", camcorder-off: "\uE0FE", camera: "\uE0FF", camera-account: "\uE8CA", camera-burst: "\uE692", camera-control: "\uEB68", camera-document: "\uF870", camera-document-off: "\uF871", camera-enhance: "\uE100", camera-enhance-outline: "\uEB69", camera-flip: "\uF5D8", camera-flip-outline: "\uF5D9", camera-front: "\uE101", camera-front-variant: "\uE102", camera-gopro: "\uE7A0", camera-image: "\uE8CB", camera-iris: "\uE103", camera-lock: "\uFA13", camera-lock-outline: "\uFA14", camera-marker: "\uF9A6", camera-marker-outline: "\uF9A7", camera-metering-center: "\uE7A1", camera-metering-matrix: "\uE7A2", camera-metering-partial: "\uE7A3", camera-metering-spot: "\uE7A4", camera-off: "\uE5DE", camera-off-outline: "\uF9BE", camera-outline: "\uED5C", camera-party-mode: "\uE104", camera-plus: "\uEEDA", camera-plus-outline: "\uEEDB", camera-rear: "\uE105", camera-rear-variant: "\uE106", camera-retake: "\uEE18", camera-retake-outline: "\uEE19", camera-switch: "\uE107", camera-switch-outline: "\uE849", camera-timer: "\uE108", camera-wireless: "\uEDB5", camera-wireless-outline: "\uEDB6", campfire: "\uEEDC", cancel: "\uE739", candelabra: "\uF7D1", candelabra-fire: "\uF7D2", candle: "\uE5E1", candy: "\uF96F", candy-off: "\uF970", candy-off-outline: "\uF971", candy-outline: "\uF972", candycane: "\uE109", cannabis: "\uE7A5", cannabis-off: "\uF66D", caps-lock: "\uEA9A", car: "\uE10A", car-2-plus: "\uF014", car-3-plus: "\uF015", car-arrow-left: "\uF3B1", car-arrow-right: "\uF3B2", car-back: "\uEE1A", car-battery: "\uE10B", car-brake-abs: "\uEC46", car-brake-alert: "\uEC47", car-brake-fluid-level: "\uF908", car-brake-hold: "\uED5D", car-brake-low-pressure: "\uF909", car-brake-parking: "\uED5E", car-brake-retarder: "\uF016", car-brake-temperature: "\uF90A", car-brake-worn-linings: "\uF90B", car-child-seat: "\uEFA2", car-clock: "\uF973", car-clutch: "\uF017", car-cog: "\uF3CB", car-connected: "\uE10C", car-convertible: "\uE7A6", car-coolant-level: "\uF018", car-cruise-control: "\uED5F", car-defrost-front: "\uED60", car-defrost-rear: "\uED61", car-door: "\uEB6A", car-door-lock: "\uF09C", car-electric: "\uEB6B", car-electric-outline: "\uF5B4", car-emergency: "\uF60E", car-esp: "\uEC48", car-estate: "\uE7A7", car-hatchback: "\uE7A8", car-info: "\uF1BD", car-key: "\uEB6C", car-lifted-pickup: "\uF52C", car-light-alert: "\uF90C", car-light-dimmed: "\uEC49", car-light-fog: "\uEC4A", car-light-high: "\uEC4B", car-limousine: "\uE8CC", car-multiple: "\uEB6D", car-off: "\uEE1B", car-outline: "\uF4EC", car-parking-lights: "\uED62", car-pickup: "\uE7A9", car-seat: "\uEFA3", car-seat-cooler: "\uEFA4", car-seat-heater: "\uEFA5", car-select: "\uF878", car-settings: "\uF3CC", car-shift-pattern: "\uEF3F", car-side: "\uE7AA", car-speed-limiter: "\uF90D", car-sports: "\uE7AB", car-tire-alert: "\uEC4C", car-traction-control: "\uED63", car-turbocharger: "\uF019", car-wash: "\uE10D", car-windshield: "\uF01A", car-windshield-outline: "\uF01B", car-wireless: "\uF877", car-wrench: "\uF813", carabiner: "\uF4BF", caravan: "\uE7AC", card: "\uEB6E", card-account-details: "\uE5D1", card-account-details-outline: "\uEDAA", card-account-details-star: "\uE2A2", card-account-details-star-outline: "\uE6DA", card-account-mail: "\uE18D", card-account-mail-outline: "\uEE97", card-account-phone: "\uEE98", card-account-phone-outline: "\uEE99", card-bulleted: "\uEB6F", card-bulleted-off: "\uEB70", card-bulleted-off-outline: "\uEB71", card-bulleted-outline: "\uEB72", card-bulleted-settings: "\uEB73", card-bulleted-settings-outline: "\uEB74", card-minus: "\uF5FF", card-minus-outline: "\uF600", card-multiple: "\uF7F0", card-multiple-outline: "\uF7F1", card-off: "\uF601", card-off-outline: "\uF602", card-outline: "\uEB75", card-plus: "\uF1FE", card-plus-outline: "\uF1FF", card-remove: "\uF603", card-remove-outline: "\uF604", card-search: "\uF073", card-search-outline: "\uF074", card-text: "\uEB76", card-text-outline: "\uEB77", cards: "\uE637", cards-club: "\uE8CD", cards-club-outline: "\uF89E", cards-diamond: "\uE8CE", cards-diamond-outline: "\uF01C", cards-heart: "\uE8CF", cards-heart-outline: "\uF89F", cards-outline: "\uE638", cards-playing: "\uF8A0", cards-playing-club: "\uF8A1", cards-playing-club-multiple: "\uF8A2", cards-playing-club-multiple-outline: "\uF8A3", cards-playing-club-outline: "\uF8A4", cards-playing-diamond: "\uF8A5", cards-playing-diamond-multiple: "\uF8A6", cards-playing-diamond-multiple-outline: "\uF8A7", cards-playing-diamond-outline: "\uF8A8", cards-playing-heart: "\uF8A9", cards-playing-heart-multiple: "\uF8AA", cards-playing-heart-multiple-outline: "\uF8AB", cards-playing-heart-outline: "\uF8AC", cards-playing-outline: "\uE639", cards-playing-spade: "\uF8AD", cards-playing-spade-multiple: "\uF8AE", cards-playing-spade-multiple-outline: "\uF8AF", cards-playing-spade-outline: "\uF8B0", cards-spade: "\uE8D0", cards-spade-outline: "\uF8B1", cards-variant: "\uE6C6", carrot: "\uE10E", cart: "\uE10F", cart-arrow-down: "\uED65", cart-arrow-right: "\uEC4D", cart-arrow-up: "\uED66", cart-check: "\uF5E9", cart-heart: "\uF8DF", cart-minus: "\uED67", cart-off: "\uE66A", cart-outline: "\uE110", cart-plus: "\uE111", cart-remove: "\uED68", cart-variant: "\uF5EA", case-sensitive-alt: "\uE112", cash: "\uE113", cash-100: "\uE114", cash-check: "\uF4ED", cash-clock: "\uFA90", cash-fast: "\uF85B", cash-lock: "\uF4E9", cash-lock-open: "\uF4EA", cash-marker: "\uEDB7", cash-minus: "\uF25F", cash-multiple: "\uE115", cash-plus: "\uF260", cash-refund: "\uEA9B", cash-register: "\uECF3", cash-remove: "\uF261", cash-sync: "\uFA91", cassette: "\uE9D3", cast: "\uE117", cast-audio: "\uF01D", cast-audio-variant: "\uF748", cast-connected: "\uE118", cast-education: "\uEE1C", cast-off: "\uE789", cast-variant: "\uE01E", castle: "\uE119", cat: "\uE11A", cctv: "\uE7AD", cctv-off: "\uF85E", ceiling-fan: "\uF796", ceiling-fan-light: "\uF797", ceiling-light: "\uE768", ceiling-light-multiple: "\uF8DC", ceiling-light-multiple-outline: "\uF8DD", ceiling-light-outline: "\uF7C6", cellphone: "\uE11B", cellphone-arrow-down: "\uE9D4", cellphone-arrow-down-variant: "\uF9C4", cellphone-basic: "\uE11D", cellphone-charging: "\uF396", cellphone-check: "\uF7FC", cellphone-cog: "\uE950", cellphone-dock: "\uE11E", cellphone-information: "\uEF40", cellphone-key: "\uE94D", cellphone-link: "\uE120", cellphone-link-off: "\uE121", cellphone-lock: "\uE94E", cellphone-marker: "\uF839", cellphone-message: "\uE8D2", cellphone-message-off: "\uF0D1", cellphone-nfc: "\uEE8F", cellphone-nfc-off: "\uF2D7", cellphone-off: "\uE94F", cellphone-play: "\uF01E", cellphone-remove: "\uE94C", cellphone-screenshot: "\uEA34", cellphone-settings: "\uE122", cellphone-sound: "\uE951", cellphone-text: "\uE8D1", cellphone-wireless: "\uE814", centos: "\uF119", certificate: "\uE123", certificate-outline: "\uF187", chair-rolling: "\uEF47", chair-school: "\uE124", chandelier: "\uF792", charity: "\uEC4E", chart-arc: "\uE125", chart-areaspline: "\uE126", chart-areaspline-variant: "\uEE90", chart-bar: "\uE127", chart-bar-stacked: "\uE769", chart-bell-curve: "\uEC4F", chart-bell-curve-cumulative: "\uEFA6", chart-box: "\uF54C", chart-box-outline: "\uF54D", chart-box-plus-outline: "\uF54E", chart-bubble: "\uE5E2", chart-donut: "\uE7AE", chart-donut-variant: "\uE7AF", chart-gantt: "\uE66B", chart-histogram: "\uE128", chart-line: "\uE129", chart-line-stacked: "\uE76A", chart-line-variant: "\uE7B0", chart-multiline: "\uE8D3", chart-multiple: "\uF212", chart-pie: "\uE12A", chart-ppf: "\uF37F", chart-sankey: "\uF1DE", chart-sankey-variant: "\uF1DF", chart-scatter-plot: "\uEE91", chart-scatter-plot-hexbin: "\uE66C", chart-timeline: "\uE66D", chart-timeline-variant: "\uEE92", chart-timeline-variant-shimmer: "\uF5B5", chart-tree: "\uEE93", chart-waterfall: "\uF917", chat: "\uEB78", chat-alert: "\uEB79", chat-alert-outline: "\uF2C8", chat-minus: "\uF40F", chat-minus-outline: "\uF412", chat-outline: "\uEEDD", chat-plus: "\uF40E", chat-plus-outline: "\uF411", chat-processing: "\uEB7A", chat-processing-outline: "\uF2C9", chat-question: "\uF737", chat-question-outline: "\uF738", chat-remove: "\uF410", chat-remove-outline: "\uF413", chat-sleep: "\uF2D0", chat-sleep-outline: "\uF2D1", check: "\uE12B", check-all: "\uE12C", check-bold: "\uEE1D", check-circle: "\uE5DF", check-circle-outline: "\uE5E0", check-decagram: "\uE790", check-decagram-outline: "\uF73F", check-network: "\uEC52", check-network-outline: "\uEC53", check-outline: "\uE854", check-underline: "\uEE1E", check-underline-circle: "\uEE1F", check-underline-circle-outline: "\uEE20", checkbook: "\uEA9C", checkbox-blank: "\uE12D", checkbox-blank-badge: "\uF175", checkbox-blank-badge-outline: "\uE116", checkbox-blank-circle: "\uE12E", checkbox-blank-circle-outline: "\uE12F", checkbox-blank-off: "\uF2EB", checkbox-blank-off-outline: "\uF2EC", checkbox-blank-outline: "\uE130", checkbox-intermediate: "\uE855", checkbox-marked: "\uE131", checkbox-marked-circle: "\uE132", checkbox-marked-circle-outline: "\uE133", checkbox-marked-circle-plus-outline: "\uF926", checkbox-marked-outline: "\uE134", checkbox-multiple-blank: "\uE135", checkbox-multiple-blank-circle: "\uE63A", checkbox-multiple-blank-circle-outline: "\uE63B", checkbox-multiple-blank-outline: "\uE136", checkbox-multiple-marked: "\uE137", checkbox-multiple-marked-circle: "\uE63C", checkbox-multiple-marked-circle-outline: "\uE63D", checkbox-multiple-marked-outline: "\uE138", checkbox-multiple-outline: "\uEC50", checkbox-outline: "\uEC51", checkerboard: "\uE139", checkerboard-minus: "\uF201", checkerboard-plus: "\uF200", checkerboard-remove: "\uF202", cheese: "\uF2B8", cheese-off: "\uF3ED", chef-hat: "\uEB7B", chemical-weapon: "\uE13A", chess-bishop: "\uE85B", chess-king: "\uE856", chess-knight: "\uE857", chess-pawn: "\uE858", chess-queen: "\uE859", chess-rook: "\uE85A", chevron-double-down: "\uE13B", chevron-double-left: "\uE13C", chevron-double-right: "\uE13D", chevron-double-up: "\uE13E", chevron-down: "\uE13F", chevron-down-box: "\uE9D5", chevron-down-box-outline: "\uE9D6", chevron-down-circle: "\uEB25", chevron-down-circle-outline: "\uEB26", chevron-left: "\uE140", chevron-left-box: "\uE9D7", chevron-left-box-outline: "\uE9D8", chevron-left-circle: "\uEB27", chevron-left-circle-outline: "\uEB28", chevron-right: "\uE141", chevron-right-box: "\uE9D9", chevron-right-box-outline: "\uE9DA", chevron-right-circle: "\uEB29", chevron-right-circle-outline: "\uEB2A", chevron-triple-down: "\uEDB8", chevron-triple-left: "\uEDB9", chevron-triple-right: "\uEDBA", chevron-triple-up: "\uEDBB", chevron-up: "\uE142", chevron-up-box: "\uE9DB", chevron-up-box-outline: "\uE9DC", chevron-up-circle: "\uEB2B", chevron-up-circle-outline: "\uEB2C", chili-alert: "\uF7E9", chili-alert-outline: "\uF7EA", chili-hot: "\uE7B1", chili-hot-outline: "\uF7EB", chili-medium: "\uE7B2", chili-medium-outline: "\uF7EC", chili-mild: "\uE7B3", chili-mild-outline: "\uF7ED", chili-off: "\uF466", chili-off-outline: "\uF7EE", chip: "\uE619", church: "\uE143", cigar: "\uF188", cigar-off: "\uF41A", circle: "\uE764", circle-box: "\uF5DB", circle-box-outline: "\uF5DC", circle-double: "\uEE94", circle-edit-outline: "\uE8D4", circle-expand: "\uEE95", circle-half: "\uF394", circle-half-full: "\uF395", circle-medium: "\uE9DD", circle-multiple: "\uEB37", circle-multiple-outline: "\uE694", circle-off-outline: "\uF0D2", circle-opacity: "\uF852", circle-outline: "\uE765", circle-slice-1: "\uEA9D", circle-slice-2: "\uEA9E", circle-slice-3: "\uEA9F", circle-slice-4: "\uEAA0", circle-slice-5: "\uEAA1", circle-slice-6: "\uEAA2", circle-slice-7: "\uEAA3", circle-slice-8: "\uEAA4", circle-small: "\uE9DE", circular-saw: "\uEE21", city: "\uE145", city-variant: "\uEA35", city-variant-outline: "\uEA36", clipboard: "\uE146", clipboard-account: "\uE147", clipboard-account-outline: "\uEC54", clipboard-alert: "\uE148", clipboard-alert-outline: "\uECF6", clipboard-arrow-down: "\uE149", clipboard-arrow-down-outline: "\uEC55", clipboard-arrow-left: "\uE14A", clipboard-arrow-left-outline: "\uECF7", clipboard-arrow-right: "\uECF8", clipboard-arrow-right-outline: "\uECF9", clipboard-arrow-up: "\uEC56", clipboard-arrow-up-outline: "\uEC57", clipboard-check: "\uE14D", clipboard-check-multiple: "\uF262", clipboard-check-multiple-outline: "\uF263", clipboard-check-outline: "\uE8A7", clipboard-clock: "\uF6E1", clipboard-clock-outline: "\uF6E2", clipboard-edit: "\uF4E4", clipboard-edit-outline: "\uF4E5", clipboard-file: "\uF264", clipboard-file-outline: "\uF265", clipboard-flow: "\uE6C7", clipboard-flow-outline: "\uF116", clipboard-list: "\uF0D3", clipboard-list-outline: "\uF0D4", clipboard-minus: "\uF617", clipboard-minus-outline: "\uF618", clipboard-multiple: "\uF266", clipboard-multiple-outline: "\uF267", clipboard-off: "\uF619", clipboard-off-outline: "\uF61A", clipboard-outline: "\uE14B", clipboard-play: "\uEC58", clipboard-play-multiple: "\uF268", clipboard-play-multiple-outline: "\uF269", clipboard-play-outline: "\uEC59", clipboard-plus: "\uE750", clipboard-plus-outline: "\uF31E", clipboard-pulse: "\uE85C", clipboard-pulse-outline: "\uE85D", clipboard-remove: "\uF61B", clipboard-remove-outline: "\uF61C", clipboard-search: "\uF61D", clipboard-search-outline: "\uF61E", clipboard-text: "\uE14C", clipboard-text-clock: "\uF8F8", clipboard-text-clock-outline: "\uF8F9", clipboard-text-multiple: "\uF26A", clipboard-text-multiple-outline: "\uF26B", clipboard-text-off: "\uF61F", clipboard-text-off-outline: "\uF620", clipboard-text-outline: "\uEA37", clipboard-text-play: "\uEC5A", clipboard-text-play-outline: "\uEC5B", clipboard-text-search: "\uF621", clipboard-text-search-outline: "\uF622", clippy: "\uE14E", clock: "\uE953", clock-alert: "\uE954", clock-alert-outline: "\uE5CD", clock-check: "\uEFA7", clock-check-outline: "\uEFA8", clock-digital: "\uEE96", clock-edit: "\uF9B9", clock-edit-outline: "\uF9BA", clock-end: "\uE150", clock-fast: "\uE151", clock-in: "\uE152", clock-minus: "\uF862", clock-minus-outline: "\uF863", clock-out: "\uE153", clock-outline: "\uE14F", clock-plus: "\uF860", clock-plus-outline: "\uF861", clock-remove: "\uF864", clock-remove-outline: "\uF865", clock-start: "\uE154", clock-time-eight: "\uF445", clock-time-eight-outline: "\uF451", clock-time-eleven: "\uF448", clock-time-eleven-outline: "\uF454", clock-time-five: "\uF442", clock-time-five-outline: "\uF44E", clock-time-four: "\uF441", clock-time-four-outline: "\uF44D", clock-time-nine: "\uF446", clock-time-nine-outline: "\uF452", clock-time-one: "\uF43E", clock-time-one-outline: "\uF44A", clock-time-seven: "\uF444", clock-time-seven-outline: "\uF450", clock-time-six: "\uF443", clock-time-six-outline: "\uF44F", clock-time-ten: "\uF447", clock-time-ten-outline: "\uF453", clock-time-three: "\uF440", clock-time-three-outline: "\uF44C", clock-time-twelve: "\uF449", clock-time-twelve-outline: "\uF455", clock-time-two: "\uF43F", clock-time-two-outline: "\uF44B", close: "\uE155", close-box: "\uE156", close-box-multiple: "\uEC5C", close-box-multiple-outline: "\uEC5D", close-box-outline: "\uE157", close-circle: "\uE158", close-circle-multiple: "\uE629", close-circle-multiple-outline: "\uE882", close-circle-outline: "\uE159", close-network: "\uE15A", close-network-outline: "\uEC5E", close-octagon: "\uE15B", close-octagon-outline: "\uE15C", close-outline: "\uE6C8", close-thick: "\uF397", closed-caption: "\uE15D", closed-caption-outline: "\uEDBC", cloud: "\uE15E", cloud-alert: "\uE9DF", cloud-braces: "\uE7B4", cloud-check: "\uE15F", cloud-check-outline: "\uF2CB", cloud-circle: "\uE160", cloud-download: "\uE161", cloud-download-outline: "\uEB7C", cloud-lock: "\uF1F0", cloud-lock-outline: "\uF1F1", cloud-off-outline: "\uE163", cloud-outline: "\uE162", cloud-percent: "\uFA34", cloud-percent-outline: "\uFA35", cloud-print: "\uE164", cloud-print-outline: "\uE165", cloud-question: "\uEA38", cloud-refresh: "\uE529", cloud-search: "\uE955", cloud-search-outline: "\uE956", cloud-sync: "\uE63E", cloud-sync-outline: "\uF2D5", cloud-tags: "\uE7B5", cloud-upload: "\uE166", cloud-upload-outline: "\uEB7D", clover: "\uE815", coach-lamp: "\uF01F", coach-lamp-variant: "\uFA36", coat-rack: "\uF09D", code-array: "\uE167", code-braces: "\uE168", code-braces-box: "\uF0D5", code-brackets: "\uE169", code-equal: "\uE16A", code-greater-than: "\uE16B", code-greater-than-or-equal: "\uE16C", code-json: "\uE625", code-less-than: "\uE16D", code-less-than-or-equal: "\uE16E", code-not-equal: "\uE16F", code-not-equal-variant: "\uE170", code-parentheses: "\uE171", code-parentheses-box: "\uF0D6", code-string: "\uE172", code-tags: "\uE173", code-tags-check: "\uE693", codepen: "\uE174", coffee: "\uE175", coffee-maker: "\uF09E", coffee-maker-check: "\uF930", coffee-maker-check-outline: "\uF931", coffee-maker-outline: "\uF81A", coffee-off: "\uEFA9", coffee-off-outline: "\uEFAA", coffee-outline: "\uE6C9", coffee-to-go: "\uE176", coffee-to-go-outline: "\uF30D", coffin: "\uEB7E", cog: "\uE492", cog-box: "\uE493", cog-clockwise: "\uF1DC", cog-counterclockwise: "\uF1DD", cog-off: "\uF3CD", cog-off-outline: "\uF3CE", cog-outline: "\uE8BA", cog-pause: "\uF932", cog-pause-outline: "\uF933", cog-play: "\uF934", cog-play-outline: "\uF935", cog-refresh: "\uF45D", cog-refresh-outline: "\uF45E", cog-stop: "\uF936", cog-stop-outline: "\uF937", cog-sync: "\uF45F", cog-sync-outline: "\uF460", cog-transfer: "\uF05A", cog-transfer-outline: "\uF05B", cogs: "\uE8D5", collage: "\uE63F", collapse-all: "\uEAA5", collapse-all-outline: "\uEAA6", color-helper: "\uE178", comma: "\uEE22", comma-box: "\uEE2A", comma-box-outline: "\uEE23", comma-circle: "\uEE24", comma-circle-outline: "\uEE25", comment: "\uE179", comment-account: "\uE17A", comment-account-outline: "\uE17B", comment-alert: "\uE17C", comment-alert-outline: "\uE17D", comment-arrow-left: "\uE9E0", comment-arrow-left-outline: "\uE9E1", comment-arrow-right: "\uE9E2", comment-arrow-right-outline: "\uE9E3", comment-bookmark: "\uF5AD", comment-bookmark-outline: "\uF5AE", comment-check: "\uE17E", comment-check-outline: "\uE17F", comment-edit: "\uF1BE", comment-edit-outline: "\uF2C3", comment-eye: "\uEA39", comment-eye-outline: "\uEA3A", comment-flash: "\uF5AF", comment-flash-outline: "\uF5B0", comment-minus: "\uF5DE", comment-minus-outline: "\uF5DF", comment-multiple: "\uE85E", comment-multiple-outline: "\uE180", comment-off: "\uF5E0", comment-off-outline: "\uF5E1", comment-outline: "\uE181", comment-plus: "\uE9E4", comment-plus-outline: "\uE182", comment-processing: "\uE183", comment-processing-outline: "\uE184", comment-question: "\uE816", comment-question-outline: "\uE185", comment-quote: "\uF020", comment-quote-outline: "\uF021", comment-remove: "\uE5DD", comment-remove-outline: "\uE186", comment-search: "\uEA3B", comment-search-outline: "\uEA3C", comment-text: "\uE187", comment-text-multiple: "\uE85F", comment-text-multiple-outline: "\uE860", comment-text-outline: "\uE188", compare: "\uE189", compare-horizontal: "\uF491", compare-remove: "\uF8B2", compare-vertical: "\uF492", compass: "\uE18A", compass-off: "\uEB7F", compass-off-outline: "\uEB80", compass-outline: "\uE18B", compass-rose: "\uF381", compost: "\uFA37", cone: "\uF94B", cone-off: "\uF94C", connection: "\uF615", console: "\uE18C", console-line: "\uE7B6", console-network: "\uE8A8", console-network-outline: "\uEC5F", consolidate: "\uF0D7", contactless-payment: "\uED69", contactless-payment-circle: "\uE320", contactless-payment-circle-outline: "\uE407", contacts: "\uE6CA", contacts-outline: "\uE5B7", contain: "\uEA3D", contain-end: "\uEA3E", contain-start: "\uEA3F", content-copy: "\uE18E", content-cut: "\uE18F", content-duplicate: "\uE190", content-paste: "\uE191", content-save: "\uE192", content-save-alert: "\uEF41", content-save-alert-outline: "\uEF42", content-save-all: "\uE193", content-save-all-outline: "\uEF43", content-save-check: "\uF8E9", content-save-check-outline: "\uF8EA", content-save-cog: "\uF45A", content-save-cog-outline: "\uF45B", content-save-edit: "\uECFA", content-save-edit-outline: "\uECFB", content-save-move: "\uEE26", content-save-move-outline: "\uEE27", content-save-off: "\uF642", content-save-off-outline: "\uF643", content-save-outline: "\uE817", content-save-settings: "\uE61A", content-save-settings-outline: "\uEB2D", contrast: "\uE194", contrast-box: "\uE195", contrast-circle: "\uE196", controller-classic: "\uEB81", controller-classic-outline: "\uEB82", cookie: "\uE197", cookie-alert: "\uF6CF", cookie-alert-outline: "\uF6D0", cookie-check: "\uF6D1", cookie-check-outline: "\uF6D2", cookie-clock: "\uF6E3", cookie-clock-outline: "\uF6E4", cookie-cog: "\uF6D3", cookie-cog-outline: "\uF6D4", cookie-edit: "\uF6E5", cookie-edit-outline: "\uF6E6", cookie-lock: "\uF6E7", cookie-lock-outline: "\uF6E8", cookie-minus: "\uF6D9", cookie-minus-outline: "\uF6DA", cookie-off: "\uF6E9", cookie-off-outline: "\uF6EA", cookie-outline: "\uF6DD", cookie-plus: "\uF6D5", cookie-plus-outline: "\uF6D6", cookie-refresh: "\uF6EB", cookie-refresh-outline: "\uF6EC", cookie-remove: "\uF6D7", cookie-remove-outline: "\uF6D8", cookie-settings: "\uF6DB", cookie-settings-outline: "\uF6DC", coolant-temperature: "\uE3C7", copyleft: "\uF938", copyright: "\uE5E5", cordova: "\uE957", corn: "\uE7B7", corn-off: "\uF3EE", cosine-wave: "\uF478", counter: "\uE198", countertop: "\uF81B", countertop-outline: "\uF81C", cow: "\uE199", cow-off: "\uF8FB", cpu-32-bit: "\uEEDE", cpu-64-bit: "\uEEDF", cradle: "\uF98A", cradle-outline: "\uF990", crane: "\uE861", creation: "\uE673", creative-commons: "\uED6A", credit-card: "\uEFEE", credit-card-check: "\uF3CF", credit-card-check-outline: "\uF3D0", credit-card-chip: "\uF90E", credit-card-chip-outline: "\uF90F", credit-card-clock: "\uEEE0", credit-card-clock-outline: "\uEEE1", credit-card-edit: "\uF7D6", credit-card-edit-outline: "\uF7D7", credit-card-fast: "\uF910", credit-card-fast-outline: "\uF911", credit-card-lock: "\uF8E6", credit-card-lock-outline: "\uF8E7", credit-card-marker: "\uE6A7", credit-card-marker-outline: "\uEDBD", credit-card-minus: "\uEFAB", credit-card-minus-outline: "\uEFAC", credit-card-multiple: "\uEFEF", credit-card-multiple-outline: "\uE19B", credit-card-off: "\uEFF0", credit-card-off-outline: "\uE5E3", credit-card-outline: "\uE19A", credit-card-plus: "\uEFF1", credit-card-plus-outline: "\uE675", credit-card-refresh: "\uF644", credit-card-refresh-outline: "\uF645", credit-card-refund: "\uEFF2", credit-card-refund-outline: "\uEAA7", credit-card-remove: "\uEFAD", credit-card-remove-outline: "\uEFAE", credit-card-scan: "\uEFF3", credit-card-scan-outline: "\uE19C", credit-card-search: "\uF646", credit-card-search-outline: "\uF647", credit-card-settings: "\uEFF4", credit-card-settings-outline: "\uE8D6", credit-card-sync: "\uF648", credit-card-sync-outline: "\uF649", credit-card-wireless: "\uE801", credit-card-wireless-off: "\uE579", credit-card-wireless-off-outline: "\uE57A", credit-card-wireless-outline: "\uED6B", cricket: "\uED6C", crop: "\uE19D", crop-free: "\uE19E", crop-landscape: "\uE19F", crop-portrait: "\uE1A0", crop-rotate: "\uE695", crop-square: "\uE1A1", cross: "\uE952", cross-bolnisi: "\uECEC", cross-celtic: "\uECF4", cross-outline: "\uECF5", crosshairs: "\uE1A2", crosshairs-gps: "\uE1A3", crosshairs-off: "\uEF44", crosshairs-question: "\uF135", crowd: "\uF974", crown: "\uE1A4", crown-circle: "\uF7DB", crown-circle-outline: "\uF7DC", crown-outline: "\uF1CF", cryengine: "\uE958", crystal-ball: "\uEB2E", cube: "\uE1A5", cube-off: "\uF41B", cube-off-outline: "\uF41C", cube-outline: "\uE1A6", cube-scan: "\uEB83", cube-send: "\uE1A7", cube-unfolded: "\uE1A8", cup: "\uE1A9", cup-off: "\uE5E4", cup-off-outline: "\uF37C", cup-outline: "\uF30E", cup-water: "\uE1AA", cupboard: "\uEF45", cupboard-outline: "\uEF46", cupcake: "\uE959", curling: "\uE862", currency-bdt: "\uE863", currency-brl: "\uEB84", currency-btc: "\uE1AB", currency-cny: "\uE7B9", currency-eth: "\uE7BA", currency-eur: "\uE1AC", currency-eur-off: "\uF314", currency-fra: "\uFA38", currency-gbp: "\uE1AD", currency-ils: "\uEC60", currency-inr: "\uE1AE", currency-jpy: "\uE7BB", currency-krw: "\uE7BC", currency-kzt: "\uE864", currency-mnt: "\uF511", currency-ngn: "\uE1AF", currency-php: "\uE9E5", currency-rial: "\uEE9B", currency-rub: "\uE1B0", currency-rupee: "\uF975", currency-sign: "\uE7BD", currency-try: "\uE1B1", currency-twd: "\uE7BE", currency-usd: "\uE1C0", currency-usd-off: "\uE679", current-ac: "\uF47F", current-dc: "\uE95B", cursor-default: "\uE1BF", cursor-default-click: "\uECFC", cursor-default-click-outline: "\uECFD", cursor-default-gesture: "\uF126", cursor-default-gesture-outline: "\uF127", cursor-default-outline: "\uE1BE", cursor-move: "\uE1BD", cursor-pointer: "\uE1BC", cursor-text: "\uE5E6", curtains: "\uF845", curtains-closed: "\uF846", cylinder: "\uF94D", cylinder-off: "\uF94E", dance-ballroom: "\uF5FA", dance-pole: "\uF577", data-matrix: "\uF53B", data-matrix-edit: "\uF53C", data-matrix-minus: "\uF53D", data-matrix-plus: "\uF53E", data-matrix-remove: "\uF53F", data-matrix-scan: "\uF540", database: "\uE1BB", database-alert: "\uF639", database-alert-outline: "\uF623", database-arrow-down: "\uF63A", database-arrow-down-outline: "\uF624", database-arrow-left: "\uF63B", database-arrow-left-outline: "\uF625", database-arrow-right: "\uF63C", database-arrow-right-outline: "\uF626", database-arrow-up: "\uF63D", database-arrow-up-outline: "\uF627", database-check: "\uEAA8", database-check-outline: "\uF628", database-clock: "\uF63E", database-clock-outline: "\uF629", database-cog: "\uF64A", database-cog-outline: "\uF64B", database-edit: "\uEB85", database-edit-outline: "\uF62A", database-export: "\uE95D", database-export-outline: "\uF62B", database-eye: "\uF91E", database-eye-off: "\uF91F", database-eye-off-outline: "\uF920", database-eye-outline: "\uF921", database-import: "\uE95C", database-import-outline: "\uF62C", database-lock: "\uEAA9", database-lock-outline: "\uF62D", database-marker: "\uF2F5", database-marker-outline: "\uF62E", database-minus: "\uE1BA", database-minus-outline: "\uF62F", database-off: "\uF63F", database-off-outline: "\uF630", database-outline: "\uF631", database-plus: "\uE1B9", database-plus-outline: "\uF632", database-refresh: "\uE5C1", database-refresh-outline: "\uF633", database-remove: "\uECFF", database-remove-outline: "\uF634", database-search: "\uE865", database-search-outline: "\uF635", database-settings: "\uED00", database-settings-outline: "\uF636", database-sync: "\uECFE", database-sync-outline: "\uF637", death-star: "\uE8D7", death-star-variant: "\uE8D8", deathly-hallows: "\uEB86", debian: "\uE8D9", debug-step-into: "\uE1B8", debug-step-out: "\uE1B7", debug-step-over: "\uE1B6", decagram: "\uE76B", decagram-outline: "\uE76C", decimal: "\uF0A0", decimal-comma: "\uF0A1", decimal-comma-decrease: "\uF0A2", decimal-comma-increase: "\uF0A3", decimal-decrease: "\uE1B5", decimal-increase: "\uE1B4", delete: "\uE1B3", delete-alert: "\uF0A4", delete-alert-outline: "\uF0A5", delete-circle: "\uE682", delete-circle-outline: "\uEB87", delete-clock: "\uF555", delete-clock-outline: "\uF556", delete-empty: "\uE6CB", delete-empty-outline: "\uEE9C", delete-forever: "\uE5E7", delete-forever-outline: "\uEB88", delete-off: "\uF0A6", delete-off-outline: "\uF0A7", delete-outline: "\uE9E6", delete-restore: "\uE818", delete-sweep: "\uE5E8", delete-sweep-outline: "\uEC61", delete-variant: "\uE1B2", delta: "\uE1C1", desk: "\uF238", desk-lamp: "\uE95E", deskphone: "\uE1C2", desktop-classic: "\uE7BF", desktop-mac: "\uE1C3", desktop-mac-dashboard: "\uE9E7", desktop-tower: "\uE1C4", desktop-tower-monitor: "\uEAAA", details: "\uE1C5", dev-to: "\uED6D", developer-board: "\uE696", deviantart: "\uE1C6", devices: "\uEFAF", dharmachakra: "\uE94A", diabetes: "\uF125", dialpad: "\uE61B", diameter: "\uEC62", diameter-outline: "\uEC63", diameter-variant: "\uEC64", diamond: "\uEB89", diamond-outline: "\uEB8A", diamond-stone: "\uE1C7", dice-1: "\uE1C9", dice-1-outline: "\uF149", dice-2: "\uE1CA", dice-2-outline: "\uF14A", dice-3: "\uE1CB", dice-3-outline: "\uF14B", dice-4: "\uE1CC", dice-4-outline: "\uF14C", dice-5: "\uE1CD", dice-5-outline: "\uF14D", dice-6: "\uE1CE", dice-6-outline: "\uF14E", dice-d10: "\uF152", dice-d10-outline: "\uE76E", dice-d12: "\uF153", dice-d12-outline: "\uE866", dice-d20: "\uF154", dice-d20-outline: "\uE5E9", dice-d4: "\uF14F", dice-d4-outline: "\uE5EA", dice-d6: "\uF150", dice-d6-outline: "\uE5EC", dice-d8: "\uF151", dice-d8-outline: "\uE5EB", dice-multiple: "\uE76D", dice-multiple-outline: "\uF155", digital-ocean: "\uF236", dip-switch: "\uE7C0", directions: "\uE1CF", directions-fork: "\uE640", disc: "\uE5ED", disc-alert: "\uE1D0", disc-player: "\uE95F", discord: "\uE66E", dishwasher: "\uEAAB", dishwasher-alert: "\uF1B7", dishwasher-off: "\uF1B8", disqus: "\uE1D1", distribute-horizontal-center: "\uF1C8", distribute-horizontal-left: "\uF1C7", distribute-horizontal-right: "\uF1C9", distribute-vertical-bottom: "\uF1CA", distribute-vertical-center: "\uF1CB", distribute-vertical-top: "\uF1CC", diversify: "\uF876", diving: "\uF976", diving-flippers: "\uEDBE", diving-helmet: "\uEDBF", diving-scuba: "\uEDC0", diving-scuba-flag: "\uEDC1", diving-scuba-tank: "\uEDC2", diving-scuba-tank-multiple: "\uEDC3", diving-snorkel: "\uEDC4", division: "\uE1D3", division-box: "\uE1D4", dlna: "\uEA40", dna: "\uE683", dns: "\uE1D5", dns-outline: "\uEB8B", dock-bottom: "\uF0A8", dock-left: "\uF0A9", dock-right: "\uF0AA", dock-top: "\uF512", dock-window: "\uF0AB", docker: "\uE867", doctor: "\uEA41", dog: "\uEA42", dog-service: "\uEAAC", dog-side: "\uEA43", dog-side-off: "\uF6ED", dolby: "\uE6B2", dolly: "\uEE9D", dolphin: "\uF8B3", domain: "\uE1D6", domain-off: "\uED6E", domain-plus: "\uF0AC", domain-remove: "\uF0AD", dome-light: "\uF41D", domino-mask: "\uF022", donkey: "\uE7C1", door: "\uE819", door-closed: "\uE81A", door-closed-lock: "\uF0AE", door-open: "\uE81B", door-sliding: "\uF81D", door-sliding-lock: "\uF81E", door-sliding-open: "\uF81F", doorbell: "\uF2E5", doorbell-video: "\uE868", dot-net: "\uEAAD", dots-circle: "\uF977", dots-grid: "\uF5FB", dots-hexagon: "\uF5FE", dots-horizontal: "\uE1D7", dots-horizontal-circle: "\uE7C2", dots-horizontal-circle-outline: "\uEB8C", dots-square: "\uF5FC", dots-triangle: "\uF5FD", dots-vertical: "\uE1D8", dots-vertical-circle: "\uE7C3", dots-vertical-circle-outline: "\uEB8D", download: "\uE1D9", download-box: "\uF461", download-box-outline: "\uF462", download-circle: "\uF463", download-circle-outline: "\uF464", download-lock: "\uF31F", download-lock-outline: "\uF320", download-multiple: "\uE9E8", download-network: "\uE6F3", download-network-outline: "\uEC65", download-off: "\uF0AF", download-off-outline: "\uF0B0", download-outline: "\uEB8E", drag: "\uE1DA", drag-horizontal: "\uE1DB", drag-horizontal-variant: "\uF2EF", drag-variant: "\uEB8F", drag-vertical: "\uE1DC", drag-vertical-variant: "\uF2F0", drama-masks: "\uED01", draw: "\uEF48", draw-pen: "\uF9B8", drawing: "\uE1DD", drawing-box: "\uE1DE", dresser: "\uEF49", dresser-outline: "\uEF4A", drone: "\uE1E1", dropbox: "\uE1E2", drupal: "\uE1E3", duck: "\uE1E4", dumbbell: "\uE1E5", dump-truck: "\uEC66", ear-hearing: "\uE7C4", ear-hearing-loop: "\uFAED", ear-hearing-off: "\uEA44", earbuds: "\uF84E", earbuds-off: "\uF84F", earbuds-off-outline: "\uF850", earbuds-outline: "\uF851", earth: "\uE1E6", earth-arrow-right: "\uF310", earth-box: "\uE6CC", earth-box-minus: "\uF406", earth-box-off: "\uE6CD", earth-box-plus: "\uF405", earth-box-remove: "\uF407", earth-minus: "\uF403", earth-off: "\uE1E7", earth-plus: "\uF402", earth-remove: "\uF404", egg: "\uEAAE", egg-easter: "\uEAAF", egg-fried: "\uF849", egg-off: "\uF3EF", egg-off-outline: "\uF3F0", egg-outline: "\uF3F1", eiffel-tower: "\uF56A", eight-track: "\uE9E9", eject: "\uE1E9", eject-outline: "\uEB90", electric-switch: "\uEE9E", electric-switch-closed: "\uF0D8", electron-framework: "\uF023", elephant: "\uE7C5", elevation-decline: "\uE1EA", elevation-rise: "\uE1EB", elevator: "\uE1EC", elevator-down: "\uF2C1", elevator-passenger: "\uF380", elevator-passenger-off: "\uF978", elevator-passenger-off-outline: "\uF979", elevator-passenger-outline: "\uF97A", elevator-up: "\uF2C0", ellipse: "\uEE9F", ellipse-outline: "\uEEA0", email: "\uE1ED", email-alert: "\uE6CE", email-alert-outline: "\uED41", email-box: "\uED02", email-check: "\uEAB0", email-check-outline: "\uEAB1", email-edit: "\uEEE2", email-edit-outline: "\uEEE3", email-fast: "\uF86E", email-fast-outline: "\uF86F", email-lock: "\uE1F0", email-mark-as-unread: "\uEB91", email-minus: "\uEEE4", email-minus-outline: "\uEEE5", email-multiple: "\uEEE6", email-multiple-outline: "\uEEE7", email-newsletter: "\uEFB0", email-off: "\uF3E2", email-off-outline: "\uF3E3", email-open: "\uE1EE", email-open-multiple: "\uEEE8", email-open-multiple-outline: "\uEEE9", email-open-outline: "\uE5EE", email-outline: "\uE1EF", email-plus: "\uE9EA", email-plus-outline: "\uE9EB", email-receive: "\uF0D9", email-receive-outline: "\uF0DA", email-remove: "\uF660", email-remove-outline: "\uF661", email-seal: "\uF95A", email-seal-outline: "\uF95B", email-search: "\uE960", email-search-outline: "\uE961", email-send: "\uF0DB", email-send-outline: "\uF0DC", email-sync: "\uF2C6", email-sync-outline: "\uF2C7", email-variant: "\uE5EF", ember: "\uEB2F", emby: "\uE6B3", emoticon: "\uEC67", emoticon-angry: "\uEC68", emoticon-angry-outline: "\uEC69", emoticon-confused: "\uF0DD", emoticon-confused-outline: "\uF0DE", emoticon-cool: "\uEC6A", emoticon-cool-outline: "\uE1F2", emoticon-cry: "\uEC6B", emoticon-cry-outline: "\uEC6C", emoticon-dead: "\uEC6D", emoticon-dead-outline: "\uE69A", emoticon-devil: "\uEC6E", emoticon-devil-outline: "\uE1F3", emoticon-excited: "\uEC6F", emoticon-excited-outline: "\uE69B", emoticon-frown: "\uEF4B", emoticon-frown-outline: "\uEF4C", emoticon-happy: "\uEC70", emoticon-happy-outline: "\uE1F4", emoticon-kiss: "\uEC71", emoticon-kiss-outline: "\uEC72", emoticon-lol: "\uF213", emoticon-lol-outline: "\uF214", emoticon-neutral: "\uEC73", emoticon-neutral-outline: "\uE1F5", emoticon-outline: "\uE1F1", emoticon-poop: "\uE1F6", emoticon-poop-outline: "\uEC74", emoticon-sad: "\uEC75", emoticon-sad-outline: "\uE1F7", emoticon-sick: "\uF57B", emoticon-sick-outline: "\uF57C", emoticon-tongue: "\uE1F8", emoticon-tongue-outline: "\uEC76", emoticon-wink: "\uEC77", emoticon-wink-outline: "\uEC78", engine: "\uE1F9", engine-off: "\uEA45", engine-off-outline: "\uEA46", engine-outline: "\uE1FA", epsilon: "\uF0DF", equal: "\uE1FB", equal-box: "\uE1FC", equalizer: "\uEEA1", equalizer-outline: "\uEEA2", eraser: "\uE1FD", eraser-variant: "\uE641", escalator: "\uE1FE", escalator-box: "\uF398", escalator-down: "\uF2BF", escalator-up: "\uF2BE", eslint: "\uEC79", et: "\uEAB2", ethereum: "\uE869", ethernet: "\uE1FF", ethernet-cable: "\uE200", ethernet-cable-off: "\uE201", ev-plug-ccs1: "\uF518", ev-plug-ccs2: "\uF519", ev-plug-chademo: "\uF51A", ev-plug-tesla: "\uF51B", ev-plug-type1: "\uF51C", ev-plug-type2: "\uF51D", ev-station: "\uE5F0", evernote: "\uE203", excavator: "\uF024", exclamation: "\uE204", exclamation-thick: "\uF237", exit-run: "\uEA47", exit-to-app: "\uE205", expand-all: "\uEAB3", expand-all-outline: "\uEAB4", expansion-card: "\uE8AD", expansion-card-variant: "\uEFB1", exponent: "\uE962", exponent-box: "\uE963", export: "\uE206", export-variant: "\uEB92", eye: "\uE207", eye-arrow-left: "\uF8FC", eye-arrow-left-outline: "\uF8FD", eye-arrow-right: "\uF8FE", eye-arrow-right-outline: "\uF8FF", eye-check: "\uED03", eye-check-outline: "\uED04", eye-circle: "\uEB93", eye-circle-outline: "\uEB94", eye-minus: "\uF025", eye-minus-outline: "\uF026", eye-off: "\uE208", eye-off-outline: "\uE6D0", eye-outline: "\uE6CF", eye-plus: "\uE86A", eye-plus-outline: "\uE86B", eye-refresh: "\uF97B", eye-refresh-outline: "\uF97C", eye-remove: "\uF5E2", eye-remove-outline: "\uF5E3", eye-settings: "\uE86C", eye-settings-outline: "\uE86D", eyedropper: "\uE209", eyedropper-minus: "\uF3DC", eyedropper-off: "\uF3DE", eyedropper-plus: "\uF3DB", eyedropper-remove: "\uF3DD", eyedropper-variant: "\uE20A", face-agent: "\uED6F", face-man: "\uE642", face-man-outline: "\uEB95", face-man-profile: "\uE643", face-man-shimmer: "\uF5CB", face-man-shimmer-outline: "\uF5CC", face-mask: "\uF585", face-mask-outline: "\uF586", face-recognition: "\uEC7A", face-woman: "\uF076", face-woman-outline: "\uF077", face-woman-profile: "\uF075", face-woman-shimmer: "\uF5CD", face-woman-shimmer-outline: "\uF5CE", facebook: "\uE20B", facebook-gaming: "\uE7DC", facebook-messenger: "\uE20D", facebook-workplace: "\uEB30", factory: "\uE20E", family-tree: "\uF60D", fan: "\uE20F", fan-alert: "\uF46B", fan-auto: "\uF71C", fan-chevron-down: "\uF46C", fan-chevron-up: "\uF46D", fan-clock: "\uFA39", fan-minus: "\uF46F", fan-off: "\uE81C", fan-plus: "\uF46E", fan-remove: "\uF470", fan-speed-1: "\uF471", fan-speed-2: "\uF472", fan-speed-3: "\uF473", fast-forward: "\uE210", fast-forward-10: "\uED70", fast-forward-15: "\uF939", fast-forward-30: "\uED05", fast-forward-5: "\uF1F7", fast-forward-60: "\uF60A", fast-forward-outline: "\uE6D1", fax: "\uE211", feather: "\uE6D2", feature-search: "\uEA48", feature-search-outline: "\uEA49", fedora: "\uE8DA", fence: "\uF799", fence-electric: "\uF7F5", fencing: "\uF4C0", ferris-wheel: "\uEEA3", ferry: "\uE212", file: "\uE213", file-account: "\uE73A", file-account-outline: "\uF027", file-alert: "\uEA4A", file-alert-outline: "\uEA4B", file-arrow-left-right: "\uFA92", file-arrow-left-right-outline: "\uFA93", file-arrow-up-down: "\uFA94", file-arrow-up-down-outline: "\uFA95", file-cabinet: "\uEAB5", file-cad: "\uEEEA", file-cad-box: "\uEEEB", file-cancel: "\uEDC5", file-cancel-outline: "\uEDC6", file-certificate: "\uF185", file-certificate-outline: "\uF186", file-chart: "\uE214", file-chart-check: "\uF9C5", file-chart-check-outline: "\uF9C6", file-chart-outline: "\uF028", file-check: "\uE215", file-check-outline: "\uEE28", file-clock: "\uF2E0", file-clock-outline: "\uF2E1", file-cloud: "\uE216", file-cloud-outline: "\uF029", file-code: "\uE22D", file-code-outline: "\uF02A", file-cog: "\uF07A", file-cog-outline: "\uF07B", file-compare: "\uE8A9", file-delimited: "\uE217", file-delimited-outline: "\uEEA4", file-document: "\uE218", file-document-alert: "\uFA96", file-document-alert-outline: "\uFA97", file-document-check: "\uFA98", file-document-check-outline: "\uFA99", file-document-edit: "\uEDC7", file-document-edit-outline: "\uEDC8", file-document-minus: "\uFA9A", file-document-minus-outline: "\uFA9B", file-document-multiple: "\uF516", file-document-multiple-outline: "\uF517", file-document-outline: "\uE9ED", file-document-plus: "\uFA9C", file-document-plus-outline: "\uFA9D", file-document-remove: "\uFA9E", file-document-remove-outline: "\uFA9F", file-download: "\uE964", file-download-outline: "\uE965", file-edit: "\uF1E6", file-edit-outline: "\uF1E7", file-excel: "\uE21A", file-excel-box: "\uE21B", file-excel-box-outline: "\uF02B", file-excel-outline: "\uF02C", file-export: "\uE21C", file-export-outline: "\uF02D", file-eye: "\uEDC9", file-eye-outline: "\uEDCA", file-find: "\uE21D", file-find-outline: "\uEB96", file-gif-box: "\uED77", file-hidden: "\uE612", file-image: "\uE21E", file-image-marker: "\uF771", file-image-marker-outline: "\uF772", file-image-minus: "\uF93A", file-image-minus-outline: "\uF93B", file-image-outline: "\uEEAF", file-image-plus: "\uF93C", file-image-plus-outline: "\uF93D", file-image-remove: "\uF93E", file-image-remove-outline: "\uF93F", file-import: "\uE21F", file-import-outline: "\uF02E", file-jpg-box: "\uE224", file-key: "\uF183", file-key-outline: "\uF184", file-link: "\uF176", file-link-outline: "\uF177", file-lock: "\uE220", file-lock-open: "\uF9C7", file-lock-open-outline: "\uF9C8", file-lock-outline: "\uF02F", file-marker: "\uF773", file-marker-outline: "\uF774", file-minus: "\uFAA0", file-minus-outline: "\uFAA1", file-move: "\uEAB8", file-move-outline: "\uF030", file-multiple: "\uE221", file-multiple-outline: "\uF031", file-music: "\uE222", file-music-outline: "\uEE29", file-outline: "\uE223", file-pdf-box: "\uE225", file-percent: "\uE81D", file-percent-outline: "\uF032", file-phone: "\uF178", file-phone-outline: "\uF179", file-plus: "\uE751", file-plus-outline: "\uEEEC", file-png-box: "\uEE2C", file-powerpoint: "\uE226", file-powerpoint-box: "\uE227", file-powerpoint-box-outline: "\uF033", file-powerpoint-outline: "\uF034", file-presentation-box: "\uE228", file-question: "\uE86E", file-question-outline: "\uF035", file-refresh: "\uE917", file-refresh-outline: "\uE540", file-remove: "\uEB97", file-remove-outline: "\uF036", file-replace: "\uEB31", file-replace-outline: "\uEB32", file-restore: "\uE66F", file-restore-outline: "\uF037", file-rotate-left: "\uFA3A", file-rotate-left-outline: "\uFA3B", file-rotate-right: "\uFA3C", file-rotate-right-outline: "\uFA3D", file-search: "\uEC7B", file-search-outline: "\uEC7C", file-send: "\uE229", file-send-outline: "\uF038", file-settings: "\uF078", file-settings-outline: "\uF079", file-sign: "\uF9C2", file-star: "\uF039", file-star-outline: "\uF03A", file-swap: "\uEFB3", file-swap-outline: "\uEFB4", file-sync: "\uF215", file-sync-outline: "\uF216", file-table: "\uEC7D", file-table-box: "\uF0E0", file-table-box-multiple: "\uF0E1", file-table-box-multiple-outline: "\uF0E2", file-table-box-outline: "\uF0E3", file-table-outline: "\uEC7E", file-tree: "\uE644", file-tree-outline: "\uF3D1", file-undo: "\uE8DB", file-undo-outline: "\uF03B", file-upload: "\uEA4C", file-upload-outline: "\uEA4D", file-video: "\uE22A", file-video-outline: "\uEE2B", file-word: "\uE22B", file-word-box: "\uE22C", file-word-box-outline: "\uF03C", file-word-outline: "\uF03D", film: "\uE22E", filmstrip: "\uE22F", filmstrip-box: "\uE331", filmstrip-box-multiple: "\uED17", filmstrip-off: "\uE230", filter: "\uE231", filter-check: "\uF8EB", filter-check-outline: "\uF8EC", filter-cog: "\uFAA2", filter-cog-outline: "\uFAA3", filter-menu: "\uF0E4", filter-menu-outline: "\uF0E5", filter-minus: "\uEEED", filter-minus-outline: "\uEEEE", filter-multiple: "\uFA3E", filter-multiple-outline: "\uFA3F", filter-off: "\uF4EE", filter-off-outline: "\uF4EF", filter-outline: "\uE232", filter-plus: "\uEEEF", filter-plus-outline: "\uEEF0", filter-remove: "\uE233", filter-remove-outline: "\uE234", filter-settings: "\uFAA4", filter-settings-outline: "\uFAA5", filter-variant: "\uE235", filter-variant-minus: "\uF111", filter-variant-plus: "\uF112", filter-variant-remove: "\uF03E", finance: "\uE81E", find-replace: "\uE6D3", fingerprint: "\uE236", fingerprint-off: "\uEEB0", fire: "\uE237", fire-alert: "\uF5D6", fire-circle: "\uF806", fire-extinguisher: "\uEEF1", fire-hydrant: "\uF136", fire-hydrant-alert: "\uF137", fire-hydrant-off: "\uF138", fire-off: "\uF721", fire-truck: "\uE8AA", firebase: "\uE966", firefox: "\uE238", fireplace: "\uEE2D", fireplace-off: "\uEE2E", firewire: "\uE5BD", firework: "\uEE2F", firework-off: "\uF722", fish: "\uE239", fish-off: "\uF3F2", fishbowl: "\uEEF2", fishbowl-outline: "\uEEF3", fit-to-page: "\uEEF4", fit-to-page-outline: "\uEEF5", fit-to-screen: "\uF8F3", fit-to-screen-outline: "\uF8F4", flag: "\uE23A", flag-checkered: "\uE23B", flag-minus: "\uEB98", flag-minus-outline: "\uF0B1", flag-off: "\uF8ED", flag-off-outline: "\uF8EE", flag-outline: "\uE23C", flag-plus: "\uEB99", flag-plus-outline: "\uF0B2", flag-remove: "\uEB9A", flag-remove-outline: "\uF0B3", flag-triangle: "\uE23E", flag-variant: "\uE23F", flag-variant-outline: "\uE23D", flare: "\uED71", flash: "\uE240", flash-alert: "\uEEF6", flash-alert-outline: "\uEEF7", flash-auto: "\uE241", flash-off: "\uE242", flash-outline: "\uE6D4", flash-red-eye: "\uE67A", flashlight: "\uE243", flashlight-off: "\uE244", flask: "\uE092", flask-empty: "\uE093", flask-empty-minus: "\uF239", flask-empty-minus-outline: "\uF23A", flask-empty-off: "\uF3F3", flask-empty-off-outline: "\uF3F4", flask-empty-outline: "\uE094", flask-empty-plus: "\uF23B", flask-empty-plus-outline: "\uF23C", flask-empty-remove: "\uF23D", flask-empty-remove-outline: "\uF23E", flask-minus: "\uF23F", flask-minus-outline: "\uF240", flask-off: "\uF3F5", flask-off-outline: "\uF3F6", flask-outline: "\uE095", flask-plus: "\uF241", flask-plus-outline: "\uF242", flask-remove: "\uF243", flask-remove-outline: "\uF244", flask-round-bottom: "\uF24A", flask-round-bottom-empty: "\uF24B", flask-round-bottom-empty-outline: "\uF24C", flask-round-bottom-outline: "\uF24D", fleur-de-lis: "\uF302", flip-horizontal: "\uF0E6", flip-to-back: "\uE246", flip-to-front: "\uE247", flip-vertical: "\uF0E7", floor-lamp: "\uE8DC", floor-lamp-dual: "\uF03F", floor-lamp-dual-outline: "\uF7CD", floor-lamp-outline: "\uF7C7", floor-lamp-torchiere: "\uF746", floor-lamp-torchiere-outline: "\uF7D5", floor-lamp-torchiere-variant: "\uF040", floor-lamp-torchiere-variant-outline: "\uF7CE", floor-plan: "\uE820", floppy: "\uE248", floppy-variant: "\uE9EE", flower: "\uE249", flower-outline: "\uE9EF", flower-pollen: "\uF884", flower-pollen-outline: "\uF885", flower-poppy: "\uED07", flower-tulip: "\uE9F0", flower-tulip-outline: "\uE9F1", focus-auto: "\uEF4D", focus-field: "\uEF4E", focus-field-horizontal: "\uEF4F", focus-field-vertical: "\uEF50", folder: "\uE24A", folder-account: "\uE24B", folder-account-outline: "\uEB9B", folder-alert: "\uEDCB", folder-alert-outline: "\uEDCC", folder-arrow-down: "\uF9E7", folder-arrow-down-outline: "\uF9E8", folder-arrow-left: "\uF9E9", folder-arrow-left-outline: "\uF9EA", folder-arrow-left-right: "\uF9EB", folder-arrow-left-right-outline: "\uF9EC", folder-arrow-right: "\uF9ED", folder-arrow-right-outline: "\uF9EE", folder-arrow-up: "\uF9EF", folder-arrow-up-down: "\uF9F0", folder-arrow-up-down-outline: "\uF9F1", folder-arrow-up-outline: "\uF9F2", folder-cancel: "\uF9F3", folder-cancel-outline: "\uF9F4", folder-check: "\uF97D", folder-check-outline: "\uF97E", folder-clock: "\uEAB9", folder-clock-outline: "\uEABA", folder-cog: "\uF07E", folder-cog-outline: "\uF07F", folder-download: "\uE24C", folder-download-outline: "\uF0E8", folder-edit: "\uE8DD", folder-edit-outline: "\uEDCD", folder-eye: "\uF789", folder-eye-outline: "\uF78A", folder-file: "\uF9F5", folder-file-outline: "\uF9F6", folder-google-drive: "\uE24D", folder-heart: "\uF0E9", folder-heart-outline: "\uF0EA", folder-hidden: "\uF79D", folder-home: "\uF0B4", folder-home-outline: "\uF0B5", folder-image: "\uE24E", folder-information: "\uF0B6", folder-information-outline: "\uF0B7", folder-key: "\uE8AB", folder-key-network: "\uE8AC", folder-key-network-outline: "\uEC7F", folder-key-outline: "\uF0EB", folder-lock: "\uE24F", folder-lock-open: "\uE250", folder-lock-open-outline: "\uFAA6", folder-lock-outline: "\uFAA7", folder-marker: "\uF26C", folder-marker-outline: "\uF26D", folder-move: "\uE251", folder-move-outline: "\uF245", folder-multiple: "\uE252", folder-multiple-image: "\uE253", folder-multiple-outline: "\uE254", folder-multiple-plus: "\uF47D", folder-multiple-plus-outline: "\uF47E", folder-music: "\uF358", folder-music-outline: "\uF359", folder-network: "\uE86F", folder-network-outline: "\uEC80", folder-off: "\uF9F7", folder-off-outline: "\uF9F8", folder-open: "\uE76F", folder-open-outline: "\uEDCE", folder-outline: "\uE255", folder-play: "\uF9F9", folder-play-outline: "\uF9FA", folder-plus: "\uE256", folder-plus-outline: "\uEB9C", folder-pound: "\uED08", folder-pound-outline: "\uED09", folder-question: "\uF9C9", folder-question-outline: "\uF9CA", folder-refresh: "\uE748", folder-refresh-outline: "\uE541", folder-remove: "\uE257", folder-remove-outline: "\uEB9D", folder-search: "\uE967", folder-search-outline: "\uE968", folder-settings: "\uF07C", folder-settings-outline: "\uF07D", folder-star: "\uE69C", folder-star-multiple: "\uF3D2", folder-star-multiple-outline: "\uF3D3", folder-star-outline: "\uEB9E", folder-swap: "\uEFB5", folder-swap-outline: "\uEFB6", folder-sync: "\uED0A", folder-sync-outline: "\uED0B", folder-table: "\uF2E2", folder-table-outline: "\uF2E3", folder-text: "\uEC81", folder-text-outline: "\uEC82", folder-upload: "\uE258", folder-upload-outline: "\uF0EC", folder-wrench: "\uF9FB", folder-wrench-outline: "\uF9FC", folder-zip: "\uE6EA", folder-zip-outline: "\uE7B8", font-awesome: "\uE039", food: "\uE259", food-apple: "\uE25A", food-apple-outline: "\uEC83", food-croissant: "\uE7C7", food-drumstick: "\uF41E", food-drumstick-off: "\uF467", food-drumstick-off-outline: "\uF468", food-drumstick-outline: "\uF41F", food-fork-drink: "\uE5F1", food-halal: "\uF571", food-hot-dog: "\uF84A", food-kosher: "\uF572", food-off: "\uE5F2", food-off-outline: "\uF914", food-outline: "\uF915", food-steak: "\uF469", food-steak-off: "\uF46A", food-takeout-box: "\uF835", food-takeout-box-outline: "\uF836", food-turkey: "\uF71B", food-variant: "\uE25B", food-variant-off: "\uF3E4", foot-print: "\uEF51", football: "\uE25C", football-australian: "\uE25D", football-helmet: "\uE25E", forest: "\uF896", forklift: "\uE7C8", form-dropdown: "\uF3FF", form-select: "\uF400", form-textarea: "\uF094", form-textbox: "\uE60D", form-textbox-lock: "\uF35C", form-textbox-password: "\uE7F4", format-align-bottom: "\uE752", format-align-center: "\uE25F", format-align-justify: "\uE260", format-align-left: "\uE261", format-align-middle: "\uE753", format-align-right: "\uE262", format-align-top: "\uE754", format-annotation-minus: "\uEABB", format-annotation-plus: "\uE645", format-bold: "\uE263", format-clear: "\uE264", format-color-fill: "\uE265", format-color-highlight: "\uEE30", format-color-marker-cancel: "\uF312", format-color-text: "\uE69D", format-columns: "\uE8DE", format-float-center: "\uE266", format-float-left: "\uE267", format-float-none: "\uE268", format-float-right: "\uE269", format-font: "\uE6D5", format-font-size-decrease: "\uE9F2", format-font-size-increase: "\uE9F3", format-header-1: "\uE26A", format-header-2: "\uE26B", format-header-3: "\uE26C", format-header-4: "\uE26D", format-header-5: "\uE26E", format-header-6: "\uE26F", format-header-decrease: "\uE270", format-header-equal: "\uE271", format-header-increase: "\uE272", format-header-pound: "\uE273", format-horizontal-align-center: "\uE61D", format-horizontal-align-left: "\uE61E", format-horizontal-align-right: "\uE61F", format-indent-decrease: "\uE274", format-indent-increase: "\uE275", format-italic: "\uE276", format-letter-case: "\uEB33", format-letter-case-lower: "\uEB34", format-letter-case-upper: "\uEB35", format-letter-ends-with: "\uEFB7", format-letter-matches: "\uEFB8", format-letter-spacing: "\uF955", format-letter-starts-with: "\uEFB9", format-line-spacing: "\uE277", format-line-style: "\uE5C7", format-line-weight: "\uE5C8", format-list-bulleted: "\uE278", format-list-bulleted-square: "\uEDCF", format-list-bulleted-triangle: "\uEEB1", format-list-bulleted-type: "\uE279", format-list-checkbox: "\uE969", format-list-checks: "\uE755", format-list-group: "\uF85F", format-list-numbered: "\uE27A", format-list-numbered-rtl: "\uED0C", format-list-text: "\uF26E", format-overline: "\uEEB2", format-page-break: "\uE6D6", format-page-split: "\uF916", format-paint: "\uE27B", format-paragraph: "\uE27C", format-pilcrow: "\uE6D7", format-quote-close: "\uE27D", format-quote-close-outline: "\uF1A7", format-quote-open: "\uE756", format-quote-open-outline: "\uF1A6", format-rotate-90: "\uE6A9", format-section: "\uE69E", format-size: "\uE27E", format-strikethrough: "\uE27F", format-strikethrough-variant: "\uE280", format-subscript: "\uE281", format-superscript: "\uE282", format-text: "\uE283", format-text-rotation-angle-down: "\uEFBA", format-text-rotation-angle-up: "\uEFBB", format-text-rotation-down: "\uED72", format-text-rotation-down-vertical: "\uEFBC", format-text-rotation-none: "\uED73", format-text-rotation-up: "\uEFBD", format-text-rotation-vertical: "\uEFBE", format-text-variant: "\uEE31", format-text-variant-outline: "\uF50E", format-text-wrapping-clip: "\uED0D", format-text-wrapping-overflow: "\uED0E", format-text-wrapping-wrap: "\uED0F", format-textbox: "\uED10", format-textdirection-l-to-r: "\uE284", format-textdirection-r-to-l: "\uE285", format-title: "\uE5F3", format-underline: "\uE286", format-underline-wavy: "\uF8E8", format-vertical-align-bottom: "\uE620", format-vertical-align-center: "\uE621", format-vertical-align-top: "\uE622", format-wrap-inline: "\uE287", format-wrap-square: "\uE288", format-wrap-tight: "\uE289", format-wrap-top-bottom: "\uE28A", forum: "\uE28B", forum-minus: "\uFAA8", forum-minus-outline: "\uFAA9", forum-outline: "\uE821", forum-plus: "\uFAAA", forum-plus-outline: "\uFAAB", forum-remove: "\uFAAC", forum-remove-outline: "\uFAAD", forward: "\uE28C", forwardburger: "\uED74", fountain: "\uE96A", fountain-pen: "\uED11", fountain-pen-tip: "\uED12", fraction-one-half: "\uF991", freebsd: "\uE8DF", french-fries: "\uF956", frequently-asked-questions: "\uEEB3", fridge: "\uE28F", fridge-alert: "\uF1B0", fridge-alert-outline: "\uF1B1", fridge-bottom: "\uE291", fridge-industrial: "\uF5ED", fridge-industrial-alert: "\uF5EE", fridge-industrial-alert-outline: "\uF5EF", fridge-industrial-off: "\uF5F0", fridge-industrial-off-outline: "\uF5F1", fridge-industrial-outline: "\uF5F2", fridge-off: "\uF1AE", fridge-off-outline: "\uF1AF", fridge-outline: "\uE28E", fridge-top: "\uE290", fridge-variant: "\uF5F3", fridge-variant-alert: "\uF5F4", fridge-variant-alert-outline: "\uF5F5", fridge-variant-off: "\uF5F6", fridge-variant-off-outline: "\uF5F7", fridge-variant-outline: "\uF5F8", fruit-cherries: "\uF041", fruit-cherries-off: "\uF3F7", fruit-citrus: "\uF042", fruit-citrus-off: "\uF3F8", fruit-grapes: "\uF043", fruit-grapes-outline: "\uF044", fruit-pear: "\uFA0D", fruit-pineapple: "\uF045", fruit-watermelon: "\uF046", fuel: "\uE7C9", fuel-cell: "\uF8B4", fullscreen: "\uE292", fullscreen-exit: "\uE293", function: "\uE294", function-variant: "\uE870", furigana-horizontal: "\uF080", furigana-vertical: "\uF081", fuse: "\uEC84", fuse-alert: "\uF42C", fuse-blade: "\uEC85", fuse-off: "\uF42B", gamepad: "\uE295", gamepad-circle: "\uEE32", gamepad-circle-down: "\uEE33", gamepad-circle-left: "\uEE34", gamepad-circle-outline: "\uEE35", gamepad-circle-right: "\uEE36", gamepad-circle-up: "\uEE37", gamepad-down: "\uEE38", gamepad-left: "\uEE39", gamepad-outline: "\uF918", gamepad-right: "\uEE3A", gamepad-round: "\uEE3B", gamepad-round-down: "\uEE3C", gamepad-round-left: "\uEE3D", gamepad-round-outline: "\uEE3E", gamepad-round-right: "\uEE3F", gamepad-round-up: "\uEE40", gamepad-square: "\uEEB4", gamepad-square-outline: "\uEEB5", gamepad-up: "\uEE41", gamepad-variant: "\uE296", gamepad-variant-outline: "\uEEB6", gamma: "\uF0ED", gantry-crane: "\uEDD0", garage: "\uE6D8", garage-alert: "\uE871", garage-alert-variant: "\uF2D4", garage-lock: "\uF7FA", garage-open: "\uE6D9", garage-open-variant: "\uF2D3", garage-variant: "\uF2D2", garage-variant-lock: "\uF7FB", gas-burner: "\uFA1A", gas-cylinder: "\uE646", gas-station: "\uE297", gas-station-off: "\uF408", gas-station-off-outline: "\uF409", gas-station-outline: "\uEEB7", gate: "\uE298", gate-alert: "\uF7F7", gate-and: "\uE8E0", gate-arrow-left: "\uF7F6", gate-arrow-right: "\uF168", gate-nand: "\uE8E1", gate-nor: "\uE8E2", gate-not: "\uE8E3", gate-open: "\uF169", gate-or: "\uE8E4", gate-xnor: "\uE8E5", gate-xor: "\uE8E6", gatsby: "\uEE42", gauge: "\uE299", gauge-empty: "\uE872", gauge-full: "\uE873", gauge-low: "\uE874", gavel: "\uE29A", gender-female: "\uE29B", gender-male: "\uE29C", gender-male-female: "\uE29D", gender-male-female-variant: "\uF13E", gender-non-binary: "\uF13F", gender-transgender: "\uE29E", gentoo: "\uE8E7", gesture: "\uE7CA", gesture-double-tap: "\uE73B", gesture-pinch: "\uEABC", gesture-spread: "\uEABD", gesture-swipe: "\uED75", gesture-swipe-down: "\uE73C", gesture-swipe-horizontal: "\uEABE", gesture-swipe-left: "\uE73D", gesture-swipe-right: "\uE73E", gesture-swipe-up: "\uE73F", gesture-swipe-vertical: "\uEABF", gesture-tap: "\uE740", gesture-tap-box: "\uF2A8", gesture-tap-button: "\uF2A7", gesture-tap-hold: "\uED76", gesture-two-double-tap: "\uE741", gesture-two-tap: "\uE742", ghost: "\uE29F", ghost-off: "\uE9F4", ghost-off-outline: "\uF65B", ghost-outline: "\uF65C", gift: "\uEE43", gift-off: "\uF6EE", gift-off-outline: "\uF6EF", gift-open: "\uF6F0", gift-open-outline: "\uF6F1", gift-outline: "\uE2A0", git: "\uE2A1", github: "\uE2A3", gitlab: "\uEB9F", glass-cocktail: "\uE355", glass-cocktail-off: "\uF5E5", glass-flute: "\uE2A4", glass-fragile: "\uF872", glass-mug: "\uE2A5", glass-mug-off: "\uF5E6", glass-mug-variant: "\uF115", glass-mug-variant-off: "\uF5E7", glass-pint-outline: "\uF30C", glass-stange: "\uE2A6", glass-tulip: "\uE2A7", glass-wine: "\uE875", glasses: "\uE2A9", globe-light: "\uF2D6", globe-model: "\uE8E8", gmail: "\uE2AA", gnome: "\uE2AB", go-kart: "\uED78", go-kart-track: "\uED79", gog: "\uEBA0", gold: "\uF24E", golf: "\uE822", golf-cart: "\uF1A3", golf-tee: "\uF082", gondola: "\uE685", goodreads: "\uED7A", google: "\uE2AC", google-ads: "\uEC86", google-analytics: "\uE7CB", google-assistant: "\uE7CC", google-cardboard: "\uE2AD", google-chrome: "\uE2AE", google-circles: "\uE2AF", google-circles-communities: "\uE2B0", google-circles-extended: "\uE2B1", google-circles-group: "\uE2B2", google-classroom: "\uE2BF", google-cloud: "\uF1F5", google-controller: "\uE2B3", google-controller-off: "\uE2B4", google-downasaur: "\uF361", google-drive: "\uE2B5", google-earth: "\uE2B6", google-fit: "\uE96B", google-glass: "\uE2B7", google-hangouts: "\uE2C8", google-home: "\uE823", google-keep: "\uE6DB", google-lens: "\uE9F5", google-maps: "\uE5F4", google-my-business: "\uF047", google-nearby: "\uE2B8", google-play: "\uE2BB", google-plus: "\uE2BC", google-podcast: "\uEEB8", google-spreadsheet: "\uE9F6", google-street-view: "\uEC87", google-translate: "\uE2BE", gradient-horizontal: "\uF749", gradient-vertical: "\uE69F", grain: "\uED7B", graph: "\uF048", graph-outline: "\uF049", graphql: "\uE876", grass: "\uF50F", grave-stone: "\uEBA1", grease-pencil: "\uE647", greater-than: "\uE96C", greater-than-or-equal: "\uE96D", greenhouse: "\uE02C", grid: "\uE2C0", grid-large: "\uE757", grid-off: "\uE2C1", grill: "\uEE44", grill-outline: "\uF189", group: "\uE2C2", guitar-acoustic: "\uE770", guitar-electric: "\uE2C3", guitar-pick: "\uE2C4", guitar-pick-outline: "\uE2C5", guy-fawkes-mask: "\uE824", gymnastics: "\uFA40", hail: "\uEAC0", hair-dryer: "\uF0EE", hair-dryer-outline: "\uF0EF", halloween: "\uEBA2", hamburger: "\uE684", hamburger-check: "\uF775", hamburger-minus: "\uF776", hamburger-off: "\uF777", hamburger-plus: "\uF778", hamburger-remove: "\uF779", hammer: "\uE8E9", hammer-screwdriver: "\uF321", hammer-sickle: "\uF886", hammer-wrench: "\uF322", hand-back-left: "\uEE45", hand-back-left-off: "\uF82F", hand-back-left-off-outline: "\uF831", hand-back-left-outline: "\uF82B", hand-back-right: "\uEE46", hand-back-right-off: "\uF830", hand-back-right-off-outline: "\uF832", hand-back-right-outline: "\uF82C", hand-clap: "\uF94A", hand-clap-off: "\uFA41", hand-coin: "\uF88E", hand-coin-outline: "\uF88F", hand-extended: "\uF8B5", hand-extended-outline: "\uF8B6", hand-front-left: "\uF82A", hand-front-left-outline: "\uF82D", hand-front-right: "\uEA4E", hand-front-right-outline: "\uF82E", hand-heart: "\uF0F0", hand-heart-outline: "\uF57D", hand-okay: "\uEA4F", hand-peace: "\uEA50", hand-peace-variant: "\uEA51", hand-pointing-down: "\uEA52", hand-pointing-left: "\uEA53", hand-pointing-right: "\uE2C6", hand-pointing-up: "\uEA54", hand-saw: "\uEE47", hand-wash: "\uF57E", hand-wash-outline: "\uF57F", hand-water: "\uF39E", hand-wave: "\uF820", hand-wave-outline: "\uF821", handball: "\uEF52", handcuffs: "\uF13D", hands-pray: "\uE578", handshake: "\uF217", handshake-outline: "\uF5A0", hanger: "\uE2C7", hard-hat: "\uE96E", harddisk: "\uE2C9", harddisk-plus: "\uF04A", harddisk-remove: "\uF04B", hat-fedora: "\uEBA3", hazard-lights: "\uEC88", hdr: "\uED7C", hdr-off: "\uED7D", head: "\uF35D", head-alert: "\uF337", head-alert-outline: "\uF338", head-check: "\uF339", head-check-outline: "\uF33A", head-cog: "\uF33B", head-cog-outline: "\uF33C", head-dots-horizontal: "\uF33D", head-dots-horizontal-outline: "\uF33E", head-flash: "\uF33F", head-flash-outline: "\uF340", head-heart: "\uF341", head-heart-outline: "\uF342", head-lightbulb: "\uF343", head-lightbulb-outline: "\uF344", head-minus: "\uF345", head-minus-outline: "\uF346", head-outline: "\uF35E", head-plus: "\uF347", head-plus-outline: "\uF348", head-question: "\uF349", head-question-outline: "\uF34A", head-remove: "\uF34B", head-remove-outline: "\uF34C", head-snowflake: "\uF34D", head-snowflake-outline: "\uF34E", head-sync: "\uF34F", head-sync-outline: "\uF350", headphones: "\uE2CA", headphones-bluetooth: "\uE96F", headphones-box: "\uE2CB", headphones-off: "\uE7CD", headphones-settings: "\uE2CC", headset: "\uE2CD", headset-dock: "\uE2CE", headset-off: "\uE2CF", heart: "\uE2D0", heart-box: "\uE2D1", heart-box-outline: "\uE2D2", heart-broken: "\uE2D3", heart-broken-outline: "\uED13", heart-circle: "\uE970", heart-circle-outline: "\uE971", heart-cog: "\uF662", heart-cog-outline: "\uF663", heart-flash: "\uEEF8", heart-half: "\uE6DE", heart-half-full: "\uE6DD", heart-half-outline: "\uE6DF", heart-minus: "\uF42E", heart-minus-outline: "\uF431", heart-multiple: "\uEA55", heart-multiple-outline: "\uEA56", heart-off: "\uE758", heart-off-outline: "\uF433", heart-outline: "\uE2D4", heart-plus: "\uF42D", heart-plus-outline: "\uF430", heart-pulse: "\uE5F5", heart-remove: "\uF42F", heart-remove-outline: "\uF432", heart-settings: "\uF664", heart-settings-outline: "\uF665", heat-pump: "\uFA42", heat-pump-outline: "\uFA43", heat-wave: "\uFA44", heating-coil: "\uFAAE", helicopter: "\uEAC1", help: "\uE2D5", help-box: "\uE78A", help-circle: "\uE2D6", help-circle-outline: "\uE624", help-network: "\uE6F4", help-network-outline: "\uEC89", help-rhombus: "\uEBA4", help-rhombus-outline: "\uEBA5", hexadecimal: "\uF2A6", hexagon: "\uE2D7", hexagon-multiple: "\uE6E0", hexagon-multiple-outline: "\uF0F1", hexagon-outline: "\uE2D8", hexagon-slice-1: "\uEAC2", hexagon-slice-2: "\uEAC3", hexagon-slice-3: "\uEAC4", hexagon-slice-4: "\uEAC5", hexagon-slice-5: "\uEAC6", hexagon-slice-6: "\uEAC7", hexagram: "\uEAC8", hexagram-outline: "\uEAC9", high-definition: "\uE7CE", high-definition-box: "\uE877", highway: "\uE5F6", hiking: "\uED7E", history: "\uE2D9", hockey-puck: "\uE878", hockey-sticks: "\uE879", hololens: "\uE2DA", home: "\uE2DB", home-account: "\uE825", home-alert: "\uE87A", home-alert-outline: "\uF5CF", home-analytics: "\uEEB9", home-assistant: "\uE7CF", home-automation: "\uE7D0", home-battery: "\uF900", home-battery-outline: "\uF901", home-circle: "\uE7D1", home-circle-outline: "\uF04C", home-city: "\uED14", home-city-outline: "\uED15", home-clock: "\uFA11", home-clock-outline: "\uFA12", home-edit: "\uF158", home-edit-outline: "\uF159", home-export-outline: "\uEF9A", home-flood: "\uEEF9", home-floor-0: "\uEDD1", home-floor-1: "\uED7F", home-floor-2: "\uED80", home-floor-3: "\uED81", home-floor-a: "\uED82", home-floor-b: "\uED83", home-floor-g: "\uED84", home-floor-l: "\uED85", home-floor-negative-1: "\uEDD2", home-group: "\uEDD3", home-group-minus: "\uF9C0", home-group-plus: "\uF9BF", home-group-remove: "\uF9C1", home-heart: "\uE826", home-import-outline: "\uEF9B", home-lightbulb: "\uF250", home-lightbulb-outline: "\uF251", home-lightning-bolt: "\uF902", home-lightning-bolt-outline: "\uF903", home-lock: "\uE8EA", home-lock-open: "\uE8EB", home-map-marker: "\uE5F7", home-minus: "\uE973", home-minus-outline: "\uF3D4", home-modern: "\uE2DC", home-off: "\uFA45", home-off-outline: "\uFA46", home-outline: "\uE6A0", home-plus: "\uE974", home-plus-outline: "\uF3D5", home-remove: "\uF246", home-remove-outline: "\uF3D6", home-roof: "\uF12A", home-search: "\uF3AF", home-search-outline: "\uF3B0", home-switch: "\uF793", home-switch-outline: "\uF794", home-thermometer: "\uEF53", home-thermometer-outline: "\uEF54", home-variant: "\uE2DD", home-variant-outline: "\uEBA6", hook: "\uE6E1", hook-off: "\uE6E2", hoop-house: "\uEE55", hops: "\uE2DE", horizontal-rotate-clockwise: "\uF0F2", horizontal-rotate-counterclockwise: "\uF0F3", horse: "\uF5BE", horse-human: "\uF5BF", horse-variant: "\uF5C0", horse-variant-fast: "\uF86D", horseshoe: "\uEA57", hospital: "\uEFF5", hospital-box: "\uE2DF", hospital-box-outline: "\uEFF6", hospital-building: "\uE2E0", hospital-marker: "\uE2E1", hot-tub: "\uE827", hours-24: "\uF477", hubspot: "\uED16", hulu: "\uE828", human: "\uE2E5", human-baby-changing-table: "\uF38A", human-cane: "\uF580", human-capacity-decrease: "\uF59A", human-capacity-increase: "\uF59B", human-child: "\uE2E6", human-dolly: "\uF97F", human-edit: "\uF4E7", human-female: "\uE648", human-female-boy: "\uEA58", human-female-dance: "\uF5C8", human-female-female: "\uEA59", human-female-girl: "\uEA5A", human-greeting: "\uF7C3", human-greeting-proximity: "\uF59C", human-greeting-variant: "\uE649", human-handsdown: "\uE64A", human-handsup: "\uE64B", human-male: "\uE64C", human-male-board: "\uE88F", human-male-board-poll: "\uE845", human-male-boy: "\uEA5B", human-male-child: "\uF38B", human-male-female: "\uE2E7", human-male-female-child: "\uF822", human-male-girl: "\uEA5C", human-male-height: "\uEEFA", human-male-height-variant: "\uEEFB", human-male-male: "\uEA5D", human-non-binary: "\uF847", human-pregnant: "\uE5CE", human-queue: "\uF570", human-scooter: "\uF1E8", human-wheelchair: "\uF38C", human-white-cane: "\uF980", humble-bundle: "\uE743", hvac: "\uF351", hvac-off: "\uF59D", hydraulic-oil-level: "\uF323", hydraulic-oil-temperature: "\uF324", hydro-power: "\uF2E4", hydrogen-station: "\uF893", ice-cream: "\uE829", ice-cream-off: "\uEE51", ice-pop: "\uEEFC", id-card: "\uEFBF", identifier: "\uEEFD", ideogram-cjk: "\uF330", ideogram-cjk-variant: "\uF331", image: "\uE2E8", image-album: "\uE2E9", image-area: "\uE2EA", image-area-close: "\uE2EB", image-auto-adjust: "\uEFC0", image-broken: "\uE2EC", image-broken-variant: "\uE2ED", image-edit: "\uF1E2", image-edit-outline: "\uF1E3", image-filter-black-white: "\uE2EF", image-filter-center-focus: "\uE2F0", image-filter-center-focus-strong: "\uEEFE", image-filter-center-focus-strong-outline: "\uEEFF", image-filter-center-focus-weak: "\uE2F1", image-filter-drama: "\uE2F2", image-filter-frames: "\uE2F3", image-filter-hdr: "\uE2F4", image-filter-none: "\uE2F5", image-filter-tilt-shift: "\uE2F6", image-filter-vintage: "\uE2F7", image-frame: "\uEE48", image-lock: "\uFAAF", image-lock-outline: "\uFAB0", image-marker: "\uF77A", image-marker-outline: "\uF77B", image-minus: "\uF418", image-move: "\uE9F7", image-multiple: "\uE2F8", image-multiple-outline: "\uE2EE", image-off: "\uE82A", image-off-outline: "\uF1D0", image-outline: "\uE975", image-plus: "\uE87B", image-refresh: "\uF9FD", image-refresh-outline: "\uF9FE", image-remove: "\uF417", image-search: "\uE976", image-search-outline: "\uE977", image-size-select-actual: "\uEC8C", image-size-select-large: "\uEC8D", image-size-select-small: "\uEC8E", image-sync: "\uF9FF", image-sync-outline: "\uFA00", image-text: "\uF60C", import: "\uE2F9", inbox: "\uE686", inbox-arrow-down: "\uE2FA", inbox-arrow-down-outline: "\uF26F", inbox-arrow-up: "\uE3D0", inbox-arrow-up-outline: "\uF270", inbox-full: "\uF271", inbox-full-outline: "\uF272", inbox-multiple: "\uE8AF", inbox-multiple-outline: "\uEBA7", inbox-outline: "\uF273", inbox-remove: "\uF59E", inbox-remove-outline: "\uF59F", incognito: "\uE5F8", incognito-circle: "\uF420", incognito-circle-off: "\uF421", incognito-off: "\uE074", induction: "\uF84B", infinity: "\uE6E3", information: "\uE2FB", information-off: "\uF78B", information-off-outline: "\uF78C", information-outline: "\uE2FC", information-variant: "\uE64D", instagram: "\uE2FD", instrument-triangle: "\uF04D", integrated-circuit-chip: "\uF912", invert-colors: "\uE300", invert-colors-off: "\uEE49", iobroker: "\uF2E7", ip: "\uEA5E", ip-network: "\uEA5F", ip-network-outline: "\uEC8F", ip-outline: "\uF981", ipod: "\uEC90", iron: "\uF823", iron-board: "\uF837", iron-outline: "\uF824", island: "\uF04E", iv-bag: "\uF0B8", jabber: "\uEDD4", jeepney: "\uE301", jellyfish: "\uEF00", jellyfish-outline: "\uEF01", jira: "\uE302", jquery: "\uE87C", jsfiddle: "\uE303", jump-rope: "\uF2FE", kabaddi: "\uED86", kangaroo: "\uF557", karate: "\uE82B", kayaking: "\uE8AE", keg: "\uE304", kettle: "\uE5F9", kettle-alert: "\uF316", kettle-alert-outline: "\uF317", kettle-off: "\uF31A", kettle-off-outline: "\uF31B", kettle-outline: "\uEF55", kettle-pour-over: "\uF73B", kettle-steam: "\uF318", kettle-steam-outline: "\uF319", kettlebell: "\uF2FF", key: "\uE305", key-alert: "\uF982", key-alert-outline: "\uF983", key-arrow-right: "\uF311", key-chain: "\uF573", key-chain-variant: "\uF574", key-change: "\uE306", key-link: "\uF19E", key-minus: "\uE307", key-outline: "\uEDD5", key-plus: "\uE308", key-remove: "\uE309", key-star: "\uF19D", key-variant: "\uE30A", key-wireless: "\uEFC1", keyboard: "\uE30B", keyboard-backspace: "\uE30C", keyboard-caps: "\uE30D", keyboard-close: "\uE30E", keyboard-esc: "\uF2B6", keyboard-f1: "\uF2AA", keyboard-f10: "\uF2B3", keyboard-f11: "\uF2B4", keyboard-f12: "\uF2B5", keyboard-f2: "\uF2AB", keyboard-f3: "\uF2AC", keyboard-f4: "\uF2AD", keyboard-f5: "\uF2AE", keyboard-f6: "\uF2AF", keyboard-f7: "\uF2B0", keyboard-f8: "\uF2B1", keyboard-f9: "\uF2B2", keyboard-off: "\uE30F", keyboard-off-outline: "\uEE4A", keyboard-outline: "\uE97A", keyboard-return: "\uE310", keyboard-settings: "\uE9F8", keyboard-settings-outline: "\uE9F9", keyboard-space: "\uF04F", keyboard-tab: "\uE311", keyboard-tab-reverse: "\uE324", keyboard-variant: "\uE312", khanda: "\uF0FC", kickstarter: "\uE744", kite: "\uF984", kite-outline: "\uF985", kitesurfing: "\uF743", klingon: "\uF35A", knife: "\uE9FA", knife-military: "\uE9FB", koala: "\uF73E", kodi: "\uE313", kubernetes: "\uF0FD", label: "\uE314", label-multiple: "\uF374", label-multiple-outline: "\uF375", label-off: "\uEACA", label-off-outline: "\uEACB", label-outline: "\uE315", label-percent: "\uF2E9", label-percent-outline: "\uF2EA", label-variant: "\uEACC", label-variant-outline: "\uEACD", ladder: "\uF5A1", ladybug: "\uE82C", lambda: "\uE626", lamp: "\uE6B4", lamp-outline: "\uF7CF", lamps: "\uF575", lamps-outline: "\uF7D0", lan: "\uE316", lan-check: "\uF2A9", lan-connect: "\uE317", lan-disconnect: "\uE318", lan-pending: "\uE319", land-fields: "\uFAB1", land-plots: "\uFAB2", land-plots-circle: "\uFAB3", land-plots-circle-variant: "\uFAB4", land-rows-horizontal: "\uFAB5", land-rows-vertical: "\uFAB6", landslide: "\uFA47", landslide-outline: "\uFA48", language-c: "\uE670", language-cpp: "\uE671", language-csharp: "\uE31A", language-css3: "\uE31B", language-fortran: "\uF219", language-go: "\uE7D2", language-haskell: "\uEC91", language-html5: "\uE31C", language-java: "\uEB36", language-javascript: "\uE31D", language-kotlin: "\uF218", language-lua: "\uE8B0", language-markdown: "\uE353", language-markdown-outline: "\uEF5A", language-php: "\uE31E", language-python: "\uE31F", language-r: "\uE7D3", language-ruby: "\uED2C", language-ruby-on-rails: "\uEACE", language-rust: "\uF616", language-swift: "\uE6E4", language-typescript: "\uE6E5", language-xaml: "\uE672", laptop: "\uE321", laptop-account: "\uFA49", laptop-off: "\uE6E6", laravel: "\uEACF", laser-pointer: "\uF483", lasso: "\uEF02", lastpass: "\uE445", latitude: "\uEF56", launch: "\uE326", lava-lamp: "\uE7D4", layers: "\uE327", layers-edit: "\uF891", layers-minus: "\uEE4B", layers-off: "\uE328", layers-off-outline: "\uE9FC", layers-outline: "\uE9FD", layers-plus: "\uEE4C", layers-remove: "\uEE4D", layers-search: "\uF205", layers-search-outline: "\uF206", layers-triple: "\uEF57", layers-triple-outline: "\uEF58", lead-pencil: "\uE64E", leaf: "\uE329", leaf-circle: "\uF904", leaf-circle-outline: "\uF905", leaf-maple: "\uEC92", leaf-maple-off: "\uF2D9", leaf-off: "\uF2D8", leak: "\uEDD6", leak-off: "\uEDD7", lecturn: "\uFAEF", led-off: "\uE32A", led-on: "\uE32B", led-outline: "\uE32C", led-strip: "\uE7D5", led-strip-variant: "\uF050", led-strip-variant-off: "\uFA4A", led-variant-off: "\uE32D", led-variant-on: "\uE32E", led-variant-outline: "\uE32F", leek: "\uF17C", less-than: "\uE97B", less-than-or-equal: "\uE97C", library: "\uE330", library-outline: "\uFA21", library-shelves: "\uEBA8", license: "\uEFC2", lifebuoy: "\uE87D", light-flood-down: "\uF986", light-flood-up: "\uF987", light-recessed: "\uF79A", light-switch: "\uE97D", light-switch-off: "\uFA23", lightbulb: "\uE334", lightbulb-alert: "\uF9E0", lightbulb-alert-outline: "\uF9E1", lightbulb-auto: "\uF7FF", lightbulb-auto-outline: "\uF800", lightbulb-cfl: "\uF207", lightbulb-cfl-off: "\uF208", lightbulb-cfl-spiral: "\uF274", lightbulb-cfl-spiral-off: "\uF2C2", lightbulb-fluorescent-tube: "\uF803", lightbulb-fluorescent-tube-outline: "\uF804", lightbulb-group: "\uF252", lightbulb-group-off: "\uF2CC", lightbulb-group-off-outline: "\uF2CD", lightbulb-group-outline: "\uF253", lightbulb-multiple: "\uF254", lightbulb-multiple-off: "\uF2CE", lightbulb-multiple-off-outline: "\uF2CF", lightbulb-multiple-outline: "\uF255", lightbulb-night: "\uFA4B", lightbulb-night-outline: "\uFA4C", lightbulb-off: "\uEE4E", lightbulb-off-outline: "\uEE4F", lightbulb-on: "\uE6E7", lightbulb-on-10: "\uFA4D", lightbulb-on-20: "\uFA4E", lightbulb-on-30: "\uFA4F", lightbulb-on-40: "\uFA50", lightbulb-on-50: "\uFA51", lightbulb-on-60: "\uFA52", lightbulb-on-70: "\uFA53", lightbulb-on-80: "\uFA54", lightbulb-on-90: "\uFA55", lightbulb-on-outline: "\uE6E8", lightbulb-outline: "\uE335", lightbulb-question: "\uF9E2", lightbulb-question-outline: "\uF9E3", lightbulb-spot: "\uF7F3", lightbulb-spot-off: "\uF7F4", lightbulb-variant: "\uF801", lightbulb-variant-outline: "\uF802", lighthouse: "\uE9FE", lighthouse-on: "\uE9FF", lightning-bolt: "\uF40A", lightning-bolt-circle: "\uE81F", lightning-bolt-outline: "\uF40B", line-scan: "\uE623", lingerie: "\uF475", link: "\uE336", link-box: "\uED19", link-box-outline: "\uED1A", link-box-variant: "\uED1B", link-box-variant-outline: "\uED1C", link-lock: "\uF0B9", link-off: "\uE337", link-plus: "\uEC93", link-variant: "\uE338", link-variant-minus: "\uF0FE", link-variant-off: "\uE339", link-variant-plus: "\uF0FF", link-variant-remove: "\uF100", linkedin: "\uE33A", linux: "\uE33C", linux-mint: "\uE8EC", lipstick: "\uF3B4", liquid-spot: "\uF825", liquor: "\uF91D", list-status: "\uF5AA", litecoin: "\uEA60", loading: "\uE771", location-enter: "\uEFC3", location-exit: "\uEFC4", lock: "\uE33D", lock-alert: "\uE8ED", lock-alert-outline: "\uF5D0", lock-check: "\uF399", lock-check-outline: "\uF6A7", lock-clock: "\uE97E", lock-minus: "\uF6A8", lock-minus-outline: "\uF6A9", lock-off: "\uF670", lock-off-outline: "\uF671", lock-open: "\uE33E", lock-open-alert: "\uF39A", lock-open-alert-outline: "\uF5D1", lock-open-check: "\uF39B", lock-open-check-outline: "\uF6AA", lock-open-minus: "\uF6AB", lock-open-minus-outline: "\uF6AC", lock-open-outline: "\uE33F", lock-open-plus: "\uF6AD", lock-open-plus-outline: "\uF6AE", lock-open-remove: "\uF6AF", lock-open-remove-outline: "\uF6B0", lock-open-variant: "\uEFC5", lock-open-variant-outline: "\uEFC6", lock-outline: "\uE340", lock-pattern: "\uE6E9", lock-plus: "\uE5FA", lock-plus-outline: "\uF6B1", lock-question: "\uE8EE", lock-remove: "\uF6B2", lock-remove-outline: "\uF6B3", lock-reset: "\uE772", lock-smart: "\uE8B1", locker: "\uE7D6", locker-multiple: "\uE7D7", login: "\uE341", login-variant: "\uE5FB", logout: "\uE342", logout-variant: "\uE5FC", longitude: "\uEF59", looks: "\uE343", lotion: "\uF581", lotion-outline: "\uF582", lotion-plus: "\uF583", lotion-plus-outline: "\uF584", loupe: "\uE344", lumx: "\uE345", lungs: "\uF083", mace: "\uF842", magazine-pistol: "\uE323", magazine-rifle: "\uE322", magic-staff: "\uF843", magnet: "\uE346", magnet-on: "\uE347", magnify: "\uE348", magnify-close: "\uE97F", magnify-expand: "\uF873", magnify-minus: "\uE349", magnify-minus-cursor: "\uEA61", magnify-minus-outline: "\uE6EB", magnify-plus: "\uE34A", magnify-plus-cursor: "\uEA62", magnify-plus-outline: "\uE6EC", magnify-remove-cursor: "\uF20B", magnify-remove-outline: "\uF20C", magnify-scan: "\uF275", mail: "\uEEBA", mailbox: "\uE6ED", mailbox-open: "\uED87", mailbox-open-outline: "\uED88", mailbox-open-up: "\uED89", mailbox-open-up-outline: "\uED8A", mailbox-outline: "\uED8B", mailbox-up: "\uED8C", mailbox-up-outline: "\uED8D", manjaro: "\uF609", map: "\uE34C", map-check: "\uEEBB", map-check-outline: "\uEEBC", map-clock: "\uED1D", map-clock-outline: "\uED1E", map-legend: "\uEA00", map-marker: "\uE34D", map-marker-account: "\uF8E2", map-marker-account-outline: "\uF8E3", map-marker-alert: "\uEF04", map-marker-alert-outline: "\uEF05", map-marker-check: "\uEC94", map-marker-check-outline: "\uF2FA", map-marker-circle: "\uE34E", map-marker-distance: "\uE8EF", map-marker-down: "\uF101", map-marker-left: "\uF2DA", map-marker-left-outline: "\uF2DC", map-marker-minus: "\uE64F", map-marker-minus-outline: "\uF2F8", map-marker-multiple: "\uE34F", map-marker-multiple-outline: "\uF276", map-marker-off: "\uE350", map-marker-off-outline: "\uF2FC", map-marker-outline: "\uE7D8", map-marker-path: "\uED1F", map-marker-plus: "\uE650", map-marker-plus-outline: "\uF2F7", map-marker-question: "\uEF06", map-marker-question-outline: "\uEF07", map-marker-radius: "\uE351", map-marker-radius-outline: "\uF2FB", map-marker-remove: "\uEF08", map-marker-remove-outline: "\uF2F9", map-marker-remove-variant: "\uEF09", map-marker-right: "\uF2DB", map-marker-right-outline: "\uF2DD", map-marker-star: "\uF607", map-marker-star-outline: "\uF608", map-marker-up: "\uF102", map-minus: "\uE980", map-outline: "\uE981", map-plus: "\uE982", map-search: "\uE983", map-search-outline: "\uE984", mapbox: "\uEBA9", margin: "\uE352", marker: "\uE651", marker-cancel: "\uEDD8", marker-check: "\uE354", mastodon: "\uEAD0", material-design: "\uE985", material-ui: "\uE356", math-compass: "\uE357", math-cos: "\uEC95", math-integral: "\uEFC7", math-integral-box: "\uEFC8", math-log: "\uF084", math-norm: "\uEFC9", math-norm-box: "\uEFCA", math-sin: "\uEC96", math-tan: "\uEC97", matrix: "\uE627", medal: "\uE986", medal-outline: "\uF325", medical-bag: "\uE6EE", medical-cotton-swab: "\uFAB7", meditation: "\uF17A", memory: "\uE35A", menorah: "\uF7D3", menorah-fire: "\uF7D4", menu: "\uE35B", menu-down: "\uE35C", menu-down-outline: "\uE6B5", menu-left: "\uE35D", menu-left-outline: "\uEA01", menu-open: "\uEBAA", menu-right: "\uE35E", menu-right-outline: "\uEA02", menu-swap: "\uEA63", menu-swap-outline: "\uEA64", menu-up: "\uE35F", menu-up-outline: "\uE6B6", merge: "\uEF5B", message: "\uE360", message-alert: "\uE361", message-alert-outline: "\uEA03", message-arrow-left: "\uF2F1", message-arrow-left-outline: "\uF2F2", message-arrow-right: "\uF2F3", message-arrow-right-outline: "\uF2F4", message-badge: "\uF940", message-badge-outline: "\uF941", message-bookmark: "\uF5AB", message-bookmark-outline: "\uF5AC", message-bulleted: "\uE6A1", message-bulleted-off: "\uE6A2", message-cog: "\uE6F0", message-cog-outline: "\uF171", message-draw: "\uE362", message-fast: "\uF9CB", message-fast-outline: "\uF9CC", message-flash: "\uF5A8", message-flash-outline: "\uF5A9", message-image: "\uE363", message-image-outline: "\uF16B", message-lock: "\uEFCB", message-lock-outline: "\uF16C", message-minus: "\uF16D", message-minus-outline: "\uF16E", message-off: "\uF64C", message-off-outline: "\uF64D", message-outline: "\uE364", message-plus: "\uE652", message-plus-outline: "\uF0BA", message-processing: "\uE365", message-processing-outline: "\uF16F", message-question: "\uF739", message-question-outline: "\uF73A", message-reply: "\uE366", message-reply-outline: "\uF73C", message-reply-text: "\uE367", message-reply-text-outline: "\uF73D", message-settings: "\uE6EF", message-settings-outline: "\uF170", message-star: "\uE699", message-star-outline: "\uF24F", message-text: "\uE368", message-text-clock: "\uF172", message-text-clock-outline: "\uF173", message-text-fast: "\uF9CD", message-text-fast-outline: "\uF9CE", message-text-lock: "\uEFCC", message-text-lock-outline: "\uF174", message-text-outline: "\uE369", message-video: "\uE36A", meteor: "\uE628", meter-electric: "\uFA56", meter-electric-outline: "\uFA57", meter-gas: "\uFA58", meter-gas-outline: "\uFA59", metronome: "\uE7D9", metronome-tick: "\uE7DA", micro-sd: "\uE7DB", microphone: "\uE36B", microphone-minus: "\uE8B2", microphone-off: "\uE36C", microphone-outline: "\uE36D", microphone-plus: "\uE8B3", microphone-question: "\uF988", microphone-question-outline: "\uF989", microphone-settings: "\uE36E", microphone-variant: "\uE36F", microphone-variant-off: "\uE370", microscope: "\uE653", microsoft: "\uE371", microsoft-access: "\uF38D", microsoft-azure: "\uE804", microsoft-azure-devops: "\uEFD4", microsoft-bing: "\uE0A3", microsoft-dynamics-365: "\uE987", microsoft-edge: "\uE1E8", microsoft-excel: "\uF38E", microsoft-internet-explorer: "\uE2FF", microsoft-office: "\uE3C5", microsoft-onedrive: "\uE3C9", microsoft-onenote: "\uE746", microsoft-outlook: "\uED21", microsoft-powerpoint: "\uF38F", microsoft-sharepoint: "\uF390", microsoft-teams: "\uE2BA", microsoft-visual-studio: "\uE60F", microsoft-visual-studio-code: "\uEA1D", microsoft-windows: "\uE5B2", microsoft-windows-classic: "\uEA20", microsoft-word: "\uF391", microsoft-xbox: "\uE5B8", microsoft-xbox-controller: "\uE5B9", microsoft-xbox-controller-battery-alert: "\uE74A", microsoft-xbox-controller-battery-charging: "\uEA21", microsoft-xbox-controller-battery-empty: "\uE74B", microsoft-xbox-controller-battery-full: "\uE74C", microsoft-xbox-controller-battery-low: "\uE74D", microsoft-xbox-controller-battery-medium: "\uE74E", microsoft-xbox-controller-battery-unknown: "\uE74F", microsoft-xbox-controller-menu: "\uEE6E", microsoft-xbox-controller-off: "\uE5BA", microsoft-xbox-controller-view: "\uEE6F", microwave: "\uEC98", microwave-off: "\uF422", middleware: "\uEF5C", middleware-outline: "\uEF5D", midi: "\uE8F0", midi-port: "\uE8F1", mine: "\uEDD9", minecraft: "\uE372", mini-sd: "\uEA04", minidisc: "\uEA05", minus: "\uE373", minus-box: "\uE374", minus-box-multiple: "\uF140", minus-box-multiple-outline: "\uF141", minus-box-outline: "\uE6F1", minus-circle: "\uE375", minus-circle-multiple: "\uE359", minus-circle-multiple-outline: "\uEAD2", minus-circle-off: "\uF458", minus-circle-off-outline: "\uF459", minus-circle-outline: "\uE376", minus-network: "\uE377", minus-network-outline: "\uEC99", minus-thick: "\uF638", mirror: "\uF1FC", mirror-rectangle: "\uF79E", mirror-variant: "\uF79F", mixed-martial-arts: "\uED8E", mixed-reality: "\uE87E", molecule: "\uEBAB", molecule-co: "\uF2FD", molecule-co2: "\uE7E3", monitor: "\uE378", monitor-account: "\uFA5A", monitor-arrow-down: "\uF9CF", monitor-arrow-down-variant: "\uF9D0", monitor-cellphone: "\uE988", monitor-cellphone-star: "\uE989", monitor-dashboard: "\uEA06", monitor-edit: "\uF2C5", monitor-eye: "\uF3B3", monitor-lock: "\uEDDA", monitor-multiple: "\uE379", monitor-off: "\uED8F", monitor-screenshot: "\uEE50", monitor-share: "\uF482", monitor-shimmer: "\uF103", monitor-small: "\uF875", monitor-speaker: "\uEF5E", monitor-speaker-off: "\uEF5F", monitor-star: "\uEDDB", moon-first-quarter: "\uEF60", moon-full: "\uEF61", moon-last-quarter: "\uEF62", moon-new: "\uEF63", moon-waning-crescent: "\uEF64", moon-waning-gibbous: "\uEF65", moon-waxing-crescent: "\uEF66", moon-waxing-gibbous: "\uEF67", moped: "\uF085", moped-electric: "\uF5B6", moped-electric-outline: "\uF5B7", moped-outline: "\uF5B8", more: "\uE37A", mortar-pestle: "\uF747", mortar-pestle-plus: "\uE3F0", mosque: "\uF826", mother-heart: "\uF313", mother-nurse: "\uED20", motion: "\uF5B1", motion-outline: "\uF5B2", motion-pause: "\uF58F", motion-pause-outline: "\uF591", motion-play: "\uF58E", motion-play-outline: "\uF590", motion-sensor: "\uED90", motion-sensor-off: "\uF434", motorbike: "\uE37B", motorbike-electric: "\uF5B9", mouse: "\uE37C", mouse-bluetooth: "\uE98A", mouse-move-down: "\uF54F", mouse-move-up: "\uF550", mouse-move-vertical: "\uF551", mouse-off: "\uE37D", mouse-variant: "\uE37E", mouse-variant-off: "\uE37F", move-resize: "\uE654", move-resize-variant: "\uE655", movie: "\uE380", movie-check: "\uF6F2", movie-check-outline: "\uF6F3", movie-cog: "\uF6F4", movie-cog-outline: "\uF6F5", movie-edit: "\uF121", movie-edit-outline: "\uF122", movie-filter: "\uF123", movie-filter-outline: "\uF124", movie-minus: "\uF6F6", movie-minus-outline: "\uF6F7", movie-off: "\uF6F8", movie-off-outline: "\uF6F9", movie-open: "\uEFCD", movie-open-check: "\uF6FA", movie-open-check-outline: "\uF6FB", movie-open-cog: "\uF6FC", movie-open-cog-outline: "\uF6FD", movie-open-edit: "\uF6FE", movie-open-edit-outline: "\uF6FF", movie-open-minus: "\uF700", movie-open-minus-outline: "\uF701", movie-open-off: "\uF702", movie-open-off-outline: "\uF703", movie-open-outline: "\uEFCE", movie-open-play: "\uF704", movie-open-play-outline: "\uF705", movie-open-plus: "\uF706", movie-open-plus-outline: "\uF707", movie-open-remove: "\uF708", movie-open-remove-outline: "\uF709", movie-open-settings: "\uF70A", movie-open-settings-outline: "\uF70B", movie-open-star: "\uF70C", movie-open-star-outline: "\uF70D", movie-outline: "\uEDDC", movie-play: "\uF70E", movie-play-outline: "\uF70F", movie-plus: "\uF710", movie-plus-outline: "\uF711", movie-remove: "\uF712", movie-remove-outline: "\uF713", movie-roll: "\uE7DD", movie-search: "\uF1D1", movie-search-outline: "\uF1D2", movie-settings: "\uF714", movie-settings-outline: "\uF715", movie-star: "\uF716", movie-star-outline: "\uF717", mower: "\uF66E", mower-bag: "\uF66F", muffin: "\uE98B", multicast: "\uF892", multiplication: "\uE381", multiplication-box: "\uE382", mushroom: "\uE7DE", mushroom-off: "\uF3F9", mushroom-off-outline: "\uF3FA", mushroom-outline: "\uE7DF", music: "\uE759", music-accidental-double-flat: "\uEF68", music-accidental-double-sharp: "\uEF69", music-accidental-flat: "\uEF6A", music-accidental-natural: "\uEF6B", music-accidental-sharp: "\uEF6C", music-box: "\uE383", music-box-multiple: "\uE332", music-box-multiple-outline: "\uEF03", music-box-outline: "\uE384", music-circle: "\uE385", music-circle-outline: "\uEAD3", music-clef-alto: "\uEF6D", music-clef-bass: "\uEF6E", music-clef-treble: "\uEF6F", music-note: "\uE386", music-note-bluetooth: "\uE5FD", music-note-bluetooth-off: "\uE5FE", music-note-eighth: "\uE387", music-note-eighth-dotted: "\uEF70", music-note-half: "\uE388", music-note-half-dotted: "\uEF71", music-note-off: "\uE389", music-note-off-outline: "\uEF72", music-note-outline: "\uEF73", music-note-plus: "\uEDDD", music-note-quarter: "\uE38A", music-note-quarter-dotted: "\uEF74", music-note-sixteenth: "\uE38B", music-note-sixteenth-dotted: "\uEF75", music-note-whole: "\uE38C", music-note-whole-dotted: "\uEF76", music-off: "\uE75A", music-rest-eighth: "\uEF77", music-rest-half: "\uEF78", music-rest-quarter: "\uEF79", music-rest-sixteenth: "\uEF7A", music-rest-whole: "\uEF7B", mustache: "\uF5DD", nail: "\uEDDE", nas: "\uE8F2", nativescript: "\uE87F", nature: "\uE38D", nature-people: "\uE38E", navigation: "\uE38F", navigation-outline: "\uF606", navigation-variant: "\uF8EF", navigation-variant-outline: "\uF8F0", near-me: "\uE5CC", necklace: "\uEF0A", needle: "\uE390", needle-off: "\uF9D1", netflix: "\uE745", network: "\uE6F2", network-off: "\uEC9A", network-off-outline: "\uEC9B", network-outline: "\uEC9C", network-pos: "\uFACA", network-strength-1: "\uE8F3", network-strength-1-alert: "\uE8F4", network-strength-2: "\uE8F5", network-strength-2-alert: "\uE8F6", network-strength-3: "\uE8F7", network-strength-3-alert: "\uE8F8", network-strength-4: "\uE8F9", network-strength-4-alert: "\uE8FA", network-strength-4-cog: "\uF919", network-strength-off: "\uE8FB", network-strength-off-outline: "\uE8FC", network-strength-outline: "\uE8FD", new-box: "\uE393", newspaper: "\uE394", newspaper-check: "\uF942", newspaper-minus: "\uEF0B", newspaper-plus: "\uEF0C", newspaper-remove: "\uF943", newspaper-variant: "\uF000", newspaper-variant-multiple: "\uF001", newspaper-variant-multiple-outline: "\uF002", newspaper-variant-outline: "\uF003", nfc: "\uE395", nfc-search-variant: "\uEE52", nfc-tap: "\uE396", nfc-variant: "\uE397", nfc-variant-off: "\uEE53", ninja: "\uE773", nintendo-game-boy: "\uF392", nintendo-switch: "\uE7E0", nintendo-wii: "\uE5AA", nintendo-wiiu: "\uE72C", nix: "\uF104", nodejs: "\uE398", noodles: "\uF17D", not-equal: "\uE98C", not-equal-variant: "\uE98D", note: "\uE399", note-alert: "\uF77C", note-alert-outline: "\uF77D", note-check: "\uF77E", note-check-outline: "\uF77F", note-edit: "\uF780", note-edit-outline: "\uF781", note-minus: "\uF64E", note-minus-outline: "\uF64F", note-multiple: "\uE6B7", note-multiple-outline: "\uE6B8", note-off: "\uF782", note-off-outline: "\uF783", note-outline: "\uE39A", note-plus: "\uE39B", note-plus-outline: "\uE39C", note-remove: "\uF650", note-remove-outline: "\uF651", note-search: "\uF652", note-search-outline: "\uF653", note-text: "\uE39D", note-text-outline: "\uF1D6", notebook: "\uE82D", notebook-check: "\uF4F4", notebook-check-outline: "\uF4F5", notebook-edit: "\uF4E6", notebook-edit-outline: "\uF4E8", notebook-heart: "\uFA0A", notebook-heart-outline: "\uFA0B", notebook-minus: "\uF60F", notebook-minus-outline: "\uF610", notebook-multiple: "\uEE54", notebook-outline: "\uEEBE", notebook-plus: "\uF611", notebook-plus-outline: "\uF612", notebook-remove: "\uF613", notebook-remove-outline: "\uF614", notification-clear-all: "\uE39E", npm: "\uE6F6", nuke: "\uE6A3", null: "\uE7E1", numeric: "\uE39F", numeric-0: "\uEB38", numeric-0-box: "\uE3A0", numeric-0-box-multiple: "\uEF0D", numeric-0-box-multiple-outline: "\uE3A1", numeric-0-box-outline: "\uE3A2", numeric-0-circle: "\uEC9D", numeric-0-circle-outline: "\uEC9E", numeric-1: "\uEB39", numeric-1-box: "\uE3A3", numeric-1-box-multiple: "\uEF0E", numeric-1-box-multiple-outline: "\uE3A4", numeric-1-box-outline: "\uE3A5", numeric-1-circle: "\uEC9F", numeric-1-circle-outline: "\uECA0", numeric-10: "\uEFE8", numeric-10-box: "\uEF7C", numeric-10-box-multiple: "\uEFE9", numeric-10-box-multiple-outline: "\uEFEA", numeric-10-box-outline: "\uEF7D", numeric-10-circle: "\uEFEB", numeric-10-circle-outline: "\uEFEC", numeric-2: "\uEB3A", numeric-2-box: "\uE3A6", numeric-2-box-multiple: "\uEF0F", numeric-2-box-multiple-outline: "\uE3A7", numeric-2-box-outline: "\uE3A8", numeric-2-circle: "\uECA1", numeric-2-circle-outline: "\uECA2", numeric-3: "\uEB3B", numeric-3-box: "\uE3A9", numeric-3-box-multiple: "\uEF10", numeric-3-box-multiple-outline: "\uE3AA", numeric-3-box-outline: "\uE3AB", numeric-3-circle: "\uECA3", numeric-3-circle-outline: "\uECA4", numeric-4: "\uEB3C", numeric-4-box: "\uE3AC", numeric-4-box-multiple: "\uEF11", numeric-4-box-multiple-outline: "\uE3B1", numeric-4-box-outline: "\uE3AD", numeric-4-circle: "\uECA5", numeric-4-circle-outline: "\uECA6", numeric-5: "\uEB3D", numeric-5-box: "\uE3B0", numeric-5-box-multiple: "\uEF12", numeric-5-box-multiple-outline: "\uE3AE", numeric-5-box-outline: "\uE3AF", numeric-5-circle: "\uECA7", numeric-5-circle-outline: "\uECA8", numeric-6: "\uEB3E", numeric-6-box: "\uE3B2", numeric-6-box-multiple: "\uEF13", numeric-6-box-multiple-outline: "\uE3B3", numeric-6-box-outline: "\uE3B4", numeric-6-circle: "\uECA9", numeric-6-circle-outline: "\uECAA", numeric-7: "\uEB3F", numeric-7-box: "\uE3B5", numeric-7-box-multiple: "\uEF14", numeric-7-box-multiple-outline: "\uE3B6", numeric-7-box-outline: "\uE3B7", numeric-7-circle: "\uECAB", numeric-7-circle-outline: "\uECAC", numeric-8: "\uEB40", numeric-8-box: "\uE3B8", numeric-8-box-multiple: "\uEF15", numeric-8-box-multiple-outline: "\uE3B9", numeric-8-box-outline: "\uE3BA", numeric-8-circle: "\uECAD", numeric-8-circle-outline: "\uECAE", numeric-9: "\uEB41", numeric-9-box: "\uE3BB", numeric-9-box-multiple: "\uEF16", numeric-9-box-multiple-outline: "\uE3BC", numeric-9-box-outline: "\uE3BD", numeric-9-circle: "\uECAF", numeric-9-circle-outline: "\uECB0", numeric-9-plus: "\uEFED", numeric-9-plus-box: "\uE3BE", numeric-9-plus-box-multiple: "\uEF17", numeric-9-plus-box-multiple-outline: "\uE3BF", numeric-9-plus-box-outline: "\uE3C0", numeric-9-plus-circle: "\uECB1", numeric-9-plus-circle-outline: "\uECB2", numeric-negative-1: "\uF051", numeric-off: "\uF9D2", numeric-positive-1: "\uF5CA", nut: "\uE6F7", nutrition: "\uE3C1", nuxt: "\uF105", oar: "\uE67B", ocarina: "\uEDDF", oci: "\uF2E8", ocr: "\uF139", octagon: "\uE3C2", octagon-outline: "\uE3C3", octagram: "\uE6F8", octagram-outline: "\uE774", octahedron: "\uF94F", octahedron-off: "\uF950", odnoklassniki: "\uE3C4", offer: "\uF21A", office-building: "\uE990", office-building-cog: "\uF948", office-building-cog-outline: "\uF949", office-building-marker: "\uF51F", office-building-marker-outline: "\uF520", office-building-outline: "\uF51E", oil: "\uE3C6", oil-lamp: "\uEF18", oil-level: "\uF052", oil-temperature: "\uEFF7", om: "\uE972", omega: "\uE3C8", one-up: "\uEBAC", onepassword: "\uE880", opacity: "\uE5CB", open-in-app: "\uE3CA", open-in-new: "\uE3CB", open-source-initiative: "\uEBAD", openid: "\uE3CC", opera: "\uE3CD", orbit: "\uE017", orbit-variant: "\uF5DA", order-alphabetical-ascending: "\uE20C", order-alphabetical-descending: "\uED06", order-bool-ascending: "\uE2BD", order-bool-ascending-variant: "\uE98E", order-bool-descending: "\uF383", order-bool-descending-variant: "\uE98F", order-numeric-ascending: "\uE544", order-numeric-descending: "\uE545", origin: "\uEB42", ornament: "\uE3CE", ornament-variant: "\uE3CF", outdoor-lamp: "\uF053", overscan: "\uF004", owl: "\uE3D1", pac-man: "\uEBAE", package: "\uE3D2", package-down: "\uE3D3", package-up: "\uE3D4", package-variant: "\uE3D5", package-variant-closed: "\uE3D6", package-variant-closed-minus: "\uF9D3", package-variant-closed-plus: "\uF9D4", package-variant-closed-remove: "\uF9D5", package-variant-minus: "\uF9D6", package-variant-plus: "\uF9D7", package-variant-remove: "\uF9D8", page-first: "\uE5FF", page-last: "\uE600", page-layout-body: "\uE6F9", page-layout-footer: "\uE6FA", page-layout-header: "\uE6FB", page-layout-header-footer: "\uEF7E", page-layout-sidebar-left: "\uE6FC", page-layout-sidebar-right: "\uE6FD", page-next: "\uEBAF", page-next-outline: "\uEBB0", page-previous: "\uEBB1", page-previous-outline: "\uEBB2", pail: "\uF416", pail-minus: "\uF436", pail-minus-outline: "\uF43B", pail-off: "\uF438", pail-off-outline: "\uF43D", pail-outline: "\uF439", pail-plus: "\uF435", pail-plus-outline: "\uF43A", pail-remove: "\uF437", pail-remove-outline: "\uF43C", palette: "\uE3D7", palette-advanced: "\uE3D8", palette-outline: "\uEE0B", palette-swatch: "\uE8B4", palette-swatch-outline: "\uF35B", palette-swatch-variant: "\uF959", palm-tree: "\uF054", pan: "\uEBB3", pan-bottom-left: "\uEBB4", pan-bottom-right: "\uEBB5", pan-down: "\uEBB6", pan-horizontal: "\uEBB7", pan-left: "\uEBB8", pan-right: "\uEBB9", pan-top-left: "\uEBBA", pan-top-right: "\uEBBB", pan-up: "\uEBBC", pan-vertical: "\uEBBD", panda: "\uE3D9", pandora: "\uE3DA", panorama: "\uE3DB", panorama-fisheye: "\uE3DC", panorama-horizontal: "\uF927", panorama-horizontal-outline: "\uE3DD", panorama-outline: "\uF98B", panorama-sphere: "\uF98C", panorama-sphere-outline: "\uF98D", panorama-variant: "\uF98E", panorama-variant-outline: "\uF98F", panorama-vertical: "\uF928", panorama-vertical-outline: "\uE3DE", panorama-wide-angle: "\uF95E", panorama-wide-angle-outline: "\uE3DF", paper-cut-vertical: "\uE3E0", paper-roll: "\uF156", paper-roll-outline: "\uF157", paperclip: "\uE3E1", paperclip-check: "\uFAC5", paperclip-lock: "\uF9D9", paperclip-minus: "\uFAC6", paperclip-off: "\uFAC7", paperclip-plus: "\uFAC8", paperclip-remove: "\uFAC9", parachute: "\uECB3", parachute-outline: "\uECB4", paragliding: "\uF744", parking: "\uE3E2", party-popper: "\uF055", passport: "\uE7E2", passport-biometric: "\uEDE0", pasta: "\uF15F", patio-heater: "\uEF7F", patreon: "\uE881", pause: "\uE3E3", pause-circle: "\uE3E4", pause-circle-outline: "\uE3E5", pause-octagon: "\uE3E6", pause-octagon-outline: "\uE3E7", paw: "\uE3E8", paw-off: "\uE656", paw-off-outline: "\uF675", paw-outline: "\uF674", peace: "\uE883", peanut: "\uEFFB", peanut-off: "\uEFFC", peanut-off-outline: "\uEFFE", peanut-outline: "\uEFFD", pen: "\uE3E9", pen-lock: "\uEDE1", pen-minus: "\uEDE2", pen-off: "\uEDE3", pen-plus: "\uEDE4", pen-remove: "\uEDE5", pencil: "\uE3EA", pencil-box: "\uE3EB", pencil-box-multiple: "\uF143", pencil-box-multiple-outline: "\uF144", pencil-box-outline: "\uE3EC", pencil-circle: "\uE6FE", pencil-circle-outline: "\uE775", pencil-lock: "\uE3ED", pencil-lock-outline: "\uEDE6", pencil-minus: "\uEDE7", pencil-minus-outline: "\uEDE8", pencil-off: "\uE3EE", pencil-off-outline: "\uEDE9", pencil-outline: "\uECB5", pencil-plus: "\uEDEA", pencil-plus-outline: "\uEDEB", pencil-remove: "\uEDEC", pencil-remove-outline: "\uEDED", pencil-ruler: "\uF352", penguin: "\uEEBF", pentagon: "\uE700", pentagon-outline: "\uE6FF", pentagram: "\uF666", percent: "\uE3EF", percent-box: "\uFA01", percent-box-outline: "\uFA02", percent-circle: "\uFA03", percent-circle-outline: "\uFA04", percent-outline: "\uF277", periodic-table: "\uE8B5", perspective-less: "\uED22", perspective-more: "\uED23", ph: "\uF7C4", phone: "\uE3F1", phone-alert: "\uEF19", phone-alert-outline: "\uF18D", phone-bluetooth: "\uE3F2", phone-bluetooth-outline: "\uF18E", phone-cancel: "\uF0BB", phone-cancel-outline: "\uF18F", phone-check: "\uF1A8", phone-check-outline: "\uF1A9", phone-classic: "\uE601", phone-classic-off: "\uF278", phone-clock: "\uF9DA", phone-dial: "\uF558", phone-dial-outline: "\uF559", phone-forward: "\uE3F3", phone-forward-outline: "\uF190", phone-hangup: "\uE3F4", phone-hangup-outline: "\uF191", phone-in-talk: "\uE3F5", phone-in-talk-outline: "\uF181", phone-incoming: "\uE3F6", phone-incoming-outline: "\uF192", phone-lock: "\uE3F7", phone-lock-outline: "\uF193", phone-log: "\uE3F8", phone-log-outline: "\uF194", phone-message: "\uF195", phone-message-outline: "\uF196", phone-minus: "\uE657", phone-minus-outline: "\uF197", phone-missed: "\uE3F9", phone-missed-outline: "\uF1A4", phone-off: "\uEDEE", phone-off-outline: "\uF1A5", phone-outgoing: "\uE3FA", phone-outgoing-outline: "\uF198", phone-outline: "\uEDEF", phone-paused: "\uE3FB", phone-paused-outline: "\uF199", phone-plus: "\uE658", phone-plus-outline: "\uF19A", phone-refresh: "\uF992", phone-refresh-outline: "\uF993", phone-remove: "\uF52E", phone-remove-outline: "\uF52F", phone-return: "\uE82E", phone-return-outline: "\uF19B", phone-ring: "\uF1AA", phone-ring-outline: "\uF1AB", phone-rotate-landscape: "\uE884", phone-rotate-portrait: "\uE885", phone-settings: "\uE3FC", phone-settings-outline: "\uF19C", phone-sync: "\uF994", phone-sync-outline: "\uF995", phone-voip: "\uE3FD", pi: "\uE3FE", pi-box: "\uE3FF", pi-hole: "\uEDF0", piano: "\uE67C", piano-off: "\uE697", pickaxe: "\uE8B6", picture-in-picture-bottom-right: "\uEE56", picture-in-picture-bottom-right-outline: "\uEE57", picture-in-picture-top-right: "\uEE58", picture-in-picture-top-right-outline: "\uEE59", pier: "\uE886", pier-crane: "\uE887", pig: "\uE400", pig-variant: "\uF005", pig-variant-outline: "\uF677", piggy-bank: "\uF006", piggy-bank-outline: "\uF678", pill: "\uE401", pill-off: "\uFA5B", pillar: "\uE701", pin: "\uE402", pin-off: "\uE403", pin-off-outline: "\uE92F", pin-outline: "\uE930", pine-tree: "\uE404", pine-tree-box: "\uE405", pine-tree-fire: "\uF419", pinterest: "\uE406", pinwheel: "\uEAD4", pinwheel-outline: "\uEAD5", pipe: "\uE7E4", pipe-disconnected: "\uE7E5", pipe-leak: "\uE888", pipe-valve: "\uF84C", pipe-wrench: "\uF353", pirate: "\uEA07", pistol: "\uE702", piston: "\uE889", pitchfork: "\uF552", pizza: "\uE408", play: "\uE409", play-box: "\uF279", play-box-lock: "\uFA15", play-box-lock-open: "\uFA16", play-box-lock-open-outline: "\uFA17", play-box-lock-outline: "\uFA18", play-box-multiple: "\uED18", play-box-multiple-outline: "\uF3E5", play-box-outline: "\uE40A", play-circle: "\uE40B", play-circle-outline: "\uE40C", play-network: "\uE88A", play-network-outline: "\uECB6", play-outline: "\uEF1A", play-pause: "\uE40D", play-protected-content: "\uE40E", play-speed: "\uE8FE", playlist-check: "\uE5C6", playlist-edit: "\uE8FF", playlist-minus: "\uE40F", playlist-music: "\uECB7", playlist-music-outline: "\uECB8", playlist-play: "\uE410", playlist-plus: "\uE411", playlist-remove: "\uE412", playlist-star: "\uEDF1", plex: "\uE6B9", pliers: "\uF9A3", plus: "\uE414", plus-box: "\uE415", plus-box-multiple: "\uE333", plus-box-multiple-outline: "\uF142", plus-box-outline: "\uE703", plus-circle: "\uE416", plus-circle-multiple: "\uE34B", plus-circle-multiple-outline: "\uE417", plus-circle-outline: "\uE418", plus-lock: "\uFA5C", plus-lock-open: "\uFA5D", plus-minus: "\uE991", plus-minus-box: "\uE992", plus-minus-variant: "\uF4C8", plus-network: "\uE419", plus-network-outline: "\uECB9", plus-outline: "\uE704", plus-thick: "\uF1EB", podcast: "\uE993", podium: "\uED24", podium-bronze: "\uED25", podium-gold: "\uED26", podium-silver: "\uED27", point-of-sale: "\uED91", pokeball: "\uE41C", pokemon-go: "\uEA08", poker-chip: "\uE82F", polaroid: "\uE41D", police-badge: "\uF166", police-badge-outline: "\uF167", police-station: "\uF838", poll: "\uE41E", polo: "\uF4C2", polymer: "\uE420", pool: "\uE605", pool-thermometer: "\uFA5E", popcorn: "\uE421", post: "\uF007", post-lamp: "\uFA5F", post-outline: "\uF008", postage-stamp: "\uECBA", pot: "\uE2E4", pot-mix: "\uE65A", pot-mix-outline: "\uE676", pot-outline: "\uE2FE", pot-steam: "\uE659", pot-steam-outline: "\uE325", pound: "\uE422", pound-box: "\uE423", pound-box-outline: "\uF17E", power: "\uE424", power-cycle: "\uE900", power-off: "\uE901", power-on: "\uE902", power-plug: "\uE6A4", power-plug-off: "\uE6A5", power-plug-off-outline: "\uF423", power-plug-outline: "\uF424", power-settings: "\uE425", power-sleep: "\uE903", power-socket: "\uE426", power-socket-au: "\uE904", power-socket-ch: "\uEFB2", power-socket-de: "\uF106", power-socket-eu: "\uE7E6", power-socket-fr: "\uF107", power-socket-it: "\uF4FE", power-socket-jp: "\uF108", power-socket-uk: "\uE7E7", power-socket-us: "\uE7E8", power-standby: "\uE905", powershell: "\uEA09", prescription: "\uE705", presentation: "\uE427", presentation-play: "\uE428", pretzel: "\uF561", printer: "\uE429", printer-3d: "\uE42A", printer-3d-nozzle: "\uEE5A", printer-3d-nozzle-alert: "\uF1BF", printer-3d-nozzle-alert-outline: "\uF1C0", printer-3d-nozzle-heat: "\uF8B7", printer-3d-nozzle-heat-outline: "\uF8B8", printer-3d-nozzle-outline: "\uEE5B", printer-alert: "\uE42B", printer-check: "\uF145", printer-eye: "\uF457", printer-off: "\uEE5C", printer-off-outline: "\uF784", printer-outline: "\uF785", printer-pos: "\uF056", printer-search: "\uF456", printer-settings: "\uE706", printer-wireless: "\uEA0A", priority-high: "\uE602", priority-low: "\uE603", professional-hexagon: "\uE42C", progress-alert: "\uECBB", progress-check: "\uE994", progress-clock: "\uE995", progress-close: "\uF109", progress-download: "\uE996", progress-pencil: "\uF786", progress-question: "\uF521", progress-star: "\uF787", progress-upload: "\uE997", progress-wrench: "\uECBC", projector: "\uE42D", projector-off: "\uFA22", projector-screen: "\uE42E", projector-screen-off: "\uF80C", projector-screen-off-outline: "\uF80D", projector-screen-outline: "\uF723", projector-screen-variant: "\uF80E", projector-screen-variant-off: "\uF80F", projector-screen-variant-off-outline: "\uF810", projector-screen-variant-outline: "\uF811", propane-tank: "\uF356", propane-tank-outline: "\uF357", protocol: "\uEFD7", publish: "\uE6A6", publish-off: "\uF944", pulse: "\uE42F", pump: "\uF401", pumpkin: "\uEBBE", purse: "\uEF1B", purse-outline: "\uEF1C", puzzle: "\uE430", puzzle-check: "\uF425", puzzle-check-outline: "\uF426", puzzle-edit: "\uF4D2", puzzle-edit-outline: "\uF4D8", puzzle-heart: "\uF4D3", puzzle-heart-outline: "\uF4D9", puzzle-minus: "\uF4D0", puzzle-minus-outline: "\uF4D6", puzzle-outline: "\uEA65", puzzle-plus: "\uF4CF", puzzle-plus-outline: "\uF4D5", puzzle-remove: "\uF4D1", puzzle-remove-outline: "\uF4D7", puzzle-star: "\uF4D4", puzzle-star-outline: "\uF4DA", pyramid: "\uF951", pyramid-off: "\uF952", qi: "\uE998", qqchat: "\uE604", qrcode: "\uE431", qrcode-edit: "\uE8B7", qrcode-minus: "\uF18B", qrcode-plus: "\uF18A", qrcode-remove: "\uF18C", qrcode-scan: "\uE432", quadcopter: "\uE433", quality-high: "\uE434", quality-low: "\uEA0B", quality-medium: "\uEA0C", quora: "\uED28", rabbit: "\uE906", rabbit-variant: "\uFA60", rabbit-variant-outline: "\uFA61", racing-helmet: "\uED92", racquetball: "\uED93", radar: "\uE436", radiator: "\uE437", radiator-disabled: "\uEAD6", radiator-off: "\uEAD7", radio: "\uE438", radio-am: "\uECBD", radio-fm: "\uECBE", radio-handheld: "\uE439", radio-off: "\uF21B", radio-tower: "\uE43A", radioactive: "\uE43B", radioactive-circle: "\uF85C", radioactive-circle-outline: "\uF85D", radioactive-off: "\uEEC0", radiobox-blank: "\uE43C", radiobox-marked: "\uE43D", radiology-box: "\uF4C4", radiology-box-outline: "\uF4C5", radius: "\uECBF", radius-outline: "\uECC0", railroad-light: "\uEF1D", rake: "\uF543", raspberry-pi: "\uE43E", raw: "\uFA0E", raw-off: "\uFA0F", ray-end: "\uE43F", ray-end-arrow: "\uE440", ray-start: "\uE441", ray-start-arrow: "\uE442", ray-start-end: "\uE443", ray-start-vertex-end: "\uF5D7", ray-vertex: "\uE444", razor-double-edge: "\uF996", razor-single-edge: "\uF997", react: "\uE707", read: "\uE446", receipt: "\uE448", receipt-outline: "\uF9DB", receipt-text-check: "\uFA62", receipt-text-check-outline: "\uFA63", receipt-text-minus: "\uFA64", receipt-text-minus-outline: "\uFA65", receipt-text-plus: "\uFA66", receipt-text-plus-outline: "\uFA67", receipt-text-remove: "\uFA68", receipt-text-remove-outline: "\uFA69", record: "\uE449", record-circle: "\uEEC1", record-circle-outline: "\uEEC2", record-player: "\uE999", record-rec: "\uE44A", rectangle: "\uEE5D", rectangle-outline: "\uEE5E", recycle: "\uE44B", recycle-variant: "\uF39C", reddit: "\uE44C", redhat: "\uF11A", redo: "\uE44D", redo-variant: "\uE44E", reflect-horizontal: "\uEA0D", reflect-vertical: "\uEA0E", refresh: "\uE44F", refresh-auto: "\uF8F1", refresh-circle: "\uF376", regex: "\uE450", registered-trademark: "\uEA66", reiterate: "\uF587", relation-many-to-many: "\uF495", relation-many-to-one: "\uF496", relation-many-to-one-or-many: "\uF497", relation-many-to-only-one: "\uF498", relation-many-to-zero-or-many: "\uF499", relation-many-to-zero-or-one: "\uF49A", relation-one-or-many-to-many: "\uF49B", relation-one-or-many-to-one: "\uF49C", relation-one-or-many-to-one-or-many: "\uF49D", relation-one-or-many-to-only-one: "\uF49E", relation-one-or-many-to-zero-or-many: "\uF49F", relation-one-or-many-to-zero-or-one: "\uF4A0", relation-one-to-many: "\uF4A1", relation-one-to-one: "\uF4A2", relation-one-to-one-or-many: "\uF4A3", relation-one-to-only-one: "\uF4A4", relation-one-to-zero-or-many: "\uF4A5", relation-one-to-zero-or-one: "\uF4A6", relation-only-one-to-many: "\uF4A7", relation-only-one-to-one: "\uF4A8", relation-only-one-to-one-or-many: "\uF4A9", relation-only-one-to-only-one: "\uF4AA", relation-only-one-to-zero-or-many: "\uF4AB", relation-only-one-to-zero-or-one: "\uF4AC", relation-zero-or-many-to-many: "\uF4AD", relation-zero-or-many-to-one: "\uF4AE", relation-zero-or-many-to-one-or-many: "\uF4AF", relation-zero-or-many-to-only-one: "\uF4B0", relation-zero-or-many-to-zero-or-many: "\uF4B1", relation-zero-or-many-to-zero-or-one: "\uF4B2", relation-zero-or-one-to-many: "\uF4B3", relation-zero-or-one-to-one: "\uF4B4", relation-zero-or-one-to-one-or-many: "\uF4B5", relation-zero-or-one-to-only-one: "\uF4B6", relation-zero-or-one-to-zero-or-many: "\uF4B7", relation-zero-or-one-to-zero-or-one: "\uF4B8", relative-scale: "\uE451", reload: "\uE452", reload-alert: "\uF10A", reminder: "\uE88B", remote: "\uE453", remote-desktop: "\uE8B8", remote-off: "\uEEC3", remote-tv: "\uEEC4", remote-tv-off: "\uEEC5", rename-box: "\uE454", reorder-horizontal: "\uE687", reorder-vertical: "\uE688", repeat: "\uE455", repeat-off: "\uE456", repeat-once: "\uE457", repeat-variant: "\uE546", replay: "\uE458", reply: "\uE459", reply-all: "\uE45A", reply-all-outline: "\uEF1E", reply-circle: "\uF1AD", reply-outline: "\uEF1F", reproduction: "\uE45B", resistor: "\uEB43", resistor-nodes: "\uEB44", resize: "\uEA67", resize-bottom-right: "\uE45C", responsive: "\uE45D", restart: "\uE708", restart-alert: "\uF10B", restart-off: "\uED94", restore: "\uE99A", restore-alert: "\uF10C", rewind: "\uE45E", rewind-10: "\uED29", rewind-15: "\uF945", rewind-30: "\uED95", rewind-5: "\uF1F8", rewind-60: "\uF60B", rewind-outline: "\uE709", rhombus: "\uE70A", rhombus-medium: "\uEA0F", rhombus-medium-outline: "\uF4DB", rhombus-outline: "\uE70B", rhombus-split: "\uEA10", rhombus-split-outline: "\uF4DC", ribbon: "\uE45F", rice: "\uE7E9", rickshaw: "\uF5BA", rickshaw-electric: "\uF5BB", ring: "\uE7EA", rivet: "\uEE5F", road: "\uE460", road-variant: "\uE461", robber: "\uF057", robot: "\uE6A8", robot-angry: "\uF69C", robot-angry-outline: "\uF69D", robot-confused: "\uF69E", robot-confused-outline: "\uF69F", robot-dead: "\uF6A0", robot-dead-outline: "\uF6A1", robot-excited: "\uF6A2", robot-excited-outline: "\uF6A3", robot-happy: "\uF718", robot-happy-outline: "\uF719", robot-industrial: "\uEB45", robot-industrial-outline: "\uFA19", robot-love: "\uF6A4", robot-love-outline: "\uF6A5", robot-mower: "\uF1F6", robot-mower-outline: "\uF1F2", robot-off: "\uF6A6", robot-off-outline: "\uF67A", robot-outline: "\uF679", robot-vacuum: "\uE70C", robot-vacuum-variant: "\uE907", rocket: "\uE462", rocket-launch: "\uF4DD", rocket-launch-outline: "\uF4DE", rocket-outline: "\uF3AE", rodent: "\uF326", roller-shade: "\uFA6A", roller-shade-closed: "\uFA6B", roller-skate: "\uED2A", roller-skate-off: "\uE144", rollerblade: "\uED2B", rollerblade-off: "\uE02D", rollupjs: "\uEBBF", rolodex: "\uFAB8", rolodex-outline: "\uFAB9", roman-numeral-1: "\uF087", roman-numeral-10: "\uF090", roman-numeral-2: "\uF088", roman-numeral-3: "\uF089", roman-numeral-4: "\uF08A", roman-numeral-5: "\uF08B", roman-numeral-6: "\uF08C", roman-numeral-7: "\uF08D", roman-numeral-8: "\uF08E", roman-numeral-9: "\uF08F", room-service: "\uE88C", room-service-outline: "\uED96", rotate-360: "\uF998", rotate-3d: "\uEEC6", rotate-3d-variant: "\uE463", rotate-left: "\uE464", rotate-left-variant: "\uE465", rotate-orbit: "\uED97", rotate-right: "\uE466", rotate-right-variant: "\uE467", rounded-corner: "\uE606", router: "\uF1E1", router-network: "\uF086", router-wireless: "\uE468", router-wireless-off: "\uF5A2", router-wireless-settings: "\uEA68", routes: "\uE469", routes-clock: "\uF058", rowing: "\uE607", rss: "\uE46A", rss-box: "\uE46B", rss-off: "\uEF20", rug: "\uF474", rugby: "\uED98", ruler: "\uE46C", ruler-square: "\uECC1", ruler-square-compass: "\uEEBD", run: "\uE70D", run-fast: "\uE46D", rv-truck: "\uF1D3", sack: "\uED2D", sack-percent: "\uED2E", safe: "\uEA69", safe-square: "\uF27B", safe-square-outline: "\uF27C", safety-goggles: "\uED2F", sail-boat: "\uEEC7", sail-boat-sink: "\uFAEE", sale: "\uE46E", sale-outline: "\uFA05", salesforce: "\uE88D", sass: "\uE7EB", satellite: "\uE46F", satellite-uplink: "\uE908", satellite-variant: "\uE470", sausage: "\uE8B9", sausage-off: "\uF788", saw-blade: "\uEE60", sawtooth-wave: "\uF479", saxophone: "\uE608", scale: "\uE471", scale-balance: "\uE5D0", scale-bathroom: "\uE472", scale-off: "\uF059", scale-unbalanced: "\uF9B7", scan-helper: "\uF3D7", scanner: "\uE6AA", scanner-off: "\uE909", scatter-plot: "\uEEC8", scatter-plot-outline: "\uEEC9", scent: "\uF957", scent-off: "\uF958", school: "\uE473", school-outline: "\uF17F", scissors-cutting: "\uEA6A", scooter: "\uF5BC", scooter-electric: "\uF5BD", scoreboard: "\uF27D", scoreboard-outline: "\uF27E", screen-rotation: "\uE474", screen-rotation-lock: "\uE477", screw-flat-top: "\uEDF2", screw-lag: "\uEDF3", screw-machine-flat-top: "\uEDF4", screw-machine-round-top: "\uEDF5", screw-round-top: "\uEDF6", screwdriver: "\uE475", script: "\uEBC0", script-outline: "\uE476", script-text: "\uEBC1", script-text-key: "\uF724", script-text-key-outline: "\uF725", script-text-outline: "\uEBC2", script-text-play: "\uF726", script-text-play-outline: "\uF727", sd: "\uE478", seal: "\uE479", seal-variant: "\uEFD8", search-web: "\uE70E", seat: "\uECC2", seat-flat: "\uE47A", seat-flat-angled: "\uE47B", seat-individual-suite: "\uE47C", seat-legroom-extra: "\uE47D", seat-legroom-normal: "\uE47E", seat-legroom-reduced: "\uE47F", seat-outline: "\uECC3", seat-passenger: "\uF248", seat-recline-extra: "\uE480", seat-recline-normal: "\uE481", seatbelt: "\uECC4", security: "\uE482", security-network: "\uE483", seed: "\uEE61", seed-off: "\uF3FC", seed-off-outline: "\uF3FD", seed-outline: "\uEE62", seed-plus: "\uFA6C", seed-plus-outline: "\uFA6D", seesaw: "\uF5A3", segment: "\uEECA", select: "\uE484", select-all: "\uE485", select-color: "\uED30", select-compare: "\uEAD8", select-drag: "\uEA6B", select-group: "\uEF81", select-inverse: "\uE486", select-marker: "\uF27F", select-multiple: "\uF280", select-multiple-marker: "\uF281", select-off: "\uE487", select-place: "\uEFD9", select-remove: "\uF7C0", select-search: "\uF203", selection: "\uE488", selection-drag: "\uEA6C", selection-ellipse: "\uED31", selection-ellipse-arrow-inside: "\uEF21", selection-ellipse-remove: "\uF7C1", selection-marker: "\uF282", selection-multiple: "\uF284", selection-multiple-marker: "\uF283", selection-off: "\uE776", selection-remove: "\uF7C2", selection-search: "\uF204", semantic-web: "\uF315", send: "\uE489", send-check: "\uF160", send-check-outline: "\uF161", send-circle: "\uEDF7", send-circle-outline: "\uEDF8", send-clock: "\uF162", send-clock-outline: "\uF163", send-lock: "\uE7EC", send-lock-outline: "\uF165", send-outline: "\uF164", serial-port: "\uE65B", server: "\uE48A", server-minus: "\uE48B", server-network: "\uE48C", server-network-off: "\uE48D", server-off: "\uE48E", server-plus: "\uE48F", server-remove: "\uE490", server-security: "\uE491", set-all: "\uE777", set-center: "\uE778", set-center-right: "\uE779", set-left: "\uE77A", set-left-center: "\uE77B", set-left-right: "\uE77C", set-merge: "\uF4DF", set-none: "\uE77D", set-right: "\uE77E", set-split: "\uF4E0", set-square: "\uF45C", set-top-box: "\uE99E", settings-helper: "\uEA6D", shaker: "\uF10D", shaker-outline: "\uF10E", shape: "\uE830", shape-circle-plus: "\uE65C", shape-outline: "\uE831", shape-oval-plus: "\uF1F9", shape-plus: "\uE494", shape-polygon-plus: "\uE65D", shape-rectangle-plus: "\uE65E", shape-square-plus: "\uE65F", shape-square-rounded-plus: "\uF4F9", share: "\uE495", share-all: "\uF1F3", share-all-outline: "\uF1F4", share-circle: "\uF1AC", share-off: "\uEF22", share-off-outline: "\uEF23", share-outline: "\uE931", share-variant: "\uE496", share-variant-outline: "\uF513", shark: "\uF8B9", shark-fin: "\uF672", shark-fin-outline: "\uF673", shark-off: "\uF8BA", sheep: "\uECC5", shield: "\uE497", shield-account: "\uE88E", shield-account-outline: "\uEA11", shield-account-variant: "\uF5A6", shield-account-variant-outline: "\uF5A7", shield-airplane: "\uE6BA", shield-airplane-outline: "\uECC6", shield-alert: "\uEECB", shield-alert-outline: "\uEECC", shield-bug: "\uF3D9", shield-bug-outline: "\uF3DA", shield-car: "\uEF82", shield-check: "\uE564", shield-check-outline: "\uECC7", shield-cross: "\uECC8", shield-cross-outline: "\uECC9", shield-crown: "\uF8BB", shield-crown-outline: "\uF8BC", shield-edit: "\uF19F", shield-edit-outline: "\uF1A0", shield-half: "\uF35F", shield-half-full: "\uE77F", shield-home: "\uE689", shield-home-outline: "\uECCA", shield-key: "\uEBC3", shield-key-outline: "\uEBC4", shield-link-variant: "\uED32", shield-link-variant-outline: "\uED33", shield-lock: "\uE99C", shield-lock-open: "\uF999", shield-lock-open-outline: "\uF99A", shield-lock-outline: "\uECCB", shield-moon: "\uF827", shield-moon-outline: "\uF828", shield-off: "\uE99D", shield-off-outline: "\uE99B", shield-outline: "\uE498", shield-plus: "\uEAD9", shield-plus-outline: "\uEADA", shield-refresh: "\uE0A9", shield-refresh-outline: "\uE1DF", shield-remove: "\uEADB", shield-remove-outline: "\uEADC", shield-search: "\uED99", shield-star: "\uF13A", shield-star-outline: "\uF13B", shield-sun: "\uF05C", shield-sun-outline: "\uF05D", shield-sword: "\uF8BD", shield-sword-outline: "\uF8BE", shield-sync: "\uF1A1", shield-sync-outline: "\uF1A2", shimmer: "\uF544", ship-wheel: "\uE832", shipping-pallet: "\uF84D", shoe-ballet: "\uF5C9", shoe-cleat: "\uF5C6", shoe-formal: "\uEB46", shoe-heel: "\uEB47", shoe-print: "\uEDF9", shoe-sneaker: "\uF5C7", shopping: "\uE499", shopping-music: "\uE49A", shopping-outline: "\uF1D4", shopping-search: "\uEF83", shopping-search-outline: "\uFA6E", shore: "\uF4F8", shovel: "\uE70F", shovel-off: "\uE710", shower: "\uE99F", shower-head: "\uE9A0", shredder: "\uE49B", shuffle: "\uE49C", shuffle-disabled: "\uE49D", shuffle-variant: "\uE49E", shuriken: "\uF37E", sickle: "\uF8BF", sigma: "\uE49F", sigma-lower: "\uE62A", sign-caution: "\uE4A0", sign-direction: "\uE780", sign-direction-minus: "\uEFFF", sign-direction-plus: "\uEFDB", sign-direction-remove: "\uEFDC", sign-pole: "\uF4F7", sign-real-estate: "\uF117", sign-text: "\uE781", signal: "\uE4A1", signal-2g: "\uE711", signal-3g: "\uE712", signal-4g: "\uE713", signal-5g: "\uEA6E", signal-cellular-1: "\uE8BB", signal-cellular-2: "\uE8BC", signal-cellular-3: "\uE8BD", signal-cellular-outline: "\uE8BE", signal-distance-variant: "\uEE63", signal-hspa: "\uE714", signal-hspa-plus: "\uE715", signal-off: "\uE782", signal-variant: "\uE609", signature: "\uEDFA", signature-freehand: "\uEDFB", signature-image: "\uEDFC", signature-text: "\uEDFD", silo: "\uEB48", silverware: "\uE4A2", silverware-clean: "\uEFDD", silverware-fork: "\uE4A3", silverware-fork-knife: "\uEA6F", silverware-spoon: "\uE4A4", silverware-variant: "\uE4A5", sim: "\uE4A6", sim-alert: "\uE4A7", sim-alert-outline: "\uF5D2", sim-off: "\uE4A8", sim-off-outline: "\uF5D3", sim-outline: "\uF5D4", simple-icons: "\uF31C", sina-weibo: "\uEADE", sine-wave: "\uE95A", sitemap: "\uE4A9", sitemap-outline: "\uF99B", size-l: "\uF3A5", size-m: "\uF3A4", size-s: "\uF3A3", size-xl: "\uF3A6", size-xs: "\uF3A2", size-xxl: "\uF3A7", size-xxs: "\uF3A1", size-xxxl: "\uF3A8", skate: "\uED34", skate-off: "\uE698", skateboard: "\uF4C1", skateboarding: "\uE500", skew-less: "\uED35", skew-more: "\uED36", ski: "\uF303", ski-cross-country: "\uF304", ski-water: "\uF305", skip-backward: "\uE4AA", skip-backward-outline: "\uEF24", skip-forward: "\uE4AB", skip-forward-outline: "\uEF25", skip-next: "\uE4AC", skip-next-circle: "\uE660", skip-next-circle-outline: "\uE661", skip-next-outline: "\uEF26", skip-previous: "\uE4AD", skip-previous-circle: "\uE662", skip-previous-circle-outline: "\uE663", skip-previous-outline: "\uEF27", skull: "\uE68B", skull-crossbones: "\uEBC5", skull-crossbones-outline: "\uEBC6", skull-outline: "\uEBC7", skull-scan: "\uF4C6", skull-scan-outline: "\uF4C7", skype: "\uE4AE", skype-business: "\uE4AF", slack: "\uE4B0", slash-forward: "\uEFDE", slash-forward-box: "\uEFDF", sledding: "\uE41A", sleep: "\uE4B1", sleep-off: "\uE4B2", slide: "\uF5A4", slope-downhill: "\uEDFE", slope-uphill: "\uEDFF", slot-machine: "\uF113", slot-machine-outline: "\uF114", smart-card: "\uF0BC", smart-card-off: "\uF8F6", smart-card-off-outline: "\uF8F7", smart-card-outline: "\uF0BD", smart-card-reader: "\uF0BE", smart-card-reader-outline: "\uF0BF", smog: "\uEA70", smoke: "\uF798", smoke-detector: "\uE391", smoke-detector-alert: "\uF92D", smoke-detector-alert-outline: "\uF92E", smoke-detector-off: "\uF808", smoke-detector-off-outline: "\uF809", smoke-detector-outline: "\uF807", smoke-detector-variant: "\uF80A", smoke-detector-variant-alert: "\uF92F", smoke-detector-variant-off: "\uF80B", smoking: "\uE4B3", smoking-off: "\uE4B4", smoking-pipe: "\uF40C", smoking-pipe-off: "\uF427", snail: "\uF676", snake: "\uF50D", snapchat: "\uE4B5", snowboard: "\uF306", snowflake: "\uE716", snowflake-alert: "\uEF28", snowflake-check: "\uFA6F", snowflake-melt: "\uF2CA", snowflake-off: "\uF4E2", snowflake-thermometer: "\uFA70", snowflake-variant: "\uEF29", snowman: "\uE4B6", snowmobile: "\uE6DC", snowshoeing: "\uFA71", soccer: "\uE4B7", soccer-field: "\uE833", social-distance-2-meters: "\uF578", social-distance-6-feet: "\uF579", sofa: "\uE4B8", sofa-outline: "\uF56C", sofa-single: "\uF56D", sofa-single-outline: "\uF56E", solar-panel: "\uED9A", solar-panel-large: "\uED9B", solar-power: "\uEA71", solar-power-variant: "\uFA72", solar-power-variant-outline: "\uFA73", soldering-iron: "\uF091", solid: "\uE68C", sony-playstation: "\uE413", sort: "\uE4B9", sort-alphabetical-ascending: "\uE5BC", sort-alphabetical-ascending-variant: "\uF147", sort-alphabetical-descending: "\uE5BE", sort-alphabetical-descending-variant: "\uF148", sort-alphabetical-variant: "\uE4BA", sort-ascending: "\uE4BB", sort-bool-ascending: "\uF384", sort-bool-ascending-variant: "\uF385", sort-bool-descending: "\uF386", sort-bool-descending-variant: "\uF387", sort-calendar-ascending: "\uF546", sort-calendar-descending: "\uF547", sort-clock-ascending: "\uF548", sort-clock-ascending-outline: "\uF549", sort-clock-descending: "\uF54A", sort-clock-descending-outline: "\uF54B", sort-descending: "\uE4BC", sort-numeric-ascending: "\uF388", sort-numeric-ascending-variant: "\uE90C", sort-numeric-descending: "\uF389", sort-numeric-descending-variant: "\uEAD1", sort-numeric-variant: "\uE4BD", sort-reverse-variant: "\uE33B", sort-variant: "\uE4BE", sort-variant-lock: "\uECCC", sort-variant-lock-open: "\uECCD", sort-variant-off: "\uFABA", sort-variant-remove: "\uF146", soundbar: "\uF7DA", soundcloud: "\uE4BF", source-branch: "\uE62B", source-branch-check: "\uF4CE", source-branch-minus: "\uF4CA", source-branch-plus: "\uF4C9", source-branch-refresh: "\uF4CC", source-branch-remove: "\uF4CB", source-branch-sync: "\uF4CD", source-commit: "\uE717", source-commit-end: "\uE718", source-commit-end-local: "\uE719", source-commit-local: "\uE71A", source-commit-next-local: "\uE71B", source-commit-start: "\uE71C", source-commit-start-next-local: "\uE71D", source-fork: "\uE4C0", source-merge: "\uE62C", source-pull: "\uE4C1", source-repository: "\uECCE", source-repository-multiple: "\uECCF", soy-sauce: "\uE7ED", soy-sauce-off: "\uF3FB", spa: "\uECD0", spa-outline: "\uECD1", space-invaders: "\uEBC8", space-station: "\uF382", spade: "\uEE64", speaker: "\uE4C2", speaker-bluetooth: "\uE9A1", speaker-multiple: "\uED37", speaker-off: "\uE4C3", speaker-wireless: "\uE71E", spear: "\uF844", speedometer: "\uE4C4", speedometer-medium: "\uEF84", speedometer-slow: "\uEF85", spellcheck: "\uE4C5", sphere: "\uF953", sphere-off: "\uF954", spider: "\uF1E9", spider-thread: "\uF1EA", spider-web: "\uEBC9", spirit-level: "\uF4F0", spoon-sugar: "\uF428", spotify: "\uE4C6", spotlight: "\uE4C7", spotlight-beam: "\uE4C8", spray: "\uE664", spray-bottle: "\uEADF", sprinkler: "\uF05E", sprinkler-fire: "\uF99C", sprinkler-variant: "\uF05F", sprout: "\uEE65", sprout-outline: "\uEE66", square: "\uE763", square-circle: "\uF4FF", square-edit-outline: "\uE90B", square-medium: "\uEA12", square-medium-outline: "\uEA13", square-off: "\uF2ED", square-off-outline: "\uF2EE", square-opacity: "\uF853", square-outline: "\uE762", square-root: "\uE783", square-root-box: "\uE9A2", square-rounded: "\uF4FA", square-rounded-badge: "\uFA06", square-rounded-badge-outline: "\uFA07", square-rounded-outline: "\uF4FB", square-small: "\uEA14", square-wave: "\uF47A", squeegee: "\uEAE0", ssh: "\uE8BF", stack-exchange: "\uE60A", stack-overflow: "\uE4CB", stackpath: "\uE358", stadium: "\uEFF8", stadium-variant: "\uE71F", stairs: "\uE4CC", stairs-box: "\uF39D", stairs-down: "\uF2BD", stairs-up: "\uF2BC", stamper: "\uED38", standard-definition: "\uE7EE", star: "\uE4CD", star-box: "\uEA72", star-box-multiple: "\uF285", star-box-multiple-outline: "\uF286", star-box-outline: "\uEA73", star-check: "\uF565", star-check-outline: "\uF569", star-circle: "\uE4CE", star-circle-outline: "\uE9A3", star-cog: "\uF667", star-cog-outline: "\uF668", star-crescent: "\uE978", star-david: "\uE979", star-face: "\uE9A4", star-four-points: "\uEAE1", star-four-points-outline: "\uEAE2", star-half: "\uE245", star-half-full: "\uE4CF", star-minus: "\uF563", star-minus-outline: "\uF567", star-off: "\uE4D0", star-off-outline: "\uF55A", star-outline: "\uE4D1", star-plus: "\uF562", star-plus-outline: "\uF566", star-remove: "\uF564", star-remove-outline: "\uF568", star-settings: "\uF669", star-settings-outline: "\uF66A", star-shooting: "\uF740", star-shooting-outline: "\uF741", star-three-points: "\uEAE3", star-three-points-outline: "\uEAE4", state-machine: "\uF1EE", steam: "\uE4D2", steering: "\uE4D3", steering-off: "\uE90D", step-backward: "\uE4D4", step-backward-2: "\uE4D5", step-forward: "\uE4D6", step-forward-2: "\uE4D7", stethoscope: "\uE4D8", sticker: "\uF363", sticker-alert: "\uF364", sticker-alert-outline: "\uF365", sticker-check: "\uF366", sticker-check-outline: "\uF367", sticker-circle-outline: "\uE5CF", sticker-emoji: "\uE784", sticker-minus: "\uF368", sticker-minus-outline: "\uF369", sticker-outline: "\uF36A", sticker-plus: "\uF36B", sticker-plus-outline: "\uF36C", sticker-remove: "\uF36D", sticker-remove-outline: "\uF36E", sticker-text: "\uF78D", sticker-text-outline: "\uF78E", stocking: "\uE4D9", stomach: "\uF092", stool: "\uF95C", stool-outline: "\uF95D", stop: "\uE4DA", stop-circle: "\uE665", stop-circle-outline: "\uE666", storage-tank: "\uFA74", storage-tank-outline: "\uFA75", store: "\uE4DB", store-24-hour: "\uE4DC", store-alert: "\uF8C0", store-alert-outline: "\uF8C1", store-check: "\uF8C2", store-check-outline: "\uF8C3", store-clock: "\uF8C4", store-clock-outline: "\uF8C5", store-cog: "\uF8C6", store-cog-outline: "\uF8C7", store-edit: "\uF8C8", store-edit-outline: "\uF8C9", store-marker: "\uF8CA", store-marker-outline: "\uF8CB", store-minus: "\uF65D", store-minus-outline: "\uF8CC", store-off: "\uF8CD", store-off-outline: "\uF8CE", store-outline: "\uF360", store-plus: "\uF65E", store-plus-outline: "\uF8CF", store-remove: "\uF65F", store-remove-outline: "\uF8D0", store-search: "\uF8D1", store-search-outline: "\uF8D2", store-settings: "\uF8D3", store-settings-outline: "\uF8D4", storefront: "\uE7C6", storefront-outline: "\uF0C0", stove: "\uE4DD", strategy: "\uF1D5", stretch-to-page: "\uEF2A", stretch-to-page-outline: "\uEF2B", string-lights: "\uF2B9", string-lights-off: "\uF2BA", subdirectory-arrow-left: "\uE60B", subdirectory-arrow-right: "\uE60C", submarine: "\uF56B", subtitles: "\uEA15", subtitles-outline: "\uEA16", subway: "\uE6AB", subway-alert-variant: "\uED9C", subway-variant: "\uE4DE", summit: "\uE785", sun-clock: "\uFA76", sun-clock-outline: "\uFA77", sun-compass: "\uF9A4", sun-snowflake: "\uF795", sun-snowflake-variant: "\uFA78", sun-thermometer: "\uF8D5", sun-thermometer-outline: "\uF8D6", sun-wireless: "\uF7FD", sun-wireless-outline: "\uF7FE", sunglasses: "\uE4DF", surfing: "\uF745", surround-sound: "\uE5C4", surround-sound-2-0: "\uE7EF", surround-sound-2-1: "\uF728", surround-sound-3-1: "\uE7F0", surround-sound-5-1: "\uE7F1", surround-sound-5-1-2: "\uF729", surround-sound-7-1: "\uE7F2", svg: "\uE720", swap-horizontal: "\uE4E0", swap-horizontal-bold: "\uEBCC", swap-horizontal-circle: "\uEFE0", swap-horizontal-circle-outline: "\uEFE1", swap-horizontal-variant: "\uE8C0", swap-vertical: "\uE4E1", swap-vertical-bold: "\uEBCD", swap-vertical-circle: "\uEFE2", swap-vertical-circle-outline: "\uEFE3", swap-vertical-variant: "\uE8C1", swim: "\uE4E2", switch: "\uE4E3", sword: "\uE4E4", sword-cross: "\uE786", syllabary-hangul: "\uF332", syllabary-hiragana: "\uF333", syllabary-katakana: "\uF334", syllabary-katakana-halfwidth: "\uF335", symbol: "\uF500", symfony: "\uEAE5", sync: "\uE4E5", sync-alert: "\uE4E6", sync-circle: "\uF377", sync-off: "\uE4E7", tab: "\uE4E8", tab-minus: "\uEB4A", tab-plus: "\uE75B", tab-remove: "\uEB4B", tab-search: "\uF99D", tab-unselected: "\uE4E9", table: "\uE4EA", table-account: "\uF3B8", table-alert: "\uF3B9", table-arrow-down: "\uF3BA", table-arrow-left: "\uF3BB", table-arrow-right: "\uF3BC", table-arrow-up: "\uF3BD", table-border: "\uEA17", table-cancel: "\uF3BE", table-chair: "\uF060", table-check: "\uF3BF", table-clock: "\uF3C0", table-cog: "\uF3C1", table-column: "\uE834", table-column-plus-after: "\uE4EB", table-column-plus-before: "\uE4EC", table-column-remove: "\uE4ED", table-column-width: "\uE4EE", table-edit: "\uE4EF", table-eye: "\uF093", table-eye-off: "\uF3C2", table-furniture: "\uE5BB", table-headers-eye: "\uF21C", table-headers-eye-off: "\uF21D", table-heart: "\uF3C3", table-key: "\uF3C4", table-large: "\uE4F0", table-large-plus: "\uEF86", table-large-remove: "\uEF87", table-lock: "\uF3C5", table-merge-cells: "\uE9A5", table-minus: "\uF3C6", table-multiple: "\uF3C7", table-network: "\uF3C8", table-of-contents: "\uE835", table-off: "\uF3C9", table-picnic: "\uF742", table-pivot: "\uF83B", table-plus: "\uEA74", table-refresh: "\uF39F", table-remove: "\uEA75", table-row: "\uE836", table-row-height: "\uE4F1", table-row-plus-after: "\uE4F2", table-row-plus-before: "\uE4F3", table-row-remove: "\uE4F4", table-search: "\uE90E", table-settings: "\uE837", table-split-cell: "\uF429", table-star: "\uF3CA", table-sync: "\uF3A0", table-tennis: "\uEE67", tablet: "\uE4F5", tablet-android: "\uE4F6", tablet-cellphone: "\uE9A6", tablet-dashboard: "\uEECD", taco: "\uE761", tag: "\uE4F8", tag-arrow-down: "\uF72A", tag-arrow-down-outline: "\uF72B", tag-arrow-left: "\uF72C", tag-arrow-left-outline: "\uF72D", tag-arrow-right: "\uF72E", tag-arrow-right-outline: "\uF72F", tag-arrow-up: "\uF730", tag-arrow-up-outline: "\uF731", tag-check: "\uFA79", tag-check-outline: "\uFA7A", tag-faces: "\uE4F9", tag-heart: "\uE68A", tag-heart-outline: "\uEBCE", tag-minus: "\uE90F", tag-minus-outline: "\uF21E", tag-multiple: "\uE4FA", tag-multiple-outline: "\uF2F6", tag-off: "\uF21F", tag-off-outline: "\uF220", tag-outline: "\uE4FB", tag-plus: "\uE721", tag-plus-outline: "\uF221", tag-remove: "\uE722", tag-remove-outline: "\uF222", tag-search: "\uF906", tag-search-outline: "\uF907", tag-text: "\uF223", tag-text-outline: "\uE4FC", tailwind: "\uF3FE", tally-mark-1: "\uFABB", tally-mark-2: "\uFABC", tally-mark-3: "\uFABD", tally-mark-4: "\uFABE", tally-mark-5: "\uFABF", tangram: "\uE4F7", tank: "\uED39", tanker-truck: "\uEFE4", tape-drive: "\uF6DE", tape-measure: "\uEB4C", target: "\uE4FD", target-account: "\uEBCF", target-variant: "\uEA76", taxi: "\uE4FE", tea: "\uED9D", tea-outline: "\uED9E", teamviewer: "\uE4FF", teddy-bear: "\uF8FA", telescope: "\uEB4D", television: "\uE501", television-ambient-light: "\uF355", television-box: "\uE838", television-classic: "\uE7F3", television-classic-off: "\uE839", television-guide: "\uE502", television-off: "\uE83A", television-pause: "\uEF88", television-play: "\uEECE", television-shimmer: "\uF10F", television-stop: "\uEF89", temperature-celsius: "\uE503", temperature-fahrenheit: "\uE504", temperature-kelvin: "\uE505", tennis: "\uED9F", tennis-ball: "\uE506", tent: "\uE507", terraform: "\uF061", terrain: "\uE508", test-tube: "\uE667", test-tube-empty: "\uE910", test-tube-off: "\uE911", text: "\uE9A7", text-account: "\uF56F", text-box: "\uE219", text-box-check: "\uEEA5", text-box-check-outline: "\uEEA6", text-box-edit: "\uFA7B", text-box-edit-outline: "\uFA7C", text-box-minus: "\uEEA7", text-box-minus-outline: "\uEEA8", text-box-multiple: "\uEAB6", text-box-multiple-outline: "\uEAB7", text-box-outline: "\uE9EC", text-box-plus: "\uEEA9", text-box-plus-outline: "\uEEAA", text-box-remove: "\uEEAB", text-box-remove-outline: "\uEEAC", text-box-search: "\uEEAD", text-box-search-outline: "\uEEAE", text-long: "\uE9A9", text-recognition: "\uF13C", text-search: "\uF3B7", text-search-variant: "\uFA7D", text-shadow: "\uE668", text-short: "\uE9A8", text-to-speech: "\uE509", text-to-speech-off: "\uE50A", texture: "\uE50B", texture-box: "\uEFE5", theater: "\uE50C", theme-light-dark: "\uE50D", thermometer: "\uE50E", thermometer-alert: "\uEE00", thermometer-bluetooth: "\uF894", thermometer-check: "\uFA7E", thermometer-chevron-down: "\uEE01", thermometer-chevron-up: "\uEE02", thermometer-high: "\uF0C1", thermometer-lines: "\uE50F", thermometer-low: "\uF0C2", thermometer-minus: "\uEE03", thermometer-off: "\uF530", thermometer-plus: "\uEE04", thermometer-water: "\uFA7F", thermostat: "\uE392", thermostat-box: "\uE890", thought-bubble: "\uE7F5", thought-bubble-outline: "\uE7F6", thumb-down: "\uE510", thumb-down-outline: "\uE511", thumb-up: "\uE512", thumb-up-outline: "\uE513", thumbs-up-down: "\uE514", thumbs-up-down-outline: "\uF913", ticket: "\uE515", ticket-account: "\uE516", ticket-confirmation: "\uE517", ticket-confirmation-outline: "\uF3A9", ticket-outline: "\uE912", ticket-percent: "\uE723", ticket-percent-outline: "\uF42A", tie: "\uE518", tilde: "\uE724", tilde-off: "\uF8F2", timelapse: "\uE519", timeline: "\uEBD0", timeline-alert: "\uEF94", timeline-alert-outline: "\uEF97", timeline-check: "\uF531", timeline-check-outline: "\uF532", timeline-clock: "\uF1FA", timeline-clock-outline: "\uF1FB", timeline-help: "\uEF98", timeline-help-outline: "\uEF99", timeline-minus: "\uF533", timeline-minus-outline: "\uF534", timeline-outline: "\uEBD1", timeline-plus: "\uEF95", timeline-plus-outline: "\uEF96", timeline-remove: "\uF535", timeline-remove-outline: "\uF536", timeline-text: "\uEBD2", timeline-text-outline: "\uEBD3", timer: "\uF3AA", timer-10: "\uE51B", timer-3: "\uE51C", timer-alert: "\uFACB", timer-alert-outline: "\uFACC", timer-cancel: "\uFACD", timer-cancel-outline: "\uFACE", timer-check: "\uFACF", timer-check-outline: "\uFAD0", timer-cog: "\uF924", timer-cog-outline: "\uF925", timer-edit: "\uFAD1", timer-edit-outline: "\uFAD2", timer-lock: "\uFAD3", timer-lock-open: "\uFAD4", timer-lock-open-outline: "\uFAD5", timer-lock-outline: "\uFAD6", timer-marker: "\uFAD7", timer-marker-outline: "\uFAD8", timer-minus: "\uFAD9", timer-minus-outline: "\uFADA", timer-music: "\uFADB", timer-music-outline: "\uFADC", timer-off: "\uF3AB", timer-off-outline: "\uE51D", timer-outline: "\uE51A", timer-pause: "\uFADD", timer-pause-outline: "\uFADE", timer-play: "\uFADF", timer-play-outline: "\uFAE0", timer-plus: "\uFAE1", timer-plus-outline: "\uFAE2", timer-refresh: "\uFAE3", timer-refresh-outline: "\uFAE4", timer-remove: "\uFAE5", timer-remove-outline: "\uFAE6", timer-sand: "\uE51E", timer-sand-complete: "\uF99E", timer-sand-empty: "\uE6AC", timer-sand-full: "\uE78B", timer-sand-paused: "\uF99F", timer-settings: "\uF922", timer-settings-outline: "\uF923", timer-star: "\uFAE7", timer-star-outline: "\uFAE8", timer-stop: "\uFAE9", timer-stop-outline: "\uFAEA", timer-sync: "\uFAEB", timer-sync-outline: "\uFAEC", timetable: "\uE51F", tire: "\uF895", toaster: "\uF062", toaster-off: "\uF1B6", toaster-oven: "\uECD2", toggle-switch: "\uE520", toggle-switch-off: "\uE521", toggle-switch-off-outline: "\uEA18", toggle-switch-outline: "\uEA19", toggle-switch-variant: "\uFA24", toggle-switch-variant-off: "\uFA25", toilet: "\uE9AA", toolbox: "\uE9AB", toolbox-outline: "\uE9AC", tools: "\uF063", tooltip: "\uE522", tooltip-account: "\uE00B", tooltip-cellphone: "\uF83A", tooltip-check: "\uF55B", tooltip-check-outline: "\uF55C", tooltip-edit: "\uE523", tooltip-edit-outline: "\uF2C4", tooltip-image: "\uE524", tooltip-image-outline: "\uEBD4", tooltip-minus: "\uF55D", tooltip-minus-outline: "\uF55E", tooltip-outline: "\uE525", tooltip-plus: "\uEBD5", tooltip-plus-outline: "\uE526", tooltip-remove: "\uF55F", tooltip-remove-outline: "\uF560", tooltip-text: "\uE527", tooltip-text-outline: "\uEBD6", tooth: "\uE8C2", tooth-outline: "\uE528", toothbrush: "\uF128", toothbrush-electric: "\uF12B", toothbrush-paste: "\uF129", torch: "\uF605", tortoise: "\uED3A", toslink: "\uF2B7", tournament: "\uE9AD", tow-truck: "\uE83B", tower-beach: "\uE680", tower-fire: "\uE681", town-hall: "\uF874", toy-brick: "\uF287", toy-brick-marker: "\uF288", toy-brick-marker-outline: "\uF289", toy-brick-minus: "\uF28A", toy-brick-minus-outline: "\uF28B", toy-brick-outline: "\uF28C", toy-brick-plus: "\uF28D", toy-brick-plus-outline: "\uF28E", toy-brick-remove: "\uF28F", toy-brick-remove-outline: "\uF290", toy-brick-search: "\uF291", toy-brick-search-outline: "\uF292", track-light: "\uE913", trackpad: "\uE7F7", trackpad-lock: "\uE932", tractor: "\uE891", tractor-variant: "\uF4C3", trademark: "\uEA77", traffic-cone: "\uF37B", traffic-light: "\uE52A", traffic-light-outline: "\uF829", train: "\uE52B", train-car: "\uEBD7", train-car-passenger: "\uF732", train-car-passenger-door: "\uF733", train-car-passenger-door-open: "\uF734", train-car-passenger-variant: "\uF735", train-variant: "\uE8C3", tram: "\uE52C", tram-side: "\uEFE6", transcribe: "\uE52D", transcribe-close: "\uE52E", transfer: "\uF064", transfer-down: "\uEDA0", transfer-left: "\uEDA1", transfer-right: "\uE52F", transfer-up: "\uEDA2", transit-connection: "\uED3B", transit-connection-horizontal: "\uF545", transit-connection-variant: "\uED3C", transit-detour: "\uEF8A", transit-skip: "\uF514", transit-transfer: "\uE6AD", transition: "\uE914", transition-masked: "\uE915", translate: "\uE5C9", translate-off: "\uEE05", transmission-tower: "\uED3D", transmission-tower-export: "\uF92B", transmission-tower-import: "\uF92C", transmission-tower-off: "\uF9DC", trash-can: "\uEA78", trash-can-outline: "\uEA79", tray: "\uF293", tray-alert: "\uF294", tray-arrow-down: "\uE11F", tray-arrow-up: "\uE11C", tray-full: "\uF295", tray-minus: "\uF296", tray-plus: "\uF297", tray-remove: "\uF298", treasure-chest: "\uE725", tree: "\uE530", tree-outline: "\uEE68", trello: "\uE531", trending-down: "\uE532", trending-neutral: "\uE533", trending-up: "\uE534", triangle: "\uE535", triangle-outline: "\uE536", triangle-small-down: "\uFA08", triangle-small-up: "\uFA09", triangle-wave: "\uF47B", triforce: "\uEBD8", trophy: "\uE537", trophy-award: "\uE538", trophy-broken: "\uEDA3", trophy-outline: "\uE539", trophy-variant: "\uE53A", trophy-variant-outline: "\uE53B", truck: "\uE53C", truck-alert: "\uF9DD", truck-alert-outline: "\uF9DE", truck-cargo-container: "\uF8D7", truck-check: "\uECD3", truck-check-outline: "\uF299", truck-delivery: "\uE53D", truck-delivery-outline: "\uF29A", truck-fast: "\uE787", truck-fast-outline: "\uF29B", truck-flatbed: "\uF890", truck-minus: "\uF9AD", truck-minus-outline: "\uF9BC", truck-outline: "\uF29C", truck-plus: "\uF9AC", truck-plus-outline: "\uF9BB", truck-remove: "\uF9AE", truck-remove-outline: "\uF9BD", truck-snowflake: "\uF9A5", truck-trailer: "\uE726", trumpet: "\uF095", tshirt-crew: "\uEA7A", tshirt-crew-outline: "\uE53E", tshirt-v: "\uEA7B", tshirt-v-outline: "\uE53F", tsunami: "\uFA80", tumble-dryer: "\uE916", tumble-dryer-alert: "\uF1B9", tumble-dryer-off: "\uF1BA", tune: "\uE62D", tune-variant: "\uF541", tune-vertical: "\uE669", tune-vertical-variant: "\uF542", tunnel: "\uF83C", tunnel-outline: "\uF83D", turbine: "\uFA81", turkey: "\uF71A", turnstile: "\uECD4", turnstile-outline: "\uECD5", turtle: "\uECD6", twitch: "\uE542", twitter: "\uE543", two-factor-authentication: "\uE9AE", typewriter: "\uEF2C", ubisoft: "\uEBD9", ubuntu: "\uE547", ufo: "\uF0C3", ufo-outline: "\uF0C4", ultra-high-definition: "\uE7F8", umbraco: "\uE548", umbrella: "\uE549", umbrella-beach: "\uF889", umbrella-beach-outline: "\uF88A", umbrella-closed: "\uE9AF", umbrella-closed-outline: "\uF3E1", umbrella-closed-variant: "\uF3E0", umbrella-outline: "\uE54A", undo: "\uE54B", undo-variant: "\uE54C", unfold-less-horizontal: "\uE54D", unfold-less-vertical: "\uE75F", unfold-more-horizontal: "\uE54E", unfold-more-vertical: "\uE760", ungroup: "\uE54F", unicode: "\uEECF", unicorn: "\uF5C1", unicorn-variant: "\uF5C2", unicycle: "\uF5E4", unity: "\uE6AE", unreal: "\uE9B0", update: "\uE6AF", upload: "\uE551", upload-lock: "\uF372", upload-lock-outline: "\uF373", upload-multiple: "\uE83C", upload-network: "\uE6F5", upload-network-outline: "\uECD7", upload-off: "\uF0C5", upload-off-outline: "\uF0C6", upload-outline: "\uEE06", usb: "\uE552", usb-flash-drive: "\uF29D", usb-flash-drive-outline: "\uF29E", usb-port: "\uF1EF", vacuum: "\uF9A0", vacuum-outline: "\uF9A1", valve: "\uF065", valve-closed: "\uF066", valve-open: "\uF067", van-passenger: "\uE7F9", van-utility: "\uE7FA", vanish: "\uE7FB", vanish-quarter: "\uF553", vanity-light: "\uF1E0", variable: "\uEAE6", variable-box: "\uF110", vector-arrange-above: "\uE553", vector-arrange-below: "\uE554", vector-bezier: "\uEAE7", vector-circle: "\uE555", vector-circle-variant: "\uE556", vector-combine: "\uE557", vector-curve: "\uE558", vector-difference: "\uE559", vector-difference-ab: "\uE55A", vector-difference-ba: "\uE55B", vector-ellipse: "\uE892", vector-intersection: "\uE55C", vector-line: "\uE55D", vector-link: "\uEFE7", vector-point: "\uE55E", vector-polygon: "\uE55F", vector-polygon-variant: "\uF855", vector-polyline: "\uE560", vector-polyline-edit: "\uF224", vector-polyline-minus: "\uF225", vector-polyline-plus: "\uF226", vector-polyline-remove: "\uF227", vector-radius: "\uE749", vector-rectangle: "\uE5C5", vector-selection: "\uE561", vector-square: "\uE000", vector-square-close: "\uF856", vector-square-edit: "\uF8D8", vector-square-minus: "\uF8D9", vector-square-open: "\uF857", vector-square-plus: "\uF8DA", vector-square-remove: "\uF8DB", vector-triangle: "\uE562", vector-union: "\uE563", vhs: "\uEA1A", vibrate: "\uE565", vibrate-off: "\uECD8", video: "\uE566", video-2d: "\uFA1B", video-3d: "\uE7FC", video-3d-off: "\uF3D8", video-3d-variant: "\uEED0", video-4k-box: "\uE83D", video-account: "\uE918", video-box: "\uE0FC", video-box-off: "\uE0FD", video-check: "\uF068", video-check-outline: "\uF069", video-high-definition: "\uF52D", video-image: "\uE919", video-input-antenna: "\uE83E", video-input-component: "\uE83F", video-input-hdmi: "\uE840", video-input-scart: "\uEF8B", video-input-svideo: "\uE841", video-marker: "\uF9A8", video-marker-outline: "\uF9A9", video-minus: "\uE9B1", video-minus-outline: "\uE2B9", video-off: "\uE567", video-off-outline: "\uEBDA", video-outline: "\uEBDB", video-plus: "\uE9B2", video-plus-outline: "\uE1D2", video-stabilization: "\uE91A", video-switch: "\uE568", video-switch-outline: "\uE78F", video-vintage: "\uEA1B", video-wireless: "\uEED1", video-wireless-outline: "\uEED2", view-agenda: "\uE569", view-agenda-outline: "\uF1D7", view-array: "\uE56A", view-array-outline: "\uF484", view-carousel: "\uE56B", view-carousel-outline: "\uF485", view-column: "\uE56C", view-column-outline: "\uF486", view-comfy: "\uEE69", view-comfy-outline: "\uF487", view-compact: "\uEE6A", view-compact-outline: "\uEE6B", view-dashboard: "\uE56D", view-dashboard-edit: "\uF946", view-dashboard-edit-outline: "\uF947", view-dashboard-outline: "\uEA1C", view-dashboard-variant: "\uE842", view-dashboard-variant-outline: "\uF488", view-day: "\uE56E", view-day-outline: "\uF489", view-gallery: "\uF887", view-gallery-outline: "\uF888", view-grid: "\uE56F", view-grid-outline: "\uF1D8", view-grid-plus: "\uEF8C", view-grid-plus-outline: "\uF1D9", view-headline: "\uE570", view-list: "\uE571", view-list-outline: "\uF48A", view-module: "\uE572", view-module-outline: "\uF48B", view-parallel: "\uE727", view-parallel-outline: "\uF48C", view-quilt: "\uE573", view-quilt-outline: "\uF48D", view-sequential: "\uE728", view-sequential-outline: "\uF48E", view-split-horizontal: "\uEBCA", view-split-vertical: "\uEBCB", view-stream: "\uE574", view-stream-outline: "\uF48F", view-week: "\uE575", view-week-outline: "\uF490", vimeo: "\uE576", violin: "\uE60E", virtual-reality: "\uE893", virus: "\uF3B5", virus-off: "\uF8E0", virus-off-outline: "\uF8E1", virus-outline: "\uF3B6", vlc: "\uE57B", voicemail: "\uE57C", volcano: "\uFA82", volcano-outline: "\uFA83", volleyball: "\uE9B3", volume-high: "\uE57D", volume-low: "\uE57E", volume-medium: "\uE57F", volume-minus: "\uE75D", volume-mute: "\uE75E", volume-off: "\uE580", volume-plus: "\uE75C", volume-source: "\uF11F", volume-variant-off: "\uEE07", volume-vibrate: "\uF120", vote: "\uEA1E", vote-outline: "\uEA1F", vpn: "\uE581", vuejs: "\uE843", vuetify: "\uEE6C", walk: "\uE582", wall: "\uE7FD", wall-fire: "\uFA10", wall-sconce: "\uE91B", wall-sconce-flat: "\uE91C", wall-sconce-flat-outline: "\uF7C8", wall-sconce-flat-variant: "\uE41B", wall-sconce-flat-variant-outline: "\uF7C9", wall-sconce-outline: "\uF7CA", wall-sconce-round: "\uE747", wall-sconce-round-outline: "\uF7CB", wall-sconce-round-variant: "\uE91D", wall-sconce-round-variant-outline: "\uF7CC", wallet: "\uE583", wallet-giftcard: "\uE584", wallet-membership: "\uE585", wallet-outline: "\uEBDC", wallet-plus: "\uEF8D", wallet-plus-outline: "\uEF8E", wallet-travel: "\uE586", wallpaper: "\uEE08", wan: "\uE587", wardrobe: "\uEF8F", wardrobe-outline: "\uEF90", warehouse: "\uEF80", washing-machine: "\uE729", washing-machine-alert: "\uF1BB", washing-machine-off: "\uF1BC", watch: "\uE588", watch-export: "\uE589", watch-export-variant: "\uE894", watch-import: "\uE58A", watch-import-variant: "\uE895", watch-variant: "\uE896", watch-vibrate: "\uE6B0", watch-vibrate-off: "\uECD9", water: "\uE58B", water-alert: "\uF501", water-alert-outline: "\uF502", water-boiler: "\uEF91", water-boiler-alert: "\uF1B2", water-boiler-off: "\uF1B3", water-check: "\uF503", water-check-outline: "\uF504", water-circle: "\uF805", water-minus: "\uF505", water-minus-outline: "\uF506", water-off: "\uE58C", water-off-outline: "\uF507", water-opacity: "\uF854", water-outline: "\uEE09", water-percent: "\uE58D", water-percent-alert: "\uF508", water-plus: "\uF509", water-plus-outline: "\uF50A", water-polo: "\uF29F", water-pump: "\uE58E", water-pump-off: "\uEF92", water-remove: "\uF50B", water-remove-outline: "\uF50C", water-sync: "\uF7C5", water-thermometer: "\uFA84", water-thermometer-outline: "\uFA85", water-well: "\uF06A", water-well-outline: "\uF06B", waterfall: "\uF848", watering-can: "\uF480", watering-can-outline: "\uF481", watermark: "\uE611", wave: "\uEF2D", waveform: "\uF47C", waves: "\uE78C", waves-arrow-left: "\uF858", waves-arrow-right: "\uF859", waves-arrow-up: "\uF85A", waze: "\uEBDD", weather-cloudy: "\uE58F", weather-cloudy-alert: "\uEF2E", weather-cloudy-arrow-right: "\uEE6D", weather-cloudy-clock: "\uF8F5", weather-fog: "\uE590", weather-hail: "\uE591", weather-hazy: "\uEF2F", weather-hurricane: "\uE897", weather-lightning: "\uE592", weather-lightning-rainy: "\uE67D", weather-night: "\uE593", weather-night-partly-cloudy: "\uEF30", weather-partly-cloudy: "\uE594", weather-partly-lightning: "\uEF31", weather-partly-rainy: "\uEF32", weather-partly-snowy: "\uEF33", weather-partly-snowy-rainy: "\uEF34", weather-pouring: "\uE595", weather-rainy: "\uE596", weather-snowy: "\uE597", weather-snowy-heavy: "\uEF35", weather-snowy-rainy: "\uE67E", weather-sunny: "\uE598", weather-sunny-alert: "\uEF36", weather-sunny-off: "\uF4E3", weather-sunset: "\uE599", weather-sunset-down: "\uE59A", weather-sunset-up: "\uE59B", weather-tornado: "\uEF37", weather-windy: "\uE59C", weather-windy-variant: "\uE59D", web: "\uE59E", web-box: "\uEF93", web-cancel: "\uF78F", web-check: "\uE788", web-clock: "\uF249", web-minus: "\uF09F", web-off: "\uEA8D", web-plus: "\uE032", web-refresh: "\uF790", web-remove: "\uE550", web-sync: "\uF791", webcam: "\uE59F", webcam-off: "\uF736", webhook: "\uE62E", webpack: "\uE72A", webrtc: "\uF247", wechat: "\uE610", weight: "\uE5A0", weight-gram: "\uED3E", weight-kilogram: "\uE5A1", weight-lifter: "\uF15C", weight-pound: "\uE9B4", whatsapp: "\uE5A2", wheel-barrow: "\uF4F1", wheelchair: "\uFA86", wheelchair-accessibility: "\uE5A3", whistle: "\uE9B5", whistle-outline: "\uF2BB", white-balance-auto: "\uE5A4", white-balance-incandescent: "\uE5A5", white-balance-iridescent: "\uE5A6", white-balance-sunny: "\uE5A7", widgets: "\uE72B", widgets-outline: "\uF354", wifi: "\uE5A8", wifi-alert: "\uF6B4", wifi-arrow-down: "\uF6B5", wifi-arrow-left: "\uF6B6", wifi-arrow-left-right: "\uF6B7", wifi-arrow-right: "\uF6B8", wifi-arrow-up: "\uF6B9", wifi-arrow-up-down: "\uF6BA", wifi-cancel: "\uF6BB", wifi-check: "\uF6BC", wifi-cog: "\uF6BD", wifi-lock: "\uF6BE", wifi-lock-open: "\uF6BF", wifi-marker: "\uF6C0", wifi-minus: "\uF6C1", wifi-off: "\uE5A9", wifi-plus: "\uF6C2", wifi-refresh: "\uF6C3", wifi-remove: "\uF6C4", wifi-settings: "\uF6C5", wifi-star: "\uEE0A", wifi-strength-1: "\uE91E", wifi-strength-1-alert: "\uE91F", wifi-strength-1-lock: "\uE920", wifi-strength-1-lock-open: "\uF6CA", wifi-strength-2: "\uE921", wifi-strength-2-alert: "\uE922", wifi-strength-2-lock: "\uE923", wifi-strength-2-lock-open: "\uF6CB", wifi-strength-3: "\uE924", wifi-strength-3-alert: "\uE925", wifi-strength-3-lock: "\uE926", wifi-strength-3-lock-open: "\uF6CC", wifi-strength-4: "\uE927", wifi-strength-4-alert: "\uE928", wifi-strength-4-lock: "\uE929", wifi-strength-4-lock-open: "\uF6CD", wifi-strength-alert-outline: "\uE92A", wifi-strength-lock-open-outline: "\uF6CE", wifi-strength-lock-outline: "\uE92B", wifi-strength-off: "\uE92C", wifi-strength-off-outline: "\uE92D", wifi-strength-outline: "\uE92E", wifi-sync: "\uF6C6", wikipedia: "\uE5AB", wind-power: "\uFA87", wind-power-outline: "\uFA88", wind-turbine: "\uEDA4", wind-turbine-alert: "\uF9AA", wind-turbine-check: "\uF9AB", window-close: "\uE5AC", window-closed: "\uE5AD", window-closed-variant: "\uF1DA", window-maximize: "\uE5AE", window-minimize: "\uE5AF", window-open: "\uE5B0", window-open-variant: "\uF1DB", window-restore: "\uE5B1", window-shutter: "\uF11B", window-shutter-alert: "\uF11C", window-shutter-cog: "\uFA89", window-shutter-open: "\uF11D", window-shutter-settings: "\uFA8A", windsock: "\uF5F9", wiper: "\uEAE8", wiper-wash: "\uEDA5", wiper-wash-alert: "\uF8DE", wizard-hat: "\uF476", wordpress: "\uE5B3", wrap: "\uE5B5", wrap-disabled: "\uEBDE", wrench: "\uE5B6", wrench-clock: "\uF9A2", wrench-outline: "\uEBDF", xamarin: "\uE844", xml: "\uE5BF", xmpp: "\uE7FE", yahoo: "\uEB4E", yeast: "\uE5C0", yin-yang: "\uE67F", yoga: "\uF17B", youtube: "\uE5C2", youtube-gaming: "\uE847", youtube-studio: "\uE846", youtube-subscription: "\uED3F", youtube-tv: "\uE447", yurt: "\uF515", z-wave: "\uEAE9", zend: "\uEAEA", zigbee: "\uED40", zip-box: "\uE5C3", zip-box-outline: "\uEFF9", zip-disk: "\uEA22", zodiac-aquarius: "\uEA7C", zodiac-aries: "\uEA7D", zodiac-cancer: "\uEA7E", zodiac-capricorn: "\uEA7F", zodiac-gemini: "\uEA80", zodiac-leo: "\uEA81", zodiac-libra: "\uEA82", zodiac-pisces: "\uEA83", zodiac-sagittarius: "\uEA84", zodiac-scorpio: "\uEA85", zodiac-taurus: "\uEA86", zodiac-virgo: "\uEA87" } # yamllint enable rule:line-length rule:braces + nspanel_name: '{{ device_attr(nspanel_deviceid, "name") | regex_replace("[^a-zA-Z0-9]", "_") | regex_replace("_+", "_") | lower }}' + ##### Nextion dict #### nextion: color: @@ -4167,12 +3572,87 @@ variables: {{ language_tmp if language_tmp is string - and language_tmp in ["bg", "hr", "cs", "da", "nl", "et", "fi", "fr", "de", "el", "he", "hu", "id", "it", "ja", + and language_tmp in ["ar", "bg", "hr", "cs", "da", "nl", "et", "fi", "fr", "de", "el", "he", "hu", "id", "it", "ja", "ko", "lv", "lt", "nb", "pl", "pt", "ro", "ru", "sk", "sl", "es", "sv", "tr", "uk", "zh-tw"] else "en" }} mui: + ar: # Arabic + weekdays: + mon: الاثنين + tue: الثلاثاء + wed: الأربعاء + thu: الخميس + fri: الجمعة + sat: السبت + sun: الأحد + weekdays_short: + mon: اثن + tue: ثلا + wed: أرب + thu: خمي + fri: جمع + sat: سبت + sun: أحد + months: + jan: يناير + feb: فبراير + mar: مارس + apr: أبريل + may: مايو + jun: يونيو + jul: يوليو + aug: أغسطس + sep: سبتمبر + oct: أكتوبر + nov: نوفمبر + dec: ديسمبر + months_short: + jan: ينا + feb: فبر + mar: مار + apr: أبر + may: ماي + jun: يون + jul: يول + aug: أغس + sep: سبت + oct: أكت + nov: نوف + dec: ديس + relative_day: + today: اليوم + tomorrow: غدًا + in_2_days: بعد يومين + in_3_days: بعد ثلاثة أيام + in_4_days: بعد أربعة أيام + climate: + states: + "on": مشغل + "off": مطفأ + heat: تدفئة + please_confirm: يرجى التأكيد + unavailable: غير متاح + unknown: مجهول + no_name: بدون اسم + alarm: + home: في المنزل + away: بعيد + night: ليل + vacation: إجازة + bypass: تجاوز + disarm: نزع السلاح + settings: + reboot: إعادة تشغيل + sleep: وضع النوم + brightness: سطوع + bright: مشرق + dimming: تعتيم + dim: خافت + meridiem: + am: صباحاً + pm: مساءً bg: # Bulgarian weekdays: mon: Понеделник @@ -4183,39 +3663,39 @@ variables: sat: Събота sun: Неделя weekdays_short: - mon: Mon - tue: Tue - wed: Wed - thu: Thu - fri: Fri - sat: Sat - sun: Sun + mon: Пон + tue: Вто + wed: Сря + thu: Чет + fri: Пет + sat: Съб + sun: Нед months: - jan: January - feb: February - mar: March - apr: April - may: May - jun: June - jul: July - aug: August - sep: September - oct: October - nov: November - dec: December + jan: Януари + feb: Февруари + mar: Март + apr: Април + may: Май + jun: Юни + jul: Юли + aug: Август + sep: Септември + oct: Октомври + nov: Ноември + dec: Декември months_short: - jan: Jan - feb: Feb - mar: Mar - apr: Apr - may: May - jun: Jun - jul: Jul - aug: Aug - sep: Sep - oct: Oct - nov: Nov - dec: Dec + jan: Яну + feb: Фев + mar: Мар + apr: Апр + may: Май + jun: Юни + jul: Юли + aug: Авг + sep: Сеп + oct: Окт + nov: Ное + dec: Дек relative_day: today: Днес tomorrow: Утре @@ -4229,21 +3709,22 @@ variables: heat: Отопление please_confirm: Моля, потвърдете unavailable: Недостъпен + unknown: Неизвестен no_name: Няма име alarm: - home: home - away: away - night: night - vacation: vacation - bypass: bypass - disarm: disarm + home: Вкъщи + away: Навън + night: Нощ + vacation: Ваканция + bypass: Заобикаляне + disarm: Разоръжаване settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: Рестартиране + sleep: Сън + brightness: Яркост + bright: Ярък + dimming: Затъмняване + dim: Тъмен meridiem: am: AM pm: PM @@ -4261,7 +3742,7 @@ variables: tue: Út wed: St thu: Čt - fri: PÁ + fri: Pá sat: So sun: Ne months: @@ -4283,8 +3764,8 @@ variables: mar: Bře apr: Dub may: Kvě - jun: Črn - jul: Črc + jun: Čvn + jul: Čvc aug: Srp sep: Zář oct: Říj @@ -4293,34 +3774,35 @@ variables: relative_day: today: Dnes tomorrow: Zítra - in_2_days: Za dni - in_3_days: Za 3 dni - in_4_days: Za 4 dni + in_2_days: Za 2 dny + in_3_days: Za 3 dny + in_4_days: Za 4 dny climate: states: - "on": Zap. - "off": Vyp. + "on": Zapnuto + "off": Vypnuto heat: Topení - please_confirm: Prosím potvrďte + please_confirm: Prosím, potvrďte unavailable: Nedostupné + unknown: Neznámý no_name: Bez názvu alarm: - home: home - away: away - night: night - vacation: vacation - bypass: bypass - disarm: disarm + home: Doma + away: Pryč + night: Noc + vacation: Dovolená + bypass: Obcházet + disarm: Odjistit settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: Restart + sleep: Spánek + brightness: Jas + bright: Světlý + dimming: Ztmavení + dim: Tmavý meridiem: - am: AM - pm: PM + am: dop. + pm: odp. da: # Danish weekdays: mon: Mandag @@ -4331,24 +3813,24 @@ variables: sat: Lørdag sun: Søndag weekdays_short: - mon: Mon - tue: Tue - wed: Wed - thu: Thu - fri: Fri - sat: Sat - sun: Sun + mon: Man + tue: Tir + wed: Ons + thu: Tor + fri: Fre + sat: Lør + sun: Søn months: - jan: January - feb: February - mar: March + jan: Januar + feb: Februar + mar: Marts apr: April - may: May - jun: June - jul: July + may: Maj + jun: Juni + jul: Juli aug: August sep: September - oct: October + oct: Oktober nov: November dec: December months_short: @@ -4356,45 +3838,46 @@ variables: feb: Feb mar: Mar apr: Apr - may: May + may: Maj jun: Jun jul: Jul aug: Aug sep: Sep - oct: Oct + oct: Okt nov: Nov dec: Dec relative_day: today: I dag tomorrow: I morgen - in_2_days: om 2 dage - in_3_days: om 3 dage - in_4_days: om 4 dage + in_2_days: Om 2 dage + in_3_days: Om 3 dage + in_4_days: Om 4 dage climate: states: - "on": på - "off": "off" - heat: varme + "on": Tændt + "off": Slukket + heat: Varme please_confirm: Bekræft venligst - unavailable: Unavailable - no_name: No name + unavailable: Utilgængelig + unknown: Ukendt + no_name: Intet navn alarm: - home: home - away: away - night: night - vacation: vacation - bypass: bypass - disarm: disarm + home: Hjemme + away: Væk + night: Nat + vacation: Ferie + bypass: Omkørsel + disarm: Afvæbne settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: Genstart + sleep: Sove + brightness: Lysstyrke + bright: Lys + dimming: Dæmpning + dim: Dæmpet meridiem: - am: AM - pm: PM + am: FM + pm: EM de: # German weekdays: mon: Montag @@ -4405,13 +3888,13 @@ variables: sat: Samstag sun: Sonntag weekdays_short: - mon: Mo. - tue: Di. - wed: Mi. - thu: Do. - fri: Fr. - sat: Sa. - sun: So. + mon: Mo + tue: Di + wed: Mi + thu: Do + fri: Fr + sat: Sa + sun: So months: jan: Januar feb: Februar @@ -4426,49 +3909,50 @@ variables: nov: November dec: Dezember months_short: - jan: Jan. - feb: Feb. - mar: März - apr: Apr. + jan: Jan + feb: Feb + mar: Mär + apr: Apr may: Mai - jun: Jun. - jul: Jul. - aug: Aug. - sep: Sept. - oct: Okt. - nov: Nov. - dec: Dez. + jun: Jun + jul: Jul + aug: Aug + sep: Sep + oct: Okt + nov: Nov + dec: Dez relative_day: today: Heute tomorrow: Morgen - in_2_days: in 2 Tagen - in_3_days: in 3 Tagen - in_4_days: in 4 Tagen + in_2_days: In 2 Tagen + in_3_days: In 3 Tagen + in_4_days: In 4 Tagen climate: states: - "on": ein - "off": aus - heat: heizen + "on": Ein + "off": Aus + heat: Heizen please_confirm: Bitte bestätigen - unavailable: Unavailable - no_name: No name + unavailable: Nicht verfügbar + unknown: Unbekannt + no_name: Kein Name alarm: home: Zuhause away: Abwesend night: Nacht vacation: Urlaub - bypass: Bypass - disarm: Deaktiviert + bypass: Umgehen + disarm: Entwaffnen settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: Neustart + sleep: Schlafmodus + brightness: Helligkeit + bright: Hell + dimming: Dimmen + dim: Gedimmt meridiem: - am: AM - pm: PM + am: vorm. + pm: nachm. el: # Greek weekdays: mon: Δευτέρα @@ -4490,7 +3974,7 @@ variables: jan: Ιανουάριος feb: Φεβρουάριος mar: Μάρτιος - apr: Απρίλος + apr: Απρίλιος may: Μάιος jun: Ιούνιος jul: Ιούλιος @@ -4525,24 +4009,25 @@ variables: heat: Θέρμανση please_confirm: Παρακαλώ επιβεβαιώστε unavailable: Μη διαθέσιμο + unknown: Άγνωστο no_name: Χωρίς όνομα alarm: - home: home - away: away - night: night - vacation: vacation - bypass: bypass - disarm: disarm + home: Σπίτι + away: Μακριά + night: Νύχτα + vacation: Διακοπές + bypass: Παράκαμψη + disarm: Αφοπλισμός settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: Επανεκκίνηση + sleep: Ύπνος + brightness: Φωτεινότητα + bright: Φωτεινό + dimming: Σκίαση + dim: Σκοτεινό meridiem: - am: AM - pm: PM + am: πμ + pm: μμ en: # English weekdays: mon: Monday @@ -4599,6 +4084,7 @@ variables: heat: heat please_confirm: Please confirm unavailable: Unavailable + unknown: Unknown no_name: No name alarm: home: Home @@ -4629,10 +4115,10 @@ variables: weekdays_short: mon: Lun tue: Mar - wed: Mie + wed: Mié thu: Jue fri: Vie - sat: Sab + sat: Sáb sun: Dom months: jan: Enero @@ -4673,6 +4159,7 @@ variables: heat: Calentar please_confirm: Por favor, confirme unavailable: No disponible + unknown: Desconocido no_name: Sin nombre alarm: home: Casa @@ -4689,8 +4176,8 @@ variables: dimming: Atenuación dim: Oscuro meridiem: - am: AM - pm: PM + am: a.m. + pm: p.m. et: # Estonian weekdays: mon: Esmaspäev @@ -4701,39 +4188,39 @@ variables: sat: Laupäev sun: Pühapäev weekdays_short: - mon: Mon - tue: Tue - wed: Wed - thu: Thu - fri: Fri - sat: Sat - sun: Sun + mon: E + tue: T + wed: K + thu: N + fri: R + sat: L + sun: P months: - jan: January - feb: February - mar: March - apr: April - may: May - jun: June - jul: July + jan: Jaanuar + feb: Veebruar + mar: Märts + apr: Aprill + may: Mai + jun: Juuni + jul: Juuli aug: August sep: September - oct: October + oct: Oktoober nov: November - dec: December + dec: Detsember months_short: jan: Jan - feb: Feb - mar: Mar + feb: Veb + mar: Mär apr: Apr - may: May + may: Mai jun: Jun jul: Jul aug: Aug sep: Sep - oct: Oct + oct: Okt nov: Nov - dec: Dec + dec: Dets relative_day: today: Täna tomorrow: Homme @@ -4742,29 +4229,30 @@ variables: in_4_days: 4 päeva pärast climate: states: - "on": aadressil - "off": välja - heat: soojus + "on": sees + "off": väljas + heat: kütte please_confirm: Palun kinnitage - unavailable: Unavailable - no_name: No name + unavailable: Pole saadaval + unknown: Tundmatu + no_name: Nime pole alarm: - home: home - away: away - night: night - vacation: vacation - bypass: bypass - disarm: disarm + home: Kodus + away: Ära + night: Öö + vacation: Puhkus + bypass: Möödaviik + disarm: Desarmeerima settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: Taaskäivita + sleep: Uni + brightness: Heledus + bright: Ere + dimming: Hämardamine + dim: Hämar meridiem: - am: AM - pm: PM + am: e.l. + pm: p.l. fi: # Finnish weekdays: mon: maanantai @@ -4816,29 +4304,30 @@ variables: in_4_days: 4 päivän päästä climate: states: - "on": "On" - "off": "Off" + "on": päällä + "off": pois päältä heat: lämpö please_confirm: Vahvista - unavailable: ei saatavilla - no_name: nimetön + unavailable: Ei saatavilla + unknown: Tuntematon + no_name: Nimeämätön alarm: home: Kotona away: Poissa night: Yö vacation: Loma bypass: Ohitus - disarm: Pois + disarm: Pois päältä settings: - reboot: Uudelleenkäynnistys + reboot: Käynnistä uudelleen sleep: Lepotila brightness: Kirkkaus bright: Kirkas dimming: Himmennys dim: Himmeä meridiem: - am: AM - pm: PM + am: aamupäivä + pm: iltapäivä fr: # French weekdays: mon: Lundi @@ -4871,9 +4360,9 @@ variables: dec: Décembre months_short: jan: Jan - feb: Feb + feb: Fév mar: Mar - apr: Apr + apr: Avr may: Mai jun: Jun jul: Jul @@ -4881,33 +4370,34 @@ variables: sep: Sep oct: Oct nov: Nov - dec: Dec + dec: Déc relative_day: - today: Aujourd hui + today: Aujourd'hui tomorrow: Demain in_2_days: Dans 2 jours in_3_days: Dans 3 jours in_4_days: Dans 4 jours climate: states: - "on": "on" - "off": "off" - heat: Chaleur + "on": Activé + "off": Désactivé + heat: Chauffage please_confirm: Veuillez confirmer unavailable: Indisponible + unknown: Inconnu no_name: Sans nom alarm: - home: Présence - away: Absence + home: À la maison + away: Absent night: Nuit vacation: Vacances - bypass: Bypass - disarm: Désarmée + bypass: Contournement + disarm: Désarmer settings: - reboot: Redémarrage + reboot: Redémarrer sleep: Veille brightness: Luminosité - bright: Clair + bright: Lumineux dimming: Atténuation dim: Sombre meridiem: @@ -4915,21 +4405,21 @@ variables: pm: PM he: # Hebrew weekdays: - mon: ינש - tue: ישילש - wed: יעיבר - thu: ישימח - fri: ישיש - sat: תבש - sun: ןושאר + mon: יום שני + tue: יום שלישי + wed: יום רביעי + thu: יום חמישי + fri: יום שישי + sat: יום שבת + sun: יום ראשון weekdays_short: - mon: ב - tue: ג - wed: ד - thu: ה - fri: ו - sat: ש - sun: א + mon: ב' + tue: ג' + wed: ד' + thu: ה' + fri: ו' + sat: ש' + sun: א' months: jan: ינואר feb: פברואר @@ -4944,49 +4434,50 @@ variables: nov: נובמבר dec: דצמבר months_short: - jan: ינו - feb: פבר + jan: ינו' + feb: פבר' mar: מרץ - apr: אפר + apr: אפר' may: מאי - jun: יונ - jul: יול - aug: אוג - sep: ספט - oct: אוק - nov: נוב - dec: דצמ + jun: יונ' + jul: יול' + aug: אוג' + sep: ספט' + oct: אוק' + nov: נוב' + dec: דצמ' relative_day: - today: םויה - tomorrow: רחמ - in_2_days: םיימוי דוע - in_3_days: םימי 3 דוע - in_4_days: םימי 4 דוע + today: היום + tomorrow: מחר + in_2_days: בעוד יומיים + in_3_days: בעוד שלושה ימים + in_4_days: בעוד ארבעה ימים climate: states: - "on": קולד - "off": יובכ - heat: םוח - please_confirm: רשא השקבב - unavailable: Unavailable - no_name: No name + "on": פעיל + "off": כבוי + heat: חימום + please_confirm: אנא אשר + unavailable: לא זמין + unknown: לא ידוע + no_name: ללא שם alarm: - home: home - away: away - night: night - vacation: vacation - bypass: bypass - disarm: disarm + home: בבית + away: החוצה + night: לילה + vacation: חופשה + bypass: עקיפה + disarm: נטרול settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: הפעלה מחדש + sleep: שינה + brightness: בהירות + bright: בהיר + dimming: החשכה + dim: כהה meridiem: - am: AM - pm: PM + am: לפנה"צ + pm: אחה"צ hr: # Croatian weekdays: mon: Ponedjeljak @@ -5040,24 +4531,25 @@ variables: states: "on": Uključeno "off": Isključeno - heat: Toplina - please_confirm: Molim potvrdite + heat: Grijanje + please_confirm: Molimo potvrdite unavailable: Nedostupno + unknown: Nepoznato no_name: Bez imena alarm: - home: home - away: away - night: night - vacation: vacation - bypass: bypass - disarm: disarm + home: Kod kuće + away: Odsutan + night: Noć + vacation: Odmor + bypass: Zaobići + disarm: Razoružati settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: Ponovno pokretanje + sleep: Spavanje + brightness: Svjetlina + bright: Svijetlo + dimming: Zatamnjenje + dim: Tamno meridiem: am: AM pm: PM @@ -5071,37 +4563,37 @@ variables: sat: Szombat sun: Vasárnap weekdays_short: - mon: Mon - tue: Tue - wed: Wed - thu: Thu - fri: Fri - sat: Sat - sun: Sun + mon: H + tue: K + wed: Sze + thu: Cs + fri: P + sat: Szo + sun: V months: - jan: January - feb: February - mar: March - apr: April - may: May - jun: June - jul: July - aug: August - sep: September - oct: October + jan: Január + feb: Február + mar: Március + apr: Április + may: Május + jun: Június + jul: Július + aug: Augusztus + sep: Szeptember + oct: Október nov: November dec: December months_short: jan: Jan feb: Feb - mar: Mar - apr: Apr - may: May - jun: Jun - jul: Jul + mar: Márc + apr: Ápr + may: Máj + jun: Jún + jul: Júl aug: Aug - sep: Sep - oct: Oct + sep: Szep + oct: Okt nov: Nov dec: Dec relative_day: @@ -5112,29 +4604,30 @@ variables: in_4_days: 4 nap múlva climate: states: - "on": a oldalon - "off": "off" - heat: hő + "on": Bekapcsolva + "off": Kikapcsolva + heat: Fűtés please_confirm: Kérjük, erősítse meg - unavailable: Unavailable - no_name: No name + unavailable: Nem elérhető + unknown: Ismeretlen + no_name: Névtelen alarm: - home: home - away: away - night: night - vacation: vacation - bypass: bypass - disarm: disarm + home: Otthon + away: Távol + night: Éjszaka + vacation: Szabadság + bypass: Kerülő + disarm: Hatástalanítás settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: Újraindítás + sleep: Alvás + brightness: Fényerő + bright: Világos + dimming: Sötétítés + dim: Sötét meridiem: - am: AM - pm: PM + am: DE + pm: DU id: # Indonesian weekdays: mon: Senin @@ -5145,67 +4638,68 @@ variables: sat: Sabtu sun: Minggu weekdays_short: - mon: Mon - tue: Tue - wed: Wed - thu: Thu - fri: Fri - sat: Sat - sun: Sun + mon: Sen + tue: Sel + wed: Rab + thu: Kam + fri: Jum + sat: Sab + sun: Min months: - jan: January - feb: February - mar: March + jan: Januari + feb: Februari + mar: Maret apr: April - may: May - jun: June - jul: July - aug: August + may: Mei + jun: Juni + jul: Juli + aug: Agustus sep: September - oct: October + oct: Oktober nov: November - dec: December + dec: Desember months_short: jan: Jan feb: Feb mar: Mar apr: Apr - may: May + may: Mei jun: Jun jul: Jul - aug: Aug + aug: Agu sep: Sep - oct: Oct + oct: Okt nov: Nov - dec: Dec + dec: Des relative_day: today: Hari ini tomorrow: Besok - in_2_days: dalam 2 Hari - in_3_days: dalam 3 Hari - in_4_days: dalam 4 Hari + in_2_days: Dalam 2 hari + in_3_days: Dalam 3 hari + in_4_days: Dalam 4 hari climate: states: - "on": "on" - "off": "off" - heat: panas + "on": Menyala + "off": Mati + heat: Pemanas please_confirm: Mohon konfirmasi - unavailable: Unavailable - no_name: No name + unavailable: Tidak tersedia + unknown: Tidak diketahui + no_name: Tanpa nama alarm: - home: home - away: away - night: night - vacation: vacation - bypass: bypass - disarm: disarm + home: Di rumah + away: Jauh + night: Malam + vacation: Liburan + bypass: Bypass + disarm: Menonaktifkan settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: Mulai ulang + sleep: Tidur + brightness: Kecerahan + bright: Terang + dimming: Redup + dim: Redup meridiem: am: AM pm: PM @@ -5260,15 +4754,16 @@ variables: in_4_days: In 4 giorni climate: states: - "on": "on" - "off": "off" + "on": Acceso + "off": Spento heat: Riscaldamento please_confirm: Confermare - unavailable: Unavailable - no_name: No name + unavailable: Non disponibile + unknown: Sconosciuto + no_name: Senza nome alarm: home: Casa - away: Fuori di Casa + away: Fuori casa night: Notte vacation: Vacanza bypass: Bypass @@ -5277,9 +4772,9 @@ variables: reboot: Riavvio sleep: Modalità ECO brightness: Luminosità - bright: Modalità Luminosa - dimming: Regolazione - dim: Reg. + bright: Luminoso + dimming: Diminuzione + dim: Diminuito meridiem: am: AM pm: PM @@ -5330,33 +4825,34 @@ variables: today: 今日 tomorrow: 明日 in_2_days: 明後日 - in_3_days: 3日間 - in_4_days: 4日間 + in_3_days: 3日後 + in_4_days: 4日後 climate: states: - "on": 入 - "off": 切 - heat: 温水器 - please_confirm: ご確認下さい - unavailable: 無効 - no_name: 名称未設定 + "on": オン + "off": オフ + heat: 暖房 + please_confirm: 確認してください + unavailable: 利用不可 + unknown: 不明 + no_name: 名前なし alarm: - home: Home - away: Away - night: Night - vacation: Holiday - bypass: Custom bypass - disarm: Disarm + home: 自宅 + away: 外出 + night: 夜間 + vacation: 休暇 + bypass: バイパス + disarm: 解除 settings: - reboot: Reboot - sleep: Sleep mode - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: 再起動 + sleep: スリープモード + brightness: 明るさ + bright: 明るい + dimming: 調光 + dim: 低輝度 meridiem: - am: AM - pm: PM + am: 午前 + pm: 午後 ko: # Korean weekdays: mon: 월요일 @@ -5403,34 +4899,35 @@ variables: relative_day: today: 오늘 tomorrow: 내일 - in_2_days: 2일 - in_3_days: 3일 - in_4_days: 4일 + in_2_days: 이틀 후 + in_3_days: 사흘 후 + in_4_days: 나흘 후 climate: states: - "on": "on" - "off": "off" - heat: 온도 - please_confirm: 확인 - unavailable: 불가능 - no_name: 공백 + "on": 켜짐 + "off": 꺼짐 + heat: 난방 + please_confirm: 확인해 주세요 + unavailable: 사용 불가 + unknown: 알 수 없음 + no_name: 이름 없음 alarm: - home: 재가 + home: 집 away: 외출 - night: 야간 + night: 밤 vacation: 휴가 - bypass: 커스텀 + bypass: 우회 disarm: 해제 settings: reboot: 재부팅 - sleep: 절전 + sleep: 슬립 모드 brightness: 밝기 - bright: 밝게 - dimming: 조절 - dim: 어둡게 + bright: 밝은 + dimming: 조광 + dim: 어두운 meridiem: - am: AM - pm: PM + am: 오전 + pm: 오후 lt: # Lithuanian weekdays: mon: Pirmadienis @@ -5441,67 +4938,68 @@ variables: sat: Šeštadienis sun: Sekmadienis weekdays_short: - mon: Mon - tue: Tue - wed: Wed - thu: Thu - fri: Fri - sat: Sat - sun: Sun + mon: Pir + tue: Ant + wed: Tre + thu: Ket + fri: Pen + sat: Šeš + sun: Sek months: - jan: January - feb: February - mar: March - apr: April - may: May - jun: June - jul: July - aug: August - sep: September - oct: October - nov: November - dec: December + jan: Sausis + feb: Vasaris + mar: Kovas + apr: Balandis + may: Gegužė + jun: Birželis + jul: Liepa + aug: Rugpjūtis + sep: Rugsėjis + oct: Spalis + nov: Lapkritis + dec: Gruodis months_short: - jan: Jan - feb: Feb - mar: Mar - apr: Apr - may: May - jun: Jun - jul: Jul - aug: Aug - sep: Sep - oct: Oct - nov: Nov - dec: Dec + jan: Sau + feb: Vas + mar: Kov + apr: Bal + may: Geg + jun: Bir + jul: Lie + aug: Rgp + sep: Rgs + oct: Spa + nov: Lap + dec: Gru relative_day: today: Šiandien tomorrow: Rytoj - in_2_days: per 2 dienas - in_3_days: per 3 dienas - in_4_days: per 4 dienas + in_2_days: Po 2 dienų + in_3_days: Po 3 dienų + in_4_days: Po 4 dienų climate: states: - "on": svetainėje - "off": išjungta - heat: šiluma + "on": Įjungta + "off": Išjungta + heat: Šildymas please_confirm: Prašome patvirtinti - unavailable: Unavailable - no_name: No name + unavailable: Nepasiekiamas + unknown: Nežinomas + no_name: Be pavadinimo alarm: - home: home - away: away - night: night - vacation: vacation - bypass: bypass - disarm: disarm + home: Namuose + away: Išvykęs + night: Naktis + vacation: Atostogos + bypass: Apeiti + disarm: Išjungti settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: Perkrauti + sleep: Miego režimas + brightness: Ryškumas + bright: Ryškus + dimming: Tamsinimas + dim: Tamsus meridiem: am: AM pm: PM @@ -5515,71 +5013,72 @@ variables: sat: Sestdiena sun: Svētdiena weekdays_short: - mon: Mon - tue: Tue - wed: Wed - thu: Thu - fri: Fri - sat: Sat - sun: Sun + mon: Pir + tue: Otr + wed: Tre + thu: Cet + fri: Pie + sat: Ses + sun: Sve months: - jan: January - feb: February - mar: March - apr: April - may: May - jun: June - jul: July - aug: August - sep: September - oct: October - nov: November - dec: December + jan: Janvāris + feb: Februāris + mar: Marts + apr: Aprīlis + may: Maijs + jun: Jūnijs + jul: Jūlijs + aug: Augusts + sep: Septembris + oct: Oktobris + nov: Novembris + dec: Decembris months_short: jan: Jan feb: Feb mar: Mar apr: Apr - may: May - jun: Jun - jul: Jul + may: Mai + jun: Jūn + jul: Jūl aug: Aug sep: Sep - oct: Oct + oct: Okt nov: Nov dec: Dec relative_day: today: Šodien tomorrow: Rīt - in_2_days: pēc 2 dienām - in_3_days: pēc 3 dienām - in_4_days: pēc 4 dienām + in_2_days: Pēc 2 dienām + in_3_days: Pēc 3 dienām + in_4_days: Pēc 4 dienām climate: states: - "on": vietnē - "off": izslēgts - heat: siltums + "on": Ieslēgts + "off": Izslēgts + heat: Apkure please_confirm: Lūdzu, apstipriniet - unavailable: Unavailable - no_name: No name + unavailable: Nav pieejams + unknown: Nezināms + no_name: Bez nosaukuma alarm: - home: home - away: away - night: night - vacation: vacation - bypass: bypass - disarm: disarm + home: Mājās + away: Projām + night: Nakts + vacation: Atvaļinājums + bypass: Aplūkošana + disarm: Atbruņošana settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: Restartēt + sleep: Miega režīms + brightness: Spilgtums + bright: Spilgts + dimming: Tumšošana + dim: Tumšs meridiem: am: AM pm: PM - nb: # Norwegian + nb: # Norwegian Bokmål weekdays: mon: Mandag tue: Tirsdag @@ -5625,31 +5124,32 @@ variables: relative_day: today: I dag tomorrow: I morgen - in_2_days: om 2 dager - in_3_days: om 3 dager - in_4_days: om 4 dager + in_2_days: Om 2 dager + in_3_days: Om 3 dager + in_4_days: Om 4 dager climate: states: - "on": på - "off": av - heat: varme + "on": På + "off": Av + heat: Varme please_confirm: Vennligst bekreft - unavailable: Unavailable - no_name: No name + unavailable: Utilgjengelig + unknown: Ukjent + no_name: Ingen navn alarm: - home: home - away: away - night: night - vacation: vacation - bypass: bypass - disarm: disarm + home: Hjemme + away: Borte + night: Natt + vacation: Ferie + bypass: Omkjøring + disarm: Avvæpne settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: Start på nytt + sleep: Søvnmodus + brightness: Lysstyrke + bright: Lys + dimming: Demping + dim: Dimmet meridiem: am: AM pm: PM @@ -5686,7 +5186,7 @@ variables: months_short: jan: Jan feb: Feb - mar: Mar + mar: Mrt apr: Apr may: Mei jun: Jun @@ -5704,22 +5204,23 @@ variables: in_4_days: Over 4 dagen climate: states: - "on": aan - "off": uit - heat: verwarm - please_confirm: Bevestig + "on": Aan + "off": Uit + heat: Verwarming + please_confirm: Bevestig alstublieft unavailable: Niet beschikbaar + unknown: Onbekend no_name: Geen naam alarm: home: Thuis away: Weg night: Nacht vacation: Vakantie - bypass: Omzeil - disarm: Ontgrendel + bypass: Omzeilen + disarm: Ontwapenen settings: reboot: Herstarten - sleep: Slaap mode + sleep: Slaapstand brightness: Helderheid bright: Helder dimming: Dimmen @@ -5737,63 +5238,64 @@ variables: sat: Sobota sun: Niedziela weekdays_short: - mon: pon. # (alternatively pn. ) - tue: wt. - wed: śr. - thu: czw. - fri: pt. # (alternatively piąt. ) - sat: sob. - sun: niedz. + mon: Pon + tue: Wt + wed: Śr + thu: Czw + fri: Pt + sat: Sob + sun: Ndz months: - jan: styczeń - feb: luty - mar: marzec - apr: kwiecień - may: maj - jun: czerwiec - jul: lipiec - aug: sierpień - sep: wrzesień - oct: październik - nov: listopad - dec: grudzień + jan: Styczeń + feb: Luty + mar: Marzec + apr: Kwiecień + may: Maj + jun: Czerwiec + jul: Lipiec + aug: Sierpień + sep: Wrzesień + oct: Październik + nov: Listopad + dec: Grudzień months_short: - jan: sty. - feb: lut. - mar: mar. - apr: kwi. - may: maj - jun: cze. - jul: lip. - aug: sie. - sep: wrz. - oct: paź. - nov: lis. - dec: gru. + jan: Sty + feb: Lut + mar: Mar + apr: Kwi + may: Maj + jun: Cze + jul: Lip + aug: Sie + sep: Wrz + oct: Paź + nov: Lis + dec: Gru relative_day: today: Dzisiaj tomorrow: Jutro - in_2_days: za 2 dni - in_3_days: za 3 dni - in_4_days: za 4 dni + in_2_days: Za 2 dni + in_3_days: Za 3 dni + in_4_days: Za 4 dni climate: states: - "on": wł - "off": wył - heat: ciepło - please_confirm: Proszę o potwierdzenie + "on": Włączony + "off": Wyłączony + heat: Ogrzewanie + please_confirm: Proszę potwierdzić unavailable: Niedostępny + unknown: Nieznany no_name: Bez nazwy alarm: - home: Dom + home: W domu away: Poza domem night: Noc vacation: Wakacje - bypass: Bypass - disarm: Rozbojenie + bypass: Obejście + disarm: Rozbroić settings: - reboot: Restartuj - sleep: Usypianie + reboot: Restart + sleep: Tryb uśpienia brightness: Jasność bright: Jasny dimming: Ściemnianie @@ -5855,22 +5357,23 @@ variables: "on": Ligado "off": Desligado heat: Aquecimento - please_confirm: Confirme, por favor + please_confirm: Por favor, confirme unavailable: Indisponível + unknown: Desconhecido no_name: Sem nome alarm: home: Em casa away: Ausente night: Noturno vacation: Férias - bypass: Personalizado + bypass: Desvio disarm: Desarmar settings: reboot: Reiniciar sleep: Dormir brightness: Brilho bright: Claro - dimming: Escurecer + dimming: Escurecimento dim: Escuro meridiem: am: AM @@ -5885,34 +5388,34 @@ variables: sat: Sâmbătă sun: Duminică weekdays_short: - mon: Mon - tue: Tue - wed: Wed - thu: Thu - fri: Fri - sat: Sat - sun: Sun + mon: Lun + tue: Mar + wed: Mie + thu: Joi + fri: Vin + sat: Sâm + sun: Dum months: - jan: January - feb: February - mar: March - apr: April - may: May - jun: June - jul: July + jan: Ianuarie + feb: Februarie + mar: Martie + apr: Aprilie + may: Mai + jun: Iunie + jul: Iulie aug: August - sep: September - oct: October - nov: November - dec: December + sep: Septembrie + oct: Octombrie + nov: Noiembrie + dec: Decembrie months_short: - jan: Jan + jan: Ian feb: Feb mar: Mar apr: Apr - may: May - jun: Jun - jul: Jul + may: Mai + jun: Iun + jul: Iul aug: Aug sep: Sep oct: Oct @@ -5921,31 +5424,32 @@ variables: relative_day: today: Astăzi tomorrow: Mâine - in_2_days: în 2 zile - in_3_days: în 3 zile - in_4_days: în 4 zile + in_2_days: În 2 zile + in_3_days: În 3 zile + in_4_days: În 4 zile climate: states: - "on": pe - "off": "off" - heat: căldură + "on": Pornit + "off": Oprit + heat: Încălzire please_confirm: Vă rugăm să confirmați - unavailable: Unavailable - no_name: No name + unavailable: Indisponibil + unknown: Necunoscut + no_name: Fără nume alarm: - home: home - away: away - night: night - vacation: vacation - bypass: bypass - disarm: disarm + home: Acasă + away: Plecat + night: Noapte + vacation: Vacanță + bypass: Ocolire + disarm: Dezarmare settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: Repornire + sleep: Somn + brightness: Luminozitate + bright: Luminos + dimming: Diminuare + dim: Întunecat meridiem: am: AM pm: PM @@ -5957,72 +5461,73 @@ variables: thu: Четверг fri: Пятница sat: Суббота - sun: Воскресение + sun: Воскресенье weekdays_short: - mon: Mon - tue: Tue - wed: Wed - thu: Thu - fri: Fri - sat: Sat - sun: Sun + mon: Пн + tue: Вт + wed: Ср + thu: Чт + fri: Пт + sat: Сб + sun: Вс months: - jan: January - feb: February - mar: March - apr: April - may: May - jun: June - jul: July - aug: August - sep: September - oct: October - nov: November - dec: December + jan: Январь + feb: Февраль + mar: Март + apr: Апрель + may: Май + jun: Июнь + jul: Июль + aug: Август + sep: Сентябрь + oct: Октябрь + nov: Ноябрь + dec: Декабрь months_short: - jan: Jan - feb: Feb - mar: Mar - apr: Apr - may: May - jun: Jun - jul: Jul - aug: Aug - sep: Sep - oct: Oct - nov: Nov - dec: Dec + jan: Янв + feb: Фев + mar: Мар + apr: Апр + may: Май + jun: Июн + jul: Июл + aug: Авг + sep: Сен + oct: Окт + nov: Ноя + dec: Дек relative_day: today: Сегодня tomorrow: Завтра - in_2_days: на 2 дня - in_3_days: на 3 дня - in_4_days: на 4 дня + in_2_days: Через 2 дня + in_3_days: Через 3 дня + in_4_days: Через 4 дня climate: states: - "on": включено - "off": выключено - heat: нагрев + "on": Включено + "off": Выключено + heat: Отопление please_confirm: Пожалуйста, подтвердите - unavailable: Unavailable - no_name: No name + unavailable: Недоступно + unknown: Неизвестно + no_name: Без названия alarm: - home: home - away: away - night: night - vacation: vacation - bypass: bypass - disarm: disarm + home: Дома + away: Вне дома + night: Ночь + vacation: Отпуск + bypass: Обход + disarm: Разоружение settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: Перезагрузка + sleep: Сон + brightness: Яркость + bright: Яркий + dimming: Затемнение + dim: Тусклый meridiem: - am: AM - pm: PM + am: ДП + pm: ПП sk: # Slovak weekdays: mon: Pondelok @@ -6063,7 +5568,7 @@ variables: jul: Júl aug: Aug sep: Sep - oct: Oct + oct: Okt nov: Nov dec: Dec relative_day: @@ -6074,26 +5579,27 @@ variables: in_4_days: O 4 dni climate: states: - "on": Zap. - "off": Vyp. + "on": Zapnuté + "off": Vypnuté heat: Kúrenie please_confirm: Potvrďte, prosím unavailable: Nedostupné - no_name: Bez názvu + unknown: Neznámy + no_name: Bez mena alarm: home: Doma away: Preč night: Noc vacation: Dovolenka - bypass: Bypass - disarm: Nechránené + bypass: Obísť + disarm: Zneškodniť settings: reboot: Reštartovať sleep: Spánok brightness: Jas - bright: Zosvetlenie - dimming: Stmavenie - dim: Stmavenie + bright: Svetlý + dimming: Stmavovanie + dim: Tmavý meridiem: am: AM pm: PM @@ -6143,34 +5649,35 @@ variables: relative_day: today: Danes tomorrow: Jutri - in_2_days: v 2 dneh - in_3_days: v 3 dneh - in_4_days: v 4 dneh + in_2_days: Čez 2 dni + in_3_days: Čez 3 dni + in_4_days: Čez 4 dni climate: states: - "on": na - "off": izklop - heat: toplota + "on": Vklopljeno + "off": Izklopljeno + heat: Ogrevanje please_confirm: Prosimo, potrdite - unavailable: Unavailable - no_name: No name + unavailable: Nedosegljivo + unknown: Neznano + no_name: Brez imena alarm: home: Doma away: Odsoten night: Noč vacation: Dopust - bypass: Območje izlopljeno - disarm: Izklop + bypass: Obvoz + disarm: Razorožitev settings: reboot: Ponovni zagon sleep: Spanje - brightness: Osvetlitev + brightness: Svetlost bright: Svetlo dimming: Zatemnitev dim: Temno meridiem: - am: AM - pm: PM + am: dop. + pm: pop. sv: # Swedish weekdays: mon: Måndag @@ -6224,9 +5731,10 @@ variables: states: "on": På "off": Av - heat: värme + heat: Värme please_confirm: Vänligen bekräfta unavailable: Otillgänglig + unknown: Okänd no_name: Inget namn alarm: home: Hemma @@ -6243,8 +5751,8 @@ variables: dimming: Dimmning dim: Dimma meridiem: - am: AM - pm: PM + am: FM + pm: EM tr: # Turkish weekdays: mon: Pazartesi @@ -6255,145 +5763,147 @@ variables: sat: Cumartesi sun: Pazar weekdays_short: - mon: Mon - tue: Tue - wed: Wed - thu: Thu - fri: Fri - sat: Sat - sun: Sun + mon: Pzt + tue: Sal + wed: Çar + thu: Per + fri: Cum + sat: Cmt + sun: Paz months: - jan: January - feb: February - mar: March - apr: April - may: May - jun: June - jul: July - aug: August - sep: September - oct: October - nov: November - dec: December + jan: Ocak + feb: Şubat + mar: Mart + apr: Nisan + may: Mayıs + jun: Haziran + jul: Temmuz + aug: Ağustos + sep: Eylül + oct: Ekim + nov: Kasım + dec: Aralık months_short: - jan: Jan - feb: Feb + jan: Oca + feb: Şub mar: Mar - apr: Apr + apr: Nis may: May - jun: Jun - jul: Jul - aug: Aug - sep: Sep - oct: Oct - nov: Nov - dec: Dec + jun: Haz + jul: Tem + aug: Ağu + sep: Eyl + oct: Eki + nov: Kas + dec: Ara relative_day: today: Bugün tomorrow: Yarın - in_2_days: 2 Gün İçinde - in_3_days: 3 Gün İçinde - in_4_days: 4 Gün İçinde + in_2_days: 2 gün içinde + in_3_days: 3 gün içinde + in_4_days: 4 gün içinde climate: states: - "on": üzerinde - "off": kapalı - heat: ısı + "on": Açık + "off": Kapalı + heat: Isıtma please_confirm: Lütfen onaylayın - unavailable: Unavailable - no_name: No name + unavailable: Kullanılamaz + unknown: Bilinmeyen + no_name: İsimsiz alarm: - home: home - away: away - night: night - vacation: vacation - bypass: bypass - disarm: disarm + home: Evde + away: Dışarıda + night: Gece + vacation: Tatil + bypass: Bypass + disarm: Devre dışı bırak settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: Yeniden başlat + sleep: Uyku modu + brightness: Parlaklık + bright: Parlak + dimming: Karartma + dim: Karanlık meridiem: - am: AM - pm: PM + am: ÖÖ + pm: ÖS uk: # Ukrainian weekdays: mon: Понеділок tue: Вівторок - wed: середа - thu: четвер - fri: п ятниця + wed: Середа + thu: Четвер + fri: П'ятниця sat: Субота sun: Неділя weekdays_short: - mon: Mon - tue: Tue - wed: Wed - thu: Thu - fri: Fri - sat: Sat - sun: Sun + mon: Пн + tue: Вт + wed: Ср + thu: Чт + fri: Пт + sat: Сб + sun: Нд months: - jan: January - feb: February - mar: March - apr: April - may: May - jun: June - jul: July - aug: August - sep: September - oct: October - nov: November - dec: December + jan: Січень + feb: Лютий + mar: Березень + apr: Квітень + may: Травень + jun: Червень + jul: Липень + aug: Серпень + sep: Вересень + oct: Жовтень + nov: Листопад + dec: Грудень months_short: - jan: Jan - feb: Feb - mar: Mar - apr: Apr - may: May - jun: Jun - jul: Jul - aug: Aug - sep: Sep - oct: Oct - nov: Nov - dec: Dec + jan: Січ + feb: Лют + mar: Бер + apr: Кві + may: Тра + jun: Чер + jul: Лип + aug: Сер + sep: Вер + oct: Жов + nov: Лис + dec: Гру relative_day: today: Сьогодні tomorrow: Завтра - in_2_days: через 2 дні - in_3_days: через 3 дні - in_4_days: через 2 дні + in_2_days: Через 2 дні + in_3_days: Через 3 дні + in_4_days: Через 4 дні climate: states: - "on": увімк - "off": вимк - heat: нагрів + "on": Увімкнено + "off": Вимкнено + heat: Опалення please_confirm: Будь ласка, підтвердіть - unavailable: Unavailable - no_name: No name + unavailable: Недоступно + unknown: Невідомо + no_name: Без імені alarm: - home: home - away: away - night: night - vacation: vacation - bypass: bypass - disarm: disarm + home: Вдома + away: Відсутній + night: Ніч + vacation: Відпустка + bypass: Обхід + disarm: Роззброєння settings: - reboot: Reboot - sleep: Sleep - brightness: Brightness - bright: Bright - dimming: Dimming - dim: Dim + reboot: Перезавантаження + sleep: Сон + brightness: Яскравість + bright: Яскравий + dimming: Затемнення + dim: Темний meridiem: - am: AM - pm: PM - zh-tw: # T.Chinese + am: ДП + pm: ПП + zh-tw: # Traditional Chinese weekdays: mon: 星期一 tue: 星期二 @@ -6449,6 +5959,7 @@ variables: heat: 暖氣 please_confirm: 請確認 unavailable: 無法使用 + unknown: 未知 no_name: 未命名 alarm: home: 在家 @@ -6554,8 +6065,14 @@ variables: FAN_ONLY: 64 states: "on": ["on", "open", "opening", "true", "True", true, True, "playing", "heat", "cold", "dry", "armed_home", "armed_away", "armed_vacation", "armed_custom_bypass", "triggered", "pending", "arming", 1] - "off": ["off", "closed", "closing", "false", "False", false, False, "standby", "paused", "idle", "disarmed", "disarming", 0] + "off": ["off", "closed", "closing", "false", "False", false, False, "standby", "paused", "idle", "disarmed", "disarming"] unknown: ["unknown", "unavailable", None, none, ""] + climate: + "on": ["heat_cool", "heat", "heating", "cold", "cooling", "dry", "drying", "fan", "fan_only", "auto"] + "off": ["off", "idle"] + alarm_control_panel: + "on": ["armed_home", "armed_away", "armed_vacation", "armed_custom_bypass", "triggered", "pending", "arming"] + "off": ["disarmed", "disarming"] # yamllint enable rule:truthy rule:line-length rule:comments-indentation ############################################################# @@ -6580,15 +6097,21 @@ trigger: ##### Reboot - Trigger 'nspanel_boot_init' ##### - platform: template - value_template: '{{ is_state(nextion_inited, "on") | default(false) if nextion_inited is string else false }}' + value_template: '{{ is_state(nextion_inited, "on") | default(false) }}' for: seconds: 1 id: nspanel_boot_init - platform: template - value_template: '{{ is_state(currentpage, "boot") | default(false) if currentpage is string else false }}' + value_template: '{{ states(blueprint_entity) | int(-1) == 0 }}' for: seconds: 1 id: nspanel_boot_init + - platform: template + value_template: '{{ is_state(currentpage, "boot") | default(false) }}' + for: + seconds: 1 + id: nspanel_boot_init + ##### Automation reload or HA started - platform: event event_type: automation_reloaded @@ -6597,6 +6120,12 @@ trigger: event: start id: ha_started + ##### Wake-up sensor + - platform: state + entity_id: !input wake_up_sensors + to: "on" + id: wake_up_sensors + ##### Trigger - Buttons - State change ################################################################################################################# ##### Button01 Sync - Trigger 'current_state_entity01' ##### - platform: state @@ -7091,14 +6620,14 @@ trigger: id: climate_value04_state ##### Trigger - Climate - Custom buttons - State change ################################################################################################################# - ##### Climate Button 08 ##### + ##### Climate Button page 1, Button 8 ##### - platform: state entity_id: !input climate_button08 not_to: - unknown - unavailable id: climate_button08_state - ##### Climate Button 09 ##### + ##### Climate Button page 2, Button 1 ##### - platform: state entity_id: !input climate_button09 not_to: @@ -7199,7 +6728,7 @@ condition: - '{{ trigger.event is defined and trigger.event.data is defined }}' - '{{ trigger.event.data.new_state is defined and trigger.event.data.new_state.state is defined }}' - '{{ trigger.event.data.old_state is defined and trigger.event.data.old_state.state is defined }}' - - '{{ trigger.event.data.new_state.state != trigger.event.data.new_state.state}}' + - '{{ trigger.event.data.new_state.state != trigger.event.data.old_state.state }}' - condition: or # Do not update values when page entities is not visible conditions: - condition: not @@ -7286,14 +6815,18 @@ action: name: '{{ None }}' - &variable_entity variables: - entity_id_is_valid: '{{ entity_id is defined and entity_id is string and entity_id.split(".") | count == 2 }}' - entity_state: '{{ states(entity_id) | default("unknown") if entity_id_is_valid else "unknown" }}' - entity_state_is: - "on": '{{ entity_state in enum.states.on if entity_id_is_valid else false }}' - "off": '{{ entity_state in enum.states.off if entity_id_is_valid else false }}' - unknown: '{{ entity_state in enum.states.unknown if entity_id_is_valid and entity_state else true }}' - entity_domain: '{{ entity_id.split(".")[0] if entity_id_is_valid else "unknown" }}' - entity_icon: '{{ state_attr(entity_id, "icon") | default("") if entity_id_is_valid else "" }}' + entity_state: '{{ states(entity_id) | default("unknown") }}' + entity_has_value: '{{ has_value(entity_id) }}' + entity_domain: '{{ entity_id.split(".")[0] }}' + entity_icon: '{{ state_attr(entity_id, "icon") | default("") }}' + entity_state_is_on: > + {{ + entity_state in enum.states.on or + (entity_domain == "sensor" and entity_has_value) or + (entity_domain in enum.states and entity_state in enum.states[entity_domain].on) + }} + entity_state_is_off: '{{ entity_state in enum.states.off or (entity_domain in enum.states and entity_state in enum.states[entity_domain].off) }}' + entity_state_is_unknown: '{{ (not entity_state_is_on) and (not entity_state_is_off) }}' entity_icon_color: > {{ ( @@ -7301,43 +6834,26 @@ action: if overlap is defined and overlap.icon_color is defined and overlap.icon_color is sequence and overlap.icon_color | count == 3 else nextion.color.on ) - if ((not entity_state_is.off) and (not entity_state_is.unknown)) + if ((not entity_state_is_off) and (not entity_state_is_unknown)) else nextion.color.off }} - entity_friendly_name: '{{ state_attr(entity_id, "friendly_name") | default("") if entity_id_is_valid else "" }}' - entity_state_is_number: '{{ is_number(entity_state) if entity_id_is_valid else false }}' - entity_unit_of_measurement: '{{ state_attr(entity_id, "unit_of_measurement") | default("") if entity_id_is_valid and entity_state_is_number else "" }}' - entity_device_class: '{{ state_attr(entity_id, "device_class") | default("") if entity_id_is_valid else "" }}' - entity_state_mui: > # Needs translation string for "unknown" - {{ - ( + entity_friendly_name: '{{ state_attr(entity_id, "friendly_name") | default("") }}' + entity_device_class: '{{ state_attr(entity_id, "device_class") | default("") }}' + entity: + state_mui: > + {{ entity_state if entity_domain != "alarm_control_panel" else ( mui[language].alarm[entity_state | replace("armed_", "") | replace("disarmed", "disarm")] | default(entity_state) if entity_state else "unknown" ) - ) if entity_id_is_valid else "unknown" - }} - entity: - id: '{{ entity_id }}' - valid: '{{ entity_id_is_valid }}' - has_value: '{{ has_value(entity_id) if entity_id_is_valid else false }}' - state: '{{ entity_state if entity_id_is_valid else "unknown" }}' - state_rounded: '{{ states(entity_id, rounded=true) if entity_state_is_number else entity_state }}' - state_is: '{{ entity_state_is }}' - state_mui: '{{ entity_state_mui }}' - state_is_number: '{{ entity_state_is_number }}' - domain: '{{ entity_domain }}' - unit_of_measurement: '{{ entity_unit_of_measurement if entity_unit_of_measurement else "" }}' - friendly_name: '{{ entity_friendly_name }}' + }} name: > {{ ( overlap.name if overlap is defined and overlap.name is defined and overlap.name is string and overlap.name | length > 0 else (entity_friendly_name if entity_friendly_name is string and entity_friendly_name | length > 0 else entity_id) - ) if entity_id_is_valid else "" + ) }} - supported_features: '{{ state_attr(entity_id, "supported_features") | default(0) if entity_id_is_valid else 0 }}' - device_class: '{{ entity_device_class }}' icon: > {% set icon_domain = nextion.icon.domain[entity_domain] | default(all_icons.unknown) if entity_domain else all_icons.unknown %} {% if overlap is defined and overlap.icon is defined and overlap.icon is string and overlap.icon | length > 0 %} @@ -7377,8 +6893,7 @@ action: {{ icon_domain }} {% endif %} icon_color: > - {% if not entity_id_is_valid %}{{ nextion.color.off }} - {% elif entity_domain == "alarm_control_panel" %} + {% if entity_domain == "alarm_control_panel" %} {% if entity_state == "disarmed" %}{{ nextion.color.off }} {% elif entity_state in ["armed_home", "armed_away", "armed_night", "armed_vacation", "armed_bypass"] %}{{ nextion.color.green }} {% elif entity_state in ["pending", "arming", "disarming"] %}{{ nextion.color.amber }} @@ -7399,7 +6914,7 @@ action: {% else %}{{ entity_icon_color }} {% endif %} {% elif entity_domain == "light" %} - {% if not entity_state_is.on %}{{ nextion.color.off }} + {% if entity_state != "on" %}{{ nextion.color.off }} {% else %} {% set entity_rgb_color_attr = state_attr(entity_id, "rgb_color") | default("") %} {% set entity_rgb_color = entity_rgb_color_attr if entity_rgb_color_attr is sequence and entity_rgb_color_attr | count == 3 else entity_icon_color %} @@ -7677,7 +7192,12 @@ action: embedded_climate: '{{ climate == thermostat_embedded }}' embedded_climate_friendly_name: '{{ climate_friendly_name if climate_friendly_name else "" }}' embedded_indoor_temperature: '{{ embedded_indoor_temperature }}' - temperature_unit_is_fahrenheit: '{{ state_attr((nspaneltemp if embedded_indoor_temperature else indoor_temperature_sensor), "unit_of_measurement") | default("") in ["°F", "F"]}}' + temperature_unit_is_fahrenheit: > # Deprecated + {{ + state_attr((nspaneltemp if embedded_indoor_temperature else indoor_temperature_sensor), "unit_of_measurement") + | default("") + | upper in ["°F", "F"] + }} mui_please_confirm: '{{ mui[language].please_confirm }}' mui_unavailable: '{{ mui[language].unavailable }}' screensaver_time: '{{ screensaver_display_time if screensaver_display_time is boolean else false }}' @@ -7720,32 +7240,54 @@ action: sequence: - if: '{{ nspanel_event.key is defined and nspanel_event.key is string and nspanel_event.key | length > 0 }}' then: - - if: '{{ nspanel_event.service == "climate.set_temperature" and nspanel_event.key in ["target_temp_high", "target_temp_low"] }}' - then: - - variables: - target_temp_low: > - {{ - nspanel_event.value - if nspanel_event.key == "target_temp_low" - else state_attr(nspanel_event.entity, "target_temp_low") | int(-999) - }} - target_temp_high: > - {{ - nspanel_event.value - if nspanel_event.key == "target_temp_high" - else state_attr(nspanel_event.entity, "target_temp_high") | int(-999) - }} - - condition: - - '{{ is_number(target_temp_low) and target_temp_low > -999 }}' - - '{{ is_number(target_temp_high) and target_temp_high > -999 }}' - - service: '{{ nspanel_event.service }}' - data: - target_temp_low: '{{ target_temp_low }}' - target_temp_high: '{{ target_temp_high }}' - target: - entity_id: '{{ nspanel_event.entity }}' - continue_on_error: true - else: + - choose: + - alias: "climate.set_temperature" + conditions: + - '{{ nspanel_event.service == "climate.set_temperature" }}' + - '{{ nspanel_event.key in ["target_temp_high", "target_temp_low"] }}' + sequence: + - variables: + target_temp_low: > + {{ + nspanel_event.value + if nspanel_event.key == "target_temp_low" + else state_attr(nspanel_event.entity, "target_temp_low") | int(-999) + }} + target_temp_high: > + {{ + nspanel_event.value + if nspanel_event.key == "target_temp_high" + else state_attr(nspanel_event.entity, "target_temp_high") | int(-999) + }} + - condition: + - '{{ is_number(target_temp_low) and target_temp_low > -999 }}' + - '{{ is_number(target_temp_high) and target_temp_high > -999 }}' + - service: '{{ nspanel_event.service }}' + data: + target_temp_low: '{{ target_temp_low }}' + target_temp_high: '{{ target_temp_high }}' + target: + entity_id: '{{ nspanel_event.entity }}' + continue_on_error: true + - alias: "fan.turn_on" + conditions: + - '{{ nspanel_event.service == "fan.turn_on" }}' + - '{{ nspanel_event.key == "percentage" }}' + sequence: + - service: fan.turn_on + data: {} + target: + entity_id: '{{ nspanel_event.entity }}' + continue_on_error: true + - delay: + milliseconds: 100 + - service: fan.set_percentage + data: + percentage: '{{ nspanel_event.value }}' + target: + entity_id: '{{ nspanel_event.entity }}' + continue_on_error: true + default: - service: '{{ nspanel_event.service }}' data: {"{{ nspanel_event.key }}":"{{ nspanel_event.value }}"} target: @@ -7964,7 +7506,6 @@ action: overlap: icon: '{{ repeat.item.icon if repeat.item.icon is defined else None }}' - *variable_entity - - condition: '{{ entity.valid }}' - if: '{{ entity.icon_color is defined }}' then: - service: '{{ nextion.command.set_component_color }}' @@ -8002,11 +7543,11 @@ action: - variables: entity_id: '{{ climate }}' - *variable_entity - - if: '{{ entity.has_value }}' + - if: '{{ has_value(entity_id) }}' then: - variables: entity_hvac_action: '{{ state_attr(entity_id, "hvac_action") }}' - entity_climate_action: '{{ (entity_hvac_action if entity_hvac_action and entity_hvac_action not in enum.states.unknown else entity.state) }}' + entity_climate_action: '{{ (entity_hvac_action if entity_hvac_action and entity_hvac_action not in enum.states.unknown else entity_state) }}' - if: > {{ entity_climate_action and @@ -8092,10 +7633,25 @@ action: overlap: icon: '{{ repeat.item.icon if repeat.item.icon is defined else None }}' icon_color: '{{ repeat.item.icon_color_rgb if repeat.item.icon_color_rgb is defined else None }}' - - *variable_entity - - condition: '{{ entity.valid }}' - - if: '{{ (entity.state_is.on and not repeat.item.inverted) or (entity.state_is.off and repeat.item.inverted) }}' + entity_domain: '{{ entity_id.split(".")[0] }}' + entity_state_tmp: '{{ states(entity_id) | default("unknown") }}' + entity_hvac_action: '{{ state_attr(entity_id, "hvac_action") | default("") if entity_domain == "climate" else "unknown" }}' + entity_state: > + {{ + (entity_hvac_action if entity_hvac_action and entity_hvac_action not in enum.states.unknown else entity_state_tmp) + if entity_domain == "climate" else entity_state_tmp + }} + - if: + - '{{ has_value(entity_id) }}' + - or: + - and: + - '{{ not repeat.item.inverted }}' + - '{{ entity_state in enum.states.on or (entity_domain in enum.states and entity_state in enum.states[entity_domain].on) }}' + - and: + - '{{ repeat.item.inverted }}' + - '{{ entity_state in enum.states.off or (entity_domain in enum.states and entity_state in enum.states[entity_domain].off) }}' then: + - *variable_entity ### ICON Font Color ### - if: '{{ entity.icon_color is defined }}' then: @@ -8168,16 +7724,15 @@ action: entity_id: '{{ repeat.item.entity }}' overlap: icon: '{{ repeat.item.icon if repeat.item.icon is defined else None }}' - icon_color: '{{ repeat.item.icon_color_rgb if repeat.item.icon_color_rgb is defined else None }}' - *variable_entity - - if: '{{ entity.has_value }}' + - if: '{{ entity_has_value }}' then: ### ICON Font Color ### - *delay-default - service: '{{ nextion.command.set_component_color }}' data: component: '{{ repeat.item.page }}.{{ repeat.item.component }}_icon' - foreground: '{{ entity.icon_color }}' + foreground: '{{ repeat.item.icon_color_rgb }}' continue_on_error: true ### ICON Font ### - *delay-default @@ -8198,7 +7753,12 @@ action: - service: '{{ nextion.command.text_printf }}' data: component: '{{ repeat.item.page }}.{{ repeat.item.component }}{{ "_state" if repeat.item.page == page.home }}' - message: '{{ (entity.state_rounded ~ entity.unit_of_measurement) if entity.has_value else mui[language].unavailable }}' + message: > + {{ + (states(entity_id, rounded=true) ~ (state_attr(entity_id, "unit_of_measurement") | default(""))) + if entity_has_value + else mui[language].unavailable + }} continue_on_error: true ## BUTTON PAGES 01 - 04 ## @@ -8462,7 +8022,7 @@ action: {{ ns.decimal_value }} - if: '{{ button_page_index >= 0 and button_page_index <= 3 }}' then: - ##### Button Page Label ##### + ##### Button page Label ##### - if: '{{ button_pages_labels[button_page_index].label | length > 0 }}' then: - service: '{{ nextion.command.text_printf }}' @@ -8478,16 +8038,6 @@ action: component: confirm val: '{{ confirm_value }}' continue_on_error: true - ###### Display page while other elements are still loading ##### - - variables: - show_while_loading: !input 'show_while_loading' - - if: '{{ show_while_loading }}' - then: - - *delay-default - - service: '{{ nextion.command.show }}' - data: - component: '255' # all components - continue_on_error: true ##### NSPanel build Button page ##### - repeat: @@ -8500,6 +8050,7 @@ action: | list }} sequence: &display_button_page_button + - condition: '{{ repeat.item.entity is defined and repeat.item.entity is string and repeat.item.entity | length > 0 }}' - variables: entity_id: '{{ repeat.item.entity }}' overlap: @@ -8507,84 +8058,60 @@ action: icon_color: '{{ repeat.item.icon_color_rgb if repeat.item.icon_color_rgb is defined else None }}' name: '{{ repeat.item.name if repeat.item.name is defined else None }}' - *variable_entity - - if: '{{ entity.valid }}' + - variables: + current_entity_state_available: '{{ entity_state not in ["unavailable"] }}' + btn_state: > # Button state (on = true or off = false) + {{ + (entity_state in enum.states.on and entity_domain not in ["automation"]) + or (entity_domain == "climate" and entity_state != "off") + or (entity_domain in ["button","input_button","scene","automation","remote"] and trigger.id is match "current_state_entity") + }} + btn_bri_txt: > # Buttons value (brightness, temperature, etc.) + {% if not has_value(entity_id) %} 0 + {% elif entity_domain == "light" and entity_state == "on" %} + {% set entity_brightness = state_attr(entity_id, "brightness") %} + {% set entity_brightness_index = entity_brightness/255 if entity_brightness and is_number(entity_brightness) else 0 %} + {{ (entity_brightness_index*100) | round(0) }}% + {% elif entity_domain == "fan" and entity_state == "on" and state_attr(entity_id, "percentage") | int(0) > 0 %} + {{ state_attr(entity_id, "percentage") | round(0, default=0) }}% + {% elif entity_domain == "cover" and entity_state in ["open", "opening", "closing"] and is_number(state_attr(entity_id, "current_position")) %} + {{ (state_attr(entity_id, "current_position") | int(100)) | round(0) }}% + {% elif entity_domain == "climate" and is_number(state_attr(entity_id, 'current_temperature')) %} + {% set current_temperature = state_attr(entity_id, 'current_temperature') | float %} + {{ current_temperature | round(0 if current_temperature >= 100 or temperature_units in ["F", "f", "°F", "°f", "K", "k"] else 1) }}{{ temperature_units}} + {% else %} 0 + {% endif %} + - *delay-default + - service: '{{ nextion.command.set_button }}' + data: + page: '{{ repeat.item.page }}' + id: '{{ repeat.item.component }}' + state: '{{ btn_state if btn_state else false }}' + icon: '{{ entity.icon }}' + icon_color: '{{ entity.icon_color }}' + icon_font: '{{ button_pages_icon_size if is_number(button_pages_icon_size) else 8 }}' + bri: '{{ btn_bri_txt if btn_bri_txt and btn_bri_txt != "0%" else "" }}' + label: '{{ entity.name }}' + continue_on_error: true + - if: > + {{ + (entity_domain in ["button", "input_button", "scene"] and trigger.id is match "current_state_entity") + or entity_domain in ["automation", "remote"] + }} then: - - variables: - current_entity_state_available: '{{ entity.state not in ["unavailable"] }}' - btn_state: > # Button state (on = true or off = false) - {{ - (entity.state in enum.states.on and entity.domain not in ["automation"]) - or (entity.domain == "climate" and entity.state != "off") - or (entity.domain in ["button","input_button","scene","automation","remote"] and trigger.id is match "current_state_entity") - }} - btn_bri_txt: > # Buttons value (brightness, temperature, etc.) - {% if not entity.has_value %} 0 - {% elif entity.domain == "light" and entity.state == "on" %} - {% set entity_brightness = state_attr(entity.id, "brightness") %} - {% set entity_brightness_index = entity_brightness/255 if entity_brightness and is_number(entity_brightness) else 0 %} - {{ (entity_brightness_index*100) | round(0) }}% - {% elif entity.domain == "fan" and entity.state == "on" and state_attr(entity.id, "percentage") | int(0) > 0 %} - {{ state_attr(entity.id, "percentage") | round(0, default=0) }}% - {% elif - entity.domain == "cover" and - entity.state in ["open", "opening", "closing"] and - is_number(state_attr(entity.id, "current_position")) %} - {{ (state_attr(entity.id, "current_position") | int(100)) | round(0) }}% - {% elif entity.domain == "climate" and is_number(state_attr(entity.id, 'current_temperature')) %} - {% set current_temperature = state_attr(entity.id, 'current_temperature') | float %} - {{ - current_temperature | round(0) - if current_temperature >= 100 or temperature_units in ["F", "f", "°F", "°f", "K", "k"] - else current_temperature | round(1) - }}{{ temperature_units}} - {% else %} 0 - {% endif %} - - *delay-default + - delay: + milliseconds: 800 - service: '{{ nextion.command.set_button }}' data: page: '{{ repeat.item.page }}' id: '{{ repeat.item.component }}' - state: '{{ btn_state if btn_state else false }}' + state: false icon: '{{ entity.icon }}' - icon_color: '{{ entity.icon_color }}' + icon_color: '{{ nextion.color.grey_light }}' icon_font: '{{ button_pages_icon_size if is_number(button_pages_icon_size) else 8 }}' - bri: '{{ btn_bri_txt if btn_bri_txt and btn_bri_txt != "0%" else "" }}' + bri: '{{ btn_bri_txt }}' label: '{{ entity.name }}' continue_on_error: true - - if: > - {{ - (entity.domain in ["button","input_button","scene"] and trigger.id is match "current_state_entity") - or entity.domain in ["automation", "remote"] - }} - then: - - delay: - milliseconds: 800 - - service: '{{ nextion.command.set_button }}' - data: - page: '{{ repeat.item.page }}' - id: '{{ repeat.item.component }}' - state: false - icon: '{{ entity.icon }}' - icon_color: '{{ nextion.color.grey_light }}' - icon_font: '{{ button_pages_icon_size if is_number(button_pages_icon_size) else 8 }}' - bri: '{{ btn_bri_txt }}' - label: '{{ entity.name }}' - continue_on_error: true - ###### SHOW All component when page loading done ##### - - if: '{{ not show_while_loading }}' - then: - - *delay-default - - service: '{{ nextion.command.show }}' - data: - component: '255' # all components - continue_on_error: true - else: - ###### Show empty page ##### - - *delay-default - - service: '{{ nextion.command.show }}' - data: - component: '255' # all components - continue_on_error: true ## PAGE LIGHT ## - alias: Light settings page @@ -8713,6 +8240,44 @@ action: if nspanel_event is defined and nspanel_event.entity is defined else (trigger.entity_id if trigger.entity_id is defined else trigger.event.data.entity_id) }} + entity_device_class: '{{ state_attr(cover_entity, "device_class") | default("") }}' + cover_icons: + open: > + {{ + all_icons[device_class_icons.cover[entity_device_class + "-open"]] + if + entity_device_class is defined and + entity_device_class is string and + entity_device_class | length > 0 and + (entity_device_class ~ "-open") in device_class_icons.cover and + device_class_icons.cover[entity_device_class ~ "-open"] in all_icons + else all_icons[device_class_icons.cover["shutter-open"]] + }} + close: > + {{ + all_icons[device_class_icons.cover[entity_device_class + "-closed"]] + if + entity_device_class is defined and + entity_device_class is string and + entity_device_class | length > 0 and + (entity_device_class ~ "-closed") in device_class_icons.cover and + device_class_icons.cover[entity_device_class ~ "-closed"] in all_icons + else all_icons[device_class_icons.cover["shutter-closed"]] + }} + ##### Cover Open/close Icons ##### + - service: '{{ nextion.command.text_printf }}' + data: + component: cover.cover_open + message: '{{ cover_icons.open }}' + continue_on_error: true + - *delay-default + - service: '{{ nextion.command.text_printf }}' + data: + component: cover.cover_close + message: '{{ cover_icons.close }}' + continue_on_error: true + - *delay-default + ##### COVER State - service: '{{ nextion.command.value }}' data: @@ -8960,20 +8525,21 @@ action: then: - variables: entity_id: '{{ alarm_entity }}' + supported_features: '{{ state_attr(entity_id, "supported_features") | default(0) }}' - *variable_entity - - condition: '{{ entity.supported_features > 0 }}' + - condition: '{{ supported_features > 0 }}' - variables: # https://github.com/home-assistant/core/blob/dev/homeassistant/components/alarm_control_panel/const.py alarm: - code_format: '{{ state_attr(entity.id, "code_format") }}' - code_arm_required: '{{ state_attr(entity.id, "code_arm_required") | default(true) }}' + code_format: '{{ state_attr(entity_id, "code_format") }}' + code_arm_required: '{{ state_attr(entity_id, "code_arm_required") | default(true) }}' - service: '{{ nextion.command.alarm_settings }}' data: page_title: '{{ entity.name }}' - state: '{{ entity.state }}' - supported_features: '{{ entity.supported_features }}' + state: '{{ entity_state }}' + supported_features: '{{ supported_features }}' code_format: '{{ alarm.code_format if alarm.code_format else "none" }}' code_arm_required: '{{ alarm.code_arm_required if alarm.code_arm_required else false }}' - entity: '{{ entity.id }}' + entity: '{{ entity_id }}' mui_alarm: '{{ dict.values(mui[language].alarm) | list }}' continue_on_error: true @@ -9167,7 +8733,6 @@ action: icon: '{{ repeat.item.icon }}' icon_color: '{{ repeat.item.icon_color_rgb }}' - *variable_entity - - condition: '{{ entity.valid }}' ### ICON Font Color ### - *delay-default - service: '{{ nextion.command.set_component_color }}' @@ -9389,23 +8954,26 @@ action: - repeat: for_each: '{{ entity_pages_entities[first_entity:last_entity] }}' sequence: &update_entity_page_entity - - if: '{{ repeat.item.entity is string and repeat.item.entity | length > 0 }}' - then: - - variables: - entity_id: '{{ repeat.item.entity }}' - overlap: - icon: '{{ repeat.item.icon if repeat.item.icon is defined else None }}' - name: '{{ repeat.item.name if repeat.item.name is defined else None }}' - - *variable_entity - - condition: '{{ entity.valid }}' - - service: '{{ nextion.command.set_entity }}' - data: - ent_id: '{{ repeat.item.page }}.{{ repeat.item.component }}' - ent_icon: '{{ entity.icon }}' - ent_label: '{{ entity.name }}' - ent_value: '{{ (entity.state_rounded ~ entity.unit_of_measurement) if entity.has_value else mui[language].unavailable }}' - ent_value_xcen: '{{ entitypages_value_alignment }}' - continue_on_error: true + - condition: '{{ repeat.item.entity is string and repeat.item.entity | length > 0 }}' + - variables: + entity_id: '{{ repeat.item.entity }}' + overlap: + icon: '{{ repeat.item.icon if repeat.item.icon is defined else None }}' + name: '{{ repeat.item.name if repeat.item.name is defined else None }}' + - *variable_entity + - service: '{{ nextion.command.set_entity }}' + data: + ent_id: '{{ repeat.item.page }}.{{ repeat.item.component }}' + ent_icon: '{{ entity.icon }}' + ent_label: '{{ entity.name }}' + ent_value: > + {{ + (states(entity_id, rounded=true) ~ (state_attr(entity_id, "unit_of_measurement") | default(""))) + if has_value(entity_id) + else mui[language].unavailable + }} + ent_value_xcen: '{{ entitypages_value_alignment }}' + continue_on_error: true ## PAGE WEATHER (WEATHER01 to WEATHER05) ## - alias: Weather pages @@ -9930,28 +9498,27 @@ action: last_click_button: '{{ hardware.buttons.left if nspanel_event.component == "hw_bt_left" else hardware.buttons.right }}' entity_id: '{{ last_click_button.entity }}' - *variable_entity - - condition: '{{ entity.valid }}' - choose: - alias: Long click conditions: - - '{{ nspanel_event.command == "long_click" or entity.domain in ["climate", "media_player"] }}' + - '{{ nspanel_event.command == "long_click" or entity_domain in ["climate", "media_player"] }}' sequence: - choose: - alias: Default conditions: - '{{ last_click_button.hold_select == "Default" }}' - - '{{ entity.domain in ["alarm_control_panel", "climate", "cover", "light", "fan", "media_player"] }}' + - '{{ entity_domain in ["alarm_control_panel", "climate", "cover", "light", "fan", "media_player"] }}' sequence: - variables: back_page: '{{ page.home }}' - &open_entity_settings_page service: '{{ nextion.command.open_entity_settings_page }}' data: - page: '{{ entity.domain }}' + page: '{{ entity_domain }}' page_label: '{{ entity.name }}' page_icon: '{{ entity.icon }}' page_icon_color: '{{ entity.icon_color }}' - entity: '{{ "embedded_climate" if entity.id == thermostat_embedded else entity.id }}' + entity: '{{ "embedded_climate" if entity_id == thermostat_embedded else entity_id }}' back_page: '{{ back_page }}' continue_on_error: true - alias: Custom action - Left @@ -10024,20 +9591,19 @@ action: icon: '{{ last_click_button.icon if last_click_button.icon is defined else None }}' name: '{{ last_click_button.name if last_click_button.name is defined else None }}' - *variable_entity - - condition: '{{ entity.valid }}' - choose: - alias: Long click conditions: - - '{{ nspanel_event.command == "long_click" or entity.domain in ["climate", "media_player"] }}' - - '{{ entity.domain in ["alarm_control_panel", "climate", "cover", "light", "fan", "media_player"] }}' + - '{{ nspanel_event.command == "long_click" or entity_domain in ["climate", "media_player"] }}' + - '{{ entity_domain in ["alarm_control_panel", "climate", "cover", "light", "fan", "media_player"] }}' sequence: - variables: back_page: '{{ nspanel_event.page }}' - *open_entity_settings_page - alias: Short click conditions: - - '{{ nspanel_event.command == "short_click" and entity.domain not in ["alarm_control_panel", "climate", "media_player"] }}' - - '{{ entity.domain not in ["unknown", "person", "binary_sensor", "sensor"] }}' + - '{{ nspanel_event.command == "short_click" and entity_domain not in ["alarm_control_panel", "climate", "media_player"] }}' + - '{{ entity_domain not in ["unknown", "person", "binary_sensor", "sensor"] }}' sequence: - *short_press-service_call @@ -10091,9 +9657,8 @@ action: icon: '{{ last_click_button.icon if last_click_button.icon is defined else None }}' name: '{{ last_click_button.name if last_click_button.name is defined else None }}' - *variable_entity - - condition: '{{ entity.valid }}' - if: - - '{{ entity.domain in ["alarm_control_panel", "climate", "cover", "fan", "light", "media_player"] }}' + - '{{ entity_domain in ["alarm_control_panel", "climate", "cover", "fan", "light", "media_player"] }}' then: - variables: back_page: '{{ page.home }}' @@ -10115,7 +9680,7 @@ action: message: > ESPHome cannot provide a valid Blueprint version. - - Panel: {{ nspanel_name }} + - Panel: {{ device_attr(nspanel_deviceid, "name") ~ (" (" ~ nspanel_name ~ ")") if nspanel_name != device_attr(nspanel_deviceid, "name") }} - TFT: {{ nspanel_event.tft }} @@ -10144,7 +9709,7 @@ action: message: > There's a version mismatch between NSPanel_HA_Blueprint components. Please update all the components to the same version. - - Panel: {{ nspanel_name }} + - Panel: {{ device_attr(nspanel_deviceid, "name") ~ (" (" ~ nspanel_name ~ ")") if nspanel_name != device_attr(nspanel_deviceid, "name") }} - TFT: {{ nspanel_event.tft }} @@ -10182,7 +9747,6 @@ action: entity_id: '{{ climate }}' back_page: '{{ page.home }}' - *variable_entity - - condition: '{{ entity.valid }}' - *open_entity_settings_page - alias: Show button - Notification clear @@ -10241,7 +9805,7 @@ action: message: > The sensor "Current Page" (`{{ currentpage }}`) is unavailable. - - Panel: {{ nspanel_name }} + - Panel: {{ device_attr(nspanel_deviceid, "name") ~ (" (" ~ nspanel_name ~ ")") if nspanel_name != device_attr(nspanel_deviceid, "name") }} - Blueprint version: {{ blueprint_version }} @@ -10607,6 +10171,17 @@ action: url: "default" continue_on_error: true + #### TFT Upload Automation ##### + - alias: Wake-up + conditions: + - condition: trigger + id: wake_up_sensors + sequence: + - service: '{{ nextion.command.wake_up }}' + data: + reset_timer: true + continue_on_error: true + ############################################################# ##### CLOSE - Action ##### ############################################################# diff --git a/nspanel_eu.tft b/nspanel_eu.tft index 36f6273..df62580 100644 Binary files a/nspanel_eu.tft and b/nspanel_eu.tft differ diff --git a/nspanel_us.tft b/nspanel_us.tft index 1f20d8b..b157138 100644 Binary files a/nspanel_us.tft and b/nspanel_us.tft differ diff --git a/nspanel_us_land.tft b/nspanel_us_land.tft index 8a0ed2a..66175f0 100644 Binary files a/nspanel_us_land.tft and b/nspanel_us_land.tft differ