Ankündigung

Einklappen
Keine Ankündigung bisher.

Sonos Lautstärke HomeAssistant

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

    Sonos Lautstärke HomeAssistant

    Hallo Zusammen,

    ich würde gerne die Lautstärke meiner Sonos über HomeAssistant und meinen MDT GT2 ändern.

    Habe dazu auch etwas im HA Forum gefunden allerdings bekomme ich das ganze leider nicht zum laufen.

    Hat wer das ganze mit HomeAssistant und Knx umgesetzt und kann mich dabei unterstützen?

    Alternativ würde das ganze auch mit NodeRed gehen. Allerdings kenne ich mich mit NodeRed kaum aus.

    Über hilfe wäre ich sehr dankbar.

    Vielen Dank

    #2
    Mahlzeit,

    wenn die grundsätzliche Verbindung zwischen KNX und HomeAssistant funktioniert und SONOS auch eingebunden ist, dann kannst du dies über die Media Control Services von HA steuern. Z.B. ...

    script:
    volume_up_office:
    sequence:
    - service: media_player.volume_up
    data_template:
    entity_id: media_player.office

    Habe ich bisher noch nicht getestet, sollte jedoch funktionieren.

    Gruß
    Rudi
    Viele Grüße ... Rudi

    Kommentar


      #3
      Zitat von herr2d2 Beitrag anzeigen
      Mahlzeit,

      wenn die grundsätzliche Verbindung zwischen KNX und HomeAssistant funktioniert und SONOS auch eingebunden ist, dann kannst du dies über die Media Control Services von HA steuern. Z.B. ...

      script:
      volume_up_office:
      sequence:
      - service: media_player.volume_up
      data_template:
      entity_id: media_player.office

      Habe ich bisher noch nicht getestet, sollte jedoch funktionieren.

      Gruß
      Rudi

      Dann müsste ich aber den Taster mehrfach drücken um lauter zu machen oder ?
      Ich würde das ganze gern per Dimmer am Taster mit einem langen Tastendruck lauter bzw leiser werden lassen

      Kommentar


        #4
        Schau dir mal dieses Beispiel von der HA-Homepage an. Es ist zwar für eine Fernbedienung und dimmbares Licht gedacht, sollte aber auch für SONOS und KNX anwendbar sein ...

        https://www.home-assistant.io/cookbo...ighten_lights/
        Viele Grüße ... Rudi

        Kommentar


          #5
          DPT 3 wird nicht direkt unterstützt. Du könntest aber auf die GA mittels knx event hören (Siehe fire_event Parameter) und die rohdaten benutzen.
          Oder dein Taster unterstützt Befehle bei drücken/release dann gehts mit Dpt1 und nem binary_sensor.

          Kommentar


            #6
            Schau mal hier: https://github.com/pdcemulator/home-...ons/sonos.yaml

            zusätzlich musst du einen Input definieren und in der Knx.yaml ein paar Event Filter setzen. Schau mal in die Sourcen rein.
            Ich nutze die Lautstärke quasi wie einen Dimmer. Also eine An/Aus Boolean GA und ein Prozent Wert für die Lautstärke. Dazu je eine Status GA. Funktioniert mit einem GT2 seit Monaten stabil.

            Kommentar


              #7
              Hallo zusammen,

              habe eine Lösung für das Problem gefunden. Benutze dafür ein Blueprint. Funktioniert soweit bei mir.
              Zuerst muss ein Event Filter in der knx.yaml gesetzt werden. z.B.
              event_filter: ['10/3/*']

              Danach muss ein Blueprint angelgt werden mit dem Inhalt:

              Code:
              blueprint:
                name: KNX - Sonos Dimming DPT3 Control and On_OFF
                description: Control Sonos player entities from KNX switching and relative
                   dimming (DPT 3.007) telegrams.
                domain: automation
                input:
                  media_player:
                    name: Sonos Player
                    description: The Sonos Media Player instance that shall be controled.
                    selector:
                      entity:
                        domain: media_player
                  switch_address:
                    name: Switch group address
                    description: 'Group address for switching the player on and off. DPT 1.001 Example:
                      ''10/3/20''
              
                      '
                  state_address:
                    name: State group address
                    description: 'Group address for player state. DPT 1.001 Example:
                      ''10/3/21''
              
                      '
                  dimm_address:
                    name: Volume relative dimming address
                    description: 'Group address for dimming the volume. DPT 3.007 Example:
                      ''10/3/22''
              
                      '
                  volume_state_address:
                    name: Volume state group address
                    description: 'Group address for player volume. DPT 5.001 Example:
                      ''10/3/23''
              
                      '
                  dimm_time:
                    name: Dimm time
                    description: Time dimming from 0 to 100% shall take.
                    selector:
                      number:
                        min: 1.0
                        max: 20.0
                        step: 0.1
                        unit_of_measurement: seconds
                        mode: slider
                    default: 4
                  dimm_steps:
                    name: Dimm steps
                    description: Steps used to dimm from 0 to 100%.
                    selector:
                      number:
                        min: 2.0
                        max: 100.0
                        step: 1.0
                        unit_of_measurement: steps
                        mode: slider
                    default: 40
              # no matched condition stops repeat sequence to stop dimming (dimm 0)
              mode: restart
              max_exceeded: silent
              variables:
                media_player_entity_id: !input 'media_player'
                _dimm_time: !input 'dimm_time'
                _dimm_steps: !input 'dimm_steps'
                dimm_time: '{{ _dimm_time|float }}'
                dimm_steps: '{{ _dimm_steps|int }}'
                dimm_step: '{{ (1 / dimm_steps) }}'
                dimm_delay: '{{ dimm_time * 1000 / dimm_steps }}'
              trigger:
              - platform: homeassistant
                event: start
                id: initialize
              - platform: event
                event_type: automation_reloaded
                id: initialize
              # when KNX integration was reloaded
              - platform: event
                event_type: service_registered
                event_data:
                  domain: knx
                  service: event_register
                id: initialize
              - platform: event
                event_type: knx_event
                event_data:
                  destination: !input 'switch_address'
                  telegramtype: GroupValueWrite
                id: switch
              - platform: event
                event_type: knx_event
                event_data:
                  destination: !input 'dimm_address'
                  telegramtype: GroupValueWrite
                id: dimm
              - platform: state
                entity_id: !input 'media_player'
                to:
                id: expose_state
              - platform: state
                entity_id: !input 'media_player'
                attribute: volume_level
                id: expose_volume
              action:
              - choose:
                # TURN ON
                - conditions:
                    condition: and
                    conditions:
                    - condition: trigger
                      id: switch
                    - '{{ trigger.event.data.data == 1 }}'
                  sequence:
                  - service: media_player.media_play
                    entity_id: !input 'media_player'
                # TURN OFF
                - conditions:
                    condition: and
                    conditions:
                    - condition: trigger
                      id: switch
                    - '{{ trigger.event.data.data == 0 }}'
                  sequence:
                  - service: media_player.media_pause
                    entity_id: !input 'media_player'
                # VOLUME UP
                - conditions:
                    condition: and
                    conditions:
                    - condition: trigger
                      id: dimm
                    - '{{ 9 <= trigger.event.data.data <= 15 }}'
                  sequence:
                  - repeat:
                      count: '{{ dimm_steps }}'
                      sequence:
                      - service: media_player.volume_set
                        entity_id: !input 'media_player'
                        data:
                          volume_level: '{% if state_attr(media_player_entity_id, "volume_level") == None %}{{ dimm_step }}{% else %}{{ ([0, state_attr(media_player_entity_id, "volume_level") + dimm_step, 1]|sort)[1] }}{% endif %}'
                      - delay:
                          milliseconds: '{{ dimm_delay }}'
                # VOLUME DOWN
                - conditions:
                    condition: and
                    conditions:
                    - condition: trigger
                      id: dimm
                    - '{{ 1 <= trigger.event.data.data <= 7 }}'
                  sequence:
                  - repeat:
                      count: '{{ dimm_steps }}'
                      sequence:
                      - service: media_player.volume_set
                        entity_id: !input 'media_player'
                        data:
                          volume_level: '{% if state_attr(media_player_entity_id, "volume_level") == None %}{{ dimm_step }}{% else %}{{ ([0, state_attr(media_player_entity_id, "volume_level") - dimm_step, 1]|sort)[1] }}{% endif %}'
                      - delay:
                          milliseconds: '{{ dimm_delay }}'
              
                # EXPOSE PLAYER STATE
                - conditions:
                    condition: and
                    conditions:
                    - condition: trigger
                      id: expose_state
                  sequence:
                  - service: knx.send
                    data:
                      address: !input 'state_address'
                      payload: '{% if is_state(media_player_entity_id, "paused") %}0{% else %}1{% endif %}'
                # EXPOSE PLAYER VOLUME
                - conditions:
                    condition: and
                    conditions:
                    - condition: trigger
                      id: expose_volume
                  sequence:
                  - service: knx.send
                    data:
                      address: !input 'volume_state_address'
                      payload: '{% if state_attr(media_player_entity_id, "volume_level") == None %}0{% else %}{{state_attr(media_player_entity_id, "volume_level")*100 }}{% endif %}'
                      type: percent
                # INITIALIZE
                - conditions:
                    condition: trigger
                    id: initialize
                  sequence:
                  - service: knx.event_register
                    data:
                      address: !input 'switch_address'
                  - service: knx.event_register
                    data:
                      address: !input 'dimm_address'
                  - service: knx.send
                    data:
                      address: !input 'state_address'
                      payload: '{% if is_state(media_player_entity_id, "off") %}0{% else %}1{% endif %}'
                  - service: knx.send
                    data:
                      address: !input 'volume_state_address'
                      payload: '{% if state_attr(media_player_entity_id, "volume_level") == None %}0{% else %}{{state_attr(media_player_entity_id, "volume_level")*100 }}{% endif %}'
                      type: percent
              Restart vom System. <- ob das gebraucht wird bin i mir nicht sicher.

              Danach auf Einstellungen -> Vorlagen -> Automatisierung erstellen ->Player aussuchen und KNX Daten eingeben.

              Dann auf Einstellungen -> Einstellungen -> Automatisierungen neu laden. Jetzt sollte alles funktionieren.

              Gruß Danny

              Kommentar


                #8
                Zitat von danny Beitrag anzeigen
                Hallo zusammen,

                habe eine Lösung für das Problem gefunden. Benutze dafür ein Blueprint. Funktioniert soweit bei mir.
                Zuerst muss ein Event Filter in der knx.yaml gesetzt werden. z.B.
                event_filter: ['10/3/*']

                Danach muss ein Blueprint angelgt werden mit dem Inhalt:

                Code:
                blueprint:
                name: KNX - Sonos Dimming DPT3 Control and On_OFF
                description: Control Sonos player entities from KNX switching and relative
                dimming (DPT 3.007) telegrams.
                domain: automation
                input:
                media_player:
                name: Sonos Player
                description: The Sonos Media Player instance that shall be controled.
                selector:
                entity:
                domain: media_player
                switch_address:
                name: Switch group address
                description: 'Group address for switching the player on and off. DPT 1.001 Example:
                ''10/3/20''
                
                '
                state_address:
                name: State group address
                description: 'Group address for player state. DPT 1.001 Example:
                ''10/3/21''
                
                '
                dimm_address:
                name: Volume relative dimming address
                description: 'Group address for dimming the volume. DPT 3.007 Example:
                ''10/3/22''
                
                '
                volume_state_address:
                name: Volume state group address
                description: 'Group address for player volume. DPT 5.001 Example:
                ''10/3/23''
                
                '
                dimm_time:
                name: Dimm time
                description: Time dimming from 0 to 100% shall take.
                selector:
                number:
                min: 1.0
                max: 20.0
                step: 0.1
                unit_of_measurement: seconds
                mode: slider
                default: 4
                dimm_steps:
                name: Dimm steps
                description: Steps used to dimm from 0 to 100%.
                selector:
                number:
                min: 2.0
                max: 100.0
                step: 1.0
                unit_of_measurement: steps
                mode: slider
                default: 40
                # no matched condition stops repeat sequence to stop dimming (dimm 0)
                mode: restart
                max_exceeded: silent
                variables:
                media_player_entity_id: !input 'media_player'
                _dimm_time: !input 'dimm_time'
                _dimm_steps: !input 'dimm_steps'
                dimm_time: '{{ _dimm_time|float }}'
                dimm_steps: '{{ _dimm_steps|int }}'
                dimm_step: '{{ (1 / dimm_steps) }}'
                dimm_delay: '{{ dimm_time * 1000 / dimm_steps }}'
                trigger:
                - platform: homeassistant
                event: start
                id: initialize
                - platform: event
                event_type: automation_reloaded
                id: initialize
                # when KNX integration was reloaded
                - platform: event
                event_type: service_registered
                event_data:
                domain: knx
                service: event_register
                id: initialize
                - platform: event
                event_type: knx_event
                event_data:
                destination: !input 'switch_address'
                telegramtype: GroupValueWrite
                id: switch
                - platform: event
                event_type: knx_event
                event_data:
                destination: !input 'dimm_address'
                telegramtype: GroupValueWrite
                id: dimm
                - platform: state
                entity_id: !input 'media_player'
                to:
                id: expose_state
                - platform: state
                entity_id: !input 'media_player'
                attribute: volume_level
                id: expose_volume
                action:
                - choose:
                # TURN ON
                - conditions:
                condition: and
                conditions:
                - condition: trigger
                id: switch
                - '{{ trigger.event.data.data == 1 }}'
                sequence:
                - service: media_player.media_play
                entity_id: !input 'media_player'
                # TURN OFF
                - conditions:
                condition: and
                conditions:
                - condition: trigger
                id: switch
                - '{{ trigger.event.data.data == 0 }}'
                sequence:
                - service: media_player.media_pause
                entity_id: !input 'media_player'
                # VOLUME UP
                - conditions:
                condition: and
                conditions:
                - condition: trigger
                id: dimm
                - '{{ 9 <= trigger.event.data.data <= 15 }}'
                sequence:
                - repeat:
                count: '{{ dimm_steps }}'
                sequence:
                - service: media_player.volume_set
                entity_id: !input 'media_player'
                data:
                volume_level: '{% if state_attr(media_player_entity_id, "volume_level") == None %}{{ dimm_step }}{% else %}{{ ([0, state_attr(media_player_entity_id, "volume_level") + dimm_step, 1]|sort)[1] }}{% endif %}'
                - delay:
                milliseconds: '{{ dimm_delay }}'
                # VOLUME DOWN
                - conditions:
                condition: and
                conditions:
                - condition: trigger
                id: dimm
                - '{{ 1 <= trigger.event.data.data <= 7 }}'
                sequence:
                - repeat:
                count: '{{ dimm_steps }}'
                sequence:
                - service: media_player.volume_set
                entity_id: !input 'media_player'
                data:
                volume_level: '{% if state_attr(media_player_entity_id, "volume_level") == None %}{{ dimm_step }}{% else %}{{ ([0, state_attr(media_player_entity_id, "volume_level") - dimm_step, 1]|sort)[1] }}{% endif %}'
                - delay:
                milliseconds: '{{ dimm_delay }}'
                
                # EXPOSE PLAYER STATE
                - conditions:
                condition: and
                conditions:
                - condition: trigger
                id: expose_state
                sequence:
                - service: knx.send
                data:
                address: !input 'state_address'
                payload: '{% if is_state(media_player_entity_id, "paused") %}0{% else %}1{% endif %}'
                # EXPOSE PLAYER VOLUME
                - conditions:
                condition: and
                conditions:
                - condition: trigger
                id: expose_volume
                sequence:
                - service: knx.send
                data:
                address: !input 'volume_state_address'
                payload: '{% if state_attr(media_player_entity_id, "volume_level") == None %}0{% else %}{{state_attr(media_player_entity_id, "volume_level")*100 }}{% endif %}'
                type: percent
                # INITIALIZE
                - conditions:
                condition: trigger
                id: initialize
                sequence:
                - service: knx.event_register
                data:
                address: !input 'switch_address'
                - service: knx.event_register
                data:
                address: !input 'dimm_address'
                - service: knx.send
                data:
                address: !input 'state_address'
                payload: '{% if is_state(media_player_entity_id, "off") %}0{% else %}1{% endif %}'
                - service: knx.send
                data:
                address: !input 'volume_state_address'
                payload: '{% if state_attr(media_player_entity_id, "volume_level") == None %}0{% else %}{{state_attr(media_player_entity_id, "volume_level")*100 }}{% endif %}'
                type: percent
                Restart vom System. <- ob das gebraucht wird bin i mir nicht sicher.

                Danach auf Einstellungen -> Vorlagen -> Automatisierung erstellen ->Player aussuchen und KNX Daten eingeben.

                Dann auf Einstellungen -> Einstellungen -> Automatisierungen neu laden. Jetzt sollte alles funktionieren.

                Gruß Danny
                Hat bei mir wunderbar funktioniert, vielen Dank!

                Geht mit jeglichen Media Playern, bei mir z.B. mit Yamaha.

                Einzig den event_filter gibts nicht mehr, hier einfach wie folgt verwenden:
                Code:
                knx:
                event:
                #events für KNX Szenen
                - address:
                - "8/0/*" #Adressbereich wo im KNX die Dimmer-Tasten verknüpft sind

                Kommentar


                  #9
                  Zitat von scheffchoch Beitrag anzeigen
                  Einzig den event_filter gibts nicht mehr, hier einfach wie folgt verwenden:
                  Brauchst du doch garnicht wenn du `knx.event_register` im `initialize`-Zweig benutzt.

                  Kommentar


                    #10
                    Hallo Allerseits,

                    ich versuche diesen Blueprint bei mir ans laufen zu bekommen, leider dimmt HA die Lautstärke bei gedrückt halten der Dimmertaste nicht hoch sondern macht quasi nur einen einzigen Step. Ich muss dann pro Lautstärken Stufe wiederholt die Taste drücken/halten.

                    Habe ich hier eine Falschkonfiguration oder verhält es sich tatsächlich richtig so? Hatte es so verstanden dass wenn ich die Dimmertaste halte die Lautstärke so lange steigt bis ich die Taste wieder loslassen...

                    Es scheint als wenn in der HA Automation die Repeat Schleife nicht ausgeführt wird? Kenne mich da leider zu wenig aus und blicke noch nicht ganz durch in dieser Automation und mit den Steps/repeat an der Stelle.

                    Hat jemand eine Idee was das sein könnte?

                    Hier mal die Konfig, Gruppenmonitor und HA Automations Ablauf:
                    ​​

                    Screenshot 2023-03-24 235830.jpg

                    Hat jemand eine Idee was das sein könnte?

                    Danke und VG
                    Dino
                    Angehängte Dateien

                    Kommentar


                      #11
                      Hallo Dino,

                      ich habe genau das gleiche Problem und bin auch der Ansicht, dass mit der Dimm Funktion ein hoch und runter regeln der Lautstärke möglich sein sollte. Leider passiert immer nur ein Dimm-Schritt unabhängig wie lange die Taste gedrückt wird.
                      Ich konnte leider noch keine Zeit ins debugging mit HA stecken, um weitere Details aus dem Log rauszubekommen.

                      LG
                      Christoph

                      Kommentar


                        #12
                        Versucht mal das service `volume_up` und `volume_down` zu benutzen, statt `volume_set`. Das würde die Fehlerquelle etwas einschränken.

                        Kommentar


                          #13
                          Hi meti, ich habe nun noch einiges weiter probiert, aber bin leider noch nicht zum Erfolg gekommen. Ich vermute jedoch das die Automation einfach nur einmal getriggert wird und nicht weitere Male für solange die Dimmtaste gehalten wird.

                          An der Stelle hätte ich eine generelle Frage zu dem Blueprint, welcher ja auf Deinem https://community.home-assistant.io/...-lights/273473 basiert.
                          Wie wird dieser erneut getriggert? Werden in dem Fall der Dimmtrigger, also die Dimm-Telegramme hoch oder runter von KNX-Seite die ganze Zeit wiederholt?

                          Weil wenn ich an meinem MDT GT2 die Dimmtaste drücke, dann kommt das rel. Dimm-Telegramm "Erhöhen, 100%" nur einmal, worauf ja die id: dimm triggert und mit der entsprechenden action id: dimm ausgeführt wird. Das ist der erste Dimmstep, soweit so gut.

                          Als nächstes triggert dann die id: expose_volume, weil ja die Rückmeldung von der SONOS Box zum HA zum KNX kommt.

                          Und dort endet es...

                          Müsste die ganze Automation nicht irgendwie erneut getriggert werden? oder läuft das innerhalb der action ab und müsste sich innerhalb der Automation erneut triggern?
                          Das hab ich nopch nicht ganz gerafft.

                          Danke und VG
                          Dino

                          Kommentar


                            #14
                            Ah, richtig! Die expose-Funktion darfst du da nicht einbauen. Im 'dimm'-Zweig läuft ja ein 'repeat' - das wird bei einem neuen trigger beendet - also vom Dimm-Stopp Telegram. In diesem Blueprint hier passiert das aber schon durch den 'state' trigger vom expose.

                            Code:
                            mode: restart
                            ist das was die Automation dazu veranlasst. Ohne könntest du das 'repeat' aber nicht beenden. Zumindest wüsste ich nicht wie 🤷 Vielleicht haben die Automation Wizards in HA Discord da ne Antwort drauf. Ansonsten müsste man ganz klassisch Expose in configuration.yaml oder nem extra Blueprint Konfigurieren.

                            Kommentar


                              #15
                              Jetzt ist der Groschen bei mir gefallen ;-)
                              Habe mal im HA Discord #blueprints gefragt https://discord.com/channels/3309442...33816427614220
                              Leider auch keine Idee. Empfiehlt wie Du einen extra Blueprint 😁

                              Hab auch noch einen abgewandelten Blueprint gefunden, in welchem halt der 'state' nicht als trigger mit drin ist... https://gist.github.com/aschamberger...9da495c0065992

                              Ich denke ich werde es erstmal klassisch in die configuration.yaml einbauen.
                              Danke!

                              danny, scheffchoch: Bei Euch verhält es sich doch auch so, oder? Oder nutzt ihr das anders?

                              Kommentar

                              Lädt...
                              X