NEWS
SONOFF NSPanel mit Lovelace UI
SONOFF NSPanel mit Lovelace UI
-
@tt-tom
Hallo Tom,
ich habe nun das so durchgeführt wie du es beschrieben hattest, die Datenpunkte werden auch neu angelegt und befüllt. Leider belibt die Anzeige am Panel aber leer.
Ist da noch was anzupassen?diese Meldungen kommen beim Start des NSPanels

Zeige mal bitte die ALIAS von einer Abfahrt.
Wobei mir die Fehlermeldung die du zeigst zu früh ist. Hier ist das Script noch beim Start ( Debugmodus und MQTT-Portcheck) hast du das PanelScrpit komplett ersetzt oder nur ein Teil??
-
Zeige mal bitte die ALIAS von einer Abfahrt.
Wobei mir die Fehlermeldung die du zeigst zu früh ist. Hier ist das Script noch beim Start ( Debugmodus und MQTT-Portcheck) hast du das PanelScrpit komplett ersetzt oder nur ein Teil??
@tt-tom
Vom PanelScript (4.3.1.5) wurden die oberen Kommentare und ab der Zeile "keine Änderungen mehr machen" ausgetauscht, der Rest blieb vom alten (4.3.1.1).Komisch finde ich auch, dass das Fenster mit der Verspätung kommt.
hier sind die alias


-
@tt-tom
Vom PanelScript (4.3.1.5) wurden die oberen Kommentare und ab der Zeile "keine Änderungen mehr machen" ausgetauscht, der Rest blieb vom alten (4.3.1.1).Komisch finde ich auch, dass das Fenster mit der Verspätung kommt.
hier sind die alias


da muss beim Kopieren was schief gelaufen sein. Hast du das Script im RAW Modus kopiert und eingefügt?
-
da muss beim Kopieren was schief gelaufen sein. Hast du das Script im RAW Modus kopiert und eingefügt?
@tt-tom
ich habe beide Scripte in Notepad++ gegeben und dann aus zwei ein neues. -
@tt-tom
ich habe beide Scripte in Notepad++ gegeben und dann aus zwei ein neues.hast du mal die Java-Instanz neu gestartet. Eventuell läuft da noch ein Phantom mit.
-
hast du mal die Java-Instanz neu gestartet. Eventuell läuft da noch ein Phantom mit.
@tt-tom
da ich auch dieses Problem habe, wurde der ganze IOB schon einigemale mit "iob restart" reseted -
@tt-tom
da ich auch dieses Problem habe, wurde der ganze IOB schon einigemale mit "iob restart" reseted@australien
okay, hast du dein Backup vom alten Script noch? Wenn ja dann kannst du dort mal folgende Passage ändern.liegt in der Funktion CreateEntity am ende der Funktion. es müssen halt die Datenpunkte angepasst werden.
case 'timeTable': type = 'text'; let itemFahrzeug:string = getState(pageItem.id + '.VEHICLE').val; let itemUhrzeit:string = getState(pageItem.id + '.ACTUAL').val; let itemRichtung:string = getState(pageItem.id + '.DIRECTION').val; let itemVerspätung:boolean = getState(pageItem.id + '.DELAY').val; -
@australien
okay, hast du dein Backup vom alten Script noch? Wenn ja dann kannst du dort mal folgende Passage ändern.liegt in der Funktion CreateEntity am ende der Funktion. es müssen halt die Datenpunkte angepasst werden.
case 'timeTable': type = 'text'; let itemFahrzeug:string = getState(pageItem.id + '.VEHICLE').val; let itemUhrzeit:string = getState(pageItem.id + '.ACTUAL').val; let itemRichtung:string = getState(pageItem.id + '.DIRECTION').val; let itemVerspätung:boolean = getState(pageItem.id + '.DELAY').val;@tt-tom
da ändert sich nicht.
Ich habe jetzt mal folgendes versucht, so wird was angezeigt, direkter DP// <PageItem>{ id: AliasPath + 'FahrplanAnzeiger.Haltestelle0.Abfahrt0'}, <PageItem>{ id: 'alias.0.NSPanel.FahrplanAnzeiger.Haltestelle0.Abfahrt0'},es wird anscheinend die id falsch zusammen gestellt.
-
@tt-tom
da ändert sich nicht.
Ich habe jetzt mal folgendes versucht, so wird was angezeigt, direkter DP// <PageItem>{ id: AliasPath + 'FahrplanAnzeiger.Haltestelle0.Abfahrt0'}, <PageItem>{ id: 'alias.0.NSPanel.FahrplanAnzeiger.Haltestelle0.Abfahrt0'},es wird anscheinend die id falsch zusammen gestellt.
@australien
ja, das ist ein Fehler den ich nicht beeinflussen kann. Die Variable AliasPath im Panel-Script hat einen anderen Wert, als die Variable im Fahrplan-Script.
Wenn du bei Beiden den gleichen Wert nutzt, kannst du auch die Variable beim PageItem nutzen.hast du denn jetzt keine Fehlermeldungen mehr beim Start?
Ist die Fahrplan-Seite deine Startpage? -
@australien
ja, das ist ein Fehler den ich nicht beeinflussen kann. Die Variable AliasPath im Panel-Script hat einen anderen Wert, als die Variable im Fahrplan-Script.
Wenn du bei Beiden den gleichen Wert nutzt, kannst du auch die Variable beim PageItem nutzen.hast du denn jetzt keine Fehlermeldungen mehr beim Start?
Ist die Fahrplan-Seite deine Startpage?@tt-tom
Aber der Gedankt lief in die richtige Richung.
Ich habe nun im Fahrplan_to_NSPanel den alias Pfad so geändert, wurde aus dem Panel Script copiert.// Pfad unter alias.0 Automatisch wird "FahrplanAnzeiger.HaltestelleX.AbfahrtX" durch das Script erzeugt // const DP_Alias: string = 'alias.0'; const DP_Alias: string = 'alias.0.' + DP_NSPanel.substring(13, DP_NSPanel.length);jetzt passt es. Ja, der Fahrplan ist die Startpage. Und keine Fehlermeldungen mehr!
Danke!!
-
@tt-tom
Aber der Gedankt lief in die richtige Richung.
Ich habe nun im Fahrplan_to_NSPanel den alias Pfad so geändert, wurde aus dem Panel Script copiert.// Pfad unter alias.0 Automatisch wird "FahrplanAnzeiger.HaltestelleX.AbfahrtX" durch das Script erzeugt // const DP_Alias: string = 'alias.0'; const DP_Alias: string = 'alias.0.' + DP_NSPanel.substring(13, DP_NSPanel.length);jetzt passt es. Ja, der Fahrplan ist die Startpage. Und keine Fehlermeldungen mehr!
Danke!!
ich danke dir, mir war nicht bewusst, das die Startpage schon so früh im Script Fehler meldet, auch wieder was gelernt.
-
nur zum Verständnis du nutzt die Button am Panel um die Relais direkt zu schalten?
du kannst das auch Softwareseitig machen, in dem du beide Taster auf Rule2 legst und dann im Script die Config button1 / button2 anpasst.
button1: { mode: 'toggle', // Mögliche Werte wenn Rule2 definiert: 'page', 'toggle', 'set' - Wenn nicht definiert --> mode: null page: null, // Zielpage - Verwendet wenn mode = page (bisher button1Page) entity: 'alias.0.NSPanel.1.Relay.1.SET', // Zielentity - Verwendet wenn mode = set oder toggle setValue: null // Zielwert - Verwendet wenn mode = set }, button2: { mode: 'toggle', // Mögliche Werte wenn Rule2 definiert: 'page', 'toggle', 'set' - Wenn nicht definiert --> mode: null page: null, // Zielpage - Verwendet wenn mode = page (bisher button2Page) entity: 'alias.0.NSPanel.1.Relay.2.SET', // Zielentity - Verwendet wenn mode = set oder toggle setValue: null // Zielwert - Verwendet wenn mode = set } -
Na bevor man daraus einen Pull Request macht sollte sich das wer ansehen der sich auskennt. Daher hier mal die Funktion:
Das ist das schöne an Github. PR kannste stellen aber freigeben muss man ihn nach dem Codecheck auch
. Außerdem kann man dann die Änderungen im Github super diskutieren und sieht die Änderungen sofort. Stört dann weniger die restlichen "nicht Entwickler" 
Der Code ist ja ausschließlich Optional und dürfte soweit ich das sehe auch funktionieren.
Stelle mal den Code so wie er ist als PR ein. @TT-Tom oder ich machen dann noch eine winzig kleine Änderung die sowieso auf dem Plan stand mit hinein.
Kleine Sache noch:
Das ist nicht der aktuellste Code aus dem Github... in der 4.3.1.5 ist dieser Teil abweichendcase 'timeTable': type = 'text'; let itemFahrzeug:string = getState(pageItem.id + '.VEHICLE').val; let itemUhrzeit:string = getState(pageItem.id + '.ACTUAL').val; let itemRichtung:string = getState(pageItem.id + '.DIRECTION').val; let itemVerspaetung:boolean = getState(pageItem.id + '.DELAY').val; if (Icons.GetIcon(itemFahrzeug) != "") { iconId = Icons.GetIcon(itemFahrzeug) }else { iconId='' }; iconColor = (!itemVerspaetung) ? rgb_dec565(colorScale0) : rgb_dec565(colorScale10); if (Debug) console.log('CreateEntity Icon role timeTable ~' + type + '~' + itemRichtung + '~' + iconId + '~' + iconColor + '~' + itemRichtung + '~' + itemUhrzeit); return '~' + type + '~' + itemRichtung + '~' + iconId + '~' + iconColor + '~' + itemRichtung + '~' + itemUhrzeit;Habe damit auch gleich die Stelle gefixt:

kam keine Antwort mehr...
Ich habe die Änderungen in die v4.3.1.6 gesetzt...

Wer die Funktionalität der erweiterten Alias-Gerätetypen in der Navi verwenden möchte, kann den unteren Teil des NSPanelTs.ts austauschen.
@all
Übrigens hab ich gleich auch noch einen Verbesserungswunsch den ich hier zur Diskussion stellen wollte. Und zwar geht es darum dass ich gerne hätte wenn ich zB auf auf einer GridPage auf die Temperatur vom zB. Wohnzimmer drücke dass sich dann eine subPage öffnet. Durch hinzufügen entsprechenden cases in der Funktion CreateEntity in der switch abfrage für die dynamischen navi icons hab ich das mal ausprobiert und in meinem Fall funktioniert das.geänderte Config damit es auch funktioniert:
let NSPanel_Temp = <PageGrid> { 'type': 'cardGrid', 'heading': 'Temperaturen', 'useColor': true, 'items': [ <PageItem>{ navigate: true, targetPage: 'NSPanel_TestSub', id: 'alias.0.devices.TempSchlafzimmer', unit: '°C', name: 'Schlafzimmer', offColor: MSRed, onColor: MSGreen, useValue: true, colorScale: {'val_min': 20, 'val_max': 25, 'val_best': 23} }, ] };Ansonsten hat das Update keine Auswirkungen auf bisherige Funktionalität...
-
SONOFF NSPanel Touch Display Switch
mit Lovelace UI und TASMOTA Firmware

Das Thema https://forum.iobroker.net/topic/50888/sonoff-nspanel/1542 wird hier jetzt fortgesetzt...
An alle begeisterten NSPanel'er
Dieser Thread soll sich jetzt ausschließlich mit den Fragen und Themen rund um das SONOFF NSPanel mit Lovelace UI beschäftigen.
Wie alles begann:
- 22.10.2021
Blakadder's Dokumentation der Dekodierung des NSPanel-Kommunikationsprotokolls und Einrichtung der Steuerung des Nextion-Bildschirms mit benutzerdefinierter Firmware.
https://blakadder.com/nspanel-hacking/ - 01.01.2022
Erste Gehversuche mit Blockly-Scripts auf der Original-Firmware nach einer ersten coolen Anleitung für den ioBroker von @haus-automatisierung. - ...
Funkstille auf allen Kanälen, da das Panel in der Originalsoftware einfach zu wenig Funktionalität hat. Ein Vergleich mit "Jugend forscht" wäre maßlos übertrieben... - 15.01.2022
@jobr99 Erstes POC von Lovelace Konzept mit ESPhome Komponente, da Nextion Upload Protcol unter tasmota nicht umsetzbar ist (berry tcpclient crashed ESP, HTTP Libary ist auf viel zu kleine Dateien limitiert) - 17.01.2022
peepshow-21 Erste implementierung von Nextion Upload Protocol 1.1 mit Workaround für HTTP Libary über Java Converter um tft files für tasmota vorzubereiten - 20.01.2022
s-hadinger fixt bug in berry tcpclient - 31.01.2022
Erste Version für HomeAssistant mit Nodered und Tasmota - 08.02.2022
@joBr99 Erste Implementierung von Nextion Upload Protokoll 1.2 in Berry basiertend auf HTTP Range Header Requests und lokalem Buffer (funktioniert nur mit -nspanel tasmota build uns PSRAM Support) - 12.02.2022
peepshow-21 Implementierung von Nextion Upload Protocol 1.2 mit vollständigem Download und "streaming" zum Nextion Screen während dem Download - 05.03.2022
@joBr99 Portierung von Node-Red Flow zu AppDaemon, da AppDaemon sich besser eignet zur Implementierung vom Backend - 13.03.2022
@joBr99 Erste Version von Lovelace Berry Driver basierend auf Upload Protocol Implementierung von peepshow-21, da diese etwas stabiler läuft mit zusätzlichem Error Handling - 30.03.2022
@joBr99 kommt mit der Info um die Ecke, dass es ein erstes Script v1.9.0 für den ioBroker von @Britzelpuf gibt. Zu diesem Zeitpunkt gab es bereits den Screensaver die Seitennavigation und die Möglichkeit eine Lampe, einen Dimmer eine Taste und eine Info, sowie die popUps für Licht (Brightness) und Shutter (Position) und einen Thermostaten zur Steuerung einzubinden. - 10.04.2022
@joBr99 Firmware got bigger and bigger with >15 Minutes Flashing Time for the tft file
Increased Flashing Speed of Berry Driver from 115200 to 921600 and added skipping to the End with HTTP Range Headers, resulted in faster display flashing - 11.04.2022
@Armilar macht seine ersten Änderungen auf github und hört seit dem nicht mehr auf, weitere Funktionen in das TSScript hinzuzufügen...
@joBr99 entwickelt die HMI und neue Funktionen für Home Assistant schneller als der Wind - und macht das Panel zur echten Bereicherung für jedes Smart Home

heute
- Eine der besten Community's die ich jemals erlebt habe. Hilfsbereit und kompetent wird jeder mit Hilfestellungen und Problemlösungen in kürzester Zeit versorgt.
Es macht großen Spaß zusammen mit euch...
VG
Armilar
Beispiele:










Features:
- cardEntities für die Unterstützung diverser Steuerelemente (siehe Beispiele)
- cardGrid (3x2-Raster) für die Unterstützung diverser Steuerelemente (siehe Beispiele)
- cardGrid2 (4x2) für die Unterstützung diverser Steuerelemente (siehe Beispiele)
- cardGrid3 (2x2) für die Unterstützung diverser Steuerelemente (siehe Beispiele)
- cardPower zur Visualisierung der Energieverteilung
- cardAlarm als Seite für Alarmanlagen
- cardMedia - der Media-Player (Diverse Adapter)
- cardThermo - Seite für Thermostat oder Klimaanlage
- cardQR - Seite mit QRCode zur Anzeige von WLAN-Informationen
- cardChart - Balkendiagramme
- Detailseiten für Leuchtmittel (Helligkeit, Temperatur und Farbe)
- Detailseite für Jalousien/Rollos (Position und Tilt)
- Detailseite für Ventilatoren
- Detailseite für Timer
- Auswahl Detailseite für Werteliste
- Bildschirmschonerseite mit Uhrzeit, Datum und Wetterinformationen oder/und Infos
- Multilingual (unterstützt über 40 Sprachen)
- Unbegrenzte Anzahl an Seiten und Unterseiten
- Abfallkalender
- Favoritenseiten
- etc.
NsPanel Lovelace UI ist eine Firmware für den Nextion-Bildschirm innerhalb des NSPanel.
Die allgemeine Idee ist, dass das Nextion-Display einen Seitenzähler durchläuft und der ESP32 dem Display sagt, was zu tun ist. Alles ist dynamisch durch Alias-Erstellung konfigurierbar, es ist nicht erforderlich, Nextion Editor zu programmieren. Neben der Seiten-Definition sind im ioBroker keine Programmierkenntnisse erforderlich. Es ist im ioBroker ebenfalls kein Lovelace-Adapter erforderlich.
Das Panel arbeitet mit Tasmota und MQTT. Um das Panel zu steuern und mit Inhalten von ioBroker zu aktualisieren, gibt es ein vordefiniertes TypeScript (TS) für den JavaScript-Adapter.
Aktuelle Wiki (Anleitung) für den ioBroker
https://github.com/joBr99/nspanel-lovelace-ui/wiki by @Kuckuckmann
NsPanelTs.ts (TypeScript) für ioBroker v4.9.3.X
zur Steuerung des SONOFF NSPanel mit dem ioBroker by @Armilar und @TT-Tom
https://github.com/joBr99/nspanel-lovelace-ui/tree/main/ioBroker
abgestimmt auf:- TFT 58 / v4.9.3 ( by @joBr99 / Armilar > 4.4.0)
- BerryDriver 9 ( by peepshow-21 (based on code by blakadder and s-hadinger))
- Tasmota 15.1.0 ( by Theo Arends ) --> Theo-Arends-Sonoff-MQTT-OTA
Projekt:
by @joBr99
- main (Home Assistant - Version und Nextion HMI): https://github.com/joBr99/nspanel-lovelace-ui by @joBr99
- ioBroker: https://github.com/joBr99/nspanel-lovelace-ui/tree/main/ioBroker by @Armilar (HA - Adaption)
Icon-Mapper:
- icon_mapping.ts:
https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/icon_mapping.ts
(TypeScript muss in global liegen)
Icons:
unter: https://docs.nspanel.pky.eu/icon-cheatsheet.html
Video-Tutorial:
https://www.youtube.com/watch?v=ZPLJk2ZLo_8 by @haus-automatisierung
Moin,
Kann mir jemand sagen, was das hier für Fehler sein können?javascript.0 (7454) script.js.NSPanel.Panel_Sauna: schedule(cron=*/null * * * * *): cannot create scheduleWeiterhin kommt auch folgende Warnung
warn javascript.0 (7454) script.js.NSPanel.Panel_Sauna: error at function CreateEntity: Cannot read properties of undefined (reading 'indexOf')Ich versuche grade in diesem riesigen Script klarzukommen....
VG
Schmidti - 22.10.2021
-
Moin,
Kann mir jemand sagen, was das hier für Fehler sein können?javascript.0 (7454) script.js.NSPanel.Panel_Sauna: schedule(cron=*/null * * * * *): cannot create scheduleWeiterhin kommt auch folgende Warnung
warn javascript.0 (7454) script.js.NSPanel.Panel_Sauna: error at function CreateEntity: Cannot read properties of undefined (reading 'indexOf')Ich versuche grade in diesem riesigen Script klarzukommen....
VG
SchmidtiStarte mal den Server durch... dann nochmal
-
Moin,
Kann mir jemand sagen, was das hier für Fehler sein können?javascript.0 (7454) script.js.NSPanel.Panel_Sauna: schedule(cron=*/null * * * * *): cannot create scheduleWeiterhin kommt auch folgende Warnung
warn javascript.0 (7454) script.js.NSPanel.Panel_Sauna: error at function CreateEntity: Cannot read properties of undefined (reading 'indexOf')Ich versuche grade in diesem riesigen Script klarzukommen....
VG
Schmidti -
Wäre mal interessant, wobei bzw. bei welchem Schritt die Fehler auftreten... Die sollten unabhängig voneinander sein.
Bei Fehler 1 wird einer von mehreren Timern erstellt und kommt ohne Inhalt eines Datenpunktes aus der 0_userdata zurück... Könnte z.B. ein Timer für die Helligkeit des Screensavers sein. Könnte aber auch jeder andere sein... Die Infos dazu reichen für eine Analyse nicht aus. Hast du etwas an der 0_userdata oder den Aliasen verändert?
Bei Fehler 2 wird wahrscheinlich ein Alias verwendet, den das Skript nicht unterstützt. Deshalb die Frage nach dem wann? wie? wobei?
Genaueres könntest du über die Scripteinstellung:

herausbekommen und posten...
Ich versuche grade in diesem riesigen Script klarzukommen....
Versuche ich auch ständig

-
@schmidti
Prüfe bitte mal diesen DatenpunktNSPanel_Path + 'ScreensaverInfo.entityChangeTimeWas steht da drin?
-
Wäre mal interessant, wobei bzw. bei welchem Schritt die Fehler auftreten... Die sollten unabhängig voneinander sein.
Bei Fehler 1 wird einer von mehreren Timern erstellt und kommt ohne Inhalt eines Datenpunktes aus der 0_userdata zurück... Könnte z.B. ein Timer für die Helligkeit des Screensavers sein. Könnte aber auch jeder andere sein... Die Infos dazu reichen für eine Analyse nicht aus. Hast du etwas an der 0_userdata oder den Aliasen verändert?
Bei Fehler 2 wird wahrscheinlich ein Alias verwendet, den das Skript nicht unterstützt. Deshalb die Frage nach dem wann? wie? wobei?
Genaueres könntest du über die Scripteinstellung:

herausbekommen und posten...
Ich versuche grade in diesem riesigen Script klarzukommen....
Versuche ich auch ständig

@armilar
Hier das komplette Protokoll nch einen Neustart des Scripts:15:53:25.379 info javascript.0 (7454) Stop script script.js.NSPanel.Panel_Sauna 15:53:26.390 info javascript.0 (7454) script.js.NSPanel.Panel_Sauna: compiling TypeScript source... 15:53:26.507 info javascript.0 (7454) script.js.NSPanel.Panel_Sauna: source code did not change, using cached compilation result... 15:53:26.524 info javascript.0 (7454) script.js.NSPanel.Panel_Sauna: setObjects enabled - create Alias Channels possible 15:53:26.525 info javascript.0 (7454) script.js.NSPanel.Panel_Sauna: weather alias for accuweather.0. already exists 15:53:26.527 error javascript.0 (7454) script.js.NSPanel.Panel_Sauna: schedule(cron=*/null * * * * *): cannot create schedule 15:53:26.530 info javascript.0 (7454) script.js.NSPanel.Panel_Sauna: registered 29 subscriptions, 6 schedules, 0 messages, 0 logs and 0 file subscriptions 15:53:26.556 info javascript.0 (7454) script.js.NSPanel.Panel_Sauna: Desired TFT Firmware: 51 / v4.1.4 15:53:26.556 info javascript.0 (7454) script.js.NSPanel.Panel_Sauna: Installed TFT Firmware: 51 / v4.1.4 15:53:27.267 warn javascript.0 (7454) script.js.NSPanel.Panel_Sauna: error at function CreateEntity: Cannot read properties of undefined (reading 'indexOf')