- **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).
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
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"]
```
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";
}
public Integer retry = 1;
public Integer refreshInterval = 60000;
public Integer timeout = 5000;
+ public boolean useIOSWakeUp = true;
public Set<String> networkInterfaceNames = Set.of();
}
}
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);
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);
}
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
<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>
<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>