]> git.basschouten.com Git - openhab-addons.git/commitdiff
[homekit] Improve output of console's `homekit show` command (#13569)
authorCody Cutrer <cody@cutrer.us>
Wed, 19 Oct 2022 18:17:55 +0000 (12:17 -0600)
committerGitHub <noreply@github.com>
Wed, 19 Oct 2022 18:17:55 +0000 (20:17 +0200)
* [homekit] Improve output of console's `homekit show` command

 * include the full JSON from all the characteristics, so you can confirm
   everything is configured correctly.
 * only use simple class names; the fully qualified package is just a
   distraction.
 * show linked services if they exist
 * include the class name of services, not just the GUID

Signed-off-by: Cody Cutrer <cody@cutrer.us>
bundles/org.openhab.io.homekit/src/main/java/org/openhab/io/homekit/internal/HomekitCommandExtension.java

index 8b6fc43a763bfa5386c13ba07a210ad6de1c5c4a..0904832023f2ae9d905cf4b80b73b4c2d845680d 100644 (file)
@@ -26,6 +26,8 @@ import org.osgi.service.component.annotations.Reference;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import io.github.hapjava.services.Service;
+
 /**
  * Console commands for interacting with the HomeKit integration
  *
@@ -119,6 +121,24 @@ public class HomekitCommandExtension extends AbstractConsoleCommandExtension {
         });
     }
 
+    private void printService(Console console, Service service, int indent) {
+        console.println(" ".repeat(indent) + "Service Type: " + service.getClass().getSimpleName() + " ("
+                + service.getType() + ")");
+        console.println(" ".repeat(indent + 2) + "Characteristics:");
+        service.getCharacteristics().forEach((c) -> {
+            try {
+                console.println(
+                        " ".repeat(indent + 4) + c.getClass().getSimpleName() + ": " + c.toJson(0).get().toString());
+            } catch (InterruptedException | ExecutionException e) {
+            }
+        });
+        if (service.getLinkedServices().isEmpty()) {
+            return;
+        }
+        console.println(" ".repeat(indent + 2) + "Linked Services:");
+        service.getLinkedServices().forEach((s) -> printService(console, s, indent + 2));
+    }
+
     private void printAccessory(String id, Console console) {
         homekit.getAccessories().forEach(v -> {
             try {
@@ -126,11 +146,7 @@ public class HomekitCommandExtension extends AbstractConsoleCommandExtension {
                         && (v.getName().get().toUpperCase().contains(id.toUpperCase())))) {
                     console.println(v.getId() + " " + v.getName().get());
                     console.println("Services:");
-                    v.getServices().forEach(s -> {
-                        console.println("    Service Type: " + s.getType());
-                        console.println("    Characteristics: ");
-                        s.getCharacteristics().forEach(c -> console.println("      : " + c.getClass()));
-                    });
+                    v.getServices().forEach(s -> printService(console, s, 2));
                     console.println("");
                 }
             } catch (InterruptedException | ExecutionException e) {