Seite 1 von 1

Amazon Music Rule

Verfasst: 31. Mai 2018 03:18
von littlekenny
Hallo zusammen,

bin kompletter Neuling was OpenHAB angeht und stehe schon vor meinem ersten Problem...

Ich habe 2 Amazon Echo´s die ich über das Binding eingebunden habe und auch soweit steuern kann.
Jetzt wollte möchte ich gerne folgendes umsetzten:

Eine Auswahl im Sitemap wo ich auswählen kann, ob ich die Musik in der Küche abspielen möchte, im Wohnzimmer oder in beiden Räumen gleichzeitig.

Wenn ich den entsprechenden Raum ausgewählt habe, möchte ich ein Album meiner Playlist auswählen und dann soll die Musik entsprechend der Auswahl abgespielt werden.

Hier mal was ich schon habe, aber leider nicht funktioniert:

meine items Datei:

Code: Alles auswählen

/*Echo in der Küche*/
Player Player_Kueche                "Musikwiedergabe"                                      (Kitchen)   {channel="amazonechocontrol:echoshow:6e5e90ea:player"}
Dimmer Volume_Kueche                "Lautstärke [%.0f %%]"        <soundvolume>            (Kitchen)   {channel="amazonechocontrol:echoshow:6e5e90ea:volume"}
String ImageUrl_Kueche              "Image URL"                                            (Kitchen)   {channel="amazonechocontrol:echoshow:6e5e90ea:imageUrl"}
String Title_Kueche                 "Titel"                        <mp3>                   (Kitchen)   {channel="amazonechocontrol:echoshow:6e5e90ea:title"}
String Subtitle1_Kueche             "Artist"                       <wireless_access_point> (Kitchen)   {channel="amazonechocontrol:echoshow:6e5e90ea:subtitle1"}
String Subtitle2_Kueche             "Album"                        <korganizer>            (Kitchen)   {channel="amazonechocontrol:echoshow:6e5e90ea:subtitle2"}
String ProviderDisplayName_Kueche   "Anbieter Name"                <xmms>                  (Kitchen)   {channel="amazonechocontrol:echoshow:6e5e90ea:providerDisplayName"}
String AmazonMusicPlayListId_Kueche "Playlist auswählen"           <playlist>              (Kitchen)   {channel="amazonechocontrol:echoshow:6e5e90ea:amazonMusicPlayListId"}

/*Echo im Wohnzimmer*/
Player Player_Wohnzimmer                "Musikwiedergabe"                                         (Living_room)    {channel="amazonechocontrol:echo:49cdf420:player"}
Dimmer Volume_Wohnzimmer                "Lautstärke [%.0f %%]"        <soundvolume>               (Living_room)    {channel="amazonechocontrol:echo:49cdf420:volume"}
String ImageUrl_Wohnzimmer              "Image URL"                                               (Living_room)    {channel="amazonechocontrol:echo:49cdf420:imageUrl"}
String Title_Wohnzimmer                 "Titel"                       <mp3>                       (Living_room)    {channel="amazonechocontrol:echo:49cdf420:title"}
String Subtitle1_Wohnzimmer             "Artist"                      <wireless_access_point>     (Living_room)    {channel="amazonechocontrol:echo:49cdf420:subtitle1"}
String Subtitle2_Wohnzimmer             "Album"                       <korganizer>                (Living_room)    {channel="amazonechocontrol:echo:49cdf420:subtitle2"}
String ProviderDisplayName_Wohnzimmer   "Anbieter Name"               <xmms>                      (Living_room)    {channel="amazonechocontrol:echo:49cdf420:providerDisplayName"}
String AmazonMusicPlayListId_Wohnzimmer "Playlist auswählen"          <playlist>                  (Living_room)    {channel="amazonechocontrol:echo:49cdf420:amazonMusicPlayListId"}


/*Multiroom*/
// Player control
Player Echo_Living_Room_Player_multi                "Musikwiedergabe"                                   (Multiroom) {channel="amazonechocontrol:wha:c75a11fe:8752573667464dd4bfbe849404a7a3ba:player"}
Dimmer Echo_Living_Room_Volume_multi                "Lautstärke [%.0f %%]"      <soundvolume>           (Multiroom) {channel="amazonechocontrol:echo:49cdf420:volume, amazonechocontrol:echoshow:6e5e90ea:volume"}
Dimmer Echo_Living_Room_Volume_multi2               "Lautstärke [%.0f %%]"      <soundvolume>           (Multiroom) {channel="amazonechocontrol:wha:c75a11fe:8752573667464dd4bfbe849404a7a3ba:volume"}
String Echo_Living_Room_ImageUrl_multi              "Image URL"                                         (Multiroom) {channel="amazonechocontrol:wha:c75a11fe:8752573667464dd4bfbe849404a7a3ba:imageUrl"}
String Echo_Living_Room_Title_multi                 "Title"                     <mp3>                   (Multiroom) {channel="amazonechocontrol:wha:c75a11fe:8752573667464dd4bfbe849404a7a3ba:title"}
String Echo_Living_Room_Subtitle1_multi             "Artist"                    <wireless_access_point> (Multiroom) {channel="amazonechocontrol:wha:c75a11fe:8752573667464dd4bfbe849404a7a3ba:subtitle1"}
String Echo_Living_Room_Subtitle2_multi             "Album"                     <korganizer>            (Multiroom) {channel="amazonechocontrol:wha:c75a11fe:8752573667464dd4bfbe849404a7a3ba:subtitle2"}
String Echo_Living_Room_ProviderDisplayName_multi   "Anbieter Name"             <xmms>                  (Multiroom) {channel="amazonechocontrol:wha:c75a11fe:8752573667464dd4bfbe849404a7a3ba:providerDisplayName"}
String AmazonMusicPlayListId                        "Playlist auswählen"        <playlist>              (Multiroom) {channel="amazonechocontrol:wha:c75a11fe:8752573667464dd4bfbe849404a7a3ba:amazonMusicPlayListId"}
String Playlistauswahl                              "Playlist auswählen"        <playlist>              (Multiroom) {channel="amazonechocontrol:wha:c75a11fe:8752573667464dd4bfbe849404a7a3ba:amazonMusicPlayListId"}
meine sitemap

Code: Alles auswählen

sitemap Haus label="Multiroom Audio Player"
{
       Frame label="Raumauswahl" {
         Switch  item=Raumauswahl mappings=['Kitchen'='Küche', Living='Wohnzimmer', Multi='Überall']
       }
    //Multimedia

        Frame label="Music Unlimeted" {
            Default   item=Echo_Living_Room_Player_multi
            
            Slider    item=Echo_Living_Room_Volume_multi
            Slider    item=Echo_Living_Room_Volume_multi2
            Image     item=Echo_Living_Room_ImageUrl_multi      label=""
            Text      item=Echo_Living_Room_Title_multi
            Text      item=Echo_Living_Room_Subtitle1_multi     
            Text      item=Echo_Living_Room_Subtitle2_multi
            Text      item=Echo_Living_Room_ProviderDisplayName_multi      
            Switch item=Playlistauswahl mappings=[''='Off', '2'='Amazon Charts', '3'='Helene Fischer - Farbenspiel', '4'='Hip Hop & R&B Mix 2017', '1'='Gestört aber Geil - #Zwei', '5'='Martin´s Playlist']
        
        }
}
meine rules Datei

Code: Alles auswählen

var list5 = '27a22106-68eb-4ea0-ba8a-2c83c24928d2' //Amazon Charts
var list4 = 'd75ee1f5-2d1e-41e2-8598-21a0a1a63174' //Helene Fischer - Farbenspiel
var list3 = '4ae5cbd5-f644-4ca9-846d-487555f3083f' //Hip Hop & R&B Mix 2017
var list1 = '313ad8b6-306c-4724-9614-4fd772e5d0f2' //Gestört aber Geil - #Zwei
var list2 = '20974489-66bd-4883-9630-63479061f477' //Martin´s Playlist


rule "Testregel"
when
    Item Raumauswahl changed to Kitchen
then
    if (Playlistauswahl.state == '1')
    {
    sendCommand("AmazonMusicPlayListId_Kueche", list1)
    }
end
Hoffe ihr könnt mir helfen...

Vielen Dank.

Re: Amazon Music Rule

Verfasst: 31. Mai 2018 12:58
von udo1toni
Du hast eventuell kein Item Raumauswahl in der .items Datei.
Jedes Item muss als Item definiert werden, damit man es verwenden kann (egal an welcher Stelle).

Wenn Du das Item als String definierst, kannst Du auch tatsächlich Strings verwenden, allerdings muss man für einen String Anführungszeichen verwenden, auch im Triggerbereich.
Allerdings wäre es sinnvoller, die Auswahl über ein Number Item zu steuern. Die Anzeige, was ausgewählt ist, wird dann über eine Map umgesetzt.

Du hast das Item Playlistauswahl identisch zu AmazonMusicPlayListId definiert, eigentlich möchtest Du aber ein ungebundenes Item, dessen Wert dann durch eine Rule an das eigentliche Item übertragen wird.
In der Rule schickst Du dann eine ID, die Du in der Rules-Datei als Variable angelegt hast. Zum einen wäre es sinnvoller, val statt var zu verwenden. Die ID wird sich ja nicht ändern. Ist aber auch eher... suboptimal.
Sinnvoller wäre eine Tabelle, in der die ID mitsamt Titel hinterlegt ist, dann musst Du nur den Index auswählen und bekommst die ID aus der Tabelle sowie den entsprechenden Titel. Das Stichwort hierzu ist hashmap.
Das Ganze ist natürlich extrem unflexibel, weil Du jede verwendbare Playlist auf der Amazon-Seite definieren musst, und dann musst Du sie nochmal in openHAB anlegen.

Re: Amazon Music Rule

Verfasst: 31. Mai 2018 14:46
von littlekenny
Vielen Dank für deine Antwort..
Wie gesagt, ich bin absoluter Neuling und hab so gut wie keinen Plan.....

Habe es jetzt zumindest soweit, dass ich durch die Auswahl eine bestimmte Playlist im ausgewählten Raum abspielen kann.
Allerdings möchte ich ja erst den Raum wählen und dann die entsprechende Playlist und erst nachdem beide Kriterien erfüllt sind, soll er die Musik im entsprechendem abspielen.

meine neue test.items Datei sieht nun vorläufig so aus:

Code: Alles auswählen

Switch U3gangway "Raum auswählen"
String U3Ausgabe
String U3Ausgabe2
die passende test.sitemaps Datei sieht so aus:

Code: Alles auswählen

Switch item=U3gangway mappings=['ON'='Küche', 'OFF'='Wohnzimmer'] visibility=[U3gangway_manual==ON]
Text item=U3gangway label="unit3 gangway (manual mode) [%s]" visibility=[U3gangway_manual==ON]
Text item=U3Ausgabe label="Hier steht der Text aus der Regel3 [%s]"
Text item=U3Ausgabe2 label="[%s]"
und die test.rules so:

Code: Alles auswählen

rule "Musik in der Küche abspielen"
when
Item U3gangway changed to ON
then
AmazonMusicPlayListId_Kueche.sendCommand('313ad8b6-306c-4724-9614-4fd772e5d0f2')
end

rule "Musik im Wohnzimmer abspielen"
when
    Item U3gangway changed to OFF
then
    AmazonMusicPlayListId_Wohnzimmer.sendCommand('313ad8b6-306c-4724-9614-4fd772e5d0f2')
end
das Item "AmazonMusicPlayListId_Kueche" kommt aus meiner amazon.items Datei.

Vielleicht könntest du mir ein Beispiel erstellen, wie du es bei dir beschrieben hast!
Leider gibt es nicht so viele Tutorials auf deutsch und mein Englisch ist leider nicht das beste!


Vielen Dank

Re: Amazon Music Rule

Verfasst: 31. Mai 2018 23:08
von udo1toni
Eine einfache Variante wäre folgendermaßen:
services/my.items

Code: Alles auswählen

Number Player "Wiedergabe [MAP(player.map):%s]"
Number Playlist "Playliste [MAP(playlist.map):%s]"
transformations/player.map

Code: Alles auswählen

0=OFF
1=Wohnzimmer
2=Küche
3=Wohnzimmer & Küche
NULL=-
transformations/playlist.map

Code: Alles auswählen

1=Gestört aber Geil - #Zwei
2=Amazon Charts
3=Helene Fischer - Farbenspiel
4=Hip Hop & R&B Mix 2017
5=Martin´s Playlist
NULL=-
sitemaps/my.sitemap (ein Ausschnitt)

Code: Alles auswählen

Selecion item=Player
Selection item=Playlist
Rule

Code: Alles auswählen

// Unschön... kann man sicher besser machen, aber auf die Schnelle...
// Liste der Playlists, mit Komma getrennt
val String list = "313ad8b6-306c-4724-9614-4fd772e5d0f2,27a22106-68eb-4ea0-ba8a-2c83c24928d2,d75ee1f5-2d1e-41e2-8598-21a0a1a63174,4ae5cbd5-f644-4ca9-846d-487555f3083f,20974489-66bd-4883-9630-63479061f477"


rule "Player und Playlist setzen"
when
    Item Playlist received command  //Playlist wurde gesetzt
then
    if(! (receivedCommand instanceof Number) || !(Player.state instanceof Number))  //gültiges Kommando? gültiger Player ?
        return;
    if((Player.state as Number) == 0)  //Mindestens einer der Player selektiert?
        return;
    if(receivedCommmand > 0 && receivedCommand < 6)  //gültige Playlist?
        val String myList = list.split(",").get(receivedCommmand - 1)
    switch (Player.state as Number) {
        case 1:
            AmazonMusicPlayListId_Wohnzimmer.sendCommand(myList)
        case 2:
            AmazonMusicPlayListId_Kueche.sendCommand(myList)
        case 3: {
            AmazonMusicPlayListId_Wohnzimmer.sendCommand(myList)
            AmazonMusicPlayListId_Kueche.sendCommand(myList)
        }
    }
end
Der Code ist reine Theorie :) wahrscheinlich wird irgendwo was klemmen. Aber Du solltest den Code verstehen können, also, was passieren soll.

Damit das Mapping funktioniert, muss der Mapping Transformation Service installiert sein.

Natürlich könnte man über Rules dafür sorgen, dass man immer vor der Playlistenauswahl explizit einen Player (oder auch mehrere) auswählen muss, aber das macht die Sache nur unnötig kompliziert. Wichtiger ist, dass eben ein gültiger Player (oder eben mehrere) selektiert sind, das stellt die Rule sicher.

Re: Amazon Music Rule

Verfasst: 31. Mai 2018 23:19
von littlekenny
Werde es nachher mal ausprobieren. Hab jetzt erstmal eine Notlösung hinbekommen!
Werde aber mit deinem Code ein wenig ausprobieren, da ich das mit dem Mapping noch nie ausprobiert habe!!!

Vielen Dank.

Re: Amazon Music Rule

Verfasst: 6. Jul 2020 16:44
von Conan75
Hallo Zusammen,

ich mich versucht hier rein zu finden leider ohne Erfolg. Wenn ich mich an das Beispiel von udo1toni (was ich sehr gut finde) halte bekomme ich auf der Sitemap keine Auswahl angezeigt. Daher habe ich die Sitemap wie folgt abgeändert.
Items

Code: Alles auswählen

Number APlayer 
Number APlaylist 
String ARadio2
String Echo_Uerball_RadioStationId "TuneIn Radio Station Id"                                    {channel="amazonechocontrol:wha:Amazon_Bridge:9f8554b6855d44339506e756fdcfbf11:radioStationId"}
Sitemap

Code: Alles auswählen

Selection item=APlayer label="Player [MAP(aplayer.map):%s]" mappings=[0="OFF", 1="Wohnzimmer", 2="Küche", 3="Büro", 4="Schlafzimmer", 5="Überall"]
                Selection item=APlaylist label="Playlist [MAP(aplaylist.map):%s]" mappings=[1="Marquess Turbolento", 2="Die Höner" ]
                Selection item=ARadio2 label="Radiosender" mappings=[ ''="Off", s17490="Radio FFH", s306545="Summer Feeling", s97089="Die 90er", s84481="Die 80er", s302909="Workout", s84487="Eurodance", s2726="Planet Radio", s25260="1 Live", s57109="hr3"]
Rule:

Code: Alles auswählen

rule "Player Test "
when 
Item APlayer received command  //Playlist wurde gesetzt
then


   // PLAYER Anhand der Nummer Auswählen
    switch (APlayer.state as Number) {
        case 0:
             Echo_Living_Room_TTS.sendCommand('Player aus')
             
        case 1:{                                                                                                    // WOHNZIMMER
            Echo_Living_Room_TTS.sendCommand('Wohnzimmer')
            sendComand(Echo_Living_Room_Radio, ON)
           // switch (ARadio.state as Number)
           if (Echo_Living_Room_RadioStationId.state == NULL) (Echo_Living_Room_RadioStationId = ARadio2.state)

           }

        case 2:                                                                                                      // KÜCHE
             Echo_Living_Room_TTS.sendCommand('Küche')
            

        case 3: {                                                                                                    // BÜRO
              Echo_Living_Room_TTS.sendCommand('Büro')

        }
        case 4: {                                                                                                   // Schlafzimmer
     
        }
        case 5: {                                                                                                   // Überall

        }    
Meine frage wie bekomme ich Das Item Echo_Living_Room_RadioStationId (String) den Wert aus der Auswahl von der Sitemap ARadio2 zu übernehmen?

Vielen Dank im Voraus

LG Olli