NEWS
Test/Support Adapter SqueezeboxRPC
-
Hi OliverIO,
zu Punkt 1: für mich wäre ideal wenn ich z.B. auf Fav 1 drücke das dann der eingestellte Player Fav 1 abspielt, das tut er, aber wenn ich jetzt wieder auf Fav 1 drücke, das dann der Player in Stop geht meinte ich. Nicht über einen extra Button.
zu Punkt 2: habe ein Wandtablet im Bad und möchte dort einfach auf einen Fav drücken und das Badradio soll anfangen diesen abzuspielen, möchte dem FavWidget einen festen Player, nämlich Bad vorgeben und nicht erst über das PlayerWidget auswählen. Wie geht das? -
@gcg67
zu 1)
das geht leider nicht. die Favoritenknöpfe kennen den aktuellen Zustand des Players nicht.
Ich überlege mir ob ich das mal mit einbaue, aber wie schon an anderer stelle geschrieben, es ist sommer und die Muse für umfangreiche Änderungen hab ich nur bei schlechtem Wetterzu 2)
aber du kannst für jeden favoriten einen eigenen toggle button erstellen (gebe im suchfeld bei den widgets "toggle" ein)
setze den datenpunkt auf cmdGeneral deines Bad-Players
trage bei Wert AN das folgende ein"favorites", "playlist","play","item_id:<favorite_itemid>"
ersetze die spitzen klammern mit dem item_id deines gewünschten favoriten. diesen kannst du im iobroker bei den objekten von squeezeboxrpc im unterverzeichnis favoriten als datenpunkt id ablesen.
beispiel
"favorites", "playlist","play","item_id:10"
Bei AUS kannst du dann den folgenden wert eintragen
stop
-
@OliverIO
Alles gut, wollte wie geschrieben Deine Widgets nutzen, anders läuft es ja bereits. Ist nur halt bei Änderungen mehr Aufwand da was anzupassen, dachte ich komme mit Deinen kompakten Widgets da besser, auch wegen der automatischen Anordnung. Deine Widgets können jetzt schon im Betastatus mehr als meine Bastellösung. Gestalte die Anzeige am Tablet gerade neu.
Mir geht es auch so, zur Winterzeit habe ich auch mehr Zeit grundlegendes zu ändern. -
Hallo, ich beschäftige mich nun seit heute morgen mit diesem Adapter und meiner Herausforderung
Danke @OliverIO für deine viele Arbeit mit dem Adapter!
Ich will/wollte mit dem LMS meinen Homematic.mp3 Player für meine Uhrzeitansagen, Temperaturen, etc ... ablösen. Technisch hätte ich jetzt schon einiges beisammen, Player auf einem Raspi1(!!!) läuft einwandfrei, ich kann auch Favoriten auswählen und abspielen.
Aber, ich finde seit Stunden keine Möglichkeit, verschiedene mp3 blocklygesteuert hintereinander abzuspielen. Mir liegen alle notwendigen Files vor. z.B. "20 Uhr" und ein weiteres mit "3", die hinterienander abgespielt, ergibt "20Uhr3". Dies ändert sich natürlich laufend, bzw auch die Aussentemperaturen werden manchesmal aus 2 Files zusammengestellt.
Habe ich da irgendwas übersehen, oder grundsätzlich mißverstanden?
LG, mxa
-
@metaxa
Mit dem datenpunkt
cmdPlayFavorite Und
cmdPlayUrlKannst du einzelne Dateien abspielen lassen.
Ob das vom timing her klappt musst du ausprobieren.Die nächste Möglichkeit wäre für eine Ansage eine individuelle Playlist zu erzeugen und die dann abspielen lassen.
Besser wäre es natürlich die Ansage jedesmal individuell in eine mp3 Datei zu schreiben und diese dann abspielen lassen. Zusammenfügen von mp3 unter linux geht mit dem Programm mp3wrap.
Beachte, alle Dateien müssen so vorliegen, das der lms drauf zugreifen kann.
-
@OliverIO lieben Dank für deine rasche Reaktion!
@OliverIO sagte in Test Adapter SqueezeboxRPC v0.8.x Latest:
Mit dem datenpunkt
cmdPlayFavorite Und
cmdPlayUrl
Kannst du einzelne Dateien abspielen lassen.
Ob das vom timing her klappt musst du ausprobieren.Davon bin ich ursprünglich ausgegangen. Kann wunderbar einzelne mp3 aufrufen und abspielen, finde jedoch keine Syntax wie z.B.:
file:///volume1/music/Squeeze/002_Andreas.mp3; file:///volume1/music/Squeeze/001_Renata.mp3 oder file:///volume1/music/Squeeze/002_Andreas.mp3 & file:///volume1/music/Squeeze/001_Renata.mp3
@OliverIO sagte in Test Adapter SqueezeboxRPC v0.8.x Latest:
Die nächste Möglichkeit wäre für eine Ansage eine individuelle Playlist zu erzeugen und die dann abspielen lassen.
Dazu habe ich nicht wirklich - für mich schlüssiges - gefunden. VLC, Winamp, etc. habe ich in diesem Thread gefunden, da fehlt mir aber voll der Plan umsomehr ich die Ansteuerung des LMS mit Blockly verwirklichen möchte.
@OliverIO sagte in Test Adapter SqueezeboxRPC v0.8.x Latest:
Besser wäre es natürlich die Ansage jedesmal individuell in eine mp3 Datei zu schreiben und diese dann abspielen lassen. Zusammenfügen von mp3 unter linux geht mit dem Programm mp3wrap.
Beachte, alle Dateien müssen so vorliegen, das der lms drauf zugreifen kann.Das werde ich mir näher ansehen, bis dato versuche ich nur alles zu vermeiden auf der virtuellen Maschine wo iO läuft, zusätzliche Linuxprogramme zu installieren. In erster Linie wegen eines eventuellen Neuaufsetzen.
Deine erstgenannten Möglichkeiten wären mir von daher das Liebste
Frage: Kannst du mir zum Erstellen von individuellen Playlists mehr sagen?LG, mxa
-
Edit zu oberhalb: mit dem Linux Befehl cat (unter Problemlösungen) funktioniert es blitzschnell!
(Geht aber nur, wenn die Bitrate ident ist)z.B.:cat 002_Andreas.mp3 001_Renata.mp3 > kombi.mp3
Jetzt muss ich mal schauen, wie ich das real mit Blockly umsetze.
@OliverIO danke für den Schubs in die Richtung!
-
@metaxa
Verketten von Dateien geht gemäß LMS-konvention nicht. Wie gesagt, dazu musst du eine Playlist erstellen. Die Beschreibung des formats findest du hier
https://de.wikipedia.org/wiki/M3U
http://www.scvi.net/pls.htm
LMS kann M3U und PLS, beide Formate wurden damals von Nullsoft/winamp erfunden.
Zum abspielen dann die url zur playlist an den LMS übergeben. -
@metaxa
Wenn cat funktioniert, dann super. da du die mp3 dateien ja vorproduzierst, kannst du die kodierung ja selbst bestimmen.
ansonsten hier die deutsche beschreibung für mp3wrap
https://wiki.ubuntuusers.de/mp3wrap/ -
@OliverIO
mir ist da noch ein LMS-plugin eingefallen. ob das noch richtig funktioniert
weiß ich nicht.
https://www.nexus0.net/pub/sw/lmsannounce/ -
@OliverIO danke für die weiteren Links.
Auf der https://wiki.ubuntuusers.de/mp3wrap/ habe ich den Hinweis mit cat gefunden und mittlerweile auch schon damit ein wenig herumprobiert. Für mich optimal, ja, weil ich die Standardansagen schon alle vorliegen habe. Genau so eine Lösung hatte ich gesucht!
In dem Link steht zwar 'cat' macht nur bei gleicher bitrate Sinn, ich habs dennoch versucht und funktioniert auch. Das Ergebnis wird augenscheinlich auf die geringste Bitrate angepasst.Lieben Dank und Grüße aus Wien, mxa
-
@metaxa
cat fügt dateien einfach nur binär hintereinander.
cat ist es egal um welche daten es sich da handelt -
@metaxa meine Idee dazu: du installierst in iobroker den Adapter tts say it und wählst „linux Ausgabe“ tts erstellt dann bei jedem speak Befehl eine mp3 diese schiebst du per cp auf lms und danach spielst du es ab. Zwischen dem erzeugen und kopieren müssen ein paar ms Pause sein, sonst spielt er das „alte“ ab. Funktioniert so...
-
@iobroker_Alex
danke für deine Rückmeldung!@iobroker_Alex sagte in Test Adapter SqueezeboxRPC v0.8.x Latest:
wählst „linux Ausgabe“
Wo genau wäre das bitte einzustellen?
Beschäftige mich schon länger mit SayIt, passend wäre da nur "System".
LG -
Hallo, ich spiele seit ein paar Tagen mit dem Adapter herum und muss sagen er funktioniert hervorragen.
Nun zu meiner Frage: gibt es eine Möglichkeit in blocky herauszufinden, wie viele Favoriten ich habe? Zum Hintergrund. Ich habe mir einen Taster mit 4 Buttons von Aqara besorgt (16€).
Oben links - langer Tastendruck: player ausschalten
Oben links - kurzer Tastendruck: player volume kleinerOben rechts - langer Tastendruck: player einschalten
Oben rechts - kurzer Tastendruck: player volume größerUnten links - kurzer Tastendruck: vorheriger Favorit
Unten rechts - kurzer Tastendruck: nächster FavoritIch möchte die Favoriten in einer Art Karussell durchschalten können. Dafür benötige ich allerdings die Anzahl der vorhandenen Favoriten.
Favoriten sind bei mir aktuell nur Radiosender.
-
@stsch83
Mit blockly kenne ich mich leider gar nicht aus.
Mit javascript müsste man einfach alle states unter squeezeboxrpc.0.Favoriten abrufen und durch 6 teilen. -
@OliverIO Wie zählt man denn die Anzahl der States in javascript?
-
@stsch83
Achtung die Vorgehensweise ist auf dem Server eine andere wie auf dem client.
In den Skripten auf dem Server (also in iobroker) kannst du den folgenden Befehl verwenden um alle States nach einem bestimmten Muster zu erhalten$('squeezeboxrpc.0.Favorites.*')
Mit dem einfachen teilen habe ich mich geirrt, da je nach Favoritentyp es mehr wie 6 Datenpunkte geben kann.du kannst ja mal in ein Skript den folgenden Befehl eintragen und dann dir die Logausgabe anschauen
log( $('squeezeboxrpc.0.Favorites.*'))
-
@OliverIO Da kommt folgendes heraus:
{'0':'squeezeboxrpc.0.Favorites.0.Name','1':'squeezeboxrpc.0.Favorites.0.hasitems','2':'squeezeboxrpc.0.Favorites.0.id','3':'squeezeboxrpc.0.Favorites.0.isaudio','4':'squeezeboxrpc.0.Favorites.0.type','5':'squeezeboxrpc.0.Favorites.0.url','6':'squeezeboxrpc.0.Favorites.1.Name','7':'squeezeboxrpc.0.Favorites.1.hasitems','8':'squeezeboxrpc.0.Favorites.1.id','9':'squeezeboxrpc.0.Favorites.1.isaudio','10':'squeezeboxrpc.0.Favorites.1.type','11':'squeezeboxrpc.0.Favorites.1.url','12':'squeezeboxrpc.0.Favorites.2.Name','13':'squeezeboxrpc.0.Favorites.2.hasitems','14':'squeezeboxrpc.0.Favorites.2.id','15':'squeezeboxrpc.0.Favorites.2.isaudio','16':'squeezeboxrpc.0.Favorites.2.type','17':'squeezeboxrpc.0.Favorites.2.url','18':'squeezeboxrpc.0.Favorites.3.Name','19':'squeezeboxrpc.0.Favorites.3.hasitems','20':'squeezeboxrpc.0.Favorites.3.id','21':'squeezeboxrpc.0.Favorites.3.isaudio','22':'squeezeboxrpc.0.Favorites.3.type','23':'squeezeboxrpc.0.Favorites.3.url','length':24}
Ich kann auch nachvollziehen, wie ich es machen kann. Allerdings müsste man ja die Elemente irgendwie gezählt bekommen und nicht nur im Log angezeigt bekommen. Meine skills in Javascript gehen aber gen 0, so dass ich nicht weiß wie ich weiter machen soll.
-
@stsch83
Hier sehr kompakt:var count = Object.entries($('squeezeboxrpc.0.Favorites.*')).reduce((values, [k,v]) => { if (k !== 'length' && typeof v !== "function") { v=v.split(".").slice(0,-1).join("."); if (!values.set[v]) { values.set[v] = 1; values.count++; } } return values; }, { set: {}, count: 0 }).count; log(String(count));
Als Erklärung
$('squeezeboxrpc.0.Favorites.*') ermittelt alle Favoritendatenpunkte
Object.entries ergibt eine Auflistung der Datenpunkte in einem Array in Form key,value
.reduce klappert das Array der Reihe nach ab.
v.split(".").slice(0,-1).join(".") ermittelt den Datenpunktnamen, ohne das letzte Element
Der Rest innerhalb von Reduce speichert die Werte in ein internes Array und zählt.