[PJLinkDevice] audio/video mute (#16504)

* audio/video mute

Signed-off-by: Nils Schnabel <github@to.nilsschnabel.de>
Co-authored-by: Leo Siepel <leosiepel@gmail.com>
Signed-off-by: Ciprian Pascu <contact@ciprianpascu.ro>
This commit is contained in:
Nils Schnabel 2024-05-21 11:45:26 +02:00 committed by Ciprian Pascu
parent 703f62937e
commit ec8353ebb4
6 changed files with 50 additions and 6 deletions

View File

@ -36,6 +36,7 @@ public class PJLinkDeviceBindingConstants {
public static final String CHANNEL_TYPE_INPUT = "input";
public static final String CHANNEL_TYPE_AUDIO_MUTE = "audioMute";
public static final String CHANNEL_TYPE_VIDEO_MUTE = "videoMute";
public static final String CHANNEL_TYPE_AUDIO_AND_VIDEO_MUTE = "audioAndVideoMute";
public static final String CHANNEL_TYPE_LAMP_HOURS = "lampHours";
public static final String CHANNEL_TYPE_LAMP_ACTIVE = "lampActive";

View File

@ -181,9 +181,12 @@ public class PJLinkDeviceHandler extends BaseThingHandler {
break;
case CHANNEL_TYPE_AUDIO_MUTE:
case CHANNEL_TYPE_VIDEO_MUTE:
case CHANNEL_TYPE_AUDIO_AND_VIDEO_MUTE:
boolean isAudioMute = channelTypeId.equals(PJLinkDeviceBindingConstants.CHANNEL_TYPE_AUDIO_MUTE);
boolean isVideoMute = channelTypeId.equals(PJLinkDeviceBindingConstants.CHANNEL_TYPE_VIDEO_MUTE);
if (isVideoMute || isAudioMute) {
boolean isAudioAndVideoMute = channelTypeId
.equals(PJLinkDeviceBindingConstants.CHANNEL_TYPE_AUDIO_AND_VIDEO_MUTE);
if (isVideoMute || isAudioMute || isAudioAndVideoMute) {
if (command == RefreshType.REFRESH) {
// refresh both video and audio mute, as it's one request
MuteQueryResponseValue muteStatus = device.getMuteStatus();
@ -191,6 +194,8 @@ public class PJLinkDeviceHandler extends BaseThingHandler {
OnOffType.from(muteStatus.isAudioMuted()));
updateState(PJLinkDeviceBindingConstants.CHANNEL_VIDEO_MUTE,
OnOffType.from(muteStatus.isVideoMuted()));
updateState(PJLinkDeviceBindingConstants.CHANNEL_TYPE_AUDIO_AND_VIDEO_MUTE,
OnOffType.from(muteStatus.isAudioAndVideoMuted()));
} else {
if (isAudioMute) {
logger.trace("Received audio mute command {}", command);
@ -202,6 +207,11 @@ public class PJLinkDeviceHandler extends BaseThingHandler {
boolean muteOn = command == OnOffType.ON;
device.setMute(MuteInstructionChannel.VIDEO, muteOn);
}
if (isAudioAndVideoMute) {
logger.trace("Received video mute command {}", command);
boolean muteOn = command == OnOffType.ON;
device.setMute(MuteInstructionChannel.AUDIO_AND_VIDEO, muteOn);
}
}
} else {
logger.debug("Received unknown audio/video mute command {}", command);

View File

@ -29,21 +29,24 @@ import org.openhab.binding.pjlinkdevice.internal.device.command.ResponseExceptio
public class MuteQueryResponse extends PrefixedResponse<MuteQueryResponse.MuteQueryResponseValue> {
public enum MuteQueryResponseValue {
OFF("Mute off", "30", false, false),
VIDEO_MUTE_ON("Video muted", "11", false, true),
AUDIO_MUTE_ON("Audio muted", "21", true, false),
AUDIO_AND_VIDEO_MUTE_ON("Audio and video muted", "31", true, true);
OFF("Mute off", "30", false, false, false),
VIDEO_MUTE_ON("Video muted", "11", false, true, false),
AUDIO_MUTE_ON("Audio muted", "21", true, false, false),
AUDIO_AND_VIDEO_MUTE_ON("Audio and video muted", "31", true, true, true);
private String text;
private String code;
private boolean audioMuted;
private boolean videoMuted;
private boolean audioAndVideoMuted;
private MuteQueryResponseValue(String text, String code, boolean audioMuted, boolean videoMuted) {
private MuteQueryResponseValue(String text, String code, boolean audioMuted, boolean videoMuted,
boolean audioAndVideoMuted) {
this.text = text;
this.code = code;
this.audioMuted = audioMuted;
this.videoMuted = videoMuted;
this.audioAndVideoMuted = audioAndVideoMuted;
}
public String getText() {
@ -67,6 +70,10 @@ public class MuteQueryResponse extends PrefixedResponse<MuteQueryResponse.MuteQu
public boolean isVideoMuted() {
return this.videoMuted;
}
public boolean isAudioAndVideoMuted() {
return this.audioAndVideoMuted;
}
}
private static final HashSet<ErrorCode> SPECIFIED_ERRORCODES = new HashSet<>(

View File

@ -34,6 +34,8 @@ thing-type.config.pjLinkDevice.pjLinkDevice.tcpPort.description = The TCP port o
# channel types
channel-type.pjLinkDevice.audioAndVideoMute.label = Audio and Video Mute
channel-type.pjLinkDevice.audioAndVideoMute.description = Select the audio and video mute status
channel-type.pjLinkDevice.audioMute.label = Audio Mute
channel-type.pjLinkDevice.audioMute.description = Select the audio mute status
channel-type.pjLinkDevice.input.label = Input

View File

@ -13,10 +13,15 @@
<channel id="input" typeId="input"/>
<channel id="audioMute" typeId="audioMute"/>
<channel id="videoMute" typeId="videoMute"/>
<channel id="audioAndVideoMute" typeId="audioAndVideoMute"/>
<channel id="lamp1Hours" typeId="lampHours"/>
<channel id="lamp1Active" typeId="lampActive"/>
</channels>
<properties>
<property name="thingTypeVersion">1</property>
</properties>
<config-description>
<parameter-group name="basic">
<context>basic</context>
@ -103,6 +108,12 @@
<description>Select the video mute status</description>
</channel-type>
<channel-type id="audioAndVideoMute">
<item-type>Switch</item-type>
<label>Audio and Video Mute</label>
<description>Select the audio and video mute status</description>
</channel-type>
<channel-type id="lampHours">
<item-type>Number</item-type>
<label>Lamp Hours</label>

View File

@ -0,0 +1,13 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<update:update-descriptions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:update="https://openhab.org/schemas/update-description/v1.0.0"
xsi:schemaLocation="https://openhab.org/schemas/update-description/v1.0.0 https://openhab.org/schemas/update-description-1.0.0.xsd">
<thing-type uid="pjLinkDevice:pjLinkDevice">
<instruction-set targetVersion="1">
<add-channel id="audioAndVideoMute">
<type>pjLinkDevice:audioAndVideoMute</type>
</add-channel>
</instruction-set>
</thing-type>
</update:update-descriptions>