Learning by doing ;-) LMS bei bestimmten Titel auf anderen Sender umschalten

  • Hallo,
    ich versuche mich gerade mal wieder an OpenHAB.
    Mir ist jetzt eine Spielerei in den Kopf gekommen, von der ich dachte sie wäre einfach umzusetzen.
    Ich möchte quasi eine Blacklist von Titeln oder Interpreten einstellen.
    So daß, wenn z. B. Lewis Capaldi auf NDR2 rumjault, für eine gewisse Zeit auf einen anderen Radio Sender umgeschaltet wird.
    Wenn es sicher ist, daß er fertig ist, wieder zurück auf NDR2.
    Ich bin jetzt soweit, daß ich verstanden habe, wie ich die Wiedergabe Pausieren kann. Aber wie schalte ich um??
    Ich weiß nicht, wie ich dem Playbefehl einen Sender / Titel mitgebe.

    Außerdem habe ich noch nicht rausgefunden, wie ich OH dazu bringe nicht auf Groß und Kleinschreibung zu achten. Je nach Quelle werden die Interpreten unterschiedlich geschrieben.
    z.B. LEWIS oder Lewis


    Code: squeezebox.things
    Bridge squeezebox:squeezeboxserver:LMS-Server-Syno [ ipAddress="192.168.178.76", webport=9000, cliport=9090 ]
    {
        Thing squeezeboxplayer Wohnzimmer "Wohnzimmer Odroid U3" @ "Logitech Media"[ mac="123456789" ]
        Thing squeezeboxplayer Kueche "Küche" @ "Logitech Media" [ mac="987654321" ]
        Thing squeezeboxplayer Schlafzimmer "Schlafzimmer" @ "Logitech Media"[ mac="babcdefgh" ]
    }
  • Im Wiki steht

    playFavoriteStringID of Favorite to play (channel's state options contains available favorites)


    Also müsste man doch sagen können, spiel Favorit Nummer2.

    Das könnte dann aber auch nach hinten losgehen.
    Wenn der ungewünschte Titel auf dem selben Favoriten läuft, auf den dann umgeschaltet werden soll.

  • ist zwar etwas OT.....aber wie wäre es mit dem LMS plugin von Radio Paradise?

    Radio in FLAC ohne Werbung.....und skippen musste ich da mE auch noch nicht....

  • Favoriten ausgeben
    Item:

    Code
    String squeezeFavoritesList "Favs List [%s]" {channel="squeezebox:squeezeboxserver:LMS-Server-Syno:favoritesList"}


    z.b. wenn du die Favoriten änderst werden alle ins [definition='1','0']log[/definition] geschrieben:

    Code
    rule "Server Favorites Updated"
    when
        Item squeezeFavoritesList received update
    then
        logInfo("Squeezebox", "LMS list of favorites was updated: " + squeezeFavoritesList.state.toString)
    end


    Favorit 1 abspielen:
    Item:

    Code
    String squeezeWohnzimmerPlayFavorite <play> {channel="squeezebox:squeezeboxplayer:LMS-Server-Syno:Wohnzimmer:playFavorite"}

    command:

    Code
    squeezeWohnzimmerPlayFavorite.sendCommand(1)

    was auch noch interessant für dich ist dann die Dauer des Titels:
    Item:

    Code
    Number squeezeWohnzimmerduration {channel="squeezebox:squeezeboxplayer:LMS-Server-Syno:Wohnzimmer:duration"}


    wegen der Groß/Kleinschreibung kannst du folgendes teste:

  • Das grundsätzliche Umschalten bei bestimmten Interpreten klappt.
    Nach 3 Minuten wird auf meinen meistgehörten Favoriten-sender (eigentlich der einzige den ich höre) zurückgeschaltet.
    Nur das Problem mit der Groß und Kleinschreibung habe ich noch nicht lösen können.
    Ich verstehe das mit dem state to string to lower case nicht.

  • Wenn das läuft, werde ich mir nur dafür OH installieren (es sei denn, jemand wandelt das in ein LMS-Addon)
    Bei mir wird es aber den Namen "Nickelweg" bekommen :)

    Genau das Projekt, nur eben als LMS-Addon, schwirrt mir schon Ewigkeiten im Kopf herum.
    Aber mangels Fähigkeiten blieb es dabei.

    BTW: perfekt wäre eine Erkennung mittels akustischer Songerkennung.

  • Verstehe ich das so richtig, daß ich dann einen Switch anlege, der den Status der beiden Items ausliest und das Ergebnis z.B. "Interpret A" oder "TITEL B" in "interpret a" bzw "titel b" umwandelt?
    Für weitere "Blacklist-titel" müsste ich dann also nur die Liste der case Bedingungen erweitern ??

    Das probiere ich die Tage dann mal aus.

  • der ansatz von @TehTux ist echt gut....schlauer pinguin [ay] . ich würde zusätzlich ...toString.contains("capaldi").... verwenden. so ist das system auch immun gegen diesen "featuring" müll der ja heutzutage inflationär genutzt wird.

    Verstehe ich das so richtig, daß ich dann einen Switch anlege, der den Status der beiden Items ausliest und das Ergebnis z.B. "Interpret A" oder "TITEL B" in "interpret a" bzw "titel b" umwandelt?

    da brauchst du keinen switch. Wohnzimmer_Artist und Wohnzimmer_Titel sind ja deine string trigger.
    switch (triggeringItem.state.toString.toLowerCase) { das muss halt nur so bei case rules genutzt werden, hat nichts mit nem item switch zu tun

    Für weitere "Blacklist-titel" müsste ich dann also nur die Liste der case Bedingungen erweitern ??

    korrekt

  • es geht meines wissen kein cointains in einer switch Anweisung.

    was du aber machen kannst ist:

    Das einzige du musst das Item Wohnzimmer_Duration aktivieren.

    Du könntest nur ein Problem bekommen wenn der Zweite Sender auch ein Lied in der Blacklist hat.
    Falls man diesen fall abdecken müsse, könnte man mit dem "remotetitle" den Sendernamen abgleichen.

    Edit:
    array funktioniert mit DSL Rules anders ... darum wird es so nicht laufen

  • stimmt :D
    dann hilft nur den Titel online suchen lassen und dann die passende länge springe.

    wenn du JSR223 Jython benutzen sollte das machbar sein :)

    Oder einfach pro Titel eine passende länge hinterlegen in einem zweiten array.

  • Ungetestet:

    Externer Inhalt gist.github.com
    Inhalte von externen Seiten werden ohne Ihre Zustimmung nicht automatisch geladen und angezeigt.

    @TehTux
    Configuration model 'squeezeswitch2.rules' has errors, therefore ignoring it: [7,9]: no viable alternative at input 'case'

    [9,24]: no viable alternative at input '('
    [9,40]: mismatched input '(' expecting ')'
    [9,41]: missing '}' at '180'
    [9,44]: mismatched input ')' expecting 'end'

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!