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.Collection;
18 import java.util.List;
19 import java.util.concurrent.CompletableFuture;
21 import javax.json.Json;
22 import javax.json.JsonObject;
23 import javax.json.JsonObjectBuilder;
24 import javax.json.JsonValue;
26 import org.eclipse.jdt.annotation.NonNullByDefault;
27 import org.openhab.io.homekit.internal.HomekitTaggedItem;
29 import io.github.hapjava.accessories.HomekitAccessory;
30 import io.github.hapjava.characteristics.Characteristic;
31 import io.github.hapjava.services.Service;
34 * Implements a dummy placeholder accessory for when configuration is missing
36 * @author Cody Cutrer - Initial contribution
39 public class DummyHomekitAccessory implements HomekitAccessory {
40 private static class DummyCharacteristic implements Characteristic {
41 private JsonObject json;
44 public DummyCharacteristic(JsonObject 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";
54 public String getType() {
59 public void supplyValue(JsonObjectBuilder characteristicBuilder) {
60 characteristicBuilder.add("value", json.get("value"));
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());
72 public void setValue(JsonValue jsonValue) {
76 private static class DummyService implements Service {
78 private List<Characteristic> characteristics = new ArrayList();
79 private List<Service> linkedServices = new ArrayList();
81 public DummyService(JsonObject json) {
82 type = json.getString("type");
83 json.getJsonArray("c").forEach(c -> {
84 characteristics.add(new DummyCharacteristic((JsonObject) c));
86 var ls = json.getJsonArray("ls");
89 addLinkedService(new DummyService((JsonObject) s));
95 public String getType() {
100 public List<Characteristic> getCharacteristics() {
101 return characteristics;
105 public List<Service> getLinkedServices() {
106 return linkedServices;
110 public void addLinkedService(Service service) {
111 linkedServices.add(service);
117 List<Service> services = new ArrayList();
119 public DummyHomekitAccessory(String item, String data) {
120 this.id = HomekitTaggedItem.calculateId(item);
123 var reader = Json.createReader(new StringReader(data));
124 var services = reader.readArray();
127 services.forEach(s -> {
128 this.services.add(new DummyService((JsonObject) s));
138 public CompletableFuture<String> getName() {
139 return CompletableFuture.completedFuture(item);
143 public void identify() {
147 public CompletableFuture<String> getSerialNumber() {
148 return CompletableFuture.completedFuture(item);
152 public CompletableFuture<String> getModel() {
153 return CompletableFuture.completedFuture("none");
157 public CompletableFuture<String> getManufacturer() {
158 return CompletableFuture.completedFuture("none");
162 public CompletableFuture<String> getFirmwareRevision() {
163 return CompletableFuture.completedFuture("none");
167 public Collection<Service> getServices() {