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