Problem mit einer Rule, verschiedene Kodis ansprechen um livetv sender zu schalten

  • Hallo,


    @horschte
    @TehTux


    ich habe folgendes Problem, und zwar habe ich im Wohnzimmer einen Echo und eine Kodi Installation, diese Steuer ich per Alexa um mir Livetv Sender zu starten.

    das ganze geht auch wunderbar, hier mal der code :

    Code
    rule "schalte auf RTL"
    when Item rtl received command
    then TV_Kanal.sendCommand("RTL DEUTSCHLAND HD")
    end


    dazu gehört natürlich noch das item rtl

    Code
    Switch rtl "rtl" ["Lighting"]


    so jetzt wollte ich das ganze so erweitern das mein Kodi in der Küche auch per Sprache die Livetv Sender startet, natürlich ist in der Küche auch eine eigene Alexa vorhanden, also die gleiche situation wie im Wohnzimmer. dafür habe ich mir eine rule geschrieben, bzw die alte oben erweitert.


    Code
    rule "schalte auf prosieben" 
    when Item prosieben received command 
    then
        val currentEcho1 = Amazon_Echos.members.sortBy[lastUpdate].last
        if (currentEcho1 == Alexaechodot1_lastvoicecommand)
            {   TV_Kanal.sendCommand("Pro7 Deutschland HD") }
        if (currentEcho1 == Alexaechodot2_lastvoicecommand)
            {   TV_Kanal_kueche.sendCommand("Pro7 Deutschland HD") }
    end


    hier die items die dafür wichtig sind


    Switch prosieben "Prosieben deutschland" (livetvsender) ["Lighting"]

    String TV_Kanal_kueche "Kanal [%s]" { channel="kodi:kodi:a298e530-5c4a-f18a-1b6b-958af78700ea:pvr-open-tv"}

    String TV_Kanal "Kanal [%s]" { channel="kodi:kodi:f3e8b3c5-c76c-5411-9fb9-94bb8de0b33a:pvr-open-tv"}


    und die Group die ich in der Rule sortiere


    Code
    Group Amazon_Echos "Amazon Echos"
    Group Amazon_Echosspeech "Amazon Echos Speech"
    Group:Contact:OR(OPEN,CLOSED) Fenster      "Fenster [MAP(fenstersensoren.map):%s]"         <window>
    String      Alexaechodot1_lastvoicecommand              "letzer Sprachbefehl"     (Amazon_Echos)      { channel="amazonechocontrol:echo:3e611610:G090XG0793060A9N:lastVoiceCommand" }
    String      Alexaechodot3_lastvoicecommand              "letzer Sprachbefehl"          (Amazon_Echos)   { channel="amazonechocontrol:echo:3e611610:G090XG0793351UHL:lastVoiceCommand" }
    String      Alexaechodot2_lastvoicecommand              "letzer Sprachbefehl"         (Amazon_Echos)    { channel="amazonechocontrol:echo:3e611610:G6G0XG08943404N0:lastVoiceCommand" }

    das Problem ist aber das er egal welchen der beiden echos anspreche und sage schalte Prosieben Deutschland ein , er immer nur den Befehl an TV_Kanal_kueche sendet. er nimmt also nie den oberen teil der Rule immer nur dass untere if.

    Also muss da irgendwo ein Fehler sein, ich finde ihn aber einfach nicht.

    Vielleicht hat da jemand con euch eine Idee?!


    Danke

  • lass mal die beteilligten items in deiner rule loggen....bspw
    logInfo("Info","letzte echo: " + currentEcho1)
    den rest der logs solltest du hier auch mal posten wenn die rule getriggert wird.

    hier der [definition='1','0']log[/definition] output, einmal der echo im Wohnzimmer einmal der echo in der Küche

    Wohnzimmer


    2020-04-26 13:03:25.802 [ome.event.ItemCommandEvent] - Item 'prosieben' received command ON
    2020-04-26 13:03:25.806 [INFO ] [.eclipse.smarthome.model.script.INFO] - letzter echo: Alexaechodot2_lastvoicecommand (Type=StringItem, State=schalte pro sieben deutschland ein, Label=letzer Sprachbefehl, Category=null, Groups=[Amazon_Echos])
    2020-04-26 13:04:23.905 [ome.event.ItemCommandEvent] - Item 'TV_Kanal_kueche' received command Pro7 Deutschland HD
    2020-04-26 13:04:23.906 [nt.ItemStatePredictedEvent] - TV_Kanal_kueche predicted to become Pro7 Deutschland HD
    2020-04-26 13:04:23.915 [vent.ItemStateChangedEvent] -TV_Kanal_kueche changed from UNDEF to Pro7 Deutschland HD2020-04-26 13:04:23.936 [vent.ItemStateChangedEvent] - TV_Kanal_kueche changed from Pro7 Deutschland HD to UNDEF


    Küche

    2020-04-26 13:04:23.896 [INFO ] [.eclipse.smarthome.model.script.INFO] - letzter echo: Alexaechodot2_lastvoicecommand (Type=StringItem, State=schalte pro sieben deutschland an, Label=letzer Sprachbefehl, Category=null, Groups=[Amazon_Echos])

    2020-04-26 13:04:24.009 [vent.ItemStateChangedEvent] - Alexaechodot1_lastvoicecommand changed from schalte pro sieben deutschland ein to schalte pro sieben deutschland an

    wie man sieht sind es angeblich beide die selben echos was aber nicht stimmt, ich habe verschiedene angesprochen, das heisst dann wohl das

    val currentEcho1 = Amazon_Echos.members.sortBy[lastUpdate].last

    überhaupt nicht funktioniert. oder?

  • also ich bin etwas weiter, und zwar habe ich meinen code leicht verändert, und mir ist aufgefallen das folgendes passiert.

    Code
    rule "schalte auf prosieben" 
    when Item prosieben received command 
    then
        val lastitem = Amazon_Echos.members.sortBy[lastUpdate("influxdb")].last 
       ...............
    end


    wenn ich jetzt in der Küche den Befehl gebe zeigt er mir den richtigen echo dot an in der [definition='1','0']log[/definition], dann gehe ich ins Wohnzimmer sage den Befehl, daraufhin zeigt er wieder den echo dot aus der Küche an, aber wenn ich dann wieder in der Küche den Befehl gebe schaltet er den Wohnzimmer echo.

    das heisst er aktualisiert das "lastitem" bzw "currentecho1" erst nachdem ich den Befehl ausgeführt habe, nicht während ich den Befehl zum Echo sage.

    Meine persistence sieht so aus

    Amazon_Echos* : strategy = everyUpdate

    so kann das ja niemals Funktionieren , nur wie umgehe ich das?

  • so ich habs

    Code
    rule "schalte auf prosieben"
    when Member of Amazon_Echos changed to "schalte pro sieben deutschland ein"
    then
    if (triggeringItem == Alexaechodot1_lastvoicecommand) // Echo Wohnzimmer
    { TV_Kanal.sendCommand("Pro7 Deutschland HD")
    logInfo("INFO","letzter echo: " + triggeringItem) }
    if (triggeringItem == Alexaechodot2_lastvoicecommand) // Echo Küche
    { TV_Kanal_kueche.sendCommand("Pro7 Deutschland HD")
    logInfo("INFO","letzter echo: " + triggeringItem) }
    end


    und zwar über triggeringItem


    jetzt baue ich die rule nach deinem Vorschlag um

  • brauchst du denn für die sender die dummy switches?
    ich hab den pvr-open-tv channel im kodibinding nie genutzt.
    beim umschalten könntest du contains nutzen.

    Code
    if (triggeringItem == Alexaechodot1_lastvoicecommand && triggeringItem.state.toString.contains("prosieben") ) {
    TV_Kanal.sendCommand("Pro7 Deutschland HD")
    }


    ...usw usw

  • brauchst du denn für die sender die dummy switches?
    ich hab den pvr-open-tv channel im kodibinding nie genutzt.
    beim umschalten könntest du contains nutzen.

    Code
    if (triggeringItem == Alexaechodot1_lastvoicecommand && triggeringItem.state.toString.contains("prosieben") ) {
    TV_Kanal.sendCommand("Pro7 Deutschland HD")
    }


    ...usw usw

    naja das problem ist halt wie alexa die Worte versteht, zb sage ich "schalte rtl ein", alexa versteht "schalte r. t. l. ein".

    wenn ich keine dummys mache dann muss ich Routinen in der alexa app erstellen, damit diese nicht immer doof loslabert, das problem ist aber ich kann keine routine mit Sonderzeichen erstellen.

    ich würde gerne sagen, "schalte auf rtl", das kann sie nicht und labert los, jetzt könnte ich eine routine erstellen und ihr sagen wenn das kommt, sag OK. nur gehts nicht weil alexa ja r. t. l. versteht anstatt rtl.


    Code
    rule "schalte auf das erste" 
    when Member of Amazon_Echos changed
    then
    if (triggeringItem == Alexaechodot1_lastvoicecommand && triggeringItem.state.toString.contains("pro sieben") ) {
        TV_Kanal.sendCommand("Pro7 Deutschland HD")
    }
    if (triggeringItem == Alexaechodot2_lastvoicecommand && triggeringItem.state.toString.contains("pro sieben") ) {
        TV_Kanal_kueche.sendCommand("Pro7 Deutschland HD")
    }
    end


    dann sage ich zb "alexa Pro sieben" dann labert die wieder doof rum, wie kann ich das denn unterbinden?
    die rule klappt, nur muss ich alexa ruhig stellen.

  • naja das problem ist halt wie alexa die Worte versteht, zb sage ich "schalte rtl ein", alexa versteht "schalte r. t. l. ein".

    du siehst doch was sie versteht im [definition='1','0']log[/definition]. das machst du bei contains rein.

    wenn ich keine dummys mache dann muss ich Routinen in der alexa app erstellen, damit diese nicht immer doof loslabert, das problem ist aber ich kann keine routine mit Sonderzeichen erstellen.


    mit den alexa v3 tags kannst du die sendernamen auch direkt in deinem kodi item hinterlegen....mittels alexa="ModeController.mode"

  • du siehst doch was sie versteht im [definition='1','0']log[/definition]. das machst du bei contains rein.

    mit den alexa v3 tags kannst du die sendernamen auch direkt in deinem kodi item hinterlegen....mittels alexa="ModeController.mode"

    ich habe meinen post editiert, es geht darum das die los labert.
    Achse mit dem modecontroller, labert die nicht?


    aber dann habe ich das problem das ich dem Modecontroller einen Namen zuordnen muss, dann muss ich ja immer zb sagen "TV prosieben", das ist ja auch sehr unnatürlich

  • das kannst du durch den openhab alexa v3 skill unterbinden.String TV_Kanal "Schalte auf [%s]" {alexa="ModeController.mode" [supportedModes="RTL DEUTSCHLAND HD= r.t.l., Pro7 Deutschland HD=prosieben,"], channel="kodi:kodi:f3e8b3c5-c76c-5411-9fb9-94bb8de0b33a:pvr-open-tv"}

    okay, verstanden.
    davon habe ich aber zwei, ich habe ja zwei Instanzen von kodi.

Jetzt mitmachen!

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