]> git.basschouten.com Git - openhab-addons.git/blob
047c63c4d8c7998a09505afbd84013b36d75f434
[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.io.homekit.internal.accessories;
14
15 import java.io.StringReader;
16 import java.util.ArrayList;
17 import java.util.List;
18 import java.util.concurrent.CompletableFuture;
19
20 import javax.json.Json;
21 import javax.json.JsonObject;
22 import javax.json.JsonObjectBuilder;
23 import javax.json.JsonValue;
24
25 import org.eclipse.jdt.annotation.NonNullByDefault;
26 import org.openhab.io.homekit.internal.HomekitTaggedItem;
27
28 import io.github.hapjava.accessories.HomekitAccessory;
29 import io.github.hapjava.characteristics.Characteristic;
30 import io.github.hapjava.services.Service;
31
32 /**
33  * Implements a dummy placeholder accessory for when configuration is missing
34  *
35  * @author Cody Cutrer - Initial contribution
36  */
37 @NonNullByDefault({})
38 public class DummyHomekitAccessory implements HomekitAccessory {
39     private static class DummyCharacteristic implements Characteristic {
40         private JsonObject json;
41         private String type;
42
43         public DummyCharacteristic(JsonObject json) {
44             this.json = json;
45             type = json.getString("type");
46             // reconstitute shortened IDs
47             if (type.length() < 8) {
48                 type = "0".repeat(8 - type.length()) + type + "-0000-1000-8000-0026BB765291";
49             }
50         }
51
52         @Override
53         public String getType() {
54             return type;
55         }
56
57         @Override
58         public void supplyValue(JsonObjectBuilder characteristicBuilder) {
59             characteristicBuilder.add("value", json.get("value"));
60         }
61
62         @Override
63         public CompletableFuture<JsonObject> toJson(int iid) {
64             var builder = Json.createObjectBuilder();
65             json.forEach((k, v) -> builder.add(k, v));
66             builder.add("iid", iid);
67             return CompletableFuture.completedFuture(builder.build());
68         }
69
70         @Override
71         public void setValue(JsonValue jsonValue) {
72         }
73     }
74
75     private static class DummyService implements Service {
76         private String type;
77         private List<Characteristic> characteristics = new ArrayList();
78         private List<Service> linkedServices = new ArrayList();
79
80         public DummyService(JsonObject json) {
81             type = json.getString("type");
82             json.getJsonArray("c").forEach(c -> {
83                 characteristics.add(new DummyCharacteristic((JsonObject) c));
84             });
85             var ls = json.getJsonArray("ls");
86             if (ls != null) {
87                 ls.forEach(s -> {
88                     addLinkedService(new DummyService((JsonObject) s));
89                 });
90             }
91         }
92
93         @Override
94         public String getType() {
95             return type;
96         }
97
98         @Override
99         public List<Characteristic> getCharacteristics() {
100             return characteristics;
101         }
102
103         @Override
104         public List<Service> getLinkedServices() {
105             return linkedServices;
106         }
107
108         @Override
109         public void addLinkedService(Service service) {
110             linkedServices.add(service);
111         }
112     };
113
114     int id;
115     String item;
116     List<Service> services = new ArrayList();
117
118     public DummyHomekitAccessory(String item, String data) {
119         this.id = HomekitTaggedItem.calculateId(item);
120         this.item = item;
121
122         var reader = Json.createReader(new StringReader(data));
123         var services = reader.readArray();
124         reader.close();
125
126         services.forEach(s -> {
127             this.services.add(new DummyService((JsonObject) s));
128         });
129     }
130
131     @Override
132     public int getId() {
133         return id;
134     }
135
136     @Override
137     public CompletableFuture<String> getName() {
138         return CompletableFuture.completedFuture(item);
139     }
140
141     @Override
142     public void identify() {
143     }
144
145     @Override
146     public CompletableFuture<String> getSerialNumber() {
147         return CompletableFuture.completedFuture(item);
148     }
149
150     @Override
151     public CompletableFuture<String> getModel() {
152         return CompletableFuture.completedFuture("none");
153     }
154
155     @Override
156     public CompletableFuture<String> getManufacturer() {
157         return CompletableFuture.completedFuture("none");
158     }
159
160     @Override
161     public CompletableFuture<String> getFirmwareRevision() {
162         return CompletableFuture.completedFuture("none");
163     }
164 }