NEWS
Betatest NSPanel-lovelace-ui v0.2.x
-
@ticaki said in Betatest NSPanel-lovelace-ui v0.2.x:
Wenn man einen externen MQTT-Server benutzt, wird erwartet das man diesen auch wie ein fortgeschrittener Amateur betreibt
könntest du das evtl. mal etwas genauer ausführen...?
-
So nicht:
Die Maske die man für das NSPanel benutzt, sorgt dafür das alle States in mqtt.1.* als
Eigene States
zu verstehen sind
Die Option die im Bild einen Hacken hat, sorgt dafür das beim Verbinden alle eigenen States gesendet werden.Wenn ich nun auf den Topic
.../cmd/Backlog
immer mal wieder den gleichen Befehl sende - steht der ebenfalls unter mqtt.1. und wird beim Restart von mqtt.1, iobroker, iobroker-server oder mqtt-server an das Panel gesendet. Da ja Eigene States beim Verbinden publiziert werdenDenke nicht das man dafür ein mqtt-pro-user sein muß - bin selbst nämlich bei weitem keiner.
EDIT: Adapter schickt jetzt einen leeren String auf den Topic, kann für ein "kein Plan" Warnung von Tasmota sorgen, hab nicht in die console geschaut. Auf jeden Fall entfernt es den Flashbefehl aus cmd/Backlog und beim restart sendet er dann höchstes einen leeren String.
-
@ticaki Interessant und ist genau die Einstellung die ich bereits nutze und die Panele versuchen sich trotzdem zu flashen bei 1 funktioniert das , das 2te macht garnichts und das US Panel bleibt wie gesagt nach dem flashen hängen und zeigt System Data Error. (Lösung hab ich noch nicht gefunden)
ist aber nicht weiter schlimm wenn man weiß woran es liegt dann kann man die panele abschalten bevor man neu startet geht natürlich nur bei mobilen Panelen mit Schalter.
Das mit dem internen Mqtt Adapter hab ich zwar mal kurzfristig versucht lief aber nicht auf Anhieb und hab daher den Mqquitto genutzt weil er jka eh läuft und das auch sehr zuverlässig bisher. -
Der interne lief bis dato überall auf anhieb - mußt halt initialisieren. Benutzt du die einstellen wie im Bild? Die sind falsch! - hab ein so nicht oben ergänzt
-
-
kein Update - Ist aktuell im Alpha Test - wird wohl heute freigeschaltet
da für das Testen jedoch auch ne Beschreibung nötig ist mach ich die hier hin, kann @TT-Tom ja vielleicht für die Wiki nutzen oder halt einfach für den Anfang verlinken. Ich hab kein aktuelles schönes Bild.
Wenn ichSkript
schreibe meine ich immer das Adapter-Skript - nicht das andereKonfiguration der cardThermo2 im Adapter
Diese unterscheitet sich von der Skriptkonfiguration, daher eine komplette Beschreibung.
Struktur:- Aussehen
- Feature
- Probleme
- Konfiguration
- Alias
- Direkt über Datenpunkte
- Gemeinsame Optionen
- PageItemerweiterung
Aussehen:
Feature:
- bis zu 8 Heizkreise möglich (z.B. Heizung/Klimaanlage oder Küche/Wohnzimmer/...)
- unendliche Anzahl an Pageitems (mit Blätterfunktion), das sind die 8 aussen rum und Nr. 9 zwischen dem + und -
- Pageitems können einem Heizkreis zu geordnet werden
- Überschriften sind per Heizkreis
- Die Zeilen ober und unterhalb der Einstelltemperatur sind frei definierbar mit icon, wert, unit
Bekannte Probleme
- airCondition und thermostat werden wie ein thermostat behandelt
- leichtes Flackern auf Grund der hübschen Optik - das wird bleiben
Konfiguration
Eine komplette Seite sieht im Skript z.B. so aus
Alias
Wie gewohnt kann man Aliase (siehe Tabelle) verwenden. Die Role airCondition erzeugt 2 Heizkreise. Die wird eingestellt durch
name2
,iconHeatCycle2
,iconHeatCycleOnColor2
undiconHeatCycleOffColor2
. Viele der optionalen Datenpunkte sind drin und werden Heizkreis bezogen als Pageitems hinzugefügt. Fehlende bitte reklamieren.const Thermo2New: PageType = { type: 'cardThermo2', uniqueName:'Seitenname für interne Verwendung - Pflicht', heading: 'egal wird eh nicht angezeigt', thermoItems:[ { name: 'Das hier ist die Überschrift', id:'0_userdata.0.Einzelne_Geräte.Thermostat', // das hier ist der Channel, Device oder Folder }, ], items:[], }
thermoItems
enthält Objekte ('{}') die die Heizkreise beschreiben minimum 1 (Liste bzw. Array)id
ist der Channel. (Zeichenkette)name
ist die Überschrift die angezeigt wird. (Zeichenkette) Ohne dieses wird geschaut ob was im common.name des Channel steht.name2
ist die Überschrift die für eine airCondition verwendet wird.iconHeatCycle2
: Überschreibt das Zahlenicon in den PageItems (außen herum) ausschließlich für airConditioniconHeatCycleOnColor2
: Überschreibt die Farbe für aktiviert in den PageItems (außen herum) ausschließlich für airConditioniconHeatCycleOffColor2
: Überschreibt die Farbe für deaktiviert in den PageItems (außen herum) ausschließlich für airCondition
Der Datenpunkt MODE hat sich verändert, daher bitte unten bei
modeList
lesenDirekt über Datenpunkte
Das ist mit Alias nicht mischbar, darf aber natürlich auf die Datenpunkte eines angelegten Channels verweisen.
const Thermo2New: PageType = { type: 'cardThermo2', uniqueName:'Seitenname für interne Verwendung - Pflicht', heading: 'egal wird eh nicht angezeigt', thermoItems:[ { name: 'Das hier ist die Überschrift', set:'0_userdata.0.Einzelne_Geräte.Thermostat.SET', // Der Einstellwert der Heizung thermoId1:'0_userdata.0.Einzelne_Geräte.Thermostat.ACTUAL', // Aktuelle Raumtemperatur (oberer Wert in der Anzeige) thermoId2:'0_userdata.0.Einzelne_Geräte.Thermostat.HUMIDITY', // Aktuelle Luftfeuchtigkeit (unterer Wert in der Anzeige) modeId:'0_userdata.0.Einzelne_Geräte.Thermostat.MODE', // Textfeld unterhalb der Wert - kein Zeichenkettendatenpunkt } ], items:[], }
thermoItems
enthält Objekte ('{}') die die Heizkreise beschreiben minimum 1 (Liste bzw. Array)name
ist die Überschrift die angezeigt wird. (Zeichenkette)set
ist der Einstellwert der Heizung - aktuell keine Unterteilung in read/writethermoId1
Aktuelle Raumtemperatur (oberer Wert in der Anzeige)thermoid2
Aktuelle Luftfeuchtigkeit (unterer Wert in der Anzeige)modeId
Siehe beschreibung unten zumodeList
Gemeinsame Eigenschaften
Hier sind die Eigenschaften beschrieben die zusätzlich zu
name
,id
bzw.name
,set
angegeben werden können und was sie bedeuten:icon: Überschreibt das Standardicon in der 1. Textzeile (Temperatur)
onColor: Überschreibt die Farbe der 1. Textzeile (Temperatur)
unit: Überschreibt die Einheit der 1. Textzeile unnd 2. Textzeile (Temperatur)icon2: wie oben für Zeile 3 (Luftfeuchtigkeit)
onColor2: wie oben für Zeile 3 (Luftfeuchtigkeit)
unit2: Überschreibt die Einheit der 3. Textzeile (Luftfeuchtigkeit)iconHeatCycle: Überschreibt das Zahlenicon in den PageItems (außen herum)
iconHeatCycleOnColor: Überschreibt die Farbe für aktiviert in den PageItems (außen herum)
iconHeatCycleOffColor: Überschreibt die Farbe für deaktiviert in den PageItems (außen herum)minValue: minimale Einstellbare Temperatur (Default: 15) im Admin einstellbar ob 10 = 1 °C oder 10 = 10 °C
maxValue: maximal einstellbare Temperatur (Default: 28) im Admin einstellbar
stepValue: Schritte für +/-. Eine eingetragene 0.1 bedeutet Schritte von 0.1 (Default: 0.5) im Admin einstellbarpower: Das ist wohl noch nicht im TFT, daher keine BeschreibungmodeList: Das denke ich ist noch nicht final und braucht deutlich mehr Text
modeId
bzw.MODE
arbeiten auf die dieselbe Weise. Der Datenpunkt sollte vom Typenumber
sein und kann im Object common.states verwenden - dann arbeiten das common.states fürmodeList
.
modeList überschreibt common.states und diese überschreibt die Standardmodelist, die im Adapter hinterlegt ist:
Standard Modelist['OFF', 'AUTO', 'COOL', 'HEAT', 'ECO', 'FAN', 'DRY']
Im Datenpunkt steht z.B. eine 0 dann wird
OFF
angezeigt, steht dort eine 3 wirdHEAT
angezeigt (die werden übersetzt).
Wenn das in den common.states des Datenpunktes genauso steht gilt dort das gleich. Ebenso in der modeList.
Im Skript sieht dass dann etwas regional angepasst so aus:modeList: ["Aus'm", "Automat", "Kühl'n", "Heiz'n", "Sparn", "Puste", "Trockn"],
PageItemerweiterung
Für die Pageitems gibt es eine neue Eigenschaft die aktuell aber nur für die cardThermo2 von belang ist:
items:[ {id: 'alias.0.Licht.lights.Gerät_1', filter: 0}, ],
filter:
Ist es definiert wird das Pageitem nur angezeigt, wenn der entsprechende Heizkreis aktiv ist. Zählung beginnt bei 0 (number).
Wenn eine airCondition per 'id' hinzugefügt wird erhöht sich der index nach der airCondition um 1.Das ist noch nicht in der aktuellen Branch. Wenn ihr trotzdem testen wollt der Installationslink wäre dieser Alpha-Test
Schlußanmerkung - die rollen für aircondition können sich noch ändern - die scheinen sich von thermostat zu unterscheiden also besser da nachgucken.
-
@ticaki
Also ich habe es verstandenWerde es so ins Wiki übernehmen und noch ein paar Bilder mit dazu machen.
@all wenn ihr noch Ergänzungen habt, die mit in die Wiki sollen, hier posten und mich mit erwähnen.
Von meiner Seite auch nochmal großes Kompliment und Dankeschön an @ticaki und @Armilar für Ihren Einsatz, dieses Projekt so nach vorne zu bringen.
-
Hab meine Beschreibung editiert zusammengefasst:
airCondition ist eingebaut, erzeugt automatisch einen 2. Heizkreis dieser ist dann durch die
heatCycleIcon...2
undname2
Eigenschaft zu konfigurieren. Gilt nur für automatisches Konfigurieren per Channel-ID. filter im Pageitem müssen dann um 1 erhöht werden hinter der Klimanlage, das geht nur automatisch für die, die auch vom Adapter erstellt werden. -
Update auf Github für cardThermo2 freigegeben
Beschreibung wurde angepasst an die jetzigen Gegebenheiten!
Wenn ichSkript
schreibe meine ich immer das Adapter-Skript - nicht das andereKonfiguration der cardThermo2 im Adapter
Diese unterscheitet sich von der Skriptkonfiguration, daher eine komplette Beschreibung.
Struktur:- Aussehen
- Feature
- Probleme
- Konfiguration
- Alias
- Direkt über Datenpunkte
- Gemeinsame Optionen
- PageItemerweiterung
Aussehen:
Feature:
- bis zu 8 Heizkreise möglich (z.B. Heizung/Klimaanlage oder Küche/Wohnzimmer/...)
- unendliche Anzahl an Pageitems (mit Blätterfunktion), das sind die 8 aussen rum und Nr. 9 zwischen dem + und -
- Pageitems können einem Heizkreis zu geordnet werden (automatisch erzeugt werden bei mehreren Heizkreisen immer einem zugewiesen)
- Überschriften sind per Heizkreis
- Die Zeilen ober und unterhalb der Einstelltemperatur sind frei definierbar mit icon, wert, unit
Bekannte Probleme
- leichtes Flackern auf Grund der hübschen Optik - das wird bleiben
- Mode und Modeset könnten noch inkonsequent sein - in arbeit
Konfiguration
Eine komplette Seite sieht im Skript z.B. so aus
Alias
Wie gewohnt kann man Aliase (siehe Tabelle) verwenden. Die Role airCondition erzeugt 2 Heizkreise. Die wird eingestellt durch
name2
,iconHeatCycle2
,iconHeatCycleOnColor2
undiconHeatCycleOffColor2
. Viele der optionalen Datenpunkte sind drin und werden Heizkreis bezogen als Pageitems hinzugefügt. Fehlende bitte reklamieren.const Thermo2New: PageType = { type: 'cardThermo2', uniqueName:'Seitenname für interne Verwendung - Pflicht', heading: 'egal wird eh nicht angezeigt', thermoItems:[ { name: 'Das hier ist die Überschrift', id:'0_userdata.0.Einzelne_Geräte.Thermostat', // das hier ist der Channel, Device oder Folder }, ], items:[], }
thermoItems
enthält Objekte ('{}') die die Heizkreise beschreiben minimum 1 (Liste bzw. Array)id
ist der Channel. (Zeichenkette)name
ist die Überschrift die angezeigt wird. (Zeichenkette) Ohne dieses wird geschaut ob was im common.name des Channel steht.name2
ist die Überschrift die für eine airCondition verwendet wird.iconHeatCycle2
: Überschreibt das Zahlenicon in den PageItems (außen herum) ausschließlich für airConditioniconHeatCycleOnColor2
: Überschreibt die Farbe für aktiviert in den PageItems (außen herum) ausschließlich für airConditioniconHeatCycleOffColor2
: Überschreibt die Farbe für deaktiviert in den PageItems (außen herum) ausschließlich für airCondition
Der Datenpunkt MODE hat sich verändert, daher bitte unten bei
modeList
lesenDirekt über Datenpunkte
Das ist mit Alias nicht mischbar, darf aber natürlich auf die Datenpunkte eines angelegten Channels verweisen.
const Thermo2New: PageType = { type: 'cardThermo2', uniqueName:'Seitenname für interne Verwendung - Pflicht', heading: 'egal wird eh nicht angezeigt', thermoItems:[ { name: 'Das hier ist die Überschrift', set:'0_userdata.0.Einzelne_Geräte.Thermostat.SET', // Der Einstellwert der Heizung thermoId1:'0_userdata.0.Einzelne_Geräte.Thermostat.ACTUAL', // Aktuelle Raumtemperatur (oberer Wert in der Anzeige) thermoId2:'0_userdata.0.Einzelne_Geräte.Thermostat.HUMIDITY', // Aktuelle Luftfeuchtigkeit (unterer Wert in der Anzeige) modeId:'0_userdata.0.Einzelne_Geräte.Thermostat.MODE', // Textfeld unterhalb der Wert - kein Zeichenkettendatenpunkt } ], items:[], }
thermoItems
enthält Objekte ('{}') die die Heizkreise beschreiben minimum 1 (Liste bzw. Array)name
ist die Überschrift die angezeigt wird. (Zeichenkette)set
ist der Einstellwert der Heizung - aktuell keine Unterteilung in read/writethermoId1
Aktuelle Raumtemperatur (oberer Wert in der Anzeige)thermoid2
Aktuelle Luftfeuchtigkeit (unterer Wert in der Anzeige)modeId
Siehe beschreibung unten zumodeList
Gemeinsame Eigenschaften
Hier sind die Eigenschaften beschrieben die zusätzlich zu
name
,id
bzw.name
,set
angegeben werden können und was sie bedeuten:icon: Überschreibt das Standardicon in der 1. Textzeile (Temperatur)
onColor: Überschreibt die Farbe der 1. Textzeile (Temperatur)
unit: Überschreibt die Einheit der 1. Textzeile unnd 2. Textzeile (Temperatur)icon2: wie oben für Zeile 3 (Luftfeuchtigkeit)
onColor2: wie oben für Zeile 3 (Luftfeuchtigkeit)
unit2: Überschreibt die Einheit der 3. Textzeile (Luftfeuchtigkeit)iconHeatCycle: Überschreibt das Zahlenicon in den PageItems (außen herum)
iconHeatCycleOnColor: Überschreibt die Farbe für aktiviert in den PageItems (außen herum)
iconHeatCycleOffColor: Überschreibt die Farbe für deaktiviert in den PageItems (außen herum)minValue: minimale Einstellbare Temperatur (Default: 15) im Admin einstellbar ob 10 = 1 °C oder 10 = 10 °C
maxValue: maximal einstellbare Temperatur (Default: 28) im Admin einstellbar
stepValue: Schritte für +/-. Eine eingetragene 0.1 bedeutet Schritte von 0.1 (Default: 0.5) im Admin einstellbarpower: Das wird aktuell über MODESET benutzt ist da ne 0 ist die anzeige "aus"im Admin einstellbar: Da gibts auf der 2ten Seite ganz unten eine Option ob man es kompatible zum Skript haben möchte oder natürlich.
modeList: Das denke ich ist noch nicht final und braucht deutlich mehr Text
modeId
bzw. 'MODE' undMODESET
arbeiten auf die dieselbe Weise. Der Datenpunkt sollte vom Typenumber
sein und kann im Object common.states verwenden - dann arbeiten das common.states fürmodeList
.
modeList überschreibt common.states und diese überschreibt die Standardmodelist, die im Adapter hinterlegt ist:
Standard Modelist['OFF', 'AUTO', 'COOL', 'HEAT', 'ECO', 'FAN', 'DRY']
Im Datenpunkt steht z.B. eine 0 dann wird
OFF
angezeigt, steht dort eine 3 wirdHEAT
angezeigt (die werden übersetzt).
Wenn das in den common.states des Datenpunktes genauso steht gilt dort das gleich. Ebenso in der modeList.
Im Skript sieht dass dann etwas regional angepasst so aus:modeList: ["Aus'm", "Automat", "Kühl'n", "Heiz'n", "Sparn", "Puste", "Trockn"],
Ergänzend wurde TargetMode und CurrentMode aufgeteilt - siehe Alias Tabelle - das ist noch nicht final - Da muß am nächsten WE noch etwas rumdiskutiert werden - ich würde gerne den CurrentMode unterhalb der Temperatur anzeigen mit
inaktiv, idle, heizen, kühlen
Wenn MODE nicht angegeben ist wird es durch MODESET ersetzt.
MODE: kann vom common.type = 'string' sein, dann wird einfach geschrieben was im Datenpunkt steht.PageItemerweiterung
Für die Pageitems gibt es eine neue Eigenschaft die aktuell aber nur für die cardThermo2 von belang ist:
items:[ {id: 'alias.0.Licht.lights.Gerät_1', filter: 0}, ],
filter:
Ist es definiert wird das Pageitem nur angezeigt, wenn der entsprechende Heizkreis aktiv ist. Zählung beginnt bei 0 (number).
Wenn eine airCondition per 'id' hinzugefügt wird erhöht sich der index nach der airCondition um 1.Der Adapter unterstützt jetzt auch Platzhalter PageItems - durch
id:'delete'
oderid:'empty'
werden diese definiert.Das ist noch nicht in der aktuellen Branch. Wenn ihr trotzdem testen wollt der Installationslink wäre dieser Alpha-Test
Schlußanmerkung - die rollen für aircondition können sich noch ändern - die scheinen sich von thermostat zu unterscheiden also besser da nachgucken.
-
Ich hab man eine erste Version einer
cardMedia
für Alexa und nur für Alexa eingebaut.
Die Basisfunktionen sollte soweit gehen. Die Knöpfe unten die ein Haus anzeigen sind nur Platzhalter zum Testen. Sobald da ein echtes Icon auftaucht ist funktionalität dahinterKonfiguration sieht im Skript so aus:
const pageMediaTest2: PageType ={ type: 'cardMedia', heading: 'test', media: { id: 'alexa2.0.Echo-Devices.G071C4465321366A2', //id ist geändert, danke Homoran fürs gucken ^^ speakerList:[] }, uniqueName:'main', items:[], };
Wenn in speakList nichts drin steht, werden alle Geräte angezeigt. Wenn dort die Namen der Geräte gelistet sind werden nur die angezeigt, die dort und im ioBroker existieren. Ist eine Zeichenkettenliste z.B.
['Echo Wohnzimmer' , '...' , usw.]
die Namen findet ihr im common.name vom id datenpunkt - bzw in der namens spalte in der Objektübersicht.Bitte keine Anfragen nach weiteren Adapter - erstmal Alexa ans laufen bekommen, das kann ich testen. Dann fange ich an mit States ohne die entsprechenden Adapter das zu erweitern.
EDIT:
Equalizier - geht erst wenn ich entweder weiß wie es anders gedacht ist oder TFT ein update bekommen hatEDIT2:
Equalizier - geht mit der neueste Beta TFT und etwas anpassungen im adapter
Playlist für Alexa ist drin, wie im anderen Skript umgesetzt
ach und brightsky Vorlagen müssen eigentlich auch da sein. -
@ticaki update auf die 4.9.6 hat bei den EU Panelen funktioniert auch bei dem US Panel aber da dann auf die 4.9.6 EU. Eine 4.9.6 US L.HMI habt ihr noch nicht ...?
-
@teletapi
Nö, muß mal gucken wieso dir ein Update angeboten wird, gibts aktuell nur für EUkann man immer hier nachgucken:
https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/blob/main/json/version.json{ "tasmota": "15.0.1", "berry": "10", "berry-beta": "10", "tft": "4.9.5", "tft-us-l": "4.9.5", "tft-us-p": "4.9.5", "tft-beta": "4.9.6", "tft-us-l-beta": "4.9.5", "tft-us-p-beta": "4.9.5" }
US-Version kommt immer mindestens einige Tage später - ist aber nicht so das es Monate dauert^^
-
@ticaki Ja das hatte ich mir schon gedacht bzw. hatte damit gerechnet das es nicht klappt. Ich hab das problem das ich das US Panel nach wie vor mit dem Flash Nextion Befehl nicht fertig flashen kann.
Gestern Abend kam mir da ein Gedanke ob es wohl sein könnte das es damit zu tun hat das ich auf allen Panelen die Deutsche ESP32 Version 15.0.1 habe und sich evtl. dadurch das TFT nicht zu 100% flashen lässt. Hat das mal jemand probiert.? Sonst würde ich das heute mal testen. da sich die EU Software ja flashen lässt und die US Version sich ebenfalls nicht auf die EU Panele flashen lässt was ich ja auch probiert habe kam mir dieser Gedanke -
@teletapi
Ich kenne keinen mit einem US-Panel - ich persönlich denke ja dass das Panel vielleicht nen Knall hat - wenn alles andere ja geht nur das nicht. Ist ja nur der Display anders. -
Das NSPanel
-
Was ist der Unterschied zwischen einem EU-NSPanel und einem US-NSPanel?
-
technisch:
Es gibt keinen Unterschied. Beide Versionen sind von den intern verbauten Komponenten absolut identisch -
optisch (Design):
Das EU-NSPanel ist die chinesische Antwort auf unsere EU-Norm für Schalter... Wenn man den Vergleich in die US-Schalterprogramme sucht, findet man die NEMA-Norm.
-
-
Warum gibt es jetzt 3 unterschiedliche Versionen der Firmware?
- Das Display
Sowohl das EU-NSPanel, als auch das US-NSPanel, verwenden das gleiche Display. Aufgrund der Optik wurde es beim EU-Panel nur um ein paar mm weiter im Gerät verschoben verklebt. Das US-Panel ist hingegen symetrisch verklebt.- Die EU Version hat also eine andere horizontale Verschiebung (15px), da ein kleiner Teil des funktionalen Displays ja unter dem Gehäuse versteckt ist.
- Für den den Ausgleich der EU-Verschiebung wird im HMI Code ein zusätzlicher Hack benutzt, um die Touch-Positionen auszugleichen
- Das Display
-
Welchen Vorteil bietet mir die US-P Version des NSPanels
-
Eigentlich keinen - es hat eher Nachteile zur EU-Version
- Das Design der TFT-Firmwar ist auf die horizontale Nutzung des Displays ausgerichtet. Bei der US-P Version ist das gleiche TFT-Display nur um 90° im Gehäuse verdreht
- Die Bezeichner sind in der US-P - Version kürzer und das bedeutet, man arbeitet eher mit vielen Abkürzungen um die gleichen Inhalte wie in der EU Version oder US-L Version dargestellt zu bekommen. Die Bezeichner sehen eher gequetscht aus. Gleiches gild für Page-Überschriften.
-
Durch die vertikale Drehung steht mehr Platz nach unten zur Verfügung. Das wirkt sich nur in Cards wie der cardEntities oder cardSchedule aus, da hier 1-2 optionale Entitäten (mit kürzerer Bezeichnung) genutzt werden.
-
-
Welchen Vorteil bietet mir die US-L Version des NSPanels
- Eigentlich auch keinen - es hat eher Nachteile, das es nicht zu den EU-Normen passt. Die Ausrichtung des Displays ist jedoch perfekt zentriert.
Fazit: Man kann also klar ableiten, warum es erst die US-Versionen gab und dann eine EU-Version hinterhergeschoben wurde. Ist eine reine optische Entscheidung, technisch sind beide Panels gleich
Die Tasmota Version:
-
Es gibt unterschiedliche Tasmota Versionen für den ESP32. Im Falle des NSPanels gab es bei der Einführung des NSPanels aber einen Bug in allen Tasmota-Versionen. Mit der Anbindung der seriellen Funktion des Arduino Core wurde im NSPanel ein Boot-Loop ausgelöst. Somit wurde damals als Bugfix eine eigenständige NSPanel-Tasmota-Version bereitgestellt, die auch in der Lage war den PSRAM des Panels zu nutzen.
-
In den heutigen ESP32-Versionen ist diese uralte Bug behoben und auch die PSRAM-Version ist in der Standard-Tasmota aktiv... Somit macht die Tasmota-Version (Standard/NSPanel) auch keinen Unterschied mehr.
Fazit: Da es absolut keinen Unterschied macht ob du ein EU-Panel oder ein US-Panel hast, liegt die größte Wahrscheinlichkeit darin (wie @ticaki auch schon geschrieben hat), dass du ein "Montags-Produkt" bekommen hast. Es hat wahrscheinlich einen Defekt im Datenbus zwischen dem ESP32 und dem TFT.
-
-
Ich hab heute mal versucht ein NSPanel aufzusetzen, komme da aber nicht weiter:
Die Einstellungen die ich gemacht hab sehen so aus:
Wenn ich dann versuche das Panel zu initialisieren (Button
NSPanel-Initialisierung
bekomme ich eine Fehlermeldung:2025-08-31 15:21:56.731 - info: nspanel-lovelace-ui.0 (253221) starting. Version 0.2.4 in /opt/iobroker/node_modules/iobroker.nspanel-lovelace-ui, node: v20.19.4, js-controller: 7.0.6 2025-08-31 15:21:56.753 - error: nspanel-lovelace-ui.0 (253221) No compatible config found, paused! 2025-08-31 15:22:25.872 - info: nspanel-lovelace-ui.0 (253221) Sending mqtt config & base config to tasmota: 192.168.2.54 with user CENSORED && CENSORED 2025-08-31 15:22:25.990 - info: nspanel-lovelace-ui.0 (253221) Sending mqtt config & base config to tasmota with IP 192.168.2.54 and name Panel1. 2025-08-31 15:22:29.660 - error: nspanel-lovelace-ui.0 (253221) Error: while installing berry - AxiosError: timeout of 3000ms exceeded 2025-08-31 15:22:32.661 - error: nspanel-lovelace-ui.0 (253221) No version found!
Interessanterweise kommt die Konfiguration am Panel an, zumindest wenn ich diesem Log glauben darf:
14:29:14.914 MQT: stat/NsPanel_1D3FE0/STATUS5 = {"StatusNET":{"Hostname":"Panel1","IPAddress":"192.168.2.54","Gateway":"192.168.2.1","Subnetmask":"255.255.255.0","DNSServer1":"192.168.2.2","DNSServer2":"0.0.0.0","Mac":"E4:65:B8:1D:3F:E0","IP6Global":"fda3:8957:951:5a48:e665:b8ff:fe1d:3fe0","IP6Local":"fe80::e665:b8ff:fe1d:3fe0%st1","Ethernet":{"Hostname":"","IPAddress":"0.0.0.0","Gateway":"0.0.0.0","Subnetmask":"0.0.0.0","DNSServer1":"192.168.2.2","DNSServer2":"0.0.0.0","Mac":"00:00:00:00:00:00","IP6Global":"","IP6Local":""},"Webserver":2,"HTTP_API":1,"WifiConfig":4,"WifiPower":16.0}} 14:29:15.035 MQT: stat/NsPanel_1D3FE0/RESULT = {"MqttHost":"192.168.2.222"} 14:29:15.116 MQT: stat/NsPanel_1D3FE0/RESULT = {"MqttPort":1888} 14:29:15.175 MQT: stat/NsPanel_1D3FE0/STATUS = {"Status":{"Module":0,"DeviceName":"Tasmota","FriendlyName":["Panel1",""],"Topic":"NsPanel_1D3FE0","ButtonTopic":"0","Power":"00","PowerLock":"00","PowerOnState":3,"LedState":1,"LedMask":"FFFF","SaveData":1,"SaveState":1,"SwitchTopic":"0","SwitchMode":[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],"ButtonRetain":0,"SwitchRetain":0,"SensorRetain":0,"PowerRetain":0,"InfoRetain":0,"StateRetain":0,"StatusRetain":0}} 14:29:15.215 MQT: stat/NsPanel_1D3FE0/STATUS1 = {"StatusPRM":{"Baudrate":115200,"SerialConfig":"8N1","GroupTopic":"tasmotas","OtaUrl":"https://ota.tasmota.com/tasmota32/release-14.1.0/tasmota32-nspanel.bin","RestartReason":"Software reset CPU","Uptime":"0T00:03:20","StartupUTC":"2025-08-31T13:25:55","Sleep":0,"CfgHolder":4617,"BootCount":50,"BCResetTime":"2024-06-07T13:23:57","SaveCount":195}} 14:29:15.253 MQT: stat/NsPanel_1D3FE0/STATUS2 = {"StatusFWR":{"Version":"14.1.0(release-nspanel)","BuildDateTime":"2024-06-03T11:56:09","Core":"3_0_0","SDK":"5.1.4.240529","CpuFrequency":160,"Hardware":"ESP32-D0WD-V3 v3.1","CR":"473/699"}} 14:29:15.269 MQT: stat/NsPanel_1D3FE0/STATUS3 = {"StatusLOG":{"SerialLog":2,"WebLog":2,"MqttLog":0,"SysLog":0,"LogHost":"","LogPort":514,"SSId":["waet6",""],"TelePeriod":300,"Resolution":"558180C0","SetOption":["00008009","2805C80001000600003C5A0A192800000000","00000080","00006000","00044000","00000000"]}} 14:29:15.320 MQT: stat/NsPanel_1D3FE0/STATUS4 = {"StatusMEM":{"ProgramSize":2033,"Free":846,"Heap":122,"StackLowMark":3,"PsrMax":0,"PsrFree":0,"ProgramFlashSize":4096,"FlashSize":4096,"FlashChipId":"1640C8","FlashFrequency":40,"FlashMode":"DIO","Features":["0809","9F9AD7DF","0015A001","B7F7BFCF","05DA9BC4","E0360DC7","480840D2","20200000","D4BC482D","810A80B1","00000014"],"Drivers":"1,2,!3,!4,!5,7,!8,9,10,11,12,!14,!16,!17,!20,!21,24,26,!27,29,!34,!35,38,50,52,!59,!60,62,!63,!66,!67,!68,!73,82,!86,!87,!88,!121","Sensors":"1,2,3,5,6,7,8,9,10,11,12,13,14,15,17,18,19,20,21,22,26,31,34,37,39,40,42,43,45,51,52,55,56,58,59,64,66,67,74,85,92,95,98,103,105,109,127","I2CDriver":"7,8,9,10,11,12,13,14,15,17,18,20,24,29,31,36,41,42,44,46,48,58,62,65,69,76,77,82"}} 14:29:15.392 MQT: stat/NsPanel_1D3FE0/STATUS5 = {"StatusNET":{"Hostname":"Panel1","IPAddress":"192.168.2.54","Gateway":"192.168.2.1","Subnetmask":"255.255.255.0","DNSServer1":"192.168.2.2","DNSServer2":"0.0.0.0","Mac":"E4:65:B8:1D:3F:E0","IP6Global":"fda3:8957:951:5a48:e665:b8ff:fe1d:3fe0","IP6Local":"fe80::e665:b8ff:fe1d:3fe0%st1","Ethernet":{"Hostname":"","IPAddress":"0.0.0.0","Gateway":"0.0.0.0","Subnetmask":"0.0.0.0","DNSServer1":"192.168.2.2","DNSServer2":"0.0.0.0","Mac":"00:00:00:00:00:00","IP6Global":"","IP6Local":""},"Webserver":2,"HTTP_API":1,"WifiConfig":4,"WifiPower":16.0}} 14:29:15.440 MQT: stat/NsPanel_1D3FE0/STATUS6 = {"StatusMQT":{"MqttHost":"192.168.2.222","MqttPort":1888,"MqttClientMask":"SonoffNsPanel_%06X","MqttClient":"SonoffNsPanel_1D3FE0","MqttUser":"stormbroker","MqttCount":1,"MAX_PACKET_SIZE":1200,"KEEPALIVE":30,"SOCKET_TIMEOUT":4}} 14:29:15.466 MQT: stat/NsPanel_1D3FE0/STATUS7 = {"StatusTIM":{"UTC":"2025-08-31T13:29:15Z","Local":"2025-08-31T14:29:15","StartDST":"2025-03-30T02:00:00","EndDST":"2025-10-26T03:00:00","Timezone":"+01:00","Sunrise":"06:06","Sunset":"19:34"}} 14:29:15.496 MQT: stat/NsPanel_1D3FE0/STATUS10 = {"StatusSNS":{"Time":"2025-08-31T14:29:15","ANALOG":{"Temperature1":2.9},"TempUnit":"C"}} 14:29:15.515 MQT: stat/NsPanel_1D3FE0/STATUS11 = {"StatusSTS":{"Time":"2025-08-31T14:29:15","Uptime":"0T00:03:20","UptimeSec":200,"Heap":120,"SleepMode":"Dynamic","Sleep":0,"LoadAvg":460,"MqttCount":1,"Berry":{"HeapUsed":16,"Objects":213},"POWER1":"OFF","POWER2":"OFF","Wifi":{"AP":1,"SSId":"waet6","BSSId":"4C:32:75:C6:C7:82","Channel":11,"Mode":"HT20","RSSI":100,"Signal":-43,"LinkCount":1,"Downtime":"0T00:00:04"}}} 14:29:15.641 MQT: stat/NsPanel_1D3FE0/RESULT = {"MqttUser":"CENSORED"} 14:29:15.842 MQT: stat/NsPanel_1D3FE0/RESULT = {"MqttPassword":"CENSORED"} 14:29:16.043 MQT: tele/NsPanel_1D3FE0/LWT = (retained) 14:29:16.047 MQT: NsPanel_1D3FE0/stat/RESULT = {"FullTopic":"NsPanel_1D3FE0/%prefix%/"} 14:29:16.244 MQT: NsPanel_1D3FE0/stat/RESULT = {"MqttRetry":10} 14:29:16.567 MQT: NsPanel_1D3FE0/stat/RESULT = {"FriendlyName1":"Panel1"} 14:29:16.769 MQT: NsPanel_1D3FE0/stat/RESULT = {"Hostname":"Panel1"}
Ich hab das auch mal mit der aktuellen GitHub Version versucht - der Effekt ist der gleiche. Hier das Log vom Start dieser Version:
2025-08-31 15:38:07.263 - warn: admin.0 (857) nspanel-lovelace-ui has an invalid jsonConfig: [{"instancePath":"/items/overview/items/_useBetaTFTText","schemaPath":"#/patternProperties/%5E.%2B/allOf/37/then/oneOf","keyword":"oneOf","params":{"passingSchemas":[0,1]},"message":"must match exactly one schema in oneOf"},{"instancePath":"/items/overview","schemaPath":"#/properties/items/patternProperties/%5E.%2B/allOf/9/if","keyword":"if","params":{"failingKeyword":"then"},"message":"must match \"then\" schema"},{"instancePath":"","schemaPath":"#/if","keyword":"if","params":{"failingKeyword":"then"},"message":"must match \"then\" schema"}] 2025-08-31 15:38:11.169 - info: host.raspberrypi "system.adapter.nspanel-lovelace-ui.0" enabled 2025-08-31 15:38:11.464 - info: host.raspberrypi instance system.adapter.nspanel-lovelace-ui.0 in version "0.2.4" (non-npm: ticaki/ioBroker.nspanel-lovelace-ui) started with pid 254177 2025-08-31 15:38:12.337 - info: nspanel-lovelace-ui.0 (254177) starting. Version 0.2.4 (non-npm: ticaki/ioBroker.nspanel-lovelace-ui) in /opt/iobroker/node_modules/iobroker.nspanel-lovelace-ui, node: v20.19.4, js-controller: 7.0.6 2025-08-31 15:38:12.435 - info: nspanel-lovelace-ui.0 (254177) [mqttServer] Started and listening on port 1888 2025-08-31 15:38:12.437 - error: nspanel-lovelace-ui.0 (254177) No compatible config found, paused!
was mach ich falsch / was fehlt mir ?
A.
p.s. Fuer alle Neugierigen - iob Diag im Spoiler - das sollte aber sauber sein. Die 2 nicht aktualisierten Adapter sind absichtlich so. -
@asgothian sagte in Betatest NSPanel-lovelace-ui v0.2.x:
NSPanel-Initialisierung
Wenn das nicht durchläuft geht garnix - hast du das auch mit der aktuellen github version versucht und ist es mit dieser dann durchgelaufen?
Wenn ja dann - dann sollte im Skript adapter ein neues Skript in enem Subfolder angelegt worden sein, der wie der adapter heißt - bitte das 1 malig laufen lassen und dann adapter neustarten. Mir ist noch ncihts eingefallen um das zu automatisieren ohne das ich andere probleme bekomme.
-
@ticaki sagte in Betatest NSPanel-lovelace-ui v0.2.x:
Wenn das nicht durchläuft geht garnix - hast du das auch mit der aktuellen github version versucht und ist es mit dieser dann durchgelaufen?
Nein - die gleiche Fehlermeldung.
Was mich irritiert ist, das
- ich mit dem MQTTexplorer mich nicht mit dem Server verbinden kann
- diese Meldung im Log:
warn: admin.0 (857) nspanel-lovelace-ui has an invalid jsonConfig: [{"instancePath":"/items/overview/items/_useBetaTFTText","schemaPath":"#/patternProperties/%5E.%2B/allOf/37/then/oneOf","keyword":"oneOf","params":{"passingSchemas":[0,1]},"message":"must match exactly one schema in oneOf"},{"instancePath":"/items/overview","schemaPath":"#/properties/items/patternProperties/%5E.%2B/allOf/9/if","keyword":"if","params":{"failingKeyword":"then"},"message":"must match \"then\" schema"},{"instancePath":"","schemaPath":"#/if","keyword":"if","params":{"failingKeyword":"then"},"message":"must match \"then\" schema"}]
Ich habe es testweise auch mit einem externen MQTT Server (standard Mosquitto auf PI5) versucht - das gleiche
A.
Nachtrag: Im Log des Panels kommt
14:55:26.745 MQT: Panel_1/tele/STATE = {"Time":"2025-08-31T14:55:26","Uptime":"0T00:20:13","UptimeSec":1213,"Heap":119,"SleepMode":"Dynamic","Sleep":0,"LoadAvg":999,"MqttCount":3,"Berry":{"HeapUsed":16,"Objects":227},"POWER1":"OFF","POWER2":"OFF","Wifi":{"AP":1,"SSId":"waet6","BSSId":"4C:32:75:C6:C7:82","Channel":11,"Mode":"HT20","RSSI":100,"Signal":-45,"LinkCount":1,"Downtime":"0T00:00:03"}} 14:55:26.754 MQT: Panel_1/tele/SENSOR = {"Time":"2025-08-31T14:55:26","ANALOG":{"Temperature1":2.9},"TempUnit":"C"}
in etwa alle 5, und
14:55:30.885 MQT: Panel_1/tele/RESULT = {"CustomRecv":"event,startup,53,eu"}
alle 5-7 sekunden
Ein Skript gibt es auch, wenn ich das manuell starte wirft es allerdings einen Fehler:
31/08/2025, 15:52:48.723 [info ]: javascript.0 (140610) Compiling TypeScript source script.js.common.NsPanelAdapter.NsPanelSendTo 31/08/2025, 15:52:54.664 [error]: javascript.0 (140610) script.js.common.NsPanelAdapter.NsPanelSendTo: TypeScript compilation failed: payload: 'dimmode~' + getState(NSPanel_Path + 'ScreensaverInfo.activeDimmodeBrightness').val + '~' + getState(NSPanel_Path + 'ScreensaverInfo.activeBrightness').val ?? ^ ERROR: Right operand of ?? is unreachable because the left operand is never nullish. payload: 'dimmode~' + timeDimMode.brightnessDay + '~' + getState(NSPanel_Path + 'ScreensaverInfo.activeBrightness').val ?? ^ ERROR: Right operand of ?? is unreachable because the left operand is never nullish. payload: 'dimmode~' + timeDimMode.brightnessNight + '~' + getState(NSPanel_Path + 'ScreensaverInfo.activeBrightness').val ?? ^ ERROR: Right operand of ?? is unreachable because the left operand is never nullish.``` A.
-
@asgothian
Also das problem hat nichts mit dem mqtt zu tun, könnte eine änderung sein die ich letzten vorgenommen habe oder aber das bei dir der tasmota länger braucht.Versuche mal die aktuelle github version - hab den timeout verlängert und das löschen der alten autoexec.be entfernt jetzt wird nur umbeannt. Außerdem schreibt er jetzt ins debuglog welche url er benutzt um den befehl zu senden. Wenns noch immer nicht geht. Verwende bitte diese Url in deinem browser und zeige mir dann die url und das was im browser als rückmeldung kam.
Um auf den mqtt zu zu greifen must du tls aktivieren im client
Wenn berry nicht geht, ist der rest vom log unsinn, weil ohne diesen garnix geht
-
@ticaki sagte in Betatest NSPanel-lovelace-ui v0.2.x:
@asgothian
Also das problem hat nichts mit dem mqtt zu tun, könnte eine änderung sein die ich letzten vorgenommen habe oder aber das bei dir der tasmota länger braucht.Versuche mal die aktuelle github version - hab den timeout verlängert und das löschen der alten autoexec.be entfernt jetzt wird nur umbeannt. Außerdem schreibt er jetzt ins debuglog welche url er benutzt um den befehl zu senden. Wenns noch immer nicht geht. Verwende bitte diese Url in deinem browser und zeige mir dann die url und das was im browser als rückmeldung kam.
Perfekt - damit klappt es. Offensichtlich ist das Panel zu langsam oder mein Netz zu träge.
Vielen Dank für die Hilfe.
A.
Edit: Debug-Log hinterm spoiler - falls Du das brauchst