This binding can be used to control the following types of whole house multi-zone amplifier systems:
- Monoprice MPR-SG6Z (10761), Monoprice Passive Matrix (39261), Dayton Audio DAX66 or compatible clones
+- Monoprice 44519 4 zone / 6 source variant of the 10761 **(untested)**
- Monoprice 31028 or OSD Audio PAM1270 **(untested)**
- Dayton Audio DAX88 **(untested)**
- Xantech MRC88, MX88, MRAUDIO8X8 or CM8X8 **(untested)**
## Supported Things
Monoprice 10761 & 39261 or Dayton Audio DAX66 amplifiers use the `amplifier` thing id. Up to 18 zones with 3 linked amps and 6 source inputs are supported.
-Note: Compatible clones (including 4 zone versions) from McLELLAND, Factor, Soundavo, etc. should work as well.
+Note: Compatible clones from McLELLAND, Factor, Soundavo, etc. should work as well.
-***The following three thing types were implemented via available documentation only and have not been tested. Please open an issue for any bugs found when using these thing types.***
+***The following thing types were implemented via available documentation only and have not been tested. Please open an issue for any bugs found when using these thing types.***
+
+Monoprice 44519 4 zone variants use the `monoprice4` thing id. Up to 12 zones with 3 linked amps and 6 source inputs are supported.
Monoprice 31028 or OSD Audio PAM1270 70 volt amplifiers use the `monoprice70` thing id. 6 zones per amp (not linkable) and 2 source inputs are supported.
Some notes:
-- On the 10761/DAX66 amp, activating the 'Page All Zones' feature can only be done through the +12v trigger input on the back of the amplifier.
+- On the 10761/44519/DAX66 amp, activating the 'Page All Zones' feature can only be done through the +12v trigger input on the back of the amplifier.
- On Linux, you may get an error stating the serial port cannot be opened when the MonopriceAudio binding tries to load.
- You can get around this by adding the `openhab` user to the `dialout` group like this: `usermod -a -G dialout openhab`.
// Monoprice 10761, 39261 / DAX66 (serial over IP connection)
monopriceaudio:amplifier:myamp "Monoprice WHA" [ host="192.168.0.10", port=8080, pollingInterval=15, numZones=6, inputLabel1="Chromecast", inputLabel2="Radio", inputLabel3="CD Player", inputLabel4="Bluetooth Audio", inputLabel5="HTPC", inputLabel6="Phono" ]
+// Monoprice 44519
+monopriceaudio:monoprice4:myamp "Monoprice WHA" [ serialPort="COM5", pollingInterval=15, numZones=4, inputLabel1="Chromecast", inputLabel2="Radio", inputLabel3="CD Player", inputLabel4="Bluetooth Audio", inputLabel5="HTPC", inputLabel6="Phono" ]
+
// Monoprice 31028 or OSD Audio PAM1270
monopriceaudio:monoprice70:myamp "Monoprice WHA" [ serialPort="COM5", pollingInterval=30, numZones=6, inputLabel1="Source 0 - Bus", inputLabel2="Source 1 - Line" ]
monoprice.items:
```java
-// substitute 'amplifier' for the appropriate thing id if using 31028, DAX88 or Xantech amplifier
+// substitute 'amplifier' for the appropriate thing id if using 44519, 31028, DAX88 or Xantech amplifier
Switch all_allpower "All Zones Power" { channel="monopriceaudio:amplifier:myamp:all#allpower" }
Number all_source "Source Input [%s]" { channel="monopriceaudio:amplifier:myamp:all#allsource" }
// List of all Thing Type UIDs
// to avoid breaking existing installations, the 10761/DAX66 will still be known as 'amplifier'
public static final ThingTypeUID THING_TYPE_MP = new ThingTypeUID(BINDING_ID, "amplifier");
+ public static final ThingTypeUID THING_TYPE_MP4 = new ThingTypeUID(BINDING_ID, "monoprice4");
public static final ThingTypeUID THING_TYPE_MP70 = new ThingTypeUID(BINDING_ID, "monoprice70");
public static final ThingTypeUID THING_TYPE_DAX88 = new ThingTypeUID(BINDING_ID, "dax88");
public static final ThingTypeUID THING_TYPE_XT = new ThingTypeUID(BINDING_ID, "xantech");
@Component(configurationPid = "binding.monopriceaudio", service = ThingHandlerFactory.class)
public class MonopriceAudioHandlerFactory extends BaseThingHandlerFactory {
- private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_MP, THING_TYPE_MP70,
- THING_TYPE_DAX88, THING_TYPE_XT);
+ private static final Set<ThingTypeUID> SUPPORTED_THING_TYPES_UIDS = Set.of(THING_TYPE_MP, THING_TYPE_MP4,
+ THING_TYPE_MP70, THING_TYPE_DAX88, THING_TYPE_XT);
private final SerialPortManager serialPortManager;
serialPortManager);
}
+ if (THING_TYPE_MP4.equals(thingTypeUID)) {
+ return new MonopriceAudioHandler(thing, AmplifierModel.MONOPRICE4, stateDescriptionProvider,
+ serialPortManager);
+ }
+
if (THING_TYPE_MP70.equals(thingTypeUID)) {
return new MonopriceAudioHandler(thing, AmplifierModel.MONOPRICE70, stateDescriptionProvider,
serialPortManager);
new StateOption("5", config.inputLabel5), new StateOption("6", config.inputLabel6));
}
},
+ // Monoprice 44519 4 zone variant
+ MONOPRICE4("<", "\r", "?", "", "#>", "PR", "CH", "VO", "MU", "TR", "BS", "BL", "DT", 38, -7, 7, 7, -10, 10, 10, 12,
+ 6, true, List.of("11", "12", "13", "14", "21", "22", "23", "24", "31", "32", "33", "34")) {
+ @Override
+ public MonopriceAudioZoneDTO getZoneData(String newZoneData) {
+ return getMonopriceZoneData(newZoneData);
+ }
+
+ @Override
+ public List<StateOption> getSourceLabels(MonopriceAudioThingConfiguration config) {
+ return List.of(new StateOption("1", config.inputLabel1), new StateOption("2", config.inputLabel2),
+ new StateOption("3", config.inputLabel3), new StateOption("4", config.inputLabel4),
+ new StateOption("5", config.inputLabel5), new StateOption("6", config.inputLabel6));
+ }
+ },
// Dayton Audio DAX88
DAX88("<", "\r", "?", "", ">", "PR", "CH", "VO", "MU", "TR", "BS", "BL", "DT", 38, -12, 12, 12, -10, 10, 10, 8, 8,
true, List.of("01", "02", "03", "04", "05", "06", "07", "08")) {
@Override
public void onNewMessageEvent(MonopriceAudioMessageEvent evt) {
+ updateStatus(ThingStatus.ONLINE);
String key = evt.getKey();
switch (key) {
if (error != null) {
closeConnection();
updateStatus(ThingStatus.OFFLINE, ThingStatusDetail.COMMUNICATION_ERROR, error);
- } else {
- updateStatus(ThingStatus.ONLINE);
}
}
}
thing-type.monopriceaudio.dax88.group.zone7.description = The Controls for Zone 7
thing-type.monopriceaudio.dax88.group.zone8.label = Zone 8
thing-type.monopriceaudio.dax88.group.zone8.description = The Controls for Zone 8
+thing-type.monopriceaudio.monoprice4.label = Monoprice 44519 4 Zone Amplifier
+thing-type.monopriceaudio.monoprice4.description = A Multi-zone Whole House Amplifier System
+thing-type.monopriceaudio.monoprice4.group.all.label = All Zones
+thing-type.monopriceaudio.monoprice4.group.all.description = Control All Zones Simultaneously
+thing-type.monopriceaudio.monoprice4.group.zone1.label = Zone 1
+thing-type.monopriceaudio.monoprice4.group.zone1.description = The Controls for Zone 1
+thing-type.monopriceaudio.monoprice4.group.zone10.label = Zone 10
+thing-type.monopriceaudio.monoprice4.group.zone10.description = The Controls for Zone 10
+thing-type.monopriceaudio.monoprice4.group.zone11.label = Zone 11
+thing-type.monopriceaudio.monoprice4.group.zone11.description = The Controls for Zone 11
+thing-type.monopriceaudio.monoprice4.group.zone12.label = Zone 12
+thing-type.monopriceaudio.monoprice4.group.zone12.description = The Controls for Zone 12
+thing-type.monopriceaudio.monoprice4.group.zone2.label = Zone 2
+thing-type.monopriceaudio.monoprice4.group.zone2.description = The Controls for Zone 2
+thing-type.monopriceaudio.monoprice4.group.zone3.label = Zone 3
+thing-type.monopriceaudio.monoprice4.group.zone3.description = The Controls for Zone 3
+thing-type.monopriceaudio.monoprice4.group.zone4.label = Zone 4
+thing-type.monopriceaudio.monoprice4.group.zone4.description = The Controls for Zone 4
+thing-type.monopriceaudio.monoprice4.group.zone5.label = Zone 5
+thing-type.monopriceaudio.monoprice4.group.zone5.description = The Controls for Zone 5
+thing-type.monopriceaudio.monoprice4.group.zone6.label = Zone 6
+thing-type.monopriceaudio.monoprice4.group.zone6.description = The Controls for Zone 6
+thing-type.monopriceaudio.monoprice4.group.zone7.label = Zone 7
+thing-type.monopriceaudio.monoprice4.group.zone7.description = The Controls for Zone 7
+thing-type.monopriceaudio.monoprice4.group.zone8.label = Zone 8
+thing-type.monopriceaudio.monoprice4.group.zone8.description = The Controls for Zone 8
+thing-type.monopriceaudio.monoprice4.group.zone9.label = Zone 9
+thing-type.monopriceaudio.monoprice4.group.zone9.description = The Controls for Zone 9
thing-type.monopriceaudio.monoprice70.label = Monoprice 31028 70V Amplifier
thing-type.monopriceaudio.monoprice70.description = A Multi-zone Whole House Amplifier System
thing-type.monopriceaudio.monoprice70.group.all.label = All Zones
thing-type.config.monopriceaudio.dax88.port.description = Communication Port for Serial over IP connection to the Dayton Amplifier
thing-type.config.monopriceaudio.dax88.serialPort.label = Serial Port
thing-type.config.monopriceaudio.dax88.serialPort.description = Serial Port to Use for Connecting to the Dayton Amplifier
+thing-type.config.monopriceaudio.monoprice4.disableKeypadPolling.label = Disable Keypad Polling
+thing-type.config.monopriceaudio.monoprice4.disableKeypadPolling.description = If physical keypads are not used, this option will disable polling the amplifier for zone updates
+thing-type.config.monopriceaudio.monoprice4.host.label = Address
+thing-type.config.monopriceaudio.monoprice4.host.description = Host Name or IP Address of the Monoprice Amplifier or Serial over IP device
+thing-type.config.monopriceaudio.monoprice4.ignoreZones.label = Ignore Zones
+thing-type.config.monopriceaudio.monoprice4.ignoreZones.description = (Optional) A Comma Seperated List of Zone Numbers That Will Ignore the 'All Zone' (Except All Off) Commands (ie: 1,6,10)
+thing-type.config.monopriceaudio.monoprice4.initialAllVolume.label = Initial All Volume
+thing-type.config.monopriceaudio.monoprice4.initialAllVolume.description = When 'All' Zones Are Activated, the Volume Will Reset to This Value (1-30; default 10) to Prevent Excessive Blaring of Sound ;)
+thing-type.config.monopriceaudio.monoprice4.inputLabel1.label = Source 1 Input Label
+thing-type.config.monopriceaudio.monoprice4.inputLabel1.description = Friendly Name for the Input Source to Be Displayed in the UI (ie: Chromecast, Radio, CD, etc.)
+thing-type.config.monopriceaudio.monoprice4.inputLabel2.label = Source 2 Input Label
+thing-type.config.monopriceaudio.monoprice4.inputLabel2.description = Friendly Name for the Input Source to Be Displayed in the UI (ie: Chromecast, Radio, CD, etc.)
+thing-type.config.monopriceaudio.monoprice4.inputLabel3.label = Source 3 Input Label
+thing-type.config.monopriceaudio.monoprice4.inputLabel3.description = Friendly Name for the Input Source to Be Displayed in the UI (ie: Chromecast, Radio, CD, etc.)
+thing-type.config.monopriceaudio.monoprice4.inputLabel4.label = Source 4 Input Label
+thing-type.config.monopriceaudio.monoprice4.inputLabel4.description = Friendly Name for the Input Source to Be Displayed in the UI (ie: Chromecast, Radio, CD, etc.)
+thing-type.config.monopriceaudio.monoprice4.inputLabel5.label = Source 5 Input Label
+thing-type.config.monopriceaudio.monoprice4.inputLabel5.description = Friendly Name for the Input Source to Be Displayed in the UI (ie: Chromecast, Radio, CD, etc.)
+thing-type.config.monopriceaudio.monoprice4.inputLabel6.label = Source 6 Input Label
+thing-type.config.monopriceaudio.monoprice4.inputLabel6.description = Friendly Name for the Input Source to Be Displayed in the UI (ie: Chromecast, Radio, CD, etc.)
+thing-type.config.monopriceaudio.monoprice4.numZones.label = Number of Zones
+thing-type.config.monopriceaudio.monoprice4.numZones.description = Number of Zones on the Amplifier to Utilize in the Binding (Up to 12 Zones With 3 Amplifiers Connected Together)
+thing-type.config.monopriceaudio.monoprice4.pollingInterval.label = Polling Interval
+thing-type.config.monopriceaudio.monoprice4.pollingInterval.description = Configures How Often to Poll the Amplifier to Check for Zone Updates (5-60; Default 15)
+thing-type.config.monopriceaudio.monoprice4.port.label = Port
+thing-type.config.monopriceaudio.monoprice4.port.description = Communication Port for Serial over IP connection to the Monoprice Amplifier (8080 for amps with built-in Serial over IP)
+thing-type.config.monopriceaudio.monoprice4.serialPort.label = Serial Port
+thing-type.config.monopriceaudio.monoprice4.serialPort.description = Serial Port to Use for Connecting to the Monoprice Amplifier
thing-type.config.monopriceaudio.monoprice70.host.label = Address
thing-type.config.monopriceaudio.monoprice70.host.description = Host Name or IP Address of the Machine Connected to the Monoprice Amplifier (Serial over IP)
thing-type.config.monopriceaudio.monoprice70.ignoreZones.label = Ignore Zones
--- /dev/null
+<?xml version="1.0" encoding="UTF-8"?>
+<thing:thing-descriptions bindingId="monopriceaudio"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:thing="https://openhab.org/schemas/thing-description/v1.0.0"
+ xsi:schemaLocation="https://openhab.org/schemas/thing-description/v1.0.0 https://openhab.org/schemas/thing-description-1.0.0.xsd">
+
+ <!-- Monoprice 44519 4 zone/6 source variant -->
+ <thing-type id="monoprice4">
+ <label>Monoprice 44519 4 Zone Amplifier</label>
+ <description>
+ A Multi-zone Whole House Amplifier System
+ </description>
+
+ <channel-groups>
+ <channel-group id="all" typeId="all">
+ <label>All Zones</label>
+ <description>Control All Zones Simultaneously</description>
+ </channel-group>
+ <channel-group id="zone1" typeId="zone">
+ <label>Zone 1</label>
+ <description>The Controls for Zone 1</description>
+ </channel-group>
+ <channel-group id="zone2" typeId="zone">
+ <label>Zone 2</label>
+ <description>The Controls for Zone 2</description>
+ </channel-group>
+ <channel-group id="zone3" typeId="zone">
+ <label>Zone 3</label>
+ <description>The Controls for Zone 3</description>
+ </channel-group>
+ <channel-group id="zone4" typeId="zone">
+ <label>Zone 4</label>
+ <description>The Controls for Zone 4</description>
+ </channel-group>
+ <channel-group id="zone5" typeId="zone">
+ <label>Zone 5</label>
+ <description>The Controls for Zone 5</description>
+ </channel-group>
+ <channel-group id="zone6" typeId="zone">
+ <label>Zone 6</label>
+ <description>The Controls for Zone 6</description>
+ </channel-group>
+ <channel-group id="zone7" typeId="zone">
+ <label>Zone 7</label>
+ <description>The Controls for Zone 7</description>
+ </channel-group>
+ <channel-group id="zone8" typeId="zone">
+ <label>Zone 8</label>
+ <description>The Controls for Zone 8</description>
+ </channel-group>
+ <channel-group id="zone9" typeId="zone">
+ <label>Zone 9</label>
+ <description>The Controls for Zone 9</description>
+ </channel-group>
+ <channel-group id="zone10" typeId="zone">
+ <label>Zone 10</label>
+ <description>The Controls for Zone 10</description>
+ </channel-group>
+ <channel-group id="zone11" typeId="zone">
+ <label>Zone 11</label>
+ <description>The Controls for Zone 11</description>
+ </channel-group>
+ <channel-group id="zone12" typeId="zone">
+ <label>Zone 12</label>
+ <description>The Controls for Zone 12</description>
+ </channel-group>
+ </channel-groups>
+
+ <config-description>
+ <parameter name="serialPort" type="text" required="false">
+ <context>serial-port</context>
+ <limitToOptions>false</limitToOptions>
+ <label>Serial Port</label>
+ <description>Serial Port to Use for Connecting to the Monoprice Amplifier</description>
+ </parameter>
+ <parameter name="host" type="text" required="false">
+ <context>network-address</context>
+ <label>Address</label>
+ <description>Host Name or IP Address of the Monoprice Amplifier or Serial over IP device</description>
+ </parameter>
+ <parameter name="port" type="integer" min="1" max="65535" required="false">
+ <label>Port</label>
+ <description>Communication Port for Serial over IP connection to the Monoprice Amplifier (8080 for amps with
+ built-in Serial over IP)</description>
+ </parameter>
+ <parameter name="numZones" type="integer" min="1" max="12" required="true">
+ <label>Number of Zones</label>
+ <description>Number of Zones on the Amplifier to Utilize in the Binding (Up to 12 Zones With 3 Amplifiers Connected
+ Together)</description>
+ <default>4</default>
+ </parameter>
+ <parameter name="pollingInterval" type="integer" min="5" max="60" unit="s" required="false">
+ <label>Polling Interval</label>
+ <description>Configures How Often to Poll the Amplifier to Check for Zone Updates (5-60; Default 15)</description>
+ <default>15</default>
+ </parameter>
+ <parameter name="ignoreZones" type="text" required="false">
+ <label>Ignore Zones</label>
+ <description>(Optional) A Comma Seperated List of Zone Numbers That Will Ignore the 'All Zone' (Except All Off)
+ Commands (ie: 1,6,10)</description>
+ </parameter>
+ <parameter name="initialAllVolume" type="integer" min="1" max="30" required="false">
+ <label>Initial All Volume</label>
+ <description>When 'All' Zones Are Activated, the Volume Will Reset to This Value (1-30; default 10) to Prevent
+ Excessive Blaring of Sound ;)</description>
+ <default>10</default>
+ </parameter>
+ <parameter name="inputLabel1" type="text" required="false">
+ <label>Source 1 Input Label</label>
+ <description>Friendly Name for the Input Source to Be Displayed in the UI (ie: Chromecast, Radio, CD, etc.)</description>
+ <default>Source 1</default>
+ </parameter>
+ <parameter name="inputLabel2" type="text" required="false">
+ <label>Source 2 Input Label</label>
+ <description>Friendly Name for the Input Source to Be Displayed in the UI (ie: Chromecast, Radio, CD, etc.)</description>
+ <default>Source 2</default>
+ </parameter>
+ <parameter name="inputLabel3" type="text" required="false">
+ <label>Source 3 Input Label</label>
+ <description>Friendly Name for the Input Source to Be Displayed in the UI (ie: Chromecast, Radio, CD, etc.)</description>
+ <default>Source 3</default>
+ </parameter>
+ <parameter name="inputLabel4" type="text" required="false">
+ <label>Source 4 Input Label</label>
+ <description>Friendly Name for the Input Source to Be Displayed in the UI (ie: Chromecast, Radio, CD, etc.)</description>
+ <default>Source 4</default>
+ </parameter>
+ <parameter name="inputLabel5" type="text" required="false">
+ <label>Source 5 Input Label</label>
+ <description>Friendly Name for the Input Source to Be Displayed in the UI (ie: Chromecast, Radio, CD, etc.)</description>
+ <default>Source 5</default>
+ </parameter>
+ <parameter name="inputLabel6" type="text" required="false">
+ <label>Source 6 Input Label</label>
+ <description>Friendly Name for the Input Source to Be Displayed in the UI (ie: Chromecast, Radio, CD, etc.)</description>
+ <default>Source 6</default>
+ </parameter>
+ <parameter name="disableKeypadPolling" type="boolean" required="false">
+ <label>Disable Keypad Polling</label>
+ <description>If physical keypads are not used, this option will disable polling the amplifier for zone updates</description>
+ <default>false</default>
+ </parameter>
+ </config-description>
+ </thing-type>
+
+ <channel-group-type id="all">
+ <label>All Zones</label>
+ <description>Control All Zones Simultaneously</description>
+ <channels>
+ <channel id="allpower" typeId="allpower"/>
+ <channel id="allsource" typeId="source"/>
+ <channel id="allvolume" typeId="system.volume"/>
+ <channel id="allmute" typeId="system.mute"/>
+ </channels>
+ </channel-group-type>
+
+ <channel-group-type id="zone">
+ <label>Zone Controls</label>
+ <description>The Controls for the Zone</description>
+ <channels>
+ <channel id="power" typeId="system.power"/>
+ <channel id="source" typeId="source"/>
+ <channel id="volume" typeId="system.volume"/>
+ <channel id="mute" typeId="system.mute"/>
+ <channel id="treble" typeId="treble"/>
+ <channel id="bass" typeId="bass"/>
+ <channel id="balance" typeId="balance"/>
+ <channel id="dnd" typeId="dnd"/>
+ <channel id="page" typeId="page"/>
+ <channel id="keypad" typeId="keypad"/>
+ </channels>
+ </channel-group-type>
+
+ <channel-type id="allpower">
+ <item-type>Switch</item-type>
+ <label>All On</label>
+ <description>Turn All Zones On or Off</description>
+ </channel-type>
+
+ <channel-type id="source">
+ <item-type>Number</item-type>
+ <label>Source Input</label>
+ <description>Select the Source Input</description>
+ <state min="1" max="6"/>
+ </channel-type>
+
+ <channel-type id="treble">
+ <item-type>Number</item-type>
+ <label>Treble Adjustment</label>
+ <description>Adjust the Treble</description>
+ <state min="-7" max="7" step="1" pattern="%d"/>
+ </channel-type>
+
+ <channel-type id="bass">
+ <item-type>Number</item-type>
+ <label>Bass Adjustment</label>
+ <description>Adjust the Bass</description>
+ <state min="-7" max="7" step="1" pattern="%d"/>
+ </channel-type>
+
+ <channel-type id="balance">
+ <item-type>Number</item-type>
+ <label>Balance Adjustment</label>
+ <description>Adjust the Balance</description>
+ <state min="-10" max="10" step="1" pattern="%d"/>
+ </channel-type>
+
+ <channel-type id="dnd">
+ <item-type>Switch</item-type>
+ <label>Do Not Disturb</label>
+ <description>Controls if the Zone Should Ignore an Incoming Audio Page</description>
+ </channel-type>
+
+ <channel-type id="page">
+ <item-type>Contact</item-type>
+ <label>Page Active</label>
+ <description>Indicates if the Page Mode is Active for This Zone</description>
+ <state readOnly="true">
+ <options>
+ <option value="CLOSED">Inactive</option>
+ <option value="OPEN">Active</option>
+ </options>
+ </state>
+ </channel-type>
+
+ <channel-type id="keypad">
+ <item-type>Contact</item-type>
+ <label>Keypad Connected</label>
+ <description>Indicates if a Physical Keypad is Attached to This Zone</description>
+ <state readOnly="true">
+ <options>
+ <option value="CLOSED">Disconnected</option>
+ <option value="OPEN">Connected</option>
+ </options>
+ </state>
+ </channel-type>
+
+</thing:thing-descriptions>