2 * Copyright (c) 2010-2023 Contributors to the openHAB project
4 * See the NOTICE file(s) distributed with this work for additional
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
11 * SPDX-License-Identifier: EPL-2.0
13 package org.openhab.io.homekit.internal.accessories;
15 import java.io.StringReader;
16 import java.util.ArrayList;
17 import java.util.List;
18 import java.util.concurrent.CompletableFuture;
20 import javax.json.Json;
21 import javax.json.JsonObject;
22 import javax.json.JsonObjectBuilder;
23 import javax.json.JsonValue;
25 import org.eclipse.jdt.annotation.NonNullByDefault;
26 import org.openhab.io.homekit.internal.HomekitTaggedItem;
28 import io.github.hapjava.accessories.HomekitAccessory;
29 import io.github.hapjava.characteristics.Characteristic;
30 import io.github.hapjava.services.Service;
33 * Implements a dummy placeholder accessory for when configuration is missing
35 * @author Cody Cutrer - Initial contribution
38 public class DummyHomekitAccessory implements HomekitAccessory {
39 private static class DummyCharacteristic implements Characteristic {
40 private JsonObject json;
43 public DummyCharacteristic(JsonObject 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";
53 public String getType() {
58 public void supplyValue(JsonObjectBuilder characteristicBuilder) {
59 characteristicBuilder.add("value", json.get("value"));
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());
71 public void setValue(JsonValue jsonValue) {
75 private static class DummyService implements Service {
77 private List<Characteristic> characteristics = new ArrayList();
78 private List<Service> linkedServices = new ArrayList();
80 public DummyService(JsonObject json) {
81 type = json.getString("type");
82 json.getJsonArray("c").forEach(c -> {
83 characteristics.add(new DummyCharacteristic((JsonObject) c));
85 var ls = json.getJsonArray("ls");
88 addLinkedService(new DummyService((JsonObject) s));
94 public String getType() {
99 public List<Characteristic> getCharacteristics() {
100 return characteristics;
104 public List<Service> getLinkedServices() {
105 return linkedServices;
109 public void addLinkedService(Service service) {
110 linkedServices.add(service);
116 List<Service> services = new ArrayList();
118 public DummyHomekitAccessory(String item, String data) {
119 this.id = HomekitTaggedItem.calculateId(item);
122 var reader = Json.createReader(new StringReader(data));
123 var services = reader.readArray();
126 services.forEach(s -> {
127 this.services.add(new DummyService((JsonObject) s));
137 public CompletableFuture<String> getName() {
138 return CompletableFuture.completedFuture(item);
142 public void identify() {
146 public CompletableFuture<String> getSerialNumber() {
147 return CompletableFuture.completedFuture(item);
151 public CompletableFuture<String> getModel() {
152 return CompletableFuture.completedFuture("none");
156 public CompletableFuture<String> getManufacturer() {
157 return CompletableFuture.completedFuture("none");
161 public CompletableFuture<String> getFirmwareRevision() {
162 return CompletableFuture.completedFuture("none");