diff --git a/bundles/org.openhab.binding.sonos/README.md b/bundles/org.openhab.binding.sonos/README.md index 081680c3d..b706f3260 100644 --- a/bundles/org.openhab.binding.sonos/README.md +++ b/bundles/org.openhab.binding.sonos/README.md @@ -55,6 +55,8 @@ The devices support the following channels: | alarmproperties | String | R | Properties of the alarm currently running | all | | alarmrunning | Switch | R | Set to ON if the alarm was triggered | all | | bass | Number | RW | Set or get the bass level adjustment (value in range -10 / 10) | all | +| 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 | | 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 | 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 5cb4daafd..b437c0715 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 @@ -83,6 +83,8 @@ public class SonosBindingConstants { public static final String ALARMPROPERTIES = "alarmproperties"; public static final String ALARMRUNNING = "alarmrunning"; public static final String BASS = "bass"; + public static final String BATTERYCHARGING = "batterycharging"; + public static final String BATTERYLEVEL = "batterylevel"; public static final String CLEARQUEUE = "clearqueue"; public static final String CONTROL = "control"; public static final String COORDINATOR = "coordinator"; 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 f335fc4cf..e4b59fbb4 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 @@ -689,6 +689,10 @@ public class ZonePlayerHandler extends BaseThingHandler implements UpnpIOPartici stateDescriptionProvider.setStateOptions(new ChannelUID(getThing().getUID(), RADIO), options); } break; + case "MoreInfo": + updateChannel(BATTERYCHARGING); + updateChannel(BATTERYLEVEL); + break; default: break; } @@ -957,6 +961,18 @@ public class ZonePlayerHandler extends BaseThingHandler implements UpnpIOPartici newState = new StringType(value); } break; + case BATTERYCHARGING: + value = extractInfoFromMoreInfo("BattChg"); + if (value != null) { + newState = OnOffType.from("CHARGING".equalsIgnoreCase(value)); + } + break; + case BATTERYLEVEL: + value = extractInfoFromMoreInfo("RawBattPct"); + if (value != null) { + newState = new DecimalType(value); + } + break; default: newState = null; break; @@ -3225,4 +3241,18 @@ public class ZonePlayerHandler extends BaseThingHandler implements UpnpIOPartici int seconds = Integer.parseInt(units[2]); return 3600 * hours + 60 * minutes + seconds; } + + private @Nullable String extractInfoFromMoreInfo(String searchedInfo) { + String value = stateMap.get("MoreInfo"); + if (value != null) { + String[] fields = value.split(","); + for (int i = 0; i < fields.length; i++) { + String[] pair = fields[i].trim().split(":"); + if (pair.length == 2 && searchedInfo.equalsIgnoreCase(pair[0].trim())) { + return pair[1].trim(); + } + } + } + return null; + } } diff --git a/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/Move.xml b/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/Move.xml index e26a1c86c..1bca40910 100644 --- a/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/Move.xml +++ b/bundles/org.openhab.binding.sonos/src/main/resources/OH-INF/thing/Move.xml @@ -53,6 +53,9 @@ + + + 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 eaaeaa44d..6fc4cd4e0 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 @@ -350,4 +350,12 @@ Play the line-in of the the Zone Player corresponding to the given UIN + + + Switch + + Indicator set to ON when the battery is charging + + +