NSPanel-Lovelace-UI Next Level

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

Current Release
1.7.0
Developer
ticaki
License
MIT

nspanel-lovelace-ui adapter for ioBroker

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

Short Description

The NSPanel Lovelace UI is an alternative user interface for the Sonoff NSPanel, specifically designed for integration with iobroker. It typically relies on Tasmota (firmware) and MQTT (messaging protocol) to provide custom controls and displays directly on the NSPanel's small touchscreen.

What is the NSPanel?

The Sonoff NSPanel is a smart wall switch with:

  • two physical relay switches
  • a 3.5-inch touchscreen
  • temperature and brightness sensors

It was originally developed for the eWeLink app, but can be integrated much more powerfully with ioBroker using alternative firmware

What does the "NSPanel Lovelace UI" do?

With this custom UI, you can:

  • Display Lovelace-like Cards on the NSPanel
  • Display sensor values ​​(e.g., temperature, humidity)
  • Control scenes and automations
  • Control lights, thermostats, and other devices directly on the screen

Installation & Questions

Adapter Wiki: https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/wiki
Adapter Community (ioBroker Forum): Forum


The following HMI components are already integrated into the NSPanel adapter:

HMI Cards

  • screensaver
  • screensaver2
  • screensaver3
  • cardChart
  • cardLChart
  • cardLChart2 (new - in progress)
  • cardEntities
  • cardSchedule
  • cardGrid
  • cardGrid2
  • cardGrid3
  • cardThermo
  • cardMedia
  • cardUnlock
  • cardQR
  • cardAlarm
  • cardPower

HMI Popups

  • popupInSel
  • popupFan
  • popupThermo
  • popupNotify
  • popupShutter
  • popupShutter2
  • popupLight
  • popupLight2
  • popupTimer
  • popupSlider
  • popupColor (new - in progress)

Buzzer Control

The adapter supports buzzer control for NSPanel devices using the Tasmota Buzzer command. This enables button sounds, urgent message notifications, and general buzzer control.

Prerequisites

To use the buzzer functionality, ensure your NSPanel Tasmota firmware has SetOption111 1 enabled. This uses BuzzerPwm for piezo buzzer frequency output instead of on/off signal.

Usage Methods

1. State-based Control

Each panel has a buzzer control state: panels.{panelName}.cmd.buzzer

// Set buzzer command (tone, duration, count, frequency)
setState('nspanel-lovelace-ui.0.panels.Panel1.cmd.buzzer', '1,2,3,0xF54');

// Examples:
setState('nspanel-lovelace-ui.0.panels.Panel1.cmd.buzzer', '1'); // Single beep
setState('nspanel-lovelace-ui.0.panels.Panel1.cmd.buzzer', '1,5'); // Longer beep
setState('nspanel-lovelace-ui.0.panels.Panel1.cmd.buzzer', '2,3,5'); // 5 beeps

2. SendTo Interface

// Basic buzzer command
sendTo('nspanel-lovelace-ui.0', 'buzzer', {
    panel: 'panelTopic',
    command: '1,2,3,0xF54',
});

// Button feedback sound
sendTo('nspanel-lovelace-ui.0', 'buzzer', {
    panel: 'kitchen_panel',
    command: '1',
});

// Urgent notification
sendTo('nspanel-lovelace-ui.0', 'buzzer', {
    panel: 'living_room',
    command: '3,5,10,0x800', // High-pitched, multiple beeps
});

Buzzer Command Format

The buzzer command follows Tasmota's format: tone,duration,count,frequency

  • tone: 1-4 (tone type)
  • duration: 1-10 (duration units, ~100ms each)
  • count: 1-255 (number of beeps)
  • frequency: 0x100-0xFFFF (piezo frequency in hex)

Examples:

  • 1 - Single short beep
  • 1,5 - Single longer beep
  • 2,3,5 - 5 medium beeps with tone 2
  • 1,2,3,0xF54 - 3 short beeps with custom frequency

Changelog

WORK IN PROGRESS

  • (ticaki) chart pages: the tab "Page Chart" is gone - its pages are moved into the page configuration (tab PageConfig) at adapter start and the old table is deleted; a name already used by another page gets the suffix _chart
  • (ticaki) chart pages: migrated pages keep their navigation from the script for now (deprecated, the editor shows a hint) until a navigation is assigned in the admin - script version 0.21.4 marks ScriptConfig.PageChart as deprecated
  • (tt-tom17) web panel: on a grid card a short tap on a tile switches it and holding the tile opens its detail popup, like on a real panel - a light tile with a colour role (rgb, rgbSingle, rgbThree, hue, ct, dimmer) opened the popup on a tap and was switched when held
  • (tt-tom17) a panel switched off via panels.<id>.cmd.activated is now left alone at adapter start - it no longer receives a restart request over http
  • (tt-tom17) a switched off panel reports the status deactivated instead of keeping the status of the previous run, so the panel overview no longer shows it as running
  • (tt-tom17) switching cmd.activated is confirmed at the panel again - the acknowledgement went to panels.controller.cmd.activated before
  • (ticaki) screensaver: the time no longer stops when other values on the screensaver change often - a trigger arriving within the update throttle was replaced by the first one and the minute update of the clock got lost
  • (tt-tom17) cmd.hideCards keeps its stored value at adapter start - it was overwritten with the value of cmd.activated
  • (ticaki) a configuration script is no longer required: a panel without a script starts with the admin configuration only (empty start page as fallback) instead of being skipped or pausing the adapter

1.7.0 (2026-10-25)

  • (ticaki) web panels: the panel UI in a web browser via http://:8090/, no Tasmota needed - one web panel per address, all browsers on it stay in sync (new admin tab "Web panels")
  • (ticaki) web panels: a real panel can be opened in the browser - the clone navigates on its own and shares the states tree panels.<id> with the panel
  • (ticaki) web panels: standalone web panels without hardware - "Add web panel" in the panel overview (name, topic, model), configured by topic like a real panel
  • (ticaki) web panels: optional PIN (webPin) for all web panels, asked once per browser; HTTPS with the ioBroker certificates (webSecure); a FIDO2 security key can replace the PIN (HTTPS only)
  • (ticaki) web panels: look of the HMI - Noto Sans, Nextion font sizes, all page types, popups, the four screensaver layouts and the boot animation
  • (ticaki) web panels: a lost connection to the adapter is shown (greyed out page), the browser reconnects after an adapter restart on its own
  • (ticaki) admin: a button opens the web panel of a panel in a new tab (Maintain, panel settings, panel info), the host name of the links is configurable (webHost)
  • (ticaki) screensaver: the indicator buttons (and the state buttons.indicator-N) work again when the screensaver is the first page of the configuration
  • (ticaki) screensaver: a tap on an indicator sets buttons.indicator-N again when the indicators do not act as buttons, and the command of the indicator runs once instead of twice (a switch was flipped back at once)
  • (ticaki) a panel that is offline gets the startup page offered every 5 s again (the panel loop never rescheduled itself)
  • (ticaki) script config: fontSize: 0 on a grid item is no longer ignored

1.6.0 (2026-10-24)

  • (ticaki) panel: tapping the screensaver several times no longer ends in a black page - a resent page got its pageType but no content
  • (ticaki) template text.battery.bydhvs: charging icon is now shown when the battery is charging (negative power)
  • (ticaki) admin screensaver: notifications (bell next to the gear) - headline, text, states with condition, priority, dismiss group and buzzer
  • (ticaki) admin screensaver: one notification list shared by all screensavers - a checkbox switches a notification on per screensaver (switched on ones first, then by priority)
  • (tt-tom17) admin: the credential selection (MQTT, Tasmota WebUI, wifi password of a QR page) shows its default use login / password field again instead of an empty field
  • (tt-tom17) admin: global settings - the weather instance is visible again; the list of instances is loaded when the page opens and not only when the field is opened, and a stored instance stays visible even if its adapter is gone

1.5.0 (2026-10-20)

  • (ticaki) screensaver: weather forecast items (2 values) no longer lose icon and weekday when the temperature is 0°
  • (ticaki) panel: a repeated acknowledgement from tasmota (bad wifi, mqtt broker like mosquitto 2) no longer drops the next message - e.g. screensaver colors and weather updates got lost
  • (ticaki) mqtt: no overlapping subscriptions at the broker anymore, so every message arrives only once
  • (ticaki) templates: brightsky bottom items show the hourly weather icon again (brightsky sets role text on hourly.xx.icon), unknown weather icons fall back to alert-circle-outline
  • (tt-tom17) admin: the MQTT login of an external broker, the Tasmota WebUI password and the wifi password of a QR page can come from the central credentials (Admin → System settings → Credentials). Optional - without a selection the fields keep working as before. Only the id is stored; changed values restart the adapter, renaming a credential does not
  • (tt-tom17) fix: the Tasmota WebUI password field of the MQTT settings stored the change event instead of the typed text

1.4.0 (2026-10-14)

  • (tt-tom17) admin: new tab Screensaver - configure the screensaver without script: version (standard / alternate / advanced / easyview), the panels that use it, every place of the card with its own dialog (state or page item template, icons incl. icon per value range, colors, value, text, indicator action), MR icons, clock and date format, weather instance, rotation time, swipe and indicator buttons. The entry replaces the screensaver of the script for the listed panels. Documentation doc/de|en/Screensaver-Admin.md
  • (ticaki) admin: page configuration - panel filter All panels and new page type Main pages; a field label cut off with … shows its full text on mouse over

1.3.0 (2026-10-13)

  • (ticaki) cardMedia: support for the squeezeboxrpc adapter (Logitech Media Server) – media id squeezeboxrpc.X.Players.<name>; speaker grid to sync other rooms (control follows the sync master), group volume changes every member by the same amount, 3-step shuffle, seek via logo, favorites, saved playlists (requested from the LMS) and current playlist
  • (ticaki) fix: a page main in the panel script was reported as coming from the global script configuration when the global configuration also has a page main (log message and colour in the admin navigation view); the page of the panel script was used, only its origin was wrong
  • (tt-tom17) admin: thermostat pages (cardThermo2) can be created in the PageConfig tab like the other page types. The editor draws the page like the panel: tabs for up to eight heat circuits (an airCondition channel gives two), a click on the headline, the set temperature, the value lines or the mode text opens the settings of that spot (alias channel or single data points, headline, min/max/step, icons, colors, units, mode list, circuit icon), the nine slots around the ring (the ninth between - and +) show the real order of the panel - selector slots, the buttons the adapter generates from the alias, then the configured items, each bound to one heat circuit or to all (new field Heat circuit in the item dialog, filter of the script), with paging and the sortOrder of the slots. The admin page goes through the same code as the script page (PageThermo2.getPage), so the result on the panel is identical
  • (tt-tom17) fix: the MAINTAIN indicator of cardThermo2 was added twice to the page items

1.2.0 (2026-10-11)

  • (tt-tom17) fix: the item role lock accepts sensor.lock as role of the ACTUAL state in addition to state; before, an ACTUAL state with sensor.lock was skipped and the item silently showed the SET state instead. The log now reports when a channel falls back to its alternate state (e.g. ACTUAL → SET)
  • (tt-tom17) admin: chart pages (column and line) can be created in the PageConfig tab like the other page types; the page gets its own editor with chart type, color, data source (script states or a history/sql/influxdb instance), range, factor, x-axis ticks and labels. The classic way (script page plus the Page Chart tab) keeps working, both share one code path in the adapter. The DB instance is stored in the short form (influxdb.0); the alive check accepts both forms. The history query now asks for averages (bar: one per hour, line: 5-minute grid) instead of raw values, the x-axis is computed from the time stamps, line values keep one decimal
  • (tt-tom17) fix: the line chart scales large values automatically — the panel prints a y-axis tick with at most two characters, so 152 W used to show up as "15"; values are now divided by 10, 100, … until the ticks fit and the y-axis label shows the factor (e.g. W x10). The y-ticks use round 1-2-5 steps from the minimum to the maximum of the data; the former two extra ticks below the minimum are gone — the panel never showed them, but they forced the factor on a winter day (-5 … 3 °C ended up as °C x10)
  • (tt-tom17) admin: the timezone field of the panel setup sits in the same row and has the same width as the other fields again
  • (tt-tom17) admin: light items with the roles rgbSingle, rgb, ct and hue get a Mode list dialog in the item editor to configure inSel_Alias (a writable string state) and modeList (one entry per line); items with the role select get the same dialog with the list only, they select through the channel's SET state and, without a list, the adapter uses its common.states. The dialog checks the state, warns about ? in entries, about more than 48 entries and about lists longer than 900 characters, and can take the list from the state's common.states (a state with own common.states is listed by the adapter directly from them, the mode list is only a fallback); the Color Settings and Mode list buttons turn green once they hold data
  • (tt-tom17) fix: the popup of a select item with a configured mode list showed the raw value of ACTUAL (the index) as current mode instead of the list entry, so no entry was marked; the entry is looked up by index now, label?value entries by their value
  • (tt-tom17) fix: selecting an entry of a mode list configured for a select item wrote the index into the read-only ACTUAL state (Forbidden write attempts on a read-only state); the writeable SET state is used now, light items are unaffected because both point to inSel_Alias

1.1.2 (2026-09-18)

  • (ticaki) fix: a panel could get stuck in "wait for connection" after a WiFi drop or a burst of screensaver updates, because the display's serial buffer overflowed. The adapter now spaces out messages to the display, sends screensaver updates at most every 3 seconds, and restarts tasmota automatically when the display reports an overflow

1.1.1 (2026-09-16)

  • (tt-tom17) fix: a cardPower page created in the admin tab showed white icons although the color scale was switched on. The scale was only built when both its lower and its upper bound had been typed in; a bound that was left at its displayed default was never stored. The defaults of the classic accordion (0 / 10000 / 0) apply now
  • (tt-tom17) admin: a newly added power slot of a cardPower page stores its color and speed scale bounds explicitly (0 / 10000 / 0 and 0 / 10000), the same way the classic accordion did, instead of only displaying them
  • (tt-tom17) the expert tab Navigation Overview has been removed. It never made it into productive use; the navigation of a panel is configured in its script or in the Navigation Flow tab
  • (ticaki) a page named main in the global script configuration is used as start page of every panel that has none of its own. That is unchanged, but it is now logged and the navigation view of the admin marks such pages as page from the global script configuration
  • (tt-tom17) admin: the navigation assignment panel can show system pages (the ///-prefixed ones) in the prev/next/parent/home dropdowns via a new checkbox; ///unlock is always listed
  • (tt-tom17) admin: the navigation flow tab remembers the last selected panel and restores it on reload, instead of always jumping back to the first one
  • (tt-tom17) fix: the info panel of the navigation flow left the icon row out whenever the icon was read from a state instead of being set as a constant. It now shows the icon the panel really displays - the current value of that state, together with a hint which state it comes from, or empty when the state holds nothing
  • (tt-tom17) fix: setting the prev or next of a page to the service page ///unlock in the admin had no effect. The dropdowns offer page names, the adapter resolves navigation node names, and the service entry point is the one place where the two differ - it is mapped now

1.1.0 (2026-09-06)

  • (ticaki) fix: a panel card marked with Check! was hard to read - white text on the beige card in the dark themes, almost invisible input frames in the new light one. The icons of the icon picker were invisible in the blue theme
  • (ticaki) fix: passwords no longer reach the log in plain text
  • (ticaki) fix: setting a panel up failed with Invalid response from adapter or the message from the admin is incomplete. It runs as three steps now and shows how far it got
  • (ticaki) fix: the timezone dropdown froze the browser, is a searchable field now, and the chosen zone reaches the panel at last
  • (ticaki) fix: a switched off panel was marked as such in english and german only, and hard to tell from an offline one
  • (ticaki) the start page can now be set in the admin: a checkbox marks any admin page as start page, it replaces the one from the configuration script and is marked with (main)
  • (ticaki) a panel no longer needs a page named main in the configuration script, so it can be set up in the admin alone (script version 0.21.1)
  • (ticaki) navigation flow: nodes are coloured by origin, pages linked with next and prev share one edge, a long press target and a navigation target read from a state get a connection of their own, and hovering or clicking highlights what belongs together
  • (ticaki) navigation flow: an option shows the states and channels each page works with as nodes of their own, with an info panel listing what a page item makes of them
  • (ticaki) navigation flow: the page info starts with the page name and its headline and links to the page configuration of an admin page
  • (ticaki) admin: the navigation assignment marks a navigation target that does not exist on an assigned panel
  • (ticaki) fixed: replacing a script page from the admin tore the navigation apart and could cut off the access to the service pages
  • (ticaki) fixed: a panel without its own start page could show the start page of another panel
  • (ticaki) fixed: after sending the configuration script the reloaded panel lost the pages of all other panels until the adapter was restarted
  • (ticaki) fixed: a cardQR, cardAlarm or cardUnlock page in the configuration script stopped all following pages from being created
  • (ticaki) fixed: the page configuration of a cardTrash page did not open when the entry carries no waste types yet
  • (ticaki) fixed: the state mainNavigationPoint was not translated

1.0.1 (2026-09-01)

  • (tt-tom17) cardChart (line): the x-axis no longer uses a fixed 24 h window, it now follows the configured hours range
  • (tt-tom17) admin: the trash page now shows a status line after an .ics upload, including the number of appointments found
  • (ticaki) admin: fixed the target page selection in the page item dialog – the dropdown stayed empty and could crash the page config tab (null is not an object (evaluating 'x.current.removeAttribute'))

1.0.0 (2026-08-18)

  • (copilot) BREAKING: Adapter requires node.js >= 22 now
  • (GermanBluefox) BREAKING: Admin UI migrated to React 19 / MUI 9 / @iobroker/gui-components – requires admin 8.0.0 or newer
  • (ticaki) cardPower configuration migrated to the new react based page config tab
  • (ticaki) admin: previous/next buttons in the navigation assignment panel were swapped
  • (ticaki) berry driver generation 11 added (beta), the automatic berry driver update was removed

0.17.8 (2026-04-25)

  • (ticaki) fixed: Cannot read properties of undefined (reading 'trim')

0.17.7 (2026-04-24)

  • (ticaki) Added panels.{id}.cmd.activated state to enable/disable a panel; toggle visible in TabMaintain and TabPanelinfo admin UI
  • (ticaki) Fixed textSize/fontSize value 0 being rejected by the admin and ignored in some cases

0.17.6 (2026-04-22)

  • (ticaki) Added useValueConditions to pageItem. This can be used to set conditions for when the value and when the icon should be displayed.
  • (ticaki) textSize=0 was rejected by the admin

0.17.5 (2026-04-18)

  • (ticaki) When the panel was restarted by the script, the model was set to ‘eu’

0.17.4 (2026-04-16)

  • (ticaki) The admin navigation has been assembled incorrectly.
  • (ticaki) Improved selection of custom button IDs
  • (tt-tom17) fixed: ChannelConfigDialog bottom cut off on small laptop screens (save/color buttons not reachable)

0.17.3 (2026-04-14)

  • (ticaki) fixed: textSize/fontSize 0-5 and tooltip, us-p admin layout, not update emu berry, textSize for custom item, activate trigger for custom id

0.17.2 (2026-04-13)

  • (ticaki) bugfix: pageitem name / icon as id for most roles / textSize

0.17.1 (2026-04-12)

  • (ticaki) bugfix: longpress

0.17.0 (2026-04-12)

  • (tt-tom17) added: ChannelColorDialog
  • (ticaki) added: customItem, longPress, targetPageLongPress, icons as id, div.

0.16.2 (2026-04-09)

  • (ticaki) fixed: channel duplicate error
  • (tt-tom17) fixed: ChannelConfigDialog – error messages (datapointErrors, datapointDuplicates, checkResult) are now properly reset when reopening the dialog

0.16.1 (2026-04-09)

  • (ticaki) The native configuration in pageitems is available to everyone. It corresponds exactly to the script configuration for a page item.

0.16.0 (2026-04-09)

  • (ticaki) feat: new visual page editor in the admin UI – configure cardGrid, cardGrid2, cardGrid3, cardEntities and cardSchedule pages including their items directly in the admin.

0.15.4 (2026-04-04)

  • (tt-tom17) fixed: iCal / trash page – date display year format (2-digit vs. 4-digit) was swapped for short and long item lists
  • (ticaki) fixed: panel rule timer increased from 120 s to 140 s to reduce false "panel disconnected" events after startup
  • (ticaki) fixed: setPopupNotification now returns { error: 'No Panels Online' } via callback when no panel is online instead of silently ignoring the call

0.15.2 (2026-03-26)

  • (tt-tom17) added: message dialog when berry installation fails due to missing internet access on the panel
  • (ticaki) added: improved offline detection for panels
  • (ticaki) improved: version info caching (15–60 min) to reduce external API calls
  • (ticaki) fixed: admin panel info tab now displays state labels in the correct system language

0.15.1 (2026-03-18)

  • (ticaki) added: internet access check for Tasmota device before berry installation

0.15.0 (2026-03-16)

  • (ticaki) added: ScreensaverEntityFillIfBelowMin – fills screensaver slots when too few items are visible (default: true)
  • (ticaki) fixed: various bug fixes and improvements in the admin UI

0.14.0 (2026-03-14)

  • (tt-tom17) refactored: timezone selection code moved from adapter to admin handler (internal, no UI changes)
  • (ticaki) added: TempOffset configurable in objects and admin tab (#629)
  • (ticaki) added: "Update scripts for all panels" button in Maintain tab

0.13.4 (2026-03-07)

  • (ticaki) added: buttonOnDelayOff / buttonOffDelayOn / buttonDelayOn / buttonDelayOff modes for HW button actions

0.13.3 (2026-03-04)

  • (ticaki) fixed critical bug when using internal MQTT server

0.13.2 (2026-03-02)

  • (ticaki) Maintain table: proper semver comparison for Tasmota and TFT versions (upgrade vs. downgrade detection)
  • (ticaki) TabPanelinfo: openTasmotaConsole button fixed
  • (ticaki) Some minor fixes (settings model, tab model, field types)

0.13.1 (2026-03-01)

  • (ticaki) New Admin tab for quick overview and minor settings
  • (tt-tom17)(ticaki) Panel status system with badge (online/offline/setup/flashing states)
  • (tt-tom17) Panel management improvements (IP selector, delete/edit panels, init button)
  • (tt-tom17) MQTT configuration UI design improvements
  • (tt-tom17)(ticaki) Various fixes (badge flickering, tab focus, jsonConfig, translations, hex colors)

0.12.1 (2026-02-20)

  • (ticaki) fixed: brightsky template
  • (ticaki) fixed: malfunction of the update icon in the screensaver
  • (ticaki) fixed: When sending the script, the restart was confirmed with the wrong panel name.

0.12.0 (2026-02-19)

  • (ticaki) NSPanel TFT version is displayed correctly depending on the model.
  • (ticaki)(tt-tom17) Option to write Tasmota telemetry data into states.
  • (tt-tom17) Admin-Tab globalSetting convert to React
  • (tt-tom17) Admin-Tab Maintain convert to React
  • (tt-tom17) Add icon selector to trash entries

0.10.0 (2026-01-17)

  • (ticaki) Confirmation click for role button
  • (ticaki) Some duplicate unique names were overlooked during script transfer.
  • (tt-tom17) bug fixes for role 'blind'
  • (ticaki) minor bug fixes

0.9.1 (2025-11-29)

  • (ticaki) Fixed: Under certain circumstances, the adapter crashes when a pop-up is called.

0.9.0 (2025-11-21)

  • (armilar) HMI: long press added (v5.1.1)
  • (ticaki) Replace double-click with long press
  • (ticaki) pageItem type=button long press added
  • (ticaki) custom pageitem added
  • (ticaki) script ID is found uniquely

0.8.1 (2025-11-15)

  • (ticaki) first Version at latest
  • (ticaki) New attempt to get MQTT TLS keys into the backup

0.8.0 (2025-11-13)

  • (Armilar) IMPORTANT: update to TFT Version 5.1.0
  • (ticaki) pagePopup added
  • (ticaki) color for brightsky favorit/bottom day fixed
  • (ticaki) unlock pin fail fixed

License

MIT License

Copyright (c) 2024-2026 ticaki github@renopoint.de
Copyright (c) 2024-2026 tt-tom17 tgb@kabelmail.de

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.