Skip to content

Commit

Permalink
[sonos] Add new channel heightlevel for Sonos ARC / ARC SL (openhab#1…
Browse files Browse the repository at this point in the history
…0759)

Fix openhab#9874

Signed-off-by: Laurent Garnier <[email protected]>
  • Loading branch information
lolodomo authored and computergeek1507 committed Jul 13, 2021
1 parent 90c6f65 commit 56e9c87
Show file tree
Hide file tree
Showing 7 changed files with 34 additions and 0 deletions.
1 change: 1 addition & 0 deletions bundles/org.openhab.binding.sonos/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ The devices support the following channels:
| currenttrackuri | String | R | URI of the current track | all |
| currenttransporturi | String | R | URI of the current AV transport | all |
| favorite | String | W | Play the given favorite entry. The favorite entry has to be predefined in the Sonos Controller app | all |
| heightlevel | Number | RW | Set or get the height level adjustment (value in range -10 / 10) | Arc, Arc SL |
| led | Switch | RW | Set or get the status of the white LED on the front of the Zone Player | all |
| linein | Switch | R | Indicator set to ON when the line-in of the Zone Player is connected | PLAY5, CONNECT, CONNECTAMP, PLAYBAR, PLAYBASE, Beam, Port |
| analoglinein | Switch | R | Indicator set to ON when the analog line-in of the Zone Player is connected | Amp |
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -98,6 +98,7 @@ public class SonosBindingConstants {
public static final String CURRENTTRACKURI = "currenttrackuri";
public static final String CURRENTTRANSPORTURI = "currenttransporturi";
public static final String FAVORITE = "favorite";
public static final String HEIGHTLEVEL = "heightlevel";
public static final String LED = "led";
public static final String LINEIN = "linein";
public static final String ANALOGLINEIN = "analoglinein";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -877,6 +877,7 @@ public void startElement(@Nullable String uri, @Nullable String localName, @Null
case "SurroundMode":
case "SurroundLevel":
case "MusicSurroundLevel":
case "HeightChannelLevel":
val = attributes == null ? null : attributes.getValue("val");
if (val != null) {
changes.put(qName, val);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -162,6 +162,8 @@ public class ZonePlayerHandler extends BaseThingHandler implements UpnpIOPartici
private static final int MAX_SUBWOOFER_GAIN = 15;
private static final int MIN_SURROUND_LEVEL = -15;
private static final int MAX_SURROUND_LEVEL = 15;
private static final int MIN_HEIGHT_LEVEL = -10;
private static final int MAX_HEIGHT_LEVEL = 10;

private final Logger logger = LoggerFactory.getLogger(ZonePlayerHandler.class);

Expand Down Expand Up @@ -338,6 +340,9 @@ public void handleCommand(ChannelUID channelUID, Command command) {
case SURROUNDTVLEVEL:
setSurroundTvLevel(command);
break;
case HEIGHTLEVEL:
setHeightLevel(command);
break;
case ADD:
addMember(command);
break;
Expand Down Expand Up @@ -596,6 +601,9 @@ public void onValueReceived(@Nullable String variable, @Nullable String value, @
case "MusicSurroundLevel":
updateChannel(SURROUNDMUSICLEVEL);
break;
case "HeightChannelLevel":
updateChannel(HEIGHTLEVEL);
break;
case "NightMode":
updateChannel(NIGHTMODE);
break;
Expand Down Expand Up @@ -873,6 +881,12 @@ protected void updateChannel(String channelId) {
newState = new DecimalType(value);
}
break;
case HEIGHTLEVEL:
value = getHeightLevel();
if (value != null) {
newState = new DecimalType(value);
}
break;
case NIGHTMODE:
value = getNightMode();
if (value != null) {
Expand Down Expand Up @@ -1462,6 +1476,10 @@ public boolean isOutputLevelFixed() {
return stateMap.get("SubGain");
}

public @Nullable String getHeightLevel() {
return stateMap.get("HeightChannelLevel");
}

public @Nullable String getTransportState() {
return stateMap.get("TransportState");
}
Expand Down Expand Up @@ -2079,6 +2097,10 @@ public void setSurroundTvLevel(Command command) {
MAX_SURROUND_LEVEL);
}

public void setHeightLevel(Command command) {
setEqualizerNumericSetting(command, "HeightChannelLevel", getHeightLevel(), MIN_HEIGHT_LEVEL, MAX_HEIGHT_LEVEL);
}

public void setNightMode(Command command) {
setEqualizerBooleanSetting(command, "NightMode");
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,7 @@
<channel id="surroundmusicmode" typeId="surroundmusicmode"/>
<channel id="surroundmusiclevel" typeId="surroundmusiclevel"/>
<channel id="surroundtvlevel" typeId="surroundtvlevel"/>
<channel id="heightlevel" typeId="heightlevel"/>
</channels>

<properties>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,7 @@
<channel id="surroundmusicmode" typeId="surroundmusicmode"/>
<channel id="surroundmusiclevel" typeId="surroundmusiclevel"/>
<channel id="surroundtvlevel" typeId="surroundtvlevel"/>
<channel id="heightlevel" typeId="heightlevel"/>
</channels>

<properties>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,13 @@
<description>Play the given favorite entry. The favorite entry has to be predefined in the Sonos Controller app</description>
</channel-type>

<channel-type id="heightlevel" advanced="true">
<item-type>Number</item-type>
<label>Height Level</label>
<description>Set or get the height level adjustment</description>
<state min="-10" max="10" step="1" readOnly="false" pattern="%d"/>
</channel-type>

<channel-type id="led" advanced="true">
<item-type>Switch</item-type>
<label>Led</label>
Expand Down

0 comments on commit 56e9c87

Please sign in to comment.