]> git.basschouten.com Git - openhab-addons.git/commitdiff
[network] Add configuration parameter for using iOS wake-up (#16259)
authorlsiepel <leosiepel@gmail.com>
Mon, 15 Jan 2024 21:37:38 +0000 (22:37 +0100)
committerGitHub <noreply@github.com>
Mon, 15 Jan 2024 21:37:38 +0000 (22:37 +0100)
Fixes #9575

Signed-off-by: Leo Siepel <leosiepel@gmail.com>
bundles/org.openhab.binding.network/README.md
bundles/org.openhab.binding.network/src/main/java/org/openhab/binding/network/internal/NetworkBindingConstants.java
bundles/org.openhab.binding.network/src/main/java/org/openhab/binding/network/internal/NetworkHandlerConfiguration.java
bundles/org.openhab.binding.network/src/main/java/org/openhab/binding/network/internal/handler/NetworkHandler.java
bundles/org.openhab.binding.network/src/main/resources/OH-INF/i18n/network.properties
bundles/org.openhab.binding.network/src/main/resources/OH-INF/thing/thing-types.xml

index f6be56dfa22ca998a0705ba6eed2ff1e28638648..9471ae261afeac0614f330ea532e88aba698b266 100644 (file)
@@ -53,6 +53,7 @@ Use the following options for a **network:pingdevice**:
 - **retry:** After how many refresh interval cycles the device will be assumed to be offline. Default: `1`.
 - **timeout:** How long the ping will wait for an answer, in milliseconds. Default: `5000` (5 seconds).
 - **refreshInterval:** How often the device will be checked, in milliseconds. Default: `60000` (one minute).
+- **useIOSWakeUp:** When set to true, an additional port knock is performed before a ping. Default: `true`.
 - **networkInterfaceNames:** The network interface names used for communicating with the device.
   Limiting the network interfaces reduces the load when arping and Wake-on-LAN are used.
   Use comma separated values when using textual config. Default: empty (all network interfaces).
@@ -91,8 +92,7 @@ Use DHCP listen for an almost immediate presence detection for phones and tablet
 
 Apple iOS devices are usually in a deep sleep mode and do not respond to ARP pings under all conditions, but to Bonjour service discovery messages (UDP port 5353).
 Therefore, first a Bonjour message is sent, before the ARP presence detection is performed.
-The binding automatically figures out if the target device is an iOS device.
-To check if the binding has correctly recognised a device, have a look at the _uses_ios_wakeup_ property of the Thing.
+This is default behaviour of the binding, when needed this can be changed with the config parameter `useIOSWakeUp`.
 
 ### Use open TCP ports
 
@@ -189,7 +189,7 @@ Things support the following channels:
 demo.things:
 
 ```java
-Thing network:pingdevice:devicename [ hostname="192.168.0.42", macAddress="6f:70:65:6e:48:41" ]
+Thing network:pingdevice:devicename [ hostname="192.168.0.42", macAddress="6f:70:65:6e:48:41", useIOSWakeUp="false" ]
 Thing network:speedtest:local "SpeedTest 50Mo" @ "Internet" [url="https://bouygues.testdebit.info/", fileName="50M.iso"]
 ```
 
index d31f0c77aeb8f9d1d2f30d055037779302d4173b..262236b577f6bbfd176b50fc2948c5caa3357ede 100644 (file)
@@ -60,5 +60,4 @@ public class NetworkBindingConstants {
     public static final String PROPERTY_ARP_STATE = "arp_state";
     public static final String PROPERTY_ICMP_STATE = "icmp_state";
     public static final String PROPERTY_PRESENCE_DETECTION_TYPE = "presence_detection_type";
-    public static final String PROPERTY_IOS_WAKEUP = "uses_ios_wakeup";
 }
index 9c2f529f497f76528b339ef9b7db9a5a5941dce7..6c0445d86963dbb71e1e15ced227dc84ec604e61 100644 (file)
@@ -31,5 +31,6 @@ public class NetworkHandlerConfiguration {
     public Integer retry = 1;
     public Integer refreshInterval = 60000;
     public Integer timeout = 5000;
+    public boolean useIOSWakeUp = true;
     public Set<String> networkInterfaceNames = Set.of();
 }
index 469be159e0f79d0d3f24463bb3a8ffdf7aa85700..b6995792f88628366548e2cdf12dd645cc01073e 100644 (file)
@@ -184,11 +184,7 @@ public class NetworkHandler extends BaseThingHandler
             }
             presenceDetection.setServicePorts(Set.of(port));
         } else {
-            // It does not harm to send an additional UDP packet to a device,
-            // therefore we assume all ping devices are iOS devices. If this
-            // does not work for all users for some obscure reason, we can make
-            // this a thing configuration variable.
-            presenceDetection.setIOSDevice(true);
+            presenceDetection.setIOSDevice(handlerConfiguration.useIOSWakeUp);
             // Hand over binding configurations to the network service
             presenceDetection.setUseDhcpSniffing(configuration.allowDHCPlisten);
             presenceDetection.setUseIcmpPing(configuration.allowSystemPings);
@@ -214,7 +210,6 @@ public class NetworkHandler extends BaseThingHandler
         properties.put(NetworkBindingConstants.PROPERTY_ARP_STATE, presenceDetection.getArpPingState());
         properties.put(NetworkBindingConstants.PROPERTY_ICMP_STATE, presenceDetection.getIPPingState());
         properties.put(NetworkBindingConstants.PROPERTY_PRESENCE_DETECTION_TYPE, "");
-        properties.put(NetworkBindingConstants.PROPERTY_IOS_WAKEUP, presenceDetection.isIOSdevice() ? "Yes" : "No");
         properties.put(NetworkBindingConstants.PROPERTY_DHCP_STATE, presenceDetection.getDhcpState());
         updateProperties(properties);
     }
index ba06fcd5bc3d704f3fb6dd69e13b57acbda69e40..4b03ccc0039ef36ed5530cb499b723e1990b90c7 100644 (file)
@@ -41,6 +41,8 @@ thing-type.config.network.pingdevice.retry.label = Retry
 thing-type.config.network.pingdevice.retry.description = How many refresh interval cycles should a presence detection should take place, before the device is stated as offline
 thing-type.config.network.pingdevice.timeout.label = Timeout
 thing-type.config.network.pingdevice.timeout.description = States how long to wait for a response (in ms), before if a device is stated as offline
+thing-type.config.network.pingdevice.useIOSWakeUp.label = Use iOS Wake Up
+thing-type.config.network.pingdevice.useIOSWakeUp.description = Set to true if the device presence detection should be performed for an iOS device like iPhone or iPads. An additional port knock is performed before a ping.
 thing-type.config.network.servicedevice.hostname.label = Hostname or IP
 thing-type.config.network.servicedevice.hostname.description = Hostname or IP of the device
 thing-type.config.network.servicedevice.macAddress.label = MAC Address
index 007e3e7273007a4c77d29d05b390e2e6efb91e81..5ee4b44cc537ecfa3cd8cee6652fb8fe4048f303 100644 (file)
@@ -21,7 +21,6 @@
                        <property name="dhcp_state">-</property>
                        <property name="icmp_state">-</property>
                        <property name="presence_detection_type">-</property>
-                       <property name="uses_ios_wakeup">-</property>
                </properties>
 
                <config-description>
                                        reduces the load when arping and Wake-on-LAN are used. All interfaces are used when left empty.</description>
                                <advanced>true</advanced>
                        </parameter>
+
+                       <parameter name="useIOSWakeUp" type="boolean" required="true">
+                               <label>Use iOS Wake Up</label>
+                               <default>true</default>
+                               <description>Set to true if the device presence detection should be performed for an iOS device like iPhone or
+                                       iPads. An additional port knock is performed before a ping.</description>
+                               <advanced>true</advanced>
+                       </parameter>
+
                </config-description>
        </thing-type>
 
@@ -82,7 +90,6 @@
                        <property name="dhcp_state">-</property>
                        <property name="icmp_state">-</property>
                        <property name="presence_detection_type">-</property>
-                       <property name="uses_ios_wakeup">-</property>
                </properties>
 
                <config-description>