# List connected devices in java sdk

**URL:** <https://forum.inductiveautomation.com/t/list-connected-devices-in-java-sdk/38533>\
**Category:** Module Development\
**Created:** [September 9, 2020, 6:50pm UTC](https://forum.inductiveautomation.com/t/list-connected-devices-in-java-sdk/38533 "2020-09-09T18:50:43Z")\
**Posts on this page:** 12\
**Page:** 1

<div class="post-metadata">

**Author:** ![mpervaiz](https://avatars.discourse-cdn.com/v4/letter/m/5e9695/32.png) [@mpervaiz](https://forum.inductiveautomation.com/u/mpervaiz)\
**Post date:** [September 9, 2020, 6:50pm UTC](https://forum.inductiveautomation.com/t/list-connected-devices-in-java-sdk/38533/1 "2020-09-09T18:50:43Z")

</div>

I am writing a module and I want to get a list of connected devices. Can someone point me to the some class or function that would allow me to do this.

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 9, 2020, 7:03pm UTC](https://forum.inductiveautomation.com/t/list-connected-devices-in-java-sdk/38533/2 "2020-09-09T19:03:57Z")

</div>

There is no public API for this.

You could possibly query the “DeviceSettings” table in the internal DB for a list of configured devices but this won’t get you information about whether they are connected or not.

Additionally, being “connected” is not something that is even universal to every type of device, and is not something you can ask of a device even if you could get a list. Every device has `getStatus()` call that returns `String` and can be whatever is appropriate at the current time for that type of device.

---

<div class="post-metadata">

**Author:** ![mpervaiz](https://avatars.discourse-cdn.com/v4/letter/m/5e9695/32.png) [@mpervaiz](https://forum.inductiveautomation.com/u/mpervaiz)\
**Post date:** [September 9, 2020, 7:06pm UTC](https://forum.inductiveautomation.com/t/list-connected-devices-in-java-sdk/38533/3 "2020-09-09T19:06:06Z")

</div>

so there is nothing similar to system.device.listDevices() from python ([https://docs.inductiveautomation.com/display/DOC80/system.device.listDevices](https://docs.inductiveautomation.com/display/DOC80/system.device.listDevices))? I want something similar in java

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 9, 2020, 7:08pm UTC](https://forum.inductiveautomation.com/t/list-connected-devices-in-java-sdk/38533/4 "2020-09-09T19:08:04Z")

</div>

That function is implemented by querying the DeviceSettings table + using private APIs to get the device status.

---

<div class="post-metadata">

**Author:** ![pturmel](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/pturmel/32/3295_2.png) [@pturmel](https://forum.inductiveautomation.com/u/pturmel)\
**Post date:** [September 9, 2020, 7:09pm UTC](https://forum.inductiveautomation.com/t/list-connected-devices-in-java-sdk/38533/5 "2020-09-09T19:09:07Z")

</div>

Your module could get the script manager to call that python function … (:

---

<div class="post-metadata">

**Author:** ![mpervaiz](https://avatars.discourse-cdn.com/v4/letter/m/5e9695/32.png) [@mpervaiz](https://forum.inductiveautomation.com/u/mpervaiz)\
**Post date:** [September 9, 2020, 7:10pm UTC](https://forum.inductiveautomation.com/t/list-connected-devices-in-java-sdk/38533/6 "2020-09-09T19:10:10Z")

</div>

Haha 😃 I was hoping for a java solution but since there is no public API … why not! Thanks

---

<div class="post-metadata">

**Author:** ![mpervaiz](https://avatars.discourse-cdn.com/v4/letter/m/5e9695/32.png) [@mpervaiz](https://forum.inductiveautomation.com/u/mpervaiz)\
**Post date:** [September 9, 2020, 7:23pm UTC](https://forum.inductiveautomation.com/t/list-connected-devices-in-java-sdk/38533/7 "2020-09-09T19:23:07Z")

</div>

Can a module developer query “DeviceSEttings” Table in the internal DB? If yes how ? Any reading recommendations ?

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 9, 2020, 7:26pm UTC](https://forum.inductiveautomation.com/t/list-connected-devices-in-java-sdk/38533/8 "2020-09-09T19:26:37Z")

</div>

Where `context` is a `GatewayContext`:

```auto
List<DeviceSettingsRecord> deviceSettingsRecords = context.getPersistenceInterface().query(
    new SQuery<>(
        DeviceSettingsRecord.META,
        SQueryMode.SREAD_ONLY)
);

```

---

<div class="post-metadata">

**Author:** ![mpervaiz](https://avatars.discourse-cdn.com/v4/letter/m/5e9695/32.png) [@mpervaiz](https://forum.inductiveautomation.com/u/mpervaiz)\
**Post date:** [September 9, 2020, 7:26pm UTC](https://forum.inductiveautomation.com/t/list-connected-devices-in-java-sdk/38533/9 "2020-09-09T19:26:57Z")

</div>

Thanks so much !!

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 9, 2020, 7:28pm UTC](https://forum.inductiveautomation.com/t/list-connected-devices-in-java-sdk/38533/10 "2020-09-09T19:28:17Z")

</div>

`DeviceSettingsRecord` belongs to the OPC UA module, which means your module will have to be dependent on the OPC UA module in order to reference it and run this query.

---

<div class="post-metadata">

**Author:** ![mpervaiz](https://avatars.discourse-cdn.com/v4/letter/m/5e9695/32.png) [@mpervaiz](https://forum.inductiveautomation.com/u/mpervaiz)\
**Post date:** [September 9, 2020, 8:15pm UTC](https://forum.inductiveautomation.com/t/list-connected-devices-in-java-sdk/38533/12 "2020-09-09T20:15:35Z")

</div>

So I added the following import in my code:

```auto
import com.inductiveautomation.ignition.gateway.opcua.server.api.DeviceSettingsRecord;

```

and the following dependecy in my poml file for the import to work:

```auto
        <dependency>
            <groupId>com.inductiveautomation.ignitionsdk</groupId>
            <artifactId>driver-api</artifactId>
            <version>${ignition-sdk-version}</version>
            <type>pom</type>
            <scope>provided</scope>
        </dependency>
    </dependencies>

```

but i get this error:

```auto
java.lang.NoClassDefFoundError: com/inductiveautomation/ignition/gateway/opcua/server/api/DeviceSettingsRecord

at net.cpxinfra.cpxtools.GatewayHook.deviceListGetter(GatewayHook.java:54)

at net.cpxinfra.cpxtools.GatewayHook.startup(GatewayHook.java:49)

at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$LoadedModule.startup(ModuleManagerImpl.java:2433)

at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.startupModule(ModuleManagerImpl.java:1226)

at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$2.call(ModuleManagerImpl.java:771)

at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.executeModuleOperation(ModuleManagerImpl.java:947)

at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl.installModuleInternal(ModuleManagerImpl.java:737)

at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$InstallCommand.execute(ModuleManagerImpl.java:1903)

at com.inductiveautomation.ignition.gateway.modules.ModuleManagerImpl$Receiver.receiveCall(ModuleManagerImpl.java:1856)

at com.inductiveautomation.ignition.gateway.redundancy.QueueableMessageReceiver.receiveCall(QueueableMessageReceiver.java:47)

at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl.dispatchMessage(RedundancyManagerImpl.java:933)

at com.inductiveautomation.ignition.gateway.redundancy.RedundancyManagerImpl$ExecuteTask.run(RedundancyManagerImpl.java:1008)

at com.inductiveautomation.ignition.common.execution.impl.BasicExecutionEngine$ThrowableCatchingRunnable.run(BasicExecutionEngine.java:518)

at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)

at java.base/java.util.concurrent.FutureTask.run(Unknown Source)

at java.base/java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)

at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)

at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)

at java.base/java.lang.Thread.run(Unknown Source)

Caused by: java.lang.ClassNotFoundException: com.inductiveautomation.ignition.gateway.opcua.server.api.DeviceSettingsRecord

at java.base/java.net.URLClassLoader.findClass(Unknown Source)

at com.inductiveautomation.ignition.gateway.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:37)

at java.base/java.lang.ClassLoader.loadClass(Unknown Source)

at com.inductiveautomation.ignition.gateway.modules.ModuleClassLoader.loadClass(ModuleClassLoader.java:85)

at java.base/java.lang.ClassLoader.loadClass(Unknown Source)

```

---

<div class="post-metadata">

**Author:** ![Kevin.Herron](https://sea1.discourse-cdn.com/inductiveautomation/user_avatar/forum.inductiveautomation.com/kevin.herron/32/7259_2.png) [@Kevin.Herron](https://forum.inductiveautomation.com/u/Kevin.Herron)\
**Post date:** [September 9, 2020, 8:35pm UTC](https://forum.inductiveautomation.com/t/list-connected-devices-in-java-sdk/38533/13 "2020-09-09T20:35:32Z")

</div>

You need an entry like this in your module configuration as well: [https://github.com/inductiveautomation/ignition-sdk-examples/blob/63a037020f4b7a7455ca928fed6c4511af4c7bc8/opc-ua-device/opc-ua-device-build/pom.xml#L56-L61](https://github.com/inductiveautomation/ignition-sdk-examples/blob/63a037020f4b7a7455ca928fed6c4511af4c7bc8/opc-ua-device/opc-ua-device-build/pom.xml#L56-L61)
