]> git.basschouten.com Git - openhab-addons.git/blob
25592e57ff024f01bb4c2c164a902f91a9c29e85
[openhab-addons.git] /
1 /**
2  * Copyright (c) 2010-2021 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.powermax.internal.message;
14
15 import static java.util.Map.entry;
16
17 import java.util.Map;
18
19 /**
20  * Constants used in Powermax messages
21  *
22  * @author Ron Isaacson - Initial contribution
23  */
24 public class PowermaxMessageConstants {
25
26     private PowermaxMessageConstants() {
27     }
28
29     // System events
30
31     public static enum PowermaxSysEventType {
32         NONE,
33         ALARM,
34         SILENT_ALARM,
35         ALERT,
36         PANIC,
37         TROUBLE,
38         RESTORE,
39         GENERAL_RESTORE,
40         CANCEL,
41         RESET;
42     }
43
44     public static class PowermaxSysEvent {
45         private final String name;
46         private final PowermaxSysEventType type;
47         private final int restoreFor;
48
49         protected PowermaxSysEvent(String name, PowermaxSysEventType type, int restoreFor) {
50             this.name = name;
51             this.type = type;
52             this.restoreFor = restoreFor;
53         }
54
55         protected static PowermaxSysEvent of(String name) {
56             return new PowermaxSysEvent(name, PowermaxSysEventType.NONE, 0);
57         }
58
59         protected static PowermaxSysEvent of(String name, PowermaxSysEventType type) {
60             return new PowermaxSysEvent(name, type, 0);
61         }
62
63         protected static PowermaxSysEvent of(String name, PowermaxSysEventType type, int restoreFor) {
64             return new PowermaxSysEvent(name, type, restoreFor);
65         }
66
67         public PowermaxSysEventType getType() {
68             return this.type;
69         }
70
71         public int getRestoreFor() {
72             return this.restoreFor;
73         }
74
75         public boolean isAlarm() {
76             return (this.type == PowermaxSysEventType.ALARM);
77         }
78
79         public boolean isSilentAlarm() {
80             return (this.type == PowermaxSysEventType.SILENT_ALARM);
81         }
82
83         public boolean isAlert() {
84             return (this.type == PowermaxSysEventType.ALERT);
85         }
86
87         public boolean isPanic() {
88             return (this.type == PowermaxSysEventType.PANIC);
89         }
90
91         public boolean isTrouble() {
92             return (this.type == PowermaxSysEventType.TROUBLE);
93         }
94
95         public boolean isRestore() {
96             return (this.type == PowermaxSysEventType.RESTORE);
97         }
98
99         public boolean isGeneralRestore() {
100             return (this.type == PowermaxSysEventType.GENERAL_RESTORE);
101         }
102
103         public boolean isCancel() {
104             return (this.type == PowermaxSysEventType.CANCEL);
105         }
106
107         public boolean isReset() {
108             return (this.type == PowermaxSysEventType.RESET);
109         }
110
111         @Override
112         public String toString() {
113             return name;
114         }
115     }
116
117     // Important note: in all of the following lists, each entry line ends
118     // with an empty "//" comment. This is to prevent the "spotless" code
119     // formatter from trying to wrap these lines in a way that makes them
120     // much less readable.
121
122     private static final PowermaxSysEvent UNKNOWN_SYSTEM_EVENT = PowermaxSysEvent.of("UNKNOWN");
123
124     private static final Map<Integer, PowermaxSysEvent> SYSTEM_EVENTS = Map.ofEntries( //
125             entry(0x00, PowermaxSysEvent.of("None")), //
126             entry(0x01, PowermaxSysEvent.of("Interior Alarm", PowermaxSysEventType.ALARM)), //
127             entry(0x02, PowermaxSysEvent.of("Perimeter Alarm", PowermaxSysEventType.ALARM)), //
128             entry(0x03, PowermaxSysEvent.of("Delay Alarm", PowermaxSysEventType.ALARM)), //
129             entry(0x04, PowermaxSysEvent.of("24h Silent Alarm", PowermaxSysEventType.SILENT_ALARM)), //
130             entry(0x05, PowermaxSysEvent.of("24h Audible Alarm", PowermaxSysEventType.ALARM)), //
131             entry(0x06, PowermaxSysEvent.of("Tamper", PowermaxSysEventType.ALERT)), //
132             entry(0x07, PowermaxSysEvent.of("Control Panel Tamper", PowermaxSysEventType.ALARM)), //
133             entry(0x08, PowermaxSysEvent.of("Tamper Alarm", PowermaxSysEventType.ALARM)), //
134             entry(0x09, PowermaxSysEvent.of("Tamper Alarm", PowermaxSysEventType.TROUBLE)), //
135             entry(0x0A, PowermaxSysEvent.of("Communication Loss", PowermaxSysEventType.ALARM)), //
136             entry(0x0B, PowermaxSysEvent.of("Panic From KeyKeyfob", PowermaxSysEventType.PANIC)), //
137             entry(0x0C, PowermaxSysEvent.of("Panic From Control Panel", PowermaxSysEventType.PANIC)), //
138             entry(0x0D, PowermaxSysEvent.of("Duress", PowermaxSysEventType.SILENT_ALARM)), //
139             entry(0x0E, PowermaxSysEvent.of("Confirm Alarm", PowermaxSysEventType.ALARM)), //
140             entry(0x0F, PowermaxSysEvent.of("General Trouble", PowermaxSysEventType.TROUBLE)), //
141             entry(0x10, PowermaxSysEvent.of("General Trouble Restore", PowermaxSysEventType.RESTORE, 0x0F)), //
142             entry(0x11, PowermaxSysEvent.of("Interior Restore")), //
143             entry(0x12, PowermaxSysEvent.of("Perimeter Restore")), //
144             entry(0x13, PowermaxSysEvent.of("Delay Restore")), //
145             entry(0x14, PowermaxSysEvent.of("24h Silent Restore")), //
146             entry(0x15, PowermaxSysEvent.of("24h Audible Restore")), //
147             entry(0x16, PowermaxSysEvent.of("Tamper Restore", PowermaxSysEventType.RESTORE, 0x06)), //
148             entry(0x17, PowermaxSysEvent.of("Control Panel Tamper Restore")), //
149             entry(0x18, PowermaxSysEvent.of("Tamper Restore")), //
150             entry(0x19, PowermaxSysEvent.of("Tamper Restore")), //
151             entry(0x1A, PowermaxSysEvent.of("Communication Restore")), //
152             entry(0x1B, PowermaxSysEvent.of("Cancel Alarm", PowermaxSysEventType.CANCEL)), //
153             entry(0x1C, PowermaxSysEvent.of("General Restore", PowermaxSysEventType.GENERAL_RESTORE)), //
154             entry(0x1D, PowermaxSysEvent.of("Trouble Restore")), //
155             entry(0x1E, PowermaxSysEvent.of("Not used")), //
156             entry(0x1F, PowermaxSysEvent.of("Recent Close")), //
157             entry(0x20, PowermaxSysEvent.of("Fire", PowermaxSysEventType.ALARM)), //
158             entry(0x21, PowermaxSysEvent.of("Fire Restore")), //
159             entry(0x22, PowermaxSysEvent.of("No Activity", PowermaxSysEventType.ALERT)), //
160             entry(0x23, PowermaxSysEvent.of("Emergency", PowermaxSysEventType.ALERT)), //
161             entry(0x24, PowermaxSysEvent.of("Not used")), //
162             entry(0x25, PowermaxSysEvent.of("Disarm Latchkey", PowermaxSysEventType.ALERT)), //
163             entry(0x26, PowermaxSysEvent.of("Panic Restore")), //
164             entry(0x27, PowermaxSysEvent.of("Supervision (Inactive)", PowermaxSysEventType.TROUBLE)), //
165             entry(0x28, PowermaxSysEvent.of("Supervision Restore (Active)", PowermaxSysEventType.RESTORE, 0x27)), //
166             entry(0x29, PowermaxSysEvent.of("Low Battery", PowermaxSysEventType.TROUBLE)), //
167             entry(0x2A, PowermaxSysEvent.of("Low Battery Restore", PowermaxSysEventType.RESTORE, 0x29)), //
168             entry(0x2B, PowermaxSysEvent.of("AC Fail", PowermaxSysEventType.TROUBLE)), //
169             entry(0x2C, PowermaxSysEvent.of("AC Restore", PowermaxSysEventType.RESTORE, 0x2B)), //
170             entry(0x2D, PowermaxSysEvent.of("Control Panel Low Battery", PowermaxSysEventType.TROUBLE)), //
171             entry(0x2E, PowermaxSysEvent.of("Control Panel Low Battery Restore", PowermaxSysEventType.RESTORE, 0x2D)), //
172             entry(0x2F, PowermaxSysEvent.of("RF Jamming", PowermaxSysEventType.TROUBLE)), //
173             entry(0x30, PowermaxSysEvent.of("RF Jamming Restore", PowermaxSysEventType.RESTORE, 0x2F)), //
174             entry(0x31, PowermaxSysEvent.of("Communications Failure", PowermaxSysEventType.TROUBLE)), //
175             entry(0x32, PowermaxSysEvent.of("Communications Restore", PowermaxSysEventType.RESTORE, 0x31)), //
176             entry(0x33, PowermaxSysEvent.of("Telephone Line Failure", PowermaxSysEventType.TROUBLE)), //
177             entry(0x34, PowermaxSysEvent.of("Telephone Line Restore", PowermaxSysEventType.RESTORE, 0x33)), //
178             entry(0x35, PowermaxSysEvent.of("Auto Test")), //
179             entry(0x36, PowermaxSysEvent.of("Fuse Failure", PowermaxSysEventType.TROUBLE)), //
180             entry(0x37, PowermaxSysEvent.of("Fuse Restore", PowermaxSysEventType.RESTORE, 0x36)), //
181             entry(0x38, PowermaxSysEvent.of("KeyKeyfob Low Battery", PowermaxSysEventType.TROUBLE)), //
182             entry(0x39, PowermaxSysEvent.of("KeyKeyfob Low Battery Restore", PowermaxSysEventType.RESTORE, 0x38)), //
183             entry(0x3A, PowermaxSysEvent.of("Engineer Reset")), //
184             entry(0x3B, PowermaxSysEvent.of("Battery Disconnect")), //
185             entry(0x3C, PowermaxSysEvent.of("1-Way Keypad Low Battery", PowermaxSysEventType.TROUBLE)), //
186             entry(0x3D, PowermaxSysEvent.of("1-Way Keypad Low Battery Restore", PowermaxSysEventType.RESTORE, 0x3C)), //
187             entry(0x3E, PowermaxSysEvent.of("1-Way Keypad Inactive", PowermaxSysEventType.TROUBLE)), //
188             entry(0x3F, PowermaxSysEvent.of("1-Way Keypad Restore Active", PowermaxSysEventType.RESTORE, 0x3E)), //
189             entry(0x40, PowermaxSysEvent.of("Low Battery")), //
190             entry(0x41, PowermaxSysEvent.of("Clean Me", PowermaxSysEventType.TROUBLE)), //
191             entry(0x42, PowermaxSysEvent.of("Fire Trouble", PowermaxSysEventType.TROUBLE)), //
192             entry(0x43, PowermaxSysEvent.of("Low Battery", PowermaxSysEventType.TROUBLE)), //
193             entry(0x44, PowermaxSysEvent.of("Battery Restore", PowermaxSysEventType.RESTORE, 0x43)), //
194             entry(0x45, PowermaxSysEvent.of("AC Fail", PowermaxSysEventType.TROUBLE)), //
195             entry(0x46, PowermaxSysEvent.of("AC Restore", PowermaxSysEventType.RESTORE, 0x45)), //
196             entry(0x47, PowermaxSysEvent.of("Supervision (Inactive)", PowermaxSysEventType.TROUBLE)), //
197             entry(0x48, PowermaxSysEvent.of("Supervision Restore (Active)", PowermaxSysEventType.RESTORE, 0x47)), //
198             entry(0x49, PowermaxSysEvent.of("Gas Alert", PowermaxSysEventType.ALARM)), //
199             entry(0x4A, PowermaxSysEvent.of("Gas Alert Restore")), //
200             entry(0x4B, PowermaxSysEvent.of("Gas Trouble", PowermaxSysEventType.TROUBLE)), //
201             entry(0x4C, PowermaxSysEvent.of("Gas Trouble Restore", PowermaxSysEventType.RESTORE, 0x4B)), //
202             entry(0x4D, PowermaxSysEvent.of("Flood Alert", PowermaxSysEventType.ALARM)), //
203             entry(0x4E, PowermaxSysEvent.of("Flood Alert Restore")), //
204             entry(0x4F, PowermaxSysEvent.of("X-10 Trouble", PowermaxSysEventType.TROUBLE)), //
205             entry(0x50, PowermaxSysEvent.of("X-10 Trouble Restore", PowermaxSysEventType.RESTORE, 0x4F)), //
206             entry(0x51, PowermaxSysEvent.of("Arm Home")), //
207             entry(0x52, PowermaxSysEvent.of("Arm Away")), //
208             entry(0x53, PowermaxSysEvent.of("Quick Arm Home")), //
209             entry(0x54, PowermaxSysEvent.of("Quick Arm Away")), //
210             entry(0x55, PowermaxSysEvent.of("Disarm")), //
211             entry(0x56, PowermaxSysEvent.of("Fail To Auto-Arm")), //
212             entry(0x57, PowermaxSysEvent.of("Enter To Test Mode")), //
213             entry(0x58, PowermaxSysEvent.of("Exit From Test Mode")), //
214             entry(0x59, PowermaxSysEvent.of("Force Arm")), //
215             entry(0x5A, PowermaxSysEvent.of("Auto Arm")), //
216             entry(0x5B, PowermaxSysEvent.of("Instant Arm")), //
217             entry(0x5C, PowermaxSysEvent.of("Bypass")), //
218             entry(0x5D, PowermaxSysEvent.of("Fail To Arm")), //
219             entry(0x5E, PowermaxSysEvent.of("Door Open")), //
220             entry(0x5F, PowermaxSysEvent.of("Communication Established By Control Panel")), //
221             entry(0x60, PowermaxSysEvent.of("System Reset", PowermaxSysEventType.RESET)), //
222             entry(0x61, PowermaxSysEvent.of("Installer Programming")), //
223             entry(0x62, PowermaxSysEvent.of("Wrong Password")), //
224             entry(0x63, PowermaxSysEvent.of("Not Sys Event")), //
225             entry(0x64, PowermaxSysEvent.of("Not Sys Event")), //
226             entry(0x65, PowermaxSysEvent.of("Extreme Hot Alert")), //
227             entry(0x66, PowermaxSysEvent.of("Extreme Hot Alert Restore")), //
228             entry(0x67, PowermaxSysEvent.of("Freeze Alert")), //
229             entry(0x68, PowermaxSysEvent.of("Freeze Alert Restore")), //
230             entry(0x69, PowermaxSysEvent.of("Human Cold Alert")), //
231             entry(0x6A, PowermaxSysEvent.of("Human Cold Alert Restore")), //
232             entry(0x6B, PowermaxSysEvent.of("Human Hot Alert")), //
233             entry(0x6C, PowermaxSysEvent.of("Human Hot Alert Restore")), //
234             entry(0x6D, PowermaxSysEvent.of("Temperature Sensor Trouble")), //
235             entry(0x6E, PowermaxSysEvent.of("Temperature Sensor Trouble Restore")), //
236             entry(0x6F, PowermaxSysEvent.of("PIR Mask")), //
237             entry(0x70, PowermaxSysEvent.of("PIR Mask Restore")), //
238             entry(0x7B, PowermaxSysEvent.of("Alarmed")), //
239             entry(0x7C, PowermaxSysEvent.of("Restore")), //
240             entry(0x7D, PowermaxSysEvent.of("Alarmed")), //
241             entry(0x7E, PowermaxSysEvent.of("Restore")), //
242             entry(0x8E, PowermaxSysEvent.of("Exit Installer")), //
243             entry(0x8F, PowermaxSysEvent.of("Enter Installer")) //
244     );
245
246     /**
247      * System event lookup
248      */
249     public static PowermaxSysEvent getSystemEvent(int code) {
250         return SYSTEM_EVENTS.getOrDefault(code, UNKNOWN_SYSTEM_EVENT);
251     }
252
253     // Zone/User codes
254
255     private static final Map<Integer, String> ZONES_OR_USERS = Map.ofEntries( //
256             entry(0x00, "System"), //
257             entry(0x01, "Zone 1"), //
258             entry(0x02, "Zone 2"), //
259             entry(0x03, "Zone 3"), //
260             entry(0x04, "Zone 4"), //
261             entry(0x05, "Zone 5"), //
262             entry(0x06, "Zone 6"), //
263             entry(0x07, "Zone 7"), //
264             entry(0x08, "Zone 8"), //
265             entry(0x09, "Zone 9"), //
266             entry(0x0A, "Zone 10"), //
267             entry(0x0B, "Zone 11"), //
268             entry(0x0C, "Zone 12"), //
269             entry(0x0D, "Zone 13"), //
270             entry(0x0E, "Zone 14"), //
271             entry(0x0F, "Zone 15"), //
272             entry(0x10, "Zone 16"), //
273             entry(0x11, "Zone 17"), //
274             entry(0x12, "Zone 18"), //
275             entry(0x13, "Zone 19"), //
276             entry(0x14, "Zone 20"), //
277             entry(0x15, "Zone 21"), //
278             entry(0x16, "Zone 22"), //
279             entry(0x17, "Zone 23"), //
280             entry(0x18, "Zone 24"), //
281             entry(0x19, "Zone 25"), //
282             entry(0x1A, "Zone 26"), //
283             entry(0x1B, "Zone 27"), //
284             entry(0x1C, "Zone 28"), //
285             entry(0x1D, "Zone 29"), //
286             entry(0x1E, "Zone 30"), //
287             entry(0x1F, "Keyfob 1"), //
288             entry(0x20, "Keyfob 2"), //
289             entry(0x21, "Keyfob 3"), //
290             entry(0x22, "Keyfob 4"), //
291             entry(0x23, "Keyfob 5"), //
292             entry(0x24, "Keyfob 6"), //
293             entry(0x25, "Keyfob 7"), //
294             entry(0x26, "Keyfob 8"), //
295             entry(0x27, "User 1"), //
296             entry(0x28, "User 2"), //
297             entry(0x29, "User 3"), //
298             entry(0x2A, "User 4"), //
299             entry(0x2B, "User 5"), //
300             entry(0x2C, "User 6"), //
301             entry(0x2D, "User 7"), //
302             entry(0x2E, "User 8"), //
303             entry(0x2F, "Wireless Commander 1"), //
304             entry(0x30, "Wireless Commander 2"), //
305             entry(0x31, "Wireless Commander 3"), //
306             entry(0x32, "Wireless Commander 4"), //
307             entry(0x33, "Wireless Commander 5"), //
308             entry(0x34, "Wireless Commander 6"), //
309             entry(0x35, "Wireless Commander 7"), //
310             entry(0x36, "Wireless Commander 8"), //
311             entry(0x37, "Wireless Siren 1"), //
312             entry(0x38, "Wireless Siren 2"), //
313             entry(0x39, "Two-Way Wireless Keypad 1"), //
314             entry(0x3A, "Two-Way Wireless Keypad 2"), //
315             entry(0x3B, "Two-Way Wireless Keypad 3"), //
316             entry(0x3C, "Two-Way Wireless Keypad 4"), //
317             entry(0x3D, "X10 1"), //
318             entry(0x3E, "X10 2"), //
319             entry(0x3F, "X10 3"), //
320             entry(0x40, "X10 4"), //
321             entry(0x41, "X10 5"), //
322             entry(0x42, "X10 6"), //
323             entry(0x43, "X10 7"), //
324             entry(0x44, "X10 8"), //
325             entry(0x45, "X10 9"), //
326             entry(0x46, "X10 10"), //
327             entry(0x47, "X10 11"), //
328             entry(0x48, "X10 12"), //
329             entry(0x49, "X10 13"), //
330             entry(0x4A, "X10 14"), //
331             entry(0x4B, "X10 15"), //
332             entry(0x4C, "PGM"), //
333             entry(0x4D, "GSM"), //
334             entry(0x4E, "Powerlink"), //
335             entry(0x4F, "Proxy Tag 1"), //
336             entry(0x50, "Proxy Tag 2"), //
337             entry(0x51, "Proxy Tag 3"), //
338             entry(0x52, "Proxy Tag 4"), //
339             entry(0x53, "Proxy Tag 5"), //
340             entry(0x54, "Proxy Tag 6"), //
341             entry(0x55, "Proxy Tag 7"), //
342             entry(0x56, "Proxy Tag 8") //
343     );
344
345     /**
346      * Zone/User lookup
347      */
348     public static String getZoneOrUser(int code) {
349         return ZONES_OR_USERS.getOrDefault(code, "UNKNOWN");
350     }
351
352     // Zone events
353
354     private static final Map<Integer, String> ZONE_EVENTS = Map.ofEntries( //
355             entry(0x00, "None"), //
356             entry(0x01, "Tamper Alarm"), //
357             entry(0x02, "Tamper Restore"), //
358             entry(0x03, "Open"), //
359             entry(0x04, "Closed"), //
360             entry(0x05, "Violated (Motion)"), //
361             entry(0x06, "Panic Alarm"), //
362             entry(0x07, "RF Jamming"), //
363             entry(0x08, "Tamper Open"), //
364             entry(0x09, "Communication Failure"), //
365             entry(0x0A, "Line Failure"), //
366             entry(0x0B, "Fuse"), //
367             entry(0x0C, "Not Active"), //
368             entry(0x0D, "Low Battery"), //
369             entry(0x0E, "AC Failure"), //
370             entry(0x0F, "Fire Alarm"), //
371             entry(0x10, "Emergency"), //
372             entry(0x11, "Siren Tamper"), //
373             entry(0x12, "Siren Tamper Restore"), //
374             entry(0x13, "Siren Low Battery"), //
375             entry(0x14, "Siren AC Fail") //
376     );
377
378     /**
379      * Zone Event lookup
380      */
381     public static String getZoneEvent(int code) {
382         return ZONE_EVENTS.getOrDefault(code, "UNKNOWN");
383     }
384
385     // Message types
386
387     private static final Map<Integer, String> ZONE_EVENT_TYPES = Map.ofEntries( //
388             entry(0x00, "None"), //
389             entry(0x01, "Alarm Message"), //
390             entry(0x02, "Open/Battery Message"), //
391             entry(0x03, "Inactive/Tamper Message"), //
392             entry(0x04, "Zone Message"), //
393             entry(0x06, "Enroll/Bypass Message") //
394     );
395
396     /**
397      * Message type lookup
398      */
399     public static String getZoneEventType(int code) {
400         return ZONE_EVENT_TYPES.getOrDefault(code, "UNKNOWN");
401     }
402 }