Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[network] Add configuration parameter for using iOS wake-up #16259

Merged
merged 6 commits into from
Jan 15, 2024
Merged
Show file tree
Hide file tree
Changes from 4 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
6 changes: 3 additions & 3 deletions bundles/org.openhab.binding.network/README.md
Original file line number Diff line number Diff line change
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).
- **assumeiOsDevice:** 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 `assumeiOsDevice`.

### 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", assumeiOsDevice="false" ]
Thing network:speedtest:local "SpeedTest 50Mo" @ "Internet" [url="https://bouygues.testdebit.info/", fileName="50M.iso"]
```

Expand Down
Original file line number Diff line number Diff line change
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";
}
Original file line number Diff line number Diff line change
Expand Up @@ -31,5 +31,6 @@ public class NetworkHandlerConfiguration {
public Integer retry = 1;
public Integer refreshInterval = 60000;
public Integer timeout = 5000;
public boolean assumeiOsDevice = true;
lsiepel marked this conversation as resolved.
Show resolved Hide resolved
public Set<String> networkInterfaceNames = Set.of();
}
Original file line number Diff line number Diff line change
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.assumeiOsDevice);
// 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
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,8 @@ thing-type.network.speedtest.channel.testStart.label = Test Start

# thing types config

thing-type.config.network.pingdevice.assumeiOsDevice.label = Assume iOS Device
thing-type.config.network.pingdevice.assumeiOsDevice.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.pingdevice.hostname.label = Hostname or IP
thing-type.config.network.pingdevice.hostname.description = Hostname or IP of the device
thing-type.config.network.pingdevice.macAddress.label = MAC Address
Expand Down
Original file line number Diff line number Diff line change
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="assumeiOsDevice" type="boolean" required="true">
lsiepel marked this conversation as resolved.
Show resolved Hide resolved
<label>Assume iOS Device</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