NEWS
Betatest Adapter NSPanel-lovelace-ui v0.16.x
-
0.15.1 (2026-03-18)
- (ticaki) added: internet access check for Tasmota device before berry installation
- (ticaki) Möglichkeit die urls auf eigene lokale umzustellen - nicht empfohlen - finger weg wenn ihr die arbeit die das bringt scheut.
Der Tasmota check geht auf raw.githubusercontent.com und wird beim aktualisieren/initialisieren durchgeführt
Das Umbiegen der Adressen auf einen eigenen Server ist für Leute gedacht die alles Lokal haben möchten und wird nur minimal supportet - keiner der Entwickler nutzt das. In dem Fall geht der check auf den hostname.
Man findet es unter:
Expert an -> Tab Developer
Wer das verwendet bitte die Verzeichnisstruktur unter Berry beachten .../10/autoexec.be - Die Dateibezeichner bei berry und tft müssen identisch sein.
-
@ticaki was ich letztens mit Tom schon besprochen hatte: ist es möglich im Spotify/Sonos Player die Lautstärke Regelung zu ändern? Der Schieberegler erhöht ja +/-1. Allerdings ist das teilweise schwierig zu bedienen.
Kann man das irgendwie ändern, dass auf den seitlichen+/- Buttons auch nur die Lautstärke um einen Punkt erhöht/gesenkt wird?
-
Hm hab ich nicht mit bekommen oder ... em dachte das wäre ein Skriptänderungswunsch :D
Ich gucke mal -
@13patrick37
@armilar
Da könnte ich zwar was rum hacken - was dann komisch funktioniert. Jedoch um das ordentlich zu machen muß das tft angepasst werden.das +/- vom TFT sendet aktuelles Volumen +/-1 zurück und bewegt den Slider um eine Position - der Adapter schreibst in den State nach min/max anpassungen und return dann die Antwort vom entsprechenden Adapter wieder ans panel - dadurch springt der slider dann ab und an. Wenn ich da rumhacke springt der nicht nur ab und an und auch nicht nur selten :D. Um das zu lösen mußte der +/- Wert im Panel einstellbar sein.
{"topic":"nspanel/ns_panel2/cmnd/CustomSend","payload":"entityUpd~ Mmm Mmm Mmm Mmm ~button~bUp~~17299~~~~~~~~~media~ Mmm Mmm Mmm Mmm | 1:50-3:50~65535~ 50 Jahre - Die internation~53247~43~~1374~~number~3?logo~logo-sonos~63519~Wiedergabeposition~49|0|100~button~3?1~~1374~~1~input_sel~3?2~~2047~Favoritenliste~PRESS~text~3?4~11:01¬1~53247~~11:01~input_sel~3?5~~2047~Titelübersicht~PRESS~button~3?0-NextPageArrow~~2047~mehr~1"}z.B. wenn da die
43eine optionalen Anhang vom Typ Zahl bekommt - also43?5Keine Ahnung wann und ob Armilar da zeit für hat.
Ich empfehle dir ein Issue aufzumachen und @armilar + Beschreibung deines Wunsches rein zu schreiben
@tt-tom fyi
-
@13patrick37
Abgesehen davon wieviele sonos hast du? Wenn mehr als 1 - wie gut findest du die Einbindung. Da ich mir damit viel Arbeit gemacht habe und du es vielleicht falsch konfiguriert haben kannst - will ich das mal checken. Bei mir sieht das so aus:Ich hab 3 die meist mittels Nspanel in eine Gruppe zusammengefasst werden - und kann sie in jedem raum steuern ohne fummeln.
Panel 1
const SonosWohnzimmer: PageType = { type: 'cardMedia', heading: 'main', alwaysOnDisplay: true, media: { id: 'sonos.0.root.192_168_178_209', speakerList: [], minValue: 0, maxValue: 30, }, parent: 'main', uniqueName: 'SonosWohnzimmer', items: [], scrollPresentation: 'arrow' };Panel 2
const SonosSchlafzimmer: PageType = { type: 'cardMedia', heading: 'main', alwaysOnDisplay: true, media: { id: 'sonos.0.root.192_168_178_57', speakerList: [], minValue: 0, maxValue: 50, }, uniqueName: 'SonosSchlafzimmer', parent: 'main', items: [], scrollPresentation: 'arrow' };usw.
EDIT:
1 Sache ist doch fummelig - aber das geht nicht besser :DWenn ich was anderes im Schlafzimmer hören will und mich dann umentscheide muß ich entweder im schlafzimmer kurz was anspielen und dann alle lautsprecher im Schlafzimmer hinzufügen oder aber woanders hin gehen und das Schlafzimmer dort zur größeren Gruppe wieder hinzufügen - das ist aber verschmerzbar ^^
-
-
Moin zusammen,
bisher hatte ich den advanced Screensaver. Nach Nachbau der bisherigen Ansichten, wird mir nun der Standard-Screensaver angezeigt. Wo konnte man noch den advanced Screensaver auswählen?Vielen Dank für einen kurzen Anschub :)
-
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
Bemerkung:
Es wird jetzt mehr überprüft ob die Initalisierung klappen kann und ob sie geklappt hat.
Das Caching der Versionsdaten wird mit einem adapter neustart aktualisiert oder wenn die 60 Min seit dem letzten Download rum sind vorher wurde für jedes panel extra runtergeladen -
Hi, die 0.15.2 laeuft, hat aber nach dem starten des Adapters ewig gebraucht, bis alle Panels online waren.. wollte schon wieder zurueck zur 0.15.1.. als dann doch nach und nach alle online gingen.. es wurden auch bei 3 Panels angemeckert, es waere script version 19.3 drauf, anstatt 20, dabei ist es aber Version 20.. sind ja alle gleich bei mir.. nur mal so..
Tasmota ist bei 12 Panels die 15.3, bei einem die 15.0.1.
Admin Version 7.8.9 und Nodejs 22.22.2 -
Das Anmeckern der Skriptversion liegt an folgendem:
Update your script and/or resend the configurationDu hast zwar im Javascript-Adapter die Skripte geupdatet - jedoch nicht an den Adapter gesendet. Dadurch wird beim Start des Adapter die Skriptversion als veraltet erkannt.
Ich weiß nicht ob ich das ändern soll. Hat i.d.R. keine Nachteile das nicht zu senden. EDIT: Das Überprüfen der Skriptversion ist schon seit einer großen Anzahl von Monaten teils kaputt gewesen)
Den Potenziel längere Startup kann ich mir gerade nicht erklären. Das passiert, wenn der Tasmota sich nicht im MQTT-Server anmelden kann, dann geht er in einen 10 Sekunden Interval der ansteigt. Oder er verpasst den startup - dann geht der Adapter in einen startup interval mit 5 Sekunden delay. Ist mir auch schon gelegentlich aufgefallen - aber meist hats nicht länger gedauert als meine sehr kurze Lunte :)
-
ah, danke, ja das kann sein, dann starte ich die scripte alle mal durch.. ist ja kein fehler.
Was mir auch noch einfaellt.. ich hatte schon den Fall, dass der nspanel-Adapter beim start hing, weil ich den javascript-Adapter gerade gestoppt hatte.. vielleicht kann man das noch irgendwie schoener abfangen .. probiers mal aus.. javascript adapter stop und dann den nspanel adapter neu starten.. der geigt dann ewig rum.. vielleicht soll er sich dann einfach mit fehler beenden? -
oha em hm wirklich?
Ich wüsste nicht das ich sowas eingebaut habe... Ich teste es mal@tt-tom bitte auch mal testen
-
oha em hm wirklich?
Ich wüsste nicht das ich sowas eingebaut habe... Ich teste es mal@tt-tom bitte auch mal testen
@ticaki sagte in Betatest Adapter NSPanel-lovelace-ui v0.13.x:
oha em hm wirklich?
Ich wüsste nicht das ich sowas eingebaut habe... Ich teste es malKann keinen Fehler feststellen. ohne javascript gestartet, während Start abgeschaltet, nach Start abgeschaltet, alles ohne Probleme.
-
ah, danke, ja das kann sein, dann starte ich die scripte alle mal durch.. ist ja kein fehler.
Was mir auch noch einfaellt.. ich hatte schon den Fall, dass der nspanel-Adapter beim start hing, weil ich den javascript-Adapter gerade gestoppt hatte.. vielleicht kann man das noch irgendwie schoener abfangen .. probiers mal aus.. javascript adapter stop und dann den nspanel adapter neu starten.. der geigt dann ewig rum.. vielleicht soll er sich dann einfach mit fehler beenden?@ilovegym sagte in Betatest Adapter NSPanel-lovelace-ui v0.13.x:
Was mir auch noch einfaellt.. ich hatte schon den Fall, dass der nspanel-Adapter beim start hing, weil ich den javascript-Adapter gerade gestoppt hatte.. vielleicht kann man das noch irgendwie schoener abfangen .. probiers mal aus.. javascript adapter stop und dann den nspanel adapter neu starten.. der geigt dann ewig rum.. vielleicht soll er sich dann einfach mit fehler beenden?
Es gibt nur eine stelle wo javascript.0 erwähnt wird und das ist beim erstmaligen erstellen des Skripts - ansonsten gibts im kompletten Backend code keine Erwähnung des Javascript Adapters:
const script: ioBroker.ScriptObject = { type: 'script', _id: scriptId, common: { name: 'Global page configuration', engineType: 'TypeScript/ts', engine: `system.adapter.javascript.0`, source: file, debug: false, verbose: false, enabled: o?.common.enabled ?? true, }, native: {}, };EDIT - 2 mal sind ja 2 skripts :)
-
Hab mir ein kleines ip/internetadressen überwachungsscript geschrieben. das mir ein Popup aufmacht wenn das gerät down ist
Falls es jemand gebrauchen kann:
Ah braucht linux als os - und exec muß erlaubt sein
async function main() { // Einstellungen const intervalTime = 30000; const id = '0_userdata.0.pve2Online'; // Datenpunkt der geändert online status anzeigt const target = '192.168.179.5'; // Adresse die überprüft werden soll string (Komma separierte Liste) const every = false; // true: jede ip muss online sein - false: eine ip muss online sein const nspanelInstance = 0; // Einstellungen Ende const stateObj: iobJS.StateObject = { _id: id, type: 'state', common: { name: 'Ist PVE2 online', desc: target, type: 'boolean', role: 'indicator', def: false, read: true, write: false, }, native: {}, } const targets: string[] = target.split(',').map(entry => { return entry.trim() }) await extendObject(stateObj._id, stateObj); let status = getState(stateObj._id).val send({state: {val: status}}, true); await sleep(15000) const endlessTask = () => { setTimeout(async ()=> { await checkTargets(); endlessTask(); }, intervalTime) } await checkTargets(); endlessTask(); function execPromise(cmd: string): Promise<string> { return new Promise((resolve, reject) => { exec(cmd, (err, stdout) => { if (err) return reject(err); resolve(stdout); }); }); } async function checkTargets() { const promises = targets.map(t => execPromise('ping -qc 2 ' + t) .then(res => { let should: string|number = res.substring( res.indexOf('statistics ---') + 'statistics ---'.length, res.indexOf(' packets transmitted') ); should = Number(should); let current: string|number = res.substring( res.indexOf('transmitted, ') + 'transmitted, '.length, res.indexOf('received') ); current = Number(current); return should && should === current; }) .catch(() => { log(`${t} is offline`) }) ); const results = await Promise.all(promises); setState(stateObj._id, every ? results.every(Boolean) : results.some(Boolean), true); } on({id: stateObj._id, change: 'ne'}, send) function send(obj, first?: boolean) { if (!first && obj.state.val === status) return; status = obj.state.val sendRetry(); } let timeoutRetry = undefined async function sendRetry() { if (timeoutRetry) clearTimeout(timeoutRetry) try { if (!getState(`system.adapter.nspanel-lovelace-ui.${nspanelInstance}.alive`).val) throw new Error ('adapter offline'); if (!status) await sendToAsync(`nspanel-lovelace-ui.${nspanelInstance}`, 'setPopupNotification', { id: 'PVE2Check', headline: 'Kritischer Fehler', text: 'PVE2 ist offline', priority: 30, colorHeadline: '#FF0000', textSize: 3, type: 'acknowledge', buttonRight: 'Ok' },{timeout:5000}) else await sendToAsync(`nspanel-lovelace-ui.${nspanelInstance}`, 'setPopupNotification', { id: 'PVE2Check', headline: 'Kritischer Fehler', text: 'PVE2 ist online', priority: -1 }, {timeout:5000}) } catch { timeoutRetry = setTimeout(sendRetry, 10000); } } } main() -
Wenn ihr obriges Skript verwendet oder anderweitig popups an den Adapter schickt - (sendTo Befehl
setPopupNotification)Bitte lesen:
In der nächsten Version des Adapters wird
await sendToAsync('adapter', 'setPopupNotification', ... );einen Fehler zurück gegen wenn kein Panel online ist. Heißt das muß zwingend in einemtry {} catch {}Block stehen.Das Skript oben wurde angepasst um (ab Version > 0.15.2)
- zu gucken ob der Adapter überhaupt online ist (beim restart kommt zuerst der Javascript Adapter und dann deutlich später wird erst Nspanel gestartet)
- Abfangen von timeout fehler, weil Adapter doch noch nicht bereit ist
- Abfangen von Panel ist nicht online Fehler, weil Adapter zwar da aber noch keines der Panels überhaupt bereit ist ein Popup anzuzeigen. (sobald 1 online ist, gibts keinen Fehler mehr - speziellere Abfragen bitte selbst über states lösen, siehe die adapter alive abfrage im skript)
- 1 weitere Fehler wurde im Skript behoben.
Wenn das Nicht beachtet wird, wird der "Fehler" bis nach oben im Javascript-Adapter durchlaufen und dort einen Restart auslösen.
Für Leutz die viel mit Javascript machen ist das ne gute Lösung - andere könnten sich ärgern weil "Wieso schießt das Skript meinen Javascript-Adapter ab - was ein Murks" :)
deshalb ne Vorwarnung - wegen dem timeout sollte
await sendToAsync()eh immer in einemtryblock sein.sendToohne await und async ist davon nicht betroffen. -
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:
setPopupNotificationnow returns{ error: 'No Panels Online' }via callback when no panel is online instead of silently ignoring the call
Die "panel rule" Begründung von copilot ist quark - hat damit was zu tun das 2 mal die Aktualisierung der Uhrzeit verpasst werden muß bevor er in den "wait for content" geht.
-
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.
Die Pageitems haben noch bei weitem nicht alle Optionen - aber das kommt noch.
-
Die nächste Version kommt wohl gleich ins latest wird dann im laufe des Tages verfügbar.
Es kommt sehr sehr sehr selten vor das man was an einem vorhandenen Skript ändern muß - nur ab und an muß das Skript updaten, wenn da die Version erhöht wurde (geht per klick) und dann angucken und neu an den adapter schicken - damit nix meckert (aber der Adapter meckert in 99,9% der Fälle nur das die Version falsch ist, ohne Konsequenzen.
Ah noch was - Expert immer an
Wenn du zu diesen Personen gehörst bitte etwas vorsichtig sein und den mal ausschalten - alles was im Admin bei Expert zusätzlich gezeigt wird ist entweder tatsächlich für experten oder experimentell oder entwicklerkram :)
Ahh ok, denke wenn es einmal eingerichtet ist wird es mit dem Adapter wirklich einfacher. Die Seiten Erstellung wird wieder spannend werden, aber wenn ich alles richtig verstanden habe bleiben die Aliase ja gleich. Das hieße dann ich müsste wirklich nur die Seiten neu erstellen. Und von Vorteil eine mqtt Instanz wäre auch weg, was dann der Adapter übernehmen würde.
Die Aliase bleiben teils gleich - jeder State muß die richtige Role haben, das ist wichtiger als die Bezeichnung. Das hat aber den Nebeneffekt das andere Adapter die aliase ebenfalls verwenden können. siehe hier: https://github.com/ticaki/ioBroker.nspanel-lovelace-ui/blob/main/ALIAS.md
Und ich weiß nicht wie beim Script dieses
inSelPopup heißt - im adapter heißt es in der roleselectda bin ich hart geblieben :D.Den großteil der Seiten kannst du kopieren - und die nötigen Anpassungen vornehmen. Der Adapter braucht einen
uniqueNamepro Seite und next prev usw müssen ein String sein und den uniqueName der Zielseite enthalten - gleiches gilt für targetPage.Specialseiten unterscheiden sich aber teils deutlich - heißt Thermo2 / Mediaplayer das weiß ich aus dem Kopf nicht.
Die seiten selbst werden ja auch im Adapter erstellt, also ich brauche kein Script mehr in der Java Instanz?
Das stimmt so nicht - du hast die möglichkeit einige Seiten über den Admin zu konfigurieren, jedoch gibt es zu jedem panel ein Konfigurationsscript das an den Adapter geschickt werden muss. Wenn du ein Panel hinzufügst , wir ein Skript dazu im Scriptadapter angelegt - das muß du wenn das hinzufügen abgeschlossen ist, an den Adapter schicken. Beim ersten Panel kann es sein dass du dann den Adapter neustarten mußt.
Edit: der Adapter hilft aber deutlich mehr bei Fehlkonfigurationen z.B.:


Der Detailsdialog ist das was auch im Skript beim versenden zurück kommt, oder im log steht - im log kann aber noch mehr stehen.
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden