diff --git a/stable/prepare_nspanel/index.html b/stable/prepare_nspanel/index.html index ed5cf99c..c1f61cb2 100644 --- a/stable/prepare_nspanel/index.html +++ b/stable/prepare_nspanel/index.html @@ -471,17 +471,6 @@
If you prefer ESPHome over Tasmota, you can use this third-party ESPHome component, which replaces Tasmota and the Berry driver used in this project.
ESPHome Component
Downgrade your Tasmota to version 15.0.1 - in newer versions, flashing the display currently does not work.
-https://ota.tasmota.com/tasmota32/release-15.0.1/tasmota32-nspanel.bin
-Configure the NSPanel template for Tasmota. (Go to Configuration > Configure Other, paste the template there, and make sure to tick the Activate checkbox.)

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":"Localization (currently 40 languages)
Everything is dynamically configurable by a yaml config, no need to code or touch Nextion Editor
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":" 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 descriptiontype 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 descriptiontype 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 descriptiontype 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:
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 descriptiontype 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:
cards:\n - type: cardMedia\n entity: media_player.spotify\n List of supported config keys of this card:
key optional type default descriptiontype 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 descriptiontype 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 descriptiontype 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')}};;\"
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 descriptiontype 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 descriptionpanelRecvTopic 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.
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 descriptionentity 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:
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.
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.
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.
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.
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
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
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
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.
Restart AppDaemon
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
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\"}
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
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
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
color~background~tTime~timeAMPM~tDate~tMainText~tForecast1~tForecast2~tForecast3~tForecast4~tForecast1Val~tForecast2Val~tForecast3Val~tForecast4Val~bar~tMainTextAlt2~tTimeAdd
notify~heading~text
statusUpdate~icon1~icon1Color~icon2~icon2~icon2color~icon1font~icon2font
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
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~
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
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
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
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
entityUpdateDetail~entityName~*sliderPos*~2ndrow~textPosition~icon1~iconUp~iconStop~iconDown~iconUpStatus~iconStopStatus~iconDownStatus~textTilt~iconTiltLeft~iconTiltStop~iconTiltRight~iconTiltLeftStatus~iconTiltStopStatus~iconTiltLeftStatus~tiltPos
entityUpdateDetail~1~77
entityUpdateDetail~*internalName*~*tHeading*~*tHeadingColor*~*b1*~*tB1Color*~*b2*~*tB2Color*~*tText*~*tTextColor*~*sleepTimeout*~*font*~*alt_icon*~*altIconColor*
exitPopup
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~
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}
event,buttonPress2,pageName,bNext
event,buttonPress2,pageName,bPrev
event,buttonPress2,pageName,bExit,number_of_taps
event,buttonPress2,pageName,sleepReached
event,startup,version,model
event,buttonPress2,screensaver,exit - Touch Event on Screensaver
event,screensaverOpen - Screensaver has opened
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
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
event,pageOpenDetail,popupShutter,internalNameEntity
event,buttonPress2,internalNameEntity,positionSlider,50
event,buttonPress2,*internalName*,notifyAction,yes
event,buttonPress2,*internalName*,notifyAction,no
event,buttonPress2,*entityName*,tempUpd,*temperature*
event,buttonPress2,*entityName*,hvac_action,*hvac_action*
event,buttonPress2,internalNameEntity,media-back
event,buttonPress2,internalNameEntity,media-pause
event,buttonPress2,internalNameEntity,media-next
event,buttonPress2,internalNameEntity,volumeSlider,75
event,buttonPress2,internalNameEntity,actionName,code
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.
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:
Configuration on the left menu bar in Home Assistant Web UIDevices & ServicesIntegrationsHACS and click on ConfigureEnable AppDaemon apps discovery & tracking is checked, or check it and click SubmitNow, to install NSPanel Lovelace UI Backend with HACS, follow these steps:
HACS on the left menu bar in Home Assistant Web UIAutomations in the right panelExplore & download repositories in the bottom right cornerNSPanel, and click on NSPanel Lovelace UI Backend in the list that appearsDownload this repository with HACSDownload, and wait for HACS to proceed with the downloadYou need to connect to your NSPanel via serial and flash Tasmota using tasmota32-nspanel.bin. You can use the Tasmota Web Installer to do so.
Check out Blakadder's Template Repo for more information on flashing. Do not use the autoexec.be from that page. NSPanel Page of the Tasmota Template Repository
If you prefer ESPHome over Tasmota, you can use this third-party ESPHome component, which replaces Tasmota and the Berry driver used in this project. ESPHome Component
"},{"location":"prepare_nspanel/#downgrade-tasmota","title":"Downgrade Tasmota","text":"Downgrade your Tasmota to version 15.0.1 - in newer versions, flashing the display currently does not work.
https://ota.tasmota.com/tasmota32/release-15.0.1/tasmota32-nspanel.bin
"},{"location":"prepare_nspanel/#configure-tasmota-template-for-nspanel","title":"Configure Tasmota Template for NSPanel","text":"Configure the NSPanel template for Tasmota. (Go to Configuration > Configure Other, paste the template there, and make sure to tick the Activate checkbox.)
You can use the following template or copy the one from 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
This downloads the autoexec.be file from the repository and restarts Tasmota.
Note: This command also disables Matter to free up memory, as it's unlikely to be used by most Home Assistant users. (Matter can cause memory issues during flashing of the Nextion screen, but you can re-enable it later if needed.)
"},{"location":"prepare_nspanel/#flash-firmware-to-nextion-screen","title":"Flash Firmware to Nextion Screen","text":"Due to the limitations of Berry, it's not possible to download the TFT file directly from GitHub. A small server is available to download the file via HTTP.
Use one of the following commands in the Tasmota console (not the 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 process takes around 5 minutes.
Note for US users: You'll need to add the model config option to your apps.yaml later. More details can be found on the config overview page.
Alternatively, you can use your own web server or the one built into Home Assistant: Upload the nspanel.tft from the latest release to a web server (for example, the www folder of Home Assistant) and execute the following command in the Tasmota Console. (Development version: [TFT file from HMI folder](HMI/nspanel.tft)) **The web server must be HTTP. HTTPS is not supported due to Berry language limitations in 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
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"],"fields":{"title":{"boost":1000.0},"text":{"boost":1.0},"tags":{"boost":1000000.0}}},"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":"Localization (currently 40 languages)
Everything is dynamically configurable by a yaml config, no need to code or touch Nextion Editor
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":" 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 descriptiontype 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 descriptiontype 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 descriptiontype 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:
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 descriptiontype 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:
cards:\n - type: cardMedia\n entity: media_player.spotify\n List of supported config keys of this card:
key optional type default descriptiontype 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 descriptiontype 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 descriptiontype 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')}};;\"
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 descriptiontype 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 descriptionpanelRecvTopic 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.
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 descriptionentity 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:
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.
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.
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.
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.
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
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
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
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.
Restart AppDaemon
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
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\"}
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
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
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
color~background~tTime~timeAMPM~tDate~tMainText~tForecast1~tForecast2~tForecast3~tForecast4~tForecast1Val~tForecast2Val~tForecast3Val~tForecast4Val~bar~tMainTextAlt2~tTimeAdd
notify~heading~text
statusUpdate~icon1~icon1Color~icon2~icon2~icon2color~icon1font~icon2font
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
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~
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
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
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
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
entityUpdateDetail~entityName~*sliderPos*~2ndrow~textPosition~icon1~iconUp~iconStop~iconDown~iconUpStatus~iconStopStatus~iconDownStatus~textTilt~iconTiltLeft~iconTiltStop~iconTiltRight~iconTiltLeftStatus~iconTiltStopStatus~iconTiltLeftStatus~tiltPos
entityUpdateDetail~1~77
entityUpdateDetail~*internalName*~*tHeading*~*tHeadingColor*~*b1*~*tB1Color*~*b2*~*tB2Color*~*tText*~*tTextColor*~*sleepTimeout*~*font*~*alt_icon*~*altIconColor*
exitPopup
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~
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}
event,buttonPress2,pageName,bNext
event,buttonPress2,pageName,bPrev
event,buttonPress2,pageName,bExit,number_of_taps
event,buttonPress2,pageName,sleepReached
event,startup,version,model
event,buttonPress2,screensaver,exit - Touch Event on Screensaver
event,screensaverOpen - Screensaver has opened
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
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
event,pageOpenDetail,popupShutter,internalNameEntity
event,buttonPress2,internalNameEntity,positionSlider,50
event,buttonPress2,*internalName*,notifyAction,yes
event,buttonPress2,*internalName*,notifyAction,no
event,buttonPress2,*entityName*,tempUpd,*temperature*
event,buttonPress2,*entityName*,hvac_action,*hvac_action*
event,buttonPress2,internalNameEntity,media-back
event,buttonPress2,internalNameEntity,media-pause
event,buttonPress2,internalNameEntity,media-next
event,buttonPress2,internalNameEntity,volumeSlider,75
event,buttonPress2,internalNameEntity,actionName,code
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.
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:
Configuration on the left menu bar in Home Assistant Web UIDevices & ServicesIntegrationsHACS and click on ConfigureEnable AppDaemon apps discovery & tracking is checked, or check it and click SubmitNow, to install NSPanel Lovelace UI Backend with HACS, follow these steps:
HACS on the left menu bar in Home Assistant Web UIAutomations in the right panelExplore & download repositories in the bottom right cornerNSPanel, and click on NSPanel Lovelace UI Backend in the list that appearsDownload this repository with HACSDownload, and wait for HACS to proceed with the downloadYou need to connect to your NSPanel via serial and flash Tasmota using tasmota32-nspanel.bin. You can use the Tasmota Web Installer to do so.
Check out Blakadder's Template Repo for more information on flashing. Do not use the autoexec.be from that page. NSPanel Page of the Tasmota Template Repository
If you prefer ESPHome over Tasmota, you can use this third-party ESPHome component, which replaces Tasmota and the Berry driver used in 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 > Configure Other, paste the template there, and make sure to tick the Activate checkbox.)
You can use the following template or copy the one from 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
This downloads the autoexec.be file from the repository and restarts Tasmota.
Note: This command also disables Matter to free up memory, as it's unlikely to be used by most Home Assistant users. (Matter can cause memory issues during flashing of the Nextion screen, but you can re-enable it later if needed.)
"},{"location":"prepare_nspanel/#flash-firmware-to-nextion-screen","title":"Flash Firmware to Nextion Screen","text":"Due to the limitations of Berry, it's not possible to download the TFT file directly from GitHub. A small server is available to download the file via HTTP.
Use one of the following commands in the Tasmota console (not the 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 process takes around 5 minutes.
Note for US users: You'll need to add the model config option to your apps.yaml later. More details can be found on the config overview page.
Alternatively, you can use your own web server or the one built into Home Assistant: Upload the nspanel.tft from the latest release to a web server (for example, the www folder of Home Assistant) and execute the following command in the Tasmota Console. (Development version: [TFT file from HMI folder](HMI/nspanel.tft)) **The web server must be HTTP. HTTPS is not supported due to Berry language limitations in 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
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 00f34f7b..1d922237 100644
--- a/stable/sitemap.xml
+++ b/stable/sitemap.xml
@@ -2,90 +2,90 @@