NEWS
SONOFF NSPanel mit Lovelace UI (TypeScript Version)
-
Hallo Armilar
vielen Dank für die super schnelle Antwort.
Ich habe gerade das Script noch einmal weiter bearbeitet und plötzlich poppte eine Anzeige am Diplay auf, ob die TFT Version aktualisiert werden soll. Dann habe ich es in der Console erneut versucht und plötzlich funktionierte das Update.
Ich hatte eigentlich auch vorher mindestens 10-15 Minuten gewartet ohne Änderungen (war zu Abend Essen).
Danke
Grüße
Powerich -
Der Rest lässt sich steuern? Ist das nur das Thema mit der Überschrift?
Ich sags mal so: "Works as Designed"
in der function generateMediaPage passiert folgendes. Im oberen Teil wird der Datenpunkt .ALBUM zugewiesen
let name = getState(id + '.ALBUM').val;
Ist die Länge 0, dann zeige den Player wie in der Variable definiert an. Wenn nicht, dann läuft ein Song und die Titelzeile zeigt diesen (auf 16 Zeichen begrenzt) ebenfalls an.
if (name.length == 0) { name = page.heading; } else if (name.length > 16) { name = name.slice(0, 16) + '...'; }Sollte da ein anderes merkwürdiges Verhalten sein, dann müssten wir uns das im Detail ansehen. Dazu wäre dann mindestens mal ein Bild oder Video hilfreich.
VG
Kurze Ergänzung: Was in den Datenpunkten ALBUM, TITEL, ARTIST steht, dass hat mit dem Skript nichts zu tun. Der DLNA-Server nimmt die Informationen aus den MP3-Infos und reicht sie entsprechend weiter. Jedoch sieht das zumindest in den Datenpunkten zu diesem Song richtig aus.
@Armilar 20260423_215025(1).mp4
Songdaten:
Titel: No Roots
Artist: Amy Macdonald
Album: A Curious ThingAm ehesten irritiert mich, dass nur so ca. alle 10 Sekunden die Laufzeit aufblitzt. Aber augenscheinlich auch nur dann, wenn der Songtitel kurz ist. Gerade lief ein Lied namens "Borne on The FM Waves of The Heart" - das war mit "..." abgekürzt und die Laufzeitangabe blitzte nicht einmal auf.
Hilft das?
-
@Armilar 20260423_215025(1).mp4
Songdaten:
Titel: No Roots
Artist: Amy Macdonald
Album: A Curious ThingAm ehesten irritiert mich, dass nur so ca. alle 10 Sekunden die Laufzeit aufblitzt. Aber augenscheinlich auch nur dann, wenn der Songtitel kurz ist. Gerade lief ein Lied namens "Borne on The FM Waves of The Heart" - das war mit "..." abgekürzt und die Laufzeitangabe blitzte nicht einmal auf.
Hilft das?
Nicht wirklich. Ich könnte es nicht mal nachstellen, da ich den DLNA selbst nicht nutze.Veränderungen werden nach Aktualisierung des Adapters gesendet. Das wiederum wird in Timer-Einstellungen der squeezebox.0 Instanz hinterlegt sein.Meinst du mit "aufblitzen" diese Aktualisierungen?Okay versatnden (Hab dein MP4 oben nicht sofort entdeckt).
Kann ich mir ansehen. Da wird kurz ein kompletter String mit Zeiten gesendet und kurzdarauf einer ohne... Das müsste man finden können...

Vielleichthat es damit zu tun, dass der Interpret aus dem MP3 ohne Inhalt (=undefined) ist.
Ich sehe mir das an...
-
@armilar Das sind die Metadaten:

-
@armilar Das sind die Metadaten:

Suche mal für einen Test nach:
if (v2Adapter == 'squeezeboxrpc' && author.length == 0) {und ersetze den durch
if (v2Adapter == 'squeezeboxrpc' && author.length > 0) { -
Suche mal für einen Test nach:
if (v2Adapter == 'squeezeboxrpc' && author.length == 0) {und ersetze den durch
if (v2Adapter == 'squeezeboxrpc' && author.length > 0) {und ersetze den durch
Die Zeitanzeige ist jetzt permanent da, das hat geklappt. Jetzt ist die Frage, was das "undefined|A Curious Thing" soll. (Und dass das Album in der Überschrift und im "Text" angezeigt wird, ist echt gewollt? Beim Lyrion Media Server wäre mir persönlich der Name des Players lieber.
Nachtrag:
let lmstracklist = JSON.parse(getState([page.items[0].adapterPlayerInstance, 'Players.', page.items[0].mediaDevice, '.Playlist'].join('')).val); ... author = lmstracklist[currentIndex].Artist + '|' + lmstracklist[currentIndex].Album;Hm.
{ index: 5, id: 26429, url: 'file:///music/Alben/Amy%20Macdonald%20-%20A%20Curious%20Thing/03%20Amy%20Macdonald%20-%20No%20Roots.mp3', title: 'No Roots', ArtworkUrl: 'http://localhost:9900/music/0ee7d819/cover.jpg', Type: 'mp3', Bitrate: '205kb/s VBR', Duration: 270.24, Album: 'A Curious Thing' }"Artist" gibt es da nicht. Fix:
author = author + '|' + lmstracklist[currentIndex].Album;Jetzt ist es umgekehrt, jetzt fliegt der Text alle 10 Sekunden mal weg und da steht dann für einen Moment nur "No Roots".
-
und ersetze den durch
Die Zeitanzeige ist jetzt permanent da, das hat geklappt. Jetzt ist die Frage, was das "undefined|A Curious Thing" soll. (Und dass das Album in der Überschrift und im "Text" angezeigt wird, ist echt gewollt? Beim Lyrion Media Server wäre mir persönlich der Name des Players lieber.
Nachtrag:
let lmstracklist = JSON.parse(getState([page.items[0].adapterPlayerInstance, 'Players.', page.items[0].mediaDevice, '.Playlist'].join('')).val); ... author = lmstracklist[currentIndex].Artist + '|' + lmstracklist[currentIndex].Album;Hm.
{ index: 5, id: 26429, url: 'file:///music/Alben/Amy%20Macdonald%20-%20A%20Curious%20Thing/03%20Amy%20Macdonald%20-%20No%20Roots.mp3', title: 'No Roots', ArtworkUrl: 'http://localhost:9900/music/0ee7d819/cover.jpg', Type: 'mp3', Bitrate: '205kb/s VBR', Duration: 270.24, Album: 'A Curious Thing' }"Artist" gibt es da nicht. Fix:
author = author + '|' + lmstracklist[currentIndex].Album;Jetzt ist es umgekehrt, jetzt fliegt der Text alle 10 Sekunden mal weg und da steht dann für einen Moment nur "No Roots".
{
index: 5,
id: 26429,
url: 'file:///music/Alben/Amy%20Macdonald%20-%20A%20Curious%20Thing/03%20Amy%20Macdonald%20-%20No%20Roots.mp3',
title: 'No Roots',
ArtworkUrl: 'http://localhost:9900/music/0ee7d819/cover.jpg',
Type: 'mp3',
Bitrate: '205kb/s VBR',
Duration: 270.24,
Album: 'A Curious Thing'
}Das liegt wahrscheinlich an deinem MP3-File. Bei mir funktioniert es. Übrigens alles...
Artist ist auch dabei. Sieht auch alles gut aus und wackelt und blitzt nix... Habe mir dann doch noch einen Logitech Media Server zum testen installiert.
{
index: 12,
id: 42,
url: 'file:///C:/Users/jbakk/Music/Corrs,%20The/1999%20-%20MTV%20Unplugged/13%20-%20The%20Corrs%20-%20So%20Young%20-%20EMG%20-%20x.mp3',
title: 'So Young',
ArtworkUrl: 'http://192.168.1.223:9000/music/5c0fd3c0/cover.jpg',
Type: 'mp3',
Bitrate: '192kb/s CBR',
Duration: '293.72',
Artist: 'The Corrs',
Album: 'Unplugged'
},Edit: Das mit der Überschrift ist in allen Playern durchgehend so. Allerdings kann man mit relativ wenig Aufwand einen zusätzlichen neuen Parameter machen, der das verhindert und den Player anzeigt.
-
und ersetze den durch
Die Zeitanzeige ist jetzt permanent da, das hat geklappt. Jetzt ist die Frage, was das "undefined|A Curious Thing" soll. (Und dass das Album in der Überschrift und im "Text" angezeigt wird, ist echt gewollt? Beim Lyrion Media Server wäre mir persönlich der Name des Players lieber.
Nachtrag:
let lmstracklist = JSON.parse(getState([page.items[0].adapterPlayerInstance, 'Players.', page.items[0].mediaDevice, '.Playlist'].join('')).val); ... author = lmstracklist[currentIndex].Artist + '|' + lmstracklist[currentIndex].Album;Hm.
{ index: 5, id: 26429, url: 'file:///music/Alben/Amy%20Macdonald%20-%20A%20Curious%20Thing/03%20Amy%20Macdonald%20-%20No%20Roots.mp3', title: 'No Roots', ArtworkUrl: 'http://localhost:9900/music/0ee7d819/cover.jpg', Type: 'mp3', Bitrate: '205kb/s VBR', Duration: 270.24, Album: 'A Curious Thing' }"Artist" gibt es da nicht. Fix:
author = author + '|' + lmstracklist[currentIndex].Album;Jetzt ist es umgekehrt, jetzt fliegt der Text alle 10 Sekunden mal weg und da steht dann für einen Moment nur "No Roots".
Falls dann sonst alles Okay ist (Artist kommt ja nicht aus deinen MP3-Tags (ID3-Tags) mit - also ist undefined ja sogar korrekt), kannst du die DEV Version (Unterer Teil) nehmen.
https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/DEV/NSPanelTs.ts
Unten ist ein neuer Parameter "showOnlyPlayerHeadline: true", der dann die Heading-Angabe in der Variable nicht mehr mit dem Album überschreibt.
let SqueezeboxRPC: PageType = { 'type': 'cardMedia', 'heading': 'SqueezeboxRPC', 'hiddenByTrigger': true, 'items': [ { id: AliasPath + 'Media.PlayerSqueezeboxRPC2', adapterPlayerInstance: 'squeezeboxrpc.0.', speakerList: ['SqueezePlay'], mediaDevice: 'SqueezePlay', playList: ['Playlist'], colorMediaIcon: Green, colorMediaArtist: Yellow, colorMediaTitle: Yellow, alwaysOnDisplay: true, autoCreateALias : true, showOnlyPlayerHeadline: true } ] };Änderungen: https://github.com/joBr99/nspanel-lovelace-ui/commit/edf78e775c0a1b5d665558b52c0b5a7c7abb494c
-
Strange, ja, bei anderen Liedern ist kein "undefined".
Natürlich sind die Daten im ID3-Tag, wo sollte der LMS die Informationen sonst her haben...

Aber gut, irgendwas passt da auf meiner Seite nicht, was auch immer das sein mag.
Aber diese kurze Unterbrechung, wo nur der Titelname kommt, die ist weiterhin da:
-
Das kann an dem Triggern liegen - erst wird das eine geschrieben - nspanelskript aktualisiert und 50 ms später wird das andere geschrieben. Aktualisieren des Bildschrims dauert ungefähr so lange wie es flackert :)
-
Strange, ja, bei anderen Liedern ist kein "undefined".
Natürlich sind die Daten im ID3-Tag, wo sollte der LMS die Informationen sonst her haben...

Aber gut, irgendwas passt da auf meiner Seite nicht, was auch immer das sein mag.
Aber diese kurze Unterbrechung, wo nur der Titelname kommt, die ist weiterhin da:
Habe ich auch nicht... Läuft geschmeidig bei mir durch...
Vielleicht hier etwas geändert? Bei mir Original

Oder im Script etwas angepasst?
Oder mal den ioBroker durchstarten? Evtl. ein Ghostscript am Laufen?
Ich könnte das nicht reproduzieren... Läuft bei mir stabil ohne flackern
-
Habe ich auch nicht... Läuft geschmeidig bei mir durch...
Vielleicht hier etwas geändert? Bei mir Original

Oder im Script etwas angepasst?
Oder mal den ioBroker durchstarten? Evtl. ein Ghostscript am Laufen?
Ich könnte das nicht reproduzieren... Läuft bei mir stabil ohne flackern
Oder im Script etwas angepasst?
Nö. Außer das, wo ich den "author" wie oben beschrieben reingeimpft habe. Deswegen lief das ja auch bei den Liedern. facepalm Mit der unangepassten latest-Version des Skripts steht bei mir bei allen Songs wieder "undefined". Hm.
Meine Squeezebox-Adapter-Einstellungen sind wie bei dir. ioBroker ist frisch neu gestartet, half nicht.
-
Ich glaube, das Problem ist nicht das MP3. Sondern die Playlist. Es werden ja nicht die Daten der Datei abgefragt, sondern die der Playlist. Der Artist fehlt da bei mir einfach. Egal, ob ich eine gespeicherte Playlist oder ein Album oder nur einen einzelnen Song starte.
[ { "index": 0, "id": 31792, "url": "file:///music/Alben/Metric%20-%20Romanticize%20The%20Dive/01%20Metric%20-%20Victim%20Of%20Luck.mp3", "title": "Victim Of Luck", "ArtworkUrl": "http://localhost:9900/music/94f7888d/cover.jpg", "Type": "mp3", "Bitrate": "320kb/s CBR", "Duration": 203.306, "Album": "Romanticize The Dive" } ] -
Ich glaube, das Problem ist nicht das MP3. Sondern die Playlist. Es werden ja nicht die Daten der Datei abgefragt, sondern die der Playlist. Der Artist fehlt da bei mir einfach. Egal, ob ich eine gespeicherte Playlist oder ein Album oder nur einen einzelnen Song starte.
[ { "index": 0, "id": 31792, "url": "file:///music/Alben/Metric%20-%20Romanticize%20The%20Dive/01%20Metric%20-%20Victim%20Of%20Luck.mp3", "title": "Victim Of Luck", "ArtworkUrl": "http://localhost:9900/music/94f7888d/cover.jpg", "Type": "mp3", "Bitrate": "320kb/s CBR", "Duration": 203.306, "Album": "Romanticize The Dive" } ] -
Ich glaubs euch ja. :) Die Frage ist, warum schickt entweder der LMS die Daten nicht an den Adapter oder der Adapter die Daten nicht ins JSON. Wenn es häufiger vorkommt, dann wäre ein Fallback vielleicht nicht schlecht. (Der author ist ja eh schon da, warum nochmal beschaffen?)
showOnlyPlayerHeadline liefert den "Heading" String, vom Parameternamen (und meinem Wunsch her) hätte ich das ausgewählte Wiedergabegerät erwartet. Dann sehe ich sofort, welches der Geräte ich eigentlich steuere. Sorry wegen der Unklarheit.
-
Ich glaubs euch ja. :) Die Frage ist, warum schickt entweder der LMS die Daten nicht an den Adapter oder der Adapter die Daten nicht ins JSON. Wenn es häufiger vorkommt, dann wäre ein Fallback vielleicht nicht schlecht. (Der author ist ja eh schon da, warum nochmal beschaffen?)
showOnlyPlayerHeadline liefert den "Heading" String, vom Parameternamen (und meinem Wunsch her) hätte ich das ausgewählte Wiedergabegerät erwartet. Dann sehe ich sofort, welches der Geräte ich eigentlich steuere. Sorry wegen der Unklarheit.
-
Ja, genau den. Die Card lässt mich den ja sogar wählen, aber ich sehe den dann nirgendwo. Ich würd aber gern wissen, ob ich Bad oder Esszimmer steuere. :)
-
Ja, genau den. Die Card lässt mich den ja sogar wählen, aber ich sehe den dann nirgendwo. Ich würd aber gern wissen, ob ich Bad oder Esszimmer steuere. :)
Ja, genau den. Die Card lässt mich den ja sogar wählen, aber ich sehe den dann nirgendwo. Ich würd aber gern wissen, ob ich Bad oder Esszimmer steuere. :)
Okay, den können wir natürlich auch nehmen... Ist bei mir etwas schwieriger... Ich steuere damit exakt einen Player... Daher sehe ich auch keine anderen...
Ich ändere das ab...
-
Ja, genau den. Die Card lässt mich den ja sogar wählen, aber ich sehe den dann nirgendwo. Ich würd aber gern wissen, ob ich Bad oder Esszimmer steuere. :)
Noch mal den unteren Teil aus dem DEV Script ersetzen:
https://github.com/joBr99/nspanel-lovelace-ui/blob/main/ioBroker/DEV/NSPanelTs.ts
Danach sollte der Player und der Artist angezeigt werden...
-
javascript.0 01:03:40.994 warn error at function GenerateMediaPage: Cannot read properties of null (reading 'length') javascript.0 01:03:41.959 warn at GenerateMediaPage (script.js.common.NSPanel:9087:26) javascript.0 01:03:41.959 warn at GeneratePage (script.js.common.NSPanel:6065:29) javascript.0 01:03:41.959 warn at Object.<anonymous> (script.js.common.NSPanel:8421:21) javascript.0 01:03:41.959 warn at step (script.js.common.NSPanel:33:23) javascript.0 01:03:41.959 warn at Object.next (script.js.common.NSPanel:14:53) javascript.0 01:03:41.959 warn at script.js.common.NSPanel:8:71 javascript.0 01:03:41.959 warn at __awaiter (script.js.common.NSPanel:4:12)Die Seite wird jetzt nicht mehr angezeigt.
Ich kann aber grad nicht sagen, wo genau das auftaucht - im squeezeboxrpc-Block sind sowohl author.length als auch title.length immer vorhanden.
Nachtrag: mit showOnlyPlayerHeadline: false tritt es nicht auf. Ich kriegs auf die Schnelle im Code aber nicht eingegrenzt. @armilar
Nachtrag 2:
{ id: 'alias.0.NSPanel.1.Media.PlayerSqueezeboxRPC', adapterPlayerInstance: 'squeezeboxrpc.0.', speakerList: [ 'Heartbeat_4', 'Squeezebox' ], mediaDevice: 'Heartbeat_4', playList: [], colorMediaIcon: { red: 0, green: 255, blue: 0 }, colorMediaArtist: { red: 255, green: 255, blue: 0 }, colorMediaTitle: { red: 255, green: 255, blue: 0 }, alwaysOnDisplay: true, autoCreateALias: true, showOnlyPlayerHeadline: true }Ich habe
name = getState(page.items[0].adapterPlayerInstance + "Players.SqueezePlay.Playername").val;mal so geändert, dann klappts:
name = getState(page.items[0].adapterPlayerInstance + "Players." + page.items[0].mediaDevice + ".Playername").val;
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

