]> git.basschouten.com Git - openhab-addons.git/blob
a83cf25d41d7ce558e48dce25d3bcfe867270754
[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.mihome.internal.handler;
14
15 import static org.openhab.binding.mihome.internal.XiaomiGatewayBindingConstants.*;
16
17 import org.openhab.core.library.types.DateTimeType;
18 import org.openhab.core.library.types.DecimalType;
19 import org.openhab.core.library.types.StringType;
20 import org.openhab.core.thing.Thing;
21
22 import com.google.gson.JsonObject;
23
24 /**
25  * Handles the Xiaomi Aqara Fingerprint Lock
26  *
27  * @author Dieter Schmidt - Initial contribution
28  */
29 public class XiaomiSensorLockHandler extends XiaomiSensorBaseHandler {
30
31     private static final String FING_VERIFIED = "fing_verified";
32     private static final String PSW_VERIFIED = "psw_verified";
33     private static final String CARD_VERIFIED = "card_verified";
34     private static final String VERIFIED_WRONG = "verified_wrong";
35     private static final String FINGER = "Finger";
36     private static final String PASSWORD = "Password";
37     private static final String CARD = "Card";
38     private static final String WRONG_ACCESS = "Wrong Access";
39     private static final String ALARM = "ALARM";
40     private static final String STATUS = "status";
41
42     public XiaomiSensorLockHandler(Thing thing) {
43         super(thing);
44     }
45
46     @Override
47     void parseDefault(JsonObject data) {
48         if (data.has(FING_VERIFIED)) {
49             onOpen();
50             updateState(CHANNEL_STATUS, new StringType(FINGER));
51             updateState(CHANNEL_ID, new DecimalType(data.get(FING_VERIFIED).getAsInt()));
52         } else if (data.has(PSW_VERIFIED)) {
53             onOpen();
54             updateState(CHANNEL_STATUS, new StringType(PASSWORD));
55             updateState(CHANNEL_ID, new DecimalType(data.get(PSW_VERIFIED).getAsInt()));
56         } else if (data.has(CARD_VERIFIED)) {
57             onOpen();
58             updateState(CHANNEL_STATUS, new StringType(CARD));
59             updateState(CHANNEL_ID, new DecimalType(data.get(CARD_VERIFIED).getAsInt()));
60         } else if (data.has(VERIFIED_WRONG)) {
61             updateState(CHANNEL_STATUS, new StringType(WRONG_ACCESS));
62             updateState(CHANNEL_ID, new DecimalType(data.get(VERIFIED_WRONG).getAsInt()));
63             triggerChannel(CHANNEL_WRONG_ACCESS, ALARM);
64         } else if (data.has(STATUS)) {
65             updateState(CHANNEL_STATUS, new StringType(data.get(STATUS).getAsString().toUpperCase()));
66         }
67         super.parseDefault(data);
68     }
69
70     private void onOpen() {
71         triggerChannel(CHANNEL_IS_OPEN, ALARM);
72         updateState(CHANNEL_LAST_OPENED, new DateTimeType());
73     }
74 }