diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml index 043e6bf..af5415a 100644 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -28,7 +28,7 @@ body: attributes: label: TFT Version description: Enter the TFT version number. - placeholder: e.g., 4.1.4 + placeholder: e.g., 4.3.1 validations: required: false @@ -36,7 +36,7 @@ body: attributes: label: ESPHome Version description: Enter the ESPHome version number. - placeholder: e.g., 4.1.4 + placeholder: e.g., 4.3.1 validations: required: false @@ -44,7 +44,7 @@ body: attributes: label: Blueprint Version description: Enter the Blueprint version number. - placeholder: e.g., 4.1.4 + placeholder: e.g., 4.3.1 validations: required: false @@ -100,15 +100,20 @@ body: 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. - type: textarea @@ -117,9 +122,15 @@ body: 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. ... diff --git a/.github/workflows/validate_esphome.yml b/.github/workflows/validate_esphome.yml index 0baae6b..5f11d17 100644 --- a/.github/workflows/validate_esphome.yml +++ b/.github/workflows/validate_esphome.yml @@ -191,48 +191,48 @@ jobs: with: yaml_file: "./.test/esphome_advanced_climate_heat_customizations.yaml" - build_prebuilt_firmware: - name: Prebuilt Firmware - runs-on: ubuntu-latest - needs: build_core # Ensure this job runs after the core build job - if: github.ref == 'refs/heads/dev' || github.base_ref == 'dev' - steps: - - uses: actions/checkout@main - with: - fetch-depth: '0' + # build_prebuilt_firmware: + # name: Prebuilt Firmware + # runs-on: ubuntu-latest + # needs: build_core # Ensure this job runs after the core build job + # if: github.ref == 'refs/heads/dev' || github.base_ref == 'dev' + # steps: + # - uses: actions/checkout@main + # with: + # fetch-depth: '0' - - name: Build ESPHome Prebuilt Firmware - uses: barndawgie/build-action@v1.9.0 - with: - yaml_file: prebuilt/nspanel_esphome_prebuilt.yaml + # - name: Build ESPHome Prebuilt Firmware + # uses: barndawgie/build-action@v1.9.0 + # with: + # yaml_file: prebuilt/nspanel_esphome_prebuilt.yaml - - name: Move and Rename Firmware File - run: | - mkdir -p prebuilt - cp prebuilt/.esphome/build/nspanel/.pioenvs/nspanel/firmware.bin prebuilt/nspanel_esphome_prebuilt.bin || true - cp prebuilt/.esphome/build/nspanel/.pioenvs/nspanel/firmware-factory.bin prebuilt/nspanel_esphome_prebuilt-factory.bin || true + # - name: Move and Rename Firmware File + # run: | + # mkdir -p prebuilt + # cp prebuilt/.esphome/build/nspanel/.pioenvs/nspanel/firmware.bin prebuilt/nspanel_esphome_prebuilt.bin || true + # cp prebuilt/.esphome/build/nspanel/.pioenvs/nspanel/firmware-factory.bin prebuilt/nspanel_esphome_prebuilt-factory.bin || true - - name: Set Commit Message - id: set_commit_message - run: | - if [[ "${{ github.event_name }}" == "pull_request" ]]; then - echo "COMMIT_MESSAGE=Pre-built firmware for NSPanel - ${{ github.event.pull_request.title }}" >> $GITHUB_ENV - elif [[ "${{ github.event_name }}" == "push" ]]; then - commit_message=$(git log -1 --pretty=format:'%s') - echo "COMMIT_MESSAGE=Pre-built firmware for NSPanel - $commit_message" >> $GITHUB_ENV - else - echo "COMMIT_MESSAGE=Pre-built firmware for NSPanel" >> $GITHUB_ENV - fi + # - name: Set Commit Message + # id: set_commit_message + # run: | + # if [[ "${{ github.event_name }}" == "pull_request" ]]; then + # echo "COMMIT_MESSAGE=Pre-built firmware for NSPanel - ${{ github.event.pull_request.title }}" >> $GITHUB_ENV + # elif [[ "${{ github.event_name }}" == "push" ]]; then + # commit_message=$(git log -1 --pretty=format:'%s') + # echo "COMMIT_MESSAGE=Pre-built firmware for NSPanel - $commit_message" >> $GITHUB_ENV + # else + # echo "COMMIT_MESSAGE=Pre-built firmware for NSPanel" >> $GITHUB_ENV + # fi - - name: Commit and Push Firmware Files - run: | - git config --global user.name 'GitHub Actions' - git config --global user.email 'actions@github.com' - git add prebuilt/*.bin - git commit -m "${{ env.COMMIT_MESSAGE }}" - git push - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # - name: Commit and Push Firmware Files + # run: | + # git config --global user.name 'GitHub Actions' + # git config --global user.email 'actions@github.com' + # git add prebuilt/*.bin + # git commit -m "${{ env.COMMIT_MESSAGE }}" + # git push + # env: + # GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} build_climate_cool_bluetooth_proxy: name: Climate cool & BLE proxy diff --git a/.github/workflows/validate_esphome_beta.yml b/.github/workflows/validate_esphome_beta.yml index 6027ada..b3c6b01 100644 --- a/.github/workflows/validate_esphome_beta.yml +++ b/.github/workflows/validate_esphome_beta.yml @@ -180,49 +180,21 @@ jobs: yaml_file: "./.test/esphome_advanced_climate_heat_customizations.yaml" version: beta - build_prebuilt_firmware: - name: Prebuilt Firmware - runs-on: ubuntu-latest - needs: build_core # Ensure this job runs after the core build job - if: github.ref == 'refs/heads/dev' || github.base_ref == 'dev' - steps: - - uses: actions/checkout@main - with: - fetch-depth: '0' + # build_prebuilt_firmware: + # name: Prebuilt Firmware + # runs-on: ubuntu-latest + # needs: build_core # Ensure this job runs after the core build job + # if: github.ref == 'refs/heads/dev' || github.base_ref == 'dev' + # steps: + # - uses: actions/checkout@main + # with: + # fetch-depth: '0' - - name: Build ESPHome Prebuilt Firmware - uses: barndawgie/build-action@v1.9.0 - with: - yaml_file: prebuilt/nspanel_esphome_prebuilt.yaml - version: beta - - - name: Move and Rename Firmware File - run: | - mkdir -p prebuilt - cp prebuilt/.esphome/build/nspanel/.pioenvs/nspanel/firmware.bin prebuilt/nspanel_esphome_prebuilt.bin || true - cp prebuilt/.esphome/build/nspanel/.pioenvs/nspanel/firmware-factory.bin prebuilt/nspanel_esphome_prebuilt-factory.bin || true - - - name: Set Commit Message - id: set_commit_message - run: | - if [[ "${{ github.event_name }}" == "pull_request" ]]; then - echo "COMMIT_MESSAGE=Pre-built firmware for NSPanel - ${{ github.event.pull_request.title }}" >> $GITHUB_ENV - elif [[ "${{ github.event_name }}" == "push" ]]; then - commit_message=$(git log -1 --pretty=format:'%s') - echo "COMMIT_MESSAGE=Pre-built firmware for NSPanel - $commit_message" >> $GITHUB_ENV - else - echo "COMMIT_MESSAGE=Pre-built firmware for NSPanel" >> $GITHUB_ENV - fi - - - name: Commit and Push Firmware Files - run: | - git config --global user.name 'GitHub Actions' - git config --global user.email 'actions@github.com' - git add prebuilt/*.bin - git commit -m "${{ env.COMMIT_MESSAGE }}" - git push - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} + # - name: Build ESPHome Prebuilt Firmware + # uses: barndawgie/build-action@v1.9.0 + # with: + # yaml_file: prebuilt/nspanel_esphome_prebuilt.yaml + # version: beta build_climate_cool_bluetooth_proxy: name: Climate cool & BLE proxy diff --git a/.test/esphome_advanced_climate_heat_customizations.yaml b/.test/esphome_advanced_climate_heat_customizations.yaml index bda1da3..2588ac8 100644 --- a/.test/esphome_advanced_climate_heat_customizations.yaml +++ b/.test/esphome_advanced_climate_heat_customizations.yaml @@ -26,10 +26,7 @@ binary_sensor: id: display_state platform: template lambda: |- - return (id(current_page).state != "screensaver"); - -# Enable Bluetooth proxy -bluetooth_proxy: + return (current_page->state != "screensaver"); button: # Adds a button to put the panel to sleep @@ -41,7 +38,7 @@ button: then: - logger.log: Button Sleep pressed - lambda: |- - if (id(current_page).state != "screensaver") id(disp1).goto_page("screensaver"); + goto_page->execute("screensaver"); # Adds a button to wake-up the panel (similar to the existing service) - name: ${device_name} Wake-up @@ -52,10 +49,10 @@ button: then: - logger.log: Button Wake-up pressed - lambda: |- - if (id(current_page).state == "screensaver") id(disp1).goto_page(id(wakeup_page_name).state.c_str()); - // id(timer_page).execute(id(wakeup_page_name).state.c_str()); // enable this if you want page timeout to be reset - id(timer_sleep).execute(id(wakeup_page_name).state.c_str(), int(id(timeout_sleep).state)); - id(timer_dim).execute(id(wakeup_page_name).state.c_str(), int(id(timeout_dim).state)); + if (current_page->state == "screensaver") id(disp1).goto_page(id(wakeup_page_name).state.c_str()); + // timer_page->execute(); // enable this if you want page timeout to be reset + timer_sleep->execute(); + timer_dim->execute(); # Add custom presets to your climate (heat in this example) climate: @@ -100,12 +97,12 @@ light: - lambda: |- ESP_LOGD("light.display_light", "Turn-on"); if (current_page->state == "screensaver") disp1->goto_page(wakeup_page_name->state.c_str()); - timer_reset_all->execute(wakeup_page_name->state.c_str()); + timer_reset_all->execute(); on_turn_off: then: - lambda: |- ESP_LOGD("light.display_light", "Turn-off"); - disp1->goto_page("screensaver"); + goto_page->execute("screensaver"); logger: # Enable hardware UART serial logging @@ -133,12 +130,12 @@ script: - id: !extend page_changed then: - lambda: |- - ESP_LOGD("script.page_changed(custom)", "page: %s", page.c_str()); + ESP_LOGD("script.page_changed(custom)", "page: %s", current_page->state.c_str()); ESP_LOGV("script.page_changed(custom)", "is_on(): %s", display_light->current_values.is_on() ? "True" : "False"); - if (page == "screensaver" and display_light->current_values.is_on()) { + if (current_page->state == "screensaver" and display_light->current_values.is_on()) { auto call = display_light->turn_off(); call.perform(); - } else if (page != "screensaver" and (not display_light->current_values.is_on())) { + } else if (current_page->state != "screensaver" and (not display_light->current_values.is_on())) { auto call = display_light->turn_on(); call.perform(); } @@ -238,6 +235,4 @@ wifi: - ssid: !secret wifi_ssid_backup password: !secret wifi_password_backup priority: 0 - # Set Wi-Fi power save mode to "LIGHT" as required for Bluetooth on ESP32 - power_save_mode: LIGHT ... diff --git a/ReleaseNotes.md b/ReleaseNotes.md index 05d3a9b..d117dcb 100644 --- a/ReleaseNotes.md +++ b/ReleaseNotes.md @@ -218,7 +218,146 @@ This addition allows for a more comprehensive at-a-glance view of your essential ### Automatic Font Size Adjustment for Entity Page Values We've enhanced the entities pages with an automatic font size adjustment feature to improve the display of values, especially for longer strings or values with lengthy units. This smart adjustment reduces the occurrence of truncated values by dynamically resizing the font based on the string length. -While the selection of fonts for the panel remains limited, this automatic resizing significantly enhances readability, ensuring that all displayed information is clear and fully visible at a glance. +While the selection of fonts for the panel remains limited, this automatic resizing significantly enhances readability, +ensuring that all displayed information is clear and fully visible at a glance. + +## v4.3.1 - Ensuring Compatibility with ESPHome v2024.3.0 and Enhancing Stability +Patch v4.3.1 focuses primarily on ensuring full compatibility with the latest ESPHome v2024.3.0 IP address format changes, crucial for the smooth compilation and operation of the NSPanel project. +This timely update addresses critical compatibility issues, alongside implementing key bug fixes and optimizations. +It underscores our ongoing commitment to enhancing stability and ensuring a reliable experience for all NSPanel users, keeping pace with the evolving ESPHome ecosystem. + +### Support for ESPHome v2024.3.0 IP Address Format +- **Criticality:** Critical (required for compiling with ESPHome 2024.3.0) +- **Affected Components:** ESPHome +- **Description:** This update introduces necessary adjustments to accommodate the new IP address format introduced by ESPHome v2024.3.0, +ensuring uninterrupted project compilation and enhancing compatibility. +This critical update is the cornerstone of patch v4.3.1, deployed simultaneously with ESPHome to ensure NSPanel users experience no disruption in service. +This adaptation ensures that NSPanel firmware remains fully functional and up-to-date with ESPHome's latest advancements, +reaffirming our commitment to providing a seamless and stable user experience. + +### Button Bars Visibility Enhancement and Configuration Change +- **Criticality:** Breaking Change (with Enhancement) +- **Affected Components:** Blueprint +- **Description:** The visibility of button bars, indicating the status of entities linked to hardware buttons, +has been updated to be visible across all pages by default, including the screensaver. +This enhancement improves the accessibility of crucial status information. +Users who previously customized the visibility settings for button bars will need to review and adjust their configurations to align with the new default behavior. +This change enables users to selectively exclude button bars from specific pages if desired, providing greater flexibility and control over the interface's appearance. + +### Service `hw_button_state` Update +- **Criticality:** Breaking Change (with Enhancement) +- **Affected Components:** Blueprint and ESPHome +- **Description:** The method for controlling the state of hardware buttons has been refined with the introduction of a `button_mask` parameter. +This update simplifies the process of simultaneously updating the visual state of multiple hardware buttons, +enhancing user interaction by providing a more intuitive interface for managing button states. +Users can now specify the buttons they wish to control using a single `button_mask` parameter, +offering a streamlined approach for activating or deactivating the on-screen indication bars of the hardware buttons. +This change fosters a more flexible and efficient user experience in configuring the visual feedback for button states. + +### Celsius Display Issue for Embedded Temperature Sensor Resolved (#1834) +- **Criticality:** Medium +- **Affected Components:** ESPHome +- **Description:** Addressed an issue where the NSPanel's built-in temperature sensor incorrectly displayed temperature readings in Celsius, even when Fahrenheit was expected. +This fix ensures temperature readings are accurately represented according to the user's settings, improving usability and consistency across the system. + +### Resolution for Panel Naming When `device_name` Is Not Provided (#1907) +- **Criticality:** Medium +- **Affected Components:** ESPHome +- **Description:** Corrected a bug that caused the new "Device Name" sensor to report "nspanel" +and therefore fail on defining services names when a `device_name` substitution was not specified by the user. + +### External Temperature Sensor Selection Now Correctly Overrides Embedded Sensor Value (#1911) +- **Criticality:** Medium +- **Affected Components:** Blueprint and ESPHome +- **Description:** Fixed a display issue where the built-in sensor's temperature reading persisted despite configuration for an external sensor. + +### Utilities Dashboard Now Correctly Omits Default Labels When Customized (#1899) +- **Criticality:** Minor +- **Affected Components:** Blueprint +- **Description:** Enhanced the utilities dashboard by ensuring custom labels properly replace or remove default ones for a personalized display. + +### Clarification and Improvements to `rtttl_play` Service Documentation (#1901 and #1912) +- **Criticality:** Minor +- **Affected Components:** Documentation +- **Description:** Updated documentation for clearer guidance on using the `rtttl_play` service for custom sounds and alerts. + +### Correction of Missing Icon Display Issue on Entities Page 3 (#1902) +- **Criticality:** Minor +- **Affected Components:** TFT +- **Description:** Addressed a bug preventing certain icons from displaying on the third Entities page, ensuring a consistent user interface. + +### Icons No Longer Appear "Disabled" for Sensor Values of 0.0 (#1902) +- **Criticality:** Minor +- **Affected Components:** Blueprint +- **Description:** Resolved an incorrect icon color display issue where they appeared disabled at a sensor value of exactly 0.0. + +### Vertical Alignment Improvements on Entities Pages for Enhanced Readability (#1903) +- **Criticality:** Minor +- **Affected Components:** TFT +- **Description:** Adjusted the vertical alignment of text and icons on Entities pages for a more visually appealing presentation. + +### Enhanced Guidance on Handling Duplicated Entities on the Device's Page (#1905) +- **Criticality:** Minor +- **Affected Components:** Documentation +- **Description:** Updated documentation to better address and resolve issues related to entity duplication on the device's page on Home Assistant. + +### Compilation Guidance Updated for Customizations with the Latest Version (#1914) +- **Criticality:** Minor +- **Affected Components:** Documentation +- **Description:** Resolved documentation issues leading to compilation errors during customization, facilitating smoother custom feature implementation. + +### Elimination of Transient Icon Flashes on the Home Page During Page Transitions (#1915) +- **Criticality:** Minor +- **Affected Components:** Blueprint, ESPHome and TFT +- **Description:** Fixed a visual glitch where icons briefly flashed during transitions, streamlining the visual experience. + +### Real-Time Brightness Adjustment Now Effective Even During Sleep Mode (#1919) +- **Criticality:** Minor +- **Affected Components:** ESPHome +- **Description:** Ensured brightness settings changes are immediately applied, even when the panel is in sleep mode. + +### Smooth Cursor Movement on Utilities Page Near Zero Sensor Readings (#1926) +- **Criticality:** Minor +- **Affected Components:** Blueprint +- **Description:** Ensured cursor movement on the Utilities page is smooth and accurate, even with sensor readings defining the cursor direction is between 0 and 1. + +### Notification Screen Clearing Now Functional with `notification_clear` Service Call (#1931) +- **Criticality:** Minor +- **Affected Components:** ESPHome +- **Description:** Enabled clear display of notifications from the screen upon invoking the `notification_clear` service, enhancing display control. + +### Page Indicator Removed for Single-Page Views (#1883) +- **Criticality:** Enhancement +- **Affected Components:** TFT +- **Description:** Improved UI by removing unnecessary page indicators when only one page is present, simplifying navigation. + +### Entities Page Font Adjustment for CJK Fonts Improved (#1884) +- **Criticality:** Enhancement +- **Affected Components:** ESPHome +- **Description:** Optimized font sizing and display on Entities pages for CJK fonts, addressing readability issues. + +### User Option Added to Disable Entities Page Icons for a Text-Focused View (#1885) +- **Criticality:** Enhancement +- **Affected Components:** Blueprint +- **Description:** Introduced an option to disable icons on Entities pages, allowing for a simplified, text-only display. + +### Utilities Page Line Cursor Size Customization Option Added (#1910) +- **Criticality:** Enhancement +- **Affected Components:** Blueprint +- **Description:** Provided customization options for cursor size on the Utilities dashboard, enhancing data visualization. + +### Temperature Measurement Sampling Enhancement (#1918) +- **Criticality:** Enhancement +- **Affected Components:** ESPHome +- **Description:** Enhanced the temperature reporting mechanism of the NSPanel's built-in temperature sensor by implementing a sampling method. +Now, the sensor collects 12 intermediate measurements and calculates their average before reporting the temperature. +This enhancement, which does not alter the 1-minute measurement interval, aims to provide smoother and more stable temperature readings, +improving accuracy and reliability for users monitoring their environment. + +### Boot Page Visual Feedback Enhancements for Clearer System Status Display (#1923) +- **Criticality:** Enhancement +- **Affected Components:** ESPHome and TFT +- **Description:** Updated the Boot page to offer clearer visual feedback on version information and system status, with a new progress bar. ## Support For support or more information about this update, @@ -236,6 +375,7 @@ Your efforts have significantly improved its functionality and reliability (#183 Your contributions have made our guides more informative and accessible, enriching the user experience for everyone (#1865). ## Previous releases +- [v4.3 - Welcome to Framework ESP-IDF, an Utilities Dashboard and Enhanced Localization](https://github.com/Blackymas/NSPanel_HA_Blueprint/releases/tag/v4.3.0) - [v4.2.6 - Enhancing Stability and User Experience](https://github.com/Blackymas/NSPanel_HA_Blueprint/releases/tag/v4.2.6) - [v4.2.5 - Celebrating 1000 Stars with Enhanced Functionality and UI Improvements](https://github.com/Blackymas/NSPanel_HA_Blueprint/releases/tag/v4.2.5) - [v4.2.4 - Critical bug fixes](https://github.com/Blackymas/NSPanel_HA_Blueprint/releases/tag/v4.2.4) diff --git a/components/nspanel_ha_blueprint/pages.h b/components/nspanel_ha_blueprint/pages.h index 69e2893..fe9ef8c 100644 --- a/components/nspanel_ha_blueprint/pages.h +++ b/components/nspanel_ha_blueprint/pages.h @@ -12,7 +12,7 @@ namespace nspanel_ha_blueprint { /** * @file pages.h - * Defines constants and functions related to page names for "NSPanel HA Blueprint" project.. + * Defines constants and functions related to page names for "NSPanel HA Blueprint" project. */ // Constants @@ -22,6 +22,7 @@ namespace nspanel_ha_blueprint { * such as settings, home, weather information, and more. */ constexpr std::array page_names = { + "boot", "home", "weather01", "weather02", @@ -30,7 +31,6 @@ namespace nspanel_ha_blueprint { "weather05", "climate", "settings", - "boot", "screensaver", "light", "cover", diff --git a/docs/README.md b/docs/README.md index c875902..e27d1d6 100644 --- a/docs/README.md +++ b/docs/README.md @@ -6,9 +6,9 @@ - [Version compatibility matrix](version_compatibility.md) ## Common issues -- [TFT Upload](tft_upload.md) -- [Stuck on Initializing](error_initializing.md) +- [Panel startup issues](error_initializing.md) - [Compiling Errors](error_compiling.md) +- [TFT Upload](tft_upload.md) ## Advanced settings - [Customization](customization.md) diff --git a/docs/api.md b/docs/api.md index 1ba92a5..4ad5808 100644 --- a/docs/api.md +++ b/docs/api.md @@ -254,26 +254,27 @@ data: > This setup provides a direct and user-friendly way to access and return from detailed entity information, enhancing the interface's usability. ### Hardware Button State Indication Service: `hw_button_state` -Updates the on-screen indication bars for the hardware buttons, reflecting the current state of the entities they control. +This service dynamically updates the on-screen indication bars for the hardware buttons, reflecting the current state of the entities they control. +It's designed to provide immediate visual feedback, enhancing the user interface by showing the active/inactive state of the left and right hardware button indicators on the panel. -**Usage:** -This service updates the visual state (on/off) of the left and right hardware button indicators on the panel. -It's used to provide visual feedback corresponding to the state of the entities controlled by these hardware buttons. +**Usage:** +Utilize this service to modify the visual state (on/off) of hardware button indicators on the panel, corresponding to the state of entities controlled by these buttons. +This allows for visual feedback that matches the operational state of the buttons. -**Parameters:** -- `left` (bool): The state to set for the left button's indication bar. -- `right` (bool): The state to set for the right button's indication bar. +**Parameters:** +- `button_mask` (int): A bitwise identifier for buttons. Use `1` for the left button, `2` for the right button, and `3` for both buttons. +- `state` (bool): The state to apply to the button(s) indicated by `button_mask`. True for on (active), false for off (inactive). **Home Assistant Example:** ```yaml service: esphome._hw_button_state data: - left: true # Turns the left button's indication bar on - right: false # Turns the right button's indication bar off + button_mask: 3 # Targets both the left (1) and right (2) buttons + state: true # Turns the indication bars on for both buttons ``` > [!NOTE] > Replace `` with your specific panel name as configured in Home Assistant. -> This service dynamically updates the hardware button state indications, enhancing the user interface by providing immediate visual feedback. +> This service leverages a bitmask (`button_mask`) for flexible control over multiple hardware buttons simultaneously, offering a streamlined method for updating their visual states. ### Icon Service: `icon` Updates a chip or custom button's icon, color, and visibility within Home Assistant. @@ -693,7 +694,7 @@ For example tones and further inspiration, you can visit examples of RTTTL songs ```yaml service: esphome._rtttl_play data: - tone: "d=4,o=5,b=140:c,e,g,8p,c6,e6,g6,8p,c7,p" + tone: "The Simpsons:d=4,o=5,b=160:c.6,e6,f#6,8a6,g.6,e6,c6,8a,8f#,8f#,8f#,2g,8p,8p,8f#,8f#,8f#,8g,a#.,8c6,8c6,8c6,c6" ``` > [!NOTE] > Replace `` with your specific panel name as configured in Home Assistant to ensure correct service execution. diff --git a/docs/customization.md b/docs/customization.md index 0ef9824..bc1e18b 100644 --- a/docs/customization.md +++ b/docs/customization.md @@ -288,7 +288,7 @@ binary_sensor: id: display_state platform: template lambda: |- - return (id(current_page).state != "screensaver"); + return (current_page->state != "screensaver"); ``` You can easily invert the meaning to have a sensor for display sleeping: @@ -300,7 +300,7 @@ binary_sensor: id: display_sleeping platform: template lambda: |- - return (id(current_page).state == "screensaver"); + return (current_page->state == "screensaver"); ``` ### Deep sleep @@ -373,7 +373,7 @@ button: then: - logger.log: Button Sleep pressed - lambda: |- - if (id(current_page).state != "screensaver") id(disp1).goto_page("screensaver"); + goto_page->execute("screensaver"); # Adds a button to wake-up the panel (similar to the existing service) - name: Wake-up @@ -384,10 +384,10 @@ button: then: - logger.log: Button Wake-up pressed - lambda: |- - if (id(current_page).state == "screensaver") id(disp1).goto_page(id(wakeup_page_name).state.c_str()); - // id(timer_page).execute(id(wakeup_page_name).state.c_str()); // enable this if you want page timeout to be reset - id(timer_sleep).execute(id(wakeup_page_name).state.c_str(), int(id(timeout_sleep).state)); - id(timer_dim).execute(id(wakeup_page_name).state.c_str(), int(id(timeout_dim).state)); + if (current_page->state == "screensaver") id(disp1).goto_page(id(wakeup_page_name).state.c_str()); + // timer_page->execute(); // enable this if you want page timeout to be reset + timer_sleep->execute(); + timer_dim->execute(); ``` ### Set display as a light @@ -408,12 +408,12 @@ light: - lambda: |- ESP_LOGD("light.display_light", "Turn-on"); if (current_page->state == "screensaver") disp1->goto_page(wakeup_page_name->state.c_str()); - timer_reset_all->execute(wakeup_page_name->state.c_str()); + timer_reset_all->execute(); on_turn_off: then: - lambda: |- ESP_LOGD("light.display_light", "Turn-off"); - disp1->goto_page("screensaver"); + goto_page->execute("screensaver"); output: # Output required by `display_light` to send the commands to Nextion @@ -432,12 +432,12 @@ script: - id: !extend page_changed then: - lambda: |- - ESP_LOGD("script.page_changed(custom)", "page: %s", page.c_str()); + ESP_LOGD("script.page_changed(custom)", "page: %s", current_page->state.c_str()); ESP_LOGV("script.page_changed(custom)", "is_on(): %s", display_light->current_values.is_on() ? "True" : "False"); - if (page == "screensaver" and display_light->current_values.is_on()) { + if (current_page->state == "screensaver" and display_light->current_values.is_on()) { auto call = display_light->turn_off(); call.perform(); - } else if (page != "screensaver" and (not display_light->current_values.is_on())) { + } else if (current_page->state != "screensaver" and (not display_light->current_values.is_on())) { auto call = display_light->turn_on(); call.perform(); } @@ -737,11 +737,11 @@ switch: lambda: |- return (id(relay_settings) & nspanel_ha_blueprint::RelaySettings::Relay1_Local); turn_on_action: - - lambda: nspanel_ha_blueprint::update_relay_setting(id(relay_settings), true, RelaySettings::Relay1_Local); + - lambda: nspanel_ha_blueprint::update_bitwise_setting(id(relay_settings), true, RelaySettings::Relay1_Local); on_turn_on: - logger.log: "Relay 1 Local turned On!" turn_off_action: - - lambda: nspanel_ha_blueprint::update_relay_setting(id(relay_settings), false, RelaySettings::Relay1_Local); + - lambda: nspanel_ha_blueprint::update_bitwise_setting(id(relay_settings), false, RelaySettings::Relay1_Local); on_turn_off: - logger.log: "Relay 1 Local turned Off!" - name: Relay 2 Local @@ -751,11 +751,11 @@ switch: internal: false lambda: return (id(relay_settings) & nspanel_ha_blueprint::RelaySettings::Relay2_Local); turn_on_action: - - lambda: nspanel_ha_blueprint::update_relay_setting(id(relay_settings), true, RelaySettings::Relay2_Local); + - lambda: nspanel_ha_blueprint::update_bitwise_setting(id(relay_settings), true, RelaySettings::Relay2_Local); on_turn_on: - logger.log: "Relay 2 Local turned On!" turn_off_action: - - lambda: nspanel_ha_blueprint::update_relay_setting(id(relay_settings), false, RelaySettings::Relay2_Local); + - lambda: nspanel_ha_blueprint::update_bitwise_setting(id(relay_settings), false, RelaySettings::Relay2_Local); on_turn_off: - logger.log: "Relay 2 Local turned Off!" ``` diff --git a/docs/error_initializing.md b/docs/error_initializing.md index a1f0ecf..9d796d4 100644 --- a/docs/error_initializing.md +++ b/docs/error_initializing.md @@ -76,6 +76,9 @@ You can use this button to force a reboot of your panel. This button is availabl ![Blueprint icon on red](pics/us_home_blueprint_icon_red.png) +In some cases you can also see duplicate entities on the device's page in Home Assistant, and some of these entities may have the `entity_id` ending with `_2`, `_3`, etc. +![image](https://github.com/Blackymas/NSPanel_HA_Blueprint/assets/9100568/51a5fce4-89cc-43e8-9d92-1f83d7ea2ee5) + | Possible causes | Suggestions | | :-- | :-- | diff --git a/docs/howto.md b/docs/howto.md index 08c4357..5d1344e 100644 --- a/docs/howto.md +++ b/docs/howto.md @@ -292,7 +292,7 @@ By repeatedly calling this service whenever motion is detected, the panel can be HA can send a RTTTL to the NSPanel, custom melodies are possible. -The use this function, the following service is called: ***nspanel_play_rtttl*** +The use this function, the following service is called: `rtttl_play` You can find many RTTTL strings on the web, the important thing is that they must start with the name and then a colon. @@ -302,7 +302,7 @@ Here is an example: The Simpsons:d=4,o=5,b=160:c.6,e6,f#6,8a6,g.6,e6,c6,8a,8f#,8f#,8f#,2g,8p,8p,8f#,8f#,8f#,8g,a#.,8c6,8c6,8c6,c6 ``` -![image-20230320222454441](pics/image-20230320222454441.png) +![HA - Developer Tools - Services - RTTTL Play](pics/ha_developer_tools_services_rtttl_play.png) More information: https://esphome.io/components/rtttl.html#common-beeps diff --git a/docs/pics/ha_developer_tools_services_rtttl_play.png b/docs/pics/ha_developer_tools_services_rtttl_play.png new file mode 100644 index 0000000..4ebb754 Binary files /dev/null and b/docs/pics/ha_developer_tools_services_rtttl_play.png differ diff --git a/docs/pics/image-20230320222454441.png b/docs/pics/image-20230320222454441.png deleted file mode 100644 index 7b1eb03..0000000 Binary files a/docs/pics/image-20230320222454441.png and /dev/null differ diff --git a/docs/version_compatibility.md b/docs/version_compatibility.md index 8b4faa8..e27c185 100644 --- a/docs/version_compatibility.md +++ b/docs/version_compatibility.md @@ -3,7 +3,8 @@ | NSPanel_HA_Blueprint
Version | Home Assistant
Min version | ESPHome
Min version | | :--: | :--: | :--: | -| v4.3 | 2024.3.0 | 2023.12.0 | +| v4.3.1 | 2024.3.0 | 2024.3.0 | +| v4.3.0 | 2024.3.0 | 2023.12.0 | | 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 | diff --git a/esphome/nspanel_esphome_addon_climate_base.yaml b/esphome/nspanel_esphome_addon_climate_base.yaml index 07b16e7..0992193 100644 --- a/esphome/nspanel_esphome_addon_climate_base.yaml +++ b/esphome/nspanel_esphome_addon_climate_base.yaml @@ -125,7 +125,7 @@ script: bool temp_unit_fahrenheit = (temp_units == "°F" || temp_units == "F" || temp_units == "°f" || temp_units == "f"); ClimateTraits traits = thermostat_embedded->get_traits(); - disp1->set_component_text_printf("page_label", id(addon_climate_friendly_name).c_str()); + disp1->set_component_text("page_label", id(addon_climate_friendly_name).c_str()); 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(); diff --git a/esphome/nspanel_esphome_addon_upload_tft.yaml b/esphome/nspanel_esphome_addon_upload_tft.yaml index b2d87c1..1b32151 100644 --- a/esphome/nspanel_esphome_addon_upload_tft.yaml +++ b/esphome/nspanel_esphome_addon_upload_tft.yaml @@ -136,23 +136,21 @@ script: - lambda: |- ESP_LOGD("addon_upload_tft.script.open_upload_dialog", "Showing upload dialog page"); disp1->goto_page("confirm"); - page_id->update(); - wait_until: condition: - - lambda: return (page_id->state == 26); + - lambda: return (current_page->state == "confirm"); timeout: 2s - lambda: |- - if (page_id->state == 26) { + if (current_page->state == "confirm") { disp1->hide_component("bclose"); disp1->hide_component("bt_accept"); disp1->hide_component("bt_clear"); } #ifdef ARDUINO - disp1->set_component_text_printf("confirm.title", "Upload TFT\\rArduino"); + disp1->set_component_text("confirm.title", "Upload TFT\\rArduino"); #elif defined(USE_ESP_IDF) - disp1->set_component_text_printf("confirm.title", "Upload TFT\\rESP-IDF"); + disp1->set_component_text("confirm.title", "Upload TFT\\rESP-IDF"); #endif - page_id->update(); - id: report_upload_progress mode: restart @@ -160,11 +158,9 @@ script: message: string then: - lambda: |- - ESP_LOGD("addon_upload_tft.script.report_upload_progress", "%s", message.c_str()); + ESP_LOGD("addon_upload_tft.script.report_upload_progress", message.c_str()); if (id(tft_is_valid)) { - if (page_id->state != 26) { - open_upload_dialog->execute(); - } + if (current_page->state != "confirm") open_upload_dialog->execute(); display_wrapped_text->execute("confirm.body", message.c_str(), 18); disp1->set_backlight_brightness(1); App.feed_wdt(); @@ -207,10 +203,9 @@ script: - delay: 2s - script.execute: open_upload_dialog - script.wait: open_upload_dialog - - lambda: page_id->update(); - wait_until: condition: - - lambda: return (page_id->state == 26); + - lambda: return (current_page->state == "confirm"); timeout: 2s - script.execute: id: report_upload_progress diff --git a/esphome/nspanel_esphome_advanced.yaml b/esphome/nspanel_esphome_advanced.yaml index a97c37a..6b145c0 100644 --- a/esphome/nspanel_esphome_advanced.yaml +++ b/esphome/nspanel_esphome_advanced.yaml @@ -11,6 +11,7 @@ substitutions: ############################## ## Change only in your ## ## local yaml substitutions ## + ap_password: ${wifi_password} web_password: ${wifi_password} ############################## @@ -102,4 +103,9 @@ web_server: auth: username: admin password: ${web_password} + +wifi: + ap: + ssid: "${name}" + password: ${ap_password} ... diff --git a/esphome/nspanel_esphome_core.yaml b/esphome/nspanel_esphome_core.yaml index 6bf2250..0761df2 100644 --- a/esphome/nspanel_esphome_core.yaml +++ b/esphome/nspanel_esphome_core.yaml @@ -12,13 +12,12 @@ substitutions: device_name: NSPanel name: ${device_name} friendly_name: ${device_name} - ap_password: ${wifi_password} ota_password: ${wifi_password} web_password: ${wifi_password} temp_units: "°C" invalid_cooldown: "100ms" ##### DON'T CHANGE THIS ###### - version: "4.3.0" + version: "4.3.1b1" ############################## ##### External components ##### @@ -28,16 +27,23 @@ external_components: # path: packages/Blackymas/components type: git url: https://github.com/Blackymas/NSPanel_HA_Blueprint - ref: main + ref: dev # To do: Change to "main" when releasing components: - nspanel_ha_blueprint refresh: 300s - source: type: git url: https://github.com/edwardtfn/esphome - ref: nextion-v425 + ref: nextion-v431 components: - - nextion # Change this when that PR#6192 gets released (2024.3?) + - nextion # Change this when that PR#6192 gets released (2024.4?) + refresh: 300s + - source: + type: git + url: https://github.com/edwardtfn/esphome + ref: adc-sampling + components: + - adc # Change this when PR#6330 is merged (2024.4?) refresh: 300s ##### ESPHOME CONFIGURATION ##### @@ -53,19 +59,7 @@ esphome: then: - lambda: |- if (isnan(blueprint_status->raw_state)) blueprint_status->publish_state(0); - std::string s = "${device_name}"; - std::string result; - bool last_was_underscore = false; - for (char& c : s) { - if (isalnum(c)) { - result += tolower(c); // Add alphanumeric characters as lowercase - last_was_underscore = false; - } else if (!last_was_underscore) { // Replace non-alphanumeric with '_' but avoid consecutive '_' - result += '_'; - last_was_underscore = true; - } - } - device_name->publish_state(result.c_str()); + device_name->publish_state("${name}"); notification_label->publish_state(""); notification_text->publish_state(""); notification_unread->turn_off(); @@ -110,9 +104,10 @@ wifi: - id: wifi_default ssid: ${wifi_ssid} password: ${wifi_password} - ap: - ssid: "${name}" - password: ${ap_password} + on_connect: + - script.execute: refresh_wifi_icon + on_disconnect: + - script.execute: refresh_wifi_icon ##### OTA PASSWORD ##### ota: @@ -173,6 +168,10 @@ time: api: id: api_server reboot_timeout: 60min + on_client_connected: + - script.execute: refresh_wifi_icon + on_client_disconnected: + - script.execute: refresh_wifi_icon services: # Dynamically configures button properties on a specified page, enhancing UI interactivity by allowing updates to button appearance and behavior based on given parameters. - service: button # yamllint disable-line rule:indentation @@ -188,17 +187,17 @@ api: then: - lambda: |- if (page == current_page->state and !id(is_uploading_tft)) { - disp1->send_command_printf("%spic.picc=%u", id.c_str(), state ? 47 : 46); - disp1->send_command_printf("%sbri.picc=%u", id.c_str(), state ? 47 : 46); - disp1->send_command_printf("%stext.picc=%u", id.c_str(), state ? 47 : 46); - disp1->send_command_printf("%sicon.picc=%u", id.c_str(), state ? 47 : 46); - disp1->send_command_printf("%sicon.font=%" PRIu32, id.c_str(), icon_font); + disp1->set_component_picc((id + "pic").c_str(), state ? 47 : 46); + disp1->set_component_picc((id + "bri").c_str(), state ? 47 : 46); + disp1->set_component_picc((id + "text").c_str(), state ? 47 : 46); + disp1->set_component_picc((id + "icon").c_str(), state ? 47 : 46); + disp1->set_component_font((id + "icon").c_str(), icon_font); disp1->set_component_foreground_color((id + "bri").c_str(), state ? 10597 : 65535); disp1->set_component_foreground_color((id + "text").c_str(), state ? 10597 : 65535); disp1->set_component_font_color((id + "icon").c_str(), esphome::display::ColorUtil::color_to_565(esphome::Color(icon_color[0], icon_color[1], icon_color[2]))); - disp1->set_component_text_printf((id + "icon").c_str(), "%s", icon.c_str()); + disp1->set_component_text((id + "icon").c_str(), icon.c_str()); display_wrapped_text->execute((id + "text").c_str(), label.c_str(), 10); - disp1->set_component_text_printf((id + "bri").c_str(), "%s", (strcmp(bri.c_str(), "0") == 0) ? " " : bri.c_str()); + disp1->set_component_text((id + "bri").c_str(), (strcmp(bri.c_str(), "0") == 0) ? " " : bri.c_str()); set_component_visibility->execute((id + "pic").c_str(), true); set_component_visibility->execute((id + "icon").c_str(), true); set_component_visibility->execute((id + "text").c_str(), true); @@ -233,7 +232,7 @@ api: then: - lambda: |- if (!id(is_uploading_tft)) - disp1->set_component_text_printf(id.c_str(), "%s", txt.c_str()); + disp1->set_component_text(id.c_str(), txt.c_str()); # Updates the value of a specified component on the display. - service: component_val @@ -266,11 +265,11 @@ api: then: - lambda: |- if (!id(is_uploading_tft)) { - nspanel_ha_blueprint::HomeAssistantEntity entity_id = nspanel_ha_blueprint::extractHomeAssistantEntity(entity); + HomeAssistantEntity entity_id = extractHomeAssistantEntity(entity); if (entity_id.domain != "invalid" or entity == "embedded_climate") { detailed_entity->publish_state(entity); if (entity_id.domain == "alarm_control_panel") entity_id.domain = "alarm"; - disp1->send_command_printf("page %s", entity_id.domain.c_str()); + goto_page->execute(entity_id.domain.c_str()); disp1->send_command_printf("back_page_id=%" PRIu8, get_page_id(back_page.c_str())); if (entity_id.domain == "climate") disp1->set_component_value("embedded", (entity == "embedded_climate") ? 1 : 0); @@ -280,13 +279,16 @@ api: # Hardware Button State Indication Service - service: hw_button_state variables: - left: bool # State for the left button indication bar - right: bool # State for the right button indication bar + button_mask: int # Bitwise value for buttons: 1 for "left button", 2 for "right button", 3 for both buttons + state: bool # State for the button(s) indication: true for active, false for inactive then: - lambda: |- // Updates the visual state indication for hardware buttons - update_bitwise_setting(id(buttons_settings), left, ButtonSettings::ButtonLeft_State); - update_bitwise_setting(id(buttons_settings), right, ButtonSettings::ButtonRight_State); + // Use bitwise AND to check specific bits + if (button_mask & 1) // Checks if the least significant bit is set (left button) + update_bitwise_setting(id(buttons_settings), state, ButtonSettings::ButtonLeft_State); + if (button_mask & 2) // Checks if the second least significant bit is set (right button) + update_bitwise_setting(id(buttons_settings), state, ButtonSettings::ButtonRight_State); // Refreshes the indication bars on the display refresh_hardware_buttons_bars->execute(); @@ -300,7 +302,7 @@ api: then: - lambda: |- if (!id(is_uploading_tft) and !id.empty()) { - if (not icon.empty()) disp1->set_component_text_printf(id.c_str(), "%s", icon.c_str()); + disp1->set_component_text(id.c_str(), visible ? icon.c_str() : ""); if (icon_color.size() == 3) disp1->set_component_font_color(id.c_str(), esphome::display::ColorUtil::color_to_565(esphome::Color(icon_color[0], icon_color[1], icon_color[2]))); set_component_visibility->execute(id.c_str(), visible); @@ -359,9 +361,7 @@ api: - lambda: |- if (!id(is_uploading_tft)) { - using namespace nspanel_ha_blueprint; using namespace esphome::display; - // Relay settings update_bitwise_setting(id(relay_settings), relay1_local_control, RelaySettings::Relay1_Local); update_bitwise_setting(id(relay_settings), relay1_fallback, RelaySettings::Relay1_Fallback); @@ -386,9 +386,6 @@ api: disp1->set_component_font_color("home.chip_relay2", id(home_relay2_icon_color)); } - // Refresh relays display - refresh_relays->execute(); - // Buttons bars settings id(buttons_bars_pages) = button_bar_pages; update_bitwise_setting(id(buttons_settings), button_left, ButtonSettings::ButtonLeft_Enabled); @@ -403,8 +400,8 @@ api: button_bar_color_off[1], button_bar_color_off[2])); - // Refresh buttons bars display - refresh_hardware_buttons_bars->execute(); + // Refresh relays display + refresh_relays->execute(); } blueprint_status->publish_state(int(blueprint_status->raw_state) | (1 << 4)); # Sets up the "Home" page in ESPHome with customized settings and UI elements as defined in the project blueprint. @@ -428,6 +425,7 @@ api: then: - lambda: |- if (!id(is_uploading_tft)) { + using namespace esphome::display; // Localization id(mui_time_format) = time_format; if (meridiem.size() == 2) { @@ -436,19 +434,19 @@ api: } // Date/Time colors - id(home_date_color) = esphome::display::ColorUtil::color_to_565(esphome::Color(date_color[0], date_color[1], date_color[2])); - id(home_time_color) = esphome::display::ColorUtil::color_to_565(esphome::Color(time_color[0], time_color[1], time_color[2])); + id(home_date_color) = ColorUtil::color_to_565(esphome::Color(date_color[0], date_color[1], date_color[2])); + id(home_time_color) = ColorUtil::color_to_565(esphome::Color(time_color[0], time_color[1], time_color[2])); disp1->set_component_font_color("home.date", id(home_date_color)); disp1->set_component_font_color("home.time", id(home_time_color)); // Chips icon size - disp1->send_command_printf("home.chip_relay1.font=%" PRIi32, chip_font); - disp1->send_command_printf("home.chip_relay2.font=%" PRIi32, chip_font); - disp1->send_command_printf("home.chip_climate.font=%" PRIi32, chip_font); + disp1->set_component_font("home.chip_relay1", chip_font); + disp1->set_component_font("home.chip_relay2", chip_font); + disp1->set_component_font("home.chip_climate", chip_font); for (int i = 1; i <= 7; ++i) { disp1->send_command_printf("home.chip%02d.font=%" PRIi32, i, chip_font); } - disp1->send_command_printf("home.wifi_icon.font=%" PRIi32, chip_font); + disp1->set_component_font("home.wifi_icon", chip_font); id(home_chip_font_id) = chip_font; // Custom buttons icon size @@ -456,30 +454,32 @@ api: for (int i = 1; i <= 7; ++i) { disp1->send_command_printf("home.button%02d.font=%" PRIu8, i, id(home_custom_buttons_font_id)); } - disp1->send_command_printf("home.bt_notific.font=%" PRIu8, id(home_custom_buttons_font_id)); - disp1->send_command_printf("home.bt_qrcode.font=%" PRIu8, id(home_custom_buttons_font_id)); - disp1->send_command_printf("home.bt_entities.font=%" PRIu8, id(home_custom_buttons_font_id)); + disp1->set_component_font("home.bt_notific", id(home_custom_buttons_font_id)); + disp1->set_component_font("home.bt_qrcode", id(home_custom_buttons_font_id)); + disp1->set_component_font("home.bt_entities", id(home_custom_buttons_font_id)); // Outdoor temperature font size - disp1->send_command_printf("home.outdoor_temp.font==%" PRIi32, outdoor_temp_font); + disp1->set_component_font("home.outdoor_temp", outdoor_temp_font); // QRCode button set_component_visibility->execute("home.bt_qrcode", qrcode); - disp1->set_component_text_printf("home.bt_qrcode", "%s", qrcode_icon.c_str()); - disp1->set_component_font_color("home.bt_qrcode", esphome::display::ColorUtil::color_to_565(esphome::Color(qrcode_icon_color[0], qrcode_icon_color[1], qrcode_icon_color[2]))); + disp1->set_component_text("home.bt_qrcode", qrcode_icon.c_str()); + disp1->set_component_font_color("home.bt_qrcode", ColorUtil::color_to_565(esphome::Color(qrcode_icon_color[0], + qrcode_icon_color[1], + qrcode_icon_color[2]))); // Entities pages button - disp1->set_component_text_printf("home.bt_entities", "%s", entities_pages_icon.c_str()); - disp1->set_component_font_color("home.bt_entities", esphome::display::ColorUtil::color_to_565(esphome::Color(entities_pages_icon_color[0], - entities_pages_icon_color[1], - entities_pages_icon_color[2]))); + disp1->set_component_text("home.bt_entities", entities_pages_icon.c_str()); + disp1->set_component_font_color("home.bt_entities", ColorUtil::color_to_565(esphome::Color(entities_pages_icon_color[0], + entities_pages_icon_color[1], + entities_pages_icon_color[2]))); // Utilities button disp1->send_command_printf("is_utilities=%i", utilities ? 1 : 0); - disp1->set_component_text_printf("home.bt_utilities", "%s", utilities_icon.c_str()); - disp1->set_component_font_color("home.bt_utilities", esphome::display::ColorUtil::color_to_565(esphome::Color(utilities_icon_color[0], - utilities_icon_color[1], - utilities_icon_color[2]))); + disp1->set_component_text("home.bt_utilities", utilities_icon.c_str()); + disp1->set_component_font_color("home.bt_utilities", ColorUtil::color_to_565(esphome::Color(utilities_icon_color[0], + utilities_icon_color[1], + utilities_icon_color[2]))); blueprint_status->publish_state(int(blueprint_status->raw_state) | (1 << 1)); } @@ -505,6 +505,7 @@ api: - service: notification_clear then: - lambda: |- + if (current_page->state == "notification") goto_page->execute("home"); notification_label->publish_state(""); notification_text->publish_state(""); notification_unread->turn_off(); @@ -520,8 +521,8 @@ api: if (!id(is_uploading_tft)) { set_component_visibility->execute("home.bt_notific", true); goto_page->execute("notification"); - timer_reset_all->execute("notification"); - disp1->set_component_text_printf("notification.notifi_label", "%s", label.c_str()); + timer_reset_all->execute(); + disp1->set_component_text("notification.notifi_label", label.c_str()); 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()); @@ -551,8 +552,8 @@ api: if (page_title.find("\\r") != std::string::npos) { page_title = page_title.replace(page_title.find("\\r"), 2, " "); } - disp1->set_component_text_printf("page_label", "%s", page_title.c_str()); - disp1->set_component_text_printf("code_format", "%s", code_format.c_str()); + disp1->set_component_text("page_label", page_title.c_str()); + disp1->set_component_text("code_format", code_format.c_str()); if (code_arm_required) disp1->set_component_text_printf("code_arm_req", "1"); else disp1->set_component_text_printf("code_arm_req", "0"); @@ -567,7 +568,7 @@ api: // Alarm page - Buttons if (supported_features & 1 or state == "armed_home") // Alarm - Button - Home { - disp1->send_command_printf("bt_home_pic.pic=%i", (state == "armed_home") ? 43 : 42); + disp1->set_component_pic("bt_home_pic", (state == "armed_home") ? 43 : 42); disp1->set_component_background_color("bt_home_text", (state == "armed_home") ? 19818 : 52857); disp1->set_component_background_color("bt_home_icon", (state == "armed_home") ? 19818 : 52857); disp1->set_component_font_color("bt_home_text", (state == "armed_home") ? 65535 : 0); @@ -577,7 +578,7 @@ api: } if (supported_features & 2 or state == "armed_away") // Alarm - Button - Away { - disp1->send_command_printf("bt_away_pic.pic=%i", (state == "armed_away") ? 43 : 42); + disp1->set_component_pic("bt_away_pic", (state == "armed_away") ? 43 : 42); disp1->set_component_background_color("bt_away_text", (state == "armed_away") ? 19818 : 52857); disp1->set_component_background_color("bt_away_icon", (state == "armed_away") ? 19818 : 52857); disp1->set_component_font_color("bt_away_text", (state == "armed_away") ? 65535 : 0); @@ -586,7 +587,7 @@ api: } if (supported_features & 4 or state == "armed_night") // Alarm - Button - Night { - disp1->send_command_printf("bt_night_pic.pic=%i", (state == "armed_night") ? 43 : 42); + disp1->set_component_pic("bt_night_pic", (state == "armed_night") ? 43 : 42); disp1->set_component_background_color("bt_night_text", (state == "armed_night") ? 19818 : 52857); disp1->set_component_background_color("bt_night_icon", (state == "armed_night") ? 19818 : 52857); disp1->set_component_font_color("bt_night_text", (state == "armed_night") ? 65535 : 0); @@ -595,7 +596,7 @@ api: } if (supported_features & 32 or state == "armed_vacation") // Alarm - Button - Vacation { - disp1->send_command_printf("bt_vacat_pic.pic=%i", (state == "armed_vacation") ? 43 : 42); + disp1->set_component_pic("bt_vacat_pic", (state == "armed_vacation") ? 43 : 42); disp1->set_component_background_color("bt_vacat_text", (state == "armed_vacation") ? 19818 : 52857); disp1->set_component_background_color("bt_vacat_icon", (state == "armed_vacation") ? 19818 : 52857); disp1->set_component_font_color("bt_vacat_text", (state == "armed_vacation") ? 65535 : 0); @@ -604,7 +605,7 @@ api: } if (supported_features & 16 or state == "armed_bypass") // Alarm - Button - Custom bypass { - disp1->send_command_printf("bt_bypass_pic.pic=%i", (state == "armed_bypass") ? 43 : 42); + disp1->set_component_pic("bt_bypass_pic", (state == "armed_bypass") ? 43 : 42); disp1->set_component_background_color("bt_bypass_text", (state == "armed_bypass") ? 19818 : 52857); disp1->set_component_background_color("bt_bypass_icon", (state == "armed_bypass") ? 19818 : 52857); disp1->set_component_font_color("bt_bypass_text", (state == "armed_bypass") ? 65535 : 0); @@ -613,7 +614,7 @@ api: } if ( true ) // Alarm - Button - Disarm { - disp1->send_command_printf("bt_disarm_pic.pic=%i", (state == "disarmed") ? 43 : 42); + disp1->set_component_pic("bt_disarm_pic", (state == "disarmed") ? 43 : 42); disp1->set_component_background_color("bt_disarm_text", (state == "disarmed") ? 19818 : 52857); disp1->set_component_background_color("bt_disarm_icon", (state == "disarmed") ? 19818 : 52857); disp1->set_component_font_color("bt_disarm_text", (state == "disarmed") ? 65535 : 0); @@ -644,16 +645,16 @@ api: - 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;" + 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; # Dynamically updates the media player page with current state and media information. - service: page_media_player @@ -673,7 +674,7 @@ api: - lambda: |- if (current_page->state == "media_player" and !id(is_uploading_tft)) { detailed_entity->publish_state(entity); - disp1->set_component_text_printf("page_label", "%s", friendly_name.c_str()); + disp1->set_component_text("page_label", 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); @@ -689,10 +690,10 @@ api: // 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->set_component_text("bt_play_pause", "\uE409"); // mdi:play set_component_visibility->execute("bt_play_pause", true); } else if (supported_features & 1 and state == "playing" ) { //PAUSE - disp1->set_component_text_printf("bt_play_pause", "%s", "\uE3E3"); // mdi:pause + disp1->set_component_text("bt_play_pause", "\uE3E3"); // mdi:pause set_component_visibility->execute("bt_play_pause", true); } else set_component_visibility->execute("bt_play_pause", false); @@ -708,10 +709,10 @@ api: // 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->set_component_text("bt_mute", "\uEE07"); // mdi:volume-variant-off set_component_visibility->execute("bt_mute", true); } else if (supported_features & 8) { // mute - disp1->set_component_text_printf("bt_mute", "%s", "\uE57E"); // mdi:volume-low + disp1->set_component_text("bt_mute", "\uE57E"); // mdi:volume-low set_component_visibility->execute("bt_mute", true); } else set_component_visibility->execute("bt_mute", false); @@ -763,8 +764,8 @@ api: - lambda: |- if (!id(is_uploading_tft)) { set_component_visibility->execute("home.bt_qrcode", !(qrcode.empty())); - disp1->set_component_text_printf("qrcode.qrcode_label", "%s", title.c_str()); - disp1->set_component_text_printf("qrcode.qrcode_value", "%s", qrcode.c_str()); + disp1->set_component_text("qrcode.qrcode_label", title.c_str()); + disp1->set_component_text("qrcode.qrcode_value", qrcode.c_str()); if (show) goto_page->execute("qrcode"); blueprint_status->publish_state(int(blueprint_status->raw_state) | (1 << 2)); } @@ -775,7 +776,7 @@ api: tone: string # The RTTTL string for the melody to be played. It should follow the RTTTL format, including the melody's name, default settings, and a sequence of notes. then: - rtttl.play: - rtttl: !lambda 'return tone;' + rtttl: !lambda return tone; # Updates an entity to display specific values with dynamic icons, names, and color codes. - service: value @@ -789,18 +790,19 @@ api: then: - lambda: |- if (!id(is_uploading_tft) and !(id.empty())) { - if (!(icon.empty())) disp1->set_component_text_printf((id + "_icon").c_str(), "%s", icon.c_str()); + using namespace esphome::display; + if (!(icon.empty())) disp1->set_component_text((id + "_icon").c_str(), icon.c_str()); if (icon_color.size() == 3) - disp1->set_component_font_color((id + "_icon").c_str(), esphome::display::ColorUtil::color_to_565(esphome::Color(icon_color[0], - icon_color[1], - icon_color[2]))); + disp1->set_component_font_color((id + "_icon").c_str(), ColorUtil::color_to_565(esphome::Color(icon_color[0], + icon_color[1], + icon_color[2]))); - if (!(name.empty())) disp1->set_component_text_printf((id + "_label").c_str(), "%s", name.c_str()); - if (!(value.empty())) disp1->set_component_text_printf(id.c_str(), "%s", adjustDecimalSeparator(value, id(mui_decimal_separator)).c_str()); + if (!(name.empty())) disp1->set_component_text((id + "_label").c_str(), name.c_str()); + if (!(value.empty())) disp1->set_component_text(id.c_str(), adjustDecimalSeparator(value, id(mui_decimal_separator)).c_str()); if (value_color.size() == 3) - disp1->set_component_font_color(id.c_str(), esphome::display::ColorUtil::color_to_565(esphome::Color(value_color[0], - value_color[1], - value_color[2]))); + disp1->set_component_font_color(id.c_str(), ColorUtil::color_to_565(esphome::Color(value_color[0], + value_color[1], + value_color[2]))); if (current_page->state.find("entitypage") == 0 and !(value.empty())) { // Adjust value's font on entities pages // Adjusted length starts at 0 float adjusted_length = 0.0; @@ -808,7 +810,7 @@ api: // Iterate over each character in the string for (char const &c: value) { // Check if character is a space or other specified exceptions - if (std::string(" iljtIf'-,;:!.\"|()[]{}").find(c) != std::string::npos) { + if (display_charset->state == 2 or std::string(" iljtIf'-,;:!.\"|()[]{}").find(c) != std::string::npos) { adjusted_length += 0.5; // Count these as half } else { adjusted_length += 1.0; // Count all other characters as 1 @@ -816,9 +818,9 @@ api: } // Decide which font to use based on adjusted length if (adjusted_length > 8.0 and adjusted_length <= 12.0) { - disp1->send_command_printf("%s.font=1", id.c_str()); + disp1->set_component_font(id.c_str(), 1); } else if (adjusted_length > 12.0) { - disp1->send_command_printf("%s.font=0", id.c_str()); + disp1->set_component_font(id.c_str(), 0); } } } @@ -832,10 +834,10 @@ api: if (!id(is_uploading_tft)) { if (current_page->state == "screensaver") goto_page->execute(wakeup_page_name->state.c_str()); if (reset_timer) - timer_reset_all->execute(wakeup_page_name->state.c_str()); + timer_reset_all->execute(); 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)); + timer_sleep->execute(); + timer_dim->execute(); } } @@ -846,22 +848,23 @@ display: - id: disp1 platform: nextion uart_id: tf_uart + start_up_page: 0 # Boot page on_setup: - - script.execute: setup_sequence + lambda: |- + nextion_init->publish_state(true); + version_tft->update(); + goto_page->execute("boot"); + on_page: lambda: |- - if (!id(is_uploading_tft)) { - page_id->update(); - if (current_page->state != page_names[x] or x == 9) { - current_page->publish_state(page_names[x]); - page_changed->execute(page_names[x]); - } + if (current_page->state != page_names[x] or x == 9) { + current_page->publish_state(page_names[x]); } on_touch: lambda: |- if (!id(is_uploading_tft)) { - timer_reset_all->execute(page_names[page_id]); + timer_reset_all->execute(); switch (page_id) { case 10: // light switch (component_id) { @@ -982,12 +985,6 @@ globals: restore_value: false initial_value: 'false' - ##### Is boot sequence completed? ##### - - id: setup_sequence_completed - type: bool - restore_value: false - initial_value: 'false' - ##### Media Player ##### ###### Last volume level from Home Assistant ###### - id: last_volume_level @@ -1016,7 +1013,7 @@ globals: - id: embedded_indoor_temp type: bool restore_value: true - initial_value: 'false' + initial_value: 'true' ##### Date/time formats ##### - id: home_date_color @@ -1111,9 +1108,9 @@ binary_sensor: - if: condition: or: - - lambda: return (id(relay_settings) & nspanel_ha_blueprint::RelaySettings::Relay1_Local); + - lambda: return (id(relay_settings) & RelaySettings::Relay1_Local); - and: - - lambda: return (id(relay_settings) & nspanel_ha_blueprint::RelaySettings::Relay1_Fallback); + - lambda: return (id(relay_settings) & RelaySettings::Relay1_Fallback); - or: - not: - api.connected: @@ -1151,9 +1148,9 @@ binary_sensor: - if: condition: or: - - lambda: return (id(relay_settings) & nspanel_ha_blueprint::RelaySettings::Relay2_Local); + - lambda: return (id(relay_settings) & RelaySettings::Relay2_Local); - and: - - lambda: return (id(relay_settings) & nspanel_ha_blueprint::RelaySettings::Relay2_Fallback); + - lambda: return (id(relay_settings) & RelaySettings::Relay2_Fallback); - or: - not: - api.connected: @@ -1170,7 +1167,7 @@ binary_sensor: ##### Restart NSPanel Button - Setting Page ##### - name: Restart platform: nextion - page_id: 7 + page_id: 8 component_id: 9 internal: true on_click: @@ -1178,7 +1175,7 @@ binary_sensor: ##### Restart NSPanel Button - Boot Page ##### - name: Restart platform: nextion - page_id: 8 + page_id: 0 component_id: 4 internal: true on_click: @@ -1241,12 +1238,11 @@ number: then: - lambda: |- disp1->send_command_printf("brightness=%i", int(x)); - disp1->send_command_printf("settings.brightslider.val=%i", int(x)); + disp1->set_component_value("settings.brightslider", int(x)); if (current_page->state != "screensaver") { - disp1->set_backlight_brightness(x/100); - current_brightness->update(); - timer_dim->execute(current_page->state.c_str(), int(timeout_dim->state)); - timer_sleep->execute(current_page->state.c_str(), int(timeout_sleep->state)); + set_brightness->execute(x); + timer_dim->execute(); + timer_sleep->execute(); if (current_page->state == "settings") disp1->set_component_text_printf("bright_text", "%i%%", int(x)); } @@ -1266,10 +1262,10 @@ number: then: - lambda: |- disp1->send_command_printf("brightness_dim=%i", int(x)); - disp1->send_command_printf("settings.dimslider.val=%i", int(x)); + disp1->set_component_value("settings.dimslider", int(x)); if (current_page->state != "screensaver" and current_brightness->state <= x) { set_brightness->execute(x); - timer_sleep->execute(current_page->state.c_str(), int(timeout_sleep->state)); + timer_sleep->execute(); if (current_page->state == "settings") disp1->set_component_text_printf("dim_text", "%i%%", int(x)); } @@ -1324,7 +1320,7 @@ number: icon: mdi:timer unit_of_measurement: "s" on_value: - - lambda: timer_page->execute(current_page->state.c_str(), int(x)); + - lambda: timer_page->execute(); - name: Timeout Dimming platform: template id: timeout_dim @@ -1338,7 +1334,7 @@ number: icon: mdi:timer unit_of_measurement: "s" on_value: - - lambda: timer_dim->execute(current_page->state.c_str(), int(x)); + - lambda: timer_dim->execute(); - name: Timeout Sleep platform: template id: timeout_sleep @@ -1353,8 +1349,8 @@ number: unit_of_measurement: "s" on_value: - lambda: |- - timer_dim->execute(current_page->state.c_str(), int(timeout_dim->state)); - timer_sleep->execute(current_page->state.c_str(), int(x)); + timer_dim->execute(); + timer_sleep->execute(); ##### START - SELECT CONFIGURATION ##### select: @@ -1441,9 +1437,7 @@ sensor: return 0; on_value: then: - - lambda: |- - // Update api value on Nextion - disp1->send_command_printf("api=%i", (x > 99) ? 1 : 0); + - script.execute: refresh_wifi_icon ##### INTERNAL TEMPERATURE SENSOR, ADC VALUE ##### - id: ntc_source @@ -1451,6 +1445,7 @@ sensor: pin: 38 update_interval: 60s attenuation: 11db + samples: 12 ##### INTERNAL TEMPERATURE SENSOR, adc reading converted to resistance (calculation)##### - id: resistance_sensor @@ -1488,9 +1483,9 @@ sensor: then: - number.set: id: display_brightness - value: !lambda 'return int(x);' + value: !lambda return int(x); - lambda: |- - timer_reset_all->execute("settings"); + timer_reset_all->execute(); ###### Display DIM Brightness GET VALUE FROM NSPanel SLIDER ##### - id: dimslider @@ -1502,9 +1497,9 @@ sensor: then: - number.set: id: display_dim_brightness - value: !lambda 'return int(x);' + value: !lambda return int(x); - lambda: |- - timer_reset_all->execute("settings"); + timer_reset_all->execute(); ###### Display Brightness - Current value (%) ##### - id: current_brightness @@ -1518,23 +1513,6 @@ sensor: internal: false disabled_by_default: false - ###### Page Id - Current ##### - - id: page_id - name: Page Id - platform: nextion - variable_name: dp - precision: 0 - accuracy_decimals: 0 - internal: true - entity_category: diagnostic - on_value: - then: - - lambda: |- - if (!id(is_uploading_tft) and current_page->state != page_names[x]) { - current_page->publish_state(page_names[x]); - page_changed->execute(page_names[x]); - } - ##### Display mode (1 = EU, 2 = US, 3 = US Landscape) - id: display_mode name: Display mode @@ -1628,8 +1606,7 @@ switch: - lambda: !lambda return disp1->is_setup(); timeout: 20s - lambda: |- - nextion_init->publish_state(disp1->is_setup()); - goto_page->execute(wakeup_page_name->state.c_str()); + goto_page->execute("boot"); on_turn_off: - lambda: |- nextion_init->publish_state(false); @@ -1644,6 +1621,21 @@ text_sensor: entity_category: diagnostic internal: false disabled_by_default: false + lambda: return {"${name}"}; + filters: + - lambda: |- + std::string result; + bool last_was_underscore = false; + for (char& c : x) { + if (isalnum(c)) { + result += tolower(c); // Add alphanumeric characters as lowercase + last_was_underscore = false; + } else if (!last_was_underscore) { // Replace non-alphanumeric with '_' but avoid consecutive '_' + result += '_'; + last_was_underscore = true; + } + } + return result; ##### Entity Id of the entity displayed on the detailed pages - id: detailed_entity @@ -1656,10 +1648,21 @@ text_sensor: ##### Current page name ##### - id: current_page name: Current Page - platform: template + platform: nextion + component_name: current_page icon: mdi:tablet-dashboard internal: false disabled_by_default: false + filters: + - lambda: |- + x = x.c_str(); + x.shrink_to_fit(); + return x; + on_value: + lambda: |- + if (!id(is_uploading_tft)) { + page_changed->execute(); + } - id: notification_label name: Notification Label @@ -1689,12 +1692,13 @@ text_sensor: deserializeJson(doc, x); std::string page = doc["page"]; std::string component = doc["component"]; - if (not (component == "currentpage" and (page == "screensaver" or page == "home"))) timer_reset_all->execute(page.c_str()); + if (not (component == "currentpage" and (page == "screensaver" or page == "home"))) timer_reset_all->execute(); std::string value = doc["value"]; std::string entity = detailed_entity->state.c_str(); // doc["entity"]; - auto ha_event = new esphome::api::CustomAPIDevice(); - ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint", + esphome::api::CustomAPIDevice ha_event; + ha_event.fire_homeassistant_event("esphome.nspanel_ha_blueprint", { + {"device_name", device_name->state.c_str()}, {"type", "generic"}, {"page", page}, {"component", component}, @@ -1742,6 +1746,7 @@ text_sensor: } else if (page == "light" or page == "climate") { // Generic event esphome::api::CustomAPIDevice ha_event; ha_event.fire_homeassistant_event("esphome.nspanel_ha_blueprint", { + {"device_name", device_name->state.c_str()}, {"type", "generic"}, {"page", page}, {"event", event}, @@ -1760,11 +1765,11 @@ text_sensor: { goto_page->execute("keyb_num"); disp1->set_component_value("keyb_num.page_id", 23); //Calling from Alarm page - disp1->set_component_text_printf("keyb_num.domain", "%s", page.c_str()); - disp1->set_component_text_printf("keyb_num.key", "%s", key.c_str()); - disp1->set_component_text_printf("keyb_num.value", "%s", value.c_str()); - disp1->set_component_text_printf("keyb_num.entity", "%s", entity.c_str()); - disp1->set_component_text_printf("keyb_num.title", "%s", title.c_str()); + disp1->set_component_text("keyb_num.domain", page.c_str()); + disp1->set_component_text("keyb_num.key", key.c_str()); + disp1->set_component_text("keyb_num.value", value.c_str()); + disp1->set_component_text("keyb_num.entity", entity.c_str()); + disp1->set_component_text("keyb_num.title", title.c_str()); } else service_call_alarm_control_panel->execute(entity.c_str(), key.c_str(), code_format.c_str(), ""); } @@ -1801,20 +1806,35 @@ text_sensor: name: Version TFT platform: nextion component_name: boot.tft_version - # entity_category: diagnostic - # icon: mdi:tag-text-outline - internal: true + entity_category: diagnostic + icon: mdi:tag-text-outline + internal: false update_interval: never on_value: - lambda: |- - if (current_page->state == "boot") { - page_boot->execute(); - timer_reset_all->execute("boot"); - } check_versions->execute(); ### Scripts ###### script: + - id: boot_progress + mode: restart + parameters: + step: uint + then: + - lambda: |- + timer_reset_all->execute(); + if (step == 10) { + ESP_LOGD("script.boot_progress", "Progress: Completed"); + disp1->set_component_value("boot.progress", 100); + } else { + step = std::min(100, int(round((blueprint_status->state + (step*10))/2))); + ESP_LOGD("script.boot_progress", "Progress: %i%%", step); + disp1->set_component_value("boot.progress", step); + } + if (current_page->state == "boot" and !isnan(display_charset->state) and !isnan(display_mode->state) and !version_tft->state.empty()) + disp1->send_command_printf("tm_esphome.en=0"); + + - id: change_climate_state mode: restart parameters: @@ -1851,9 +1871,10 @@ script: if (not compare_versions("${version}", id(version_blueprint))) ESP_LOGE("script.check_versions", "Blueprint version mismatch!"); - auto ha_event = new esphome::api::CustomAPIDevice(); - ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint", + esphome::api::CustomAPIDevice ha_event; + ha_event.fire_homeassistant_event("esphome.nspanel_ha_blueprint", { + {"device_name", device_name->state.c_str()}, {"type", "version"}, {"tft", version_tft->state.c_str()}, {"esphome", "${version}"}, @@ -1865,15 +1886,17 @@ script: mode: restart then: - lambda: |- - float unit_based_temperature = id(temp_nspanel).state; - char buffer[15]; // Buffer for formatted temperature string - if ("${temp_units}"[0] == 'F' || "${temp_units}"[0] == 'f') { - unit_based_temperature = (unit_based_temperature * 9.0 / 5.0) + 32; // Convert to Fahrenheit if necessary - snprintf(buffer, sizeof(buffer), "%.0f°F", unit_based_temperature); // Fahrenheit with no decimal - } else { - snprintf(buffer, sizeof(buffer), "%.1f°C", unit_based_temperature); // Celsius with one decimal + if (id(embedded_indoor_temp) or !wifi_component->is_connected() or !api_server->is_connected()) { + float unit_based_temperature = id(temp_nspanel).state; + char buffer[15]; // Buffer for formatted temperature string + if ("${temp_units}"[0] == 'F' || "${temp_units}"[0] == 'f' || "${temp_units}"[1] == 'F' || "${temp_units}"[1] == 'f') { + unit_based_temperature = (unit_based_temperature * 9.0 / 5.0) + 32; // Convert to Fahrenheit if necessary + snprintf(buffer, sizeof(buffer), "%.0f${temp_units}", unit_based_temperature); // Fahrenheit with no decimal + } else { + snprintf(buffer, sizeof(buffer), "%.1f${temp_units}", unit_based_temperature); // Celsius with one decimal + } + id(disp1)->set_component_text("home.indr_temp", adjustDecimalSeparator(buffer, id(mui_decimal_separator)).c_str()); } - id(disp1)->set_component_text("home.indr_temp", adjustDecimalSeparator(buffer, id(mui_decimal_separator)).c_str()); - id: display_wrapped_text mode: parallel @@ -1909,7 +1932,7 @@ script: while (text_to_display[startPos] == ' ' and startPos < text_to_display.length()) { startPos++; } } } - disp1->set_component_text_printf(component.c_str(), "%s", wrappedText.c_str()); + disp1->set_component_text(component.c_str(), wrappedText.c_str()); - id: global_settings mode: restart @@ -1925,10 +1948,10 @@ script: then: - lambda: |- if (id(is_uploading_tft)) global_settings->stop(); + if (blueprint_status->state <= 99) goto_page->execute("boot"); // Blueprint version - nspanel_ha_blueprint::copyStringToCharArray(id(version_blueprint), blueprint_version); - disp1->set_component_text_printf("boot.bluep_version", "%s", blueprint_version.c_str()); - if (current_page->state == "boot") page_boot->execute(); + copyStringToCharArray(id(version_blueprint), blueprint_version); + disp1->set_component_text("boot.bluep_version", blueprint_version.c_str()); check_versions->execute(); // MUI strings @@ -1938,7 +1961,9 @@ script: // Screen saver page (sleep) id(screensaver_display_time) = screensaver_time; id(screensaver_display_time_font) = screensaver_time_font; - id(screensaver_display_time_color) = esphome::display::ColorUtil::color_to_565(esphome::Color(screensaver_time_color[0], screensaver_time_color[1], screensaver_time_color[2])); + id(screensaver_display_time_color) = esphome::display::ColorUtil::color_to_565(esphome::Color(screensaver_time_color[0], + screensaver_time_color[1], + screensaver_time_color[2])); page_screensaver->execute(); // Entities pages alignment @@ -1949,46 +1974,8 @@ script: if (current_page->state != "boot") { // Update current page - page_changed->execute(current_page->state.c_str()); + page_changed->execute(); } - disp1->set_component_text_printf("boot.bluep_version", "%s", blueprint_version.c_str()); - - - if: - condition: - - text_sensor.state: # Is boot page visible? - id: current_page - state: boot - then: - - lambda: |- - ESP_LOGV("script.global_settings", "Boot page is visible"); - - wait_until: - condition: - - not: - - text_sensor.state: # Is boot page visible? - id: current_page - state: 'boot' - timeout: 2s - - if: - condition: - - text_sensor.state: # Avoid this being called twice by multiple boot triggers - id: current_page - state: 'boot' - then: - - lambda: |- - ESP_LOGV("script.global_settings", "Boot page still visible"); - - if: - condition: - switch.is_on: notification_sound - then: - - 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", wakeup_page_name->state.c_str()); - goto_page->execute(wakeup_page_name->state.c_str()); - timer_reset_all->execute(wakeup_page_name->state.c_str()); - - - lambda: |- - ESP_LOGV("script.global_settings", "Finished"); - id: goto_page mode: restart @@ -1996,8 +1983,9 @@ script: page: string then: - lambda: |- - if (current_page->state != page) + if (current_page->state != page) { disp1->goto_page(page.c_str()); + } - id: ha_button mode: parallel @@ -2008,10 +1996,11 @@ script: 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", + timer_reset_all->execute(); + esphome::api::CustomAPIDevice ha_event; + ha_event.fire_homeassistant_event("esphome.nspanel_ha_blueprint", { + {"device_name", device_name->state.c_str()}, {"type", "button_click"}, {"page", page}, {"component", component}, @@ -2029,9 +2018,10 @@ script: - lambda: |- if (!id(is_uploading_tft)) { if (service != "" and not service.empty()) { - auto ha_event = new esphome::api::CustomAPIDevice(); - ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint", + esphome::api::CustomAPIDevice ha_event; + ha_event.fire_homeassistant_event("esphome.nspanel_ha_blueprint", { + {"device_name", device_name->state.c_str()}, {"type", "service_call"}, {"service", service}, {"key", key}, @@ -2064,7 +2054,7 @@ script: mode: restart then: - lambda: |- - ESP_LOGV("script.page_blank", "Construct blank page"); + ESP_LOGW("script.page_blank", "Construct blank page"); disp1->set_component_text_printf("esp_version", "ESP: ${version}"); // ESPHome version #ifdef ARDUINO disp1->set_component_text_printf("framework", "Arduino"); @@ -2074,19 +2064,109 @@ script: disp1->send_command_printf("tm_esphome.en=0"); - id: page_boot - mode: restart + mode: single then: + - logger.log: Page boot called - lambda: |- + boot_progress->execute(0); set_brightness->execute(100); + update_tft_info->execute(); disp1->set_component_text_printf("boot.esph_version", "${version}"); // ESPHome version - if (current_page->state == "boot") { - #ifdef ARDUINO - disp1->set_component_text_printf("framework", "Arduino"); - #elif defined(USE_ESP_IDF) - disp1->set_component_text_printf("framework", "ESP-IDF"); - #endif - disp1->send_command_printf("tm_esphome.en=0"); + boot_progress->execute(1); + #ifdef ARDUINO + disp1->set_component_text("framework", "Arduino"); + #elif defined(USE_ESP_IDF) + disp1->set_component_text("framework", "ESP-IDF"); + #endif + boot_progress->execute(2); + - logger.log: Wait for Wi-Fi + - wait_until: + condition: + - lambda: return (wifi_component->is_connected()); + timeout: 10s + - if: + condition: + - lambda: return (wifi_component->is_connected()); + then: # Wi-Fi connected + - logger.log: Wi-Fi connected + - lambda: |- + boot_progress->execute(3); + if (current_page->state == "boot") { + disp1->set_component_text("ip_addr", network::get_ip_addresses()[0].str().c_str()); + set_brightness->execute(100); + } + - logger.log: Wait for API + - wait_until: + condition: + - lambda: return (api_server->is_connected()); + timeout: 10s + - if: + condition: + - lambda: return (api_server->is_connected()); + then: # API connected + - logger.log: API connected + - lambda: |- + boot_progress->execute(4); + if (blueprint_status->state <= 99) { + esphome::api::CustomAPIDevice ha_event; + ha_event.fire_homeassistant_event("esphome.nspanel_ha_blueprint", + { + {"device_name", device_name->state.c_str()}, + {"type", "boot"}, + {"step", "start"} + }); + } + - wait_until: + condition: + - lambda: return (wifi_component->is_connected() and api_server->is_connected() and blueprint_status->state > 99); + timeout: 5s + - lambda: |- + boot_progress->execute(5); + disp1->send_command_printf("brightness=%i", int(display_brightness->state)); + disp1->set_component_value("settings.brightslider", int(display_brightness->state)); + disp1->send_command_printf("brightness_dim=%i", int(display_dim_brightness->state)); + disp1->set_component_value("settings.dimslider", int(display_dim_brightness->state)); + disp1->send_command_printf("brightness_sleep=%i", int(display_sleep_brightness->state)); + boot_progress->execute(6); + nextion_init->publish_state(disp1->is_setup()); + if (api_server->is_connected() and disp1->is_setup()) { + esphome::api::CustomAPIDevice ha_event; + ha_event.fire_homeassistant_event("esphome.nspanel_ha_blueprint", + { + {"device_name", device_name->state.c_str()}, + {"type", "boot"}, + {"step", "nextion_init"} + }); } + boot_progress->execute(7); + // Chips icon size + for (int i = 1; i <= 7; ++i) { + disp1->send_command_printf("home.chip%02d.font=%i", i, id(home_chip_font_id)); + } + // Custom buttons icon size + for (int i = 1; i <= 7; ++i) { + disp1->send_command_printf("home.button%02d.font=%i", i, id(home_custom_buttons_font_id)); + } + disp1->set_component_font("home.bt_notific", id(home_custom_buttons_font_id)); + disp1->set_component_font("home.bt_qrcode", id(home_custom_buttons_font_id)); + disp1->set_component_font("home.bt_entities", id(home_custom_buttons_font_id)); + disp1->set_component_font("home.wifi_icon", id(home_chip_font_id)); + disp1->set_component_font_color("home.chip_relay1", id(home_relay1_icon_color)); + disp1->set_component_font_color("home.chip_relay2", id(home_relay2_icon_color)); + boot_progress->execute(8); + - wait_until: + condition: + - lambda: return (wifi_component->is_connected() and api_server->is_connected() and blueprint_status->state > 99); + timeout: 10s + - lambda: boot_progress->execute(9); + - delay: 5s + - lambda: boot_progress->execute(10); + - delay: 1s + - lambda: |- + if (notification_sound->state) buzzer->play("two short:d=4,o=5,b=100:16e6,16e6"); + set_brightness->execute(display_brightness->state); + ESP_LOGD("script.page_boot", "Jump to wake-up page: %s", wakeup_page_name->state.c_str()); + goto_page->execute(wakeup_page_name->state.c_str()); - id: page_buttonpage mode: restart @@ -2120,32 +2200,33 @@ script: - id: page_changed mode: restart - parameters: - page: string then: - lambda: |- - // Go to boot page if not initiated - if (not nextion_init->state) goto_page->execute("boot"); - // Reset globals - if (page != "alarm" && - page != "climate" && - page != "cover" && - page != "fan" && - page != "light" && - page != "media_player" && - page != "confirm" && - page != "keyb_num") { - detailed_entity->publish_state(""); - disp1->send_command_printf("back_page_id=0"); + // Report new page to logs + ESP_LOGD("script.page_changed", "New page: %s", current_page->state.c_str()); + if (current_page->state.empty()) { + goto_page->execute("boot"); + page_changed->stop(); } - if (page != "media_player") { + + // Reset globals + if (current_page->state != "alarm" && + current_page->state != "climate" && + current_page->state != "cover" && + current_page->state != "fan" && + current_page->state != "light" && + current_page->state != "media_player" && + current_page->state != "confirm" && + current_page->state != "keyb_num") { + detailed_entity->publish_state(""); + disp1->send_command_printf("back_page_id=1"); + } + if (current_page->state != "media_player") { id(last_volume_level) = 0; id(last_media_duration) = 0; id(last_media_position) = 0; } - // Report new page to logs - ESP_LOGD("script.page_changed", "New page: %s", page.c_str()); if (!detailed_entity->state.empty()) ESP_LOGD("script.page_changed", "Entity shown: %s", detailed_entity->state.c_str()); @@ -2153,47 +2234,48 @@ script: refresh_hardware_buttons_bars->execute(); // Reset timers - timer_reset_all->execute(page.c_str()); + if (current_page->state != "screensaver") timer_reset_all->execute(); // Report new page to Home Assistant - auto ha_event = new esphome::api::CustomAPIDevice(); - ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint", + esphome::api::CustomAPIDevice ha_event; + ha_event.fire_homeassistant_event("esphome.nspanel_ha_blueprint", { + {"device_name", device_name->state.c_str()}, {"type", "page_changed"}, - {"page", page.c_str()}, + {"page", current_page->state.c_str()}, {"entity", detailed_entity->state.c_str()} }); // Call page constructor - if (page == "alarm") page_alarm->execute(); - else if (page == "blank") page_blank->execute(); - else if (page == "boot") page_boot->execute(); - else if (page == "buttonpage01") page_buttonpage01->execute(); - else if (page == "buttonpage02") page_buttonpage02->execute(); - else if (page == "buttonpage03") page_buttonpage03->execute(); - else if (page == "buttonpage04") page_buttonpage04->execute(); - else if (page == "climate") page_climate->execute(); - else if (page == "confirm") page_confirm->execute(); - else if (page == "cover") page_cover->execute(); - else if (page == "entitypage01") page_entitypage01->execute(); - else if (page == "entitypage02") page_entitypage02->execute(); - else if (page == "entitypage03") page_entitypage03->execute(); - else if (page == "entitypage04") page_entitypage04->execute(); - else if (page == "fan") page_fan->execute(); - else if (page == "home") page_home->execute(); - else if (page == "keyb_num") page_keyb_num->execute(); - else if (page == "light") page_light->execute(); - else if (page == "media_player") page_media_player->execute(); - else if (page == "notification") page_notification->execute(); - else if (page == "qrcode") page_qrcode->execute(); - else if (page == "screensaver") page_screensaver->execute(); - else if (page == "settings") page_settings->execute(); - else if (page == "utilities") page_utilities->execute(); - else if (page == "weather01") page_weather01->execute(); - else if (page == "weather02") page_weather02->execute(); - else if (page == "weather03") page_weather03->execute(); - else if (page == "weather04") page_weather04->execute(); - else if (page == "weather05") page_weather05->execute(); + if (current_page->state == "alarm") page_alarm->execute(); + else if (current_page->state == "blank") page_blank->execute(); + else if (current_page->state == "boot") page_boot->execute(); + else if (current_page->state == "buttonpage01") page_buttonpage01->execute(); + else if (current_page->state == "buttonpage02") page_buttonpage02->execute(); + else if (current_page->state == "buttonpage03") page_buttonpage03->execute(); + else if (current_page->state == "buttonpage04") page_buttonpage04->execute(); + else if (current_page->state == "climate") page_climate->execute(); + else if (current_page->state == "confirm") page_confirm->execute(); + else if (current_page->state == "cover") page_cover->execute(); + else if (current_page->state == "entitypage01") page_entitypage01->execute(); + else if (current_page->state == "entitypage02") page_entitypage02->execute(); + else if (current_page->state == "entitypage03") page_entitypage03->execute(); + else if (current_page->state == "entitypage04") page_entitypage04->execute(); + else if (current_page->state == "fan") page_fan->execute(); + else if (current_page->state == "home") page_home->execute(); + else if (current_page->state == "keyb_num") page_keyb_num->execute(); + else if (current_page->state == "light") page_light->execute(); + else if (current_page->state == "media_player") page_media_player->execute(); + else if (current_page->state == "notification") page_notification->execute(); + else if (current_page->state == "qrcode") page_qrcode->execute(); + else if (current_page->state == "screensaver") page_screensaver->execute(); + else if (current_page->state == "settings") page_settings->execute(); + else if (current_page->state == "utilities") page_utilities->execute(); + else if (current_page->state == "weather01") page_weather01->execute(); + else if (current_page->state == "weather02") page_weather02->execute(); + else if (current_page->state == "weather03") page_weather03->execute(); + else if (current_page->state == "weather04") page_weather04->execute(); + else if (current_page->state == "weather05") page_weather05->execute(); - delay: 1s - script.execute: refresh_hardware_buttons_bars @@ -2277,7 +2359,7 @@ script: mode: restart then: - lambda: |- - disp1->set_component_text_printf("notification.notifi_label", "%s", notification_label->state.c_str()); + disp1->set_component_text("notification.notifi_label", notification_label->state.c_str()); display_wrapped_text->execute("notification.notifi_text01", notification_text->state.c_str(), display_mode->state == 2 ? 23 : 32); - id: page_qrcode @@ -2291,21 +2373,18 @@ script: if (current_page->state == "screensaver" and !id(is_uploading_tft)) { disp1->send_command_printf("back_page_id=%" PRIu8, get_page_id(wakeup_page_name->state.c_str())); if (id(screensaver_display_time)) { - disp1->send_command_printf("screensaver.text.font=%i", id(screensaver_display_time_font)); + disp1->set_component_font("screensaver.text", id(screensaver_display_time_font)); disp1->set_component_font_color("screensaver.text", id(screensaver_display_time_color)); set_component_visibility->execute("screensaver.text", true); refresh_datetime->execute(); - } else { - disp1->set_backlight_brightness(0.0f); } - current_brightness->update(); + set_brightness->execute(display_sleep_brightness->state); } - id: page_settings mode: restart then: - lambda: |- - //disp1->set_component_text_printf("bt_sleep", "%s", (id(sleep_mode).state) ? "\uEA19" : "\uEA18"); //mdi:toggle-switch-outline or mdi:toggle-switch-off-outline set_component_visibility->execute("page_settings.lbl_sleep", false); set_component_visibility->execute("page_settings.bt_sleep", false); @@ -2374,45 +2453,75 @@ script: std::string time_format_str_sleep = time_format_str; if (time_format_str_sleep.find("%p") != std::string::npos) time_format_str_sleep.replace(time_format_str_sleep.find("%p"), sizeof("%p")-1, meridiem_text.c_str()); - disp1->set_component_text_printf("text", "%s", id(time_provider).now().strftime(time_format_str_sleep).c_str()); + disp1->set_component_text("text", id(time_provider).now().strftime(time_format_str_sleep).c_str()); } - disp1->set_component_text_printf("home.meridiem", "%s", (time_format_str.find("%p") != std::string::npos) ? meridiem_text.c_str() : " "); - disp1->set_component_text_printf("home.time", "%s", id(time_provider).now().strftime(time_format_str).c_str()); + disp1->set_component_text("home.meridiem", (time_format_str.find("%p") != std::string::npos) ? meridiem_text.c_str() : " "); + disp1->set_component_text("home.time", id(time_provider).now().strftime(time_format_str).c_str()); - id: refresh_hardware_buttons_bars mode: restart then: - lambda: |- + #if ESPHOME_LOG_LEVEL > ESPHOME_LOG_LEVEL_DEBUG + ESP_LOGV("script.refresh_hardware_buttons_bars", "Page: %s", current_page->state.c_str()); + ESP_LOGV("script.refresh_hardware_buttons_bars", "Page id: %i", get_page_id(current_page->state.c_str())); + ESP_LOGV("script.refresh_hardware_buttons_bars", "buttons_bars_pages: %i", id(buttons_bars_pages)); + ESP_LOGV("script.refresh_hardware_buttons_bars", "relay_settings: %i", id(relay_settings)); + #endif if (!id(is_uploading_tft) and ((id(buttons_bars_pages) & (1 << get_page_id(current_page->state.c_str()))) != 0)) { switch (int(display_mode->state)) { case 1: // EU model - if (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonLeft_Enabled) { // Left button - disp1->fill_area(48, 307, 118, 3, (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonLeft_State) ? id(buttons_color_on) : id(buttons_color_off)); - disp1->fill_area(47, 308, 120, 1, (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonLeft_State) ? id(buttons_color_on) : id(buttons_color_off)); + if (id(buttons_settings) & ButtonSettings::ButtonLeft_Enabled) { // Left button + disp1->fill_area(48, 307, 118, 3, + (((id(relay_settings) & RelaySettings::Relay1_Local) and relay_1->state) or (id(buttons_settings) & ButtonSettings::ButtonLeft_State)) ? + id(buttons_color_on) : id(buttons_color_off)); + disp1->fill_area(47, 308, 120, 1, + (((id(relay_settings) & RelaySettings::Relay1_Local) and relay_1->state) or (id(buttons_settings) & ButtonSettings::ButtonLeft_State)) ? + id(buttons_color_on) : id(buttons_color_off)); } - if (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonRight_Enabled) { // Right button - disp1->fill_area(289, 307, 118, 3, (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonRight_State) ? id(buttons_color_on) : id(buttons_color_off)); - disp1->fill_area(288, 308, 120, 1, (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonRight_State) ? id(buttons_color_on) : id(buttons_color_off)); + if (id(buttons_settings) & ButtonSettings::ButtonRight_Enabled) { // Right button + disp1->fill_area(289, 307, 118, 3, + (((id(relay_settings) & RelaySettings::Relay2_Local) and relay_2->state) or (id(buttons_settings) & ButtonSettings::ButtonRight_State)) ? + id(buttons_color_on) : id(buttons_color_off)); + disp1->fill_area(288, 308, 120, 1, + (((id(relay_settings) & RelaySettings::Relay2_Local) and relay_2->state) or (id(buttons_settings) & ButtonSettings::ButtonRight_State)) ? + id(buttons_color_on) : id(buttons_color_off)); } break; case 2: // US Portrait - if (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonLeft_Enabled) { // Left button - disp1->fill_area(17, 466, 118, 3, (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonLeft_State) ? id(buttons_color_on) : id(buttons_color_off)); - disp1->fill_area(16, 467, 120, 1, (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonLeft_State) ? id(buttons_color_on) : id(buttons_color_off)); + if (id(buttons_settings) & ButtonSettings::ButtonLeft_Enabled) { // Left button + disp1->fill_area(17, 466, 118, 3, + (((id(relay_settings) & RelaySettings::Relay1_Local) and relay_1->state) or (id(buttons_settings) & ButtonSettings::ButtonLeft_State)) ? + id(buttons_color_on) : id(buttons_color_off)); + disp1->fill_area(16, 467, 120, 1, + (((id(relay_settings) & RelaySettings::Relay1_Local) and relay_1->state) or (id(buttons_settings) & ButtonSettings::ButtonLeft_State)) ? + id(buttons_color_on) : id(buttons_color_off)); } - if (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonRight_Enabled) { // Right button - disp1->fill_area(184, 466, 118, 3, (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonRight_State) ? id(buttons_color_on) : id(buttons_color_off)); - disp1->fill_area(183, 467, 120, 1, (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonRight_State) ? id(buttons_color_on) : id(buttons_color_off)); + if (id(buttons_settings) & ButtonSettings::ButtonRight_Enabled) { // Right button + disp1->fill_area(184, 466, 118, 3, + (((id(relay_settings) & RelaySettings::Relay2_Local) and relay_2->state) or (id(buttons_settings) & ButtonSettings::ButtonRight_State)) ? + id(buttons_color_on) : id(buttons_color_off)); + disp1->fill_area(183, 467, 120, 1, + (((id(relay_settings) & RelaySettings::Relay2_Local) and relay_2->state) or (id(buttons_settings) & ButtonSettings::ButtonRight_State)) ? + id(buttons_color_on) : id(buttons_color_off)); } break; case 3: // US Landscape - if (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonLeft_Enabled) { // Left button - disp1->fill_area(467, 174, 3, 118, (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonLeft_State) ? id(buttons_color_on) : id(buttons_color_off)); - disp1->fill_area(468, 173, 1, 120, (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonLeft_State) ? id(buttons_color_on) : id(buttons_color_off)); + if (id(buttons_settings) & ButtonSettings::ButtonLeft_Enabled) { // Left button + disp1->fill_area(467, 174, 3, 118, + (((id(relay_settings) & RelaySettings::Relay1_Local) and relay_1->state) or (id(buttons_settings) & ButtonSettings::ButtonLeft_State)) ? + id(buttons_color_on) : id(buttons_color_off)); + disp1->fill_area(468, 173, 1, 120, + (((id(relay_settings) & RelaySettings::Relay1_Local) and relay_1->state) or (id(buttons_settings) & ButtonSettings::ButtonLeft_State)) ? + id(buttons_color_on) : id(buttons_color_off)); } - if (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonRight_Enabled) { // Right button - disp1->fill_area(467, 28, 3, 118, (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonRight_State) ? id(buttons_color_on) : id(buttons_color_off)); - disp1->fill_area(468, 27, 1, 120, (id(buttons_settings) & nspanel_ha_blueprint::ButtonSettings::ButtonRight_State) ? id(buttons_color_on) : id(buttons_color_off)); + if (id(buttons_settings) & ButtonSettings::ButtonRight_Enabled) { // Right button + disp1->fill_area(467, 28, 3, 118, + (((id(relay_settings) & RelaySettings::Relay2_Local) and relay_2->state) or (id(buttons_settings) & ButtonSettings::ButtonRight_State)) ? + id(buttons_color_on) : id(buttons_color_off)); + disp1->fill_area(468, 27, 1, 120, + (((id(relay_settings) & RelaySettings::Relay2_Local) and relay_2->state) or (id(buttons_settings) & ButtonSettings::ButtonRight_State)) ? + id(buttons_color_on) : id(buttons_color_off)); } break; } @@ -2423,27 +2532,26 @@ script: then: - lambda: |- // Chips - Relays - disp1->set_component_text_printf("home.chip_relay1", "%s", (relay_1->state) ? id(home_relay1_icon) : "\uFFFF"); - disp1->set_component_text_printf("home.chip_relay2", "%s", (relay_2->state) ? id(home_relay2_icon) : "\uFFFF"); - // Hardware buttons bars - Fallback mode - if (id(relay_settings) & nspanel_ha_blueprint::RelaySettings::Relay1_Local) disp1->send_command_printf("home.left_bt_pic.val=%i", (relay_1->state) ? 1 : 0); - if (id(relay_settings) & nspanel_ha_blueprint::RelaySettings::Relay2_Local) disp1->send_command_printf("home.right_bt_pic.val=%i", (relay_2->state) ? 1 : 0); + disp1->set_component_text("home.chip_relay1", (relay_1->state) ? id(home_relay1_icon) : "\uFFFF"); + disp1->set_component_text("home.chip_relay2", (relay_2->state) ? id(home_relay2_icon) : "\uFFFF"); + refresh_hardware_buttons_bars->execute(); - id: refresh_wifi_icon mode: restart then: - lambda: |- if (nextion_init->state) { + disp1->send_command_printf("api=%i", (wifi_component->is_connected() and api_server->is_connected() and blueprint_status->state > 99) ? 1 : 0); // Update Wi-Fi icon color 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() ? - ((blueprint_status->state > 99) ? "\uE5A8" : // mdi:wifi - All right! - "\uE7CF") : // mdi:home-assistant - Blueprint is out - "\uF256") : // mdi:api-off - "\uE5A9"); // mdi:wifi-off + disp1->set_component_text("home.wifi_icon", + wifi_component->is_connected() ? + (api_server->is_connected() ? + ((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: restore_settings @@ -2496,14 +2604,14 @@ script: then: - if: condition: - - lambda: !lambda return (tf_uart->get_baud_rate() != baud_rate); + - lambda: return (tf_uart->get_baud_rate() != baud_rate); then: - lambda: |- ESP_LOGD("script.set_baud_rate", "Baud rate changing from %" PRIu32 " to %" PRIu32 " bps", tf_uart->get_baud_rate(), baud_rate); ESP_LOGD("script.set_baud_rate", "Flush UART"); - wait_until: condition: - - lambda: !lambda return (tf_uart->available() < 1); + - lambda: return (tf_uart->available() < 1); timeout: 5s - lambda: |- ESP_LOGD("script.set_baud_rate", "Sending instruction '%s=%" PRIu32 "' to Nextion", definitive ? "bauds" : "baud", baud_rate); @@ -2511,7 +2619,7 @@ script: ESP_LOGD("script.set_baud_rate", "Flush UART"); - wait_until: condition: - - lambda: !lambda return (tf_uart->available() < 1); + - lambda: return (tf_uart->available() < 1); timeout: 5s - lambda: |- ESP_LOGD("script.set_baud_rate", "Set ESPHome new baud rate to %" PRIu32 " bps", baud_rate); @@ -2623,118 +2731,14 @@ script: show: bool then: - lambda: |- - nspanel_ha_blueprint::NextionComponent component = nspanel_ha_blueprint::extractNextionComponent(component_id, current_page->state); + NextionComponent component = extractNextionComponent(component_id, current_page->state); if (component.is_current_page) disp1->send_command_printf("vis %s,%i", component.component_id.c_str(), show ? 1 : 0); - - id: setup_sequence - mode: restart - then: - - lambda: |- - page_id->update(); - - wait_until: - condition: - - lambda: !lambda return (not isnan(page_id->state)); - timeout: 15s - - lambda: display_charset->update(); - - wait_until: - condition: - - lambda: !lambda return (not isnan(display_charset->state)); - timeout: 5s - - lambda: display_mode->update(); - - wait_until: - condition: - - lambda: !lambda return (not isnan(display_mode->state)); - timeout: 5s - - if: - condition: - - lambda: !lambda return (not isnan(display_mode->state)); - then: # Project's TFT detected - - lambda: |- - goto_page->execute("boot"); - version_tft->update(); - - wait_until: - condition: - - lambda: !lambda return (not version_tft->state.empty()); - timeout: 5s - - wait_until: - condition: - - lambda: !lambda return (wifi_component->is_connected()); - timeout: 10s - - if: - condition: - - lambda: !lambda return (wifi_component->is_connected()); - then: # Wi-Fi connected - - lambda: |- - if (current_page->state == "boot") { - disp1->set_component_text("boot.ip_addr", network::get_ip_address().str().c_str()); - set_brightness->execute(100); - } - - wait_until: - condition: - - lambda: !lambda return (api_server->is_connected()); - timeout: 10s - - if: - condition: - - lambda: !lambda return (api_server->is_connected()); - then: # API connected - - lambda: |- - auto ha_event = new esphome::api::CustomAPIDevice(); - ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint", - { - {"type", "boot"}, - {"step", "start"} - }); - - wait_until: - condition: - - lambda: !lambda return id(setup_sequence_completed); - timeout: 1s - - lambda: |- - set_brightness->execute(display_brightness->state); - disp1->send_command_printf("brightness=%i", int(display_brightness->state)); - disp1->send_command_printf("settings.brightslider.val=%i", int(display_brightness->state)); - disp1->send_command_printf("brightness_dim=%i", int(display_dim_brightness->state)); - disp1->send_command_printf("settings.dimslider.val=%i", int(display_dim_brightness->state)); - disp1->send_command_printf("brightness_sleep=%i", int(display_sleep_brightness->state)); - nextion_init->publish_state(disp1->is_setup()); - if (api_server->is_connected() and disp1->is_setup()) { - auto ha_event = new esphome::api::CustomAPIDevice(); - ha_event->fire_homeassistant_event("esphome.nspanel_ha_blueprint", - { - {"type", "boot"}, - {"step", "nextion_init"} - }); - } - // Chips icon size - for (int i = 1; i <= 7; ++i) { - disp1->send_command_printf("home.chip%02d.font=%i", i, id(home_chip_font_id)); - } - // Custom buttons icon size - for (int i = 1; i <= 7; ++i) { - disp1->send_command_printf("home.button%02d.font=%i", i, id(home_custom_buttons_font_id)); - } - disp1->send_command_printf("home.bt_notific.font=%i", id(home_custom_buttons_font_id)); - disp1->send_command_printf("home.bt_qrcode.font=%i", id(home_custom_buttons_font_id)); - disp1->send_command_printf("home.bt_entities.font=%i", id(home_custom_buttons_font_id)); - disp1->send_command_printf("home.wifi_icon.font=%i", id(home_chip_font_id)); - disp1->set_component_font_color("home.chip_relay1", id(home_relay1_icon_color)); - disp1->set_component_font_color("home.chip_relay2", id(home_relay2_icon_color)); - timer_reset_all->execute("boot"); - id(setup_sequence_completed) = true; - - wait_until: - condition: - - not: - - text_sensor.state: # Is boot page visible? - id: current_page - state: boot - timeout: 10s - - lambda: |- - if (current_page->state == "boot") goto_page->execute(wakeup_page_name->state.c_str()); - - logger.log: "Nextion setup sequence finished!" - - id: stop_all mode: restart then: - lambda: |- + boot_progress->stop(); change_climate_state->stop(); check_versions->stop(); display_embedded_temp->stop(); @@ -2783,47 +2787,41 @@ script: set_baud_rate->stop(); set_brightness->stop(); set_climate->stop(); - setup_sequence->stop(); timer_dim->stop(); timer_page->stop(); timer_reset_all->stop(); timer_sleep->stop(); update_alarm_icon->stop(); update_climate_icon->stop(); + update_tft_info->stop(); ###### Timers ###### - id: timer_reset_all # Global timer reset - Triggered with a touch on the screen mode: restart - parameters: - page: string then: - lambda: |- - ESP_LOGV("script.timer_reset_all", "Reset timers"); - timer_page->execute(page.c_str(), int(timeout_page->state)); - timer_dim->execute(page.c_str(), int(timeout_dim->state)); - timer_sleep->execute(page.c_str(), int(timeout_sleep->state)); + timer_page->execute(); + timer_dim->execute(); + timer_sleep->execute(); - id: timer_page # Handles the fallback to home page after a timeout mode: restart - parameters: - page: string - timeout: uint then: - - lambda: |- - ESP_LOGV("script.timer_page", "Reset timer: %is", timeout); - if: condition: - lambda: |- - return (timeout >= 1 and - page != "boot" and - page != "confirm" and - page != "home" and - page != "notification" and - page != "screensaver"); + return (timeout_page->state >= 1 and + current_page->state != "boot" and + current_page->state != "confirm" and + current_page->state != "home" and + current_page->state != "notification" and + current_page->state != "screensaver"); then: - - delay: !lambda return (timeout *1000); + - delay: !lambda return (int(timeout_page->state) *1000); - lambda: |- + #if ESPHOME_LOG_LEVEL > ESPHOME_LOG_LEVEL_DEBUG ESP_LOGV("script.timer_page", "Timed out on page: %s", current_page->state.c_str()); - if (timeout >= 1 and + #endif + if (timeout_page->state >= 1 and current_page->state != "boot" and current_page->state != "confirm" and current_page->state != "home" and @@ -2835,49 +2833,38 @@ script: } - id: timer_dim # Handles the brightness dimming after a timeout mode: restart - parameters: - page: string - timeout: uint then: - lambda: |- - ESP_LOGV("script.timer_dim", "Reset timer: %is", timeout); if (current_brightness->state <= display_dim_brightness->state - and page != "screensaver" - and page != "boot" - and page != "blank-screensaver") { - ESP_LOGD("script.timer_dim", "Waking up on page: %s", page.c_str()); + and current_page->state != "screensaver" + and current_page->state != "boot") { + ESP_LOGD("script.timer_dim", "Waking up on page: %s", current_page->state.c_str()); set_brightness->execute(display_brightness->state); } - if: condition: - - lambda: !lambda return (timeout >= 1); + - lambda: return (timeout_dim->state >= 1); then: - - delay: !lambda return (timeout *1000); + - delay: !lambda return (int(timeout_dim->state) *1000); - lambda: |- if (current_page->state != "screensaver" and - current_page->state != "blank-screensaver" and current_page->state != "boot" and - timeout >= 1) { + timeout_dim->state >= 1) { set_brightness->execute(display_dim_brightness->state); } - id: timer_sleep # Handles the sleep (go to screensaver page) after a timeout mode: restart - parameters: - page: string - timeout: uint then: - - lambda: |- - ESP_LOGV("script.timer_sleep", "Reset timer: %is", timeout); - if: condition: - lambda: |- - return (timeout >= 1 and current_page->state != "screensaver" and current_page->state != "boot"); + return (timeout_sleep->state >= 1 and current_page->state != "screensaver" and current_page->state != "boot"); then: - - delay: !lambda return (timeout *1000); + - delay: !lambda return (int(timeout_sleep->state) *1000); - lambda: |- if (current_page->state != "screensaver" and current_page->state != "boot" and - timeout >= 1) { + timeout_sleep->state >= 1) { ESP_LOGD("script.timer_sleep", "Going to sleep from page %s", current_page->state.c_str()); goto_page->execute("screensaver"); set_brightness->execute(display_sleep_brightness->state); @@ -2954,54 +2941,71 @@ script: switch (mode) // CLIMATE_MODE_OFF = 0, CLIMATE_MODE_HEAT_COOL = 1, CLIMATE_MODE_COOL = 2, CLIMATE_MODE_HEAT = 3, CLIMATE_MODE_FAN_ONLY = 4, CLIMATE_MODE_DRY = 5, CLIMATE_MODE_AUTO = 6 { case 0: //CLIMATE_MODE_OFF - disp1->set_component_text_printf(component.c_str(), "%s", "\uFFFF"); // (E424) Don't show icon when off + disp1->set_component_text(component.c_str(), "\uFFFF"); // (E424) Don't show icon when off disp1->set_component_font_color(component.c_str(), 35921); // grey (off) break; case 1: //CLIMATE_MODE_HEAT_COOL - disp1->set_component_text_printf(component.c_str(), "%s", "\uE069"); // mdi:autorenew + disp1->set_component_text(component.c_str(), "\uE069"); // mdi:autorenew disp1->set_component_font_color(component.c_str(), 35921); // grey (off) break; case 2: //CLIMATE_MODE_COOL - disp1->set_component_text_printf(component.c_str(), "%s", "\uE716"); // mdi:snowflake + disp1->set_component_text(component.c_str(), "\uE716"); // mdi:snowflake disp1->set_component_font_color(component.c_str(), 35921); // grey (off) break; case 3: //CLIMATE_MODE_HEAT - disp1->set_component_text_printf(component.c_str(), "%s", "\uE237"); // mdi:fire + disp1->set_component_text(component.c_str(), "\uE237"); // mdi:fire disp1->set_component_font_color(component.c_str(), 35921); // grey (off) break; case 4: //CLIMATE_MODE_FAN_ONLY - disp1->set_component_text_printf(component.c_str(), "%s", "\uE20F"); // mdi:fan + disp1->set_component_text(component.c_str(), "\uE20F"); // mdi:fan disp1->set_component_font_color(component.c_str(), 35921); // grey (off) break; case 5: //CLIMATE_MODE_DRY - disp1->set_component_text_printf(component.c_str(), "%s", "\uE58D"); // mdi:water-percent + disp1->set_component_text(component.c_str(), "\uE58D"); // mdi:water-percent disp1->set_component_font_color(component.c_str(), 35921); // grey (off) break; case 6: //CLIMATE_MODE_AUTO - disp1->set_component_text_printf(component.c_str(), "%s", "\uEE8D"); // mdi:calendar-sync + disp1->set_component_text(component.c_str(), "\uEE8D"); // mdi:calendar-sync disp1->set_component_font_color(component.c_str(), 35921); // grey (off) break; } break; case 2: //CLIMATE_ACTION_COOLING - disp1->set_component_text_printf(component.c_str(), "%s", "\uE716"); // mdi:snowflake + disp1->set_component_text(component.c_str(), "\uE716"); // mdi:snowflake disp1->set_component_font_color(component.c_str(), 1055); // blue break; case 3: //CLIMATE_ACTION_HEATING - disp1->set_component_text_printf(component.c_str(), "%s", "\uE237"); // mdi:fire + disp1->set_component_text(component.c_str(), "\uE237"); // mdi:fire disp1->set_component_font_color(component.c_str(), 64164); // deep-orange break; case 4: //CLIMATE_ACTION_IDLE - disp1->set_component_text_printf(component.c_str(), "%s", "\uE50E"); // mdi:thermometer + disp1->set_component_text(component.c_str(), "\uE50E"); // mdi:thermometer disp1->set_component_font_color(component.c_str(), 35921); // grey (off) break; case 5: //CLIMATE_ACTION_DRYING - disp1->set_component_text_printf(component.c_str(), "%s", "\uE58D"); // mdi:water-percent + disp1->set_component_text(component.c_str(), "\uE58D"); // mdi:water-percent disp1->set_component_font_color(component.c_str(), 64704); // orange break; case 6: //CLIMATE_ACTION_FAN - disp1->set_component_text_printf(component.c_str(), "%s", "\uE20F"); // mdi:fan + disp1->set_component_text(component.c_str(), "\uE20F"); // mdi:fan disp1->set_component_font_color(component.c_str(), 1530); // cyan break; } + + - id: update_tft_info + mode: restart + then: + - while: + condition: + - lambda: return (isnan(display_charset->state) or isnan(display_mode->state) or version_tft->state.empty()); + then: + - lambda: |- + ESP_LOGD("script.update_tft_info", "Updating TFT info"); + if (isnan(display_charset->state)) display_charset->update(); + if (isnan(display_mode->state)) display_mode->update(); + if (version_tft->state.empty()) version_tft->update(); + - wait_until: + condition: + - lambda: return (!isnan(display_charset->state) and !isnan(display_mode->state) and !(version_tft->state.empty())); + timeout: 10s ... diff --git a/hmi/dev/create_us_land_and_CJK_hmi_from_original.md b/hmi/dev/create_us_land_and_CJK_hmi_from_original.md index 1070c7f..dc37bfa 100644 --- a/hmi/dev/create_us_land_and_CJK_hmi_from_original.md +++ b/hmi/dev/create_us_land_and_CJK_hmi_from_original.md @@ -5,6 +5,9 @@ - **Program.s:** - Change to `display_mode=3` +- **Page boot:** + - Change component `progress` (the progress bar in the very bottom) width to 480. + ## Creating `nspanel_CJK_xxx.HMI` from `nspanel_xxx.HMI` - **Program.s:** diff --git a/hmi/dev/nspanel_CJK_eu_code/Program.s.txt b/hmi/dev/nspanel_CJK_eu_code/Program.s.txt index cda6c3a..78c19db 100644 --- a/hmi/dev/nspanel_CJK_eu_code/Program.s.txt +++ b/hmi/dev/nspanel_CJK_eu_code/Program.s.txt @@ -6,7 +6,7 @@ Program.s int p=0,q=0,t=0,f=0 int is_buttonpage01=0, is_buttonpage02=0, is_buttonpage03=0, is_buttonpage04=0 int is_entitypage01=0, is_entitypage02=0, is_entitypage03=0, is_entitypage04=0 - int back_page_id=0 + int back_page_id=1 int dimdelta=0 int api=0 // 0 = disconnected from HA, 1 = connected to HA int is_utilities=0 @@ -20,4 +20,4 @@ Program.s { lcd_dev fffb 0002 0000 0020// Fix touch offset for EU Version } - page 8//Power on start page boot + page 0//Power on start page boot diff --git a/hmi/dev/nspanel_CJK_eu_code/alarm.txt b/hmi/dev/nspanel_CJK_eu_code/alarm.txt index 9bb1c6a..f7bdd14 100644 --- a/hmi/dev/nspanel_CJK_eu_code/alarm.txt +++ b/hmi/dev/nspanel_CJK_eu_code/alarm.txt @@ -24,7 +24,12 @@ Page alarm vis bt_bypass,0 } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "alarm",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/boot.txt b/hmi/dev/nspanel_CJK_eu_code/boot.txt index fa2a4ca..37c7d7c 100644 --- a/hmi/dev/nspanel_CJK_eu_code/boot.txt +++ b/hmi/dev/nspanel_CJK_eu_code/boot.txt @@ -12,11 +12,16 @@ Page boot Events Preinitialize Event + printh 92 + prints "current_page",0 + printh 00 + prints "boot",0 + printh 00 + printh FF FF FF dim=100 covx baud,baud_rate.txt,0,0 baud_rate.txt+=" bps" vis unavailable,0 - sendme Page Exit Event dim=0 @@ -27,13 +32,6 @@ Variable (int32) counter Scope: local Value: 0 -Variable (string) aux1 - Attributes - ID : 12 - Scope : local - Text : - Max. Text Size: 10 - Text ip_addr Attributes ID : 1 @@ -101,7 +99,7 @@ Text tft_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : 4.3.0 + Text : 4.3.1b1 Max. Text Size : 9 Text esph_version @@ -111,8 +109,8 @@ Text esph_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : - Max. Text Size : 9 + Text : Waiting... + Max. Text Size : 10 Text bluep_version Attributes @@ -121,12 +119,12 @@ Text bluep_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : - Max. Text Size : 9 + Text : Waiting... + Max. Text Size : 10 Text baud_rate Attributes - ID : 14 + ID : 13 Scope : local Dragging : 0 Send Component ID : on press and release @@ -136,7 +134,7 @@ Text baud_rate Text framework Attributes - ID : 15 + ID : 14 Scope : local Dragging : 0 Send Component ID : on press and release @@ -146,7 +144,7 @@ Text framework Text unavailable Attributes - ID : 16 + ID : 15 Scope : local Dragging : 0 Send Component ID : disabled @@ -154,6 +152,14 @@ Text unavailable Text : Max. Text Size : 1 +Progress Bar progress + Attributes + ID : 16 + Scope : global + Dragging : 0 + Send Component ID: disabled + Value : 0 + Dual-state Button bt_reboot Attributes ID : 4 @@ -173,19 +179,28 @@ Dual-state Button bt_reboot Timer tm_esphome Attributes - ID : 13 + ID : 12 Scope : local - Period (ms): 10000 + Period (ms): 1000 Enabled : yes Events Timer Event + if(tm_esphome.tim!=10000) + { + tm_esphome.tim=10000 + } counter.val++ if(counter.val>30) { rest } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "boot",0 + printh 00 + printh FF FF FF printh 91 prints "display_mode",0 printh 00 @@ -197,13 +212,11 @@ Timer tm_esphome prints charset,0 printh FF FF FF printh 92 - prints "tft_version",0 + prints "boot.tft_version",0 printh 00 prints tft_version.txt,0 printh 00 printh FF FF FF - covx counter.val,aux1.txt,0,0 - esph_version.txt="Retry #"+aux1.txt sys0=counter.val%10 if(sys0==0) { diff --git a/hmi/dev/nspanel_CJK_eu_code/buttonpage01.txt b/hmi/dev/nspanel_CJK_eu_code/buttonpage01.txt index 0b5acd8..7bf6975 100644 --- a/hmi/dev/nspanel_CJK_eu_code/buttonpage01.txt +++ b/hmi/dev/nspanel_CJK_eu_code/buttonpage01.txt @@ -20,22 +20,31 @@ Page buttonpage01 vis 255,0 vis button_back,1 vis page_label,1 - page_index.txt+="●" - if(is_buttonpage02==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + page_index.txt+="●" + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - if(is_buttonpage03==1) - { - page_index.txt+="â—‹" - } - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage01",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/buttonpage02.txt b/hmi/dev/nspanel_CJK_eu_code/buttonpage02.txt index eed659f..7234ead 100644 --- a/hmi/dev/nspanel_CJK_eu_code/buttonpage02.txt +++ b/hmi/dev/nspanel_CJK_eu_code/buttonpage02.txt @@ -20,22 +20,31 @@ Page buttonpage02 vis 255,0 vis button_back,1 vis page_label,1 - if(is_buttonpage01==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - page_index.txt+="●" - if(is_buttonpage03==1) - { - page_index.txt+="â—‹" - } - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage02",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/buttonpage03.txt b/hmi/dev/nspanel_CJK_eu_code/buttonpage03.txt index 17f7232..bb10da9 100644 --- a/hmi/dev/nspanel_CJK_eu_code/buttonpage03.txt +++ b/hmi/dev/nspanel_CJK_eu_code/buttonpage03.txt @@ -20,22 +20,31 @@ Page buttonpage03 vis 255,0 vis button_back,1 vis page_label,1 - if(is_buttonpage01==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - if(is_buttonpage02==1) - { - page_index.txt+="â—‹" - } - page_index.txt+="●" - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage03",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/buttonpage04.txt b/hmi/dev/nspanel_CJK_eu_code/buttonpage04.txt index 3268c4d..10773be 100644 --- a/hmi/dev/nspanel_CJK_eu_code/buttonpage04.txt +++ b/hmi/dev/nspanel_CJK_eu_code/buttonpage04.txt @@ -20,22 +20,31 @@ Page buttonpage04 vis 255,0 vis button_back,1 vis page_label,1 - if(is_buttonpage01==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + vis page_index,1 } - if(is_buttonpage02==1) - { - page_index.txt+="â—‹" - } - if(is_buttonpage03==1) - { - page_index.txt+="â—‹" - } - page_index.txt+="●" - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage04",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/climate.txt b/hmi/dev/nspanel_CJK_eu_code/climate.txt index e016bb6..85f8cae 100644 --- a/hmi/dev/nspanel_CJK_eu_code/climate.txt +++ b/hmi/dev/nspanel_CJK_eu_code/climate.txt @@ -33,7 +33,12 @@ Page climate page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "climate",0 + printh 00 + printh FF FF FF Page Exit Event covx embedded.val,va2.txt,0,0 diff --git a/hmi/dev/nspanel_CJK_eu_code/confirm.txt b/hmi/dev/nspanel_CJK_eu_code/confirm.txt index 38da546..9675795 100644 --- a/hmi/dev/nspanel_CJK_eu_code/confirm.txt +++ b/hmi/dev/nspanel_CJK_eu_code/confirm.txt @@ -17,7 +17,12 @@ Page confirm page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "confirm",0 + printh 00 + printh FF FF FF Variable (int32) page_id Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/cover.txt b/hmi/dev/nspanel_CJK_eu_code/cover.txt index 6b74670..55f323e 100644 --- a/hmi/dev/nspanel_CJK_eu_code/cover.txt +++ b/hmi/dev/nspanel_CJK_eu_code/cover.txt @@ -17,7 +17,12 @@ Page cover page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "cover",0 + printh 00 + printh FF FF FF Variable (string) va1 Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/entitypage01.txt b/hmi/dev/nspanel_CJK_eu_code/entitypage01.txt index e4cf268..3944cd8 100644 --- a/hmi/dev/nspanel_CJK_eu_code/entitypage01.txt +++ b/hmi/dev/nspanel_CJK_eu_code/entitypage01.txt @@ -17,20 +17,32 @@ Page entitypage01 page home } vis unavailable,0 - page_index.txt+="●" - if(is_entitypage02==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage03==1) + page_index.txt+="●" + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage01",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/entitypage02.txt b/hmi/dev/nspanel_CJK_eu_code/entitypage02.txt index 624506d..acaea22 100644 --- a/hmi/dev/nspanel_CJK_eu_code/entitypage02.txt +++ b/hmi/dev/nspanel_CJK_eu_code/entitypage02.txt @@ -17,20 +17,32 @@ Page entitypage02 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - page_index.txt+="●" - if(is_entitypage03==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage02",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/entitypage03.txt b/hmi/dev/nspanel_CJK_eu_code/entitypage03.txt index b2b9ed3..428e485 100644 --- a/hmi/dev/nspanel_CJK_eu_code/entitypage03.txt +++ b/hmi/dev/nspanel_CJK_eu_code/entitypage03.txt @@ -17,20 +17,32 @@ Page entitypage03 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage02==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - page_index.txt+="●" - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage03",0 + printh 00 + printh FF FF FF Text value01_label Attributes @@ -122,7 +134,7 @@ Text value08_label Text : Max. Text Size : 60 -Text value01_pic +Text value01_icon Attributes ID : 12 Scope : local diff --git a/hmi/dev/nspanel_CJK_eu_code/entitypage04.txt b/hmi/dev/nspanel_CJK_eu_code/entitypage04.txt index 5ae4454..d40e216 100644 --- a/hmi/dev/nspanel_CJK_eu_code/entitypage04.txt +++ b/hmi/dev/nspanel_CJK_eu_code/entitypage04.txt @@ -17,20 +17,32 @@ Page entitypage04 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage02==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage03==1) - { - page_index.txt+="â—‹" - } - page_index.txt+="●" - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage04",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/fan.txt b/hmi/dev/nspanel_CJK_eu_code/fan.txt index 95478b5..7b6a37d 100644 --- a/hmi/dev/nspanel_CJK_eu_code/fan.txt +++ b/hmi/dev/nspanel_CJK_eu_code/fan.txt @@ -18,7 +18,12 @@ Page fan } vis unavailable,0 vis bt_oscillate,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "fan",0 + printh 00 + printh FF FF FF Variable (string) fansetting Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/home.txt b/hmi/dev/nspanel_CJK_eu_code/home.txt index 47e8ec6..e72affa 100644 --- a/hmi/dev/nspanel_CJK_eu_code/home.txt +++ b/hmi/dev/nspanel_CJK_eu_code/home.txt @@ -12,6 +12,16 @@ Page home Events Preinitialize Event + if(boot.progress.val<100) + { + page boot + } + printh 92 + prints "current_page",0 + printh 00 + prints "home",0 + printh 00 + printh FF FF FF back_page_id=0 if(qrcode.qrcode_value.txt=="") { @@ -31,7 +41,6 @@ Page home vis right_bt_text,0 } vis unavailable,0 - sendme Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/keyb_num.txt b/hmi/dev/nspanel_CJK_eu_code/keyb_num.txt index 3c62216..02430bb 100644 --- a/hmi/dev/nspanel_CJK_eu_code/keyb_num.txt +++ b/hmi/dev/nspanel_CJK_eu_code/keyb_num.txt @@ -17,7 +17,12 @@ Page keyb_num page page_id.val } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "keyb_num",0 + printh 00 + printh FF FF FF Variable (int32) page_id Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/light.txt b/hmi/dev/nspanel_CJK_eu_code/light.txt index 734b183..b68ce46 100644 --- a/hmi/dev/nspanel_CJK_eu_code/light.txt +++ b/hmi/dev/nspanel_CJK_eu_code/light.txt @@ -37,7 +37,12 @@ Page light vis color_button,0 } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "light",0 + printh 00 + printh FF FF FF Variable (int32) rgb565 Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/media_player.txt b/hmi/dev/nspanel_CJK_eu_code/media_player.txt index dcf2a2f..7ed7ad7 100644 --- a/hmi/dev/nspanel_CJK_eu_code/media_player.txt +++ b/hmi/dev/nspanel_CJK_eu_code/media_player.txt @@ -17,7 +17,12 @@ Page media_player page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "media_player",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/notification.txt b/hmi/dev/nspanel_CJK_eu_code/notification.txt index b6a6951..34e38af 100644 --- a/hmi/dev/nspanel_CJK_eu_code/notification.txt +++ b/hmi/dev/nspanel_CJK_eu_code/notification.txt @@ -17,7 +17,12 @@ Page notification page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "notification",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/qrcode.txt b/hmi/dev/nspanel_CJK_eu_code/qrcode.txt index 6e55366..55fef89 100644 --- a/hmi/dev/nspanel_CJK_eu_code/qrcode.txt +++ b/hmi/dev/nspanel_CJK_eu_code/qrcode.txt @@ -13,7 +13,12 @@ Page qrcode Events Preinitialize Event vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "qrcode",0 + printh 00 + printh FF FF FF Text qrcode_label Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/screensaver.txt b/hmi/dev/nspanel_CJK_eu_code/screensaver.txt index 6f8da50..e74eae1 100644 --- a/hmi/dev/nspanel_CJK_eu_code/screensaver.txt +++ b/hmi/dev/nspanel_CJK_eu_code/screensaver.txt @@ -15,7 +15,12 @@ Page screensaver vis text,0 dim=brightness_sleep vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "screensaver",0 + printh 00 + printh FF FF FF Touch Release Event page back_page_id diff --git a/hmi/dev/nspanel_CJK_eu_code/settings.txt b/hmi/dev/nspanel_CJK_eu_code/settings.txt index 1881ea9..0fbcd17 100644 --- a/hmi/dev/nspanel_CJK_eu_code/settings.txt +++ b/hmi/dev/nspanel_CJK_eu_code/settings.txt @@ -19,7 +19,12 @@ Page settings vis lbl_sleep,0 vis bt_sleep,0 vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "settings",0 + printh 00 + printh FF FF FF Text bright_text Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/utilities.txt b/hmi/dev/nspanel_CJK_eu_code/utilities.txt index 30c6040..dd54019 100644 --- a/hmi/dev/nspanel_CJK_eu_code/utilities.txt +++ b/hmi/dev/nspanel_CJK_eu_code/utilities.txt @@ -20,7 +20,12 @@ Page utilities vis title_icon,1 vis title,1 vis button_back,1 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "utilities",0 + printh 00 + printh FF FF FF Variable (int32) line_main_d Attributes @@ -111,7 +116,7 @@ Text home_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Home + Text : Max. Text Size : 10 Text home @@ -151,7 +156,7 @@ Text grid_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Grid + Text : Max. Text Size : 10 Text grid @@ -191,7 +196,7 @@ Text group01_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group01 @@ -231,7 +236,7 @@ Text group02_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group02 @@ -271,7 +276,7 @@ Text group03_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group03 @@ -311,7 +316,7 @@ Text group04_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group04 @@ -351,7 +356,7 @@ Text group05_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group05 @@ -391,7 +396,7 @@ Text group06_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group06 diff --git a/hmi/dev/nspanel_CJK_eu_code/weather01.txt b/hmi/dev/nspanel_CJK_eu_code/weather01.txt index 878553e..05e71ba 100644 --- a/hmi/dev/nspanel_CJK_eu_code/weather01.txt +++ b/hmi/dev/nspanel_CJK_eu_code/weather01.txt @@ -17,7 +17,12 @@ Page weather01 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather01",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/weather02.txt b/hmi/dev/nspanel_CJK_eu_code/weather02.txt index 9dbf735..a6453cf 100644 --- a/hmi/dev/nspanel_CJK_eu_code/weather02.txt +++ b/hmi/dev/nspanel_CJK_eu_code/weather02.txt @@ -17,7 +17,12 @@ Page weather02 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather02",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/weather03.txt b/hmi/dev/nspanel_CJK_eu_code/weather03.txt index d0d38c9..25cb106 100644 --- a/hmi/dev/nspanel_CJK_eu_code/weather03.txt +++ b/hmi/dev/nspanel_CJK_eu_code/weather03.txt @@ -17,7 +17,12 @@ Page weather03 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather03",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/weather04.txt b/hmi/dev/nspanel_CJK_eu_code/weather04.txt index 208299d..883dfe8 100644 --- a/hmi/dev/nspanel_CJK_eu_code/weather04.txt +++ b/hmi/dev/nspanel_CJK_eu_code/weather04.txt @@ -17,7 +17,12 @@ Page weather04 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather04",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_CJK_eu_code/weather05.txt b/hmi/dev/nspanel_CJK_eu_code/weather05.txt index 73bd1b8..594d52a 100644 --- a/hmi/dev/nspanel_CJK_eu_code/weather05.txt +++ b/hmi/dev/nspanel_CJK_eu_code/weather05.txt @@ -17,7 +17,12 @@ Page weather05 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather05",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/Program.s.txt b/hmi/dev/nspanel_CJK_us_code/Program.s.txt index e47d21b..a3709c5 100644 --- a/hmi/dev/nspanel_CJK_us_code/Program.s.txt +++ b/hmi/dev/nspanel_CJK_us_code/Program.s.txt @@ -6,7 +6,7 @@ Program.s int p=0,q=0,t=0,f=0 int is_buttonpage01=0, is_buttonpage02=0, is_buttonpage03=0, is_buttonpage04=0 int is_entitypage01=0, is_entitypage02=0, is_entitypage03=0, is_entitypage04=0 - int back_page_id=0 + int back_page_id=1 int dimdelta=0 int api=0 // 0 = disconnected from HA, 1 = connected to HA int is_utilities=0 @@ -20,4 +20,4 @@ Program.s { lcd_dev fffb 0002 0000 0020// Fix touch offset for EU Version } - page 8//Power on start page boot + page 0//Power on start page boot diff --git a/hmi/dev/nspanel_CJK_us_code/alarm.txt b/hmi/dev/nspanel_CJK_us_code/alarm.txt index a2a65cf..1028126 100644 --- a/hmi/dev/nspanel_CJK_us_code/alarm.txt +++ b/hmi/dev/nspanel_CJK_us_code/alarm.txt @@ -24,7 +24,12 @@ Page alarm vis bt_bypass,0 } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "alarm",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/boot.txt b/hmi/dev/nspanel_CJK_us_code/boot.txt index efcbc7e..a7382ea 100644 --- a/hmi/dev/nspanel_CJK_us_code/boot.txt +++ b/hmi/dev/nspanel_CJK_us_code/boot.txt @@ -12,11 +12,16 @@ Page boot Events Preinitialize Event + printh 92 + prints "current_page",0 + printh 00 + prints "boot",0 + printh 00 + printh FF FF FF dim=100 covx baud,baud_rate.txt,0,0 baud_rate.txt+=" bps" vis unavailable,0 - sendme Page Exit Event dim=0 @@ -27,13 +32,6 @@ Variable (int32) counter Scope: local Value: 0 -Variable (string) aux1 - Attributes - ID : 12 - Scope : local - Text : - Max. Text Size: 10 - Text ip_addr Attributes ID : 1 @@ -101,7 +99,7 @@ Text tft_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : 4.3.0 + Text : 4.3.1b1 Max. Text Size : 9 Events @@ -118,8 +116,8 @@ Text esph_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : - Max. Text Size : 9 + Text : Waiting... + Max. Text Size : 10 Text bluep_version Attributes @@ -128,12 +126,12 @@ Text bluep_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : - Max. Text Size : 9 + Text : Waiting... + Max. Text Size : 10 Text baud_rate Attributes - ID : 14 + ID : 13 Scope : local Dragging : 0 Send Component ID : on press and release @@ -143,7 +141,7 @@ Text baud_rate Text framework Attributes - ID : 15 + ID : 14 Scope : local Dragging : 0 Send Component ID : on press and release @@ -153,7 +151,7 @@ Text framework Text unavailable Attributes - ID : 16 + ID : 15 Scope : local Dragging : 0 Send Component ID : disabled @@ -161,6 +159,14 @@ Text unavailable Text : Max. Text Size : 1 +Progress Bar progress + Attributes + ID : 16 + Scope : global + Dragging : 0 + Send Component ID: disabled + Value : 0 + Dual-state Button bt_reboot Attributes ID : 4 @@ -180,19 +186,28 @@ Dual-state Button bt_reboot Timer tm_esphome Attributes - ID : 13 + ID : 12 Scope : local - Period (ms): 10000 + Period (ms): 1000 Enabled : yes Events Timer Event + if(tm_esphome.tim!=10000) + { + tm_esphome.tim=10000 + } counter.val++ if(counter.val>30) { rest } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "boot",0 + printh 00 + printh FF FF FF printh 91 prints "display_mode",0 printh 00 @@ -204,13 +219,11 @@ Timer tm_esphome prints charset,0 printh FF FF FF printh 92 - prints "tft_version",0 + prints "boot.tft_version",0 printh 00 prints tft_version.txt,0 printh 00 printh FF FF FF - covx counter.val,aux1.txt,0,0 - esph_version.txt="Retry #"+aux1.txt sys0=counter.val%10 if(sys0==0) { diff --git a/hmi/dev/nspanel_CJK_us_code/buttonpage01.txt b/hmi/dev/nspanel_CJK_us_code/buttonpage01.txt index 0b5acd8..7bf6975 100644 --- a/hmi/dev/nspanel_CJK_us_code/buttonpage01.txt +++ b/hmi/dev/nspanel_CJK_us_code/buttonpage01.txt @@ -20,22 +20,31 @@ Page buttonpage01 vis 255,0 vis button_back,1 vis page_label,1 - page_index.txt+="●" - if(is_buttonpage02==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + page_index.txt+="●" + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - if(is_buttonpage03==1) - { - page_index.txt+="â—‹" - } - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage01",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/buttonpage02.txt b/hmi/dev/nspanel_CJK_us_code/buttonpage02.txt index eed659f..7234ead 100644 --- a/hmi/dev/nspanel_CJK_us_code/buttonpage02.txt +++ b/hmi/dev/nspanel_CJK_us_code/buttonpage02.txt @@ -20,22 +20,31 @@ Page buttonpage02 vis 255,0 vis button_back,1 vis page_label,1 - if(is_buttonpage01==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - page_index.txt+="●" - if(is_buttonpage03==1) - { - page_index.txt+="â—‹" - } - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage02",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/buttonpage03.txt b/hmi/dev/nspanel_CJK_us_code/buttonpage03.txt index 17f7232..bb10da9 100644 --- a/hmi/dev/nspanel_CJK_us_code/buttonpage03.txt +++ b/hmi/dev/nspanel_CJK_us_code/buttonpage03.txt @@ -20,22 +20,31 @@ Page buttonpage03 vis 255,0 vis button_back,1 vis page_label,1 - if(is_buttonpage01==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - if(is_buttonpage02==1) - { - page_index.txt+="â—‹" - } - page_index.txt+="●" - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage03",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/buttonpage04.txt b/hmi/dev/nspanel_CJK_us_code/buttonpage04.txt index 6199075..76ba7d4 100644 --- a/hmi/dev/nspanel_CJK_us_code/buttonpage04.txt +++ b/hmi/dev/nspanel_CJK_us_code/buttonpage04.txt @@ -19,10 +19,32 @@ Page buttonpage04 { vis 255,0 vis button_back,1 - vis page_index,1 vis page_label,1 + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) + { + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + vis page_index,1 + } } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage04",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/climate.txt b/hmi/dev/nspanel_CJK_us_code/climate.txt index 3ba81b3..d948bf6 100644 --- a/hmi/dev/nspanel_CJK_us_code/climate.txt +++ b/hmi/dev/nspanel_CJK_us_code/climate.txt @@ -33,7 +33,12 @@ Page climate page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "climate",0 + printh 00 + printh FF FF FF Page Exit Event covx embedded.val,va2.txt,0,0 diff --git a/hmi/dev/nspanel_CJK_us_code/confirm.txt b/hmi/dev/nspanel_CJK_us_code/confirm.txt index 38da546..9675795 100644 --- a/hmi/dev/nspanel_CJK_us_code/confirm.txt +++ b/hmi/dev/nspanel_CJK_us_code/confirm.txt @@ -17,7 +17,12 @@ Page confirm page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "confirm",0 + printh 00 + printh FF FF FF Variable (int32) page_id Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/cover.txt b/hmi/dev/nspanel_CJK_us_code/cover.txt index a103257..b356399 100644 --- a/hmi/dev/nspanel_CJK_us_code/cover.txt +++ b/hmi/dev/nspanel_CJK_us_code/cover.txt @@ -17,7 +17,12 @@ Page cover page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "cover",0 + printh 00 + printh FF FF FF Variable (string) va1 Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/entitypage01.txt b/hmi/dev/nspanel_CJK_us_code/entitypage01.txt index e4cf268..3944cd8 100644 --- a/hmi/dev/nspanel_CJK_us_code/entitypage01.txt +++ b/hmi/dev/nspanel_CJK_us_code/entitypage01.txt @@ -17,20 +17,32 @@ Page entitypage01 page home } vis unavailable,0 - page_index.txt+="●" - if(is_entitypage02==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage03==1) + page_index.txt+="●" + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage01",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/entitypage02.txt b/hmi/dev/nspanel_CJK_us_code/entitypage02.txt index 624506d..acaea22 100644 --- a/hmi/dev/nspanel_CJK_us_code/entitypage02.txt +++ b/hmi/dev/nspanel_CJK_us_code/entitypage02.txt @@ -17,20 +17,32 @@ Page entitypage02 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - page_index.txt+="●" - if(is_entitypage03==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage02",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/entitypage03.txt b/hmi/dev/nspanel_CJK_us_code/entitypage03.txt index 6112d73..f2a403d 100644 --- a/hmi/dev/nspanel_CJK_us_code/entitypage03.txt +++ b/hmi/dev/nspanel_CJK_us_code/entitypage03.txt @@ -17,20 +17,32 @@ Page entitypage03 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage02==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - page_index.txt+="●" - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage03",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/entitypage04.txt b/hmi/dev/nspanel_CJK_us_code/entitypage04.txt index 5ae4454..d40e216 100644 --- a/hmi/dev/nspanel_CJK_us_code/entitypage04.txt +++ b/hmi/dev/nspanel_CJK_us_code/entitypage04.txt @@ -17,20 +17,32 @@ Page entitypage04 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage02==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage03==1) - { - page_index.txt+="â—‹" - } - page_index.txt+="●" - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage04",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/fan.txt b/hmi/dev/nspanel_CJK_us_code/fan.txt index 95478b5..7b6a37d 100644 --- a/hmi/dev/nspanel_CJK_us_code/fan.txt +++ b/hmi/dev/nspanel_CJK_us_code/fan.txt @@ -18,7 +18,12 @@ Page fan } vis unavailable,0 vis bt_oscillate,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "fan",0 + printh 00 + printh FF FF FF Variable (string) fansetting Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/home.txt b/hmi/dev/nspanel_CJK_us_code/home.txt index 99bd032..17e6b8d 100644 --- a/hmi/dev/nspanel_CJK_us_code/home.txt +++ b/hmi/dev/nspanel_CJK_us_code/home.txt @@ -12,6 +12,16 @@ Page home Events Preinitialize Event + if(boot.progress.val<100) + { + page boot + } + printh 92 + prints "current_page",0 + printh 00 + prints "home",0 + printh 00 + printh FF FF FF back_page_id=0 if(qrcode.qrcode_value.txt=="") { @@ -31,7 +41,6 @@ Page home vis right_bt_text,0 } vis unavailable,0 - sendme Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/keyb_num.txt b/hmi/dev/nspanel_CJK_us_code/keyb_num.txt index adcc655..ccd096f 100644 --- a/hmi/dev/nspanel_CJK_us_code/keyb_num.txt +++ b/hmi/dev/nspanel_CJK_us_code/keyb_num.txt @@ -17,7 +17,12 @@ Page keyb_num page page_id.val } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "keyb_num",0 + printh 00 + printh FF FF FF Variable (int32) page_id Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/light.txt b/hmi/dev/nspanel_CJK_us_code/light.txt index 54e4869..337e204 100644 --- a/hmi/dev/nspanel_CJK_us_code/light.txt +++ b/hmi/dev/nspanel_CJK_us_code/light.txt @@ -37,7 +37,12 @@ Page light vis color_button,0 } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "light",0 + printh 00 + printh FF FF FF Variable (int32) rgb565 Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/media_player.txt b/hmi/dev/nspanel_CJK_us_code/media_player.txt index 4050fd7..94bf532 100644 --- a/hmi/dev/nspanel_CJK_us_code/media_player.txt +++ b/hmi/dev/nspanel_CJK_us_code/media_player.txt @@ -17,7 +17,12 @@ Page media_player page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "media_player",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/notification.txt b/hmi/dev/nspanel_CJK_us_code/notification.txt index 731f0d7..570f9f6 100644 --- a/hmi/dev/nspanel_CJK_us_code/notification.txt +++ b/hmi/dev/nspanel_CJK_us_code/notification.txt @@ -17,7 +17,12 @@ Page notification page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "notification",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/qrcode.txt b/hmi/dev/nspanel_CJK_us_code/qrcode.txt index 6e55366..55fef89 100644 --- a/hmi/dev/nspanel_CJK_us_code/qrcode.txt +++ b/hmi/dev/nspanel_CJK_us_code/qrcode.txt @@ -13,7 +13,12 @@ Page qrcode Events Preinitialize Event vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "qrcode",0 + printh 00 + printh FF FF FF Text qrcode_label Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/screensaver.txt b/hmi/dev/nspanel_CJK_us_code/screensaver.txt index 6f8da50..e74eae1 100644 --- a/hmi/dev/nspanel_CJK_us_code/screensaver.txt +++ b/hmi/dev/nspanel_CJK_us_code/screensaver.txt @@ -15,7 +15,12 @@ Page screensaver vis text,0 dim=brightness_sleep vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "screensaver",0 + printh 00 + printh FF FF FF Touch Release Event page back_page_id diff --git a/hmi/dev/nspanel_CJK_us_code/settings.txt b/hmi/dev/nspanel_CJK_us_code/settings.txt index 7d51a3e..60098e1 100644 --- a/hmi/dev/nspanel_CJK_us_code/settings.txt +++ b/hmi/dev/nspanel_CJK_us_code/settings.txt @@ -19,7 +19,12 @@ Page settings vis lbl_sleep,0 vis bt_sleep,0 vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "settings",0 + printh 00 + printh FF FF FF Text bright_text Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/utilities.txt b/hmi/dev/nspanel_CJK_us_code/utilities.txt index a664959..b1386de 100644 --- a/hmi/dev/nspanel_CJK_us_code/utilities.txt +++ b/hmi/dev/nspanel_CJK_us_code/utilities.txt @@ -20,7 +20,12 @@ Page utilities vis title_icon,1 vis title,1 vis button_back,1 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "utilities",0 + printh 00 + printh FF FF FF Variable (int32) line_main_d Attributes @@ -111,7 +116,7 @@ Text home_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Home + Text : Max. Text Size : 10 Text home @@ -151,7 +156,7 @@ Text grid_label Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : Grid + Text : Max. Text Size : 10 Text grid @@ -191,7 +196,7 @@ Text group01_label Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group01 @@ -231,7 +236,7 @@ Text group02_label Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group02 @@ -271,7 +276,7 @@ Text group03_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group03 @@ -311,7 +316,7 @@ Text group04_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group04 @@ -351,7 +356,7 @@ Text group05_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group05 @@ -391,7 +396,7 @@ Text group06_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group06 diff --git a/hmi/dev/nspanel_CJK_us_code/weather01.txt b/hmi/dev/nspanel_CJK_us_code/weather01.txt index 878553e..05e71ba 100644 --- a/hmi/dev/nspanel_CJK_us_code/weather01.txt +++ b/hmi/dev/nspanel_CJK_us_code/weather01.txt @@ -17,7 +17,12 @@ Page weather01 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather01",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/weather02.txt b/hmi/dev/nspanel_CJK_us_code/weather02.txt index 9dbf735..a6453cf 100644 --- a/hmi/dev/nspanel_CJK_us_code/weather02.txt +++ b/hmi/dev/nspanel_CJK_us_code/weather02.txt @@ -17,7 +17,12 @@ Page weather02 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather02",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/weather03.txt b/hmi/dev/nspanel_CJK_us_code/weather03.txt index d0d38c9..25cb106 100644 --- a/hmi/dev/nspanel_CJK_us_code/weather03.txt +++ b/hmi/dev/nspanel_CJK_us_code/weather03.txt @@ -17,7 +17,12 @@ Page weather03 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather03",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/weather04.txt b/hmi/dev/nspanel_CJK_us_code/weather04.txt index 208299d..883dfe8 100644 --- a/hmi/dev/nspanel_CJK_us_code/weather04.txt +++ b/hmi/dev/nspanel_CJK_us_code/weather04.txt @@ -17,7 +17,12 @@ Page weather04 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather04",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_CJK_us_code/weather05.txt b/hmi/dev/nspanel_CJK_us_code/weather05.txt index 73bd1b8..594d52a 100644 --- a/hmi/dev/nspanel_CJK_us_code/weather05.txt +++ b/hmi/dev/nspanel_CJK_us_code/weather05.txt @@ -17,7 +17,12 @@ Page weather05 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather05",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/Program.s.txt b/hmi/dev/nspanel_CJK_us_land_code/Program.s.txt index 1ea8b81..1480d12 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/Program.s.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/Program.s.txt @@ -6,7 +6,7 @@ Program.s int p=0,q=0,t=0,f=0 int is_buttonpage01=0, is_buttonpage02=0, is_buttonpage03=0, is_buttonpage04=0 int is_entitypage01=0, is_entitypage02=0, is_entitypage03=0, is_entitypage04=0 - int back_page_id=0 + int back_page_id=1 int dimdelta=0 int api=0 // 0 = disconnected from HA, 1 = connected to HA int is_utilities=0 @@ -20,4 +20,4 @@ Program.s { lcd_dev fffb 0002 0000 0020// Fix touch offset for EU Version } - page 8//Power on start page boot + page 0//Power on start page boot diff --git a/hmi/dev/nspanel_CJK_us_land_code/alarm.txt b/hmi/dev/nspanel_CJK_us_land_code/alarm.txt index 9bb1c6a..f7bdd14 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/alarm.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/alarm.txt @@ -24,7 +24,12 @@ Page alarm vis bt_bypass,0 } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "alarm",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/boot.txt b/hmi/dev/nspanel_CJK_us_land_code/boot.txt index fa2a4ca..37c7d7c 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/boot.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/boot.txt @@ -12,11 +12,16 @@ Page boot Events Preinitialize Event + printh 92 + prints "current_page",0 + printh 00 + prints "boot",0 + printh 00 + printh FF FF FF dim=100 covx baud,baud_rate.txt,0,0 baud_rate.txt+=" bps" vis unavailable,0 - sendme Page Exit Event dim=0 @@ -27,13 +32,6 @@ Variable (int32) counter Scope: local Value: 0 -Variable (string) aux1 - Attributes - ID : 12 - Scope : local - Text : - Max. Text Size: 10 - Text ip_addr Attributes ID : 1 @@ -101,7 +99,7 @@ Text tft_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : 4.3.0 + Text : 4.3.1b1 Max. Text Size : 9 Text esph_version @@ -111,8 +109,8 @@ Text esph_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : - Max. Text Size : 9 + Text : Waiting... + Max. Text Size : 10 Text bluep_version Attributes @@ -121,12 +119,12 @@ Text bluep_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : - Max. Text Size : 9 + Text : Waiting... + Max. Text Size : 10 Text baud_rate Attributes - ID : 14 + ID : 13 Scope : local Dragging : 0 Send Component ID : on press and release @@ -136,7 +134,7 @@ Text baud_rate Text framework Attributes - ID : 15 + ID : 14 Scope : local Dragging : 0 Send Component ID : on press and release @@ -146,7 +144,7 @@ Text framework Text unavailable Attributes - ID : 16 + ID : 15 Scope : local Dragging : 0 Send Component ID : disabled @@ -154,6 +152,14 @@ Text unavailable Text : Max. Text Size : 1 +Progress Bar progress + Attributes + ID : 16 + Scope : global + Dragging : 0 + Send Component ID: disabled + Value : 0 + Dual-state Button bt_reboot Attributes ID : 4 @@ -173,19 +179,28 @@ Dual-state Button bt_reboot Timer tm_esphome Attributes - ID : 13 + ID : 12 Scope : local - Period (ms): 10000 + Period (ms): 1000 Enabled : yes Events Timer Event + if(tm_esphome.tim!=10000) + { + tm_esphome.tim=10000 + } counter.val++ if(counter.val>30) { rest } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "boot",0 + printh 00 + printh FF FF FF printh 91 prints "display_mode",0 printh 00 @@ -197,13 +212,11 @@ Timer tm_esphome prints charset,0 printh FF FF FF printh 92 - prints "tft_version",0 + prints "boot.tft_version",0 printh 00 prints tft_version.txt,0 printh 00 printh FF FF FF - covx counter.val,aux1.txt,0,0 - esph_version.txt="Retry #"+aux1.txt sys0=counter.val%10 if(sys0==0) { diff --git a/hmi/dev/nspanel_CJK_us_land_code/buttonpage01.txt b/hmi/dev/nspanel_CJK_us_land_code/buttonpage01.txt index 0b5acd8..7bf6975 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/buttonpage01.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/buttonpage01.txt @@ -20,22 +20,31 @@ Page buttonpage01 vis 255,0 vis button_back,1 vis page_label,1 - page_index.txt+="●" - if(is_buttonpage02==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + page_index.txt+="●" + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - if(is_buttonpage03==1) - { - page_index.txt+="â—‹" - } - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage01",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/buttonpage02.txt b/hmi/dev/nspanel_CJK_us_land_code/buttonpage02.txt index eed659f..7234ead 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/buttonpage02.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/buttonpage02.txt @@ -20,22 +20,31 @@ Page buttonpage02 vis 255,0 vis button_back,1 vis page_label,1 - if(is_buttonpage01==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - page_index.txt+="●" - if(is_buttonpage03==1) - { - page_index.txt+="â—‹" - } - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage02",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/buttonpage03.txt b/hmi/dev/nspanel_CJK_us_land_code/buttonpage03.txt index 17f7232..bb10da9 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/buttonpage03.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/buttonpage03.txt @@ -20,22 +20,31 @@ Page buttonpage03 vis 255,0 vis button_back,1 vis page_label,1 - if(is_buttonpage01==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - if(is_buttonpage02==1) - { - page_index.txt+="â—‹" - } - page_index.txt+="●" - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage03",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/buttonpage04.txt b/hmi/dev/nspanel_CJK_us_land_code/buttonpage04.txt index 3268c4d..10773be 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/buttonpage04.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/buttonpage04.txt @@ -20,22 +20,31 @@ Page buttonpage04 vis 255,0 vis button_back,1 vis page_label,1 - if(is_buttonpage01==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + vis page_index,1 } - if(is_buttonpage02==1) - { - page_index.txt+="â—‹" - } - if(is_buttonpage03==1) - { - page_index.txt+="â—‹" - } - page_index.txt+="●" - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage04",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/climate.txt b/hmi/dev/nspanel_CJK_us_land_code/climate.txt index e016bb6..85f8cae 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/climate.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/climate.txt @@ -33,7 +33,12 @@ Page climate page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "climate",0 + printh 00 + printh FF FF FF Page Exit Event covx embedded.val,va2.txt,0,0 diff --git a/hmi/dev/nspanel_CJK_us_land_code/confirm.txt b/hmi/dev/nspanel_CJK_us_land_code/confirm.txt index 38da546..9675795 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/confirm.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/confirm.txt @@ -17,7 +17,12 @@ Page confirm page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "confirm",0 + printh 00 + printh FF FF FF Variable (int32) page_id Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/cover.txt b/hmi/dev/nspanel_CJK_us_land_code/cover.txt index 6b74670..55f323e 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/cover.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/cover.txt @@ -17,7 +17,12 @@ Page cover page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "cover",0 + printh 00 + printh FF FF FF Variable (string) va1 Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/entitypage01.txt b/hmi/dev/nspanel_CJK_us_land_code/entitypage01.txt index e4cf268..3944cd8 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/entitypage01.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/entitypage01.txt @@ -17,20 +17,32 @@ Page entitypage01 page home } vis unavailable,0 - page_index.txt+="●" - if(is_entitypage02==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage03==1) + page_index.txt+="●" + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage01",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/entitypage02.txt b/hmi/dev/nspanel_CJK_us_land_code/entitypage02.txt index 624506d..acaea22 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/entitypage02.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/entitypage02.txt @@ -17,20 +17,32 @@ Page entitypage02 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - page_index.txt+="●" - if(is_entitypage03==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage02",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/entitypage03.txt b/hmi/dev/nspanel_CJK_us_land_code/entitypage03.txt index b2b9ed3..428e485 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/entitypage03.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/entitypage03.txt @@ -17,20 +17,32 @@ Page entitypage03 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage02==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - page_index.txt+="●" - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage03",0 + printh 00 + printh FF FF FF Text value01_label Attributes @@ -122,7 +134,7 @@ Text value08_label Text : Max. Text Size : 60 -Text value01_pic +Text value01_icon Attributes ID : 12 Scope : local diff --git a/hmi/dev/nspanel_CJK_us_land_code/entitypage04.txt b/hmi/dev/nspanel_CJK_us_land_code/entitypage04.txt index 5ae4454..d40e216 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/entitypage04.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/entitypage04.txt @@ -17,20 +17,32 @@ Page entitypage04 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage02==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage03==1) - { - page_index.txt+="â—‹" - } - page_index.txt+="●" - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage04",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/fan.txt b/hmi/dev/nspanel_CJK_us_land_code/fan.txt index 95478b5..7b6a37d 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/fan.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/fan.txt @@ -18,7 +18,12 @@ Page fan } vis unavailable,0 vis bt_oscillate,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "fan",0 + printh 00 + printh FF FF FF Variable (string) fansetting Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/home.txt b/hmi/dev/nspanel_CJK_us_land_code/home.txt index 47e8ec6..e72affa 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/home.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/home.txt @@ -12,6 +12,16 @@ Page home Events Preinitialize Event + if(boot.progress.val<100) + { + page boot + } + printh 92 + prints "current_page",0 + printh 00 + prints "home",0 + printh 00 + printh FF FF FF back_page_id=0 if(qrcode.qrcode_value.txt=="") { @@ -31,7 +41,6 @@ Page home vis right_bt_text,0 } vis unavailable,0 - sendme Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/keyb_num.txt b/hmi/dev/nspanel_CJK_us_land_code/keyb_num.txt index 3c62216..02430bb 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/keyb_num.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/keyb_num.txt @@ -17,7 +17,12 @@ Page keyb_num page page_id.val } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "keyb_num",0 + printh 00 + printh FF FF FF Variable (int32) page_id Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/light.txt b/hmi/dev/nspanel_CJK_us_land_code/light.txt index 734b183..b68ce46 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/light.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/light.txt @@ -37,7 +37,12 @@ Page light vis color_button,0 } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "light",0 + printh 00 + printh FF FF FF Variable (int32) rgb565 Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/media_player.txt b/hmi/dev/nspanel_CJK_us_land_code/media_player.txt index dcf2a2f..7ed7ad7 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/media_player.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/media_player.txt @@ -17,7 +17,12 @@ Page media_player page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "media_player",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/notification.txt b/hmi/dev/nspanel_CJK_us_land_code/notification.txt index b6a6951..34e38af 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/notification.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/notification.txt @@ -17,7 +17,12 @@ Page notification page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "notification",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/qrcode.txt b/hmi/dev/nspanel_CJK_us_land_code/qrcode.txt index 6e55366..55fef89 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/qrcode.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/qrcode.txt @@ -13,7 +13,12 @@ Page qrcode Events Preinitialize Event vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "qrcode",0 + printh 00 + printh FF FF FF Text qrcode_label Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/screensaver.txt b/hmi/dev/nspanel_CJK_us_land_code/screensaver.txt index 6f8da50..e74eae1 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/screensaver.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/screensaver.txt @@ -15,7 +15,12 @@ Page screensaver vis text,0 dim=brightness_sleep vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "screensaver",0 + printh 00 + printh FF FF FF Touch Release Event page back_page_id diff --git a/hmi/dev/nspanel_CJK_us_land_code/settings.txt b/hmi/dev/nspanel_CJK_us_land_code/settings.txt index 1881ea9..0fbcd17 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/settings.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/settings.txt @@ -19,7 +19,12 @@ Page settings vis lbl_sleep,0 vis bt_sleep,0 vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "settings",0 + printh 00 + printh FF FF FF Text bright_text Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/utilities.txt b/hmi/dev/nspanel_CJK_us_land_code/utilities.txt index 30c6040..dd54019 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/utilities.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/utilities.txt @@ -20,7 +20,12 @@ Page utilities vis title_icon,1 vis title,1 vis button_back,1 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "utilities",0 + printh 00 + printh FF FF FF Variable (int32) line_main_d Attributes @@ -111,7 +116,7 @@ Text home_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Home + Text : Max. Text Size : 10 Text home @@ -151,7 +156,7 @@ Text grid_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Grid + Text : Max. Text Size : 10 Text grid @@ -191,7 +196,7 @@ Text group01_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group01 @@ -231,7 +236,7 @@ Text group02_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group02 @@ -271,7 +276,7 @@ Text group03_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group03 @@ -311,7 +316,7 @@ Text group04_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group04 @@ -351,7 +356,7 @@ Text group05_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group05 @@ -391,7 +396,7 @@ Text group06_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group06 diff --git a/hmi/dev/nspanel_CJK_us_land_code/weather01.txt b/hmi/dev/nspanel_CJK_us_land_code/weather01.txt index 878553e..05e71ba 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/weather01.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/weather01.txt @@ -17,7 +17,12 @@ Page weather01 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather01",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/weather02.txt b/hmi/dev/nspanel_CJK_us_land_code/weather02.txt index 9dbf735..a6453cf 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/weather02.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/weather02.txt @@ -17,7 +17,12 @@ Page weather02 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather02",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/weather03.txt b/hmi/dev/nspanel_CJK_us_land_code/weather03.txt index d0d38c9..25cb106 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/weather03.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/weather03.txt @@ -17,7 +17,12 @@ Page weather03 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather03",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/weather04.txt b/hmi/dev/nspanel_CJK_us_land_code/weather04.txt index 208299d..883dfe8 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/weather04.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/weather04.txt @@ -17,7 +17,12 @@ Page weather04 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather04",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_CJK_us_land_code/weather05.txt b/hmi/dev/nspanel_CJK_us_land_code/weather05.txt index 73bd1b8..594d52a 100644 --- a/hmi/dev/nspanel_CJK_us_land_code/weather05.txt +++ b/hmi/dev/nspanel_CJK_us_land_code/weather05.txt @@ -17,7 +17,12 @@ Page weather05 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather05",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_blank_code/blank.txt b/hmi/dev/nspanel_blank_code/blank.txt index 30eae3e..edbf89d 100644 --- a/hmi/dev/nspanel_blank_code/blank.txt +++ b/hmi/dev/nspanel_blank_code/blank.txt @@ -12,7 +12,12 @@ Page blank Events Preinitialize Event - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "blank",0 + printh 00 + printh FF FF FF dim=100 covx baud,baud_rate.txt,0,0 baud_rate.txt+=" bps" @@ -83,7 +88,7 @@ Text tft_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : TFT: v2024.1.2 + Text : TFT: v2024.3.0 Max. Text Size : 20 Events @@ -189,7 +194,12 @@ Timer tm_esphome { rest } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "blank",0 + printh 00 + printh FF FF FF printh 91 prints "display_mode",0 printh 00 diff --git a/hmi/dev/nspanel_blank_code/page0.txt b/hmi/dev/nspanel_blank_code/page0.txt deleted file mode 100644 index e6969bb..0000000 --- a/hmi/dev/nspanel_blank_code/page0.txt +++ /dev/null @@ -1,21 +0,0 @@ -Page page0 - Attributes - ID : 0 - Scope : local - Dragging : 0 - Send Component ID : disabled - Locked : no - Swide up page ID : disabled - Swide down page ID : disabled - Swide left page ID : disabled - Swide right page ID: disabled - -QR Code qr0 - Attributes - ID : 1 - Scope : local - Dragging : 0 - Send Component ID: disabled - Text : https://github.com/Blackymas/NSPanel_HA_Blueprint - Max. Text Size : 50 - diff --git a/hmi/dev/nspanel_blank_code/screensaver.txt b/hmi/dev/nspanel_blank_code/screensaver.txt deleted file mode 100644 index 66493e7..0000000 --- a/hmi/dev/nspanel_blank_code/screensaver.txt +++ /dev/null @@ -1,31 +0,0 @@ -Page screensaver - Attributes - ID : 0 - Scope : local - Dragging : 0 - Send Component ID : disabled - Locked : no - Swide up page ID : disabled - Swide down page ID : disabled - Swide left page ID : disabled - Swide right page ID: disabled - - Events - Preinitialize Event - printh 92 - prints "currentpage",0 - printh 00 - prints "blank-screensaver",0 - printh 00 - printh FF FF FF - dim=0 - printh 92 - prints "nspanelevent",0 - printh 00 - prints "{\"page\": \"blank-screensaver\", \"component\": \"currentpage\", \"value\": \"pagechange\", \"version\": \"2023.09.19\"}",0 - printh 00 - printh FF FF FF - - Touch Press Event - page blank - diff --git a/hmi/dev/nspanel_eu_code/Program.s.txt b/hmi/dev/nspanel_eu_code/Program.s.txt index b8d5912..f636188 100644 --- a/hmi/dev/nspanel_eu_code/Program.s.txt +++ b/hmi/dev/nspanel_eu_code/Program.s.txt @@ -6,7 +6,7 @@ Program.s int p=0,q=0,t=0,f=0 int is_buttonpage01=0, is_buttonpage02=0, is_buttonpage03=0, is_buttonpage04=0 int is_entitypage01=0, is_entitypage02=0, is_entitypage03=0, is_entitypage04=0 - int back_page_id=0 + int back_page_id=1 int dimdelta=0 int api=0 // 0 = disconnected from HA, 1 = connected to HA int is_utilities=0 @@ -20,4 +20,4 @@ Program.s { lcd_dev fffb 0002 0000 0020// Fix touch offset for EU Version } - page 8//Power on start page boot + page 0//Power on start page boot diff --git a/hmi/dev/nspanel_eu_code/alarm.txt b/hmi/dev/nspanel_eu_code/alarm.txt index 9bb1c6a..f7bdd14 100644 --- a/hmi/dev/nspanel_eu_code/alarm.txt +++ b/hmi/dev/nspanel_eu_code/alarm.txt @@ -24,7 +24,12 @@ Page alarm vis bt_bypass,0 } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "alarm",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_eu_code/boot.txt b/hmi/dev/nspanel_eu_code/boot.txt index fa2a4ca..37c7d7c 100644 --- a/hmi/dev/nspanel_eu_code/boot.txt +++ b/hmi/dev/nspanel_eu_code/boot.txt @@ -12,11 +12,16 @@ Page boot Events Preinitialize Event + printh 92 + prints "current_page",0 + printh 00 + prints "boot",0 + printh 00 + printh FF FF FF dim=100 covx baud,baud_rate.txt,0,0 baud_rate.txt+=" bps" vis unavailable,0 - sendme Page Exit Event dim=0 @@ -27,13 +32,6 @@ Variable (int32) counter Scope: local Value: 0 -Variable (string) aux1 - Attributes - ID : 12 - Scope : local - Text : - Max. Text Size: 10 - Text ip_addr Attributes ID : 1 @@ -101,7 +99,7 @@ Text tft_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : 4.3.0 + Text : 4.3.1b1 Max. Text Size : 9 Text esph_version @@ -111,8 +109,8 @@ Text esph_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : - Max. Text Size : 9 + Text : Waiting... + Max. Text Size : 10 Text bluep_version Attributes @@ -121,12 +119,12 @@ Text bluep_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : - Max. Text Size : 9 + Text : Waiting... + Max. Text Size : 10 Text baud_rate Attributes - ID : 14 + ID : 13 Scope : local Dragging : 0 Send Component ID : on press and release @@ -136,7 +134,7 @@ Text baud_rate Text framework Attributes - ID : 15 + ID : 14 Scope : local Dragging : 0 Send Component ID : on press and release @@ -146,7 +144,7 @@ Text framework Text unavailable Attributes - ID : 16 + ID : 15 Scope : local Dragging : 0 Send Component ID : disabled @@ -154,6 +152,14 @@ Text unavailable Text : Max. Text Size : 1 +Progress Bar progress + Attributes + ID : 16 + Scope : global + Dragging : 0 + Send Component ID: disabled + Value : 0 + Dual-state Button bt_reboot Attributes ID : 4 @@ -173,19 +179,28 @@ Dual-state Button bt_reboot Timer tm_esphome Attributes - ID : 13 + ID : 12 Scope : local - Period (ms): 10000 + Period (ms): 1000 Enabled : yes Events Timer Event + if(tm_esphome.tim!=10000) + { + tm_esphome.tim=10000 + } counter.val++ if(counter.val>30) { rest } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "boot",0 + printh 00 + printh FF FF FF printh 91 prints "display_mode",0 printh 00 @@ -197,13 +212,11 @@ Timer tm_esphome prints charset,0 printh FF FF FF printh 92 - prints "tft_version",0 + prints "boot.tft_version",0 printh 00 prints tft_version.txt,0 printh 00 printh FF FF FF - covx counter.val,aux1.txt,0,0 - esph_version.txt="Retry #"+aux1.txt sys0=counter.val%10 if(sys0==0) { diff --git a/hmi/dev/nspanel_eu_code/buttonpage01.txt b/hmi/dev/nspanel_eu_code/buttonpage01.txt index 0b5acd8..7bf6975 100644 --- a/hmi/dev/nspanel_eu_code/buttonpage01.txt +++ b/hmi/dev/nspanel_eu_code/buttonpage01.txt @@ -20,22 +20,31 @@ Page buttonpage01 vis 255,0 vis button_back,1 vis page_label,1 - page_index.txt+="●" - if(is_buttonpage02==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + page_index.txt+="●" + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - if(is_buttonpage03==1) - { - page_index.txt+="â—‹" - } - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage01",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_eu_code/buttonpage02.txt b/hmi/dev/nspanel_eu_code/buttonpage02.txt index eed659f..7234ead 100644 --- a/hmi/dev/nspanel_eu_code/buttonpage02.txt +++ b/hmi/dev/nspanel_eu_code/buttonpage02.txt @@ -20,22 +20,31 @@ Page buttonpage02 vis 255,0 vis button_back,1 vis page_label,1 - if(is_buttonpage01==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - page_index.txt+="●" - if(is_buttonpage03==1) - { - page_index.txt+="â—‹" - } - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage02",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_eu_code/buttonpage03.txt b/hmi/dev/nspanel_eu_code/buttonpage03.txt index 17f7232..bb10da9 100644 --- a/hmi/dev/nspanel_eu_code/buttonpage03.txt +++ b/hmi/dev/nspanel_eu_code/buttonpage03.txt @@ -20,22 +20,31 @@ Page buttonpage03 vis 255,0 vis button_back,1 vis page_label,1 - if(is_buttonpage01==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - if(is_buttonpage02==1) - { - page_index.txt+="â—‹" - } - page_index.txt+="●" - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage03",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_eu_code/buttonpage04.txt b/hmi/dev/nspanel_eu_code/buttonpage04.txt index 3268c4d..10773be 100644 --- a/hmi/dev/nspanel_eu_code/buttonpage04.txt +++ b/hmi/dev/nspanel_eu_code/buttonpage04.txt @@ -20,22 +20,31 @@ Page buttonpage04 vis 255,0 vis button_back,1 vis page_label,1 - if(is_buttonpage01==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + vis page_index,1 } - if(is_buttonpage02==1) - { - page_index.txt+="â—‹" - } - if(is_buttonpage03==1) - { - page_index.txt+="â—‹" - } - page_index.txt+="●" - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage04",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_eu_code/climate.txt b/hmi/dev/nspanel_eu_code/climate.txt index e016bb6..85f8cae 100644 --- a/hmi/dev/nspanel_eu_code/climate.txt +++ b/hmi/dev/nspanel_eu_code/climate.txt @@ -33,7 +33,12 @@ Page climate page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "climate",0 + printh 00 + printh FF FF FF Page Exit Event covx embedded.val,va2.txt,0,0 diff --git a/hmi/dev/nspanel_eu_code/confirm.txt b/hmi/dev/nspanel_eu_code/confirm.txt index 38da546..9675795 100644 --- a/hmi/dev/nspanel_eu_code/confirm.txt +++ b/hmi/dev/nspanel_eu_code/confirm.txt @@ -17,7 +17,12 @@ Page confirm page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "confirm",0 + printh 00 + printh FF FF FF Variable (int32) page_id Attributes diff --git a/hmi/dev/nspanel_eu_code/cover.txt b/hmi/dev/nspanel_eu_code/cover.txt index 6b74670..55f323e 100644 --- a/hmi/dev/nspanel_eu_code/cover.txt +++ b/hmi/dev/nspanel_eu_code/cover.txt @@ -17,7 +17,12 @@ Page cover page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "cover",0 + printh 00 + printh FF FF FF Variable (string) va1 Attributes diff --git a/hmi/dev/nspanel_eu_code/entitypage01.txt b/hmi/dev/nspanel_eu_code/entitypage01.txt index e4cf268..3944cd8 100644 --- a/hmi/dev/nspanel_eu_code/entitypage01.txt +++ b/hmi/dev/nspanel_eu_code/entitypage01.txt @@ -17,20 +17,32 @@ Page entitypage01 page home } vis unavailable,0 - page_index.txt+="●" - if(is_entitypage02==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage03==1) + page_index.txt+="●" + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage01",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_eu_code/entitypage02.txt b/hmi/dev/nspanel_eu_code/entitypage02.txt index 624506d..acaea22 100644 --- a/hmi/dev/nspanel_eu_code/entitypage02.txt +++ b/hmi/dev/nspanel_eu_code/entitypage02.txt @@ -17,20 +17,32 @@ Page entitypage02 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - page_index.txt+="●" - if(is_entitypage03==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage02",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_eu_code/entitypage03.txt b/hmi/dev/nspanel_eu_code/entitypage03.txt index b2b9ed3..428e485 100644 --- a/hmi/dev/nspanel_eu_code/entitypage03.txt +++ b/hmi/dev/nspanel_eu_code/entitypage03.txt @@ -17,20 +17,32 @@ Page entitypage03 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage02==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - page_index.txt+="●" - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage03",0 + printh 00 + printh FF FF FF Text value01_label Attributes @@ -122,7 +134,7 @@ Text value08_label Text : Max. Text Size : 60 -Text value01_pic +Text value01_icon Attributes ID : 12 Scope : local diff --git a/hmi/dev/nspanel_eu_code/entitypage04.txt b/hmi/dev/nspanel_eu_code/entitypage04.txt index 5ae4454..d40e216 100644 --- a/hmi/dev/nspanel_eu_code/entitypage04.txt +++ b/hmi/dev/nspanel_eu_code/entitypage04.txt @@ -17,20 +17,32 @@ Page entitypage04 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage02==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage03==1) - { - page_index.txt+="â—‹" - } - page_index.txt+="●" - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage04",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_eu_code/fan.txt b/hmi/dev/nspanel_eu_code/fan.txt index 95478b5..7b6a37d 100644 --- a/hmi/dev/nspanel_eu_code/fan.txt +++ b/hmi/dev/nspanel_eu_code/fan.txt @@ -18,7 +18,12 @@ Page fan } vis unavailable,0 vis bt_oscillate,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "fan",0 + printh 00 + printh FF FF FF Variable (string) fansetting Attributes diff --git a/hmi/dev/nspanel_eu_code/home.txt b/hmi/dev/nspanel_eu_code/home.txt index 47e8ec6..e72affa 100644 --- a/hmi/dev/nspanel_eu_code/home.txt +++ b/hmi/dev/nspanel_eu_code/home.txt @@ -12,6 +12,16 @@ Page home Events Preinitialize Event + if(boot.progress.val<100) + { + page boot + } + printh 92 + prints "current_page",0 + printh 00 + prints "home",0 + printh 00 + printh FF FF FF back_page_id=0 if(qrcode.qrcode_value.txt=="") { @@ -31,7 +41,6 @@ Page home vis right_bt_text,0 } vis unavailable,0 - sendme Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_eu_code/keyb_num.txt b/hmi/dev/nspanel_eu_code/keyb_num.txt index 3c62216..02430bb 100644 --- a/hmi/dev/nspanel_eu_code/keyb_num.txt +++ b/hmi/dev/nspanel_eu_code/keyb_num.txt @@ -17,7 +17,12 @@ Page keyb_num page page_id.val } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "keyb_num",0 + printh 00 + printh FF FF FF Variable (int32) page_id Attributes diff --git a/hmi/dev/nspanel_eu_code/light.txt b/hmi/dev/nspanel_eu_code/light.txt index 734b183..b68ce46 100644 --- a/hmi/dev/nspanel_eu_code/light.txt +++ b/hmi/dev/nspanel_eu_code/light.txt @@ -37,7 +37,12 @@ Page light vis color_button,0 } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "light",0 + printh 00 + printh FF FF FF Variable (int32) rgb565 Attributes diff --git a/hmi/dev/nspanel_eu_code/media_player.txt b/hmi/dev/nspanel_eu_code/media_player.txt index dcf2a2f..7ed7ad7 100644 --- a/hmi/dev/nspanel_eu_code/media_player.txt +++ b/hmi/dev/nspanel_eu_code/media_player.txt @@ -17,7 +17,12 @@ Page media_player page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "media_player",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_eu_code/notification.txt b/hmi/dev/nspanel_eu_code/notification.txt index b6a6951..34e38af 100644 --- a/hmi/dev/nspanel_eu_code/notification.txt +++ b/hmi/dev/nspanel_eu_code/notification.txt @@ -17,7 +17,12 @@ Page notification page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "notification",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_eu_code/qrcode.txt b/hmi/dev/nspanel_eu_code/qrcode.txt index 6e55366..55fef89 100644 --- a/hmi/dev/nspanel_eu_code/qrcode.txt +++ b/hmi/dev/nspanel_eu_code/qrcode.txt @@ -13,7 +13,12 @@ Page qrcode Events Preinitialize Event vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "qrcode",0 + printh 00 + printh FF FF FF Text qrcode_label Attributes diff --git a/hmi/dev/nspanel_eu_code/screensaver.txt b/hmi/dev/nspanel_eu_code/screensaver.txt index 6f8da50..e74eae1 100644 --- a/hmi/dev/nspanel_eu_code/screensaver.txt +++ b/hmi/dev/nspanel_eu_code/screensaver.txt @@ -15,7 +15,12 @@ Page screensaver vis text,0 dim=brightness_sleep vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "screensaver",0 + printh 00 + printh FF FF FF Touch Release Event page back_page_id diff --git a/hmi/dev/nspanel_eu_code/settings.txt b/hmi/dev/nspanel_eu_code/settings.txt index 1881ea9..0fbcd17 100644 --- a/hmi/dev/nspanel_eu_code/settings.txt +++ b/hmi/dev/nspanel_eu_code/settings.txt @@ -19,7 +19,12 @@ Page settings vis lbl_sleep,0 vis bt_sleep,0 vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "settings",0 + printh 00 + printh FF FF FF Text bright_text Attributes diff --git a/hmi/dev/nspanel_eu_code/utilities.txt b/hmi/dev/nspanel_eu_code/utilities.txt index 30c6040..dd54019 100644 --- a/hmi/dev/nspanel_eu_code/utilities.txt +++ b/hmi/dev/nspanel_eu_code/utilities.txt @@ -20,7 +20,12 @@ Page utilities vis title_icon,1 vis title,1 vis button_back,1 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "utilities",0 + printh 00 + printh FF FF FF Variable (int32) line_main_d Attributes @@ -111,7 +116,7 @@ Text home_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Home + Text : Max. Text Size : 10 Text home @@ -151,7 +156,7 @@ Text grid_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Grid + Text : Max. Text Size : 10 Text grid @@ -191,7 +196,7 @@ Text group01_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group01 @@ -231,7 +236,7 @@ Text group02_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group02 @@ -271,7 +276,7 @@ Text group03_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group03 @@ -311,7 +316,7 @@ Text group04_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group04 @@ -351,7 +356,7 @@ Text group05_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group05 @@ -391,7 +396,7 @@ Text group06_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group06 diff --git a/hmi/dev/nspanel_eu_code/weather01.txt b/hmi/dev/nspanel_eu_code/weather01.txt index 878553e..05e71ba 100644 --- a/hmi/dev/nspanel_eu_code/weather01.txt +++ b/hmi/dev/nspanel_eu_code/weather01.txt @@ -17,7 +17,12 @@ Page weather01 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather01",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_eu_code/weather02.txt b/hmi/dev/nspanel_eu_code/weather02.txt index 9dbf735..a6453cf 100644 --- a/hmi/dev/nspanel_eu_code/weather02.txt +++ b/hmi/dev/nspanel_eu_code/weather02.txt @@ -17,7 +17,12 @@ Page weather02 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather02",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_eu_code/weather03.txt b/hmi/dev/nspanel_eu_code/weather03.txt index d0d38c9..25cb106 100644 --- a/hmi/dev/nspanel_eu_code/weather03.txt +++ b/hmi/dev/nspanel_eu_code/weather03.txt @@ -17,7 +17,12 @@ Page weather03 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather03",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_eu_code/weather04.txt b/hmi/dev/nspanel_eu_code/weather04.txt index 208299d..883dfe8 100644 --- a/hmi/dev/nspanel_eu_code/weather04.txt +++ b/hmi/dev/nspanel_eu_code/weather04.txt @@ -17,7 +17,12 @@ Page weather04 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather04",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_eu_code/weather05.txt b/hmi/dev/nspanel_eu_code/weather05.txt index 73bd1b8..594d52a 100644 --- a/hmi/dev/nspanel_eu_code/weather05.txt +++ b/hmi/dev/nspanel_eu_code/weather05.txt @@ -17,7 +17,12 @@ Page weather05 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather05",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_us_code/Program.s.txt b/hmi/dev/nspanel_us_code/Program.s.txt index 201bccf..97bdfbf 100644 --- a/hmi/dev/nspanel_us_code/Program.s.txt +++ b/hmi/dev/nspanel_us_code/Program.s.txt @@ -6,7 +6,7 @@ Program.s int p=0,q=0,t=0,f=0 int is_buttonpage01=0, is_buttonpage02=0, is_buttonpage03=0, is_buttonpage04=0 int is_entitypage01=0, is_entitypage02=0, is_entitypage03=0, is_entitypage04=0 - int back_page_id=0 + int back_page_id=1 int dimdelta=0 int api=0 // 0 = disconnected from HA, 1 = connected to HA int is_utilities=0 @@ -20,4 +20,4 @@ Program.s { lcd_dev fffb 0002 0000 0020// Fix touch offset for EU Version } - page 8//Power on start page boot + page 0//Power on start page boot diff --git a/hmi/dev/nspanel_us_code/alarm.txt b/hmi/dev/nspanel_us_code/alarm.txt index a2a65cf..1028126 100644 --- a/hmi/dev/nspanel_us_code/alarm.txt +++ b/hmi/dev/nspanel_us_code/alarm.txt @@ -24,7 +24,12 @@ Page alarm vis bt_bypass,0 } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "alarm",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_us_code/boot.txt b/hmi/dev/nspanel_us_code/boot.txt index efcbc7e..a7382ea 100644 --- a/hmi/dev/nspanel_us_code/boot.txt +++ b/hmi/dev/nspanel_us_code/boot.txt @@ -12,11 +12,16 @@ Page boot Events Preinitialize Event + printh 92 + prints "current_page",0 + printh 00 + prints "boot",0 + printh 00 + printh FF FF FF dim=100 covx baud,baud_rate.txt,0,0 baud_rate.txt+=" bps" vis unavailable,0 - sendme Page Exit Event dim=0 @@ -27,13 +32,6 @@ Variable (int32) counter Scope: local Value: 0 -Variable (string) aux1 - Attributes - ID : 12 - Scope : local - Text : - Max. Text Size: 10 - Text ip_addr Attributes ID : 1 @@ -101,7 +99,7 @@ Text tft_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : 4.3.0 + Text : 4.3.1b1 Max. Text Size : 9 Events @@ -118,8 +116,8 @@ Text esph_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : - Max. Text Size : 9 + Text : Waiting... + Max. Text Size : 10 Text bluep_version Attributes @@ -128,12 +126,12 @@ Text bluep_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : - Max. Text Size : 9 + Text : Waiting... + Max. Text Size : 10 Text baud_rate Attributes - ID : 14 + ID : 13 Scope : local Dragging : 0 Send Component ID : on press and release @@ -143,7 +141,7 @@ Text baud_rate Text framework Attributes - ID : 15 + ID : 14 Scope : local Dragging : 0 Send Component ID : on press and release @@ -153,7 +151,7 @@ Text framework Text unavailable Attributes - ID : 16 + ID : 15 Scope : local Dragging : 0 Send Component ID : disabled @@ -161,6 +159,14 @@ Text unavailable Text : Max. Text Size : 1 +Progress Bar progress + Attributes + ID : 16 + Scope : global + Dragging : 0 + Send Component ID: disabled + Value : 0 + Dual-state Button bt_reboot Attributes ID : 4 @@ -180,19 +186,28 @@ Dual-state Button bt_reboot Timer tm_esphome Attributes - ID : 13 + ID : 12 Scope : local - Period (ms): 10000 + Period (ms): 1000 Enabled : yes Events Timer Event + if(tm_esphome.tim!=10000) + { + tm_esphome.tim=10000 + } counter.val++ if(counter.val>30) { rest } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "boot",0 + printh 00 + printh FF FF FF printh 91 prints "display_mode",0 printh 00 @@ -204,13 +219,11 @@ Timer tm_esphome prints charset,0 printh FF FF FF printh 92 - prints "tft_version",0 + prints "boot.tft_version",0 printh 00 prints tft_version.txt,0 printh 00 printh FF FF FF - covx counter.val,aux1.txt,0,0 - esph_version.txt="Retry #"+aux1.txt sys0=counter.val%10 if(sys0==0) { diff --git a/hmi/dev/nspanel_us_code/buttonpage01.txt b/hmi/dev/nspanel_us_code/buttonpage01.txt index 0b5acd8..7bf6975 100644 --- a/hmi/dev/nspanel_us_code/buttonpage01.txt +++ b/hmi/dev/nspanel_us_code/buttonpage01.txt @@ -20,22 +20,31 @@ Page buttonpage01 vis 255,0 vis button_back,1 vis page_label,1 - page_index.txt+="●" - if(is_buttonpage02==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + page_index.txt+="●" + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - if(is_buttonpage03==1) - { - page_index.txt+="â—‹" - } - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage01",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_us_code/buttonpage02.txt b/hmi/dev/nspanel_us_code/buttonpage02.txt index eed659f..7234ead 100644 --- a/hmi/dev/nspanel_us_code/buttonpage02.txt +++ b/hmi/dev/nspanel_us_code/buttonpage02.txt @@ -20,22 +20,31 @@ Page buttonpage02 vis 255,0 vis button_back,1 vis page_label,1 - if(is_buttonpage01==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - page_index.txt+="●" - if(is_buttonpage03==1) - { - page_index.txt+="â—‹" - } - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage02",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_us_code/buttonpage03.txt b/hmi/dev/nspanel_us_code/buttonpage03.txt index 17f7232..bb10da9 100644 --- a/hmi/dev/nspanel_us_code/buttonpage03.txt +++ b/hmi/dev/nspanel_us_code/buttonpage03.txt @@ -20,22 +20,31 @@ Page buttonpage03 vis 255,0 vis button_back,1 vis page_label,1 - if(is_buttonpage01==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - if(is_buttonpage02==1) - { - page_index.txt+="â—‹" - } - page_index.txt+="●" - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage03",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_us_code/buttonpage04.txt b/hmi/dev/nspanel_us_code/buttonpage04.txt index 6199075..76ba7d4 100644 --- a/hmi/dev/nspanel_us_code/buttonpage04.txt +++ b/hmi/dev/nspanel_us_code/buttonpage04.txt @@ -19,10 +19,32 @@ Page buttonpage04 { vis 255,0 vis button_back,1 - vis page_index,1 vis page_label,1 + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) + { + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + vis page_index,1 + } } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage04",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_us_code/climate.txt b/hmi/dev/nspanel_us_code/climate.txt index 3ba81b3..d948bf6 100644 --- a/hmi/dev/nspanel_us_code/climate.txt +++ b/hmi/dev/nspanel_us_code/climate.txt @@ -33,7 +33,12 @@ Page climate page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "climate",0 + printh 00 + printh FF FF FF Page Exit Event covx embedded.val,va2.txt,0,0 diff --git a/hmi/dev/nspanel_us_code/confirm.txt b/hmi/dev/nspanel_us_code/confirm.txt index 38da546..9675795 100644 --- a/hmi/dev/nspanel_us_code/confirm.txt +++ b/hmi/dev/nspanel_us_code/confirm.txt @@ -17,7 +17,12 @@ Page confirm page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "confirm",0 + printh 00 + printh FF FF FF Variable (int32) page_id Attributes diff --git a/hmi/dev/nspanel_us_code/cover.txt b/hmi/dev/nspanel_us_code/cover.txt index a103257..b356399 100644 --- a/hmi/dev/nspanel_us_code/cover.txt +++ b/hmi/dev/nspanel_us_code/cover.txt @@ -17,7 +17,12 @@ Page cover page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "cover",0 + printh 00 + printh FF FF FF Variable (string) va1 Attributes diff --git a/hmi/dev/nspanel_us_code/entitypage01.txt b/hmi/dev/nspanel_us_code/entitypage01.txt index e4cf268..3944cd8 100644 --- a/hmi/dev/nspanel_us_code/entitypage01.txt +++ b/hmi/dev/nspanel_us_code/entitypage01.txt @@ -17,20 +17,32 @@ Page entitypage01 page home } vis unavailable,0 - page_index.txt+="●" - if(is_entitypage02==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage03==1) + page_index.txt+="●" + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage01",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_us_code/entitypage02.txt b/hmi/dev/nspanel_us_code/entitypage02.txt index 624506d..acaea22 100644 --- a/hmi/dev/nspanel_us_code/entitypage02.txt +++ b/hmi/dev/nspanel_us_code/entitypage02.txt @@ -17,20 +17,32 @@ Page entitypage02 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - page_index.txt+="●" - if(is_entitypage03==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage02",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_us_code/entitypage03.txt b/hmi/dev/nspanel_us_code/entitypage03.txt index 6112d73..f2a403d 100644 --- a/hmi/dev/nspanel_us_code/entitypage03.txt +++ b/hmi/dev/nspanel_us_code/entitypage03.txt @@ -17,20 +17,32 @@ Page entitypage03 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage02==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - page_index.txt+="●" - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage03",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_us_code/entitypage04.txt b/hmi/dev/nspanel_us_code/entitypage04.txt index 5ae4454..d40e216 100644 --- a/hmi/dev/nspanel_us_code/entitypage04.txt +++ b/hmi/dev/nspanel_us_code/entitypage04.txt @@ -17,20 +17,32 @@ Page entitypage04 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage02==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage03==1) - { - page_index.txt+="â—‹" - } - page_index.txt+="●" - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage04",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_us_code/fan.txt b/hmi/dev/nspanel_us_code/fan.txt index 95478b5..7b6a37d 100644 --- a/hmi/dev/nspanel_us_code/fan.txt +++ b/hmi/dev/nspanel_us_code/fan.txt @@ -18,7 +18,12 @@ Page fan } vis unavailable,0 vis bt_oscillate,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "fan",0 + printh 00 + printh FF FF FF Variable (string) fansetting Attributes diff --git a/hmi/dev/nspanel_us_code/home.txt b/hmi/dev/nspanel_us_code/home.txt index 99bd032..17e6b8d 100644 --- a/hmi/dev/nspanel_us_code/home.txt +++ b/hmi/dev/nspanel_us_code/home.txt @@ -12,6 +12,16 @@ Page home Events Preinitialize Event + if(boot.progress.val<100) + { + page boot + } + printh 92 + prints "current_page",0 + printh 00 + prints "home",0 + printh 00 + printh FF FF FF back_page_id=0 if(qrcode.qrcode_value.txt=="") { @@ -31,7 +41,6 @@ Page home vis right_bt_text,0 } vis unavailable,0 - sendme Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_us_code/keyb_num.txt b/hmi/dev/nspanel_us_code/keyb_num.txt index adcc655..ccd096f 100644 --- a/hmi/dev/nspanel_us_code/keyb_num.txt +++ b/hmi/dev/nspanel_us_code/keyb_num.txt @@ -17,7 +17,12 @@ Page keyb_num page page_id.val } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "keyb_num",0 + printh 00 + printh FF FF FF Variable (int32) page_id Attributes diff --git a/hmi/dev/nspanel_us_code/light.txt b/hmi/dev/nspanel_us_code/light.txt index 54e4869..337e204 100644 --- a/hmi/dev/nspanel_us_code/light.txt +++ b/hmi/dev/nspanel_us_code/light.txt @@ -37,7 +37,12 @@ Page light vis color_button,0 } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "light",0 + printh 00 + printh FF FF FF Variable (int32) rgb565 Attributes diff --git a/hmi/dev/nspanel_us_code/media_player.txt b/hmi/dev/nspanel_us_code/media_player.txt index 4050fd7..94bf532 100644 --- a/hmi/dev/nspanel_us_code/media_player.txt +++ b/hmi/dev/nspanel_us_code/media_player.txt @@ -17,7 +17,12 @@ Page media_player page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "media_player",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_us_code/notification.txt b/hmi/dev/nspanel_us_code/notification.txt index 731f0d7..570f9f6 100644 --- a/hmi/dev/nspanel_us_code/notification.txt +++ b/hmi/dev/nspanel_us_code/notification.txt @@ -17,7 +17,12 @@ Page notification page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "notification",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_us_code/qrcode.txt b/hmi/dev/nspanel_us_code/qrcode.txt index 6e55366..55fef89 100644 --- a/hmi/dev/nspanel_us_code/qrcode.txt +++ b/hmi/dev/nspanel_us_code/qrcode.txt @@ -13,7 +13,12 @@ Page qrcode Events Preinitialize Event vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "qrcode",0 + printh 00 + printh FF FF FF Text qrcode_label Attributes diff --git a/hmi/dev/nspanel_us_code/screensaver.txt b/hmi/dev/nspanel_us_code/screensaver.txt index 6f8da50..e74eae1 100644 --- a/hmi/dev/nspanel_us_code/screensaver.txt +++ b/hmi/dev/nspanel_us_code/screensaver.txt @@ -15,7 +15,12 @@ Page screensaver vis text,0 dim=brightness_sleep vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "screensaver",0 + printh 00 + printh FF FF FF Touch Release Event page back_page_id diff --git a/hmi/dev/nspanel_us_code/settings.txt b/hmi/dev/nspanel_us_code/settings.txt index 7d51a3e..60098e1 100644 --- a/hmi/dev/nspanel_us_code/settings.txt +++ b/hmi/dev/nspanel_us_code/settings.txt @@ -19,7 +19,12 @@ Page settings vis lbl_sleep,0 vis bt_sleep,0 vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "settings",0 + printh 00 + printh FF FF FF Text bright_text Attributes diff --git a/hmi/dev/nspanel_us_code/utilities.txt b/hmi/dev/nspanel_us_code/utilities.txt index a664959..b1386de 100644 --- a/hmi/dev/nspanel_us_code/utilities.txt +++ b/hmi/dev/nspanel_us_code/utilities.txt @@ -20,7 +20,12 @@ Page utilities vis title_icon,1 vis title,1 vis button_back,1 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "utilities",0 + printh 00 + printh FF FF FF Variable (int32) line_main_d Attributes @@ -111,7 +116,7 @@ Text home_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Home + Text : Max. Text Size : 10 Text home @@ -151,7 +156,7 @@ Text grid_label Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : Grid + Text : Max. Text Size : 10 Text grid @@ -191,7 +196,7 @@ Text group01_label Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group01 @@ -231,7 +236,7 @@ Text group02_label Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group02 @@ -271,7 +276,7 @@ Text group03_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group03 @@ -311,7 +316,7 @@ Text group04_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group04 @@ -351,7 +356,7 @@ Text group05_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group05 @@ -391,7 +396,7 @@ Text group06_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group06 diff --git a/hmi/dev/nspanel_us_code/weather01.txt b/hmi/dev/nspanel_us_code/weather01.txt index 878553e..05e71ba 100644 --- a/hmi/dev/nspanel_us_code/weather01.txt +++ b/hmi/dev/nspanel_us_code/weather01.txt @@ -17,7 +17,12 @@ Page weather01 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather01",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_us_code/weather02.txt b/hmi/dev/nspanel_us_code/weather02.txt index 9dbf735..a6453cf 100644 --- a/hmi/dev/nspanel_us_code/weather02.txt +++ b/hmi/dev/nspanel_us_code/weather02.txt @@ -17,7 +17,12 @@ Page weather02 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather02",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_us_code/weather03.txt b/hmi/dev/nspanel_us_code/weather03.txt index d0d38c9..25cb106 100644 --- a/hmi/dev/nspanel_us_code/weather03.txt +++ b/hmi/dev/nspanel_us_code/weather03.txt @@ -17,7 +17,12 @@ Page weather03 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather03",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_us_code/weather04.txt b/hmi/dev/nspanel_us_code/weather04.txt index 208299d..883dfe8 100644 --- a/hmi/dev/nspanel_us_code/weather04.txt +++ b/hmi/dev/nspanel_us_code/weather04.txt @@ -17,7 +17,12 @@ Page weather04 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather04",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_us_code/weather05.txt b/hmi/dev/nspanel_us_code/weather05.txt index 73bd1b8..594d52a 100644 --- a/hmi/dev/nspanel_us_code/weather05.txt +++ b/hmi/dev/nspanel_us_code/weather05.txt @@ -17,7 +17,12 @@ Page weather05 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather05",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_us_land_code/Program.s.txt b/hmi/dev/nspanel_us_land_code/Program.s.txt index a80eb68..3087457 100644 --- a/hmi/dev/nspanel_us_land_code/Program.s.txt +++ b/hmi/dev/nspanel_us_land_code/Program.s.txt @@ -6,7 +6,7 @@ Program.s int p=0,q=0,t=0,f=0 int is_buttonpage01=0, is_buttonpage02=0, is_buttonpage03=0, is_buttonpage04=0 int is_entitypage01=0, is_entitypage02=0, is_entitypage03=0, is_entitypage04=0 - int back_page_id=0 + int back_page_id=1 int dimdelta=0 int api=0 // 0 = disconnected from HA, 1 = connected to HA int is_utilities=0 @@ -20,4 +20,4 @@ Program.s { lcd_dev fffb 0002 0000 0020// Fix touch offset for EU Version } - page 8//Power on start page boot + page 0//Power on start page boot diff --git a/hmi/dev/nspanel_us_land_code/alarm.txt b/hmi/dev/nspanel_us_land_code/alarm.txt index 9bb1c6a..f7bdd14 100644 --- a/hmi/dev/nspanel_us_land_code/alarm.txt +++ b/hmi/dev/nspanel_us_land_code/alarm.txt @@ -24,7 +24,12 @@ Page alarm vis bt_bypass,0 } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "alarm",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_us_land_code/boot.txt b/hmi/dev/nspanel_us_land_code/boot.txt index fa2a4ca..37c7d7c 100644 --- a/hmi/dev/nspanel_us_land_code/boot.txt +++ b/hmi/dev/nspanel_us_land_code/boot.txt @@ -12,11 +12,16 @@ Page boot Events Preinitialize Event + printh 92 + prints "current_page",0 + printh 00 + prints "boot",0 + printh 00 + printh FF FF FF dim=100 covx baud,baud_rate.txt,0,0 baud_rate.txt+=" bps" vis unavailable,0 - sendme Page Exit Event dim=0 @@ -27,13 +32,6 @@ Variable (int32) counter Scope: local Value: 0 -Variable (string) aux1 - Attributes - ID : 12 - Scope : local - Text : - Max. Text Size: 10 - Text ip_addr Attributes ID : 1 @@ -101,7 +99,7 @@ Text tft_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : 4.3.0 + Text : 4.3.1b1 Max. Text Size : 9 Text esph_version @@ -111,8 +109,8 @@ Text esph_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : - Max. Text Size : 9 + Text : Waiting... + Max. Text Size : 10 Text bluep_version Attributes @@ -121,12 +119,12 @@ Text bluep_version Dragging : 0 Send Component ID : on press and release Associated Keyboard: none - Text : - Max. Text Size : 9 + Text : Waiting... + Max. Text Size : 10 Text baud_rate Attributes - ID : 14 + ID : 13 Scope : local Dragging : 0 Send Component ID : on press and release @@ -136,7 +134,7 @@ Text baud_rate Text framework Attributes - ID : 15 + ID : 14 Scope : local Dragging : 0 Send Component ID : on press and release @@ -146,7 +144,7 @@ Text framework Text unavailable Attributes - ID : 16 + ID : 15 Scope : local Dragging : 0 Send Component ID : disabled @@ -154,6 +152,14 @@ Text unavailable Text : Max. Text Size : 1 +Progress Bar progress + Attributes + ID : 16 + Scope : global + Dragging : 0 + Send Component ID: disabled + Value : 0 + Dual-state Button bt_reboot Attributes ID : 4 @@ -173,19 +179,28 @@ Dual-state Button bt_reboot Timer tm_esphome Attributes - ID : 13 + ID : 12 Scope : local - Period (ms): 10000 + Period (ms): 1000 Enabled : yes Events Timer Event + if(tm_esphome.tim!=10000) + { + tm_esphome.tim=10000 + } counter.val++ if(counter.val>30) { rest } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "boot",0 + printh 00 + printh FF FF FF printh 91 prints "display_mode",0 printh 00 @@ -197,13 +212,11 @@ Timer tm_esphome prints charset,0 printh FF FF FF printh 92 - prints "tft_version",0 + prints "boot.tft_version",0 printh 00 prints tft_version.txt,0 printh 00 printh FF FF FF - covx counter.val,aux1.txt,0,0 - esph_version.txt="Retry #"+aux1.txt sys0=counter.val%10 if(sys0==0) { diff --git a/hmi/dev/nspanel_us_land_code/buttonpage01.txt b/hmi/dev/nspanel_us_land_code/buttonpage01.txt index 0b5acd8..7bf6975 100644 --- a/hmi/dev/nspanel_us_land_code/buttonpage01.txt +++ b/hmi/dev/nspanel_us_land_code/buttonpage01.txt @@ -20,22 +20,31 @@ Page buttonpage01 vis 255,0 vis button_back,1 vis page_label,1 - page_index.txt+="●" - if(is_buttonpage02==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + page_index.txt+="●" + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - if(is_buttonpage03==1) - { - page_index.txt+="â—‹" - } - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage01",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_us_land_code/buttonpage02.txt b/hmi/dev/nspanel_us_land_code/buttonpage02.txt index eed659f..7234ead 100644 --- a/hmi/dev/nspanel_us_land_code/buttonpage02.txt +++ b/hmi/dev/nspanel_us_land_code/buttonpage02.txt @@ -20,22 +20,31 @@ Page buttonpage02 vis 255,0 vis button_back,1 vis page_label,1 - if(is_buttonpage01==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - page_index.txt+="●" - if(is_buttonpage03==1) - { - page_index.txt+="â—‹" - } - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage02",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_us_land_code/buttonpage03.txt b/hmi/dev/nspanel_us_land_code/buttonpage03.txt index 17f7232..bb10da9 100644 --- a/hmi/dev/nspanel_us_land_code/buttonpage03.txt +++ b/hmi/dev/nspanel_us_land_code/buttonpage03.txt @@ -20,22 +20,31 @@ Page buttonpage03 vis 255,0 vis button_back,1 vis page_label,1 - if(is_buttonpage01==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_buttonpage04==1) + { + page_index.txt+="â—‹" + } + vis page_index,1 } - if(is_buttonpage02==1) - { - page_index.txt+="â—‹" - } - page_index.txt+="●" - if(is_buttonpage04==1) - { - page_index.txt+="â—‹" - } - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage03",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_us_land_code/buttonpage04.txt b/hmi/dev/nspanel_us_land_code/buttonpage04.txt index 3268c4d..10773be 100644 --- a/hmi/dev/nspanel_us_land_code/buttonpage04.txt +++ b/hmi/dev/nspanel_us_land_code/buttonpage04.txt @@ -20,22 +20,31 @@ Page buttonpage04 vis 255,0 vis button_back,1 vis page_label,1 - if(is_buttonpage01==1) + sys0=is_buttonpage01+is_buttonpage02+is_buttonpage03+is_buttonpage04 + if(sys0>1) { - page_index.txt+="â—‹" + if(is_buttonpage01==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage02==1) + { + page_index.txt+="â—‹" + } + if(is_buttonpage03==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + vis page_index,1 } - if(is_buttonpage02==1) - { - page_index.txt+="â—‹" - } - if(is_buttonpage03==1) - { - page_index.txt+="â—‹" - } - page_index.txt+="●" - vis page_index,1 } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "buttonpage04",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_us_land_code/climate.txt b/hmi/dev/nspanel_us_land_code/climate.txt index e016bb6..85f8cae 100644 --- a/hmi/dev/nspanel_us_land_code/climate.txt +++ b/hmi/dev/nspanel_us_land_code/climate.txt @@ -33,7 +33,12 @@ Page climate page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "climate",0 + printh 00 + printh FF FF FF Page Exit Event covx embedded.val,va2.txt,0,0 diff --git a/hmi/dev/nspanel_us_land_code/confirm.txt b/hmi/dev/nspanel_us_land_code/confirm.txt index 38da546..9675795 100644 --- a/hmi/dev/nspanel_us_land_code/confirm.txt +++ b/hmi/dev/nspanel_us_land_code/confirm.txt @@ -17,7 +17,12 @@ Page confirm page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "confirm",0 + printh 00 + printh FF FF FF Variable (int32) page_id Attributes diff --git a/hmi/dev/nspanel_us_land_code/cover.txt b/hmi/dev/nspanel_us_land_code/cover.txt index 6b74670..55f323e 100644 --- a/hmi/dev/nspanel_us_land_code/cover.txt +++ b/hmi/dev/nspanel_us_land_code/cover.txt @@ -17,7 +17,12 @@ Page cover page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "cover",0 + printh 00 + printh FF FF FF Variable (string) va1 Attributes diff --git a/hmi/dev/nspanel_us_land_code/entitypage01.txt b/hmi/dev/nspanel_us_land_code/entitypage01.txt index e4cf268..3944cd8 100644 --- a/hmi/dev/nspanel_us_land_code/entitypage01.txt +++ b/hmi/dev/nspanel_us_land_code/entitypage01.txt @@ -17,20 +17,32 @@ Page entitypage01 page home } vis unavailable,0 - page_index.txt+="●" - if(is_entitypage02==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage03==1) + page_index.txt+="●" + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage01",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_us_land_code/entitypage02.txt b/hmi/dev/nspanel_us_land_code/entitypage02.txt index 624506d..acaea22 100644 --- a/hmi/dev/nspanel_us_land_code/entitypage02.txt +++ b/hmi/dev/nspanel_us_land_code/entitypage02.txt @@ -17,20 +17,32 @@ Page entitypage02 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - page_index.txt+="●" - if(is_entitypage03==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage02",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_us_land_code/entitypage03.txt b/hmi/dev/nspanel_us_land_code/entitypage03.txt index b2b9ed3..428e485 100644 --- a/hmi/dev/nspanel_us_land_code/entitypage03.txt +++ b/hmi/dev/nspanel_us_land_code/entitypage03.txt @@ -17,20 +17,32 @@ Page entitypage03 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage02==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + if(is_entitypage04==1) + { + page_index.txt+="â—‹" + } + }else { - page_index.txt+="â—‹" + vis page_index,0 } - page_index.txt+="●" - if(is_entitypage04==1) - { - page_index.txt+="â—‹" - } - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage03",0 + printh 00 + printh FF FF FF Text value01_label Attributes @@ -122,7 +134,7 @@ Text value08_label Text : Max. Text Size : 60 -Text value01_pic +Text value01_icon Attributes ID : 12 Scope : local diff --git a/hmi/dev/nspanel_us_land_code/entitypage04.txt b/hmi/dev/nspanel_us_land_code/entitypage04.txt index 5ae4454..d40e216 100644 --- a/hmi/dev/nspanel_us_land_code/entitypage04.txt +++ b/hmi/dev/nspanel_us_land_code/entitypage04.txt @@ -17,20 +17,32 @@ Page entitypage04 page home } vis unavailable,0 - if(is_entitypage01==1) + sys0=is_entitypage01+is_entitypage02+is_entitypage03+is_entitypage04 + if(sys0>1) { - page_index.txt+="â—‹" - } - if(is_entitypage02==1) + if(is_entitypage01==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage02==1) + { + page_index.txt+="â—‹" + } + if(is_entitypage03==1) + { + page_index.txt+="â—‹" + } + page_index.txt+="●" + }else { - page_index.txt+="â—‹" + vis page_index,0 } - if(is_entitypage03==1) - { - page_index.txt+="â—‹" - } - page_index.txt+="●" - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "entitypage04",0 + printh 00 + printh FF FF FF Text value01_label Attributes diff --git a/hmi/dev/nspanel_us_land_code/fan.txt b/hmi/dev/nspanel_us_land_code/fan.txt index 95478b5..7b6a37d 100644 --- a/hmi/dev/nspanel_us_land_code/fan.txt +++ b/hmi/dev/nspanel_us_land_code/fan.txt @@ -18,7 +18,12 @@ Page fan } vis unavailable,0 vis bt_oscillate,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "fan",0 + printh 00 + printh FF FF FF Variable (string) fansetting Attributes diff --git a/hmi/dev/nspanel_us_land_code/home.txt b/hmi/dev/nspanel_us_land_code/home.txt index 47e8ec6..e72affa 100644 --- a/hmi/dev/nspanel_us_land_code/home.txt +++ b/hmi/dev/nspanel_us_land_code/home.txt @@ -12,6 +12,16 @@ Page home Events Preinitialize Event + if(boot.progress.val<100) + { + page boot + } + printh 92 + prints "current_page",0 + printh 00 + prints "home",0 + printh 00 + printh FF FF FF back_page_id=0 if(qrcode.qrcode_value.txt=="") { @@ -31,7 +41,6 @@ Page home vis right_bt_text,0 } vis unavailable,0 - sendme Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_us_land_code/keyb_num.txt b/hmi/dev/nspanel_us_land_code/keyb_num.txt index 3c62216..02430bb 100644 --- a/hmi/dev/nspanel_us_land_code/keyb_num.txt +++ b/hmi/dev/nspanel_us_land_code/keyb_num.txt @@ -17,7 +17,12 @@ Page keyb_num page page_id.val } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "keyb_num",0 + printh 00 + printh FF FF FF Variable (int32) page_id Attributes diff --git a/hmi/dev/nspanel_us_land_code/light.txt b/hmi/dev/nspanel_us_land_code/light.txt index 734b183..b68ce46 100644 --- a/hmi/dev/nspanel_us_land_code/light.txt +++ b/hmi/dev/nspanel_us_land_code/light.txt @@ -37,7 +37,12 @@ Page light vis color_button,0 } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "light",0 + printh 00 + printh FF FF FF Variable (int32) rgb565 Attributes diff --git a/hmi/dev/nspanel_us_land_code/media_player.txt b/hmi/dev/nspanel_us_land_code/media_player.txt index dcf2a2f..7ed7ad7 100644 --- a/hmi/dev/nspanel_us_land_code/media_player.txt +++ b/hmi/dev/nspanel_us_land_code/media_player.txt @@ -17,7 +17,12 @@ Page media_player page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "media_player",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_us_land_code/notification.txt b/hmi/dev/nspanel_us_land_code/notification.txt index b6a6951..34e38af 100644 --- a/hmi/dev/nspanel_us_land_code/notification.txt +++ b/hmi/dev/nspanel_us_land_code/notification.txt @@ -17,7 +17,12 @@ Page notification page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "notification",0 + printh 00 + printh FF FF FF Variable (string) lastclick Attributes diff --git a/hmi/dev/nspanel_us_land_code/qrcode.txt b/hmi/dev/nspanel_us_land_code/qrcode.txt index 6e55366..55fef89 100644 --- a/hmi/dev/nspanel_us_land_code/qrcode.txt +++ b/hmi/dev/nspanel_us_land_code/qrcode.txt @@ -13,7 +13,12 @@ Page qrcode Events Preinitialize Event vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "qrcode",0 + printh 00 + printh FF FF FF Text qrcode_label Attributes diff --git a/hmi/dev/nspanel_us_land_code/screensaver.txt b/hmi/dev/nspanel_us_land_code/screensaver.txt index 6f8da50..e74eae1 100644 --- a/hmi/dev/nspanel_us_land_code/screensaver.txt +++ b/hmi/dev/nspanel_us_land_code/screensaver.txt @@ -15,7 +15,12 @@ Page screensaver vis text,0 dim=brightness_sleep vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "screensaver",0 + printh 00 + printh FF FF FF Touch Release Event page back_page_id diff --git a/hmi/dev/nspanel_us_land_code/settings.txt b/hmi/dev/nspanel_us_land_code/settings.txt index 1881ea9..0fbcd17 100644 --- a/hmi/dev/nspanel_us_land_code/settings.txt +++ b/hmi/dev/nspanel_us_land_code/settings.txt @@ -19,7 +19,12 @@ Page settings vis lbl_sleep,0 vis bt_sleep,0 vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "settings",0 + printh 00 + printh FF FF FF Text bright_text Attributes diff --git a/hmi/dev/nspanel_us_land_code/utilities.txt b/hmi/dev/nspanel_us_land_code/utilities.txt index 30c6040..dd54019 100644 --- a/hmi/dev/nspanel_us_land_code/utilities.txt +++ b/hmi/dev/nspanel_us_land_code/utilities.txt @@ -20,7 +20,12 @@ Page utilities vis title_icon,1 vis title,1 vis button_back,1 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "utilities",0 + printh 00 + printh FF FF FF Variable (int32) line_main_d Attributes @@ -111,7 +116,7 @@ Text home_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Home + Text : Max. Text Size : 10 Text home @@ -151,7 +156,7 @@ Text grid_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Grid + Text : Max. Text Size : 10 Text grid @@ -191,7 +196,7 @@ Text group01_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group01 @@ -231,7 +236,7 @@ Text group02_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group02 @@ -271,7 +276,7 @@ Text group03_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group03 @@ -311,7 +316,7 @@ Text group04_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group04 @@ -351,7 +356,7 @@ Text group05_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group05 @@ -391,7 +396,7 @@ Text group06_label Dragging : 0 Send Component ID : disabled Associated Keyboard: none - Text : Label + Text : Max. Text Size : 10 Text group06 diff --git a/hmi/dev/nspanel_us_land_code/weather01.txt b/hmi/dev/nspanel_us_land_code/weather01.txt index 878553e..05e71ba 100644 --- a/hmi/dev/nspanel_us_land_code/weather01.txt +++ b/hmi/dev/nspanel_us_land_code/weather01.txt @@ -17,7 +17,12 @@ Page weather01 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather01",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_us_land_code/weather02.txt b/hmi/dev/nspanel_us_land_code/weather02.txt index 9dbf735..a6453cf 100644 --- a/hmi/dev/nspanel_us_land_code/weather02.txt +++ b/hmi/dev/nspanel_us_land_code/weather02.txt @@ -17,7 +17,12 @@ Page weather02 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather02",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_us_land_code/weather03.txt b/hmi/dev/nspanel_us_land_code/weather03.txt index d0d38c9..25cb106 100644 --- a/hmi/dev/nspanel_us_land_code/weather03.txt +++ b/hmi/dev/nspanel_us_land_code/weather03.txt @@ -17,7 +17,12 @@ Page weather03 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather03",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_us_land_code/weather04.txt b/hmi/dev/nspanel_us_land_code/weather04.txt index 208299d..883dfe8 100644 --- a/hmi/dev/nspanel_us_land_code/weather04.txt +++ b/hmi/dev/nspanel_us_land_code/weather04.txt @@ -17,7 +17,12 @@ Page weather04 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather04",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/dev/nspanel_us_land_code/weather05.txt b/hmi/dev/nspanel_us_land_code/weather05.txt index 73bd1b8..594d52a 100644 --- a/hmi/dev/nspanel_us_land_code/weather05.txt +++ b/hmi/dev/nspanel_us_land_code/weather05.txt @@ -17,7 +17,12 @@ Page weather05 page home } vis unavailable,0 - sendme + printh 92 + prints "current_page",0 + printh 00 + prints "weather05",0 + printh 00 + printh FF FF FF Text day Attributes diff --git a/hmi/nspanel_CJK_eu.HMI b/hmi/nspanel_CJK_eu.HMI index 75162ec..cd9b785 100644 Binary files a/hmi/nspanel_CJK_eu.HMI and b/hmi/nspanel_CJK_eu.HMI differ diff --git a/hmi/nspanel_CJK_eu.tft b/hmi/nspanel_CJK_eu.tft index bdcf395..64fecf6 100644 Binary files a/hmi/nspanel_CJK_eu.tft and b/hmi/nspanel_CJK_eu.tft differ diff --git a/hmi/nspanel_CJK_us.HMI b/hmi/nspanel_CJK_us.HMI index 3bef1eb..fbe0ede 100644 Binary files a/hmi/nspanel_CJK_us.HMI and b/hmi/nspanel_CJK_us.HMI differ diff --git a/hmi/nspanel_CJK_us.tft b/hmi/nspanel_CJK_us.tft index 6e65b15..c9e24a8 100644 Binary files a/hmi/nspanel_CJK_us.tft and b/hmi/nspanel_CJK_us.tft differ diff --git a/hmi/nspanel_CJK_us_land.HMI b/hmi/nspanel_CJK_us_land.HMI index 8df4ae4..c61fc02 100644 Binary files a/hmi/nspanel_CJK_us_land.HMI and b/hmi/nspanel_CJK_us_land.HMI differ diff --git a/hmi/nspanel_CJK_us_land.tft b/hmi/nspanel_CJK_us_land.tft index 4c41ca4..ead9f54 100644 Binary files a/hmi/nspanel_CJK_us_land.tft and b/hmi/nspanel_CJK_us_land.tft differ diff --git a/hmi/nspanel_blank.HMI b/hmi/nspanel_blank.HMI index d53e119..191cd9e 100644 Binary files a/hmi/nspanel_blank.HMI and b/hmi/nspanel_blank.HMI differ diff --git a/hmi/nspanel_blank.tft b/hmi/nspanel_blank.tft index 286468e..d73bd55 100644 Binary files a/hmi/nspanel_blank.tft and b/hmi/nspanel_blank.tft differ diff --git a/hmi/nspanel_eu.HMI b/hmi/nspanel_eu.HMI index 6bc6304..e16acf5 100644 Binary files a/hmi/nspanel_eu.HMI and b/hmi/nspanel_eu.HMI differ diff --git a/hmi/nspanel_eu.tft b/hmi/nspanel_eu.tft index 785fe5b..24b2fc1 100644 Binary files a/hmi/nspanel_eu.tft and b/hmi/nspanel_eu.tft differ diff --git a/hmi/nspanel_us.HMI b/hmi/nspanel_us.HMI index 146246c..2b13a60 100644 Binary files a/hmi/nspanel_us.HMI and b/hmi/nspanel_us.HMI differ diff --git a/hmi/nspanel_us.tft b/hmi/nspanel_us.tft index 2594952..69d9319 100644 Binary files a/hmi/nspanel_us.tft and b/hmi/nspanel_us.tft differ diff --git a/hmi/nspanel_us_land.HMI b/hmi/nspanel_us_land.HMI index e9d252d..1d78c93 100644 Binary files a/hmi/nspanel_us_land.HMI and b/hmi/nspanel_us_land.HMI differ diff --git a/hmi/nspanel_us_land.tft b/hmi/nspanel_us_land.tft index 2e97437..bceb486 100644 Binary files a/hmi/nspanel_us_land.tft and b/hmi/nspanel_us_land.tft differ diff --git a/nspanel_blueprint.yaml b/nspanel_blueprint.yaml index b560ffc..f8c39bb 100644 --- a/nspanel_blueprint.yaml +++ b/nspanel_blueprint.yaml @@ -10,7 +10,7 @@ blueprint: description: > # NSPanel Configuration via Blueprint: Complete UI-Based Setup - **Version**: v4.3.0 + **Version**: v4.3.1b1 This project enables comprehensive configuration of your NSPanel through a Blueprint featuring a user interface. @@ -793,20 +793,36 @@ blueprint: default: ' ' selector: *placeholder-selector ##### PLACEHOLDER ###################################################################### - hw_buttons_bar_pages: + hw_buttons_bars_pages: name: Hardware Buttons - Visibility Pages description: > Choose the pages where the bars, indicating the status of entities linked to hardware buttons, will be displayed. ***Attention!** Overlapping of button bars with other components may occur on some pages. Please proceed with caution.* default: - - '1' + - '2' + - '61440' + - '3932160' + - '65536' + - '131072' + - '512' + - '256' + - '134217728' + - '124' + - '8388608' + - '128' + - '2048' + - '4194304' + - '1024' + - '33554432' + - '67108864' + - '16777216' selector: select: multiple: true options: - label: "Home (default)" - value: '1' # 2^0 + value: '2' # 2^1 - label: "Buttons pages" value: '61440' # 2^12 + 2^12 + 2^14 + 2^15 - label: "Entities pages" @@ -818,15 +834,15 @@ blueprint: - label: "Screen saver (sleep) page" value: '512' # 2^9 - label: "Settings page" - value: '128' # 2^7 + value: '256' # 2^8 - label: "Utilities page" value: '134217728' # 2^27 - label: "Weather pages" - value: '62' # 2^1 + 2^2 + 2^3 + 2^4 + 2^5 + value: '124' # 2^2 + 2^3 + 2^4 + 2^5 + 2^6 - label: "Alarm control panel page" value: '8388608' # 2^23 - label: "Climate page" - value: '64' # 2^6 + value: '128' # 2^7 - label: "Cover page" value: '2048' # 2^11 - label: "Fan page" @@ -1943,6 +1959,12 @@ blueprint: value: "1" - label: "Left" value: "2" + entitypages_show_entities_icons: + name: Entity Pages - Show Entity Icons + description: "Display icons associated with each entity." + default: true + selector: + boolean: ##### Entity page 01 - Entities ##### ##### PLACEHOLDER ###################################################################### entity_page01_label: @@ -2559,6 +2581,15 @@ blueprint: description: *description_icon_color default: [200, 204, 200] selector: *color_selector + ##### Utilities page - Cursors ##### + utilities_page_cursor_width: + name: Utilities Page - Cursor Width + description: "Set the width of cursors indicating utility flows. Use 0 for no cursor, or 255 for automatic sizing." + default: 255 + selector: + number: + min: 0 + max: 255 ##### Utilities page 01 ##### utilities_page01_label: name: Utilities page - Label (Optional) @@ -3036,7 +3067,7 @@ blueprint: *General* *Which default color should be used for icons when the state is **ON** while a custom color is not selected and the domain does not provides a state-based color?* - default: [255, 255, 255] + default: [200, 204, 200] selector: *color_selector icon_color_fallback_off: name: Icon fallback color when state is "**OFF**" @@ -3165,7 +3196,7 @@ trace: ############################################################# trigger_variables: - nspanel_deviceid: !input 'nspanel_name' + nspanel_deviceid: !input nspanel_name nspanel_entities: '{{ device_entities(nspanel_deviceid) }}' device_name: > {%- if nspanel_entities | count > 0 %} @@ -3264,7 +3295,7 @@ trigger_variables: variables: ##### GENERAL ##### - blueprint_version: '4.3.0' + blueprint_version: '4.3.1b1' 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 }}' @@ -3280,35 +3311,6 @@ 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: '{{ states(device_name_sensor) if device_name_sensor is defined and device_name_sensor is string }}' - - nspanel: - service: - button: 'esphome.{{ nspanel_name }}_button' - command: 'esphome.{{ nspanel_name }}_command' - component: - color: 'esphome.{{ nspanel_name }}_component_color' - text: 'esphome.{{ nspanel_name }}_component_text' - value: 'esphome.{{ nspanel_name }}_component_val' - visibility: 'esphome.{{ nspanel_name }}_components_visibility' - entity_details_show: 'esphome.{{ nspanel_name }}_entity_details_show' - hw_button_state: 'esphome.{{ nspanel_name }}_hw_button_state' - icon: 'esphome.{{ nspanel_name }}_icon' - init: - global: 'esphome.{{ nspanel_name }}_init_global' - hardware: 'esphome.{{ nspanel_name }}_init_hardware' - page: - home: 'esphome.{{ nspanel_name }}_init_page_home' - settings: 'esphome.{{ nspanel_name }}_init_page_settings' - page: - alarm: 'esphome.{{ nspanel_name }}_page_alarm' - media_player: 'esphome.{{ nspanel_name }}_page_media_player' - climate: 'esphome.{{ nspanel_name }}_page_climate' - qrcode: 'esphome.{{ nspanel_name }}_qrcode' - tft_upload: 'esphome.{{ nspanel_name }}_upload_tft' - value: 'esphome.{{ nspanel_name }}_value' - wake_up: 'esphome.{{ nspanel_name }}_wake_up' - ##### Nextion dict #### nextion: color: @@ -6325,6 +6327,8 @@ variables: ##### Utilities page ##### pages_utilities: + cursor: + width: !input utilities_page_cursor_width title: label: !input utilities_page01_label icon: !input utilities_page01_icon @@ -6397,8 +6401,14 @@ variables: ##### GENERAL ENTITYS ##### climate: !input 'climate' embedded_climate: '{{ climate == thermostat_embedded }}' - indoor_temperature_sensor: !input 'indoortemp' - embedded_indoor_temperature: '{{ indoor_temperature_sensor == nspaneltemp or not (indoor_temperature_sensor is string and indoor_temperature_sensor is match "sensor.")}}' + indoor_temperature_sensor_input: !input indoortemp + indoor_temperature_sensor: > + {{ + indoor_temperature_sensor_input + if indoor_temperature_sensor_input is string and indoor_temperature_sensor_input.split(".") | count == 2 + else nspaneltemp + }} + embedded_indoor_temperature: '{{ indoor_temperature_sensor == nspaneltemp }}' domain_automation_button_action: !input domain_automation_button_action # yamllint disable rule:truthy rule:line-length rule:comments-indentation @@ -6463,29 +6473,7 @@ trigger: platform: event event_type: esphome.nspanel_ha_blueprint event_data: - device_id: !input 'nspanel_name' - - ##### Reboot - Trigger 'nspanel_boot_init' ##### - - platform: template - value_template: '{{ is_state(nextion_inited, "on") | default(false) }}' - for: - seconds: 1 - id: nspanel_boot_init - - platform: template - 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 - - platform: template - value_template: '{{ device_name_sensor is defined and device_name_sensor is string and has_value(device_name_sensor) }}' - for: - seconds: 1 - id: nspanel_boot_init + device_id: !input nspanel_name ##### Automation reload or HA started - platform: event @@ -7138,7 +7126,7 @@ trigger: - platform: event event_type: state_changed event_data: - entity_id: !input 'indoortemp' + entity_id: !input indoortemp id: indoortemp_state ##### Trigger - Weather ################################################################################################################# @@ -7168,10 +7156,7 @@ condition: - '{{ trigger.id != "home_values_state" }}' - condition: or # Do not update with indoor temp changes when embedded indoor temp is used conditions: - - condition: not - conditions: - - condition: trigger - id: indoortemp_state + - '{{ trigger.id != "indoortemp_state" }}' - '{{ (home_page_background_update or pages.current == pages.home ) and not embedded_indoor_temperature }}' - condition: or # Do not update component if state haven't changed (ignore attributes changed) - event based triggers conditions: @@ -7264,6 +7249,24 @@ condition: ##### START - Action ##### ############################################################# action: + - variables: + nspanel_name: > + {{ + trigger.event.data.device_name + if + trigger is defined and + trigger.event is defined and + trigger.event.data is defined and + trigger.event.data.device_name is defined and + trigger.event.data.device_name is string and trigger.event.data.device_name | length > 0 + else + ( + states(device_name_sensor) + if has_value(device_name_sensor) + else device_name + ) + }} + - if: '{{ false }}' #### Global anchor repository #### then: - variables: @@ -7284,12 +7287,23 @@ action: {{ ( entity_state in enum.states.on or - (entity_domain == "sensor" and entity_has_value) or + (entity_domain in ["input_number", "number", "sensor"] and entity_has_value) or (entity_domain in enum.states and entity_state in enum.states[entity_domain].on) ) if entity_id_valid }} - 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) if entity_id_valid }}' - entity_state_is_unknown: '{{ (not entity_state_is_on) and (not entity_state_is_off) if entity_id_valid }}' + entity_state_is_off: > + {{ + (not entity_state_is_on) and + ( + entity_state in enum.states.off or + ( + entity_domain in enum.states and + entity_state in enum.states[entity_domain].off + ) + ) + if entity_id_valid + }} + entity_state_is_unknown: '{{ ((not entity_state_is_on) and (not entity_state_is_off)) if entity_id_valid }}' entity_icon_color: > {{ ( @@ -7416,7 +7430,7 @@ action: sequence: ##### NSPanel Date ##### - &refresh-date - service: '{{ nspanel.service.component.text }}' + service: 'esphome.{{ nspanel_name }}_component_text' data: id: home.date txt: > @@ -7433,212 +7447,6 @@ action: }} continue_on_error: true - ##### Boot detected ##### - - alias: Boot init - conditions: - - condition: trigger - id: nspanel_boot_init - sequence: - - &global_settings - if: '{{ true }}' - then: - - &variables_hardware - variables: - hw_button_left_entity: !input left_button_entity - hw_button_right_entity: !input right_button_entity - hardware: - buttons: - left: - entity: '{{ hw_button_left_entity }}' - entity_is_valid: '{{ hw_button_left_entity is defined and hw_button_left_entity is string and hw_button_left_entity.split(".") | count == 2 }}' - name: !input 'left_button_name' - hold_select: !input 'left_button_hold_select' - right: - entity: '{{ hw_button_right_entity }}' - entity_is_valid: '{{ hw_button_right_entity is defined and hw_button_right_entity is string and hw_button_right_entity.split(".") | count == 2 }}' - name: !input 'right_button_name' - hold_select: !input 'right_button_hold_select' - relay1_icon: !input relay01_icon - relay2_icon: !input relay02_icon - - - variables: - bt_utilities_icon: !input home_button08_icon - bt_entities_icon: !input home_button06_icon - bt_qrcode_icon: !input home_button05_icon - qrcode: - enabled: !input qrcode_enabled - title: !input qrcode_label - qrcode: !input qrcode_value - - - service: '{{ nspanel.service.init.page.home }}' - data: - date_color: !input date_label_color - time_format: !input time_format - time_color: !input time_label_color - meridiem: '{{ dict.values(mui[language].meridiem) | list }}' - chip_font: !input chip_font_size - custom_buttons_font: !input custom_buttons_font_size - qrcode: !input qrcode_enabled - qrcode_icon: > - {{ - all_icons[bt_bt_qrcode_icon.split("mdi:")[1]] - if bt_bt_qrcode_icon is string and bt_bt_qrcode_icon.split("mdi:")[1] in all_icons - else all_icons["qrcode-scan"] - }} - qrcode_icon_color: !input home_button05_icon_color - entities_pages_icon: > - {{ - all_icons[bt_entities_icon.split("mdi:")[1]] - if bt_entities_icon is string and bt_entities_icon.split("mdi:")[1] in all_icons - else all_icons["format-list-bulleted-square"] - }} - entities_pages_icon_color: !input home_button06_icon_color - utilities: !input utilities_enabled - utilities_icon: > - {{ - all_icons[bt_utilities_icon.split("mdi:")[1]] - if bt_utilities_icon is string and bt_utilities_icon.split("mdi:")[1] in all_icons - else all_icons.gauge - }} - utilities_icon_color: !input home_button08_icon_color - outdoor_temp_font: !input home_outdoor_temp_font - continue_on_error: true - - ##### NSPanel Left Button Name ##### - - if: '{{ hardware.buttons.left.name | length > 0 }}' - then: - ### LABEL Font Color ### - - service: '{{ nspanel.service.component.color }}' - data: - id: home.left_bt_text - color: !input left_button_color - continue_on_error: true - ### LABEL Font ### - - service: '{{ nspanel.service.component.text }}' - data: - id: home.left_bt_text - txt: '{{ hardware.buttons.left.name }}' - continue_on_error: true - - ##### NSPanel Right Button Name ##### - - if: '{{ hardware.buttons.right.name | length > 0 }}' - then: - ### LABEL Font Color ### - - service: '{{ nspanel.service.component.color }}' - data: - id: home.right_bt_text - color: !input right_button_color - continue_on_error: true - ### LABEL Font ### - - service: '{{ nspanel.service.component.text }}' - data: - id: home.right_bt_text - txt: '{{ hardware.buttons.right.name }}' - continue_on_error: true - - - service: '{{ nspanel.service.qrcode }}' - data: - title: '{{ qrcode.title if qrcode.enabled else "" }}' - qrcode: '{{ qrcode.qrcode if qrcode.enabled else "" }}' - show: false - continue_on_error: true - - - service: '{{ nspanel.service.init.page.settings}}' - data: - reboot: '{{ mui[language].settings.reboot }}' - brightness: '{{ mui[language].settings.brightness }}' - bright: '{{ mui[language].settings.bright }}' - dim: '{{ mui[language].settings.dim }}' - continue_on_error: true - - - variables: - climate_friendly_name: '{{ state_attr(climate, "friendly_name") if climate is string and climate is match "climate." else "" }}' - hw_buttons_bar_pages: !input hw_buttons_bar_pages - - - service: '{{ nspanel.service.init.hardware }}' - data: - relay1_local_control: '{{ hardware.buttons.left.entity == relay01_entity }}' - relay1_icon: '{{ all_icons[hardware.relay1_icon.split("mdi:")[1]] if hardware.relay1_icon.split("mdi:")[1] in all_icons else all_icons["numeric-1-box-outline"] }}' - relay1_icon_color: !input relay01_icon_color - relay1_fallback: !input relay_1_local_fallback - relay2_local_control: '{{ hardware.buttons.right.entity == relay02_entity }}' - relay2_icon: '{{ all_icons[hardware.relay2_icon.split("mdi:")[1]] if hardware.relay2_icon.split("mdi:")[1] in all_icons else all_icons["numeric-2-box-outline"] }}' - relay2_icon_color: !input relay02_icon_color - relay2_fallback: !input relay_2_local_fallback - button_left: '{{ hardware.buttons.left.entity is defined and hardware.buttons.left.entity is string and hardware.buttons.left.entity.split(".") | count == 2 }}' - button_right: '{{ hardware.buttons.right.entity is defined and hardware.buttons.right.entity is string and hardware.buttons.right.entity.split(".") | count == 2 }}' - button_bar_pages: '{{ hw_buttons_bar_pages | map("int") | sum }}' - button_bar_color_on: !input hw_buttons_bar_color_on - button_bar_color_off: !input hw_buttons_bar_color_off - embedded_climate: '{{ climate == thermostat_embedded }}' - embedded_climate_friendly_name: '{{ climate_friendly_name if climate_friendly_name else "" }}' - embedded_indoor_temperature: '{{ embedded_indoor_temperature }}' - continue_on_error: true - - - &update_hw_button_state - service: '{{ nspanel.service.hw_button_state }}' - data: - left: '{{ hardware.buttons.left.entity_is_valid and states(hardware.buttons.left.entity) | default("unavailable") in enum.states.on }}' - right: '{{ hardware.buttons.right.entity_is_valid and states(hardware.buttons.right.entity) | default("unavailable") in enum.states.on }}' - continue_on_error: true - - - variables: - entitypages_value_alignment: !input entitypages_value_alignment - - service: '{{ nspanel.service.init.global }}' - data: - blueprint_version: '{{ blueprint_version }}' - ent_value_xcen: '{{ int(entitypages_value_alignment) if is_number(entitypages_value_alignment) else 0 }}' - mui_please_confirm: '{{ mui[language].please_confirm }}' - mui_unavailable: '{{ mui[language].unavailable }}' - screensaver_time: !input screensaver_display_time - screensaver_time_font: !input screensaver_display_time_font_size - screensaver_time_color: !input screensaver_display_time_font_color - decimal_separator: !input decimal_separator - continue_on_error: true - - - repeat: # Disable empty buttons pages - for_each: '{{ pages.buttonpages }}' - sequence: - - service: '{{ nspanel.service.command }}' - data: - cmd: > - is_{{ repeat.item }}={{ - 1 - if - buttons_pages.buttons - | selectattr("page", "defined") - | selectattr("page", "eq", repeat.item) - | selectattr("entity", "defined") - | rejectattr("entity", "eq", []) - | list - | count > 0 - else 0 - }} - continue_on_error: true - - - repeat: # Disable empty entity pages - for_each: '{{ pages.entitypages }}' - sequence: - - service: '{{ nspanel.service.command }}' - data: - cmd: > - is_{{ repeat.item }}={{ - 1 - if - entities_pages.entities - | selectattr("page", "defined") - | selectattr("page", "eq", repeat.item) - | selectattr("entity", "defined") - | rejectattr("entity", "eq", []) - | list - | count > 0 - else 0 - }} - continue_on_error: true - - ##### Update Date & Time before showing the Home page ##### - - *refresh-date - ##### NSPanel event ##### - alias: NSPanel event conditions: @@ -7655,7 +7463,230 @@ action: - '{{ nspanel_event.type == "boot"}}' - '{{ nspanel_event.step is defined and nspanel_event.step in ["nextion_init", "timeout"]}}' sequence: - - *global_settings + - &global_settings + if: '{{ true }}' + then: + - &variables_hardware + variables: + hw_button_left_entity: !input left_button_entity + hw_button_right_entity: !input right_button_entity + hardware: + buttons: + left: + entity: '{{ hw_button_left_entity }}' + entity_is_valid: '{{ hw_button_left_entity is defined and hw_button_left_entity is string and hw_button_left_entity.split(".") | count == 2 }}' + name: !input 'left_button_name' + hold_select: !input 'left_button_hold_select' + right: + entity: '{{ hw_button_right_entity }}' + entity_is_valid: '{{ hw_button_right_entity is defined and hw_button_right_entity is string and hw_button_right_entity.split(".") | count == 2 }}' + name: !input 'right_button_name' + hold_select: !input 'right_button_hold_select' + relay1_icon: !input relay01_icon + relay2_icon: !input relay02_icon + + - variables: + bt_utilities_icon: !input home_button08_icon + bt_entities_icon: !input home_button06_icon + bt_qrcode_icon: !input home_button05_icon + qrcode: + enabled: !input qrcode_enabled + title: !input qrcode_label + qrcode: !input qrcode_value + + - service: 'esphome.{{ nspanel_name }}_init_page_home' + data: + date_color: !input date_label_color + time_format: !input time_format + time_color: !input time_label_color + meridiem: '{{ dict.values(mui[language].meridiem) | list }}' + chip_font: !input chip_font_size + custom_buttons_font: !input custom_buttons_font_size + qrcode: !input qrcode_enabled + qrcode_icon: > + {{ + all_icons[bt_bt_qrcode_icon.split("mdi:")[1]] + if bt_bt_qrcode_icon is string and bt_bt_qrcode_icon.split("mdi:")[1] in all_icons + else all_icons["qrcode-scan"] + }} + qrcode_icon_color: !input home_button05_icon_color + entities_pages_icon: > + {{ + all_icons[bt_entities_icon.split("mdi:")[1]] + if bt_entities_icon is string and bt_entities_icon.split("mdi:")[1] in all_icons + else all_icons["format-list-bulleted-square"] + }} + entities_pages_icon_color: !input home_button06_icon_color + utilities: !input utilities_enabled + utilities_icon: > + {{ + all_icons[bt_utilities_icon.split("mdi:")[1]] + if bt_utilities_icon is string and bt_utilities_icon.split("mdi:")[1] in all_icons + else all_icons.gauge + }} + utilities_icon_color: !input home_button08_icon_color + outdoor_temp_font: !input home_outdoor_temp_font + continue_on_error: true + + ##### NSPanel Left Button Name ##### + - if: '{{ hardware.buttons.left.name | length > 0 }}' + then: + ### LABEL Font Color ### + - service: 'esphome.{{ nspanel_name }}_component_color' + data: + id: home.left_bt_text + color: !input left_button_color + continue_on_error: true + ### LABEL Font ### + - service: 'esphome.{{ nspanel_name }}_component_text' + data: + id: home.left_bt_text + txt: '{{ hardware.buttons.left.name }}' + continue_on_error: true + + ##### NSPanel Right Button Name ##### + - if: '{{ hardware.buttons.right.name | length > 0 }}' + then: + ### LABEL Font Color ### + - service: 'esphome.{{ nspanel_name }}_component_color' + data: + id: home.right_bt_text + color: !input right_button_color + continue_on_error: true + ### LABEL Font ### + - service: 'esphome.{{ nspanel_name }}_component_text' + data: + id: home.right_bt_text + txt: '{{ hardware.buttons.right.name }}' + continue_on_error: true + + - service: 'esphome.{{ nspanel_name }}_qrcode' + data: + title: '{{ qrcode.title if qrcode.enabled else "" }}' + qrcode: '{{ qrcode.qrcode if qrcode.enabled else "" }}' + show: false + continue_on_error: true + + - service: 'esphome.{{ nspanel_name }}_init_page_settings' + data: + reboot: '{{ mui[language].settings.reboot }}' + brightness: '{{ mui[language].settings.brightness }}' + bright: '{{ mui[language].settings.bright }}' + dim: '{{ mui[language].settings.dim }}' + continue_on_error: true + + - variables: + climate_friendly_name: '{{ state_attr(climate, "friendly_name") if climate is string and climate is match "climate." else "" }}' + hw_buttons_bars_pages: !input hw_buttons_bars_pages + + - service: 'esphome.{{ nspanel_name }}_init_hardware' + data: + relay1_local_control: '{{ hardware.buttons.left.entity == relay01_entity }}' + relay1_icon: '{{ all_icons[hardware.relay1_icon.split("mdi:")[1]] if hardware.relay1_icon.split("mdi:")[1] in all_icons else all_icons["numeric-1-box-outline"] }}' + relay1_icon_color: !input relay01_icon_color + relay1_fallback: !input relay_1_local_fallback + relay2_local_control: '{{ hardware.buttons.right.entity == relay02_entity }}' + relay2_icon: '{{ all_icons[hardware.relay2_icon.split("mdi:")[1]] if hardware.relay2_icon.split("mdi:")[1] in all_icons else all_icons["numeric-2-box-outline"] }}' + relay2_icon_color: !input relay02_icon_color + relay2_fallback: !input relay_2_local_fallback + button_left: '{{ hardware.buttons.left.entity is defined and hardware.buttons.left.entity is string and hardware.buttons.left.entity.split(".") | count == 2 }}' + button_right: '{{ hardware.buttons.right.entity is defined and hardware.buttons.right.entity is string and hardware.buttons.right.entity.split(".") | count == 2 }}' + button_bar_pages: '{{ hw_buttons_bars_pages | map("int") | sum }}' + button_bar_color_on: !input hw_buttons_bar_color_on + button_bar_color_off: !input hw_buttons_bar_color_off + embedded_climate: '{{ climate == thermostat_embedded }}' + embedded_climate_friendly_name: '{{ climate_friendly_name if climate_friendly_name else "" }}' + embedded_indoor_temperature: '{{ embedded_indoor_temperature }}' + continue_on_error: true + + # Update Hardware buttons bars states + - if: '{{ true }}' + then: + - variables: + hw_btn_left_state: '{{ hardware.buttons.left.entity_is_valid and states(hardware.buttons.left.entity) | default("unavailable") in enum.states.on }}' + hw_btn_right_state: '{{ hardware.buttons.right.entity_is_valid and states(hardware.buttons.right.entity) | default("unavailable") in enum.states.on }}' + - if: '{{ hw_btn_left_state == hw_btn_right_state }}' + then: # Save one service call if both buttons have the same state + - service: 'esphome.{{ nspanel_name }}_hw_button_state' + data: + button_mask: 3 # Both buttons + state: '{{ hw_btn_left_state }}' + continue_on_error: true + else: # Send individual calls if the buttons have different states + - service: 'esphome.{{ nspanel_name }}_hw_button_state' + data: + button_mask: 1 # Left button + state: '{{ hw_btn_left_state }}' + continue_on_error: true + - service: 'esphome.{{ nspanel_name }}_hw_button_state' + data: + button_mask: 2 # Right button + state: '{{ hw_btn_right_state }}' + continue_on_error: true + + # Global settings + - variables: + entitypages_value_alignment: !input entitypages_value_alignment + - service: 'esphome.{{ nspanel_name }}_init_global' + data: + blueprint_version: '{{ blueprint_version }}' + ent_value_xcen: '{{ int(entitypages_value_alignment) if is_number(entitypages_value_alignment) else 0 }}' + mui_please_confirm: '{{ mui[language].please_confirm }}' + mui_unavailable: '{{ mui[language].unavailable }}' + screensaver_time: !input screensaver_display_time + screensaver_time_font: !input screensaver_display_time_font_size + screensaver_time_color: !input screensaver_display_time_font_color + decimal_separator: !input decimal_separator + continue_on_error: true + + # Disable empty buttons pages + - repeat: + for_each: '{{ pages.buttonpages }}' + sequence: + - &delay_default + delay: + milliseconds: 10 + - service: 'esphome.{{ nspanel_name }}_command' + data: + cmd: > + is_{{ repeat.item }}={{ + 1 + if + buttons_pages.buttons + | selectattr("page", "defined") + | selectattr("page", "eq", repeat.item) + | selectattr("entity", "defined") + | rejectattr("entity", "eq", []) + | list + | count > 0 + else 0 + }} + continue_on_error: true + + # Disable empty entity pages + - repeat: + for_each: '{{ pages.entitypages }}' + sequence: + - *delay_default + - service: 'esphome.{{ nspanel_name }}_command' + data: + cmd: > + is_{{ repeat.item }}={{ + 1 + if + entities_pages.entities + | selectattr("page", "defined") + | selectattr("page", "eq", repeat.item) + | selectattr("entity", "defined") + | rejectattr("entity", "eq", []) + | list + | count > 0 + else 0 + }} + continue_on_error: true + + ##### Update Date & Time before showing the Home page ##### + - *refresh-date ##### Service call ##### - alias: NSPanel service call @@ -7761,7 +7792,7 @@ action: sequence: &refresh_page_home ##### Weather Icon Home Page ##### - &refresh-page_home-weather_pic - service: '{{ nspanel.service.command }}' + service: 'esphome.{{ nspanel_name }}_command' data: cmd: home.weather.pic={{ nextion.pic.weather[ states(weather_entity) | default("unavailable") @@ -7788,7 +7819,7 @@ action: if weather_entity is string else "unavailable" }} - condition: '{{ is_number(outdoor_temp) }}' - - service: '{{ nspanel.service.value }}' + - service: 'esphome.{{ nspanel_name }}_value' data: id: home.outdoor_temp icon: "" @@ -7804,23 +7835,14 @@ action: then: - variables: home_indoor_temp_visible: !input home_indoor_temp_visible - - service: '{{ nspanel.service.component.visibility }}' + - service: 'esphome.{{ nspanel_name }}_components_visibility' data: ids: ["home.indr_temp", "home.indr_temp_icon"] visible: '{{ home_indoor_temp_visible }}' continue_on_error: true - condition: '{{ home_indoor_temp_visible }}' - variables: - temperature_sensor: > - {{ - indoor_temperature_sensor - if - (not embedded_indoor_temperature) and - indoor_temperature_sensor is string and - indoor_temperature_sensor is match "sensor." - else - nspaneltemp - }} + temperature_sensor: '{{ indoor_temperature_sensor }}' indoor_temp: state: '{{ states(temperature_sensor, rounded=true) | default("unavailable") }}' sensor_uom: '{{ state_attr(temperature_sensor, "unit_of_measurement") }}' @@ -7836,7 +7858,7 @@ action: }} icon: !input 'home_indoor_temp_icon' - condition: '{{ is_number(indoor_temp.state) }}' - - service: '{{ nspanel.service.value }}' + - service: 'esphome.{{ nspanel_name }}_value' data: id: home.indr_temp icon: > @@ -7876,7 +7898,7 @@ action: else all_icons.email ) if notification_visible else "" }} - - service: '{{ nspanel.service.icon }}' + - service: 'esphome.{{ nspanel_name }}_icon' data: id: home.bt_notific icon: '{{ notification_icon }}' @@ -7924,12 +7946,13 @@ action: - &display_home_page_custom_buttons if: '{{ repeat.item.entity is defined and repeat.item.entity is string and repeat.item.entity.split(".") | count == 2 }}' then: + - *delay_default - variables: entity_id: '{{ repeat.item.entity }}' overlap: icon: '{{ repeat.item.icon if repeat.item.icon is defined else None }}' - *variable_entity - - service: '{{ nspanel.service.icon }}' + - service: 'esphome.{{ nspanel_name }}_icon' data: id: 'home.{{ repeat.item.component }}' icon: '{{ entity.icon if entity.icon is defined else "" }}' @@ -7939,7 +7962,7 @@ action: else: - if: '{{ pages.current == pages.home }}' then: - - service: '{{ nspanel.service.component.visibility }}' + - service: 'esphome.{{ nspanel_name }}_components_visibility' data: ids: '{{ [ repeat.item.component ] }}' visible: false @@ -7956,7 +7979,7 @@ action: - variables: hvac_action: '{{ state_attr(entity_id, "hvac_action") }}' climate_chip_always_visible: !input climate_chip_always_visible - - service: '{{ nspanel.service.icon }}' + - service: 'esphome.{{ nspanel_name }}_icon' data: id: home.chip_climate icon: '{{ entity.icon if entity.icon is defined else "" }}' @@ -8026,6 +8049,7 @@ action: - &display_home_page_status_bar if: '{{ repeat.item.entity is defined and repeat.item.entity is string and repeat.item.entity.split(".") | count == 2 }}' then: + - *delay_default - variables: entity_id: '{{ repeat.item.entity }}' overlap: @@ -8040,40 +8064,35 @@ action: (entity_hvac_action if entity_hvac_action and entity_hvac_action not in enum.states.unknown else entity_state) if entity_domain == "climate" else entity_state }} - - if: - - or: - - and: - - '{{ not repeat.item.inverted }}' - - or: - - '{{ entity_state in enum.states.on }}' - - '{{ entity_domain != "climate" and entity_domain in enum.states and entity_state in enum.states[entity_domain].on }}' - - '{{ entity_domain == "climate" and entity_state in ["heating", "cooling", "drying", "fan_only"] }}' - - and: - - '{{ repeat.item.inverted }}' - - or: - - '{{ entity_state in enum.states.off }}' - - '{{ entity_domain in enum.states and entity_state in enum.states[entity_domain].off }}' - - '{{ entity_domain == "climate" and entity_state not in ["heating", "cooling", "drying", "fan_only"] }}' - then: - - service: '{{ nspanel.service.icon }}' - data: - id: 'home.{{ repeat.item.component }}' - icon: '{{ entity.icon if entity.icon is defined else "" }}' - icon_color: '{{ entity.icon_color if entity.icon_color is defined else [] }}' - visible: true - continue_on_error: true - else: - - &hide-home_page-status_bar_chip - service: '{{ nspanel.service.component.visibility }}' - data: - ids: '{{ [ "home." ~ repeat.item.component ] }}' - visible: false - continue_on_error: true - else: - - *hide-home_page-status_bar_chip + chip_visible: > + {{ + ( + (not repeat.item.inverted) and + ( + (entity_state in enum.states.on) or + (entity_domain != "climate" and entity_domain in enum.states and entity_state in enum.states[entity_domain].on) or + (entity_domain == "climate" and entity_state in ["heating", "cooling", "drying", "fan_only"]) + ) + ) or + ( + (repeat.item.inverted) and + ( + (entity_state in enum.states.off) or + (entity_domain in enum.states and entity_state in enum.states[entity_domain].off) or + (entity_domain == "climate" and entity_state not in ["heating", "cooling", "drying", "fan_only"]) + ) + ) + }} + - service: 'esphome.{{ nspanel_name }}_icon' + data: + id: 'home.{{ repeat.item.component }}' + icon: '{{ entity.icon if chip_visible and entity.icon is defined else "" }}' + icon_color: '{{ entity.icon_color if chip_visible and entity.icon_color is defined else [] }}' + visible: '{{ chip_visible }}' + continue_on_error: true ##### HOME VALUE 01 - 03 - - &variables-home_page_values + - &variables_home_page_values variables: home_page_values: - entity: !input 'home_value01' @@ -8114,10 +8133,10 @@ action: {{ repeat.item.entity is defined and repeat.item.entity is string and - repeat.item.entity is match "sensor." and has_value(repeat.item.entity) }} then: + - *delay_default - variables: entity_id: '{{ repeat.item.entity }}' overlap: @@ -8142,7 +8161,7 @@ action: if unit_of_measurement_raw and unit_of_measurement_raw is string and unit_of_measurement_raw | length > 0 else "" }} - - service: '{{ nspanel.service.value }}' + - service: 'esphome.{{ nspanel_name }}_value' data: id: '{{ repeat.item.page }}.{{ repeat.item.component }}' icon: '{{ entity.icon }}' @@ -8193,14 +8212,14 @@ action: ##### Button page Label ##### - if: '{{ buttons_pages.labels[event_page] | length > 0 }}' then: - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: page_label txt: '{{ buttons_pages.labels[event_page] }}' continue_on_error: true ###### Confirm buttons ###### - - service: '{{ nspanel.service.component.value }}' + - service: 'esphome.{{ nspanel_name }}_component_val' data: id: confirm val: '{{ confirm_value }}' @@ -8219,6 +8238,7 @@ action: }} sequence: &display_button_page_button - condition: '{{ repeat.item.entity is defined and repeat.item.entity is string and repeat.item.entity | length > 0 }}' + - *delay_default - variables: entity_id: '{{ repeat.item.entity }}' overlap: @@ -8249,7 +8269,7 @@ action: {{ 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 %} - - service: '{{ nspanel.service.button }}' + - service: 'esphome.{{ nspanel_name }}_button' data: page: '{{ repeat.item.page }}' id: '{{ repeat.item.component }}' @@ -8266,7 +8286,7 @@ action: then: - delay: milliseconds: 800 - - service: '{{ nspanel.service.button }}' + - service: 'esphome.{{ nspanel_name }}_button' data: page: '{{ repeat.item.page }}' id: '{{ repeat.item.component }}' @@ -8302,17 +8322,17 @@ action: ##### LIGHT State ##### - variables: curr_brightness: '{{ (state_attr(light_entity, "brightness") | int(0) * 100 / 255) | round(0) }}' - - service: '{{ nspanel.service.component.value }}' + - service: 'esphome.{{ nspanel_name }}_component_val' data: id: light.lightslider val: '{{ curr_brightness }}' continue_on_error: true - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: light.light_value txt: '{{ curr_brightness }}%' continue_on_error: true - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: light.light_value_2 txt: '{{ curr_brightness }}%' @@ -8333,35 +8353,35 @@ action: else ((min_mireds+max_mireds)/2) | int(327) }} - condition: '{{ is_number(curr_color_temp) }}' - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: light.temp_value txt: '{{ curr_color_temp }}' continue_on_error: true - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: light.temp_value_2 txt: '{{ curr_color_temp }}' continue_on_error: true - - service: '{{ nspanel.service.component.value }}' + - service: 'esphome.{{ nspanel_name }}_component_val' data: id: light.tempslider val: '{{ curr_color_temp }}' continue_on_error: true - - service: '{{ nspanel.service.command }}' + - service: 'esphome.{{ nspanel_name }}_command' data: cmd: tempslider.minval={{ min_mireds }} continue_on_error: true - - service: '{{ nspanel.service.command }}' + - service: 'esphome.{{ nspanel_name }}_command' data: cmd: tempslider.maxval={{ max_mireds }} continue_on_error: true - - service: '{{ nspanel.service.component.color }}' + - service: 'esphome.{{ nspanel_name }}_component_color' data: id: power_button color: [192, 192, 192] continue_on_error: true - - service: '{{ nspanel.service.component.visibility }}' + - service: 'esphome.{{ nspanel_name }}_components_visibility' data: ids: ["temp_button", "temp_value_2", "temp_touch"] visible: true @@ -8370,7 +8390,7 @@ action: ##### Hide color button when not supported ##### - if: '{{ color_mode_color }}' then: - - service: '{{ nspanel.service.component.visibility }}' + - service: 'esphome.{{ nspanel_name }}_components_visibility' data: ids: ["color_button", "color_touch"] visible: true @@ -8412,24 +8432,24 @@ action: else all_icons[device_class_icons.cover["shutter-closed"]] }} ##### Cover Open/close Icons ##### - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: cover.cover_open txt: '{{ cover_icons.open }}' continue_on_error: true - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: cover.cover_close txt: '{{ cover_icons.close }}' continue_on_error: true ##### COVER State - - service: '{{ nspanel.service.component.value }}' + - service: 'esphome.{{ nspanel_name }}_component_val' data: id: cover.coverslider val: '{{ (state_attr(cover_entity, "current_position") | int ) | round(0) }}' continue_on_error: true - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: cover.cover_value txt: '{{ (state_attr(cover_entity, "current_position") | int ) | round(0) }} %' @@ -8476,19 +8496,19 @@ action: {% else %} battery-outline {% endif %} - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: cover.battery_value txt: '{{ battery_level }} %' continue_on_error: true ### ICON Battery Font Color ### - - service: '{{ nspanel.service.component.color }}' + - service: 'esphome.{{ nspanel_name }}_component_color' data: id: cover.battery_icon color: '{{ nextion.color.grey_super_light }}' continue_on_error: true ### ICON Battery Font ### - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: cover.battery_icon txt: '{{ all_icons[battery_icon] }}' @@ -8522,47 +8542,47 @@ action: }} - if: '{{ fan.steps > 0 and fan.supported_features | bitwise_and(2) > 0 }}' # Oscillate then: - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: bt_oscillate txt: '{{ all_icons["autorenew"] if state_attr(fan_entity, "oscillating") | default(false) else all_icons["autorenew-off"] }}' continue_on_error: true - - service: '{{ nspanel.service.component.color }}' + - service: 'esphome.{{ nspanel_name }}_component_color' data: id: fan.bt_oscillate color: '{{ nextion.color.grey_white }}' continue_on_error: true - - service: '{{ nspanel.service.component.visibility }}' + - service: 'esphome.{{ nspanel_name }}_components_visibility' data: ids: ["fan.bt_oscillate"] visible: true continue_on_error: true - condition: '{{ fan.steps > 0 and fan.supported_features | bitwise_and(1) > 0 }}' # Set speed - - service: '{{ nspanel.service.component.value }}' + - service: 'esphome.{{ nspanel_name }}_component_val' data: id: fanslider val: '{{ ((fan.percentage / 100) * fan.steps) | round(0) | int(0) }}' continue_on_error: true - - service: '{{ nspanel.service.command }}' + - service: 'esphome.{{ nspanel_name }}_command' data: cmd: fanslider.maxval={{ fan.steps }} continue_on_error: true - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: fan_value txt: '{{ fan.percentage }}%' continue_on_error: true - - service: '{{ nspanel.service.component.color }}' + - service: 'esphome.{{ nspanel_name }}_component_color' data: id: fan.button_up color: '{{ nextion.color.grey_white if fan.percentage < 100 else nextion.color.grey_dark }}' continue_on_error: true - - service: '{{ nspanel.service.component.color }}' + - service: 'esphome.{{ nspanel_name }}_component_color' data: id: fan.button_down color: '{{ nextion.color.grey_white if fan.percentage > 0 else nextion.color.grey_dark }}' continue_on_error: true - - service: '{{ nspanel.service.component.color }}' + - service: 'esphome.{{ nspanel_name }}_component_color' data: id: fan.button_off color: '{{ nextion.color.grey_white if fan.percentage > 0 else nextion.color.grey_dark }}' @@ -8606,7 +8626,7 @@ action: if (state_attr(media_player_entity, "mass_player_type") | default("")) == "group" else state_attr(media_player_entity, "supported_features") | int(0) }} - - service: '{{ nspanel.service.page.media_player }}' + - service: 'esphome.{{ nspanel_name }}_page_media_player' data: entity: '{{ media_player_entity }}' state: '{{ media_player.state if media_player.state is string else "" }}' @@ -8685,7 +8705,7 @@ action: alarm: code_format: '{{ state_attr(entity_id, "code_format") }}' code_arm_required: '{{ state_attr(entity_id, "code_arm_required") | default(true) }}' - - service: '{{ nspanel.service.page.alarm }}' + - service: 'esphome.{{ nspanel_name }}_page_alarm' data: page_title: '{{ entity.name }}' state: '{{ entity_state }}' @@ -8725,7 +8745,7 @@ action: }} hvac_modes: '{{ state_attr(climate_entity, "hvac_modes") if settings_entity_domain == "climate" }}' - condition: '{{ settings_entity_domain == "climate" }}' - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: page_label txt: '{{ state_attr(climate_entity, "friendly_name") }}' @@ -8811,7 +8831,7 @@ action: {% elif "idle" in climate_action %}{{ all_icons.thermometer }} {% else %}{{ all_icons.blank }} {% endif %} - - service: '{{ nspanel.service.page.climate }}' + - service: 'esphome.{{ nspanel_name }}_page_climate' data: current_temp: '{{ current_temp }}' supported_features: '{{ supported_features }}' @@ -8834,8 +8854,9 @@ action: for_each: '{{ page_climate.buttons.hvac_mode }}' sequence: - condition: '{{ repeat.item.mode in hvac_modes }}' + - *delay_default ### ICON Font Color ### - - service: '{{ nspanel.service.component.color }}' + - service: 'esphome.{{ nspanel_name }}_component_color' data: id: 'climate.{{ repeat.item.component }}' color: > @@ -8846,13 +8867,13 @@ action: }} continue_on_error: true ### ICON Font ### - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: 'climate.{{ repeat.item.component }}' txt: '{{ all_icons[repeat.item.icon] }}' continue_on_error: true ### Enable button click ### - - service: '{{ nspanel.service.component.visibility }}' + - service: 'esphome.{{ nspanel_name }}_components_visibility' data: ids: '{{ [ repeat.item.component ] }}' visible: true @@ -8885,19 +8906,19 @@ action: icon_color: '{{ repeat.item.icon_color_rgb }}' - *variable_entity ### ICON Font Color ### - - service: '{{ nspanel.service.component.color }}' + - service: 'esphome.{{ nspanel_name }}_component_color' data: id: '{{ repeat.item.component }}' color: '{{ entity.icon_color }}' continue_on_error: true ### ICON Font ### - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: '{{ repeat.item.component }}' txt: '{{ entity.icon }}' continue_on_error: true ### Enable button click ### - - service: '{{ nspanel.service.component.visibility }}' + - service: 'esphome.{{ nspanel_name }}_components_visibility' data: ids: '{{ [ repeat.item.component ] }}' visible: true @@ -8910,10 +8931,11 @@ action: - &variables-entity_pages variables: event_page: '{{ nspanel_event.page if nspanel_event is defined and nspanel_event.page is defined else pages.current }}' + entitypages_show_entities_icons: !input entitypages_show_entities_icons ##### Entity page - Label ##### - if: '{{ entities_pages.labels[event_page] | length > 0 }}' then: - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: page_label txt: '{{ entities_pages.labels[event_page] }}' @@ -8931,6 +8953,7 @@ action: }} sequence: &update_entity_page_entity - condition: '{{ repeat.item.entity is string and repeat.item.entity | length > 0 }}' + - *delay_default - variables: entity_id: '{{ repeat.item.entity }}' overlap: @@ -8938,10 +8961,10 @@ action: name: '{{ repeat.item.name if repeat.item.name is defined else None }}' unit_of_measurement: '{{ state_attr(entity_id, "unit_of_measurement") | default("") }}' - *variable_entity - - service: '{{ nspanel.service.value }}' + - service: 'esphome.{{ nspanel_name }}_value' data: id: '{{ repeat.item.page }}.{{ repeat.item.component }}' - icon: '{{ entity.icon }}' + icon: '{{ entity.icon if entitypages_show_entities_icons else "" }}' icon_color: [] name: '{{ entity.name }}' value: *value_with_unit_and_translations @@ -9000,14 +9023,14 @@ action: page_index: '{{ (page_name[-2:] | int(0)) - 1 }}' ##### Display relative day ##### - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: '{{ page_name }}.day' txt: '{{ (dict.values(mui[language].relative_day) | list)[page_index] }}' continue_on_error: true ##### Display date (long) ##### - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: '{{ page_name }}.date' txt: > @@ -9403,7 +9426,7 @@ action: ##### Display weather PIC when available - if: '{{ condition not in ["unknown", None] }}' then: - - service: '{{ nspanel.service.command }}' + - service: 'esphome.{{ nspanel_name }}_command' data: cmd: > {{ page_name }}.weather_icon.pic={{ @@ -9421,7 +9444,7 @@ action: {{ (temp_max | round(0) ~ temperature_units) if is_number(temp_max) and temp_min != temp_max }} - if: '{{ (is_number(temp_min) or is_number(temp_max)) and temperature_string is string and temperature_string | length > 0 }}' then: - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: '{{ page_name }}.temperature' ### Temperature MIN/MAX ### txt: '{{ temperature_string }}' @@ -9431,18 +9454,19 @@ action: - repeat: for_each: '{{ (parameters | selectattr("visibility", "eq", true) | list)[:5] }}' sequence: - - service: '{{ nspanel.service.component.text }}' + - *delay_default + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: '{{ page_name }}.value0{{ repeat.index }}' txt: '{{ repeat.item.value }}' continue_on_error: true - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: '{{ page_name }}.value0{{ repeat.index }}_icon' txt: '{{ repeat.item.icon }}' continue_on_error: true else: &forecast_unavailable - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: id: '{{ page_name }}.value01' txt: '{{ mui[language].unavailable }}' @@ -9451,13 +9475,13 @@ action: ## PAGE UTILITIES ## - alias: Utilities page - conditions: '{{ nspanel_event.page in pages.utilities }}' + conditions: '{{ nspanel_event.page == pages.utilities }}' sequence: &refresh_page_utilities ## Page title - variables: utilities_constructor_init: true page_icon: '{{ pages_utilities.title.icon.split("mdi:")[1] if pages_utilities.title.icon is string and pages_utilities.title.icon.split("mdi:") | count == 2 }}' - - service: '{{ nspanel.service.value }}' + - service: 'esphome.{{ nspanel_name }}_value' data: id: utilities.title icon: '{{ all_icons[page_icon] if page_icon in all_icons else all_icons.gauge }}' @@ -9467,24 +9491,31 @@ action: value_color: [] continue_on_error: true ## Show main line - - service: '{{ nspanel.service.component.visibility }}' + - if: '{{ pages_utilities.cursor.width != 255 }}' + then: + - service: 'esphome.{{ nspanel_name }}_command' + data: + cmd: 'line_main.wid={{ pages_utilities.cursor.width }}' + continue_on_error: true + - service: 'esphome.{{ nspanel_name }}_components_visibility' data: - ids: ["utilities.line_main"] + ids: ["line_main"] visible: true continue_on_error: true - variables: main_line_ref: !input utilities_page01_main_line_reference main_line_inverted: !input utilities_page01_main_line_inverted main_line_ref_state: '{{ states(main_line_ref) | int(0) if main_line_ref is string and main_line_ref.split(".") | count == 2 else 0 }}' - - service: '{{ nspanel.service.component.value }}' + - service: 'esphome.{{ nspanel_name }}_component_val' data: - id: utilities.line_main_d + id: line_main_d val: '{{ (((main_line_ref_state > 0) - (main_line_ref_state < 0)) * (-1 if main_line_inverted else 1)) | int(0) }}' continue_on_error: true ## Groups - repeat: for_each: '{{ pages_utilities.groups | list }}' sequence: &refresh_page_utilities_group + - *delay_default - variables: utilities_constructor: '{{ utilities_constructor_init is defined and utilities_constructor_init }}' icon_enabled: '{{ utilities_constructor and repeat.item.icon is defined and repeat.item.icon is string and repeat.item.icon.split("mdi:") | count == 2 }}' @@ -9496,9 +9527,9 @@ action: then: - variables: icon_code: '{{ repeat.item.icon.split("mdi:")[1] }}' - - service: '{{ nspanel.service.icon }}' + - service: 'esphome.{{ nspanel_name }}_icon' data: - id: 'utilities.{{ repeat.item.name }}_icon' + id: '{{ repeat.item.name }}_icon' icon: '{{ all_icons[icon_code] if icon_code in all_icons else "" }}' icon_color: '{{ repeat.item.color }}' visible: '{{ icon_code in all_icons }}' @@ -9510,21 +9541,21 @@ action: entity_id: '{{ repeat.item.value1 }}' unit_of_measurement: '{{ state_attr(entity_id, "unit_of_measurement") | default("") }}' - *variable_entity - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: - id: 'utilities.{{ repeat.item.name }}' + id: '{{ repeat.item.name }}' txt: *value_with_unit_and_translations continue_on_error: true - if: '{{ utilities_constructor }}' then: - - service: '{{ nspanel.service.component.color }}' + - service: 'esphome.{{ nspanel_name }}_component_color' data: - id: 'utilities.{{ repeat.item.name }}' + id: '{{ repeat.item.name }}' color: '{{ repeat.item.color }}' continue_on_error: true - - service: '{{ nspanel.service.component.visibility }}' + - service: 'esphome.{{ nspanel_name }}_components_visibility' data: - ids: '{{ ["utilities." ~ repeat.item.name] }}' + ids: '{{ [repeat.item.name] }}' visible: true continue_on_error: true - alias: Utilities - Display value 2 @@ -9534,39 +9565,39 @@ action: entity_id: '{{ repeat.item.value2 }}' unit_of_measurement: '{{ state_attr(entity_id, "unit_of_measurement") | default("") }}' - *variable_entity - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: - id: 'utilities.{{ repeat.item.name }}b' + id: '{{ repeat.item.name }}b' txt: *value_with_unit_and_translations continue_on_error: true - if: '{{ utilities_constructor }}' then: - - service: '{{ nspanel.service.component.color }}' + - service: 'esphome.{{ nspanel_name }}_component_color' data: - id: 'utilities.{{ repeat.item.name }}b' + id: '{{ repeat.item.name }}b' color: '{{ repeat.item.color }}' continue_on_error: true - - service: '{{ nspanel.service.component.visibility }}' + - service: 'esphome.{{ nspanel_name }}_components_visibility' data: - ids: '{{ ["utilities." ~ repeat.item.name ~ "b"] }}' + ids: '{{ [repeat.item.name ~ "b"] }}' visible: true continue_on_error: true - alias: Utilities - Label if: '{{ label_enabled }}' then: - - service: '{{ nspanel.service.component.text }}' + - service: 'esphome.{{ nspanel_name }}_component_text' data: - id: 'utilities.{{ repeat.item.name }}_label' + id: '{{ repeat.item.name }}_label' txt: '{{ repeat.item.label }}' continue_on_error: true - - service: '{{ nspanel.service.component.color }}' + - service: 'esphome.{{ nspanel_name }}_component_color' data: - id: 'utilities.{{ repeat.item.name }}_label' + id: '{{ repeat.item.name }}_label' color: '{{ repeat.item.color }}' continue_on_error: true - - service: '{{ nspanel.service.component.visibility }}' + - service: 'esphome.{{ nspanel_name }}_components_visibility' data: - ids: '{{ ["utilities." ~ repeat.item.name ~ "_label"] }}' + ids: '{{ [repeat.item.name ~ "_label"] }}' visible: true continue_on_error: true - alias: Utilities - Line @@ -9577,30 +9608,36 @@ action: - variables: line_ref_state: > {{ - states(repeat.item.line_ref) | int(0) + states(repeat.item.line_ref) | float(0) if repeat.item.line_ref is defined and repeat.item.line_ref is string and repeat.item.line_ref.split(".") | count == 2 else 0 }} - - service: '{{ nspanel.service.component.value }}' + - service: 'esphome.{{ nspanel_name }}_component_val' data: - id: 'utilities.{{ repeat.item.name }}_line_d' + id: '{{ repeat.item.name }}_line_d' val: '{{ (((line_ref_state > 0) - (line_ref_state < 0)) * (-1 if repeat.item.line_inverted else 1)) | int(0) }}' continue_on_error: true - if: '{{ utilities_constructor }}' then: - variables: rgb565: '{{ int(((repeat.item.color[0] //(2**3)) *(2**11))+((repeat.item.color[1] //(2**2)) *(2**5))+(repeat.item.color[2] //(2**3))) }}' - - service: '{{ nspanel.service.command }}' + - service: 'esphome.{{ nspanel_name }}_command' data: - cmd: 'utilities.{{ repeat.item.name }}_line.bco={{ rgb565 }}' + cmd: '{{ repeat.item.name }}_line.bco={{ rgb565 }}' continue_on_error: true - - service: '{{ nspanel.service.command }}' + - service: 'esphome.{{ nspanel_name }}_command' data: - cmd: 'utilities.{{ repeat.item.name }}_line.bco1={{ rgb565 }}' + cmd: '{{ repeat.item.name }}_line.bco1={{ rgb565 }}' continue_on_error: true - - service: '{{ nspanel.service.component.visibility }}' + - if: '{{ pages_utilities.cursor.width != 255 }}' + then: + - service: 'esphome.{{ nspanel_name }}_command' + data: + cmd: '{{ repeat.item.name }}_line.wid={{ pages_utilities.cursor.width }}' + continue_on_error: true + - service: 'esphome.{{ nspanel_name }}_components_visibility' data: - ids: '{{ ["utilities." ~ repeat.item.name ~ "_line"] }}' + ids: '{{ [repeat.item.name ~ "_line"] }}' visible: true continue_on_error: true @@ -9633,7 +9670,7 @@ action: - variables: back_page: '{{ pages.home }}' - &entity_details_show - service: '{{ nspanel.service.entity_details_show }}' + service: 'esphome.{{ nspanel_name }}_entity_details_show' data: entity: '{{ "embedded_climate" if entity_id == thermostat_embedded else entity_id }}' back_page: '{{ back_page }}' @@ -10125,7 +10162,7 @@ action: conditions: - condition: trigger id: utilities_page - - '{{ pages.current in pages.utilities }}' + - '{{ pages.current == pages.utilities }}' sequence: - variables: list1: '{{ pages_utilities.groups | selectattr("value1", "defined") | selectattr("value1", "eq", trigger.entity_id) | list }}' @@ -10202,7 +10239,7 @@ action: id: home_values_state - '{{ pages.current == pages.home }}' sequence: - - *variables-home_page_values + - *variables_home_page_values - repeat: for_each: '{{ home_page_values | selectattr("entity", "defined") | selectattr("entity", "eq", trigger.event.data.entity_id) | list }}' sequence: @@ -10250,7 +10287,25 @@ action: - right_button_state sequence: - *variables_hardware - - *update_hw_button_state + - variables: + button_name: '{{ "left" if trigger.id == "left_button_state" else "right" }}' + button_state: '{{ hardware.buttons[button_name].entity_is_valid and states(hardware.buttons[button_name].entity) | default("unavailable") in enum.states.on }}' + - service: 'esphome.{{ nspanel_name }}_hw_button_state' + data: + button_mask: '{{ 1 if trigger.id == "left_button_state" else 2 }}' + state: '{{ button_state }}' + continue_on_error: true + - delay: + milliseconds: 250 + - variables: + button_state_new: '{{ hardware.buttons[button_name].entity_is_valid and states(hardware.buttons[button_name].entity) | default("unavailable") in enum.states.on }}' + - if: '{{ button_state_new != button_state }}' + then: + - service: 'esphome.{{ nspanel_name }}_hw_button_state' + data: + button_mask: '{{ 1 if trigger.id == "left_button_state" else 2 }}' + state: '{{ button_state_new }}' + continue_on_error: true ##### OUTDOOR TEMP - entity ##### - alias: Outdoor temp - Entity @@ -10267,7 +10322,6 @@ action: - condition: trigger id: - indoortemp_state - - nspaneltemp_state - '{{ is_number(trigger.event.data.new_state.state) }}' sequence: - *refresh-page_home-indoor_temp @@ -10290,7 +10344,7 @@ action: sequence: - delay: seconds: 2 - - service: '{{ nspanel.service.tft_upload }}' + - service: 'esphome.{{ nspanel_name }}_upload_tft' data: url: "default" continue_on_error: true @@ -10301,7 +10355,7 @@ action: - condition: trigger id: wake_up_sensors sequence: - - service: '{{ nspanel.service.wake_up }}' + - service: 'esphome.{{ nspanel_name }}_wake_up' data: reset_timer: true continue_on_error: true diff --git a/prebuilt/nspanel_esphome_prebuilt-factory.bin b/prebuilt/nspanel_esphome_prebuilt-factory.bin deleted file mode 100644 index d2007b9..0000000 Binary files a/prebuilt/nspanel_esphome_prebuilt-factory.bin and /dev/null differ diff --git a/prebuilt/nspanel_esphome_prebuilt.bin b/prebuilt/nspanel_esphome_prebuilt.bin deleted file mode 100644 index 2b2a767..0000000 Binary files a/prebuilt/nspanel_esphome_prebuilt.bin and /dev/null differ