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