From 731e5cf73dffd900e767c6bfbecc0c3b25b96f56 Mon Sep 17 00:00:00 2001 From: morph166955 <53797132+morph166955@users.noreply.github.com> Date: Sun, 25 Jul 2021 13:29:35 -0500 Subject: [PATCH] [sonos] Add new channel codec for several models (#10979) Signed-off-by: Ben Rosenblum --- bundles/org.openhab.binding.sonos/README.md | 1 + .../sonos/internal/SonosBindingConstants.java | 1 + .../sonos/internal/SonosXMLParser.java | 1 + .../internal/handler/ZonePlayerHandler.java | 50 +++++++++++++++++++ .../src/main/resources/OH-INF/thing/Amp.xml | 1 + .../src/main/resources/OH-INF/thing/Arc.xml | 1 + .../src/main/resources/OH-INF/thing/ArcSL.xml | 1 + .../src/main/resources/OH-INF/thing/Beam.xml | 1 + .../main/resources/OH-INF/thing/PLAYBAR.xml | 1 + .../main/resources/OH-INF/thing/PLAYBASE.xml | 1 + .../main/resources/OH-INF/thing/channels.xml | 20 ++++++++ 11 files changed, 79 insertions(+) diff --git a/bundles/org.openhab.binding.sonos/README.md b/bundles/org.openhab.binding.sonos/README.md index ce04191f2..bf7b8d92c 100644 --- a/bundles/org.openhab.binding.sonos/README.md +++ b/bundles/org.openhab.binding.sonos/README.md @@ -58,6 +58,7 @@ The devices support the following channels: | batterycharging | Switch | R | Indicator set to ON when the battery is charging | Move | | batterylevel | Number | R | Current battery level | Move | | clearqueue | Switch | W | Suppress all songs from the current queue | all | +| codec | String | R | Name of codec currently being decoded | Arc, Arc SL, PLAYBAR, PLAYBASE, Beam, Amp | | control | Player | RW | Control the Zone Player, e.g. PLAY/PAUSE/NEXT/PREVIOUS | all | | coordinator | String | R | UDN of the coordinator for the current group | all | | currentalbum | String | R | Name of the album currently playing | all | diff --git a/bundles/org.openhab.binding.sonos/src/main/java/org/openhab/binding/sonos/internal/SonosBindingConstants.java b/bundles/org.openhab.binding.sonos/src/main/java/org/openhab/binding/sonos/internal/SonosBindingConstants.java index b54dcdf9e..d1efabe51 100644 --- a/bundles/org.openhab.binding.sonos/src/main/java/org/openhab/binding/sonos/internal/SonosBindingConstants.java +++ b/bundles/org.openhab.binding.sonos/src/main/java/org/openhab/binding/sonos/internal/SonosBindingConstants.java @@ -87,6 +87,7 @@ public class SonosBindingConstants { public static final String BATTERYCHARGING = "batterycharging"; public static final String BATTERYLEVEL = "batterylevel"; public static final String CLEARQUEUE = "clearqueue"; + public static final String CODEC = "codec"; public static final String CONTROL = "control"; public static final String COORDINATOR = "coordinator"; public static final String CURRENTALBUM = "currentalbum"; diff --git a/bundles/org.openhab.binding.sonos/src/main/java/org/openhab/binding/sonos/internal/SonosXMLParser.java b/bundles/org.openhab.binding.sonos/src/main/java/org/openhab/binding/sonos/internal/SonosXMLParser.java index 735a75258..90f0358c7 100644 --- a/bundles/org.openhab.binding.sonos/src/main/java/org/openhab/binding/sonos/internal/SonosXMLParser.java +++ b/bundles/org.openhab.binding.sonos/src/main/java/org/openhab/binding/sonos/internal/SonosXMLParser.java @@ -876,6 +876,7 @@ public class SonosXMLParser { case "SurroundEnabled": case "SurroundMode": case "SurroundLevel": + case "HTAudioIn": case "MusicSurroundLevel": case "HeightChannelLevel": val = attributes == null ? null : attributes.getValue("val"); diff --git a/bundles/org.openhab.binding.sonos/src/main/java/org/openhab/binding/sonos/internal/handler/ZonePlayerHandler.java b/bundles/org.openhab.binding.sonos/src/main/java/org/openhab/binding/sonos/internal/handler/ZonePlayerHandler.java index 10a52c983..822f09078 100644 --- a/bundles/org.openhab.binding.sonos/src/main/java/org/openhab/binding/sonos/internal/handler/ZonePlayerHandler.java +++ b/bundles/org.openhab.binding.sonos/src/main/java/org/openhab/binding/sonos/internal/handler/ZonePlayerHandler.java @@ -598,6 +598,9 @@ public class ZonePlayerHandler extends BaseThingHandler implements UpnpIOPartici case "SurroundLevel": updateChannel(SURROUNDTVLEVEL); break; + case "HTAudioIn": + updateChannel(CODEC); + break; case "MusicSurroundLevel": updateChannel(SURROUNDMUSICLEVEL); break; @@ -881,6 +884,12 @@ public class ZonePlayerHandler extends BaseThingHandler implements UpnpIOPartici newState = new DecimalType(value); } break; + case CODEC: + value = getCodec(); + if (value != null) { + newState = new StringType(value); + } + break; case HEIGHTLEVEL: value = getHeightLevel(); if (value != null) { @@ -1468,6 +1477,47 @@ public class ZonePlayerHandler extends BaseThingHandler implements UpnpIOPartici return stateMap.get("MusicSurroundLevel"); } + public @Nullable String getCodec() { + String codec = stateMap.get("HTAudioIn"); + if (codec != null) { + switch (codec) { + case "0": + case "21": + codec = "noSignal"; + break; + case "22": + case "33554454": + codec = "silence"; + break; + case "32": + codec = "DTS"; + break; + case "59": + case "63": + codec = "dolbyAtmos"; + break; + case "33554434": + codec = "DD20"; + break; + case "33554494": + codec = "PCM20"; + break; + case "84934713": + codec = "DD51"; + break; + case "84934714": + codec = "DDPlus51"; + break; + case "84934718": + codec = "PCM51"; + break; + default: + codec = "Unknown - " + codec; + } + } + return codec; + } + public @Nullable String getSubwooferEnabled() { return stateMap.get("SubEnabled"); } diff --git a/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/Amp.xml b/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/Amp.xml index 7709e906e..1c30cd651 100644 --- a/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/Amp.xml +++ b/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/Amp.xml @@ -58,6 +58,7 @@ + diff --git a/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/Arc.xml b/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/Arc.xml index b3ac01b72..0ddcc4444 100644 --- a/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/Arc.xml +++ b/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/Arc.xml @@ -57,6 +57,7 @@ + diff --git a/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/ArcSL.xml b/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/ArcSL.xml index 790560447..2317fbd72 100644 --- a/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/ArcSL.xml +++ b/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/ArcSL.xml @@ -57,6 +57,7 @@ + diff --git a/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/Beam.xml b/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/Beam.xml index 63eab8b1c..90f06a7c4 100644 --- a/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/Beam.xml +++ b/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/Beam.xml @@ -57,6 +57,7 @@ + diff --git a/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/PLAYBAR.xml b/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/PLAYBAR.xml index f4e375ea8..0b5aedab8 100644 --- a/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/PLAYBAR.xml +++ b/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/PLAYBAR.xml @@ -57,6 +57,7 @@ + diff --git a/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/PLAYBASE.xml b/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/PLAYBASE.xml index 2e925d280..a4d2692ad 100644 --- a/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/PLAYBASE.xml +++ b/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/PLAYBASE.xml @@ -57,6 +57,7 @@ + diff --git a/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/channels.xml b/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/channels.xml index 1f27fc47a..f8a6110df 100644 --- a/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/channels.xml +++ b/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/channels.xml @@ -45,6 +45,26 @@ Suppress all songs from the current queue + + String + + Name of codec currently being decoded + + + + + + + + + + + + + false + + + String