From: Thomas Weißschuh Date: Wed, 5 May 2021 20:22:18 +0000 (+0200) Subject: [linuxinput] fixes to thing properties (#10634) X-Git-Url: https://git.basschouten.com/?a=commitdiff_plain;h=e510244cb62e6f759fbb88cb9575d2d3fb3127f8;p=openhab-addons.git [linuxinput] fixes to thing properties (#10634) * Do not discover on ENTRY_MODIFY ENTRY_MODIFY is triggered on each keypress multiple times, so we should not trigger on it. The usecase for ENTRY_MODIFY triggers where detecting permission changes of the event nodes. Inotify does have a dedicate event ("ATTRIB") for that but Java WatchService normalizes this to a ENTRY_MODIFY event (See LinuxWatchService.java) After permission changes users now have to trigger a scan manually. * Use proper representation property * Show event node in label This makes it easier to figure out which thing is which device in the presence of symlinks or multiple identical devices. Signed-off-by: Thomas Weißschuh --- diff --git a/bundles/org.openhab.binding.linuxinput/src/main/java/org/openhab/binding/linuxinput/internal/LinuxInputDiscoveryService.java b/bundles/org.openhab.binding.linuxinput/src/main/java/org/openhab/binding/linuxinput/internal/LinuxInputDiscoveryService.java index 2d0da6dad0..365c39bb96 100644 --- a/bundles/org.openhab.binding.linuxinput/src/main/java/org/openhab/binding/linuxinput/internal/LinuxInputDiscoveryService.java +++ b/bundles/org.openhab.binding.linuxinput/src/main/java/org/openhab/binding/linuxinput/internal/LinuxInputDiscoveryService.java @@ -100,7 +100,7 @@ public class LinuxInputDiscoveryService extends AbstractDiscoveryService { return; } DiscoveryResultBuilder result = DiscoveryResultBuilder.create(new ThingUID(THING_TYPE_DEVICE, file.getName())) - .withProperty("path", file.getAbsolutePath()).withRepresentationProperty(file.getName()); + .withProperty("path", file.getAbsolutePath()).withRepresentationProperty("path"); if (ttl != null) { result = result.withTTL(ttl.getSeconds()); } @@ -122,7 +122,7 @@ public class LinuxInputDiscoveryService extends AbstractDiscoveryService { String labelFromDevice = device.getName(); boolean isKeyboard = device.has(EvdevLibrary.Type.KEY); if (labelFromDevice != null) { - label = labelFromDevice; + label = String.format("%s (%s)", labelFromDevice, inputDevice.getName()); } return isKeyboard; } finally { @@ -168,8 +168,10 @@ public class LinuxInputDiscoveryService extends AbstractDiscoveryService { private WatchService makeWatcher() throws IOException { WatchService watchService = FileSystems.getDefault().newWatchService(); + // FIXME also trigger on inotify "ATTRIB" events when WatchService supports this. + // Triggering on ENTRY_MODIFY will trigger multiple times on each keypress for *any* input device. DEVICE_DIRECTORY.register(watchService, StandardWatchEventKinds.ENTRY_CREATE, - StandardWatchEventKinds.ENTRY_DELETE, StandardWatchEventKinds.ENTRY_MODIFY); + StandardWatchEventKinds.ENTRY_DELETE); return watchService; }