]> git.basschouten.com Git - openhab-addons.git/blob
02247fa06c7dd707cdeed759d0cd13b47bef58d5
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2023 Contributors to the openHAB project
3  *
4  * See the NOTICE file(s) distributed with this work for additional
5  * information.
6  *
7  * This program and the accompanying materials are made available under the
8  * terms of the Eclipse Public License 2.0 which is available at
9  * http://www.eclipse.org/legal/epl-2.0
10  *
11  * SPDX-License-Identifier: EPL-2.0
12  */
13 package org.openhab.binding.dscalarm.internal;
14
15 import java.util.EnumMap;
16
17 import org.slf4j.Logger;
18 import org.slf4j.LoggerFactory;
19
20 /**
21  * A class that processes DSC Alarm Messages.
22  *
23  * @author Russell Stephens - Initial Contribution
24  */
25 public class DSCAlarmMessage {
26
27     private final Logger logger = LoggerFactory.getLogger(DSCAlarmMessage.class);
28
29     private static final EnumMap<DSCAlarmCode, MessageParameters> DSCALARM_MESSAGE_PARAMETERS = new EnumMap<>(
30             DSCAlarmCode.class);
31
32     public enum DSCAlarmMessageType {
33         PANEL_EVENT,
34         PARTITION_EVENT,
35         ZONE_EVENT,
36         KEYPAD_EVENT
37     }
38
39     public enum DSCAlarmMessageInfoType {
40         MESSAGE,
41         NAME,
42         DESCRIPTION,
43         CODE,
44         TIME_STAMP,
45         PARTITION,
46         ZONE,
47         DATA,
48         MODE,
49         USER,
50         ERROR
51     }
52
53     private DSCAlarmMessageType messageType = DSCAlarmMessageType.PANEL_EVENT;
54
55     private String message = "";
56     private String name = "";
57     private String description = "";
58     private String codeReceived = "";
59     private String timeStamp = "";
60     private String partition = "0";
61     private String zone = "0";
62     private String data = "";
63     private String mode = "";
64     private String user = "";
65     private String error = "";
66
67     /**
68      * Constructor.
69      *
70      * @param message
71      *            - the message received
72      */
73     public DSCAlarmMessage(String message) {
74         this.message = message;
75         processDSCAlarmMessage();
76     }
77
78     /**
79      * Processes the incoming DSC Alarm message and extracts the information.
80      */
81     private void processDSCAlarmMessage() {
82         DSCAlarmCode dscAlarmCode;
83
84         if (message.length() > 3) {
85             try {
86                 if (message.length() >= 8 && message.charAt(2) == ':' && message.charAt(5) == ':') {
87                     timeStamp = message.substring(0, 8);
88                     message = message.substring(9, message.length() - 2);
89                 } else {
90                     message = message.substring(0, message.length() - 2);
91                 }
92
93                 codeReceived = message.substring(0, 3);
94
95                 if (message.length() >= 4) {
96                     data = message.substring(3);
97                 }
98             } catch (Exception e) {
99                 logger.error("processDSCAlarmMessage(): Error processing message: ({}) ", message, e);
100                 return;
101             }
102
103             dscAlarmCode = DSCAlarmCode.getDSCAlarmCodeValue(codeReceived);
104
105             if (dscAlarmCode != null) {
106                 name = dscAlarmCode.getName();
107                 description = dscAlarmCode.getDescription();
108
109                 MessageParameters messageParms = DSCALARM_MESSAGE_PARAMETERS.get(dscAlarmCode);
110
111                 if (messageParms != null) {
112                     boolean hasPartition = messageParms.hasPartition();
113                     boolean hasZone = messageParms.hasZone();
114
115                     if (hasPartition) {
116                         partition = message.substring(3, 4);
117                     }
118
119                     if (hasZone) {
120                         if (hasPartition) {
121                             zone = message.substring(4);
122                         } else {
123                             zone = message.substring(3);
124                         }
125                     }
126
127                     messageType = messageParms.getType();
128                 }
129
130                 switch (dscAlarmCode) {
131                     case SystemError: /* 502 */
132                         int systemErrorCode = 0;
133                         systemErrorCode = Integer.parseInt(data);
134                         switch (systemErrorCode) {
135                             case 1:
136                                 error = "Receive Buffer Overrun";
137                                 break;
138                             case 2:
139                                 error = "Receive Buffer Overflow";
140                                 break;
141                             case 3:
142                                 error = "Transmit Buffer Overflow";
143                                 break;
144                             case 10:
145                                 error = "Keybus Transmit Buffer Overrun";
146                                 break;
147                             case 11:
148                                 error = "Keybus Transmit Time Timeout";
149                                 break;
150                             case 12:
151                                 error = "Keybus Transmit Mode Timeout";
152                                 break;
153                             case 13:
154                                 error = "Keybus Transmit Keystring Timeout";
155                                 break;
156                             case 14:
157                                 error = "Keybus Interface Not Functioning";
158                                 break;
159                             case 15:
160                                 error = "Keybus Busy - Attempting to Disarm or Arm with user code";
161                                 break;
162                             case 16:
163                                 error = "Keybus Busy – Lockout";
164                                 break;
165                             case 17:
166                                 error = "Keybus Busy – Installers Mode";
167                                 break;
168                             case 18:
169                                 error = "Keybus Busy - General Busy";
170                                 break;
171                             case 20:
172                                 error = "API Command Syntax Error";
173                                 break;
174                             case 21:
175                                 error = "API Command Partition Error - Requested Partition is out of bounds";
176                                 break;
177                             case 22:
178                                 error = "API Command Not Supported";
179                                 break;
180                             case 23:
181                                 error = "API System Not Armed - Sent in response to a disarm command";
182                                 break;
183                             case 24:
184                                 error = "API System Not Ready to Arm - System is either not-secure, in exit-delay, or already armed";
185                                 break;
186                             case 25:
187                                 error = "API Command Invalid Length";
188                                 break;
189                             case 26:
190                                 error = "API User Code not Required";
191                                 break;
192                             case 27:
193                                 error = "API Invalid Characters in Command - No alpha characters are allowed except for checksum";
194                                 break;
195                             case 28:
196                                 error = "API Virtual Keypad is Disabled";
197                                 break;
198                             case 29:
199                                 error = "API Not Valid Parameter";
200                                 break;
201                             case 30:
202                                 error = "API Keypad Does Not Come Out of Blank Mode";
203                                 break;
204                             case 31:
205                                 error = "API IT-100 is Already in Thermostat Menu";
206                                 break;
207                             case 32:
208                                 error = "API IT-100 is NOT in Thermostat Menu";
209                                 break;
210                             case 33:
211                                 error = "API No Response From Thermostat or Escort Module";
212                                 break;
213                             case 0:
214                             default:
215                                 error = "No Error";
216                                 break;
217                         }
218                         break;
219
220                     case PartitionArmed: /* 652 */
221                         mode = message.substring(4);
222                         if (mode.equals("0")) {
223                             name += " (Away)";
224                         } else if (mode.equals("1")) {
225                             name += " (Stay)";
226                         } else if (mode.equals("2")) {
227                             name += " (ZEA)";
228                         } else if (mode.equals("3")) {
229                             name += " (ZES)";
230                         }
231                         messageType = DSCAlarmMessageType.PARTITION_EVENT;
232                         break;
233                     case UserClosing: /* 700 */
234                         user = message.substring(4);
235                         name = name.concat(": " + user);
236                         description = codeReceived + ": Partition " + String.valueOf(partition)
237                                 + " has been armed by user " + user + ".";
238                         messageType = DSCAlarmMessageType.PARTITION_EVENT;
239                         break;
240                     case UserOpening: /* 750 */
241                         user = message.substring(4);
242                         name = name.concat(": " + user);
243                         description = codeReceived + ": Partition " + String.valueOf(partition)
244                                 + " has been disarmed by user " + user + ".";
245                         messageType = DSCAlarmMessageType.PARTITION_EVENT;
246                         break;
247
248                     default:
249                         break;
250                 }
251
252                 logger.debug(
253                         "parseAPIMessage(): Message Received ({}) - Code: {}, Name: {}, Description: {}, Data: {}\r\n",
254                         message, codeReceived, name, description, data);
255             }
256         } else {
257             codeReceived = "-1";
258             data = "";
259             dscAlarmCode = DSCAlarmCode.getDSCAlarmCodeValue(codeReceived);
260             name = dscAlarmCode.getName();
261             description = dscAlarmCode.getDescription();
262             logger.debug("parseAPIMessage(): Invalid Message Received");
263         }
264     }
265
266     /**
267      * Returns the DSCAlarm Message Type.
268      *
269      * @return messageType
270      */
271     public DSCAlarmMessageType getDSCAlarmMessageType() {
272         return messageType;
273     }
274
275     /**
276      * Returns Information from A DSC Alarm Message
277      *
278      * @param dscAlarmMessageInfoType
279      * @return String
280      */
281     public String getMessageInfo(DSCAlarmMessageInfoType dscAlarmMessageInfoType) {
282         String info = "";
283
284         switch (dscAlarmMessageInfoType) {
285             case MESSAGE:
286                 info = message;
287                 break;
288             case NAME:
289                 info = name;
290                 break;
291             case DESCRIPTION:
292                 info = description;
293                 break;
294             case CODE:
295                 info = codeReceived;
296                 break;
297             case TIME_STAMP:
298                 info = timeStamp;
299                 break;
300             case PARTITION:
301                 info = partition;
302                 break;
303             case ZONE:
304                 info = zone;
305                 break;
306             case DATA:
307                 info = data;
308                 break;
309             case MODE:
310                 info = mode;
311                 break;
312             case USER:
313                 info = timeStamp;
314                 break;
315             case ERROR:
316                 info = error;
317                 break;
318             default:
319                 break;
320         }
321
322         return info;
323     }
324
325     /**
326      * Returns a string representation of an APIMessage.
327      *
328      * @return APIMessage string
329      */
330     @Override
331     public String toString() {
332         StringBuilder sb = new StringBuilder();
333
334         sb.append("Code: \"");
335         sb.append(codeReceived);
336         sb.append("\"");
337
338         sb.append(", Name: \"");
339         sb.append(name);
340         sb.append("\"");
341
342         sb.append(", Description: \"");
343         sb.append(description);
344         sb.append("\"");
345
346         if (!timeStamp.equals("")) {
347             sb.append(", Time Stamp: ");
348             sb.append(timeStamp);
349         }
350
351         if (!partition.equals("0")) {
352             sb.append(", Partition: ");
353             sb.append(partition);
354         }
355
356         if (!zone.equals("0")) {
357             sb.append(", Zone: ");
358             sb.append(zone);
359         }
360
361         if (!data.equals("")) {
362             sb.append(", Data: ");
363             sb.append(data);
364         }
365
366         if (!mode.equals("")) {
367             sb.append(", Mode: ");
368             sb.append(mode);
369         }
370
371         if (!user.equals("")) {
372             sb.append(", user: ");
373             sb.append(user);
374         }
375
376         if (!error.equals("")) {
377             sb.append(", error: ");
378             sb.append(error);
379         }
380
381         return sb.toString();
382     }
383
384     public static class MessageParameters {
385         private boolean partition;
386         private boolean zone;
387         private DSCAlarmMessageType type;
388
389         MessageParameters(DSCAlarmMessageType type, boolean partition, boolean zone) {
390             this.type = type;
391             this.partition = partition;
392             this.zone = zone;
393         }
394
395         public DSCAlarmMessageType getType() {
396             return type;
397         }
398
399         public boolean hasPartition() {
400             return partition;
401         }
402
403         public boolean hasZone() {
404             return zone;
405         }
406     }
407
408     static {
409         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.CommandAcknowledge,
410                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
411         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.CommandError,
412                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
413         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.SystemError,
414                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
415         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.LoginResponse,
416                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
417         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.KeypadLEDState,
418                 new MessageParameters(DSCAlarmMessageType.KEYPAD_EVENT, false, false));
419         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.KeypadLEDFlashState,
420                 new MessageParameters(DSCAlarmMessageType.KEYPAD_EVENT, false, false));
421         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.TimeDateBroadcast,
422                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
423         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.RingDetected,
424                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
425         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.IndoorTemperatureBroadcast,
426                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
427         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.OutdoorTemperatureBroadcast,
428                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
429         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.ThermostatSetPoints,
430                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
431         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.BroadcastLabels,
432                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
433         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.BaudRateSet,
434                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
435
436         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.ZoneAlarm,
437                 new MessageParameters(DSCAlarmMessageType.ZONE_EVENT, true, true));
438         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.ZoneAlarmRestore,
439                 new MessageParameters(DSCAlarmMessageType.ZONE_EVENT, true, true));
440         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.ZoneTamper,
441                 new MessageParameters(DSCAlarmMessageType.ZONE_EVENT, true, true));
442         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.ZoneTamperRestore,
443                 new MessageParameters(DSCAlarmMessageType.ZONE_EVENT, true, true));
444         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.ZoneFault,
445                 new MessageParameters(DSCAlarmMessageType.ZONE_EVENT, false, true));
446         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.ZoneFaultRestore,
447                 new MessageParameters(DSCAlarmMessageType.ZONE_EVENT, false, true));
448         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.ZoneOpen,
449                 new MessageParameters(DSCAlarmMessageType.ZONE_EVENT, false, true));
450         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.ZoneRestored,
451                 new MessageParameters(DSCAlarmMessageType.ZONE_EVENT, false, true));
452         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.EnvisalinkZoneTimerDump,
453                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
454         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.DuressAlarm,
455                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
456         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.FireKeyAlarm,
457                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
458         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.FireKeyRestored,
459                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
460         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.AuxiliaryKeyAlarm,
461                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
462         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.AuxiliaryKeyRestored,
463                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
464         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.PanicKeyAlarm,
465                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
466         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.PanicKeyRestored,
467                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
468         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.AuxiliaryInputAlarm,
469                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
470         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.AuxiliaryInputAlarmRestored,
471                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
472         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.PartitionReady,
473                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
474         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.PartitionNotReady,
475                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
476         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.PartitionArmed,
477                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
478         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.PartitionReadyForceArming,
479                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
480         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.PartitionInAlarm,
481                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
482         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.PartitionDisarmed,
483                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
484         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.ExitDelayInProgress,
485                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
486         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.EntryDelayInProgress,
487                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
488         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.KeypadLockout,
489                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
490         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.PartitionFailedToArm,
491                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
492         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.PGMOutputInProgress,
493                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
494         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.ChimeEnabled,
495                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
496         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.ChimeDisabled,
497                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
498         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.InvalidAccessCode,
499                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
500         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.FunctionNotAvailable,
501                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
502         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.FailureToArm,
503                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
504         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.PartitionBusy,
505                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
506         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.SystemArmingInProgress,
507                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, true, false));
508         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.SystemInInstallerMode,
509                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
510
511         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.UserClosing,
512                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
513         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.SpecialClosing,
514                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
515         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.PartialClosing,
516                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
517         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.UserOpening,
518                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
519         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.SpecialOpening,
520                 new MessageParameters(DSCAlarmMessageType.PARTITION_EVENT, true, false));
521
522         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.PanelBatteryTrouble,
523                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
524         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.PanelBatteryTroubleRestore,
525                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
526         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.PanelACTrouble,
527                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
528         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.PanelACRestore,
529                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
530         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.SystemBellTrouble,
531                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
532         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.SystemBellTroubleRestore,
533                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
534         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.TLMLine1Trouble,
535                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
536         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.TLMLine1TroubleRestore,
537                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
538         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.TLMLine2Trouble,
539                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
540         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.TLMLine2TroubleRestore,
541                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
542         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.FTCTrouble,
543                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
544         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.BufferNearFull,
545                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
546         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.GeneralDeviceLowBattery,
547                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, true));
548         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.GeneralDeviceLowBatteryRestore,
549                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, true));
550         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.WirelessKeyLowBatteryTrouble,
551                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, true));
552         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.WirelessKeyLowBatteryTroubleRestore,
553                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, true));
554         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.HandheldKeypadLowBatteryTrouble,
555                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, true));
556         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.HandheldKeypadLowBatteryTroubleRestore,
557                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, true));
558         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.GeneralSystemTamper,
559                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
560         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.GeneralSystemTamperRestore,
561                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
562         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.HomeAutomationTrouble,
563                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
564         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.HomeAutomationTroubleRestore,
565                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
566         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.TroubleLEDOn,
567                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, true, false));
568         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.TroubleLEDOff,
569                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, true, false));
570         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.FireTroubleAlarm,
571                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
572         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.FireTroubleAlarmRestore,
573                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
574         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.VerboseTroubleStatus,
575                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
576         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.KeybusFault,
577                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
578         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.KeybusFaultRestore,
579                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
580
581         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.CodeRequired,
582                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
583         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.LCDUpdate,
584                 new MessageParameters(DSCAlarmMessageType.KEYPAD_EVENT, false, false));
585         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.LCDCursor,
586                 new MessageParameters(DSCAlarmMessageType.KEYPAD_EVENT, false, false));
587         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.LEDStatus,
588                 new MessageParameters(DSCAlarmMessageType.KEYPAD_EVENT, false, false));
589         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.BeepStatus,
590                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
591         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.ToneStatus,
592                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
593         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.BuzzerStatus,
594                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
595         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.DoorChimeStatus,
596                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
597         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.SoftwareVersion,
598                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
599         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.CommandOutputPressed,
600                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
601         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.MasterCodeRequired,
602                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
603         DSCALARM_MESSAGE_PARAMETERS.put(DSCAlarmCode.InstallersCodeRequired,
604                 new MessageParameters(DSCAlarmMessageType.PANEL_EVENT, false, false));
605     }
606 }