Skip to content

Commit 83e120e

Browse files
committed
Added support for speaking words and phrases
Signed-off-by: Matt Myers <[email protected]>
1 parent 26ae323 commit 83e120e

File tree

4 files changed

+55
-24
lines changed

4 files changed

+55
-24
lines changed

bundles/org.openhab.binding.elkm1/src/main/java/org/openhab/binding/elkm1/internal/elk/ElkCommand.java

+14-13
Original file line numberDiff line numberDiff line change
@@ -33,42 +33,43 @@ public enum ElkCommand {
3333
AlarmMemory("AM"),
3434
ArmingStatusRequest("as"),
3535
ArmingStatusRequestReply("AS"),
36-
AlarmReporting("AR"),
3736
AlarmReportAcknowledge("ar"),
38-
AlarmReportingTest("AT"),
37+
AlarmReporting("AR"),
3938
AlarmReportTestAcknowledge("at"),
39+
AlarmReportingTest("AT"),
4040
AlarmZoneRequest("az"),
4141
AlarmZoneRequestReply("AZ"),
4242
OutputChangeUpdate("CC"),
43+
ControlOutputOff("cf"),
44+
ControlOutputOn("cn"),
4345
CustomValueReply("CR"),
4446
OutputStatusReply("CS"),
45-
ControlOutputOn("cn"),
46-
ControlOutputOff("cf"),
4747
EntryExitData("EE"),
4848
SendEmailTrigger("EM"),
4949
ValidOrInvalidUserCode("IC"),
5050
KeypadKeyChangeUpdate("KC"),
5151
SystemLogUpdate("LD"),
5252
PLCChangeUpdate("PC"),
53-
BypassedZoneState("ZB"),
54-
ZoneChangeUpdateReport("ZC"),
55-
ZoneDefintionRequest("zd"),
56-
ZoneDefinitionReply("ZD"),
57-
ZonePartition("zp"),
58-
ZonePartitionReply("ZP"),
59-
ZoneStatusRequest("zs"),
60-
ZoneStatusReply("ZS"),
61-
TaskChangeUpdate("TC"),
53+
RawCommand("rc"),
6254
StringTextDescription("sd"),
6355
StringTextDescriptionReply("SD"),
6456
SpeakPhraseAtVoiceOutput("sp"),
6557
TemperatureReply("ST"),
6658
SpeakWordAtVoiceOutput("sw"),
59+
TaskChangeUpdate("TC"),
6760
ThermostatDataReply("TR"),
6861
RequestVersionNumber("vn"),
6962
RequestVersionNumberReply("VN"),
7063
EthernetModuleTest("XK"),
7164
EthernetModuleTestAcknowledge("xk"),
65+
BypassedZoneState("ZB"),
66+
ZoneChangeUpdateReport("ZC"),
67+
ZoneDefintionRequest("zd"),
68+
ZoneDefinitionReply("ZD"),
69+
ZonePartition("zp"),
70+
ZonePartitionReply("ZP"),
71+
ZoneStatusRequest("zs"),
72+
ZoneStatusReply("ZS"),
7273
ZoneAnalogVolatageReply("ZV");
7374

7475
private final String myValue;

bundles/org.openhab.binding.elkm1/src/main/java/org/openhab/binding/elkm1/internal/elk/ElkVoicePhrases.java

+12-3
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,11 @@
1313

1414
package org.openhab.binding.elkm1.internal.elk;
1515

16-
import org.eclipse.jdt.annotation.NonNullByDefault;
17-
1816
/**
1917
* The phrases the elk can speak.
2018
*
2119
* @author David Bennett - Initial Contribution
2220
*/
23-
@NonNullByDefault
2421
public enum ElkVoicePhrases {
2522
SilenceDelay(0),
2623
Zone1(1),
@@ -355,4 +352,16 @@ private ElkVoicePhrases(int value) {
355352
public int getValue() {
356353
return value;
357354
}
355+
356+
/**
357+
* Get an elk voice phrase from the integer value.
358+
*/
359+
public static ElkVoicePhrases fromValue(Integer val) {
360+
for (ElkVoicePhrases cmd : ElkVoicePhrases.values()) {
361+
if (cmd.getValue() == val) {
362+
return cmd;
363+
}
364+
}
365+
return null;
366+
}
358367
}

bundles/org.openhab.binding.elkm1/src/main/java/org/openhab/binding/elkm1/internal/elk/ElkVoiceWords.java

+12-3
Original file line numberDiff line numberDiff line change
@@ -13,14 +13,11 @@
1313

1414
package org.openhab.binding.elkm1.internal.elk;
1515

16-
import org.eclipse.jdt.annotation.NonNullByDefault;
17-
1816
/**
1917
* The set of words the elk can speak.
2018
*
2119
* @author David Bennett - Initial Contribution
2220
*/
23-
@NonNullByDefault
2421
public enum ElkVoiceWords {
2522
_Custom1(1),
2623
_Custom2(2),
@@ -498,4 +495,16 @@ private ElkVoiceWords(int value) {
498495
public int getValue() {
499496
return value;
500497
}
498+
499+
/**
500+
* Get an elk voice word from the integer value.
501+
*/
502+
public static ElkVoiceWords fromValue(int val) {
503+
for (ElkVoiceWords cmd : ElkVoiceWords.values()) {
504+
if (cmd.getValue() == val) {
505+
return cmd;
506+
}
507+
}
508+
return null;
509+
}
501510
}

bundles/org.openhab.binding.elkm1/src/main/java/org/openhab/binding/elkm1/internal/handler/ElkM1BridgeHandler.java

+17-5
Original file line numberDiff line numberDiff line change
@@ -24,11 +24,14 @@
2424
import org.openhab.binding.elkm1.internal.config.ElkAlarmConfig;
2525
import org.openhab.binding.elkm1.internal.elk.ElkAlarmArmedState;
2626
import org.openhab.binding.elkm1.internal.elk.ElkAlarmConnection;
27+
import org.openhab.binding.elkm1.internal.elk.ElkCommand;
2728
import org.openhab.binding.elkm1.internal.elk.ElkDefinition;
2829
import org.openhab.binding.elkm1.internal.elk.ElkListener;
2930
import org.openhab.binding.elkm1.internal.elk.ElkMessage;
3031
import org.openhab.binding.elkm1.internal.elk.ElkMessageFactory;
3132
import org.openhab.binding.elkm1.internal.elk.ElkTypeToRequest;
33+
import org.openhab.binding.elkm1.internal.elk.ElkVoicePhrases;
34+
import org.openhab.binding.elkm1.internal.elk.ElkVoiceWords;
3235
import org.openhab.binding.elkm1.internal.elk.message.ArmAway;
3336
import org.openhab.binding.elkm1.internal.elk.message.ArmToNight;
3437
import org.openhab.binding.elkm1.internal.elk.message.ArmToNightInstant;
@@ -41,6 +44,8 @@
4144
import org.openhab.binding.elkm1.internal.elk.message.EthernetModuleTest;
4245
import org.openhab.binding.elkm1.internal.elk.message.EthernetModuleTestReply;
4346
import org.openhab.binding.elkm1.internal.elk.message.OutputOn;
47+
import org.openhab.binding.elkm1.internal.elk.message.SpeakPhraseAtVoiceOutput;
48+
import org.openhab.binding.elkm1.internal.elk.message.SpeakWordAtVoiceOutput;
4449
import org.openhab.binding.elkm1.internal.elk.message.StringTextDescription;
4550
import org.openhab.binding.elkm1.internal.elk.message.StringTextDescriptionReply;
4651
import org.openhab.binding.elkm1.internal.elk.message.ValidOrInvalidUserCode;
@@ -69,7 +74,6 @@
6974
*
7075
* @author David Bennett - Initial contribution
7176
*/
72-
7377
public class ElkM1BridgeHandler extends BaseBridgeHandler implements ElkListener {
7478
private final Logger logger = LoggerFactory.getLogger(ElkM1BridgeHandler.class);
7579
private ScheduledFuture<?> initializeFuture;
@@ -401,11 +405,19 @@ public void updateArmedState(int area, ElkAlarmArmedState armed) {
401405
}
402406
}
403407

404-
public void sendELKCommand(String command) {
405-
String messageType = command.substring(0, 2);
408+
public void sendELKCommand(String commandString) {
409+
ElkCommand messageType = ElkCommand.fromValue(commandString.substring(0, 2));
406410
switch (messageType) {
407-
case "cn":
408-
connection.sendCommand(new OutputOn(command));
411+
case ControlOutputOn:
412+
connection.sendCommand(new OutputOn(commandString));
413+
break;
414+
case SpeakPhraseAtVoiceOutput:
415+
connection.sendCommand(new SpeakPhraseAtVoiceOutput(
416+
ElkVoicePhrases.fromValue(Integer.parseInt(commandString.substring(2)))));
417+
break;
418+
case SpeakWordAtVoiceOutput:
419+
connection.sendCommand(new SpeakWordAtVoiceOutput(
420+
ElkVoiceWords.fromValue(Integer.parseInt(commandString.substring(2)))));
409421
break;
410422
}
411423
}

0 commit comments

Comments
 (0)