Music Server Interface

Einklappen
X
 
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge
  • hismastersvoice
    Supermoderator
    • 25.08.2015
    • 7147

    For my understanding a question...
    When I use the Lox App an go into Zone -> Favorites the msg is get/favorites/0/50
    An at Port 8091 I get the call /favorites/0 that told me to read the "global favs".

    Klicke auf die Grafik für eine vergrößerte Ansicht  Name: 26-05-_2020_09-53-07.png Ansichten: 0 Größe: 50,7 KB ID: 251133

    If I leave the Zone and go back into Favorites the same msg, but there is no call to 8091.
    Klicke auf die Grafik für eine vergrößerte Ansicht  Name: 26-05-_2020_09-53-36.png Ansichten: 0 Größe: 38,5 KB ID: 251134

    Is there any reason?
    I ask becouse, if I change the Fav in the WebUI I always have to restart the MSG to get the changes.
    If you can include that call all the time I go into Favorites of a Zone it is not needed the restart.


    PS: The same for Playlist audio/cfg/getplaylists2/lms/noUser/0/0/50
    Angehängte Dateien
    Zuletzt geändert von hismastersvoice; 26.05.2020, 10:03.
    Kein Support per PN!

    Kommentar


    • Prof.Mobilux
      Prof.Mobilux kommentierte
      Kommentar bearbeiten
      Same here...

    • Gast
      Gast kommentierte
      Kommentar bearbeiten
      Yes; lists are cached in the system. If they've been requested once, we don't request them again. What is missing here is the SSE interface to be able to tell the service to "uncache" them.

      The cache should automatically be invalidated when you add or remove via UI (Loxone UI, not LMS or MS4L). If it's not happening it's a bug. I will check.

    • hismastersvoice
      hismastersvoice kommentierte
      Kommentar bearbeiten
      Never tested add/del global favs.
      With room favs it act exact like you describe.

      But the room favs generates also a request when you leave the fav section and go back in it again.
      With global favs that shows the msg but don't load new.
  • hismastersvoice
    Supermoderator
    • 25.08.2015
    • 7147



    Room-Favorites Handling works
    The Global Favs can be add or delete in the WebUI of the LMS.

    There is still a bug when add or delete more than one Fav at one Time.
    Add and Delete for all selected work like expected, but after it is done, it goes into a loop of "zone/XX/favorites/0"
    Zuletzt geändert von hismastersvoice; 27.05.2020, 08:27.
    Kein Support per PN!

    Kommentar

  • hismastersvoice
    Supermoderator
    • 25.08.2015
    • 7147

    Gast

    I woke up eraly this morning so I had time to play a bit around with the Muisc-Zone Block in the Lox-Config
    Hope the infos help to get all functions of the Block.


    Missing Important Functions - Music-Zone Block (Lox-Config)
    -> Tr >> Triggers between On/Off audio/2/on // audio/2/off
    -> On >> audio/2/on
    -> Off >> audio/2/off
    -> V+ >> Volume up >> audio/2/volume/+3 !WORKS!
    -> V- >> Volume down >> audio/2/volume/-3 !WORKS!
    -> Alv Analog Input for Volume >> audio/2/volume/XXX !WORKS!

    -> S+ >> Netx RoomFav >> >> audio/2/roomfav/plus
    -> Als >> Analog Input Room-Fav >> audio/2/roomfav/play/XXX !WORKS!
    -> Play >> audio/2/resume !WORKS!
    -> Pause >> audio/2/pause !WORKS!

    -> Stop >> audio/2/off
    -> Song + >> audio/2/queueplus !WORKS!
    -> Song - >> audio/2/queueminus !WORKS!
    -> Shuffle >> audio/2/shuffle/X !WORKS!
    -> Repeat >> audio/2/repeat/X !WORKS!

    -> Mv >> Motion detector (only act after (Qoff or Tqo) >> audio/2/resume !WORKS!


    -> Block T5
    TI2 - Singel-Click >> if zone is stoped should give a play signal (now volume goes up like Zone is already playing) >> unknown msg
    TI2 - Singel-Click >> if playing volume up >> audio/2/volume/+3 !WORKS!
    TI2 - Double-Click >> Next RoomFav >> audio/2/roomfav/plus
    TI5 - Single-Click >> if playing volume down >> audio/2/volume/-3 !WORKS!
    TI5 - Double-Click >> if playing stop zone >> audio/2/off
    If Zone is not playing only the "single-click" play-signal should be send, the rest should be ignored until is playing.

    -> R >> Reset >> audio/2/off
    -> Dis >> Parental control >> Block internal !WORKS!
    -> A >> Alarm >> audio/2/alarm/XX !WORKS! (Not implemented in MS4L now)
    -> FA >> FireAlarm >> audio/2/firealarm/XX !WORKS! (Not implemented in MS4L now)
    -> Be >> DoorBell >> audio/2/bell/XX !WORKS! (Not implemented in MS4L now)
    -> Bu >> AlramCloxk >> audio/2/wecker/XX !WORKS! (Not implemented in MS4L now)

    -> Sleep >> SleepTimer >> audio/2/sleep/XXXX (XXXX=Seconds)
    -> TTS >> Text2Speech >> audio/2/tts/DEU|TEXT/XX (audio/2/tts/LANG|TEXT/Volume)


    Bugs ?
    -> Loop () add/del more than one RoomFav at once

    -> Call Status of unconfigured Zones
    Only Zone 1-10 is configured and 1 and 2 is playing. But the Status-Call goes to 1+2 and all unconfigured Zones.
    Zones with OFF Status are not called.
    Code:
    --> [CALL] Calling GET to http://localhost:8091/zone/1/state
    --> [CALL] Calling GET to http://localhost:8091/zone/2/state
    --> [CALL] Calling GET to http://localhost:8091/zone/11/state
    --> [CALL] Calling GET to http://localhost:8091/zone/12/state
    --> [CALL] Calling GET to http://localhost:8091/zone/13/state
    --> [CALL] Calling GET to http://localhost:8091/zone/14/state
    --> [CALL] Calling GET to http://localhost:8091/zone/15/state
    --> [CALL] Calling GET to http://localhost:8091/zone/16/state
    --> [CALL] Calling GET to http://localhost:8091/zone/17/state
    --> [CALL] Calling GET to http://localhost:8091/zone/18/state
    --> [CALL] Calling GET to http://localhost:8091/zone/19/state
    --> [CALL] Calling GET to http://localhost:8091/zone/20/state
    Zuletzt geändert von hismastersvoice; 28.05.2020, 08:17.
    Kein Support per PN!

    Kommentar

    • Prof.Mobilux
      Supermoderator
      • 25.08.2015
      • 4590

      Next step for the Squeezelite Plugin is ready: Global and room favorites are working now. I realized in completely in LMS without any extra files. Global favs are in the root fav folder of LMS, room favs are in a subfolder called "Zone <zone> <any text you want>", so e. g. "Zone 1 Living Room". If the room favs for a zone is requested by MSG, the plugin looks for such a folder and give back all included favs from that folder. If it does not yet exists, it will be created using the Player Name.

      Klicke auf die Grafik für eine vergrößerte Ansicht

Name: 29-05-_2020_06-41-19.jpg
Ansichten: 1412
Größe: 54,1 KB
ID: 251630
      Zuletzt geändert von Prof.Mobilux; 29.05.2020, 06:42.
      🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


      LoxBerry - Beyond the Limits

      Kommentar


      • Prof.Mobilux
        Prof.Mobilux kommentierte
        Kommentar bearbeiten
        Never tested more than 6 :-) I think this is a limitation of Loxone...

      • hismastersvoice
        hismastersvoice kommentierte
        Kommentar bearbeiten
        Yes is a limitation of the UI,but there is often that we can go around the limitations from Loxone

      • Gast
        Gast kommentierte
        Kommentar bearbeiten
        Unfortunately in V11 they have added a hard-limit of 8. Before, you _could_ let it go above. You could not edit them, etc, but it was possible to show them. In V11 they create an array of 8 elements, and they copy the items over there. So if you're above the limit it does not show them. I will try other approaches by looking at the code, but don't count on it
    • Prof.Mobilux
      Supermoderator
      • 25.08.2015
      • 4590

      hismastersvoice How do you handle the favs if you e.g. delete one in the middle of the list? Example: You have 3 favs and delete fav no. 2. So if you delete this fav in Loxone, you have an empty fav in between:

      Klicke auf die Grafik für eine vergrößerte Ansicht  Name: fav_lox.jpg Ansichten: 0 Größe: 42,0 KB ID: 251740

      If you then delete the fav via CLI in LMS, formerly fav no. 3 becomes fav no. 2 etc., because LMS do not know any empty favs in between the list (as far as I know). Next time you reread the favs, you have a different order in Loxone (fav 3 is now fav 2). This may confuse the logic in LoxConfig, if you use for example AQ.

      Klicke auf die Grafik für eine vergrößerte Ansicht  Name: fav_lms1.jpg Ansichten: 0 Größe: 26,5 KB ID: 251741Klicke auf die Grafik für eine vergrößerte Ansicht  Name: fav_lms2.jpg Ansichten: 0 Größe: 20,3 KB ID: 251742

      I see 2 options:

      1. creating a dummy fav in LMS via CLI and filter it out when sending the favs to MSG (very complicating....)
      2. Doesn't care about any empty favs and accept that fav numbers can change in LoxConfig


      Does anyone know how the original music server handle this?
      Zuletzt geändert von Prof.Mobilux; 30.05.2020, 08:28.
      🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


      LoxBerry - Beyond the Limits

      Kommentar


      • Prof.Mobilux
        Prof.Mobilux kommentierte
        Kommentar bearbeiten
        hismastersvoice Just see in your Video above that you realized the "empty" favs in between the list. Mmhhh, seems to be a little bit easier for you because you save them in files instead of handle them completely in the LMS...

      • Gast
        Gast kommentierte
        Kommentar bearbeiten
        FYI: lists allow empty gaps with `null`. In fact, when you detect the `delete` with the index, you should not drop the item, but switch it to NULL. One idea that comes to my mind is to change the name of that list to something that you can recognize later in your connection to send null. This way you can always keep the 8 elements and do the filtering on the squeezelite gateway.

      • Prof.Mobilux
        Prof.Mobilux kommentierte
        Kommentar bearbeiten
        Gast Thanks. I will handle this by myself. I would like to have favs always snyced between LogitechMedaServer and MSG. So if it is deleted in Loxone, I will also delete it in LMS. It's fine this way - I can handle it here.
    • hismastersvoice
      Supermoderator
      • 25.08.2015
      • 7147

      Prof.Mobilux

      The add and delete in the middle is no problem for me because of store the the favs in a file.
      If a Fav is deleted or renamed in the global Fav don´t also matter because the url/name for the room fav is still saved.
      You have than different names in global an roomfav, so you have to del and add again in the app.
      But everything still works also without changing.

      I do it the following way
      -> read roomfav-file or create it with the first fav in the global list. Loxone has a problem if there is no room fav when the app is calling.
      -> json -> array -> now i can search for the key. eg fav 4 in the middle is deleted I replay the array with a null
      -> array -> json an the favs can be read again

      Important is not to delete in the middle.

      Code:
      {"total":8,"items":[
      {"id":"roomfav:0","title":"SWR3","image":"http:\/\/cdn-profiles.tunein.com\/s24896\/images\/logoq.png?t=1\/image.png"},
      {"id":"roomfav:1","title":"SWR1 Baden-W\u00fcrttemberg","image":"http:\/\/cdn-profiles.tunein.com\/s20291\/images\/logoq.png?t=1\/image.png"},
      {"id":"roomfav:2","title":"SWR Aktuell","image":"http:\/\/cdn-profiles.tunein.com\/s37126\/images\/logoq.png?t=153243\/image.png"},
      null,
      {"id":"roomfav:4","title":"Deine Top Tracks aus 2019","image":"https:\/\/lineup-images.scdn.co\/your-top-songs-2019_DEFAULT-de.jpg"},
      {"id":"roomfav:9","title":"The Singles '82 - '88 von Marillion","image":"https:\/\/i.scdn.co\/image\/ab67616d0000b273ec500071e0c7b546565687a4"},
      {"id":"roomfav:8","title":"...And Justice For All von Metallica","image":"https:\/\/i.scdn.co\/image\/ab67616d0000b2737c05e69390ab7c628a83cee7"},
      {"id":"roomfav:6","title":"This Is Stevie Wonder","image":"https:\/\/i.scdn.co\/image\/ab67706f00000002fcac3bd5ce244380d871e0d2"}
      ]}
      Zuletzt geändert von hismastersvoice; 30.05.2020, 10:34.
      Kein Support per PN!

      Kommentar

      • Prof.Mobilux
        Supermoderator
        • 25.08.2015
        • 4590

        hismastersvoice Thanks for the explanation. "null" do the trick!

        How do you reply to MSG when replacing a roomfav with a global fav? Do you reply with the json favlist?

        I haven't implemented this yet, but if I delete the first roomfav and add a new one from the global fav into the free first position, the web ui responses with "Bitte warten" endlessly...

        Klicke auf die Grafik für eine vergrößerte Ansicht  Name: fav_lox2.jpg Ansichten: 0 Größe: 26,0 KB ID: 251778
        🇺🇦 Hilfe für die Menschen der Ukraine: https://www.loxforum.com/forum/proje...Cr-die-ukraine


        LoxBerry - Beyond the Limits

        Kommentar

        • hismastersvoice
          Supermoderator
          • 25.08.2015
          • 7147

          Zitat von Prof.Mobilux
          hismastersvoice Thanks for the explanation. "null" do the trick!

          How do you reply to MSG when replacing a roomfav with a global fav? Do you reply with the json favlist?

          I haven't implemented this yet, but if I delete the first roomfav and add a new one from the global fav into the free first position, the web ui responses with "Bitte warten" endlessly...
          Add/Del Fav in the App always do a call to get the new roomfavs after closing the windows, so I write add/del to file and the next call reads the roomfav again.
          Format is always json <->

          The global fav are only read after a restart of the MSG, like the post #122.
          So I have implemented that after fav change in the LMS WebUI the MSG gets an restart. Not nice but works until #122 is fixed.
          Kein Support per PN!

          Kommentar


          • Prof.Mobilux
            Prof.Mobilux kommentierte
            Kommentar bearbeiten
            Ok, but e.g. the DELTE command itself from the MSG does not get any reply in JSON format from you? You wait until the new call for the roomfav is coming in?

          • hismastersvoice
            hismastersvoice kommentierte
            Kommentar bearbeiten
            no, none of them get anything back at del/add.
            Only if the request the favs

          • Gast
            Gast kommentierte
            Kommentar bearbeiten
            Correct. When issuing a POST / PUT / DELETE command, the list is internally invalidated; and a new request will happen as soon as data is required, which is often immeditately.
        • Gast

          A bunch of updates today!
          • Both "zone on" and "zone off" are now handled. When the zone is set to off, it will emit a "stop" command. When the zone gets back to play (either internally or externally) it will switch back to "on" by itself. I'm unsure if that's the right behavior but we'll see once people start using it.
          • I have implemented support for "next room favorite" via T5.
          • I added the initial version of the SSE event interface. The gateway will query /events, where it expects to find a SSE server. You can then push any updates you want to perform by outputting the path of the update. More info here.
          I needed to do a big refactor to accommodate certain stuff, so there may be some stuff broken. If so, let me know and we'll address them. I'm thinking about how to automate testing, but it's actually quite hard (many pieces involved, the gateway, Loxone Miniserver, Loxone UI, the backend...)

          Kommentar

          • hismastersvoice
            Supermoderator
            • 25.08.2015
            • 7147

            Zitat von mjesun
            A bunch of updates today!
            • Both "zone on" and "zone off" are now handled. When the zone is set to off, it will emit a "stop" command. When the zone gets back to play (either internally or externally) it will switch back to "on" by itself. I'm unsure if that's the right behavior but we'll see once people start using it.
            • I have implemented support for "next room favorite" via T5.
            • I added the initial version of the SSE event interface. The gateway will query /events, where it expects to find a SSE server. You can then push any updates you want to perform by outputting the path of the update. More info here.
            I needed to do a big refactor to accommodate certain stuff, so there may be some stuff broken. If so, let me know and we'll address them. I'm thinking about how to automate testing, but it's actually quite hard (many pieces involved, the gateway, Loxone Miniserver, Loxone UI, the backend...)
            1. T5
            I think you have to add a check if Zone is playing or not.
            Now if the Zone is stopped, you get with a one click only a volume +3 and not a play signal

            As played around last week I have done something like this.
            Maybe you find a cleaner way to implement this.
            Code:
            async _audioVolume(url) {
            const [, zoneId, , volume] = url.split('/');
            const zone = this._zones[+zoneId - 1];
            
            if (zone.getMode() === 'stop') {
            await zone.play(null, 0);
            } else if (zone.getMode() === 'pause') {
            await zone.resume();
            } else {
            if (/^[+-]/.test(volume)) {
            await zone.volume(zone.getVolume() + +volume);
            } else {
            await zone.volume(+volume);
            }
            }
            If the Zone is stopped and you get the T5 Klick (Volume +) the Zone starts to play.
            I think it is difficult to implement the check into the router-script and I works better in the index.js

            Volume +/- and audio/off works
            Next Fav works also

            I allready implemetet this last week when I played around.

            2. state / FAV EQ
            Bit of an stage thing...

            Everything works only for Zone 1/2, and the rest of the Zones don`t get an update at start.
            If I go to Zone 3 there are no Favs, and EQ gives an error output.
            Code:
            [WSCK] Received message: audio/cfg/equalizer/3
            (node:5815) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'getEqualizer' of undefined
            at MusicServer._audioCfgEqualizer (/opt/music_server/msg/service/music-server/index.js:585:26)
            at MusicServer._handler (/opt/music_server/msg/service/music-server/index.js:415:21)
            at WebSocketConnection.connection.on (/opt/music_server/msg/service/music-server/index.js:83:39)
            at WebSocketConnection.emit (events.js:198:13)
            at WebSocketConnection.processFrame (/usr/lib/nodejs/websocket/lib/WebSocketConnection.js:554:26)
            at /usr/lib/nodejs/websocket/lib/WebSocketConnection.js:323:40
            at process._tickCallback (internal/process/next_tick.js:61:11)
            (node:5815) UnhandledPromiseRejectionWarning: Unhandled promise rejection. This error originated either by throwing inside of an async function without a catch block, or by rejecting a promise which was not handled with .catch(). (rejection id: 2)
            (node:5815) [DEP0018] DeprecationWarning: Unhandled promise rejections are deprecated. In the future, promise rejections that are not handled will terminate the Node.js process with a non-zero exit code.
            After I go to another Zone than 1/2 these two zone loose also Fav/EQ etc.
            Also ,even if the Zones are not running I get a call for Zone 1 and 2, only for them. The rest of the Zone don't get that call.
            Code:
            --> [CALL] Calling GET to http://localhost:8091/zone/1/state
            --> [CALL] Calling GET to http://localhost:8091/zone/2/state
            3. event
            For my understanding, do I have to send the URL in the body as json or how do I send the URL?







            Kein Support per PN!

            Kommentar

            • Gast

              1. I'm not sure if we should switch the zone to "on" when changing the volume... is this the case on the real one? It's easily doable, but I'm unsure.
              2. That's a bug 😳 I removed zones for testing, should be good now.
              3. Yes, in the body of the request, or as a SSE data message. I recommend reading the MDN article on the format because it's very illustrative and actually contains an implementation example.

              Kommentar


              • hismastersvoice
                hismastersvoice kommentierte
                Kommentar bearbeiten
                1. put my code into the new index.js and it works for me
                2. works
            • hismastersvoice
              Supermoderator
              • 25.08.2015
              • 7147

              Gast
              to 1.
              If you use T5 and the Zone is not playing, so we have to set play with the single klick. There is no other way how to set the Zone via T5 to play.
              Is the Zone plays music and there is again a single kick or you stay on the witch the volume goes up.
              Double klick do the Roomfav next.

              Klicke auf die Grafik für eine vergrößerte Ansicht  Name: 3.jpg Ansichten: 0 Größe: 15,6 KB ID: 253211

              2. I´ll try today

              3. Read a bit about it, but didn`t understand 100% how it works on the MSG, will also play a bit around.
              Kein Support per PN!

              Kommentar


              • Gast
                Gast kommentierte
                Kommentar bearbeiten
                This is very very interesting. I'm surprised that the T5 sends a volume up even when the music isn't playing. What is it supposed to play? The first favorite?

              • hismastersvoice
                hismastersvoice kommentierte
                Kommentar bearbeiten
                The last played title/fav...
            • hismastersvoice
              Supermoderator
              • 25.08.2015
              • 7147

              Gast

              I think there is a bug in roomfav/plus

              If I select a Fav like here RoomFav 1 and stop the player. It look like this
              Klicke auf die Grafik für eine vergrößerte Ansicht  Name: 09-06-_2020_12-09-42.png Ansichten: 0 Größe: 16,1 KB ID: 253417
              After I press Play again the AQ switch to 0
              An the RoomFavs starts again with 0.

              Klicke auf die Grafik für eine vergrößerte Ansicht  Name: 09-06-_2020_12-09-59.png Ansichten: 0 Größe: 16,0 KB ID: 253418
              Without stop it works, but after every stop it switch to 0.
              Zuletzt geändert von hismastersvoice; 09.06.2020, 13:24.
              Kein Support per PN!

              Kommentar


              • hismastersvoice
                hismastersvoice kommentierte
                Kommentar bearbeiten
                Also I didn't get the call for reading the queue.
                In the queue window is always only the actual played song.

              • Gast
                Gast kommentierte
                Kommentar bearbeiten
                When you say "I stop the player" is it "stop" or "pause"? Asking because that sulbte difference is important. If it is "pause" the favorite should be kept because it is still playing; but if it's "stop" it should be 0.

              • hismastersvoice
                hismastersvoice kommentierte
                Kommentar bearbeiten
                stop... T5 on the lower button sends a stop (audio/off) signal and not pause.
                Even if its stop it should keep the last played fav/title.

                Only if you load a Playlist or a Global-Fav the Room-Fav should be reset.
                Zuletzt geändert von hismastersvoice; 09.06.2020, 21:24.
            • bayoda
              Dumb Home'r
              • 26.04.2020
              • 17

              Checking every other day for progress - i really hope that this plugin is available soon - so i can integrate my squeezelite players for Alarm and all this ...
              Really cool work

              Kommentar


              • hismastersvoice
                hismastersvoice kommentierte
                Kommentar bearbeiten
                The MSG is not a Plugin for a direct integration, you need a routing between LMS and MSG like Sqeezelite Loxberry Gateway, for TTS etc. you need also the Text2Speech Plugin.

              • bayoda
                bayoda kommentierte
                Kommentar bearbeiten
                hismastersvoice I think I have all of already - LMS installed (loxberry) and m2p based raspis partly integrated .. Are therespecial additional prerequesites which could be done before?

              • hismastersvoice
                hismastersvoice kommentierte
                Kommentar bearbeiten
                You don`t have all you need...
                The Router-Gateway (under development/Prof.Mobilux) is part of the Squeezelite4Loxberry, so It in not enough to install LMS.

                The MSG is not a standalone Plugin, the Devs have to integrate this into there software structure, like me into the MS4L.
            • hismastersvoice
              Supermoderator
              • 25.08.2015
              • 7147

              Zitat von hismastersvoice
              Gast

              I think there is a bug in roomfav/plus

              If I select a Fav like here RoomFav 1 and stop the player. It look like this
              Klicke auf die Grafik für eine vergrößerte Ansicht Name: 09-06-_2020_12-09-42.png Ansichten: 0 Größe: 16,1 KB ID: 253417
              After I press Play again the AQ switch to 0
              An the RoomFavs starts again with 0.

              Klicke auf die Grafik für eine vergrößerte Ansicht Name: 09-06-_2020_12-09-59.png Ansichten: 0 Größe: 16,0 KB ID: 253418
              Without stop it works, but after every stop it switch to 0.
              Gast
              One additional question to that...
              Is ist possible that I send the ID like 1000001 or 3000001 etc. to the MSG / LoxoneMusicServer?
              If I load a Fav or Playlist from outside the LoxApp the ID don´t fit anymore, so I like to reset at least to 0000000 that the next klick start at the beginning of the RoomFav-List.
              Kein Support per PN!

              Kommentar


              • Gast
                Gast kommentierte
                Kommentar bearbeiten
                > If I load a Fav or Playlist from outside the LoxApp the ID don´t fit anymore, so I like to reset at least to 0000000 that the next klick start at the beginning of the RoomFav-List.

                Ah, good question... in theory we should be able to do this; let me think a bit on how to extend the format to achieve it. In general I would prefer avoid having to set something like `"favorite": 3` in the JSON, so we may do it with the playlist name.
            Lädt...