Skip to content

Commit

Permalink
[network] Add configuration parameter for using iOS wake-up (openhab#…
Browse files Browse the repository at this point in the history
…16259)

Fixes openhab#9575

Signed-off-by: Leo Siepel <leosiepel@gmail.com>
Signed-off-by: Andras Uhrin <andras.uhrin@gmail.com>
  • Loading branch information
lsiepel authored and andrasU committed Jan 27, 2024
1 parent 4a22488 commit df324d9
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 12 deletions.
6 changes: 3 additions & 3 deletions bundles/org.openhab.binding.network/README.md
Expand Up @@ -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).
Expand Down Expand Up @@ -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

Expand Down Expand Up @@ -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"]
```

Expand Down
Expand Up @@ -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";
}
Expand Up @@ -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();
}
Expand Up @@ -184,11 +184,7 @@ void initialize(PresenceDetection presenceDetection) {
}
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);
Expand All @@ -214,7 +210,6 @@ private void updateNetworkProperties() {
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);
}
Expand Down
Expand Up @@ -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
Expand Down
Expand Up @@ -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>
Expand Down Expand Up @@ -62,6 +61,15 @@
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>

Expand All @@ -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>
Expand Down

0 comments on commit df324d9

Please sign in to comment.