Registry - Devices
DeviceUid
Every device in your organization is uniquely identifiable by the combination of it's typeId
and deviceId
. Two devices of different types can have the same deviceId
. It helps to think of typeId
as a model number and deviceId
as a serial number. Two seperate types may independently have the same serial number pattern (e.g. simple sequential numbering), but because identity in WIoTP is a combination of typeId
and deviceId
this does not cause a clash.
Globally, your organization ID is applied to the deviceUID creating a globally unique identifier for every device connected to Watson IoT Platform.
- typeId:
myDeviceType
- deviceId:
myDevice
- deviceUid:
myDeviceType:myDevice
- deviceGuid:
myOrg:myDeviceType:myDevice
The wiotp.sdk.registry.devices.DeviceUID
class provides a structure to encapsulate a device unique ID. You can use it interchangeably throughout the SDK with a simple Python dictionary. It's a code style choice.
from pprint import pprint
import wiotp.sdk.application
import wiotp.sdk.api.registry.devices.DeviceUid as DeviceUid
deviceIdAsClass = DeviceUid(typeId="myDeviceType", deviceId="myDevice")
deviceIdAsDict = {"typeId": "myDeviceType", "deviceId": "myDevice"}
# All three output "myDeviceType:myDevice"
print(deviceIdAsClass.typeId + ":" + deviceIdAsClass.deviceId)
print(deviceIdAsClass)
print(deviceIdAsDict["typeId"] + ":" + deviceIdAsDict["deviceId"])
# Outputs {"typeId": "myDeviceType", "deviceId": "myDevice"}
pprint(deviceIdAsClass)
# These two calls are identical, the same applies anywhere that a
# deviceUid is needed, it is your choice which style you prefer
# in your code.
appClient.registry.devices.delete(deviceIdAsClass)
appClient.registry.devices.delete(deviceIdAsDict)
Get
Delete
List
Create
wiotp.sdk.api.regsitry.devices.DeviceCreateRequest
exists to aid in the registration of new devices. It's use is entirely optional, and you can use a standard python dictionary instead if you prefer. To create an instance of this class provide the following named parameters:
typeId
RequireddeviceId
RequiredauthToken
Optional, if you do not specify a token on creation one will be generated automatically for you. If you take a generated toekn, you must capture the token from the device registration response as it can not be retrieved later.deviceInfo
Optional. A python dictionary, or aDeviceInfo
instancelocation
Optionalmetadata
Optional dictionary containing freeform metadata
import uuid
import wiotp.sdk.application
import wiotp.sdk.api.registry.devices.DeviceCreateRequest as DeviceCreateRequest
import wiotp.sdk.api.registry.devices.DeviceInfo as DeviceInfo
options = wiotp.sdk.application.parseEnvVars()
appClient = wiotp.sdk.application.ApplicationClient(options)
# Device registration using the helper classes
deviceToRegister1 = DeviceCreateRequest(
typeId="myDeviceType",
deviceId=str(uuid.uuid4()),
authToken="NotVerySecretPassw0rd",
deviceInfo=DeviceInfo(serialNumber="123", descriptiveLocation="Floor 3, Room 2")
)
appClient.registry.devices.create(deviceToRegister1)
# Device registration using simple Python dictionaries
deviceToRegister2 = {
"typeId": "myDeviceType",
"deviceId": str(uuid.uuid4()),
"authToken": "NotVerySecretPassw0rd",
"deviceInfo": {
"serialNumber": "123",
"descriptiveLocation": "Floor 3, Room 2"
}
}
appClient.registry.devices.create(deviceToRegister2)
registry.devices.create()
also allows you to pass a list of devices to perform bulk device registration.
import uuid
import wiotp.sdk.application
import wiotp.sdk.api.registry.devices.DeviceCreateRequest as DeviceCreateRequest
# Register 100 devices with random UUIDs as deviceIds
devicesToRegister = []
for i in range(100)
dReq = DeviceCreateRequest(typeId="myDeviceType", deviceId=str(uuid.uuid4())
devicesToRegister.append(dReq)
registrationResult = appClient.registry.devices.create(devicesToRegister)