Ankündigung

Einklappen
Keine Ankündigung bisher.

Starten eines SONOS Gerätes mittels Tastsensor

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Starten eines SONOS Gerätes mittels Tastsensor

    Hallo,
    habe ein OpenHab 2 System, in der Visu funktioniert Sonos ohne Probleme, nun möchte ich mit einen Tastsensor Laut Leise und Pause steuern geht das, habe kein Plan wie ich das programmieren soll.

    #2
    KNX? Dann einfach ein paar GAs in der ETS anlegen, mit den Tastern verknüpfen, items dazu im Openhab anlegen und per Rule die Änderung der GA abfragen und in sendcommand-Befehle auf das Controlleritem der jeweiligen Sonos umsetzen.

    Kommentar


      #3
      Hallo ponG,

      könntest Du das bitte etwas genauer erklären? Also die Rules und die sendcommand! Den Rest habe ich schon laufen, also EIN und AUS schalten eines Players über Taster (incl. Rules um die Lautstärke VOR dem einschalten anzupassen).
      Aber die Lautstärke per Taster ändern habe ich noch nicht hinbekommen

      Kommentar


        #4
        Ich hab kein Sonos, aber dafür Squeezeboxen. Ich denke mal, es wird für Sonos ähnlich gehen:
        Items:
        Code:
        Dimmer    Squ_GF_Bath_1    (GSqueeze)        { knx="1/0/0,1/0/1" }
        GA 1/0/0 ist EIN/AUS, GA 1/0/1 ist INCREASE/DECREASE. Der Taster ist so konfiguriert, dass bei gerdücktem Taster INCREASE/DECREASE alle 400ms wiederholt wird.
        Rule:
        Code:
        rule "SB BadEG dimm"
        when
            Item Squ_GF_Bath_1 received command
        then
            switch receivedCommand {
                case OFF : {
                    logDebug("Squeezebox","Bad EG Titel zurück")
                    squeezeboxNext("Squ_Bad_EG" )
                }
                case ON : {
                    logDebug("Squeezebox","Bad EG Titel vor")
                    squeezeboxPrev("Squ_Bad_EG")
                }
                case DECREASE : {
                    logDebug("Squeezebox","Bad EG lauter")
                    Squ_GF_Bath_Volume.sendCommand(Squ_GF_Bath_Volume.state as DecimalType + 5)
                }
                case INCREASE : {
                    logDebug("Squeezebox","Bad EG leiser")
                    Squ_GF_Bath_Volume.sendCommand(Squ_GF_Bath_Volume.state as DecimalType - 5)
                }
            }
        end

        Kommentar


          #5
          So, hatte jetzt mal Zeit zum testen ... und es funktioniert

          Allerdings habe ich keinen Dimmer eingesetzt, sondern einen Schalter. So muss man halt öfter drücken um die Lautstärke zu erhöhen oder zu verringern.
          Ich denke dies schont die Ohren und die Lautsprecher, falls man(n) mal zuuuu lange drauf drückt.

          Hier meine Items:
          Code:
          Player Sonos_Controller_WZ   "Controller"                          (Sonos) {channel="sonos:PLAYBAR:wz:control"}
          Dimmer Sonos_Volume_WZ       "Volume [%.1f %%]" <soundvolume>      (Sonos) {channel="sonos:PLAYBAR:wz:volume"}
          Switch Sonos_Mute_WZ         "Mute"             <soundvolume_mute> (Sonos) {channel="sonos:PLAYBAR:wz:mute"}
          Switch Sonos_LED_WZ          "LED"              <switch>           (Sonos) {channel="sonos:PLAYBAR:wz:led"}
          String Sonos_CurrentTrack_WZ "Now playing [%s]" <text>             (Sonos) {channel="sonos:PLAYBAR:wz:currenttrack"}
          String Sonos_State_WZ        "Status [%s]"      <text>             (Sonos) {channel="sonos:PLAYBAR:wz:state"}
          Player SonosWZControl         "Control [%s]"     <test>             (Sonos) {channel="sonos:PLAYBAR:wz:control"}
          String Sonos_Station_WZ      "Station"          <test>             (Sonos) {channel="sonos:PLAYBAR:wz:radio", autoupdate="false"}
          Switch PlayPauseSonosWZ         "Sonos"            ["Switchable"] { knx="6/2/1" }
          Switch SonosWZVolume         "Sonos Lautstärke"    ["Switchable"] { knx="6/2/2" }
          Switch SonosWZNext             "Sonos Next"        ["Switchable"] { knx="6/2/3" }

          Die die Rules für Lautstärke ändern und Track ändern:
          Code:
          // Change Volume
          rule "Sonos WZ Volume"
          when
              Item SonosWZVolume received command
          then
              switch receivedCommand {
              case ON : {Sonos_Volume_WZ.sendCommand(Sonos_Volume_WZ.state as DecimalType +3)}
              case OFF : {Sonos_Volume_WZ.sendCommand(Sonos_Volume_WZ.state as DecimalType -3)}
              }
          end
          
          // Change Track
          rule "Sonos WZ change Track"
          when
              Item SonosWZNext received command
          then
              switch receivedCommand {
              case ON : {sendCommand(SonosWZControl, NEXT)}
              case OFF : {sendCommand(SonosWZControl, PREVIOUS)}
              }
          end
          Works like a charme

          Viel Spass beim Testen
          Frank
          Zuletzt geändert von azzkikrboy; 16.06.2017, 19:18.

          Kommentar


            #6
            Zitat von azzkikrboy Beitrag anzeigen
            Allerdings habe ich keinen Dimmer eingesetzt, sondern einen Schalter. So muss man halt öfter drücken um die Lautstärke zu erhöhen oder zu verringern.
            Ich denke dies schont die Ohren und die Lautsprecher, falls man(n) mal zuuuu lange drauf drückt.
            Ja, da hab ich etwas vergessen, zu erwähnen... Ich habe einen zentralen Verstärker (4x2x15W Sinus Class D) für 4 verschiedene Räume. Die Maximallautstärke ist durch den Verstärker vorgegeben (bzw. an der Endstufe eingestellt), so dass ich nicht zu laut hören kann.
            Allerdings funktioniert die Steuerung für uns sehr gut.
            Eine weitere Einschränkung war, dass ich nur zwei Taster zur Verfügung hatte - Programmauswahl (Playlisten, Streamauswahl) mache ich per App, Lautstärke und Titelsprung geht dann über die Taster. Start und Stop ist parallel zum Licht geschaltet.

            Alle vier Jahre kommt der Faschingsumzug direkt an unserem Haus vorbei, da wird dann natürlich mit gefeiert und die Toilette dürfen auch Fremde nutzen, da wird dann beim Ausschalten des Lichts immer ein Tusch gespielt

            Kommentar


              #7
              udo1toni

              ich möchte auch meine Squeezboxen und habe zu deinem Code noch folgende Fragen:

              was für eine GA verwendest Du für "DECREASE/INCREASE"? EIS2?
              HTML-Code:
                Dimmer    Squ_GF_Bath_1    (GSqueeze)        { knx="1/0/0,1/0/1" }


              was für ein ITEM hast Du für "Squ_GF_Bath_Volume" genommen?

              oder hast Du das Squeezebox Addon vom openhab installiert und verwendest von dort die Channel?

              HTML-Code:
                        case DECREASE : {             logDebug("Squeezebox","Bad EG lauter")             Squ_GF_Bath_Volume.sendCommand(Squ_GF_Bath_Volume.state as DecimalType + 5)         }         case INCREASE : {             logDebug("Squeezebox","Bad EG leiser")             Squ_GF_Bath_Volume.sendCommand(Squ_GF_Bath_Volume.state as DecimalType - 5)         }

              Kommentar


                #8
                Meine Items für eine Squeezebox, läuft unter OH1.8.1 (ginge aber auch mit dem Squeezebox1- Binding unter openHAB):
                Code:
                Dimmer  Squ_FF_Bath_1                           (GSqueeze)      { knx="7/0/0,7/0/1" }
                Dimmer  Squ_FF_Bath_Volume  "Volume [%.1f %%]"  (GSqueeze)      { squeeze="Squ_Bad_OG:volume" }
                String  Squ_FF_Bath_Title   "Title [%s]"        (GSqueeze)      { squeeze="Squ_Bad_OG:title" }
                Switch  Squ_FF_Bath_Play    "Play"              (GSqueeze)      { squeeze="Squ_Bad_OG:play" }
                Switch  Squ_FF_Bath_Power   "Power" <tv>        (GSqueeze)      { squeeze="Squ_Bad_OG:power" }
                Switch  Squ_FF_Bath_Next    "Skip"              (GSqueeze)
                und die dazugehörigen Rules:
                Code:
                 rule "SB BadOG prevNext"
                  when
                      Item Squ_FF_Bath_Next received command
                  then
                      if (Squ_FF_Bath_Next.state==OFF)
                          squeezeboxNext("Squ_Bad_OG")
                      else
                          squeezeboxPrev("Squ_Bad_OG")        
                  end
                 
                rule "SB BadOG dimm"
                  when
                      Item Squ_FF_Bath_1 received command
                  then
                      switch receivedCommand {
                          case OFF : {
                              logDebug("Squeezebox","Bad OG Titel zurück")
                              squeezeboxNext("Squ_Bad_OG" )
                          }
                          case ON : {
                              logDebug("Squeezebox","Bad OG Titel vor")
                              squeezeboxPrev("Squ_Bad_OG")
                          }
                          case DECREASE : {
                              logDebug("Squeezebox","Bad OG lauter")
                              Squ_FF_Bath_Volume.sendCommand(Squ_FF_Bath_Volume.state as DecimalType + 5)
                          }
                          case INCREASE : {
                              logDebug("Squeezebox","Bad OG leiser")
                              Squ_FF_Bath_Volume.sendCommand(Squ_FF_Bath_Volume.state as DecimalType - 5)
                          }
                      }
                  end
                    rule "SB BadOG Play"
                  when
                      Item Light_FF_Bath received command
                  then
                      if (receivedCommand==ON) {
                          if (now.plusHours(4).getHourOfDay > 10)
                              Squ_FF_Bath_Volume.sendCommand(60)
                          else
                              Squ_FF_Bath_Volume.sendCommand(30)
                          squeezeboxPlay("Squ_Bad_OG")
                      }
                      else if (receivedCommand==OFF)
                          squeezeboxPause("Squ_Bad_OG")
                  end
                Auf knx-Seite ist der Taster als Dimmer-Wippe konfiguriert, wobei Langzeit auf zyklisch Senden eingestellt ist.

                In der Sitemap ist es so eingerichtet:
                Code:
                Frame label="Squeezebox" {     Switch item=Squ_FF_Bath_Power mappings=[OFF="Off",ON="On"]
                      Switch item=Squ_FF_Bath_Play mappings=[OFF="Stop",ON="Play"] visibility=[Squ_FF_Bath_Power=="ON"]
                      Switch item=Squ_FF_Bath_Next mappings=[OFF="<<",ON=">>"] visibility=[Squ_FF_Bath_Power=="ON"]
                      Slider item=Squ_FF_Bath_Volume visibility=[Squ_FF_Bath_Power=="ON"]
                      Text item=Squ_FF_Bath_Title visibility=[Squ_FF_Bath_Power=="ON"]
                  }
                Unter OH2 sind viele der Klimmzüge unnötig, weil das Binding wesentlich mehr Möglichkeiten bietet. Das habe ich aber bisher nicht angebunden, das knx Binding ist unter OH bei mir etwas zickig.


                Kommentar


                  #9
                  @azzkikrboy
                  Leider bekomme ich folgenden Fehler bei der Rule:
                  Code:
                  [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Sonos WZ Volume': org.eclipse.smarthome.core.library.types.DecimalType
                  Rule
                  Code:
                  // Change Volume
                  rule "Sonos WZ Volume"
                  when
                  Item SonosWZVolume received command
                  then
                  switch receivedCommand {
                  case ON : {Sonos_Volume.sendCommand(Sonos_Volume.state as DecimalType +2)}
                  case OFF : {Sonos_Volume.sendCommand(Sonos_Volume.state as DecimalType -2)}
                  }
                  end
                  Hast du noch etwas importiert oder so?
                  Item sind angelegt wie bei dir

                  Kommentar


                    #10
                    Eventuell passt der Status nicht. Wird denn eine Lautstärke in der UI angezeigt?
                    Du könntest notfalls mit einem Default arbeiten:
                    Code:
                    rule "Sonos WZ Volume"
                    when
                        Item SonosWZVolume received command
                    then
                        if (!(Sonos_Volume.state instanceof DecimalType)) {
                            Sonos_Volume.sendCommand(50) //Defaultwert
                        }
                        switch receivedCommand {
                            case ON : {Sonos_Volume.sendCommand(Sonos_Volume.state as DecimalType + 2)}
                            case OFF : {Sonos_Volume.sendCommand(Sonos_Volume.state as DecimalType - 2)}
                        }
                    end

                    Kommentar


                      #11
                      Super , Dank dir.
                      Das wars!

                      Kommentar


                        #12
                        Ich probiere jetzt seit 3 Abenden verzweifelt den Sonos Lautsprecher in meinem Schlafzimmer mit einen knx Tastsensor zu schalten.
                        Jetzt setze ich auf eure Unterstützung

                        Ich habe im ETS eine Grupenadresse als Umschalter angelegt (4/1/0)

                        Dann ein sonos.thing angelegt:

                        Thing sonos:PLAY1:sz [ udn="RINCON_949F3EFAE47001400", refresh=60]

                        Des weiteren ein Songs.items angelegt:

                        Group Sonos <player>




                        Player Sonos_Controller "Controller" (Sonos) {channel="sonos:PLAY1:sz:control"}

                        Dimmer Sonos_Volume "Volume [%.1f %%]" <soundvolume> (Sonos) {channel="sonos:PLAY1:sz:volume"}

                        Switch Sonos_Mute "Mute" <soundvolume_mute> (Sonos) {channel="sonos:PLAY1:sz:mute"}

                        Switch Sonos_LED "LED" <switch> (Sonos) {channel="sonos:PLAY1:sz:led"}

                        String Sonos_CurrentTrack "Now playing [%s]" <text> (Sonos) {channel="sonos:PLAY1:sz:currenttrack"}

                        Player SonosSZControl "Control [%s]" <test> (Sonos) {channel="sonos:PLAY1:sz:control"}

                        String Sonos_State "Status [%s]" <text> (Sonos) {channel="sonos:PLAY1:sz:state"}

                        Switch PlayPauseSonosSZ "Sonos" ["Switchable"] { knx="4/1/0" }





                        Und dann folgende sonos.rules



                        // Play or pause speakers"

                        rule "Sonos SZ Play/Pause"

                        when

                        Item PlayPauseSonosSZ received command

                        then

                        switch receivedCommand {

                        case ON : {sendCommand(SonosSZControl, PLAY)}

                        case OFF : {sendCommand(SonosSZControl, PAUSE)}

                        }



                        end
                        Ich bin noch relativ neu im Umgang mit OpenHab, deshalb bitte um Nachsicht

                        Hoffe ihr könnt mir Helfen
                        Zuletzt geändert von Moare; 10.01.2018, 20:18.

                        Kommentar


                          #13
                          Ok... Mein Fehler... - Man Sollte die GA auch richtig in der ETS angeben, dann klappts auch

                          Kommentar


                            #14
                            Im vorliegenden Fall wäre die Rule mit einem if-Statement einfacher - ein Switch kann nur entweder OFF oder ON als Kommando empfangen, NULL ist kein gültiges Kommando, nur ein möglicher Status. Die Rule könnte also so aussehen:
                            Code:
                            rule "Sonos SZ Play/Pause"
                            when
                                Item PlayPauseSonosSZ received command
                            then
                                if(receivedCommand == ON)
                                    SonosSZControl.sendCommand(PLAY)
                                else
                                    SonosSZControl.sendCommand(PAUSE)
                            end
                            Und noch kürzer:
                            Code:
                            rule "Sonos SZ Play/Pause"
                            when
                                Item PlayPauseSonosSZ received command
                            then
                                SonosSZControl.sendCommand(if (receivedCommand == ON) PLAY else PAUSE)
                            end
                            Wobei letztere Variante natürlich auch umgebrochen werden kann, um die Lesbarkeit zu erhöhen.

                            Kommentar


                              #15
                              Hallo zusammen,

                              ich versuche die ganze Zeit die aktuelle Lautstärke in % auf den MDT Glastaster 2 zu bekommen. Geht das irgendwie als Dimmer funktion?

                              Kommentar

                              Lädt...
                              X