@@ -79,187 +79,180 @@ public DSCAlarmMessage(String message) {
79
79
* Processes the incoming DSC Alarm message and extracts the information.
80
80
*/
81
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 );
82
+ if (message .length () <= 3 ) {
83
+ codeReceived = "-1" ;
84
+ data = "" ;
85
+ DSCAlarmCode dscAlarmCode = DSCAlarmCode .UnknownCode ;
86
+ name = dscAlarmCode .getName ();
87
+ description = dscAlarmCode .getDescription ();
88
+ logger .debug ("parseAPIMessage(): Invalid Message Received" );
89
+ return ;
90
+ }
94
91
95
- if ( message . length () >= 4 ) {
96
- data = message .substring ( 3 );
97
- }
98
- } catch ( Exception e ) {
99
- logger . warn ( "processDSCAlarmMessage(): Error processing message: ({}) " , message , e );
100
- return ;
92
+ try {
93
+ if ( message . length () >= 8 && message . charAt ( 2 ) == ':' && message .charAt ( 5 ) == ':' ) {
94
+ timeStamp = message . substring ( 0 , 8 );
95
+ message = message . substring ( 9 , message . length () - 2 );
96
+ } else {
97
+ message = message . substring ( 0 , message . length () - 2 ) ;
101
98
}
102
99
103
- dscAlarmCode = DSCAlarmCode . getDSCAlarmCodeValue ( codeReceived );
100
+ codeReceived = message . substring ( 0 , 3 );
104
101
105
- if (dscAlarmCode != null ) {
106
- name = dscAlarmCode .getName ();
107
- description = dscAlarmCode .getDescription ();
102
+ if (message .length () >= 4 ) {
103
+ data = message .substring (3 );
104
+ }
105
+ } catch (Exception e ) {
106
+ logger .warn ("processDSCAlarmMessage(): Error processing message: ({}) " , message , e );
107
+ return ;
108
+ }
108
109
109
- MessageParameters messageParms = DSCALARM_MESSAGE_PARAMETERS . get ( dscAlarmCode );
110
+ DSCAlarmCode dscAlarmCode = DSCAlarmCode . getDSCAlarmCodeValue ( codeReceived );
110
111
111
- if (messageParms != null ) {
112
- boolean hasPartition = messageParms . hasPartition ();
113
- boolean hasZone = messageParms . hasZone ();
112
+ if (dscAlarmCode != null ) {
113
+ name = dscAlarmCode . getName ();
114
+ description = dscAlarmCode . getDescription ();
114
115
115
- if (hasPartition ) {
116
- partition = message .substring (3 , 4 );
117
- }
116
+ MessageParameters messageParams = DSCALARM_MESSAGE_PARAMETERS .get (dscAlarmCode );
118
117
119
- if (hasZone ) {
120
- if (hasPartition ) {
121
- zone = message .substring (4 );
122
- } else {
123
- zone = message .substring (3 );
124
- }
125
- }
118
+ if (messageParams != null ) {
119
+ boolean hasPartition = messageParams .hasPartition ();
120
+ boolean hasZone = messageParams .hasZone ();
126
121
127
- messageType = messageParms .getType ();
122
+ if (hasPartition ) {
123
+ partition = message .substring (3 , 4 );
128
124
}
129
125
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 ("0" .equals (mode )) {
223
- name += " (Away)" ;
224
- } else if ("1" .equals (mode )) {
225
- name += " (Stay)" ;
226
- } else if ("2" .equals (mode )) {
227
- name += " (ZEA)" ;
228
- } else if ("3" .equals (mode )) {
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 " + partition + " has been armed by user " + user
237
- + "." ;
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 " + partition + " has been disarmed by user " + user
244
- + "." ;
245
- messageType = DSCAlarmMessageType .PARTITION_EVENT ;
246
- break ;
247
-
248
- default :
249
- break ;
126
+ if (hasZone ) {
127
+ int zoneIndex = hasPartition ? 4 : 3 ;
128
+ zone = message .substring (zoneIndex );
250
129
}
251
130
252
- logger .debug (
253
- "parseAPIMessage(): Message Received ({}) - Code: {}, Name: {}, Description: {}, Data: {}\r \n " ,
254
- message , codeReceived , name , description , data );
131
+ messageType = messageParams .getType ();
255
132
}
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" );
133
+
134
+ switch (dscAlarmCode ) {
135
+ case SystemError : /* 502 */
136
+ int systemErrorCode = 0 ;
137
+ systemErrorCode = Integer .parseInt (data );
138
+ switch (systemErrorCode ) {
139
+ case 1 :
140
+ error = "Receive Buffer Overrun" ;
141
+ break ;
142
+ case 2 :
143
+ error = "Receive Buffer Overflow" ;
144
+ break ;
145
+ case 3 :
146
+ error = "Transmit Buffer Overflow" ;
147
+ break ;
148
+ case 10 :
149
+ error = "Keybus Transmit Buffer Overrun" ;
150
+ break ;
151
+ case 11 :
152
+ error = "Keybus Transmit Time Timeout" ;
153
+ break ;
154
+ case 12 :
155
+ error = "Keybus Transmit Mode Timeout" ;
156
+ break ;
157
+ case 13 :
158
+ error = "Keybus Transmit Keystring Timeout" ;
159
+ break ;
160
+ case 14 :
161
+ error = "Keybus Interface Not Functioning" ;
162
+ break ;
163
+ case 15 :
164
+ error = "Keybus Busy - Attempting to Disarm or Arm with user code" ;
165
+ break ;
166
+ case 16 :
167
+ error = "Keybus Busy – Lockout" ;
168
+ break ;
169
+ case 17 :
170
+ error = "Keybus Busy – Installers Mode" ;
171
+ break ;
172
+ case 18 :
173
+ error = "Keybus Busy - General Busy" ;
174
+ break ;
175
+ case 20 :
176
+ error = "API Command Syntax Error" ;
177
+ break ;
178
+ case 21 :
179
+ error = "API Command Partition Error - Requested Partition is out of bounds" ;
180
+ break ;
181
+ case 22 :
182
+ error = "API Command Not Supported" ;
183
+ break ;
184
+ case 23 :
185
+ error = "API System Not Armed - Sent in response to a disarm command" ;
186
+ break ;
187
+ case 24 :
188
+ error = "API System Not Ready to Arm - System is either not-secure, in exit-delay, or already armed" ;
189
+ break ;
190
+ case 25 :
191
+ error = "API Command Invalid Length" ;
192
+ break ;
193
+ case 26 :
194
+ error = "API User Code not Required" ;
195
+ break ;
196
+ case 27 :
197
+ error = "API Invalid Characters in Command - No alpha characters are allowed except for checksum" ;
198
+ break ;
199
+ case 28 :
200
+ error = "API Virtual Keypad is Disabled" ;
201
+ break ;
202
+ case 29 :
203
+ error = "API Not Valid Parameter" ;
204
+ break ;
205
+ case 30 :
206
+ error = "API Keypad Does Not Come Out of Blank Mode" ;
207
+ break ;
208
+ case 31 :
209
+ error = "API IT-100 is Already in Thermostat Menu" ;
210
+ break ;
211
+ case 32 :
212
+ error = "API IT-100 is NOT in Thermostat Menu" ;
213
+ break ;
214
+ case 33 :
215
+ error = "API No Response From Thermostat or Escort Module" ;
216
+ break ;
217
+ case 0 :
218
+ default :
219
+ error = "No Error" ;
220
+ break ;
221
+ }
222
+ break ;
223
+ case PartitionArmed : /* 652 */
224
+ mode = message .substring (4 );
225
+ if ("0" .equals (mode )) {
226
+ name += " (Away)" ;
227
+ } else if ("1" .equals (mode )) {
228
+ name += " (Stay)" ;
229
+ } else if ("2" .equals (mode )) {
230
+ name += " (ZEA)" ;
231
+ } else if ("3" .equals (mode )) {
232
+ name += " (ZES)" ;
233
+ }
234
+ messageType = DSCAlarmMessageType .PARTITION_EVENT ;
235
+ break ;
236
+ case UserClosing : /* 700 */
237
+ user = message .substring (4 );
238
+ name = name .concat (": " + user );
239
+ description = codeReceived + ": Partition " + partition + " has been armed by user " + user + "." ;
240
+ messageType = DSCAlarmMessageType .PARTITION_EVENT ;
241
+ break ;
242
+ case UserOpening : /* 750 */
243
+ user = message .substring (4 );
244
+ name = name .concat (": " + user );
245
+ description = codeReceived + ": Partition " + partition + " has been disarmed by user " + user
246
+ + "." ;
247
+ messageType = DSCAlarmMessageType .PARTITION_EVENT ;
248
+ break ;
249
+
250
+ default :
251
+ break ;
252
+ }
253
+
254
+ logger .debug ("parseAPIMessage(): Message Received ({}) - Code: {}, Name: {}, Description: {}, Data: {}\r \n " ,
255
+ message , codeReceived , name , description , data );
263
256
}
264
257
}
265
258
@@ -451,6 +444,8 @@ public boolean hasZone() {
451
444
new MessageParameters (DSCAlarmMessageType .ZONE_EVENT , false , true ));
452
445
DSCALARM_MESSAGE_PARAMETERS .put (DSCAlarmCode .EnvisalinkZoneTimerDump ,
453
446
new MessageParameters (DSCAlarmMessageType .PANEL_EVENT , false , false ));
447
+ DSCALARM_MESSAGE_PARAMETERS .put (DSCAlarmCode .BypassedZonesBitfield ,
448
+ new MessageParameters (DSCAlarmMessageType .ZONE_EVENT , false , false ));
454
449
DSCALARM_MESSAGE_PARAMETERS .put (DSCAlarmCode .DuressAlarm ,
455
450
new MessageParameters (DSCAlarmMessageType .PANEL_EVENT , false , false ));
456
451
DSCALARM_MESSAGE_PARAMETERS .put (DSCAlarmCode .FireKeyAlarm ,
0 commit comments