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

    #16
    Dazu muss openHAB die Lautstärke auf den Bus senden. Du brauchst vermutlich eine Rule zur Vermittlung. Wenn Du auch die Lautstärke steuern möchtest, kommt es darauf an, was der MDT hier für Möglichkeiten bietet. Grundsätzlich könnte ein Dimmer Item aber dafür Verwendung finden.

    Nehmen wir an, Die Lautstärke ist im Number Item SonosVolume hinterlegt, bzw. dieses wird verwendet, um die Lautstärke zu beeinflussen. Wenn Dein Dimmer Item z.B. MDT_Sonos_Vol heißt, reichen folgende Rules:
    Code:
    rule "Lautstärke senden"
    when
        Item SonosVolume changed
    then
        MDT_Sonos_Vol.sendCommand(SonosVolume.state as Number)
    end
    
    rule "Lautstärke setzen"
    when
        Item MDT_Sonos_Vol received command
    then
        switch receivedCommand {
            case INCREASE : SonosVolume.sendCommand((SonosVolume.state as Number) + 5)
            case DECREASE : SonosVolume.sendCommand((SonosVolume.state as Number) - 5)
    //      case ON       : SonosPlayPause.sendCommand(ON)
    //      case OFF      : SonosPlayPause.sendCommand(OFF)
        }
    end
    Wichtig ist, das Zusammenspiel zu verstehen. Lautstärke des Sonos ändert sich -> neuer Wert wird als Kommando nach knx geschickt -> Taster macht Update der Anzeige.
    Taster wird zum "Dimmen" gedrückt -> der empfangene Befehl wird an das Sonos geschickt. Da Sonos keine relative Lautstärke beherrscht, muss aus INCREASE/DECREASE ein passender Befehl erzeugt werden.
    Damit das Ganze ähnlich einem Dimmer funktioniert, muss im MDT Taster noch Telegrammwiederholung für INCREASE/DECREASE aktiviert werden. Den kurzen Tastendruck kann man dann noch verwenden, um eine andere Funktion von Sonos zu steuern, z.B. Play/Pause oder auch Titel vor/zurück.

    Kommentar


      #17
      Vielen Dank. Ich hab das Mal so probiert, aber irgendwie funktioniert es nicht.

      Item Datei:

      Code:
      Player Sonos_Controller   "Controller"                          (Sonos) {channel="sonos:PLAY1:kueche:control"}
      Dimmer Sonos_Volume       "Volume [%.1f %%]" <soundvolume>      (Sonos) {channel="sonos:PLAY1:kueche:volume"}
      Switch Sonos_Mute         "Mute"             <soundvolume_mute> (Sonos) {channel="sonos:PLAY1:kueche:mute"}
      Switch Sonos_LED          "LED"              <switch>           (Sonos) {channel="sonos:PLAY1:kueche:led"}
      String Sonos_Currenttitle "Now playing [%s]" <text>             (Sonos) {channel="sonos:PLAY1:kueche:currenttitle"}
      String Sonos_State        "Status [%s]"      <text>             (Sonos) {channel="sonos:PLAY1:kueche:state"}
      Switch PlayPauseSonoskueche         "Sonos"            ["Switchable"] { knx="1/4/50" }
      Dimmer SonoskuecheVolume         "Sonos Lautstärke"    ["Switchable"] { knx="1/4/51" }
      Number SonoskucheVol                    {knx="<1/4/52"}
      rule Datei:

      Code:
      //Küche
      rule "Sonos SZ Play/Pause"
      when
          Item PlayPauseSonoskueche received command
      then
          Sonos_Controller.sendCommand(if (receivedCommand == ON) PLAY else PAUSE)
      end
      
      // Change Volume
      rule "Sonos kueche Volume"
      when
          Item SonoskuecheVolume 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
      
      rule "Lautstaerke senden"
      when
          Item Sonos_Volume changed
      then
          SonoskuecheVol.sendCommand(SonoskuecheVol.state as Number)
      end
      Im Log kommt folgendes:
      Code:
      Rule 'Lautstaerke senden': The name 'SonoskuecheVol' cannot be resolved to an item or type; line 42, column 5, length 14
      Irgendwo ist hier der Hund begraben.

      Kommentar


        #18
        Du hast ein Tippfehler bei deinen Items. Dort heißt das Item:
        Code:
        Number SonoskucheVol                    {knx="<1/4/52"}
        Da fehlt ein "e" für das "ü"...

        Genau das sagt auch die Fehlermeldung: er findet kein Item, das "SonoskuecheVol" heißt. Diese Fehlermeldung hat ganz oft etwas mit Tippfehlern zu tun....

        Kommentar


          #19
          Oh man vielen Dank, mehrmals angeschaut und immer noch nicht gesehen.

          Funktioniert jetzt so wie ich will.

          Anbei den Code wie ich das gemacht habe.
          Item:

          Code:
          //Group Sonos <player>
          
          Player Sonos_Controller   "Controller"                          (Sonos) {channel="sonos:PLAY1:kueche:control"}
          Dimmer Sonos_Volume       "Volume [%.1f %%]" <soundvolume>      (Sonos) {channel="sonos:PLAY1:kueche:volume"}
          Switch Sonos_Mute         "Mute"             <soundvolume_mute> (Sonos) {channel="sonos:PLAY1:kueche:mute"}
          Switch Sonos_LED          "LED"              <switch>           (Sonos) {channel="sonos:PLAY1:kueche:led"}
          String Sonos_Currenttitle "Now playing [%s]" <text>             (Sonos) {channel="sonos:PLAY1:kueche:currenttitle"}
          String Sonos_State        "Status [%s]"      <text>             (Sonos) {channel="sonos:PLAY1:kueche:state"}
          
          Switch PlayPauseSonoskueche         "Sonos"            ["Switchable"] { knx="1/4/50" }
          Dimmer SonoskuecheVolume         "Sonos Lautstärke"    ["Switchable"] { knx="1/4/51" }
          Number SonoskuecheVol   "Volume [%.1f %%]"  {knx="5.001:1/4/52"}
          Switch SonoskuecheNext             "Sonos Next"        ["Switchable"] { knx="1/4/53" }
          Rule:

          Code:
          // Change Volume
          rule "Sonos kueche Volume"
          when
              Item SonoskuecheVolume received command
          then
              if (!(Sonos_Volume.state instanceof DecimalType)) {
                  Sonos_Volume.sendCommand(10) //Defaultwert
              }
              switch receivedCommand {
                  case ON : {Sonos_Volume.sendCommand(Sonos_Volume.state as DecimalType + 5)}
                  case OFF : {Sonos_Volume.sendCommand(Sonos_Volume.state as DecimalType - 5)}
              }
          end
          
          // Change Track
          rule "Sonos kueche Track"
          when
              Item SonoskuecheNext received command
          then
              switch receivedCommand {
              case ON : {sendCommand(Sonos_Controller, NEXT)}
              case OFF : {sendCommand(Sonos_Controller, PREVIOUS)}
              }
          end
          
          
          
          
          rule "Lautstaerke senden"
          when
              Item Sonos_Volume changed
          then
               SonoskuecheVol.sendCommand(Sonos_Volume.state as DecimalType)
          
          end
          Ist irgendwie ziemlich Kompliziert geworden, aber es funktioniert.

          Zuletzt geändert von AudiQ7; 16.03.2018, 22:16.

          Kommentar


            #20
            Ich bräuchte nochmal eure Hilfe. Da ich gerade erst in Openhab reinkomme habe ich direkt auf das KNX2.0 Binding geupdatet damit ich für die Zukunft gewappnet bin.


            Jetzt funktioniert die Regel "Sonos kueche Volume" nicht mehr. Wenn ich den Befehl auf den Bus sende geht openhab nicht in die Regel rein. Habt ihr ein Tipp woran es liegen könnte? Konfiguriert ist alles gleich wie oben.

            Kommentar


              #21
              Wie sehen Dein Thing und Deine Channel aus? Itemdefinition? Was zeigt das Log an, wenn Du den Taster drückst?

              Kommentar


                #22
                Also die knx.thing sieht so aus:

                Code:
                Type dimmer        : demoDimmer        "Dimmer"      [ switch="1/4/55", position="1/4/56", increaseDecrease="1/4/57" ]
                die item datei sieht so aus:
                Code:
                Dimmer        demoDimmer         "Dimmer [%d %%]"            <light>        { channel="knx:device:bridge:generic:demoDimmer" }
                und die rule ist so aufgebaut wie hier im Thread:

                Code:
                //Change Volume
                rule "Sonos kueche Volume"
                when
                    Item demoDimmer received command
                then
                    if (!(Sonos_Volume.state instanceof DecimalType)) {
                        Sonos_Volume.sendCommand(10) //Defaultwert
                    }
                    switch receivedCommand {
                        //case ON : {sendCommand(Sonos_Volume.state as DecimalType + 5)}
                        //case OFF : {sendCommand(Sonos_Volume.state as DecimalType - 5)}
                        case INCREASE : Sonos_Volume.sendCommand((Sonos_Volume.state as Number) + 5)
                        case DECREASE : Sonos_Volume.sendCommand((Sonos_Volume.state as Number) - 5)
                    }
                end
                Die adresse:
                1/4/55 ist 1.001
                1/4/56 ist 5.001
                1/4/57 ist 3.007

                im Log von Open hab bekomme ich nichts. Im Event log bekomme ich nur was wenn ich Manuell den Prozentwert verstelle.
                Dann heißt es:
                [vent.ItemStateChangedEvent] - demoDimmer changed from 27 to UNDEF


                Mit dem alten KNX Binding hat es funktioniert. Ich würde eben wieder die gleiche Tasten nutzen für die Lautstärke und für den nächsten Track.

                Kommentar


                  #23
                  Und wo ist die Bridge und das Thing? Der Channel gehört zum Thing, welches zur Bridge gehört. In Deiner Konfiguration oben (knx1) hast Du andere GA angegeben - ich nehme an, das ist erstmal zum testen? Solange Du keine Aktionen durch Rules ausführen lässt, kannst Du ohne Probleme die echten GA nehmen.

                  Ich hab bei mir OH2 Testsystem und OH1.8 Produktivsystem parallel laufen. Rules habe ich noch keine im Testsystem, aber ich sehe alle Schaltvorgänge im Log des Testsystems, mit received command bzw. changed oder updated. Auch Schaltvorgänge kann ich über Basic UI und Paper UI auslösen. Wen ich das nächste Mal ein paar Tage Zeit habe, hebe ich die restlichen Bindings um (leider fehlen mir noch ein paar OH1-Bindings, die aber beim letzten Test auch manuell installiert liefen - vdr und asterisk).
                  Wenn das dann alles spielt, schiebe ich die Rules vom Produktivsystem zusätzlich auf das Testsystem, aber nur mit einem logInfo(), statt tatsächlich etwas zu tun. Erst wenn die logs gut aussehen, schalte ich die Rules scharf (und in etwa zum gleichen Zeitpunkt OH1.8 aus). Ich gehe davon aus, dass dieser Teil weitgehend schmerzfrei über die Bühne geht, da ich fast ausschließlich simple Rules habe (sowas wie "wenn es klingelt, schicke einen Text an den vdr").

                  Kommentar


                    #24
                    Meinst du die Bridge und das Thing von Sonos? Diese sind jeweils vorhanden. Hier müsste auch alles richtig konfiguriert sein, da Play und Pause super funktionieren.
                    Ja die GAs sind zum Testen.

                    Ich hab jetzt nochmal etwas getestet jetzt bekomme ich "[vent.ItemStateChangedEvent] - Sonos_Volume changed from 100 to 0" z.b. im Log angezeigt. Jedoch es verändert sich nicht. Es sieht so aus als ob der Befehl Case in der rule nicht bearbeitet wird.

                    Kommentar


                      #25
                      nein, ich meinte schon bridge und thing von knx. Und es geht ja um demoDimmer, der seinen Wert ändern muss.

                      Kommentar


                        #26
                        Also die Bridge ist in der knx.thing datei definiert. Hier kommen auch alle Gruppenadressen rein. Die ist so konfiguriert wie hier beschrieben. https://docs.openhab.org/addons/bind...ontrol-example

                        Kommentar


                          #27
                          Ich kann das leider auch bestätigen.
                          Seit Umstellung auf KNX2 geht keins der Rules mehr mit dem Trigger "Item KNX_xxx_xxx received command", der Trigger "Item KNX_xxx_xxx changed" dagegen geht problemlos

                          Kommentar


                            #28
                            Das scheint „by design“ zu sein, siehe such hier: https://community.openhab.org/t/knx-...not-work/42857

                            Mir erschließt sich die Logik dahinter aber nicht, ich halte das Konzepts eines „Status der GA“ bei KNX immer noch für unpassend...

                            Kommentar


                              #29
                              Zitat von Jockel Beitrag anzeigen
                              Das scheint „by design“ zu sein, siehe such hier: https://community.openhab.org/t/knx-...not-work/42857

                              Mir erschließt sich die Logik dahinter aber nicht, ich halte das Konzepts eines „Status der GA“ bei KNX immer noch für unpassend...
                              Hi Jockel,
                              Danke! Das war eine entscheidende Info.
                              Demzufolge hat sich das KNX1-binding "falsch" verhalten? Es müssten dann nicht nur die Konfiguration, sondern auch die Rules angepasst bzw. verändert werden.







                              Kommentar


                                #30
                                Wie gesagt, persönliche bin ich da anderer Meinung, aber das Bindung ist ja bislang auch nur Beta.

                                Das Anpassen der Regeln ist nicht so einfach, bei mir klappt z.B. das Triggern auf „Rolläden hoch“ nicht und das ist ja durchaus etwas anderes als den Status eines Rolladens zu beobachten.

                                Kommentar

                                Lädt...
                                X