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