diff --git a/stable/prepare_ha/index.html b/stable/prepare_ha/index.html index 0fe1f7fc..ab0846c5 100644 --- a/stable/prepare_ha/index.html +++ b/stable/prepare_ha/index.html @@ -1254,9 +1254,28 @@ AppDaemon automations in HACS, as these are not enabled by default:

Workaround for HomeAssistant 2024.04ΒΆ

AppDaemon is using the old REST API that until AppDaemon moved on the the websocket API this woraround is needed to get weather forecast data from homeassistant. (https://github.com/AppDaemon/appdaemon/issues/1837)

-

To get the forecast data in appdaemon, there is a script needed in homeassistant's script.yaml:

-

-
+

To get the forecast data in appdaemon, there is a script needed in homeassistant's configuration.yaml:

+

template:
+  - trigger:
+      - platform: time_pattern
+        hours: /1
+    action:
+      - service: weather.get_forecasts
+        data:
+          type: daily
+        target:
+          entity_id: weather.k3ll3r # change to your weather entity in this line
+        response_variable: daily
+    sensor:
+      - name: Weather Forecast Daily
+        unique_id: weather_forecast_daily
+        state: "{{ now().isoformat() }}"
+        attributes:
+          forecast: "{{ daily['weather.k3ll3r'].forecast }}" # change to your weather entity in this line
+
+image +

Adjust the entities in your apps.yaml that are accessing the forecast to the newly created trigger template:

+

image

diff --git a/stable/search/search_index.json b/stable/search/search_index.json index f1786f7d..13b0eec7 100644 --- a/stable/search/search_index.json +++ b/stable/search/search_index.json @@ -1 +1 @@ -{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Overview","text":""},{"location":"#overview","title":"Overview","text":"

If you like this project consider buying me a pizza \ud83c\udf55

NsPanel Lovelace UI is a Firmware for the nextion screen inside of NSPanel in the Design of HomeAssistant's Lovelace UI Design.

EU Model and US Model supported (in portrait and landscape orientation)

Content of the screen is controlled by a AppDaemon Python Script installed on your HomeAssistant Instance.

Or an TypeScript on your ioBroker Instance in case you are an ioBroker User.

NsPanel needs to be flashed with Tasmota (or with the 3rd Party ESPHome Component from @sairon)

"},{"location":"#features","title":"Features","text":"

It works with Tasmota and MQTT. To control the panel and update it with content from HomeAssistant there is an AppDaemon App.

See the following picture to get an idea of the look of this firmware for NSPanel.

Some (not all) screenshots from the US Portrait Version:

"},{"location":"#requirements","title":"Requirements","text":""},{"location":"card-alarm/","title":"Alarm Card","text":""},{"location":"card-alarm/#alarm-card","title":"Alarm Card","text":"
    cards:\n      - type: cardAlarm\n        title: Alarm Test 1\n        entity: alarm_control_panel.alarmo\n

List of supported config keys of this card:

key optional type default description type False string None Type of the card title True string None Title of the Page entity False string None contains the entity of the current card key True string None Used by navigate items alarmControl True complex None overwrites the action executed on pressing the left bottom icon, by default this button is used to show a list of open sensors on a failed attempt to arm. supportedModes True list None Supply list of arm modes if you want to limit the modes on the card. Example ['arm_away', 'arm_night']"},{"location":"card-climate/","title":"Climate/Thermo Card","text":""},{"location":"card-climate/#climatethermo-card","title":"Climate/Thermo Card","text":"
    cards:\n      - type: cardThermo\n        title: HeatPump\n        entity: climate.heatpump\n      - type: cardThermo\n        title: HvaC\n        entity: climate.hvac\n      - type: cardThermo\n        title: ecobee\n        entity: climate.ecobee\n

List of supported config keys of this card:

key optional type default description type False string None Type of the card entity False string None contains the entitiy of this card title True string None Title of the Page temperatureUnit True string celsius set this to fahrenheit to change the temperatureUnit on the page key True string None Used by navigate items in combination with the type (cardEntities_key) supportedModes True list None Supply list of heat actions if you want to limit the actions on the card. Example ['heat', 'off']"},{"location":"card-entities/","title":"Entities Card","text":""},{"location":"card-entities/#entities-page","title":"Entities Page","text":"
    cards:\n      - type: cardEntities\n        title: Test Entities Card\n        entities:\n          - entity: light.bed_light\n          - entity: switch.decorative_lights\n          - entity: cover.hall_window\n          - entity: sensor.outside_temperature\n

List of supported config keys of this card:

key optional type default description type False string None Type of the card entities False complex None contains a list of entities of this card title True string None Title of the Page key True string None Used by navigate items in combination with the type (cardEntities_key)

List of supported entitiy types for this page:

"},{"location":"card-grid/","title":"Grid Card","text":""},{"location":"card-grid/#grid-page","title":"Grid Page","text":"
    cards:\n      - type: cardGrid\n        title: Test Grid Card\n        entities:\n          - entity: light.bed_light\n          - entity: switch.decorative_lights\n          - entity: sensor.outside_temperature\n            name: Outside Temp\n          - entity: sensor.carbon_monoxide\n          - entity: light.entrance_color_white_lights\n            name: Entrance\n          - entity: light.office_rgbw_lights\n            name: Office RGBW\n            icon: mdi:office-building\n

List of supported config keys of this card:

key optional type default description type False string None Type of the card entities False complex None contains a list of entities of this card title True string None Title of the Page key True string None Used by navigate items in combination with the type (cardEntities_key)

List of supported entitiy types for this page:

"},{"location":"card-media/","title":"Media Card","text":""},{"location":"card-media/#media-card","title":"Media Card","text":"
    cards:\n      - type: cardMedia\n        entity: media_player.spotify\n

List of supported config keys of this card:

key optional type default description type False string None Type of the card title True string None Title of the Page entity False string None contains the entity of the current card entities False complex None contains a list of entities shown in the bottom row, supports all entities supported by cardGrid key True string None Used by navigate items Example with configured Entities
      - type: cardMedia\n        title: Kitchen\n        entity: media_player.kitchen\n        entities:\n          - entity: light.bed_light\n          - entity: light.ceiling_lights\n          - entity: light.entrance_color_white_lights\n          - entity: light.kitchen_lights\n          - entity: light.living_room_rgbww_lights\n
Example with action on upper left media icon
      - type: cardMedia\n        title: Kitchen\n        entity: input_select.test123\n        status: media_player.kitchen\n
Example with moved spaker selection The icon for speaker selection is automatically appended to the end of the list and can be moved with entities in the list. With 6 entities it is possible to remove it entirely.
      - type: cardMedia\n        title: Kitchen\n        entity: media_player.kitchen\n        entities:\n          - entity: delete\n          - entity: delete\n
"},{"location":"card-power/","title":"Power Card","text":""},{"location":"card-power/#power-card-v39-and-higher","title":"Power Card (v3.9 and higher)","text":"
    cards:\n      - type: cardPower\n        title: Power Test\n        entities:\n          - entity: sensor.power_consumption\n            icon: mdi:home\n          - entity: delete\n          - entity: sensor.today_energy\n            icon: mdi:car\n            speed: -20\n          - entity: delete\n          - entity: sensor.today_energy\n            icon: mdi:battery\n            speed: 20\n          - entity: delete\n          - entity: sensor.today_energy\n            icon: mdi:solar-panel\n            color: [255, 255, 0]\n            speed: 30\n          - entity: sensor.today_energy\n            speed: -40\n            icon: mdi:help\n

The first two entities are shown in the middle of the card, all other entities are used around it. Any entity overrides (e.g. icon, color) in the first entity apply to the middle of the card.

List of supported config keys of this card:

key optional type default description type False string None Type of the card entities False complex None contains entities of the card title True string None Title of the Page cooldown True float None Rate Limit for Entity Updates to the card in Seconds (cooldown: 0.5) key True string None Used by navigate items

List of supported entitiy types for this page:

N.B. Negative values will likely be truncated and not display gracefully. For this reason, when measuring energy you should use the same inputs as you use on the Home Assistant Energy Dashboard (i.e. separate grid import and grid export) and similarly when measuring power.

Some details about speed:

Speed expects an integer input between -100 and 100.

It is possible to calculate the speed through a Home Assistant template, this allows to calculate the speed in relation to other data in Home Assistant.

This template will calculate a speed setting based on the amount of power drawn on a device as a fraction of the total power usage.

            speed: >-\n              {% set entity_power = states('sensor.appliance_water_heater_power') |float | round(3)%}\n              {% set total_power = states('sensor.ams_power_active') | float | round(3) %}\n              {% set entity_usage = (entity_power / total_power * 100) | float %}\n              {{ (entity_usage | round()) * -1 }}\n
It provides the number as a negative integer, making the dot move from the middle of the card toward the entity. If you want the dot to move toward from the middle of the card, just skip inverting it at the end of the template like this:
              {{ (entity_usage | round()) }}\n
"},{"location":"card-qr/","title":"Wifi/QR Card","text":""},{"location":"card-qr/#wifi-qr-card","title":"WiFi / QR Card","text":"
    cards:\n      - type: cardQR\n        title: Guest Wifi\n        qrCode: \"WIFI:S:test_ssid;T:WPA;P:test_pw;;\"\n        entities:\n          - entity: iText.test_ssid\n            name: Name\n            icon: mdi:wifi\n          - entity: iText.test_pw\n            name: Password\n            icon: mdi:key\n

List of supported config keys of this card:

key optional type default description type False string None Type of the card entities False complex None contains entities of the card, only valid on cardEntities and cardGrid and cardQR title True string None Title of the Page key True string None Used by navigate items qrCode False string None Value of the qrCode

List of supported entitiy types for this page:

The qrCode value is evaluated as a homeassistant Template, so it is possible to get values from HomeAssistant within the qrCode.

\"WIFI:S:{{states('input_text.test_ssid')}};T:WPA;P:{{states('input_text.test_pw')}};;\"

"},{"location":"card-unlock/","title":"Unlock Card","text":""},{"location":"card-unlock/#unlock-card-v40-and-higher","title":"Unlock Card (v4.0 and higher)","text":"

Can be used to navigate to create pin locked navigation to a hidden card.

    cards:\n      - type: cardUnlock\n        pin: 1234\n        title: Admin Page\n        destination: navigate.adminpage\n    hiddenCards:\n      - type: cardGrid\n        title: Admin Page\n        key: adminpage\n        entities:\n          - entity: light.schreibtischlampe\n

List of supported config keys of this card:

key optional type default description type False string None Type of the card title True string None Title of the Page destination False string None contains the navigation entity this card should navigate to on unlock pin False string 3830 pin to unlock key True string None Used by navigate items"},{"location":"config-overview/","title":"Overview","text":""},{"location":"config-overview/#configuration","title":"Configuration","text":"

To confiure your NSPanel to your needs, you need to edit the apps.yaml inside of your Appdaemon config folder and add card and entities you want to display on the screen.

If you've sucessfully set up mqtt, you should already have a configuration looking like this:

---\nnspanel-1:\n  module: nspanel-lovelace-ui\n  class: NsPanelLovelaceUIManager\n  config:\n    panelRecvTopic: \"tele/tasmota_your_mqtt_topic/RESULT\"\n    panelSendTopic: \"cmnd/tasmota_your_mqtt_topic/CustomSend\"\n    model: eu\n

You can continue from this point adding configuration for the weather forcecast on the screensaver, configuring a schedule for the brightness of the screensaver and your first cards.

---\nnspanel-1:\n  module: nspanel-lovelace-ui\n  class: NsPanelLovelaceUIManager\n  config:\n    panelRecvTopic: \"tele/tasmota_your_mqtt_topic/RESULT\"\n    panelSendTopic: \"cmnd/tasmota_your_mqtt_topic/CustomSend\"\n    model: eu\n    sleepTimeout: 20\n    sleepBrightness:\n      - time: \"7:00:00\"\n        value: 10\n      - time: \"23:00:00\"\n        value: 0\n    locale: \"de_DE\"\n    screensaver:\n      entity: weather.k3ll3r\n    cards:\n      - type: cardEntities\n        entities:\n          - entity: switch.example_item\n          - entity: light.example_item\n        title: Example 1\n      - type: cardGrid\n        entities:\n          - entity: switch.example_item\n          - entity: light.example_item\n        title: Example 2\n

This is the full list of configuration options supported for the config key:

key optional type default description panelRecvTopic False string tele/tasmota_your_mqtt_topic/RESULT The mqtt topic used to receive messages. panelSendTopic False string cmnd/tasmota_your_mqtt_topic/CustomSend The mqtt topic used to send messages. updateMode True string auto-notify Update Mode for flashing of the nextion display firmware, by default it is showing a message asking for the update after updating the backend app in HACS; Possible values: \"auto\", \"auto-notify\", \"manual\" model True string eu Model; Possible values: \"eu\", \"us-l\" and \"us-p\" sleepTimeout True integer 20 Timeout for the screen to enter screensaver, to disable screensaver use 0 sleepBrightness True integer/complex 20 Brightness for the screen on the screensaver, see example below for complex/scheduled config. screenBrightness True integer/complex 100 Brightness for the screen during usage, config format is the same as sleepBrightness. sleepTracking True string None Forces screensaver brightness to 0 in case entity state is not_home or off, can be a group, person or device_tracker entity. sleepTrackingZones True list [\"not_home\", \"off\"] Allows you to set your own states for sleepTracking sleepOverride True complex None Allows overriding of the sleepBrightness if entity state is on, true or home. Overrides sleepBrightness but sleepTracking takes precedence. locale True string en_US Used by babel to determinante Date format on screensaver, also used for localization. dateFormatBabel True string full formatting options on https://babel.pocoo.org/en/latest/dates.html?highlight=name%20of%20day#date-fields timeFormat True string %H:%M Time Format on screensaver. Substring after ? is displayed in a seperate smaller textbox. Useful for 12h time format with AM/PM
\"%I:%M   ?%p\"
dateAdditionalTemplate True string \"\" Addional Text dispayed after Date, can contain a Homeassistant Template Example \" - {{ states('sun.sun') }}\" timeAdditionalTemplate True string \"\" Addional Text dispayed below Time, can contain a Homeassistant Template dateFormat True string %A, %d. %B %Y date format used if babel is not installed timezone True string \"\" Timezone for the time on the panel: Europe/Berlin - See https://en.wikipedia.org/wiki/List_of_tz_database_time_zones for a list of TZ Identifiers (supported from upcoming version v4.4) defaultBackgroundColor True string ha-dark backgroud color of all cards, valid values: black, ha-dark cards False complex configuration for cards that are displayed on panel; see docs for cards screensaver True complex configuration for screensaver; see docs for screensaver hiddenCards True complex configuration for cards that can be accessed though navigate items; see docs for cards"},{"location":"config-overview/#details-on-sleepbrightnessscreenbrightness-and-other-configs-related-to-screen-brightness","title":"Details on sleepBrightness/screenBrightness and other configs related to screen brightness","text":"

It is possible to schedule a brightness change for the screen at specific times.

    sleepBrightness:\n      - time: \"7:00:00\"\n        value: 10\n      - time: \"23:00:00\"\n        value: 0\n
    sleepBrightness:\n      - time: \"sunrise\"\n        value: 10\n      - time: \"sunset + 1:00:00\"\n        value: 0\n

It is also possible to use a static value or an input_number/sensor with the range between 0 and 100 as value for sleepBrightness/screenBrightness:

    sleepBrightness: input_number.brightness_nspanel\n
    sleepBrightness: 50\n

The config option sleepTracking overrides this setting and sets the brightness to 0 if the state of the configured Home Assistant entity is off or not_home. You may also use a Home Assistant group to track multiple entities.

The config option sleepOverride overrides sleepBrightness but does not take precedence over sleepTracking. This is useful if, for example, you want your NSPanel to be brighter than usual if your light is on or if you want to override a panel dimming if you are in the room.

The following example configuration is turning off the screen after sunset, but in case the bedroom light is on the NSPanel brightness will be 20 instead of 0.

    sleepBrightness:\n      - time: \"sunrise\"\n        value: 20\n      - time: \"sunset\"\n        value: 0\n    sleepOverride:\n      entity: light.bedroomlight\n      brightness: 20\n
"},{"location":"config-overview/#supported-keys-for-locale-config","title":"Supported keys for locale config","text":"Language Code Language af_ZA Afrikaans ar_SY Arabic bg_BG Bulgarian ca_ES Catalan cs_CZ Czech da_DK Danish de_DE German el_GR Greek en_US English es_ES Spanish et_EE Estonian fa_IR Persian fi_FI Finnish fr_FR French he_IL Hebrew hr_xx Croatian hu_HU Hungarian hy_AM Armenian id_ID Indonesian is_IS Icelandic it_IT Italian lb_xx Luxembourgish lt_LT Lithuanian lv_LV Latvian nb_NO Norwegian nl_NL Dutch nn_NO Norwegian pl_PL Polish pt_PT Portuguese ro_RO Romanian ru_RU Russian sk_SK Slovak sl_SI Slovenian sv_SE Swedish th_TH Thai tr_TR Turkish uk_UA Ukrainian vi_VN Vietnamese zh_CN Simplified Chinese zh_TW Traditional Chinese"},{"location":"config-overview/#customize-ota-urls","title":"Customize OTA URLs","text":"

In case you need to change the OTA URLs to do automatic updates without internet access for tasmota, you can modify the OTA URLs:

  config:\n    displayURL-US-L: \"http://example.com/us-l.tft\"\n    displayURL-US-P: \"http://example.com/us-l.tft\"\n    displayURL-EU: \"http://example.com/us-l.tft\"\n    berryURL: \"http://exampe.com/autoexec.be\"\n
"},{"location":"config-screensaver/","title":"Screensaver","text":""},{"location":"config-screensaver/#possible-configuration-values-for-screensaver-config","title":"Possible configuration values for screensaver config","text":"key optional type default description entity True string weather.example weather entity from homeassistant entities True string None contains a list of entities of this card (will be used instead of entity) statusIcon1 True complex None status icon left to the date string, config similar to weatherOverride statusIcon2 True complex None status icon right to the date string, config similar to weatherOverride doubleTapToUnlock True boolean False requires to tap screensaver two times theme True complex configuration for theme defaultCard True string None default page after exiting screensaver; only works with top level cards defined in cards; needs to be a navigation item, see subpages (navigate.type_key) This config option will also be evaluated as a HomeAssistant Template. key True string None Used by navigate items type True string screensaver screensaver or screensaver2

Example for the a screensaver config with custom entities/overrides:

    screensaver:\n      entities:\n        - entity: weather.demo_weather_north\n        - entity: weather.demo_weather_north\n          type: 0\n        - entity: weather.demo_weather_north\n          type: 1\n        - entity: weather.demo_weather_north\n          type: 2\n        - entity: sensor.energy_usage\n

Using a 6th entity will automatically activate the alternative layout.

    screensaver:\n      entities:\n        - entity: weather.demo_weather_north\n        - entity: weather.demo_weather_north\n          type: 0\n        - entity: weather.demo_weather_north\n          type: 1\n        - entity: sensor.energy_usage\n        - entity: delete\n        - entity: sensor.indoor_temp\n          icon: mdi:home-thermometer-outline\n

You can use override the options described on the entities documentation page to override colors, names or values of the entities.

With Version 4.0.0 there is another alternative layout for the screensaver:

Configuration is similar, you just need to add type: screensaver2 to switch the layout.

    screensaver:\n      type: screensaver2\n      entities:\n        - entity: weather.demo_weather_north\n
"},{"location":"config-screensaver/#possible-configuration-values-for-screensaver-theme-config-only-normal-screensaver-layout-not-screensaver2","title":"Possible configuration values for screensaver theme config (only normal screensaver layout not screensaver2)","text":"key option type default description background True list Black [R, G, B] time True list White [R, G, B] timeAMPM True list White [R, G, B] date True list White [R, G, B] tMainText True list White [R, G, B] tForecast1 True list White [R, G, B] tForecast2 True list White [R, G, B] tForecast3 True list White [R, G, B] tForecast4 True list White [R, G, B] tForecast1Val True list White [R, G, B] tForecast2Val True list White [R, G, B] tForecast3Val True list White [R, G, B] tForecast4Val True list White [R, G, B] bar True list White [R, G, B] tMainTextAlt2 True list White [R, G, B] tTimeAdd True list White [R, G, B]

Specify colours as red green and blue values from 0-255 e.g. [255, 0, 0] for red or [0, 0, 255] for blue. These are translated internally to RGB565 (note that this has lower color depth so the colours may not appear the same). Also note that the screen has a low contrast ratio, so colors look sigificantly different at full display brightness and lowest brightness.

Example for the theme config:

    screensaver:\n      theme:\n        date: [255, 0, 0]\n
Config Example for configured statusIcons
    screensaver:\n        entity: weather.k3ll3r\n        statusIcon1:\n          entity: switch.example_item\n        statusIcon2:\n           entity: binary_sensor.example_item\n

It is possible to increase the size of the font used for the icons by adding altFont: True to the statusIcon configuration. Icon/Color Overrides are also possible like on any other Entity.

Config Example for configured statusIcons with increased size of the icons
    screensaver:\n        entity: weather.k3ll3r\n        statusIcon1:\n          entity: switch.example_item\n          altFont: True\n        statusIcon2:\n           entity: binary_sensor.example_item\n           altFont: True\n
Config Example for all white icons on screensaver
    screensaver:\n      entities:\n        - entity: weather.demo_weather_north\n        - entity: weather.demo_weather_north\n          type: 0\n      color: [255,255,255]\n        - entity: weather.demo_weather_north\n          type: 1\n      color: [255,255,255]\n        - entity: weather.demo_weather_north\n          type: 2\n      color: [255,255,255]\n        - entity: weather.demo_weather_north\n          type: 3\n      color: [255,255,255]\n
Config Example for a custom date format on forecast
   screensaver:\n      entities:\n        - entity: weather.demo_weather_north\n        - entity: weather.demo_weather_north\n          type: 0\n          name: \"%a %-d/%-m\"\n        - entity: weather.demo_weather_north\n          type: 1\n          name: \"%a %-d/%-m\"\n        - entity: weather.demo_weather_north\n          name: \"%a %-d/%-m\"\n          type: 2\n        - entity: weather.demo_weather_north\n          name: \"%a %-d/%-m\"\n          type: 3\n
See Babel Documentation (https://babel.pocoo.org/en/latest/dates.html#date-fields) or the Python Documenation (https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes) in case you do not have babel installed."},{"location":"configure_mqtt/","title":"Configure MQTT","text":""},{"location":"configure_mqtt/#configure-mqtt-on-tasmota","title":"Configure MQTT on Tasmota","text":"

Configure your MQTT Server in Tasmota. See Tasmota MQTT Documentation for more details.

Please leave the Full Topic as it is in default configuration (and on the screenshot).

Change the topic to something unique for your panel, you will need this topic later in the configuration of your panel in appdaemon / apps.yaml

"},{"location":"configure_mqtt/#note-for-appdeamon-addon-version-15","title":"Note for Appdeamon Addon Version >= 15","text":"

The configuration has been moved out of the config folder from homeassistant. This is how you can access it with the VSCode Addon.

"},{"location":"configure_mqtt/#configure-mqtt-connection-on-appdaemon","title":"Configure MQTT Connection on AppDaemon","text":"

For the app to work you need a working MQTT Configuration in AppDaemon. Please add the configuration of your mqtt server, user and password to your existing appdaemon.yaml Restart your AppDaemon Container (not HomeAssistant) after adding the MQTT Configuration.

You will find this file in the following location: /addon_configs/a0d7b954_appdaemon/appdeamon.yaml

---\nsecrets: /homeassistant/secrets.yaml\nappdaemon:\n  latitude: 52.0\n  longitude: 4.0\n  elevation: 2\n  time_zone: Europe/Berlin\n  app_dir: /homeassistant/appdaemon/apps/ # !!! This is really important for AppDaemon HA Addon >= 15\n  plugins:\n    HASS:\n      type: hass\n    MQTT:\n      type: mqtt\n      namespace: mqtt\n      client_id: \"appdaemon\"\n      client_host: core-mosquitto.local.hass.io # This should work if you are using supervised HomeAssistant; if not use the IP Address instead.\n      #client_host: 192.168.75.30\n      client_port: 1883\n      client_user: \"mqttuser\"\n      client_password: \"mqttpassword\"\n      client_topics: NONE\nhttp:\n  url: http://127.0.0.1:5050\nadmin:\napi:\nhadashboard:\n
"},{"location":"configure_mqtt/#configure-nspanel-on-appdaemon","title":"Configure NsPanel on AppDaemon","text":"

Please add the following minimal configuration to your apps.yaml, which is located in config/appdaemon/apps/apps.yaml

Note: You need to move your apps.yaml to this location if it isn't there.

---\nnspanel-1:\n  module: nspanel-lovelace-ui\n  class: NsPanelLovelaceUIManager\n  config:\n    panelRecvTopic: \"tele/tasmota_your_mqtt_topic/RESULT\"\n    panelSendTopic: \"cmnd/tasmota_your_mqtt_topic/CustomSend\"\n    model: eu\n

Please adjust tasmota_your_mqtt_topic to the topic used in Tasmota MQTT Configuration.

If your configuration is correct you should get the following screens on your panel:

Note: You can add multiple panels to this configuration:
---\nnspanel-1:\n  module: nspanel-lovelace-ui\n  class: NsPanelLovelaceUIManager\n  config:\n    panelRecvTopic: \"tele/first-nspanel-topic/RESULT\"\n    panelSendTopic: \"cmnd/first-nspanel-topic/CustomSend\"\nnspanel-2:\n  module: nspanel-lovelace-ui\n  class: NsPanelLovelaceUIManager\n  config:\n    panelRecvTopic: \"tele/second-nspanel-topic/RESULT\"\n    panelSendTopic: \"cmnd/second-nspanel-topic/CustomSend\"\n
"},{"location":"entities/","title":"Special Settings for Entities","text":""},{"location":"entities/#entities","title":"Entities","text":"

Entities are mainly used on cardEntities and cardGrid.

It is possible to overwrite and configure varrious things on Entities.

"},{"location":"entities/#possible-configuration-values-for-entities-key","title":"Possible configuration values for entities key:","text":"key optional type default description entity False string None name of ha entity name True string None Used to override names (supports home assistant templates) value True string None Used to override the value (supports home assistant templates) icon True string None Used to override icons color True array None Overwrite color of entity color: [255, 0, 0] state True string None Only displayed if Entity state is equal to this value state_not True string None Only displayed if Entity state is unequal to this value status True string None Only valid for navigate and service items, adds a entity to track state for the icon assumed_state True string None Only for cover items, up, down and stop buttons are always shown action_name True string None Only valid for script; Button label font True string None Used to change the font for cardGrid Icons; valid values are (small, medium-icon and medium). Currently only supported for homeassistant entities and not for internal ones. effectList True string None Only valid for light; for example [Android, Aurora (fav list for effects)"},{"location":"entities/#override-icons-or-names","title":"Override Icons or Names","text":"

To overwrite Icons or Names of entities you can configure an icon and/or name in your configuration, please see the following example. Only the icons listed in the Icon Cheatsheet are useable.

        entities:\n          - entity: light.test_item\n            name: NameOverride\n            icon: mdi:lightbulb\n

It is also possible to configure different icon overwrites per state:

            icon:\n                \"on\": mdi:lightbulb\n                \"off\": mdi:lightbulb\n

It is also possible to configure different color overwrites per state:

            color:\n                \"on\": [255,0,0]\n                \"off\": [0,0,255]\n
Dynamic color overwrites using homeassistant templates:
            color: '{{iif(states(\"binary_sensor.test\")==\"on\", \"[0,255,0]\", \"[255,165,0]\")}}'\n

It is also possible to use text instead of icons with text:X

            icon:\n                \"on\": mdi:lightbulb\n                \"off\": \"text:\"\n

Note: State Overrides are working with all state values, not only with \"on\" and \"off\".

To insert dynamic values from a homeassistant template, like a temperature you can also use ha: which will be rendered as homeassistant template. There probably not much cases where this is needed, but here is an exmaple to show the current temperature on the status icon of the screensaver:

      statusIcon2:\n        entity: climate.wohnzimmer_boden\n        icon: 'ha:{{ state_attr(\"climate.wohnzimmer_boden\",\"current_temperature\")}}'\n

If you want to display icons from a template you can put them between <I></I>

        icon: 'ha:{{ iif(is_state('light.kitchen', 'on'), '<I>mdi:flashlight</I>', '<I>mdi:flashlight-off</I>') }}'\n
"},{"location":"entities/#hide-item-based-on-state","title":"Hide item based on state","text":"

This sensor will only be shown on the card if it's state is equal to off

      - entity: binary_sensor.sensor_bad_contact\n        state: \"off\"\n

This sensor will only be shown on the card if it's state is not equal to on

      - entity: binary_sensor.sensor_kueche_contact\n        state_not: \"on\"\n
"},{"location":"entities/#hide-item-based-on-ha-template","title":"Hide item based on HA Template","text":"

The template must evaluate to true for the entity to hide.

      - entity: binary_sensor.sensor_kueche_contact\n        state_template: '{{ state_attr(\"sun.sun\",\"azimuth\") < 200 }}'\n
"},{"location":"entities/#calling-service-directly-as-button","title":"Calling service directly as button","text":"

The following example shows how to call services directly, this enables you to call services on entities not (yet) supported by the backend and also to pass data to services.

    - entity: service.light.turn_on\n      data:\n        entity_id: light.schreibtischlampe\n        color_name: \"green\"\n
"},{"location":"faq/","title":"FAQ","text":""},{"location":"faq/#faq-frequently-asked-questions","title":"FAQ - Frequently Asked Questions","text":""},{"location":"faq/#waiting-for-content-this-is-taking-longer-than-usual-on-the-screen","title":"Waiting for content - This is taking longer than usual on the screen","text":"

You have most likely an error in your MQTT configuration somewhere. To find the error follow theese steps:

  1. Check the location of your apps.yaml With the AppDaemon Addon >= 15 the config dir has been moved. It's required to configure the location back to the old one, this is done by the app_dir line in your appdaemon.yaml. This also requires you to move your apps.yaml to this location. Please make sure your apps.yaml is at /config/appdaemon/apps/apps.yaml and move it otherwise.

  2. Check your appdaemon log. (Settings > Add-ons > AppDaemon > Log) You should see something like this: INFO MQTT: MQTT Plugin initialization complete If you are seeing Messages like this: CRITICAL MQTT: Could not complete MQTT Plugin initialization, for Connection was refused due to Not Authorised Your appdaemon mqtt config is wrong, check your appdaemon.yaml. The log of your mqtt broker might give you additional information.

  3. Check MQTT Configuration of Tasmota. Your Tasmota device needs to connect sucessfully to your MQTT Broker, if you are in the waiting for content screen, the panel will send periodic messages to it's mqtt topic. Note that there is a minimum password length of 5 chars for the MQTT Connection in Tasmota.

  4. Make sure that you are using the same topic in apps.yaml and in your tasmota configuration. The examples in the docs (MQTT Config) are an valid example (tasmota<>apps.yaml). Please don't modify the Full Topic in your Tasmota Config, unless you know the implications, changing the Full Topic will result in diffent Send and Receive Channels, that have to be correct in your apps.yaml.

  5. If you are still in the waiting for content screen please share the following items, with the Waiting for Content Issue type on the Github Issues Page

"},{"location":"faq/#how-to-update","title":"How to update","text":""},{"location":"faq/#update-appdaemon-script","title":"Update AppDaemon Script","text":"

HACS will show you that there is an update avalible and ask you to update. It is important to restart the AppDaemon Container afterwards.

"},{"location":"faq/#update-display-firmware","title":"Update Display Firmware","text":"

You should get an notification on the screen, asking you to update the firmware. In case you want to update manually you can use the following commands.

EU Version: FlashNextion http://nspanel.pky.eu/lui-release.tft

US Version Portrait: FlashNextion http://nspanel.pky.eu/lui-us-p-release.tft

US Version Landscape: FlashNextion http://nspanel.pky.eu/lui-us-l-release.tft

"},{"location":"faq/#update-tasmota-berry-driver","title":"Update Tasmota Berry Driver","text":"

You should get an notification on the screen, asking you to update the driver, if an update is needed.

You can update the berry driver directly from the Tasmota Console with the following command.

UpdateDriverVersion https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be

"},{"location":"faq/#how-to-upgrade-from-a-release-to-the-current-development-version","title":"How to upgrade from a release to the current development version","text":"
  1. Update App in HACS to main

Click redownload in the menu of the app in HACS.

Select main version.

!!! Wait for it to load, dropdown needs to be selectable again, otherwise it will download the latest release !!!

!!! Wait for it to load, dropdown needs to be selectable again, otherwise it will download the latest release !!!

Click download.

  1. Restart AppDaemon

  2. Flash current Development Firmware in Tasmota Console. DO NOT USE THIS VERSION/URLS IF YOUR ARE NOT ON THE DEVELOPMENT VERSION

EU VERSION: FlashNextion http://nspanel.pky.eu/lui.tft

Development happens in the EU version, so it is possible that the US Version isn't up to date with the current development version of the EU firmware, the lastet US versions are still downloadable with the following links:

US LANDSCAPE: FlashNextion http://nspanel.pky.eu/lui-us-l.tft

US PORTRAIT: FlashNextion http://nspanel.pky.eu/lui-us-p.tft

"},{"location":"hmi-serial-protocol/","title":"NSPanel Lovelace UI","text":""},{"location":"hmi-serial-protocol/#nspanel-lovelace-ui","title":"NSPanel Lovelace UI","text":"

The HMI Project of this project is only used to display stuff, navigation ist mostly up to the backend. This allows to be way more flexible.

Messages to the Panel can be send through the Command CustomSend, which is implemented in the berry driver. You can issue this command through MQTT by sending messages to the cmnd/XXX/CustomSend Topic. Messages from the Panel are send to the tele/XXX/RESULT Topic, encoded in json {\"CustomRecv\":\"message_from_screen\"}

"},{"location":"hmi-serial-protocol/#table-of-contents","title":"Table of contents","text":""},{"location":"hmi-serial-protocol/#startup","title":"Startup","text":"

On startup the panel will send {\"CustomRecv\":\"event,startup,39,eu\"} every few seconds.

event,   #Every message from the screen will start with `event`\nstartup, #Startup Event\n39,      #Current HMI Project Version\neu       #Current HMI Project Model\n

You can answer this message in many different ways, but in general the goal is to navigate way from the startup page. In the following example we will navigate to the screensaver page.

Send the following messages to the CustomSend Topic. (You can also send them on tasmota console for testing)

"},{"location":"hmi-serial-protocol/#some-preperation-before-we-are-acually-navigating-away","title":"Some preperation before we are acually navigating away:","text":"

Send this every minute: time~18:17

Send this at least once at midnight: date~Donnerstag, 25. August 2022

Send theese message once after receiving the startup event (parameters will be explained later):

timeout~20

dimmode~10~100~6371

"},{"location":"hmi-serial-protocol/#navigate-from-the-startup-page-to-the-screensaver-by-sending-this-command-to-the-customsend-topic","title":"Navigate from the startup page to the screensaver, by sending this command to the CustomSend Topic.","text":"

pageType~screensaver

After sending this command you should already see the time and date. To also show weather data you have to send them with weatherUpdate, but we will skip this for now.

"},{"location":"hmi-serial-protocol/#exit-screensaver","title":"Exit Screensaver","text":"

Touching the panel on the screensaver will result in this MQTT Message on the result topic:

event,buttonPress2,screensaver,bExit,1

You can answer this by sending theese commands to the CustomSend Topic.

pageType~cardEntities

entityUpd~test~~button~navigate.prev~<~65535~~~button~navigate.next~>~65535~~~~light~light.schreibtischlampe~X~17299~Schreibtischlampe~0~text~sensor.server_energy_power~Y~17299~Server ENERGY Power~155 W~shutter~cover.rolladenfenster_cover_1~Z~17299~Fenster Eingang~A|B|C|disable|enable|enable~switch~switch.bad~D~63142~Bad~1

"},{"location":"hmi-serial-protocol/#messages-to-nextion-display","title":"Messages to Nextion Display","text":""},{"location":"hmi-serial-protocol/#general-commands-implemented-on-all-pages","title":"General Commands, implemented on all pages","text":"

set brightness of screensaver and active-brightness:

dimmode~0~100 - (screen off)

dimmode~100~100 - (screen on with full brightness)

set current time:

time~22:26

set current date:

date~Di 24. Februar

set screensaver timeout (set time in sec~ max 65):

timeout~15 - timeout after 15 seconds

timeout~0 - disable screensaver

change the page type:

pageType~pageStartup

pageType~cardEntities

pageType~cardThermo

pageType~cardMedia

pageType~popupLight~Schreibtischlampe~light.schreibtischlampe

pageType~popupNotify

pageType~screensaver

"},{"location":"hmi-serial-protocol/#screensaver-page","title":"screensaver page","text":"Parameter Number Category Location Type Field Addional Information 0 instruction instruction weatherupdate 1 Main Icon Entity Definition type ignored 2 intNameEntity ignored 3 icon 4 iconColor 5 displayName ignored 6 optionalValue 7 First Forecast Icon Entity Definition type ignored 8 intNameEntity ignored 9 icon 10 iconColor 11 displayName 12 optionalValue 13 Second Forecast Icon Entity Definition type ignored 14 intNameEntity ignored 15 icon 16 iconColor 17 displayName 18 optionalValue 19 Third Forecast Icon Entity Definition type ignored 20 intNameEntity ignored 21 icon 22 iconColor 23 displayName 24 optionalValue 25 Fourth Forecast Icon Entity Definition type ignored 26 intNameEntity ignored 27 icon 28 iconColor 29 displayName 30 optionalValue 31 Alternative Layout Icon Entity Definition type ignored 32 intNameEntity ignored 33 icon 34 iconColor 35 displayName ignored 36 optionalValue

color~background~tTime~timeAMPM~tDate~tMainText~tForecast1~tForecast2~tForecast3~tForecast4~tForecast1Val~tForecast2Val~tForecast3Val~tForecast4Val~bar~tMainTextAlt2~tTimeAdd

Parameter Number Category Location Type Field Addional Information 0 instruction color 1 background 2 tTime 3 timeAMPM 4 tDate 5 tMainText 6 tForecast1 7 tForecast2 8 tForecast3 9 tForecast4 10 tForecast1Val 11 tForecast2Val 12 tForecast3Val 13 tForecast4Val 14 bar 15 tMainTextAlt2 16 tTimeAdd

notify~heading~text

statusUpdate~icon1~icon1Color~icon2~icon2~icon2color~icon1font~icon2font

"},{"location":"hmi-serial-protocol/#cardentities-page","title":"cardEntities Page","text":"

Structure (Category): entityUpd~title~[navigation]~[entity_information] Example with 4 Entities:

entityUpd~LightTest~button~navigate.prev~<~65535~~~button~navigate.next~>~65535~~~light~light.bed_light~A~17299~Bed Light~0~light~light.ceiling_lights~B~52231~Ceiling Lights~1~switch~switch.ac~C~17299~AC~0~switch~switch.decorative_lights~D~65222~Decorative Lights~1\n

Possible entities on cardEntities/cardGrid:

~light~light.entityName~1~17299~Light1~0

~shutter~cover.entityName~0~17299~Shutter2~iconUp|iconStop|iconDown

~delete~~~~~

~text~sensor.entityName~3~17299~Temperature~content

~button~button.entityName~3~17299~bt-name~bt-text

~switch~switch.entityName~4~17299~Switch1~0

~number~input_number.entityName~4~17299~Number123~value|min|max

~input_sel~input_select.entityName~3~17299~sel-name~sel-text

Number Category Location Type Field Addional Information 0 instruction instruction entityUpd 1 title title title title 2 Navigation Upper Left Icon Entity Definition type (ignored)\u00b9 3 intNameEntity 4 icon 5 iconColor 6 displayName ignored 7 optionalValue ignored 8 Upper Right Icon Entity Definition type (ignored)\u00b9 9 intNameEntity 10 icon 11 iconColor 12 displayName ignored 13 optionalValue ignored 14 Entities First Entity Entity Definition type 15 intNameEntity 16 icon 17 iconColor 18 displayName 19 optionalValue 20 Second Entity Entity Definition type 21 intNameEntity 22 icon 23 iconColor 24 displayName 25 optionalValue 26 Thrid Entity Entity Definition type 27 intNameEntity 28 icon 29 iconColor 30 displayName 31 optionalValue 32 Forth Entiry Entity Definition type 33 intNameEntity 34 icon 35 iconColor 36 displayName 37 optionalValue 38 Fifth Entiy (US Portrait\u00a0\u00a0\u00a0Version) Entity Definition type 39 intNameEntity 40 icon 41 iconColor 42 displayName 43 optionalValue 44 Sixth Entiy (US Portrait\u00a0\u00a0\u00a0Version) Entity Definition type 45 intNameEntity 46 icon 47 iconColor 48 displayName 49 optionalValue"},{"location":"hmi-serial-protocol/#cardgrid-page","title":"cardGrid Page","text":"

cardGrid is using the exact same messageformat like cardEntities does. The only difference is, it ignores the information supplied in optionalValue, because it isn't needed for cardGrid.

Parameter\u00a0\u00a0\u00a0Number Category Location Type Field Addional Information 0 instruction instruction entityUpd 1 title title title title 2 Navigation Upper Left Icon Entity Definition type (ignored)\u00b9 3 intNameEntity 4 icon 5 iconColor 6 displayName ignored 7 optionalValue ignored 8 Upper Right Icon Entity Definition type (ignored)\u00b9 9 intNameEntity 10 icon 11 iconColor 12 displayName ignored 13 optionalValue ignored 14 Entities First Entity Entity Definition type 15 intNameEntity 16 icon 17 iconColor 18 displayName 19 optionalValue ignored 20 Second Entity Entity Definition type 21 intNameEntity 22 icon 23 iconColor 24 displayName 25 optionalValue ignored 26 Thrid Entity Entity Definition type 27 intNameEntity 28 icon 29 iconColor 30 displayName 31 optionalValue ignored 32 Forth Entiry Entity Definition type 33 intNameEntity 34 icon 35 iconColor 36 displayName 37 optionalValue ignored 38 Fifth Entiy (US Portrait\u00a0\u00a0\u00a0Version) Entity Definition type 39 intNameEntity 40 icon 41 iconColor 42 displayName 43 optionalValue ignored 44 Sixth Entiy (US Portrait\u00a0\u00a0\u00a0Version) Entity Definition type 45 intNameEntity 46 icon 47 iconColor 48 displayName 49 optionalValue ignored"},{"location":"hmi-serial-protocol/#cardmedia","title":"cardMedia","text":"

Example without icons in bottom row: entityUpd~Kitchen~button~navigation.up~U~65535~~~delete~~~~~~media_player.kitchen~I'm a Hurricane~~Wellmess~~100~A~64704~B~media_pl~media_player.kitchen~C~17299~Kitchen~

Parameter\u00a0\u00a0\u00a0Number Category Location Type Field Addional Information 0 instruction instruction entityUpd 1 title title title title 2 Navigation Upper Left Icon Entity Definition type (ignored)\u00b9 3 intNameEntity 4 icon 5 iconColor 6 displayName ignored 7 optionalValue ignored 8 Upper Right Icon Entity Definition type (ignored)\u00b9 9 intNameEntity 10 icon 11 iconColor 12 displayName ignored 13 optionalValue ignored 14 cardMedia specific cardMedia specific intNameEntity 15 1st text row title 16 titleColor 17 2nd text row author 18 authorColor 19 slider volume 0-100 20 icon middle playPauseIcon 21 icon right side onOffBtn \"disable\" or color 22 icon left side iconShuffle \"disable\" or icon 23 Entities upper left corner media\u00a0\u00a0\u00a0icon Entity Definition type 24 intNameEntity 25 icon 26 iconColor 27 displayName only used for popups 28 optionalValue ignored 29 First Entity Entity Definition type 30 intNameEntity 31 icon 32 iconColor 33 displayName only used for popups 34 optionalValue ignored 35 Second Entity Entity Definition type 36 intNameEntity 37 icon 38 iconColor 39 displayName only used for popups 40 optionalValue ignored 41 Thrid Entity Entity Definition type 42 intNameEntity 43 icon 44 iconColor 45 displayName only used for popups 46 optionalValue ignored 47 Forth Entiry Entity Definition type 48 intNameEntity 49 icon 50 iconColor 51 displayName only used for popups 52 optionalValue ignored 53 Fifth Entiy Entity Definition type 54 intNameEntity 55 icon 56 iconColor 57 displayName only used for popups 58 optionalValue ignored"},{"location":"hmi-serial-protocol/#cardthermo","title":"cardThermo","text":"

Serial Protocol of cardThermo is about to change; table will be completed later

Parameter Number Location Type Field Addional Information 0 instruction entityUpd 1 title title title 2 Upper Left Icon Entity Definition type (ignored)\u00b9 3 intNameEntity 4 icon 5 iconColor 6 displayName ignored 7 optionalValue ignored 8 Upper Right Icon Entity Definition type (ignored)\u00b9 9 intNameEntity 10 icon 11 iconColor 12 displayName ignored 13 optionalValue ignored 14 intNameEntity 15 2nd text box currentTemp 16 target temperature dstTemp multiplied by 10 17 Text 4th Box Left Side status 18 Min Temp minTemp multiplied by 10 19 Max Temp maxTemp multiplied by 10 20 Temperature Steps tempStep multiplied by 10 21 bottom hvac_action 1 Hvac Action icon 22 iconColorActive 23 buttonState 24 intName 25 bottom hvac_action 2 Hvac Action icon 26 iconColorActive 27 buttonState 28 intName 29 bottom hvac_action 3 Hvac Action icon 30 iconColorActive 31 buttonState 32 intName 33 bottom hvac_action 4 Hvac Action icon 34 iconColorActive 35 buttonState 36 intName 37 bottom hvac_action 5 Hvac Action icon 38 iconColorActive 39 buttonState 40 intName 41 bottom hvac_action 6 Hvac Action icon 42 iconColorActive 43 buttonState 44 intName 45 bottom hvac_action 7 Hvac Action icon 46 iconColorActive 47 buttonState 48 intName 49 bottom hvac_action 8 Hvac Action icon 50 iconColorActive 51 buttonState 52 intName 53 Currently Label 1th Text Box tCurTempLbl 54 State Label 3th Text Box tStateLbl 55 tALbl deprecated; ignored 56 Temperature Unit (Celcius/Farhenheit) tCF 57 Second Destination Tempature (Heat/Cool) second temp ; multiplied by 10 58 additonal detail button to open another page btDetail \"1\" to hide"},{"location":"hmi-serial-protocol/#cardalarm","title":"cardAlarm","text":"Parameter Number Category Location Type Field Addional Information 0 instruction instruction entityUpd 1 title title title title 2 Navigation Upper Left Icon Entity Definition type (ignored)\u00b9 3 intNameEntity 4 icon 5 iconColor 6 displayName ignored 7 optionalValue ignored 8 Upper Right Icon Entity Definition type (ignored)\u00b9 9 intNameEntity 10 icon 11 iconColor 12 displayName ignored 13 optionalValue ignored 14 cardAlarm specific card intNameEntity intNameEntity 15 1st button right side displayName 16 intId 17 2nd button right side displayName 18 intId 19 3rd button right side displayName 20 intId 21 4th button right side displayName 22 intId 23 icon next to code display icon 24 iconColor 25 numpad numpadStatus \"disable\" or \"enable\" 26 flashing of icon next to code flashing status \"enable\" or \"disable\" 27 button bottom left corner icon 28 iconColor 29 intNameEntity"},{"location":"hmi-serial-protocol/#cardqr","title":"cardQR","text":"

Example: entityUpd~Guest Wifi~button~navigate.prev~<~65535~~~button~navigate.next~>~65535~~~WIFI:S:test_ssid;T:WPA;P:test_pw;;~text~iText.test_ssid~\ufffd\ufffd\ufffd~17299~Name~test_ssid~text~iText.test_pw~\ufffd\ufffd\ufffd~17299~Password~test_pw

Parameter\u00a0\u00a0\u00a0Number Category Location Type Field Addional Information 0 instruction instruction entityUpd 1 title title title intNameEntity 2 Navigation Upper Left Icon Entity Definition type (ignored)\u00b9 3 intNameEntity 4 icon 5 iconColor 6 displayName ignored 7 optionalValue ignored 8 Upper Right Icon Entity Definition type (ignored)\u00b9 9 intNameEntity 10 icon 11 iconColor 12 displayName ignored 13 optionalValue ignored 14 cardQR specific qrcode text 15 Entities 1st Entity Entity Definition type 16 intNameEntity 17 icon 18 iconColor 19 displayName 20 optionalValue 21 2nd Entity Entity Definition type 22 intNameEntity 23 icon 24 iconColor 25 displayName 26 optionalValue"},{"location":"hmi-serial-protocol/#cardpower","title":"cardPower","text":"

entityUpd~PowerTest~x~navUp~A~65535~~~delete~~~~~~text~sensor.power_consumption~B~17299~Power consumption~100W~1~text~sensor.power_consumption~C~17299~Power consumption~100W~1~text~sensor.today_energy~D~17299~Total energy 1~5836.0kWh~0~delete~~~~~~0~text~sensor.today_energy~E~17299~Total energy 1~5836.0kWh~-30~delete~~~~~~0~text~sensor.today_energy~F~65504~Total energy 1~5836.0kWh~90~text~sensor.today_energy~G~17299~Total energy 1~5836.0kWh~10

Parameter Number Location Type Field Addional Information 0 instruction entityUpd 1 title title title 2 Upper Left Icon Entity Definition type (ignored)\u00b9 3 intNameEntity 4 icon 5 iconColor 6 displayName ignored 7 optionalValue ignored 8 Upper Right Icon Entity Definition type (ignored)\u00b9 9 intNameEntity 10 icon 11 iconColor 12 displayName ignored 13 optionalValue ignored 14 Home Icon / Value below Home Icon Entity Definition type ignored 15 intNameEntity ignored 16 icon 17 iconColor 18 displayName 19 optionalValue 20 speed ignored 21 Value above Home Icon Entity Definition type ignored 22 intNameEntity ignored 23 icon ignored 24 iconColor ignored 25 displayName ignored 26 optionalValue 27 speed ignored 28 1st Item Upper Left Entity Definition type ignored 29 intNameEntity ignored 30 icon 31 iconColor 32 displayName 33 optionalValue 34 speed numbers (between -120 and 120) 35 2nd Item Middle Left Entity Definition type ignored 36 intNameEntity ignored 37 icon 38 iconColor 39 displayName 40 optionalValue 41 speed numbers (between -120 and 120) 42 3rd Item Bottom Left Entity Definition type ignored 43 intNameEntity ignored 44 icon 45 iconColor 46 displayName 47 optionalValue 48 speed numbers (between -120 and 120) 49 4th Item Upper Right Entity Definition type ignored 50 intNameEntity ignored 51 icon 52 iconColor 53 displayName 54 optionalValue 55 speed numbers (between -120 and 120) 56 5th Item Middle Right Entity Definition type ignored 57 intNameEntity ignored 58 icon 59 iconColor 60 displayName 61 optionalValue 62 speed numbers (between -120 and 120) 63 6th Item Bottom Right Entity Definition type ignored 64 intNameEntity ignored 65 icon 66 iconColor 67 displayName 68 optionalValue 69 speed numbers (between -120 and 120)"},{"location":"hmi-serial-protocol/#cardchart-page","title":"cardChart Page","text":"

entityUpd~heading~navigation~color~yAxisLabel~yAxisTick:[yAxisTick]*[~value[:xAxisLabel]?]*

entityUpd~Chart Demo~~button~navigate.prev~<~65535~~~button~navigate.next~>~65535~~~~6666~Gas [kWh]~20:40:60:80:100~10~7^2:00~7~6^4:00~6~7^6:00~0~7^8:00~5~1^10:00~1~10^12:00~5~6^14:00~8

"},{"location":"hmi-serial-protocol/#popuplight-page","title":"popupLight Page","text":"

entityUpdateDetail~entityName~*ignored*~*iconColor*~*buttonState*~*sliderBrightnessPos*~*sliderColorTempPos*~*colorMode*~*color_translation*~*color_temp_translation*~*brightness_translation*

entityUpdateDetail~1~17299~1~100~78~enable

entityUpdateDetail~1~17299~1~100~disable

"},{"location":"hmi-serial-protocol/#popupshutter-page","title":"popupShutter Page","text":"

entityUpdateDetail~entityName~*sliderPos*~2ndrow~textPosition~icon1~iconUp~iconStop~iconDown~iconUpStatus~iconStopStatus~iconDownStatus~textTilt~iconTiltLeft~iconTiltStop~iconTiltRight~iconTiltLeftStatus~iconTiltStopStatus~iconTiltLeftStatus~tiltPos

entityUpdateDetail~1~77

"},{"location":"hmi-serial-protocol/#popupnotify-page","title":"popupNotify Page","text":"

entityUpdateDetail~*internalName*~*tHeading*~*tHeadingColor*~*b1*~*tB1Color*~*b2*~*tB2Color*~*tText*~*tTextColor*~*sleepTimeout*~*font*~*alt_icon*~*altIconColor*

exitPopup

"},{"location":"hmi-serial-protocol/#popupthermo-page","title":"popupThermo Page","text":"

entityUpdateDetail~{entity_id}~{icon_id}~{icon_color}~{heading}~{mode}~mode1~mode1?mode2?mode3~{heading}~{mode}~mode1~mode1?mode2?mode3~{heading}~{mode}~mode1~mode1?mode2?mode3~

"},{"location":"hmi-serial-protocol/#popupinsel-page-input_select-detail-page","title":"popupInSel Page (input_select detail page)","text":"

entityUpdateDetail2~*entity_id*~~*icon_color*~*input_sel*~*state*~*options*

options are ? seperated

"},{"location":"hmi-serial-protocol/#popuptimer","title":"popupTimer","text":"

editable is 0 or 1

action fields are in the answer on the button press

in case action is empty the button will be hidden

entityUpdateDetail~{entity_id}~~{icon_color}~{entity_id}~{min_remaining}~{sec_remaining}~{editable}~{action1}~{action2}~{action3}~{label1}~{label2}~{label3}

"},{"location":"hmi-serial-protocol/#messages-from-nextion-display","title":"Messages from Nextion Display","text":"

event,buttonPress2,pageName,bNext

event,buttonPress2,pageName,bPrev

event,buttonPress2,pageName,bExit,number_of_taps

event,buttonPress2,pageName,sleepReached

"},{"location":"hmi-serial-protocol/#startup-page","title":"startup page","text":"

event,startup,version,model

"},{"location":"hmi-serial-protocol/#screensaver-page_1","title":"screensaver page","text":"

event,buttonPress2,screensaver,exit - Touch Event on Screensaver

event,screensaverOpen - Screensaver has opened

"},{"location":"hmi-serial-protocol/#cardentities-page_1","title":"cardEntities Page","text":"

event,*eventName*,*entityName*,*actionName*,*optionalValue*

event,buttonPress2,internalNameEntity,up

event,buttonPress2,internalNameEntity,down

event,buttonPress2,internalNameEntity,stop

event,buttonPress2,internalNameEntity,OnOff,1

event,buttonPress2,internalNameEntity,button

"},{"location":"hmi-serial-protocol/#popuplight-page_1","title":"popupLight Page","text":"

event,pageOpenDetail,popupLight,internalNameEntity

event,buttonPress2,internalNameEntity,OnOff,1

event,buttonPress2,internalNameEntity,brightnessSlider,50

event,buttonPress2,internalNameEntity,colorTempSlider,50

event,buttonPress2,internalNameEntity,colorWheel,x|y|wh

"},{"location":"hmi-serial-protocol/#popupshutter-page_1","title":"popupShutter Page","text":"

event,pageOpenDetail,popupShutter,internalNameEntity

event,buttonPress2,internalNameEntity,positionSlider,50

"},{"location":"hmi-serial-protocol/#popupnotify-page_1","title":"popupNotify Page","text":"

event,buttonPress2,*internalName*,notifyAction,yes

event,buttonPress2,*internalName*,notifyAction,no

"},{"location":"hmi-serial-protocol/#cardthermo-page","title":"cardThermo Page","text":"

event,buttonPress2,*entityName*,tempUpd,*temperature*

event,buttonPress2,*entityName*,hvac_action,*hvac_action*

"},{"location":"hmi-serial-protocol/#cardmedia-page","title":"cardMedia Page","text":"

event,buttonPress2,internalNameEntity,media-back

event,buttonPress2,internalNameEntity,media-pause

event,buttonPress2,internalNameEntity,media-next

event,buttonPress2,internalNameEntity,volumeSlider,75

"},{"location":"hmi-serial-protocol/#cardalarm-page","title":"cardAlarm Page","text":"

event,buttonPress2,internalNameEntity,actionName,code

"},{"location":"hmi-serial-protocol/#custom-protocol","title":"Custom Protocol","text":"
55 BB [payload length] [payload length] [payload] [crc] [crc]\n

Payload length contains the number of bytes of the payload.

CRC is \"CRC-16 (MODBUS) Big Endian\" calculated over the whole message

This protocol does not try to implement broken JSON Commands with a specified type (lol). Instead the commands are plain text commands with parameters.

"},{"location":"hmi-serial-protocol/#example-for-valid-message","title":"Example for valid Message","text":"

This message has to be generated for the Message \"1337\" (1337 is not a valid command~ this is just an example)

55 BB  04 00  31 33 33 37  5F 5B\n
"},{"location":"iobroker-install/","title":"Prepare ioBroker","text":""},{"location":"iobroker-install/#installation-iobroker","title":"Installation - ioBroker","text":"

The Backend for ioBroker is maintained by britzelpuf and armilar

See the wiki for documentation around setting lovelace-ui up with ioBroker

Wiki

Also see the Readme in the ioBroker Folder. iobroker ReadMe

"},{"location":"notifications/","title":"Notifications","text":""},{"location":"notifications/#sending-notifications-to-the-panel","title":"Sending Notifications to the Panel","text":"

There are two notification types, that can be triggered by sending a command over mqtt to the panel here are examples for homeassistant scripts:

"},{"location":"notifications/#seperate-page","title":"Seperate Page","text":"

This is the notification used by the backend for updates, opening it requires to the following commands to the CustomSend Topic:

pageType popupNotify

entityUpdateDetail~internalName~heading~headingColor~button1text~button1color~button2text~tB2Color~notificationText~textColor~sleepTimeout~fontIdText

Alternative Layout with Icon:

entityUpdateDetail~internalName~heading~headingColor~button1text~button1color~button2text~tB2Color~notificationText~textColor~sleepTimeout~fontIdText~icon~iconColor

fontIdText is the font used by the notification text Possible values are 0-5:

Font 0 - Default - Size 24 (No Icons, Support for various special chars from different langs)\nFont 1 - Size 32 (Icons and limited chars)\nFont 2 - Size 32 (No Icons, Support for various special chars from different langs)\nFont 3 - Size 48 (Icons and limited chars)\nFont 4 - Size 80 (Icons and limited chars)\nFont 5 - Size 128 (ascii only)\n

You need to use the acual char for the icon instead of the icon name which is used in the configuration. You can get the char of the icon from the cheatsheet.

https://docs.nspanel.pky.eu/icon-cheatsheet.html

It is possible to exit from the page by sending exitPopup

If you want to add newlines to your message add this string for the newline {{'\\r\\n'}}

Send Message to the Panel combined with a buzzer sound:

nspanel_popup_notification:\n  alias: Popup Notification\n  sequence:\n  - service: mqtt.publish\n    data:\n      topic: cmnd/tasmota_NsPanelTerrasse/Backlog\n      payload: CustomSend pageType~popupNotify; CustomSend entityUpdateDetail~id~{{\n        title }}~65535~~~~~{{ message }}~65535~{{ timeout }}; Buzzer 2,2,2\n  mode: single\n  icon: mdi:message-badge\n

Send Message to the Panel:

nspanel_popup_notification:\n  alias: Popup Notification\n  sequence:\n  - service: mqtt.publish\n    data:\n      topic: cmnd/tasmota_NsPanelTerrasse/Backlog\n      payload: CustomSend pageType~popupNotify; CustomSend entityUpdateDetail~id~{{\n        title }}~65535~~~~~{{ message }}~65535~{{ timeout }}\n  mode: single\n  icon: mdi:message-badge\n
"},{"location":"notifications/#notification-on-screensaver","title":"Notification on screensaver","text":"

The screensaver can display Notifications by sending this command to the CustomSend topic: notify~heading~text

Send Message to the Screensaver combined with a buzzer sound:

nspanel_screensaver_notification:\n  alias: Screensaver Notification\n  sequence:\n  - service: mqtt.publish\n    data:\n      topic: cmnd/tasmota_NsPanelTerrasse/Backlog\n      payload: CustomSend notify~{{ heading }}~{{ message }}; Buzzer 2,2,2\n  mode: single\n  icon: mdi:message-badge\n

Send Message to the Screensaver:

nspanel_screensaver_notification:\n  alias: Screensaver Notification\n  sequence:\n  - service: mqtt.publish\n    data:\n      topic: cmnd/tasmota_NsPanelTerrasse/Backlog\n      payload: CustomSend notify~{{ heading }}~{{ message }}\n  mode: single\n  icon: mdi:message-badge\n
"},{"location":"notifications/#buzzer","title":"Buzzer","text":"

See Tasmota Buzzer for commands.

It might be necessary to enable the buzzer with:

BuzzerPWM 1\n
"},{"location":"notifications/#color-picker","title":"Color Picker","text":"

Decimal RGB565: 0

"},{"location":"phys-btn/","title":"Physical Buttons","text":""},{"location":"phys-btn/#change-behaviour-of-hardware-buttons","title":"Change behaviour of hardware buttons","text":""},{"location":"phys-btn/#tasmota-rules","title":"Tasmota Rules","text":"

You can configure the buttons to mimic an UI element on the screen by configuring tasmota rules.

The following rule will change the behaviour of the two buttons to do page navigation.

Rule2 on Button1#state do Publish tele/%topic%/RESULT {\"CustomRecv\":\"event,buttonPress2,navPrev,button\"} endon on Button2#state do Publish tele/%topic%/RESULT {\"CustomRecv\":\"event,buttonPress2,navNext,button\"} endon\n\nRule2 1\n
"},{"location":"phys-btn/#decouple-buttons-from-controlling-power-outputs","title":"Decouple buttons from controlling power outputs","text":"

If you do not want your NSPanel physical buttons to trigger the relays and prefer to have them as software configurable buttons, open the Tasmota console of your NSPanel and enter the following:

SetOption73 1

Your relays will now appear as switches in HomeAssistant and you can control your buttons by using automations:

You may reverse this change by entering the following in the Tasmota console of your NSPanel:

SetOption73 0

Please note: Doing this will mean that if HomeAssistant is not working for any reason your buttons will not function correctly.

"},{"location":"prepare_ha/","title":"Prepare Home Assistant","text":""},{"location":"prepare_ha/#setup-home-assistant","title":"Setup Home Assistant","text":""},{"location":"prepare_ha/#installing-appdaemon","title":"Installing AppDaemon","text":"

The backend application for HomeAssistant is written in a python for AppDaemon. This means it requires a working and running installation of AppDaemon.

The easiest way to install it is through Home Assistant's Supervisor Add-on Store, it will be automaticly connected to your Home Assistant Instance.

Instructions for users of HomeAssistant Core installed through docker containers. In case you have a homeassistant setup using docker cotainers and the Add-on Store is not available to you, you can follow this guide for setting up AppDaemon. https://appdaemon.readthedocs.io/en/latest/DOCKER_TUTORIAL.html Please also pay attention to the correct volume mount for the conf folder of appdaemon, that has to point to the appdaemon folder within your homeassistant config folder. Here is an example docker compose file for homeassistant and appdaemon:
version: \"3.5\"\nservices:\n  homeassistant:\n    image: ghcr.io/home-assistant/home-assistant:stable\n    container_name: homeassistant\n    network_mode: host\n    volumes:\n      - ./docker-data/homeassistant/:/config\n      - /etc/localtime:/etc/localtime:ro\n    environment:\n      - TZ=Europe/Berlin\n    privileged: true\n    restart: unless-stopped\n\n  appdaemon:\n    container_name: appdaemon\n    image: acockburn/appdaemon:4.2.3\n    environment:\n      - HA_URL=http://your-homeassistant-url:8123\n      - TOKEN=\"xxxxxx\"\n    volumes:\n      - /etc/localtime:/etc/localtime:ro\n      - ./docker-data/homeassistant/appdaemon:/conf\n    depends_on:\n      - homeassistant\n    restart: unless-stopped\n
"},{"location":"prepare_ha/#add-babel-package-to-appdaemon-container-optional","title":"Add babel package to AppDaemon Container (Optional)","text":"

For localisation (date in your local language) you need to add the python package babel to your AppDaemon Installation.

"},{"location":"prepare_ha/#installing-studio-code-server","title":"Installing Studio Code Server","text":"

You will need a way to edit the apps.yaml config file in the Appdaemon folder. Install Studio Code Server from Home Assistant's Supervisor Add-on Store to easily edit configuration Files on your HomeAssistant Instance.

"},{"location":"prepare_ha/#installing-homeassistant-community-store","title":"Installing HomeAssistant Community Store","text":"

HACS is the Home Assistant Community Store and allows for community integrations and automations to be updated easily from the Home Assistant web user interface. You will be notified of updates, and they can be installed by a click on a button.

"},{"location":"prepare_ha/#installing-lovelace-appdaemon-backend-application","title":"Installing Lovelace AppDaemon Backend Application","text":"

To install Lovelace UI Backend App with HACS, you will need to make sure that you enabled AppDaemon automations in HACS, as these are not enabled by default:

  1. Click on Configuration on the left menu bar in Home Assistant Web UI
  2. Select Devices & Services
  3. Select Integrations
  4. Find HACS and click on Configure
  5. In the window that opens, make sure that Enable AppDaemon apps discovery & tracking is checked, or check it and click Submit
  6. If you just enabled this (or just installed HACS), you might have to wait a few minutes as all repositories are being fetched; you might hit a GitHub rate limit, which might then require you to wait a few hours for HACS to be fully configured. In this case, you won't be able to proceed to the next steps until HACS is ready.

Now, to install NSPanel Lovelace UI Backend with HACS, follow these steps:

  1. Click on HACS on the left menu bar in Home Assistant Web UI
  2. Click on Automations in the right panel
  3. Click on Explore & download repositories in the bottom right corner
  4. Search for NSPanel, and click on NSPanel Lovelace UI Backend in the list that appears
  5. In the bottom right corner of the panel that appears, click on Download this repository with HACS
  6. A confirmation panel will appear, click on Download, and wait for HACS to proceed with the download
  7. The Backend Application is now installed, and HACS will inform you when updates are available
"},{"location":"prepare_ha/#workaround-for-homeassistant-202404","title":"Workaround for HomeAssistant 2024.04","text":"

AppDaemon is using the old REST API that until AppDaemon moved on the the websocket API this woraround is needed to get weather forecast data from homeassistant. (https://github.com/AppDaemon/appdaemon/issues/1837)

To get the forecast data in appdaemon, there is a script needed in homeassistant's script.yaml:

"},{"location":"prepare_nspanel/","title":"Prepare NsPanel","text":""},{"location":"prepare_nspanel/#flash-tasmota-to-your-nspanel","title":"Flash Tasmota to your NSPanel","text":"

You need to connect to your nspanel via serial and flash tasmota tasmota32-nspanel.bin to your NSPanel. You can use the Tasmota Web Installer to do so. Tasmota Web Installer

Checkout Blakadders Template Repo for more information on flashing, do not use the autoexec.be from this page. NSPanel Page of the Tasmota Template Repository

If you prefer EspHome over Tasmota, you can use this thrid party esphome component, which is replacing tasmota and the berry driver of this project. ESPHome component

"},{"location":"prepare_nspanel/#configure-tasmota-template-for-nspanel","title":"Configure Tasmota Template for NSPanel","text":"

Configure the NSPanel template for Tasmota. (Go to Configuration and Configure Other and paste the template there, make sure to tick the activate checkbox)

You can use the following template or copy the one on the Tasmota Template Repo Site.

{\"NAME\":\"NSPanel\",\"GPIO\":[0,0,0,0,3872,0,0,0,0,0,32,0,0,0,0,225,0,480,224,1,0,0,0,33,0,0,0,0,0,0,0,0,0,0,4736,0],\"FLAG\":0,\"BASE\":1,\"CMND\":\"ADCParam 2,11200,10000,3950 | Sleep 0 | BuzzerPWM 1\"}

After a reboot of tasmota your screen will light up with the stock display firmware.

"},{"location":"prepare_nspanel/#upload-berry-driver-to-tasmota","title":"Upload Berry Driver to Tasmota","text":"

Go to Consoles > Console in Tasmota and execute the following command:

Backlog UrlFetch https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be; SetOption151 0;Restart 1\n

This will download the autoexec.be file from the repository and restart tasmota.

Note: The command is also disabling matter to free up memory, as it's most likely not used by any homeassistant users anyway. (Matter could cause memory issues during flashing of the Nextion Screen, but you can still enable it if you need to.)

"},{"location":"prepare_nspanel/#flash-firmware-to-nextion-screen","title":"Flash Firmware to Nextion Screen","text":"

Due the limitations of Berry, it's not possible to download the tft file directly from github, so I'm also renting a small server where you can download the file via HTTP.

Use the one following commands in the tasmota console (not berry console) to flash the latest release from this repository:

EU Version: FlashNextion http://nspanel.pky.eu/lui-release.tft

US Version Portrait: FlashNextion http://nspanel.pky.eu/lui-us-p-release.tft

US Version Landscape: FlashNextion http://nspanel.pky.eu/lui-us-l-release.tft

After sending the command, the screen should show a progress bar. The flashing progress takes around 5 minutes.

Note: For the US Version Users - keep in mind that you need to add the model config option to your apps.yaml later, more details on config overview page

Alternatively you can use your own webserver or the one build into HomeAssistant: Upload the nspanel.tft from the lastest release to a Webserver (for example www folder of Home Assistant) and execute the following command in Tasmota Console. (Development Version: [tft file from HMI folder](HMI/nspanel.tft)) **Webserver must be HTTP, HTTPS is not supported, due to limitations of berry lang on tasmota** `FlashNextion http://ip-address-of-your-homeassistant:8123/local/nspanel.tft`"},{"location":"prepare_nspanel_ioBroker/","title":"Prepare NsPanel","text":""},{"location":"prepare_nspanel_ioBroker/#flash-tasmota-to-your-nspanel","title":"Flash Tasmota to your NSPanel","text":"

You need to connect to your nspanel via serial and flash tasmota tasmota32-nspanel.bin to your NSPanel. You can use the Tasmota Web Installer to do so. Tasmota Web Installer

Checkout Blakadders Template Repo for more information on flashing, do not use the autoexec.be from this page. NSPanel Page of the Tasmota Template Repository

If you prefer EspHome over Tasmota, you can use this thrid party esphome component, which is replacing tasmota and the berry driver of this project. ESPHome component

"},{"location":"prepare_nspanel_ioBroker/#configure-tasmota-template-for-nspanel","title":"Configure Tasmota Template for NSPanel","text":"

Configure the NSPanel template for Tasmota. (Go to Configuration and Configure Other and paste the template there, make sure to tick the activate checkbox)

You can use the following template or copy the one on the Tasmota Template Repo Site.

{\"NAME\":\"NSPanel\",\"GPIO\":[0,0,0,0,3872,0,0,0,0,0,32,0,0,0,0,225,0,480,224,1,0,0,0,33,0,0,0,0,0,0,0,0,0,0,4736,0],\"FLAG\":0,\"BASE\":1,\"CMND\":\"ADCParam 2,11200,10000,3950 | Sleep 0 | BuzzerPWM 1\"}

After a reboot of tasmota your screen will light up with the stock display firmware.

"},{"location":"prepare_nspanel_ioBroker/#upload-berry-driver-to-tasmota","title":"Upload Berry Driver to Tasmota","text":"

Go to Consoles > Console in Tasmota and execute the following command:

Backlog UrlFetch https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be; Restart 1\n
"},{"location":"prepare_nspanel_ioBroker/#flash-firmware-to-nextion-screen","title":"Flash Firmware to Nextion Screen","text":"

Due the limitations of Berry, it's not possible to download the tft file directly from github, so I'm also renting a small server where you can download the file via HTTP.

Use the one following commands to flash the latest release from this repository, just execute the following Command in Tasmota:

EU Version: FlashNextion http://nspanel.pky.eu/lui-release.tft

US Version Portrait: FlashNextion http://nspanel.pky.eu/lui-us-p-release.tft

US Version Landscape: FlashNextion http://nspanel.pky.eu/lui-us-l-release.tft

Alternatively you can use your own webserver: Upload the nspanel.tft from the lastest release to a Webserver and execute the following command in Tasmota Console. **Webserver must be HTTP, HTTPS is not supported, due to limitations of berry lang on tasmota** `FlashNextion http://ip-address-of-your-webserver:8123/local/nspanel.tft`"},{"location":"subpages/","title":"Subpages","text":""},{"location":"subpages/#subpages","title":"Subpages","text":"

You can configure entities with with the prefix navigate, that are navigating to cards, in case it's hidden card, the navigation items will change and the arrow is bringing you back to the previous page.

          - entity: navigate.testKey\n

will allow you to navigate to a cardGrid page with the configured key testKey

    hiddenCards:\n      - type: cardGrid\n        title: Exmaple Grid\n        entities:\n          - entity: light.test_item\n        key: testKey\n
"},{"location":"subpages/#override-status-of-navigation-items","title":"Override Status of Navigation Items","text":"

You can override the status of navigation items, to make them look like different entities.

          - entity: navigate.testKey\n            status: climate.test\n
"},{"location":"subpages/#override-navigation-items-itself","title":"Override Navigation Items itself","text":"
    cards:\n      - type: cardGrid\n        title: Wohnzimmer\n        navItem1:\n          entity: light.bad_lights\n        navItem2:\n          entity: light.bad_lights\n        entities:\n

This can be used to add an home button to your subpages:

    cards:\n      - type: cardGrid\n        title: Home\n        key: home\n        entities:\n          - entity: light.bad\n\n    hiddenCards:\n      - type: cardGrid\n        title: Wohnzimmer\n        navItem2:\n          entity: navigate.home\n          icon: mdi:home\n        entities:\n          - entity: light.kitchen\n
"}]} \ No newline at end of file +{"config":{"lang":["en"],"separator":"[\\s\\-]+","pipeline":["stopWordFilter"]},"docs":[{"location":"","title":"Overview","text":""},{"location":"#overview","title":"Overview","text":"

If you like this project consider buying me a pizza \ud83c\udf55

NsPanel Lovelace UI is a Firmware for the nextion screen inside of NSPanel in the Design of HomeAssistant's Lovelace UI Design.

EU Model and US Model supported (in portrait and landscape orientation)

Content of the screen is controlled by a AppDaemon Python Script installed on your HomeAssistant Instance.

Or an TypeScript on your ioBroker Instance in case you are an ioBroker User.

NsPanel needs to be flashed with Tasmota (or with the 3rd Party ESPHome Component from @sairon)

"},{"location":"#features","title":"Features","text":"

It works with Tasmota and MQTT. To control the panel and update it with content from HomeAssistant there is an AppDaemon App.

See the following picture to get an idea of the look of this firmware for NSPanel.

Some (not all) screenshots from the US Portrait Version:

"},{"location":"#requirements","title":"Requirements","text":""},{"location":"card-alarm/","title":"Alarm Card","text":""},{"location":"card-alarm/#alarm-card","title":"Alarm Card","text":"
    cards:\n      - type: cardAlarm\n        title: Alarm Test 1\n        entity: alarm_control_panel.alarmo\n

List of supported config keys of this card:

key optional type default description type False string None Type of the card title True string None Title of the Page entity False string None contains the entity of the current card key True string None Used by navigate items alarmControl True complex None overwrites the action executed on pressing the left bottom icon, by default this button is used to show a list of open sensors on a failed attempt to arm. supportedModes True list None Supply list of arm modes if you want to limit the modes on the card. Example ['arm_away', 'arm_night']"},{"location":"card-climate/","title":"Climate/Thermo Card","text":""},{"location":"card-climate/#climatethermo-card","title":"Climate/Thermo Card","text":"
    cards:\n      - type: cardThermo\n        title: HeatPump\n        entity: climate.heatpump\n      - type: cardThermo\n        title: HvaC\n        entity: climate.hvac\n      - type: cardThermo\n        title: ecobee\n        entity: climate.ecobee\n

List of supported config keys of this card:

key optional type default description type False string None Type of the card entity False string None contains the entitiy of this card title True string None Title of the Page temperatureUnit True string celsius set this to fahrenheit to change the temperatureUnit on the page key True string None Used by navigate items in combination with the type (cardEntities_key) supportedModes True list None Supply list of heat actions if you want to limit the actions on the card. Example ['heat', 'off']"},{"location":"card-entities/","title":"Entities Card","text":""},{"location":"card-entities/#entities-page","title":"Entities Page","text":"
    cards:\n      - type: cardEntities\n        title: Test Entities Card\n        entities:\n          - entity: light.bed_light\n          - entity: switch.decorative_lights\n          - entity: cover.hall_window\n          - entity: sensor.outside_temperature\n

List of supported config keys of this card:

key optional type default description type False string None Type of the card entities False complex None contains a list of entities of this card title True string None Title of the Page key True string None Used by navigate items in combination with the type (cardEntities_key)

List of supported entitiy types for this page:

"},{"location":"card-grid/","title":"Grid Card","text":""},{"location":"card-grid/#grid-page","title":"Grid Page","text":"
    cards:\n      - type: cardGrid\n        title: Test Grid Card\n        entities:\n          - entity: light.bed_light\n          - entity: switch.decorative_lights\n          - entity: sensor.outside_temperature\n            name: Outside Temp\n          - entity: sensor.carbon_monoxide\n          - entity: light.entrance_color_white_lights\n            name: Entrance\n          - entity: light.office_rgbw_lights\n            name: Office RGBW\n            icon: mdi:office-building\n

List of supported config keys of this card:

key optional type default description type False string None Type of the card entities False complex None contains a list of entities of this card title True string None Title of the Page key True string None Used by navigate items in combination with the type (cardEntities_key)

List of supported entitiy types for this page:

"},{"location":"card-media/","title":"Media Card","text":""},{"location":"card-media/#media-card","title":"Media Card","text":"
    cards:\n      - type: cardMedia\n        entity: media_player.spotify\n

List of supported config keys of this card:

key optional type default description type False string None Type of the card title True string None Title of the Page entity False string None contains the entity of the current card entities False complex None contains a list of entities shown in the bottom row, supports all entities supported by cardGrid key True string None Used by navigate items Example with configured Entities
      - type: cardMedia\n        title: Kitchen\n        entity: media_player.kitchen\n        entities:\n          - entity: light.bed_light\n          - entity: light.ceiling_lights\n          - entity: light.entrance_color_white_lights\n          - entity: light.kitchen_lights\n          - entity: light.living_room_rgbww_lights\n
Example with action on upper left media icon
      - type: cardMedia\n        title: Kitchen\n        entity: input_select.test123\n        status: media_player.kitchen\n
Example with moved spaker selection The icon for speaker selection is automatically appended to the end of the list and can be moved with entities in the list. With 6 entities it is possible to remove it entirely.
      - type: cardMedia\n        title: Kitchen\n        entity: media_player.kitchen\n        entities:\n          - entity: delete\n          - entity: delete\n
"},{"location":"card-power/","title":"Power Card","text":""},{"location":"card-power/#power-card-v39-and-higher","title":"Power Card (v3.9 and higher)","text":"
    cards:\n      - type: cardPower\n        title: Power Test\n        entities:\n          - entity: sensor.power_consumption\n            icon: mdi:home\n          - entity: delete\n          - entity: sensor.today_energy\n            icon: mdi:car\n            speed: -20\n          - entity: delete\n          - entity: sensor.today_energy\n            icon: mdi:battery\n            speed: 20\n          - entity: delete\n          - entity: sensor.today_energy\n            icon: mdi:solar-panel\n            color: [255, 255, 0]\n            speed: 30\n          - entity: sensor.today_energy\n            speed: -40\n            icon: mdi:help\n

The first two entities are shown in the middle of the card, all other entities are used around it. Any entity overrides (e.g. icon, color) in the first entity apply to the middle of the card.

List of supported config keys of this card:

key optional type default description type False string None Type of the card entities False complex None contains entities of the card title True string None Title of the Page cooldown True float None Rate Limit for Entity Updates to the card in Seconds (cooldown: 0.5) key True string None Used by navigate items

List of supported entitiy types for this page:

N.B. Negative values will likely be truncated and not display gracefully. For this reason, when measuring energy you should use the same inputs as you use on the Home Assistant Energy Dashboard (i.e. separate grid import and grid export) and similarly when measuring power.

Some details about speed:

Speed expects an integer input between -100 and 100.

It is possible to calculate the speed through a Home Assistant template, this allows to calculate the speed in relation to other data in Home Assistant.

This template will calculate a speed setting based on the amount of power drawn on a device as a fraction of the total power usage.

            speed: >-\n              {% set entity_power = states('sensor.appliance_water_heater_power') |float | round(3)%}\n              {% set total_power = states('sensor.ams_power_active') | float | round(3) %}\n              {% set entity_usage = (entity_power / total_power * 100) | float %}\n              {{ (entity_usage | round()) * -1 }}\n
It provides the number as a negative integer, making the dot move from the middle of the card toward the entity. If you want the dot to move toward from the middle of the card, just skip inverting it at the end of the template like this:
              {{ (entity_usage | round()) }}\n
"},{"location":"card-qr/","title":"Wifi/QR Card","text":""},{"location":"card-qr/#wifi-qr-card","title":"WiFi / QR Card","text":"
    cards:\n      - type: cardQR\n        title: Guest Wifi\n        qrCode: \"WIFI:S:test_ssid;T:WPA;P:test_pw;;\"\n        entities:\n          - entity: iText.test_ssid\n            name: Name\n            icon: mdi:wifi\n          - entity: iText.test_pw\n            name: Password\n            icon: mdi:key\n

List of supported config keys of this card:

key optional type default description type False string None Type of the card entities False complex None contains entities of the card, only valid on cardEntities and cardGrid and cardQR title True string None Title of the Page key True string None Used by navigate items qrCode False string None Value of the qrCode

List of supported entitiy types for this page:

The qrCode value is evaluated as a homeassistant Template, so it is possible to get values from HomeAssistant within the qrCode.

\"WIFI:S:{{states('input_text.test_ssid')}};T:WPA;P:{{states('input_text.test_pw')}};;\"

"},{"location":"card-unlock/","title":"Unlock Card","text":""},{"location":"card-unlock/#unlock-card-v40-and-higher","title":"Unlock Card (v4.0 and higher)","text":"

Can be used to navigate to create pin locked navigation to a hidden card.

    cards:\n      - type: cardUnlock\n        pin: 1234\n        title: Admin Page\n        destination: navigate.adminpage\n    hiddenCards:\n      - type: cardGrid\n        title: Admin Page\n        key: adminpage\n        entities:\n          - entity: light.schreibtischlampe\n

List of supported config keys of this card:

key optional type default description type False string None Type of the card title True string None Title of the Page destination False string None contains the navigation entity this card should navigate to on unlock pin False string 3830 pin to unlock key True string None Used by navigate items"},{"location":"config-overview/","title":"Overview","text":""},{"location":"config-overview/#configuration","title":"Configuration","text":"

To confiure your NSPanel to your needs, you need to edit the apps.yaml inside of your Appdaemon config folder and add card and entities you want to display on the screen.

If you've sucessfully set up mqtt, you should already have a configuration looking like this:

---\nnspanel-1:\n  module: nspanel-lovelace-ui\n  class: NsPanelLovelaceUIManager\n  config:\n    panelRecvTopic: \"tele/tasmota_your_mqtt_topic/RESULT\"\n    panelSendTopic: \"cmnd/tasmota_your_mqtt_topic/CustomSend\"\n    model: eu\n

You can continue from this point adding configuration for the weather forcecast on the screensaver, configuring a schedule for the brightness of the screensaver and your first cards.

---\nnspanel-1:\n  module: nspanel-lovelace-ui\n  class: NsPanelLovelaceUIManager\n  config:\n    panelRecvTopic: \"tele/tasmota_your_mqtt_topic/RESULT\"\n    panelSendTopic: \"cmnd/tasmota_your_mqtt_topic/CustomSend\"\n    model: eu\n    sleepTimeout: 20\n    sleepBrightness:\n      - time: \"7:00:00\"\n        value: 10\n      - time: \"23:00:00\"\n        value: 0\n    locale: \"de_DE\"\n    screensaver:\n      entity: weather.k3ll3r\n    cards:\n      - type: cardEntities\n        entities:\n          - entity: switch.example_item\n          - entity: light.example_item\n        title: Example 1\n      - type: cardGrid\n        entities:\n          - entity: switch.example_item\n          - entity: light.example_item\n        title: Example 2\n

This is the full list of configuration options supported for the config key:

key optional type default description panelRecvTopic False string tele/tasmota_your_mqtt_topic/RESULT The mqtt topic used to receive messages. panelSendTopic False string cmnd/tasmota_your_mqtt_topic/CustomSend The mqtt topic used to send messages. updateMode True string auto-notify Update Mode for flashing of the nextion display firmware, by default it is showing a message asking for the update after updating the backend app in HACS; Possible values: \"auto\", \"auto-notify\", \"manual\" model True string eu Model; Possible values: \"eu\", \"us-l\" and \"us-p\" sleepTimeout True integer 20 Timeout for the screen to enter screensaver, to disable screensaver use 0 sleepBrightness True integer/complex 20 Brightness for the screen on the screensaver, see example below for complex/scheduled config. screenBrightness True integer/complex 100 Brightness for the screen during usage, config format is the same as sleepBrightness. sleepTracking True string None Forces screensaver brightness to 0 in case entity state is not_home or off, can be a group, person or device_tracker entity. sleepTrackingZones True list [\"not_home\", \"off\"] Allows you to set your own states for sleepTracking sleepOverride True complex None Allows overriding of the sleepBrightness if entity state is on, true or home. Overrides sleepBrightness but sleepTracking takes precedence. locale True string en_US Used by babel to determinante Date format on screensaver, also used for localization. dateFormatBabel True string full formatting options on https://babel.pocoo.org/en/latest/dates.html?highlight=name%20of%20day#date-fields timeFormat True string %H:%M Time Format on screensaver. Substring after ? is displayed in a seperate smaller textbox. Useful for 12h time format with AM/PM
\"%I:%M   ?%p\"
dateAdditionalTemplate True string \"\" Addional Text dispayed after Date, can contain a Homeassistant Template Example \" - {{ states('sun.sun') }}\" timeAdditionalTemplate True string \"\" Addional Text dispayed below Time, can contain a Homeassistant Template dateFormat True string %A, %d. %B %Y date format used if babel is not installed timezone True string \"\" Timezone for the time on the panel: Europe/Berlin - See https://en.wikipedia.org/wiki/List_of_tz_database_time_zones for a list of TZ Identifiers (supported from upcoming version v4.4) defaultBackgroundColor True string ha-dark backgroud color of all cards, valid values: black, ha-dark cards False complex configuration for cards that are displayed on panel; see docs for cards screensaver True complex configuration for screensaver; see docs for screensaver hiddenCards True complex configuration for cards that can be accessed though navigate items; see docs for cards"},{"location":"config-overview/#details-on-sleepbrightnessscreenbrightness-and-other-configs-related-to-screen-brightness","title":"Details on sleepBrightness/screenBrightness and other configs related to screen brightness","text":"

It is possible to schedule a brightness change for the screen at specific times.

    sleepBrightness:\n      - time: \"7:00:00\"\n        value: 10\n      - time: \"23:00:00\"\n        value: 0\n
    sleepBrightness:\n      - time: \"sunrise\"\n        value: 10\n      - time: \"sunset + 1:00:00\"\n        value: 0\n

It is also possible to use a static value or an input_number/sensor with the range between 0 and 100 as value for sleepBrightness/screenBrightness:

    sleepBrightness: input_number.brightness_nspanel\n
    sleepBrightness: 50\n

The config option sleepTracking overrides this setting and sets the brightness to 0 if the state of the configured Home Assistant entity is off or not_home. You may also use a Home Assistant group to track multiple entities.

The config option sleepOverride overrides sleepBrightness but does not take precedence over sleepTracking. This is useful if, for example, you want your NSPanel to be brighter than usual if your light is on or if you want to override a panel dimming if you are in the room.

The following example configuration is turning off the screen after sunset, but in case the bedroom light is on the NSPanel brightness will be 20 instead of 0.

    sleepBrightness:\n      - time: \"sunrise\"\n        value: 20\n      - time: \"sunset\"\n        value: 0\n    sleepOverride:\n      entity: light.bedroomlight\n      brightness: 20\n
"},{"location":"config-overview/#supported-keys-for-locale-config","title":"Supported keys for locale config","text":"Language Code Language af_ZA Afrikaans ar_SY Arabic bg_BG Bulgarian ca_ES Catalan cs_CZ Czech da_DK Danish de_DE German el_GR Greek en_US English es_ES Spanish et_EE Estonian fa_IR Persian fi_FI Finnish fr_FR French he_IL Hebrew hr_xx Croatian hu_HU Hungarian hy_AM Armenian id_ID Indonesian is_IS Icelandic it_IT Italian lb_xx Luxembourgish lt_LT Lithuanian lv_LV Latvian nb_NO Norwegian nl_NL Dutch nn_NO Norwegian pl_PL Polish pt_PT Portuguese ro_RO Romanian ru_RU Russian sk_SK Slovak sl_SI Slovenian sv_SE Swedish th_TH Thai tr_TR Turkish uk_UA Ukrainian vi_VN Vietnamese zh_CN Simplified Chinese zh_TW Traditional Chinese"},{"location":"config-overview/#customize-ota-urls","title":"Customize OTA URLs","text":"

In case you need to change the OTA URLs to do automatic updates without internet access for tasmota, you can modify the OTA URLs:

  config:\n    displayURL-US-L: \"http://example.com/us-l.tft\"\n    displayURL-US-P: \"http://example.com/us-l.tft\"\n    displayURL-EU: \"http://example.com/us-l.tft\"\n    berryURL: \"http://exampe.com/autoexec.be\"\n
"},{"location":"config-screensaver/","title":"Screensaver","text":""},{"location":"config-screensaver/#possible-configuration-values-for-screensaver-config","title":"Possible configuration values for screensaver config","text":"key optional type default description entity True string weather.example weather entity from homeassistant entities True string None contains a list of entities of this card (will be used instead of entity) statusIcon1 True complex None status icon left to the date string, config similar to weatherOverride statusIcon2 True complex None status icon right to the date string, config similar to weatherOverride doubleTapToUnlock True boolean False requires to tap screensaver two times theme True complex configuration for theme defaultCard True string None default page after exiting screensaver; only works with top level cards defined in cards; needs to be a navigation item, see subpages (navigate.type_key) This config option will also be evaluated as a HomeAssistant Template. key True string None Used by navigate items type True string screensaver screensaver or screensaver2

Example for the a screensaver config with custom entities/overrides:

    screensaver:\n      entities:\n        - entity: weather.demo_weather_north\n        - entity: weather.demo_weather_north\n          type: 0\n        - entity: weather.demo_weather_north\n          type: 1\n        - entity: weather.demo_weather_north\n          type: 2\n        - entity: sensor.energy_usage\n

Using a 6th entity will automatically activate the alternative layout.

    screensaver:\n      entities:\n        - entity: weather.demo_weather_north\n        - entity: weather.demo_weather_north\n          type: 0\n        - entity: weather.demo_weather_north\n          type: 1\n        - entity: sensor.energy_usage\n        - entity: delete\n        - entity: sensor.indoor_temp\n          icon: mdi:home-thermometer-outline\n

You can use override the options described on the entities documentation page to override colors, names or values of the entities.

With Version 4.0.0 there is another alternative layout for the screensaver:

Configuration is similar, you just need to add type: screensaver2 to switch the layout.

    screensaver:\n      type: screensaver2\n      entities:\n        - entity: weather.demo_weather_north\n
"},{"location":"config-screensaver/#possible-configuration-values-for-screensaver-theme-config-only-normal-screensaver-layout-not-screensaver2","title":"Possible configuration values for screensaver theme config (only normal screensaver layout not screensaver2)","text":"key option type default description background True list Black [R, G, B] time True list White [R, G, B] timeAMPM True list White [R, G, B] date True list White [R, G, B] tMainText True list White [R, G, B] tForecast1 True list White [R, G, B] tForecast2 True list White [R, G, B] tForecast3 True list White [R, G, B] tForecast4 True list White [R, G, B] tForecast1Val True list White [R, G, B] tForecast2Val True list White [R, G, B] tForecast3Val True list White [R, G, B] tForecast4Val True list White [R, G, B] bar True list White [R, G, B] tMainTextAlt2 True list White [R, G, B] tTimeAdd True list White [R, G, B]

Specify colours as red green and blue values from 0-255 e.g. [255, 0, 0] for red or [0, 0, 255] for blue. These are translated internally to RGB565 (note that this has lower color depth so the colours may not appear the same). Also note that the screen has a low contrast ratio, so colors look sigificantly different at full display brightness and lowest brightness.

Example for the theme config:

    screensaver:\n      theme:\n        date: [255, 0, 0]\n
Config Example for configured statusIcons
    screensaver:\n        entity: weather.k3ll3r\n        statusIcon1:\n          entity: switch.example_item\n        statusIcon2:\n           entity: binary_sensor.example_item\n

It is possible to increase the size of the font used for the icons by adding altFont: True to the statusIcon configuration. Icon/Color Overrides are also possible like on any other Entity.

Config Example for configured statusIcons with increased size of the icons
    screensaver:\n        entity: weather.k3ll3r\n        statusIcon1:\n          entity: switch.example_item\n          altFont: True\n        statusIcon2:\n           entity: binary_sensor.example_item\n           altFont: True\n
Config Example for all white icons on screensaver
    screensaver:\n      entities:\n        - entity: weather.demo_weather_north\n        - entity: weather.demo_weather_north\n          type: 0\n      color: [255,255,255]\n        - entity: weather.demo_weather_north\n          type: 1\n      color: [255,255,255]\n        - entity: weather.demo_weather_north\n          type: 2\n      color: [255,255,255]\n        - entity: weather.demo_weather_north\n          type: 3\n      color: [255,255,255]\n
Config Example for a custom date format on forecast
   screensaver:\n      entities:\n        - entity: weather.demo_weather_north\n        - entity: weather.demo_weather_north\n          type: 0\n          name: \"%a %-d/%-m\"\n        - entity: weather.demo_weather_north\n          type: 1\n          name: \"%a %-d/%-m\"\n        - entity: weather.demo_weather_north\n          name: \"%a %-d/%-m\"\n          type: 2\n        - entity: weather.demo_weather_north\n          name: \"%a %-d/%-m\"\n          type: 3\n
See Babel Documentation (https://babel.pocoo.org/en/latest/dates.html#date-fields) or the Python Documenation (https://docs.python.org/3/library/datetime.html#strftime-and-strptime-format-codes) in case you do not have babel installed."},{"location":"configure_mqtt/","title":"Configure MQTT","text":""},{"location":"configure_mqtt/#configure-mqtt-on-tasmota","title":"Configure MQTT on Tasmota","text":"

Configure your MQTT Server in Tasmota. See Tasmota MQTT Documentation for more details.

Please leave the Full Topic as it is in default configuration (and on the screenshot).

Change the topic to something unique for your panel, you will need this topic later in the configuration of your panel in appdaemon / apps.yaml

"},{"location":"configure_mqtt/#note-for-appdeamon-addon-version-15","title":"Note for Appdeamon Addon Version >= 15","text":"

The configuration has been moved out of the config folder from homeassistant. This is how you can access it with the VSCode Addon.

"},{"location":"configure_mqtt/#configure-mqtt-connection-on-appdaemon","title":"Configure MQTT Connection on AppDaemon","text":"

For the app to work you need a working MQTT Configuration in AppDaemon. Please add the configuration of your mqtt server, user and password to your existing appdaemon.yaml Restart your AppDaemon Container (not HomeAssistant) after adding the MQTT Configuration.

You will find this file in the following location: /addon_configs/a0d7b954_appdaemon/appdeamon.yaml

---\nsecrets: /homeassistant/secrets.yaml\nappdaemon:\n  latitude: 52.0\n  longitude: 4.0\n  elevation: 2\n  time_zone: Europe/Berlin\n  app_dir: /homeassistant/appdaemon/apps/ # !!! This is really important for AppDaemon HA Addon >= 15\n  plugins:\n    HASS:\n      type: hass\n    MQTT:\n      type: mqtt\n      namespace: mqtt\n      client_id: \"appdaemon\"\n      client_host: core-mosquitto.local.hass.io # This should work if you are using supervised HomeAssistant; if not use the IP Address instead.\n      #client_host: 192.168.75.30\n      client_port: 1883\n      client_user: \"mqttuser\"\n      client_password: \"mqttpassword\"\n      client_topics: NONE\nhttp:\n  url: http://127.0.0.1:5050\nadmin:\napi:\nhadashboard:\n
"},{"location":"configure_mqtt/#configure-nspanel-on-appdaemon","title":"Configure NsPanel on AppDaemon","text":"

Please add the following minimal configuration to your apps.yaml, which is located in config/appdaemon/apps/apps.yaml

Note: You need to move your apps.yaml to this location if it isn't there.

---\nnspanel-1:\n  module: nspanel-lovelace-ui\n  class: NsPanelLovelaceUIManager\n  config:\n    panelRecvTopic: \"tele/tasmota_your_mqtt_topic/RESULT\"\n    panelSendTopic: \"cmnd/tasmota_your_mqtt_topic/CustomSend\"\n    model: eu\n

Please adjust tasmota_your_mqtt_topic to the topic used in Tasmota MQTT Configuration.

If your configuration is correct you should get the following screens on your panel:

Note: You can add multiple panels to this configuration:
---\nnspanel-1:\n  module: nspanel-lovelace-ui\n  class: NsPanelLovelaceUIManager\n  config:\n    panelRecvTopic: \"tele/first-nspanel-topic/RESULT\"\n    panelSendTopic: \"cmnd/first-nspanel-topic/CustomSend\"\nnspanel-2:\n  module: nspanel-lovelace-ui\n  class: NsPanelLovelaceUIManager\n  config:\n    panelRecvTopic: \"tele/second-nspanel-topic/RESULT\"\n    panelSendTopic: \"cmnd/second-nspanel-topic/CustomSend\"\n
"},{"location":"entities/","title":"Special Settings for Entities","text":""},{"location":"entities/#entities","title":"Entities","text":"

Entities are mainly used on cardEntities and cardGrid.

It is possible to overwrite and configure varrious things on Entities.

"},{"location":"entities/#possible-configuration-values-for-entities-key","title":"Possible configuration values for entities key:","text":"key optional type default description entity False string None name of ha entity name True string None Used to override names (supports home assistant templates) value True string None Used to override the value (supports home assistant templates) icon True string None Used to override icons color True array None Overwrite color of entity color: [255, 0, 0] state True string None Only displayed if Entity state is equal to this value state_not True string None Only displayed if Entity state is unequal to this value status True string None Only valid for navigate and service items, adds a entity to track state for the icon assumed_state True string None Only for cover items, up, down and stop buttons are always shown action_name True string None Only valid for script; Button label font True string None Used to change the font for cardGrid Icons; valid values are (small, medium-icon and medium). Currently only supported for homeassistant entities and not for internal ones. effectList True string None Only valid for light; for example [Android, Aurora (fav list for effects)"},{"location":"entities/#override-icons-or-names","title":"Override Icons or Names","text":"

To overwrite Icons or Names of entities you can configure an icon and/or name in your configuration, please see the following example. Only the icons listed in the Icon Cheatsheet are useable.

        entities:\n          - entity: light.test_item\n            name: NameOverride\n            icon: mdi:lightbulb\n

It is also possible to configure different icon overwrites per state:

            icon:\n                \"on\": mdi:lightbulb\n                \"off\": mdi:lightbulb\n

It is also possible to configure different color overwrites per state:

            color:\n                \"on\": [255,0,0]\n                \"off\": [0,0,255]\n
Dynamic color overwrites using homeassistant templates:
            color: '{{iif(states(\"binary_sensor.test\")==\"on\", \"[0,255,0]\", \"[255,165,0]\")}}'\n

It is also possible to use text instead of icons with text:X

            icon:\n                \"on\": mdi:lightbulb\n                \"off\": \"text:\"\n

Note: State Overrides are working with all state values, not only with \"on\" and \"off\".

To insert dynamic values from a homeassistant template, like a temperature you can also use ha: which will be rendered as homeassistant template. There probably not much cases where this is needed, but here is an exmaple to show the current temperature on the status icon of the screensaver:

      statusIcon2:\n        entity: climate.wohnzimmer_boden\n        icon: 'ha:{{ state_attr(\"climate.wohnzimmer_boden\",\"current_temperature\")}}'\n

If you want to display icons from a template you can put them between <I></I>

        icon: 'ha:{{ iif(is_state('light.kitchen', 'on'), '<I>mdi:flashlight</I>', '<I>mdi:flashlight-off</I>') }}'\n
"},{"location":"entities/#hide-item-based-on-state","title":"Hide item based on state","text":"

This sensor will only be shown on the card if it's state is equal to off

      - entity: binary_sensor.sensor_bad_contact\n        state: \"off\"\n

This sensor will only be shown on the card if it's state is not equal to on

      - entity: binary_sensor.sensor_kueche_contact\n        state_not: \"on\"\n
"},{"location":"entities/#hide-item-based-on-ha-template","title":"Hide item based on HA Template","text":"

The template must evaluate to true for the entity to hide.

      - entity: binary_sensor.sensor_kueche_contact\n        state_template: '{{ state_attr(\"sun.sun\",\"azimuth\") < 200 }}'\n
"},{"location":"entities/#calling-service-directly-as-button","title":"Calling service directly as button","text":"

The following example shows how to call services directly, this enables you to call services on entities not (yet) supported by the backend and also to pass data to services.

    - entity: service.light.turn_on\n      data:\n        entity_id: light.schreibtischlampe\n        color_name: \"green\"\n
"},{"location":"faq/","title":"FAQ","text":""},{"location":"faq/#faq-frequently-asked-questions","title":"FAQ - Frequently Asked Questions","text":""},{"location":"faq/#waiting-for-content-this-is-taking-longer-than-usual-on-the-screen","title":"Waiting for content - This is taking longer than usual on the screen","text":"

You have most likely an error in your MQTT configuration somewhere. To find the error follow theese steps:

  1. Check the location of your apps.yaml With the AppDaemon Addon >= 15 the config dir has been moved. It's required to configure the location back to the old one, this is done by the app_dir line in your appdaemon.yaml. This also requires you to move your apps.yaml to this location. Please make sure your apps.yaml is at /config/appdaemon/apps/apps.yaml and move it otherwise.

  2. Check your appdaemon log. (Settings > Add-ons > AppDaemon > Log) You should see something like this: INFO MQTT: MQTT Plugin initialization complete If you are seeing Messages like this: CRITICAL MQTT: Could not complete MQTT Plugin initialization, for Connection was refused due to Not Authorised Your appdaemon mqtt config is wrong, check your appdaemon.yaml. The log of your mqtt broker might give you additional information.

  3. Check MQTT Configuration of Tasmota. Your Tasmota device needs to connect sucessfully to your MQTT Broker, if you are in the waiting for content screen, the panel will send periodic messages to it's mqtt topic. Note that there is a minimum password length of 5 chars for the MQTT Connection in Tasmota.

  4. Make sure that you are using the same topic in apps.yaml and in your tasmota configuration. The examples in the docs (MQTT Config) are an valid example (tasmota<>apps.yaml). Please don't modify the Full Topic in your Tasmota Config, unless you know the implications, changing the Full Topic will result in diffent Send and Receive Channels, that have to be correct in your apps.yaml.

  5. If you are still in the waiting for content screen please share the following items, with the Waiting for Content Issue type on the Github Issues Page

"},{"location":"faq/#how-to-update","title":"How to update","text":""},{"location":"faq/#update-appdaemon-script","title":"Update AppDaemon Script","text":"

HACS will show you that there is an update avalible and ask you to update. It is important to restart the AppDaemon Container afterwards.

"},{"location":"faq/#update-display-firmware","title":"Update Display Firmware","text":"

You should get an notification on the screen, asking you to update the firmware. In case you want to update manually you can use the following commands.

EU Version: FlashNextion http://nspanel.pky.eu/lui-release.tft

US Version Portrait: FlashNextion http://nspanel.pky.eu/lui-us-p-release.tft

US Version Landscape: FlashNextion http://nspanel.pky.eu/lui-us-l-release.tft

"},{"location":"faq/#update-tasmota-berry-driver","title":"Update Tasmota Berry Driver","text":"

You should get an notification on the screen, asking you to update the driver, if an update is needed.

You can update the berry driver directly from the Tasmota Console with the following command.

UpdateDriverVersion https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be

"},{"location":"faq/#how-to-upgrade-from-a-release-to-the-current-development-version","title":"How to upgrade from a release to the current development version","text":"
  1. Update App in HACS to main

Click redownload in the menu of the app in HACS.

Select main version.

!!! Wait for it to load, dropdown needs to be selectable again, otherwise it will download the latest release !!!

!!! Wait for it to load, dropdown needs to be selectable again, otherwise it will download the latest release !!!

Click download.

  1. Restart AppDaemon

  2. Flash current Development Firmware in Tasmota Console. DO NOT USE THIS VERSION/URLS IF YOUR ARE NOT ON THE DEVELOPMENT VERSION

EU VERSION: FlashNextion http://nspanel.pky.eu/lui.tft

Development happens in the EU version, so it is possible that the US Version isn't up to date with the current development version of the EU firmware, the lastet US versions are still downloadable with the following links:

US LANDSCAPE: FlashNextion http://nspanel.pky.eu/lui-us-l.tft

US PORTRAIT: FlashNextion http://nspanel.pky.eu/lui-us-p.tft

"},{"location":"hmi-serial-protocol/","title":"NSPanel Lovelace UI","text":""},{"location":"hmi-serial-protocol/#nspanel-lovelace-ui","title":"NSPanel Lovelace UI","text":"

The HMI Project of this project is only used to display stuff, navigation ist mostly up to the backend. This allows to be way more flexible.

Messages to the Panel can be send through the Command CustomSend, which is implemented in the berry driver. You can issue this command through MQTT by sending messages to the cmnd/XXX/CustomSend Topic. Messages from the Panel are send to the tele/XXX/RESULT Topic, encoded in json {\"CustomRecv\":\"message_from_screen\"}

"},{"location":"hmi-serial-protocol/#table-of-contents","title":"Table of contents","text":""},{"location":"hmi-serial-protocol/#startup","title":"Startup","text":"

On startup the panel will send {\"CustomRecv\":\"event,startup,39,eu\"} every few seconds.

event,   #Every message from the screen will start with `event`\nstartup, #Startup Event\n39,      #Current HMI Project Version\neu       #Current HMI Project Model\n

You can answer this message in many different ways, but in general the goal is to navigate way from the startup page. In the following example we will navigate to the screensaver page.

Send the following messages to the CustomSend Topic. (You can also send them on tasmota console for testing)

"},{"location":"hmi-serial-protocol/#some-preperation-before-we-are-acually-navigating-away","title":"Some preperation before we are acually navigating away:","text":"

Send this every minute: time~18:17

Send this at least once at midnight: date~Donnerstag, 25. August 2022

Send theese message once after receiving the startup event (parameters will be explained later):

timeout~20

dimmode~10~100~6371

"},{"location":"hmi-serial-protocol/#navigate-from-the-startup-page-to-the-screensaver-by-sending-this-command-to-the-customsend-topic","title":"Navigate from the startup page to the screensaver, by sending this command to the CustomSend Topic.","text":"

pageType~screensaver

After sending this command you should already see the time and date. To also show weather data you have to send them with weatherUpdate, but we will skip this for now.

"},{"location":"hmi-serial-protocol/#exit-screensaver","title":"Exit Screensaver","text":"

Touching the panel on the screensaver will result in this MQTT Message on the result topic:

event,buttonPress2,screensaver,bExit,1

You can answer this by sending theese commands to the CustomSend Topic.

pageType~cardEntities

entityUpd~test~~button~navigate.prev~<~65535~~~button~navigate.next~>~65535~~~~light~light.schreibtischlampe~X~17299~Schreibtischlampe~0~text~sensor.server_energy_power~Y~17299~Server ENERGY Power~155 W~shutter~cover.rolladenfenster_cover_1~Z~17299~Fenster Eingang~A|B|C|disable|enable|enable~switch~switch.bad~D~63142~Bad~1

"},{"location":"hmi-serial-protocol/#messages-to-nextion-display","title":"Messages to Nextion Display","text":""},{"location":"hmi-serial-protocol/#general-commands-implemented-on-all-pages","title":"General Commands, implemented on all pages","text":"

set brightness of screensaver and active-brightness:

dimmode~0~100 - (screen off)

dimmode~100~100 - (screen on with full brightness)

set current time:

time~22:26

set current date:

date~Di 24. Februar

set screensaver timeout (set time in sec~ max 65):

timeout~15 - timeout after 15 seconds

timeout~0 - disable screensaver

change the page type:

pageType~pageStartup

pageType~cardEntities

pageType~cardThermo

pageType~cardMedia

pageType~popupLight~Schreibtischlampe~light.schreibtischlampe

pageType~popupNotify

pageType~screensaver

"},{"location":"hmi-serial-protocol/#screensaver-page","title":"screensaver page","text":"Parameter Number Category Location Type Field Addional Information 0 instruction instruction weatherupdate 1 Main Icon Entity Definition type ignored 2 intNameEntity ignored 3 icon 4 iconColor 5 displayName ignored 6 optionalValue 7 First Forecast Icon Entity Definition type ignored 8 intNameEntity ignored 9 icon 10 iconColor 11 displayName 12 optionalValue 13 Second Forecast Icon Entity Definition type ignored 14 intNameEntity ignored 15 icon 16 iconColor 17 displayName 18 optionalValue 19 Third Forecast Icon Entity Definition type ignored 20 intNameEntity ignored 21 icon 22 iconColor 23 displayName 24 optionalValue 25 Fourth Forecast Icon Entity Definition type ignored 26 intNameEntity ignored 27 icon 28 iconColor 29 displayName 30 optionalValue 31 Alternative Layout Icon Entity Definition type ignored 32 intNameEntity ignored 33 icon 34 iconColor 35 displayName ignored 36 optionalValue

color~background~tTime~timeAMPM~tDate~tMainText~tForecast1~tForecast2~tForecast3~tForecast4~tForecast1Val~tForecast2Val~tForecast3Val~tForecast4Val~bar~tMainTextAlt2~tTimeAdd

Parameter Number Category Location Type Field Addional Information 0 instruction color 1 background 2 tTime 3 timeAMPM 4 tDate 5 tMainText 6 tForecast1 7 tForecast2 8 tForecast3 9 tForecast4 10 tForecast1Val 11 tForecast2Val 12 tForecast3Val 13 tForecast4Val 14 bar 15 tMainTextAlt2 16 tTimeAdd

notify~heading~text

statusUpdate~icon1~icon1Color~icon2~icon2~icon2color~icon1font~icon2font

"},{"location":"hmi-serial-protocol/#cardentities-page","title":"cardEntities Page","text":"

Structure (Category): entityUpd~title~[navigation]~[entity_information] Example with 4 Entities:

entityUpd~LightTest~button~navigate.prev~<~65535~~~button~navigate.next~>~65535~~~light~light.bed_light~A~17299~Bed Light~0~light~light.ceiling_lights~B~52231~Ceiling Lights~1~switch~switch.ac~C~17299~AC~0~switch~switch.decorative_lights~D~65222~Decorative Lights~1\n

Possible entities on cardEntities/cardGrid:

~light~light.entityName~1~17299~Light1~0

~shutter~cover.entityName~0~17299~Shutter2~iconUp|iconStop|iconDown

~delete~~~~~

~text~sensor.entityName~3~17299~Temperature~content

~button~button.entityName~3~17299~bt-name~bt-text

~switch~switch.entityName~4~17299~Switch1~0

~number~input_number.entityName~4~17299~Number123~value|min|max

~input_sel~input_select.entityName~3~17299~sel-name~sel-text

Number Category Location Type Field Addional Information 0 instruction instruction entityUpd 1 title title title title 2 Navigation Upper Left Icon Entity Definition type (ignored)\u00b9 3 intNameEntity 4 icon 5 iconColor 6 displayName ignored 7 optionalValue ignored 8 Upper Right Icon Entity Definition type (ignored)\u00b9 9 intNameEntity 10 icon 11 iconColor 12 displayName ignored 13 optionalValue ignored 14 Entities First Entity Entity Definition type 15 intNameEntity 16 icon 17 iconColor 18 displayName 19 optionalValue 20 Second Entity Entity Definition type 21 intNameEntity 22 icon 23 iconColor 24 displayName 25 optionalValue 26 Thrid Entity Entity Definition type 27 intNameEntity 28 icon 29 iconColor 30 displayName 31 optionalValue 32 Forth Entiry Entity Definition type 33 intNameEntity 34 icon 35 iconColor 36 displayName 37 optionalValue 38 Fifth Entiy (US Portrait\u00a0\u00a0\u00a0Version) Entity Definition type 39 intNameEntity 40 icon 41 iconColor 42 displayName 43 optionalValue 44 Sixth Entiy (US Portrait\u00a0\u00a0\u00a0Version) Entity Definition type 45 intNameEntity 46 icon 47 iconColor 48 displayName 49 optionalValue"},{"location":"hmi-serial-protocol/#cardgrid-page","title":"cardGrid Page","text":"

cardGrid is using the exact same messageformat like cardEntities does. The only difference is, it ignores the information supplied in optionalValue, because it isn't needed for cardGrid.

Parameter\u00a0\u00a0\u00a0Number Category Location Type Field Addional Information 0 instruction instruction entityUpd 1 title title title title 2 Navigation Upper Left Icon Entity Definition type (ignored)\u00b9 3 intNameEntity 4 icon 5 iconColor 6 displayName ignored 7 optionalValue ignored 8 Upper Right Icon Entity Definition type (ignored)\u00b9 9 intNameEntity 10 icon 11 iconColor 12 displayName ignored 13 optionalValue ignored 14 Entities First Entity Entity Definition type 15 intNameEntity 16 icon 17 iconColor 18 displayName 19 optionalValue ignored 20 Second Entity Entity Definition type 21 intNameEntity 22 icon 23 iconColor 24 displayName 25 optionalValue ignored 26 Thrid Entity Entity Definition type 27 intNameEntity 28 icon 29 iconColor 30 displayName 31 optionalValue ignored 32 Forth Entiry Entity Definition type 33 intNameEntity 34 icon 35 iconColor 36 displayName 37 optionalValue ignored 38 Fifth Entiy (US Portrait\u00a0\u00a0\u00a0Version) Entity Definition type 39 intNameEntity 40 icon 41 iconColor 42 displayName 43 optionalValue ignored 44 Sixth Entiy (US Portrait\u00a0\u00a0\u00a0Version) Entity Definition type 45 intNameEntity 46 icon 47 iconColor 48 displayName 49 optionalValue ignored"},{"location":"hmi-serial-protocol/#cardmedia","title":"cardMedia","text":"

Example without icons in bottom row: entityUpd~Kitchen~button~navigation.up~U~65535~~~delete~~~~~~media_player.kitchen~I'm a Hurricane~~Wellmess~~100~A~64704~B~media_pl~media_player.kitchen~C~17299~Kitchen~

Parameter\u00a0\u00a0\u00a0Number Category Location Type Field Addional Information 0 instruction instruction entityUpd 1 title title title title 2 Navigation Upper Left Icon Entity Definition type (ignored)\u00b9 3 intNameEntity 4 icon 5 iconColor 6 displayName ignored 7 optionalValue ignored 8 Upper Right Icon Entity Definition type (ignored)\u00b9 9 intNameEntity 10 icon 11 iconColor 12 displayName ignored 13 optionalValue ignored 14 cardMedia specific cardMedia specific intNameEntity 15 1st text row title 16 titleColor 17 2nd text row author 18 authorColor 19 slider volume 0-100 20 icon middle playPauseIcon 21 icon right side onOffBtn \"disable\" or color 22 icon left side iconShuffle \"disable\" or icon 23 Entities upper left corner media\u00a0\u00a0\u00a0icon Entity Definition type 24 intNameEntity 25 icon 26 iconColor 27 displayName only used for popups 28 optionalValue ignored 29 First Entity Entity Definition type 30 intNameEntity 31 icon 32 iconColor 33 displayName only used for popups 34 optionalValue ignored 35 Second Entity Entity Definition type 36 intNameEntity 37 icon 38 iconColor 39 displayName only used for popups 40 optionalValue ignored 41 Thrid Entity Entity Definition type 42 intNameEntity 43 icon 44 iconColor 45 displayName only used for popups 46 optionalValue ignored 47 Forth Entiry Entity Definition type 48 intNameEntity 49 icon 50 iconColor 51 displayName only used for popups 52 optionalValue ignored 53 Fifth Entiy Entity Definition type 54 intNameEntity 55 icon 56 iconColor 57 displayName only used for popups 58 optionalValue ignored"},{"location":"hmi-serial-protocol/#cardthermo","title":"cardThermo","text":"

Serial Protocol of cardThermo is about to change; table will be completed later

Parameter Number Location Type Field Addional Information 0 instruction entityUpd 1 title title title 2 Upper Left Icon Entity Definition type (ignored)\u00b9 3 intNameEntity 4 icon 5 iconColor 6 displayName ignored 7 optionalValue ignored 8 Upper Right Icon Entity Definition type (ignored)\u00b9 9 intNameEntity 10 icon 11 iconColor 12 displayName ignored 13 optionalValue ignored 14 intNameEntity 15 2nd text box currentTemp 16 target temperature dstTemp multiplied by 10 17 Text 4th Box Left Side status 18 Min Temp minTemp multiplied by 10 19 Max Temp maxTemp multiplied by 10 20 Temperature Steps tempStep multiplied by 10 21 bottom hvac_action 1 Hvac Action icon 22 iconColorActive 23 buttonState 24 intName 25 bottom hvac_action 2 Hvac Action icon 26 iconColorActive 27 buttonState 28 intName 29 bottom hvac_action 3 Hvac Action icon 30 iconColorActive 31 buttonState 32 intName 33 bottom hvac_action 4 Hvac Action icon 34 iconColorActive 35 buttonState 36 intName 37 bottom hvac_action 5 Hvac Action icon 38 iconColorActive 39 buttonState 40 intName 41 bottom hvac_action 6 Hvac Action icon 42 iconColorActive 43 buttonState 44 intName 45 bottom hvac_action 7 Hvac Action icon 46 iconColorActive 47 buttonState 48 intName 49 bottom hvac_action 8 Hvac Action icon 50 iconColorActive 51 buttonState 52 intName 53 Currently Label 1th Text Box tCurTempLbl 54 State Label 3th Text Box tStateLbl 55 tALbl deprecated; ignored 56 Temperature Unit (Celcius/Farhenheit) tCF 57 Second Destination Tempature (Heat/Cool) second temp ; multiplied by 10 58 additonal detail button to open another page btDetail \"1\" to hide"},{"location":"hmi-serial-protocol/#cardalarm","title":"cardAlarm","text":"Parameter Number Category Location Type Field Addional Information 0 instruction instruction entityUpd 1 title title title title 2 Navigation Upper Left Icon Entity Definition type (ignored)\u00b9 3 intNameEntity 4 icon 5 iconColor 6 displayName ignored 7 optionalValue ignored 8 Upper Right Icon Entity Definition type (ignored)\u00b9 9 intNameEntity 10 icon 11 iconColor 12 displayName ignored 13 optionalValue ignored 14 cardAlarm specific card intNameEntity intNameEntity 15 1st button right side displayName 16 intId 17 2nd button right side displayName 18 intId 19 3rd button right side displayName 20 intId 21 4th button right side displayName 22 intId 23 icon next to code display icon 24 iconColor 25 numpad numpadStatus \"disable\" or \"enable\" 26 flashing of icon next to code flashing status \"enable\" or \"disable\" 27 button bottom left corner icon 28 iconColor 29 intNameEntity"},{"location":"hmi-serial-protocol/#cardqr","title":"cardQR","text":"

Example: entityUpd~Guest Wifi~button~navigate.prev~<~65535~~~button~navigate.next~>~65535~~~WIFI:S:test_ssid;T:WPA;P:test_pw;;~text~iText.test_ssid~\ufffd\ufffd\ufffd~17299~Name~test_ssid~text~iText.test_pw~\ufffd\ufffd\ufffd~17299~Password~test_pw

Parameter\u00a0\u00a0\u00a0Number Category Location Type Field Addional Information 0 instruction instruction entityUpd 1 title title title intNameEntity 2 Navigation Upper Left Icon Entity Definition type (ignored)\u00b9 3 intNameEntity 4 icon 5 iconColor 6 displayName ignored 7 optionalValue ignored 8 Upper Right Icon Entity Definition type (ignored)\u00b9 9 intNameEntity 10 icon 11 iconColor 12 displayName ignored 13 optionalValue ignored 14 cardQR specific qrcode text 15 Entities 1st Entity Entity Definition type 16 intNameEntity 17 icon 18 iconColor 19 displayName 20 optionalValue 21 2nd Entity Entity Definition type 22 intNameEntity 23 icon 24 iconColor 25 displayName 26 optionalValue"},{"location":"hmi-serial-protocol/#cardpower","title":"cardPower","text":"

entityUpd~PowerTest~x~navUp~A~65535~~~delete~~~~~~text~sensor.power_consumption~B~17299~Power consumption~100W~1~text~sensor.power_consumption~C~17299~Power consumption~100W~1~text~sensor.today_energy~D~17299~Total energy 1~5836.0kWh~0~delete~~~~~~0~text~sensor.today_energy~E~17299~Total energy 1~5836.0kWh~-30~delete~~~~~~0~text~sensor.today_energy~F~65504~Total energy 1~5836.0kWh~90~text~sensor.today_energy~G~17299~Total energy 1~5836.0kWh~10

Parameter Number Location Type Field Addional Information 0 instruction entityUpd 1 title title title 2 Upper Left Icon Entity Definition type (ignored)\u00b9 3 intNameEntity 4 icon 5 iconColor 6 displayName ignored 7 optionalValue ignored 8 Upper Right Icon Entity Definition type (ignored)\u00b9 9 intNameEntity 10 icon 11 iconColor 12 displayName ignored 13 optionalValue ignored 14 Home Icon / Value below Home Icon Entity Definition type ignored 15 intNameEntity ignored 16 icon 17 iconColor 18 displayName 19 optionalValue 20 speed ignored 21 Value above Home Icon Entity Definition type ignored 22 intNameEntity ignored 23 icon ignored 24 iconColor ignored 25 displayName ignored 26 optionalValue 27 speed ignored 28 1st Item Upper Left Entity Definition type ignored 29 intNameEntity ignored 30 icon 31 iconColor 32 displayName 33 optionalValue 34 speed numbers (between -120 and 120) 35 2nd Item Middle Left Entity Definition type ignored 36 intNameEntity ignored 37 icon 38 iconColor 39 displayName 40 optionalValue 41 speed numbers (between -120 and 120) 42 3rd Item Bottom Left Entity Definition type ignored 43 intNameEntity ignored 44 icon 45 iconColor 46 displayName 47 optionalValue 48 speed numbers (between -120 and 120) 49 4th Item Upper Right Entity Definition type ignored 50 intNameEntity ignored 51 icon 52 iconColor 53 displayName 54 optionalValue 55 speed numbers (between -120 and 120) 56 5th Item Middle Right Entity Definition type ignored 57 intNameEntity ignored 58 icon 59 iconColor 60 displayName 61 optionalValue 62 speed numbers (between -120 and 120) 63 6th Item Bottom Right Entity Definition type ignored 64 intNameEntity ignored 65 icon 66 iconColor 67 displayName 68 optionalValue 69 speed numbers (between -120 and 120)"},{"location":"hmi-serial-protocol/#cardchart-page","title":"cardChart Page","text":"

entityUpd~heading~navigation~color~yAxisLabel~yAxisTick:[yAxisTick]*[~value[:xAxisLabel]?]*

entityUpd~Chart Demo~~button~navigate.prev~<~65535~~~button~navigate.next~>~65535~~~~6666~Gas [kWh]~20:40:60:80:100~10~7^2:00~7~6^4:00~6~7^6:00~0~7^8:00~5~1^10:00~1~10^12:00~5~6^14:00~8

"},{"location":"hmi-serial-protocol/#popuplight-page","title":"popupLight Page","text":"

entityUpdateDetail~entityName~*ignored*~*iconColor*~*buttonState*~*sliderBrightnessPos*~*sliderColorTempPos*~*colorMode*~*color_translation*~*color_temp_translation*~*brightness_translation*

entityUpdateDetail~1~17299~1~100~78~enable

entityUpdateDetail~1~17299~1~100~disable

"},{"location":"hmi-serial-protocol/#popupshutter-page","title":"popupShutter Page","text":"

entityUpdateDetail~entityName~*sliderPos*~2ndrow~textPosition~icon1~iconUp~iconStop~iconDown~iconUpStatus~iconStopStatus~iconDownStatus~textTilt~iconTiltLeft~iconTiltStop~iconTiltRight~iconTiltLeftStatus~iconTiltStopStatus~iconTiltLeftStatus~tiltPos

entityUpdateDetail~1~77

"},{"location":"hmi-serial-protocol/#popupnotify-page","title":"popupNotify Page","text":"

entityUpdateDetail~*internalName*~*tHeading*~*tHeadingColor*~*b1*~*tB1Color*~*b2*~*tB2Color*~*tText*~*tTextColor*~*sleepTimeout*~*font*~*alt_icon*~*altIconColor*

exitPopup

"},{"location":"hmi-serial-protocol/#popupthermo-page","title":"popupThermo Page","text":"

entityUpdateDetail~{entity_id}~{icon_id}~{icon_color}~{heading}~{mode}~mode1~mode1?mode2?mode3~{heading}~{mode}~mode1~mode1?mode2?mode3~{heading}~{mode}~mode1~mode1?mode2?mode3~

"},{"location":"hmi-serial-protocol/#popupinsel-page-input_select-detail-page","title":"popupInSel Page (input_select detail page)","text":"

entityUpdateDetail2~*entity_id*~~*icon_color*~*input_sel*~*state*~*options*

options are ? seperated

"},{"location":"hmi-serial-protocol/#popuptimer","title":"popupTimer","text":"

editable is 0 or 1

action fields are in the answer on the button press

in case action is empty the button will be hidden

entityUpdateDetail~{entity_id}~~{icon_color}~{entity_id}~{min_remaining}~{sec_remaining}~{editable}~{action1}~{action2}~{action3}~{label1}~{label2}~{label3}

"},{"location":"hmi-serial-protocol/#messages-from-nextion-display","title":"Messages from Nextion Display","text":"

event,buttonPress2,pageName,bNext

event,buttonPress2,pageName,bPrev

event,buttonPress2,pageName,bExit,number_of_taps

event,buttonPress2,pageName,sleepReached

"},{"location":"hmi-serial-protocol/#startup-page","title":"startup page","text":"

event,startup,version,model

"},{"location":"hmi-serial-protocol/#screensaver-page_1","title":"screensaver page","text":"

event,buttonPress2,screensaver,exit - Touch Event on Screensaver

event,screensaverOpen - Screensaver has opened

"},{"location":"hmi-serial-protocol/#cardentities-page_1","title":"cardEntities Page","text":"

event,*eventName*,*entityName*,*actionName*,*optionalValue*

event,buttonPress2,internalNameEntity,up

event,buttonPress2,internalNameEntity,down

event,buttonPress2,internalNameEntity,stop

event,buttonPress2,internalNameEntity,OnOff,1

event,buttonPress2,internalNameEntity,button

"},{"location":"hmi-serial-protocol/#popuplight-page_1","title":"popupLight Page","text":"

event,pageOpenDetail,popupLight,internalNameEntity

event,buttonPress2,internalNameEntity,OnOff,1

event,buttonPress2,internalNameEntity,brightnessSlider,50

event,buttonPress2,internalNameEntity,colorTempSlider,50

event,buttonPress2,internalNameEntity,colorWheel,x|y|wh

"},{"location":"hmi-serial-protocol/#popupshutter-page_1","title":"popupShutter Page","text":"

event,pageOpenDetail,popupShutter,internalNameEntity

event,buttonPress2,internalNameEntity,positionSlider,50

"},{"location":"hmi-serial-protocol/#popupnotify-page_1","title":"popupNotify Page","text":"

event,buttonPress2,*internalName*,notifyAction,yes

event,buttonPress2,*internalName*,notifyAction,no

"},{"location":"hmi-serial-protocol/#cardthermo-page","title":"cardThermo Page","text":"

event,buttonPress2,*entityName*,tempUpd,*temperature*

event,buttonPress2,*entityName*,hvac_action,*hvac_action*

"},{"location":"hmi-serial-protocol/#cardmedia-page","title":"cardMedia Page","text":"

event,buttonPress2,internalNameEntity,media-back

event,buttonPress2,internalNameEntity,media-pause

event,buttonPress2,internalNameEntity,media-next

event,buttonPress2,internalNameEntity,volumeSlider,75

"},{"location":"hmi-serial-protocol/#cardalarm-page","title":"cardAlarm Page","text":"

event,buttonPress2,internalNameEntity,actionName,code

"},{"location":"hmi-serial-protocol/#custom-protocol","title":"Custom Protocol","text":"
55 BB [payload length] [payload length] [payload] [crc] [crc]\n

Payload length contains the number of bytes of the payload.

CRC is \"CRC-16 (MODBUS) Big Endian\" calculated over the whole message

This protocol does not try to implement broken JSON Commands with a specified type (lol). Instead the commands are plain text commands with parameters.

"},{"location":"hmi-serial-protocol/#example-for-valid-message","title":"Example for valid Message","text":"

This message has to be generated for the Message \"1337\" (1337 is not a valid command~ this is just an example)

55 BB  04 00  31 33 33 37  5F 5B\n
"},{"location":"iobroker-install/","title":"Prepare ioBroker","text":""},{"location":"iobroker-install/#installation-iobroker","title":"Installation - ioBroker","text":"

The Backend for ioBroker is maintained by britzelpuf and armilar

See the wiki for documentation around setting lovelace-ui up with ioBroker

Wiki

Also see the Readme in the ioBroker Folder. iobroker ReadMe

"},{"location":"notifications/","title":"Notifications","text":""},{"location":"notifications/#sending-notifications-to-the-panel","title":"Sending Notifications to the Panel","text":"

There are two notification types, that can be triggered by sending a command over mqtt to the panel here are examples for homeassistant scripts:

"},{"location":"notifications/#seperate-page","title":"Seperate Page","text":"

This is the notification used by the backend for updates, opening it requires to the following commands to the CustomSend Topic:

pageType popupNotify

entityUpdateDetail~internalName~heading~headingColor~button1text~button1color~button2text~tB2Color~notificationText~textColor~sleepTimeout~fontIdText

Alternative Layout with Icon:

entityUpdateDetail~internalName~heading~headingColor~button1text~button1color~button2text~tB2Color~notificationText~textColor~sleepTimeout~fontIdText~icon~iconColor

fontIdText is the font used by the notification text Possible values are 0-5:

Font 0 - Default - Size 24 (No Icons, Support for various special chars from different langs)\nFont 1 - Size 32 (Icons and limited chars)\nFont 2 - Size 32 (No Icons, Support for various special chars from different langs)\nFont 3 - Size 48 (Icons and limited chars)\nFont 4 - Size 80 (Icons and limited chars)\nFont 5 - Size 128 (ascii only)\n

You need to use the acual char for the icon instead of the icon name which is used in the configuration. You can get the char of the icon from the cheatsheet.

https://docs.nspanel.pky.eu/icon-cheatsheet.html

It is possible to exit from the page by sending exitPopup

If you want to add newlines to your message add this string for the newline {{'\\r\\n'}}

Send Message to the Panel combined with a buzzer sound:

nspanel_popup_notification:\n  alias: Popup Notification\n  sequence:\n  - service: mqtt.publish\n    data:\n      topic: cmnd/tasmota_NsPanelTerrasse/Backlog\n      payload: CustomSend pageType~popupNotify; CustomSend entityUpdateDetail~id~{{\n        title }}~65535~~~~~{{ message }}~65535~{{ timeout }}; Buzzer 2,2,2\n  mode: single\n  icon: mdi:message-badge\n

Send Message to the Panel:

nspanel_popup_notification:\n  alias: Popup Notification\n  sequence:\n  - service: mqtt.publish\n    data:\n      topic: cmnd/tasmota_NsPanelTerrasse/Backlog\n      payload: CustomSend pageType~popupNotify; CustomSend entityUpdateDetail~id~{{\n        title }}~65535~~~~~{{ message }}~65535~{{ timeout }}\n  mode: single\n  icon: mdi:message-badge\n
"},{"location":"notifications/#notification-on-screensaver","title":"Notification on screensaver","text":"

The screensaver can display Notifications by sending this command to the CustomSend topic: notify~heading~text

Send Message to the Screensaver combined with a buzzer sound:

nspanel_screensaver_notification:\n  alias: Screensaver Notification\n  sequence:\n  - service: mqtt.publish\n    data:\n      topic: cmnd/tasmota_NsPanelTerrasse/Backlog\n      payload: CustomSend notify~{{ heading }}~{{ message }}; Buzzer 2,2,2\n  mode: single\n  icon: mdi:message-badge\n

Send Message to the Screensaver:

nspanel_screensaver_notification:\n  alias: Screensaver Notification\n  sequence:\n  - service: mqtt.publish\n    data:\n      topic: cmnd/tasmota_NsPanelTerrasse/Backlog\n      payload: CustomSend notify~{{ heading }}~{{ message }}\n  mode: single\n  icon: mdi:message-badge\n
"},{"location":"notifications/#buzzer","title":"Buzzer","text":"

See Tasmota Buzzer for commands.

It might be necessary to enable the buzzer with:

BuzzerPWM 1\n
"},{"location":"notifications/#color-picker","title":"Color Picker","text":"

Decimal RGB565: 0

"},{"location":"phys-btn/","title":"Physical Buttons","text":""},{"location":"phys-btn/#change-behaviour-of-hardware-buttons","title":"Change behaviour of hardware buttons","text":""},{"location":"phys-btn/#tasmota-rules","title":"Tasmota Rules","text":"

You can configure the buttons to mimic an UI element on the screen by configuring tasmota rules.

The following rule will change the behaviour of the two buttons to do page navigation.

Rule2 on Button1#state do Publish tele/%topic%/RESULT {\"CustomRecv\":\"event,buttonPress2,navPrev,button\"} endon on Button2#state do Publish tele/%topic%/RESULT {\"CustomRecv\":\"event,buttonPress2,navNext,button\"} endon\n\nRule2 1\n
"},{"location":"phys-btn/#decouple-buttons-from-controlling-power-outputs","title":"Decouple buttons from controlling power outputs","text":"

If you do not want your NSPanel physical buttons to trigger the relays and prefer to have them as software configurable buttons, open the Tasmota console of your NSPanel and enter the following:

SetOption73 1

Your relays will now appear as switches in HomeAssistant and you can control your buttons by using automations:

You may reverse this change by entering the following in the Tasmota console of your NSPanel:

SetOption73 0

Please note: Doing this will mean that if HomeAssistant is not working for any reason your buttons will not function correctly.

"},{"location":"prepare_ha/","title":"Prepare Home Assistant","text":""},{"location":"prepare_ha/#setup-home-assistant","title":"Setup Home Assistant","text":""},{"location":"prepare_ha/#installing-appdaemon","title":"Installing AppDaemon","text":"

The backend application for HomeAssistant is written in a python for AppDaemon. This means it requires a working and running installation of AppDaemon.

The easiest way to install it is through Home Assistant's Supervisor Add-on Store, it will be automaticly connected to your Home Assistant Instance.

Instructions for users of HomeAssistant Core installed through docker containers. In case you have a homeassistant setup using docker cotainers and the Add-on Store is not available to you, you can follow this guide for setting up AppDaemon. https://appdaemon.readthedocs.io/en/latest/DOCKER_TUTORIAL.html Please also pay attention to the correct volume mount for the conf folder of appdaemon, that has to point to the appdaemon folder within your homeassistant config folder. Here is an example docker compose file for homeassistant and appdaemon:
version: \"3.5\"\nservices:\n  homeassistant:\n    image: ghcr.io/home-assistant/home-assistant:stable\n    container_name: homeassistant\n    network_mode: host\n    volumes:\n      - ./docker-data/homeassistant/:/config\n      - /etc/localtime:/etc/localtime:ro\n    environment:\n      - TZ=Europe/Berlin\n    privileged: true\n    restart: unless-stopped\n\n  appdaemon:\n    container_name: appdaemon\n    image: acockburn/appdaemon:4.2.3\n    environment:\n      - HA_URL=http://your-homeassistant-url:8123\n      - TOKEN=\"xxxxxx\"\n    volumes:\n      - /etc/localtime:/etc/localtime:ro\n      - ./docker-data/homeassistant/appdaemon:/conf\n    depends_on:\n      - homeassistant\n    restart: unless-stopped\n
"},{"location":"prepare_ha/#add-babel-package-to-appdaemon-container-optional","title":"Add babel package to AppDaemon Container (Optional)","text":"

For localisation (date in your local language) you need to add the python package babel to your AppDaemon Installation.

"},{"location":"prepare_ha/#installing-studio-code-server","title":"Installing Studio Code Server","text":"

You will need a way to edit the apps.yaml config file in the Appdaemon folder. Install Studio Code Server from Home Assistant's Supervisor Add-on Store to easily edit configuration Files on your HomeAssistant Instance.

"},{"location":"prepare_ha/#installing-homeassistant-community-store","title":"Installing HomeAssistant Community Store","text":"

HACS is the Home Assistant Community Store and allows for community integrations and automations to be updated easily from the Home Assistant web user interface. You will be notified of updates, and they can be installed by a click on a button.

"},{"location":"prepare_ha/#installing-lovelace-appdaemon-backend-application","title":"Installing Lovelace AppDaemon Backend Application","text":"

To install Lovelace UI Backend App with HACS, you will need to make sure that you enabled AppDaemon automations in HACS, as these are not enabled by default:

  1. Click on Configuration on the left menu bar in Home Assistant Web UI
  2. Select Devices & Services
  3. Select Integrations
  4. Find HACS and click on Configure
  5. In the window that opens, make sure that Enable AppDaemon apps discovery & tracking is checked, or check it and click Submit
  6. If you just enabled this (or just installed HACS), you might have to wait a few minutes as all repositories are being fetched; you might hit a GitHub rate limit, which might then require you to wait a few hours for HACS to be fully configured. In this case, you won't be able to proceed to the next steps until HACS is ready.

Now, to install NSPanel Lovelace UI Backend with HACS, follow these steps:

  1. Click on HACS on the left menu bar in Home Assistant Web UI
  2. Click on Automations in the right panel
  3. Click on Explore & download repositories in the bottom right corner
  4. Search for NSPanel, and click on NSPanel Lovelace UI Backend in the list that appears
  5. In the bottom right corner of the panel that appears, click on Download this repository with HACS
  6. A confirmation panel will appear, click on Download, and wait for HACS to proceed with the download
  7. The Backend Application is now installed, and HACS will inform you when updates are available
"},{"location":"prepare_ha/#workaround-for-homeassistant-202404","title":"Workaround for HomeAssistant 2024.04","text":"

AppDaemon is using the old REST API that until AppDaemon moved on the the websocket API this woraround is needed to get weather forecast data from homeassistant. (https://github.com/AppDaemon/appdaemon/issues/1837)

To get the forecast data in appdaemon, there is a script needed in homeassistant's configuration.yaml:

template:\n  - trigger:\n      - platform: time_pattern\n        hours: /1\n    action:\n      - service: weather.get_forecasts\n        data:\n          type: daily\n        target:\n          entity_id: weather.k3ll3r # change to your weather entity in this line\n        response_variable: daily\n    sensor:\n      - name: Weather Forecast Daily\n        unique_id: weather_forecast_daily\n        state: \"{{ now().isoformat() }}\"\n        attributes:\n          forecast: \"{{ daily['weather.k3ll3r'].forecast }}\" # change to your weather entity in this line\n

Adjust the entities in your apps.yaml that are accessing the forecast to the newly created trigger template:

"},{"location":"prepare_nspanel/","title":"Prepare NsPanel","text":""},{"location":"prepare_nspanel/#flash-tasmota-to-your-nspanel","title":"Flash Tasmota to your NSPanel","text":"

You need to connect to your nspanel via serial and flash tasmota tasmota32-nspanel.bin to your NSPanel. You can use the Tasmota Web Installer to do so. Tasmota Web Installer

Checkout Blakadders Template Repo for more information on flashing, do not use the autoexec.be from this page. NSPanel Page of the Tasmota Template Repository

If you prefer EspHome over Tasmota, you can use this thrid party esphome component, which is replacing tasmota and the berry driver of this project. ESPHome component

"},{"location":"prepare_nspanel/#configure-tasmota-template-for-nspanel","title":"Configure Tasmota Template for NSPanel","text":"

Configure the NSPanel template for Tasmota. (Go to Configuration and Configure Other and paste the template there, make sure to tick the activate checkbox)

You can use the following template or copy the one on the Tasmota Template Repo Site.

{\"NAME\":\"NSPanel\",\"GPIO\":[0,0,0,0,3872,0,0,0,0,0,32,0,0,0,0,225,0,480,224,1,0,0,0,33,0,0,0,0,0,0,0,0,0,0,4736,0],\"FLAG\":0,\"BASE\":1,\"CMND\":\"ADCParam 2,11200,10000,3950 | Sleep 0 | BuzzerPWM 1\"}

After a reboot of tasmota your screen will light up with the stock display firmware.

"},{"location":"prepare_nspanel/#upload-berry-driver-to-tasmota","title":"Upload Berry Driver to Tasmota","text":"

Go to Consoles > Console in Tasmota and execute the following command:

Backlog UrlFetch https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be; SetOption151 0;Restart 1\n

This will download the autoexec.be file from the repository and restart tasmota.

Note: The command is also disabling matter to free up memory, as it's most likely not used by any homeassistant users anyway. (Matter could cause memory issues during flashing of the Nextion Screen, but you can still enable it if you need to.)

"},{"location":"prepare_nspanel/#flash-firmware-to-nextion-screen","title":"Flash Firmware to Nextion Screen","text":"

Due the limitations of Berry, it's not possible to download the tft file directly from github, so I'm also renting a small server where you can download the file via HTTP.

Use the one following commands in the tasmota console (not berry console) to flash the latest release from this repository:

EU Version: FlashNextion http://nspanel.pky.eu/lui-release.tft

US Version Portrait: FlashNextion http://nspanel.pky.eu/lui-us-p-release.tft

US Version Landscape: FlashNextion http://nspanel.pky.eu/lui-us-l-release.tft

After sending the command, the screen should show a progress bar. The flashing progress takes around 5 minutes.

Note: For the US Version Users - keep in mind that you need to add the model config option to your apps.yaml later, more details on config overview page

Alternatively you can use your own webserver or the one build into HomeAssistant: Upload the nspanel.tft from the lastest release to a Webserver (for example www folder of Home Assistant) and execute the following command in Tasmota Console. (Development Version: [tft file from HMI folder](HMI/nspanel.tft)) **Webserver must be HTTP, HTTPS is not supported, due to limitations of berry lang on tasmota** `FlashNextion http://ip-address-of-your-homeassistant:8123/local/nspanel.tft`"},{"location":"prepare_nspanel_ioBroker/","title":"Prepare NsPanel","text":""},{"location":"prepare_nspanel_ioBroker/#flash-tasmota-to-your-nspanel","title":"Flash Tasmota to your NSPanel","text":"

You need to connect to your nspanel via serial and flash tasmota tasmota32-nspanel.bin to your NSPanel. You can use the Tasmota Web Installer to do so. Tasmota Web Installer

Checkout Blakadders Template Repo for more information on flashing, do not use the autoexec.be from this page. NSPanel Page of the Tasmota Template Repository

If you prefer EspHome over Tasmota, you can use this thrid party esphome component, which is replacing tasmota and the berry driver of this project. ESPHome component

"},{"location":"prepare_nspanel_ioBroker/#configure-tasmota-template-for-nspanel","title":"Configure Tasmota Template for NSPanel","text":"

Configure the NSPanel template for Tasmota. (Go to Configuration and Configure Other and paste the template there, make sure to tick the activate checkbox)

You can use the following template or copy the one on the Tasmota Template Repo Site.

{\"NAME\":\"NSPanel\",\"GPIO\":[0,0,0,0,3872,0,0,0,0,0,32,0,0,0,0,225,0,480,224,1,0,0,0,33,0,0,0,0,0,0,0,0,0,0,4736,0],\"FLAG\":0,\"BASE\":1,\"CMND\":\"ADCParam 2,11200,10000,3950 | Sleep 0 | BuzzerPWM 1\"}

After a reboot of tasmota your screen will light up with the stock display firmware.

"},{"location":"prepare_nspanel_ioBroker/#upload-berry-driver-to-tasmota","title":"Upload Berry Driver to Tasmota","text":"

Go to Consoles > Console in Tasmota and execute the following command:

Backlog UrlFetch https://raw.githubusercontent.com/joBr99/nspanel-lovelace-ui/main/tasmota/autoexec.be; Restart 1\n
"},{"location":"prepare_nspanel_ioBroker/#flash-firmware-to-nextion-screen","title":"Flash Firmware to Nextion Screen","text":"

Due the limitations of Berry, it's not possible to download the tft file directly from github, so I'm also renting a small server where you can download the file via HTTP.

Use the one following commands to flash the latest release from this repository, just execute the following Command in Tasmota:

EU Version: FlashNextion http://nspanel.pky.eu/lui-release.tft

US Version Portrait: FlashNextion http://nspanel.pky.eu/lui-us-p-release.tft

US Version Landscape: FlashNextion http://nspanel.pky.eu/lui-us-l-release.tft

Alternatively you can use your own webserver: Upload the nspanel.tft from the lastest release to a Webserver and execute the following command in Tasmota Console. **Webserver must be HTTP, HTTPS is not supported, due to limitations of berry lang on tasmota** `FlashNextion http://ip-address-of-your-webserver:8123/local/nspanel.tft`"},{"location":"subpages/","title":"Subpages","text":""},{"location":"subpages/#subpages","title":"Subpages","text":"

You can configure entities with with the prefix navigate, that are navigating to cards, in case it's hidden card, the navigation items will change and the arrow is bringing you back to the previous page.

          - entity: navigate.testKey\n

will allow you to navigate to a cardGrid page with the configured key testKey

    hiddenCards:\n      - type: cardGrid\n        title: Exmaple Grid\n        entities:\n          - entity: light.test_item\n        key: testKey\n
"},{"location":"subpages/#override-status-of-navigation-items","title":"Override Status of Navigation Items","text":"

You can override the status of navigation items, to make them look like different entities.

          - entity: navigate.testKey\n            status: climate.test\n
"},{"location":"subpages/#override-navigation-items-itself","title":"Override Navigation Items itself","text":"
    cards:\n      - type: cardGrid\n        title: Wohnzimmer\n        navItem1:\n          entity: light.bad_lights\n        navItem2:\n          entity: light.bad_lights\n        entities:\n

This can be used to add an home button to your subpages:

    cards:\n      - type: cardGrid\n        title: Home\n        key: home\n        entities:\n          - entity: light.bad\n\n    hiddenCards:\n      - type: cardGrid\n        title: Wohnzimmer\n        navItem2:\n          entity: navigate.home\n          icon: mdi:home\n        entities:\n          - entity: light.kitchen\n
"}]} \ No newline at end of file diff --git a/stable/sitemap.xml b/stable/sitemap.xml index 21e127c6..a1e72c93 100644 --- a/stable/sitemap.xml +++ b/stable/sitemap.xml @@ -2,112 +2,112 @@ https://jobr99.github.io/nspanel-lovelace-ui/stable/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/card-alarm/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/card-climate/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/card-entities/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/card-grid/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/card-media/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/card-power/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/card-qr/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/card-unlock/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/config-overview/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/config-screensaver/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/configure_mqtt/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/entities/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/faq/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/hmi-serial-protocol/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/iobroker-install/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/notifications/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/phys-btn/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/prepare_ha/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/prepare_nspanel/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/prepare_nspanel_ioBroker/ - 2024-03-29 + 2024-03-30 daily https://jobr99.github.io/nspanel-lovelace-ui/stable/subpages/ - 2024-03-29 + 2024-03-30 daily \ No newline at end of file diff --git a/stable/sitemap.xml.gz b/stable/sitemap.xml.gz index 7b14bb0e..b88c8527 100644 Binary files a/stable/sitemap.xml.gz and b/stable/sitemap.xml.gz differ