All Projects → devicehive → devicehive-python

devicehive / devicehive-python

Licence: Apache-2.0 license
DeviceHive Python library

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to devicehive-python

tuyagateway
Local Python Gateway for Tuya devices
Stars: ✭ 102 (+251.72%)
Mutual labels:  gateway
TarsGateway
No description or website provided.
Stars: ✭ 46 (+58.62%)
Mutual labels:  gateway
serial2mqtt
Serial to MQTT adapter serivce
Stars: ✭ 21 (-27.59%)
Mutual labels:  gateway
LogiEM
面向Elasticsearch研发与运维人员,围绕集群、索引构建的零侵入、多租户的Elasticsearch GUI管控平台
Stars: ✭ 209 (+620.69%)
Mutual labels:  gateway
Banklink
PHP payment library to easily integrate Baltic banklinks (supports old and new iPizza protocol), E-commerce gateaway (Estcard, Nets Estonia), Liisi Payment Link and Pocopay.
Stars: ✭ 34 (+17.24%)
Mutual labels:  gateway
docker-kong-oidc
Kong + OIDC plugins
Stars: ✭ 83 (+186.21%)
Mutual labels:  gateway
go-zero
A cloud-native Go microservices framework with cli tool for productivity.
Stars: ✭ 23,294 (+80224.14%)
Mutual labels:  gateway
gateway
Springcloud gateway 的样例工程, 封装了一些常用的网关功能,如鉴权,数据级权限控制,验签,动态路由,日志,流控,降级等
Stars: ✭ 16 (-44.83%)
Mutual labels:  gateway
omise-magento
Omise Magento Plugin
Stars: ✭ 32 (+10.34%)
Mutual labels:  gateway
redap
HTTP-to-LDAP Gateway
Stars: ✭ 27 (-6.9%)
Mutual labels:  gateway
GatewayService
GatewayService (Ocelot).
Stars: ✭ 19 (-34.48%)
Mutual labels:  gateway
threema-msgapi-sdk-python
Threema Gateway Message SDK for Python
Stars: ✭ 37 (+27.59%)
Mutual labels:  gateway
Zwave2Mqtt-docker
Docker container for Zwave2Mqtt Gateway and Control Panel app
Stars: ✭ 29 (+0%)
Mutual labels:  gateway
kong-init
Declarative configuration tool for Kong
Stars: ✭ 38 (+31.03%)
Mutual labels:  gateway
showcase
A Full Stack Journey with Micro Services and Micro Front Ends. Using dapr, kubernetes, react module federation and web assembly,
Stars: ✭ 45 (+55.17%)
Mutual labels:  gateway
api-gateway
Node.js API gateway that works as single entry point for all clients in a MicroService architecture pattern.
Stars: ✭ 26 (-10.34%)
Mutual labels:  gateway
tentacool
REST API to manage Linux networking via netlink
Stars: ✭ 63 (+117.24%)
Mutual labels:  gateway
Telephone-Remote-Control
No description or website provided.
Stars: ✭ 19 (-34.48%)
Mutual labels:  gateway
chirpstack-gateway-os
Yocto based gateway images including ChirpStack components.
Stars: ✭ 101 (+248.28%)
Mutual labels:  gateway
pier
The Interchain gateway core implementation
Stars: ✭ 44 (+51.72%)
Mutual labels:  gateway

License PyPI Build Status

Devicehive

The simplest way to create a client is to use DeviceHiveApi class. If you need to handle server events such as handle_command_insert, handle_command_update or handle_notification you'll have to extend Handler class and use DeviceHive class for it.

Creating a client using DeviceHiveApi class

First of all you need to create DeviceHiveApi object. Then you can use this object for for API calls.

Example:

from devicehive import DeviceHiveApi


url = 'http://playground.devicehive.com/api/rest'
refresh_token = 'SOME_REFRESH_TOKEN'
device_hive_api = DeviceHiveApi(url, refresh_token=refresh_token)

Websocket protocol

If you want to use Websocket protocol you need only to specify the url:

url = 'ws://playground.devicehive.com/api/websocket'

Authentication

There are three ways of initial authentication:

  • Using refresh token
  • Using access token
  • Using login and password

Examples:

from devicehive import DeviceHiveApi


url = 'ws://playground.devicehive.com/api/websocket'
device_hive_api = DeviceHiveApi(url, refresh_token='SOME_REFRESH_TOKEN')
from devicehive import DeviceHiveApi


url = 'ws://playground.devicehive.com/api/websocket'
device_hive_api = DeviceHiveApi(url, access_token='SOME_ACCESS_TOKEN')
from devicehive import DeviceHiveApi


url = 'ws://playground.devicehive.com/api/websocket'
device_hive_api = DeviceHiveApi(url, login='SOME_LOGIN', password='SOME_PASSWORD')

Info

get_info() method returns dict with the next fields:

  • api_version
  • server_timestamp
  • rest_server_url
  • websocket_server_url

get_cluster_info() method returns dict with the next fields:

  • bootstrap.servers
  • zookeeper.connect

Example:

from devicehive import DeviceHiveApi


url = 'http://playground.devicehive.com/api/rest'
refresh_token = 'SOME_REFRESH_TOKEN'
device_hive_api = DeviceHiveApi(url, refresh_token=refresh_token)
info = device_hive_api.get_info()
print(info)
cluster_info = device_hive_api.get_cluster_info()
print(cluster_info)

Properties

get_property(name) method returns dict with the next fields:

  • entity_version
  • name
  • value

set_property(name, value) method returns entity version.

delete_property(name) method does not return anything.

Example:

from devicehive import DeviceHiveApi


url = 'http://playground.devicehive.com/api/rest'
refresh_token = 'SOME_REFRESH_TOKEN'
device_hive_api = DeviceHiveApi(url, refresh_token=refresh_token)
name = 'user.login.lastTimeoutSent'
entity_version = device_hive_api.set_property(name, 'value')
print(entity_version)
prop = device_hive_api.get_property(name)
print(prop)
device_hive_api.delete_property(name)

Tokens

create_token(user_id, expiration, actions, network_ids, device_ids) method returns dict with the next fields:

  • access_token
  • refresh_token

only user_id is required.

refresh_token() method refreshes the access token and returns it.

Example:

from devicehive import DeviceHiveApi


url = 'http://playground.devicehive.com/api/rest'
refresh_token = 'SOME_REFRESH_TOKEN'
device_hive_api = DeviceHiveApi(url, refresh_token=refresh_token)
tokens = device_hive_api.create_token(1)
print(tokens)
access_token = device_hive_api.refresh_token()
print(access_token)

Devices

list_devices(name, name_pattern, network_id, network_name, sort_field, sort_order, take, skip) method returns list of Device objects. All args are optional.

get_device(device_id) method returns Device object.

put_device(device_id, name, data, network_id, is_blocked) method returns Device object. Only device_id is required.

list_commands(device_id, start, end, command, status, sort_field, sort_order, take, skip) method returns list of Command objects. Only device_id is required.

send_command(device_id, command_name, parameters, lifetime, timestamp, status, result) method returns Command object. Only device_id and command_name are required.

list_notifications(device_id, start, end, notification, sort_field, sort_order, take, skip) method returns list of Notification object. Only device_id is required.

send_notification(device_id, notification_name, parameters, timestamp) method returns Notification object. Only device_id and notification_name are required.

Device object

Properties:

  • id (read only)
  • name
  • data
  • network_id
  • device_type_id
  • is_blocked

Methods:

  • save() method does not return anything.
  • remove() method does not return anything.
  • list_commands(start, end, command, status, sort_field, sort_order, take, skip) method returns list of Command objects. All args are optional.
  • send_command(command_name, parameters, lifetime, timestamp, status, result) method returns Command object. Only command_name is required.
  • list_notifications(start, end, notification, sort_field, sort_order, take, skip) method returns list of Notification objects. All args are optional.
  • send_notification(notification_name, parameters, timestamp) method returns Notification object. Only notification_name is required.

Command object

Properties:

  • id (read only)
  • user_id (read only)
  • command (read only)
  • parameters (read only)
  • lifetime (read only)
  • timestamp (read only)
  • last_updated (read only)
  • status
  • result

Methods:

  • save() method does not return anything.

Notification object

Properties:

  • device_id (read only)
  • id (read only)
  • notification (read only)
  • parameters (read only)
  • timestamp (read only)

Example:

from devicehive import DeviceHiveApi


url = 'http://playground.devicehive.com/api/rest'
refresh_token = 'SOME_REFRESH_TOKEN'
device_hive_api = DeviceHiveApi(url, refresh_token=refresh_token)
device_id = 'example-device'
device = device_hive_api.put_device(device_id)
device.name = 'new-device-name'
device.data = {'key': 'value'}
device.save()
devices = device_hive_api.list_devices()
for device in devices:
    print('Device: %s, name: %s, data: %s' % (device.id, device.name,
                                              device.data))
    device.remove()

Networks

list_networks(name, name_pattern, sort_field, sort_order, take, skip) method returns list of Network objects. All args are optional.

get_network(network_id) method returns Network object.

create_network(name, description) method returns Network object.

Network object

Properties:

  • id (read only)
  • name
  • description

Methods:

  • save() method does not return anything.
  • remove(force) method does not return anything. All args are optional.

Example:

from devicehive import DeviceHiveApi


url = 'http://playground.devicehive.com/api/rest'
refresh_token = 'SOME_REFRESH_TOKEN'
device_hive_api = DeviceHiveApi(url, refresh_token=refresh_token)
network_name = 'example-name'
network_description = 'example-description'
network = device_hive_api.create_network(network_name, network_description)
print(network.name)

Device types

list_device_types(name, name_pattern, sort_field, sort_order, take, skip) method returns list of DeviceType objects. All args are optional.

get_device_type(device_type_id) method returns DeviceType object.

create_device_type(name, description) method returns DeviceType object.

DeviceType object

Properties:

  • id (read only)
  • name
  • description

Methods:

  • save() method does not return anything.
  • remove(force) method does not return anything. All args are optional.

Example:

from devicehive import DeviceHiveApi


url = 'http://playground.devicehive.com/api/rest'
refresh_token = 'SOME_REFRESH_TOKEN'
device_hive_api = DeviceHiveApi(url, refresh_token=refresh_token)
device_type_name = 'example-name'
device_type_description = 'example-description'
device_type = device_hive_api.create_device_type(device_type_name,
                                                 device_type_description)
print(device_type.name)

Users

list_users(login, login_pattern, role, status, sort_field, sort_order, take, skip) method returns list of User objects. All args are optional.

get_current_user() method returns User object.

get_user(user_id) method returns User object.

create_user(self, login, password, role, data, all_device_types_available) method returns User object.

User object

Properties:

  • id (read only)
  • login (read only)
  • last_login (read only)
  • intro_reviewed (read only)
  • all_device_types_available (read only)
  • role
  • status
  • data

Methods:

  • save() method does not return anything.
  • update_password(password) method does not return anything.
  • remove() method does not return anything.
  • list_networks() method Returns list of Network objects.
  • list_device_types() method Returns list of DeviceType objects.
  • assign_network(network_id) method does not return anything.
  • unassign_network(network_id) method does not return anything.
  • assign_device_type(device_type_id) method does not return anything.
  • unassign_device_type(device_type_id) method does not return anything.
  • allow_all_device_types() method does not return anything.
  • disallow_all_device_types() method does not return anything.

Example:

from devicehive import DeviceHiveApi
from devicehive.user import User


url = 'http://playground.devicehive.com/api/rest'
refresh_token = 'SOME_REFRESH_TOKEN'
device_hive_api = DeviceHiveApi(url, refresh_token=refresh_token)
login = 'example-login'
password = 'example-password'
role = User.CLIENT_ROLE
data = {'key': 'value'}
user = device_hive_api.create_user(login, password, role, data)
print(user.login)

Creating a client using DeviceHive class

First of all you need to create custom Handler class.

Example of creating custom Handler class:

from devicehive import Handler


class SimpleHandler(Handler):

    def handle_connect(self):
        info = self.api.get_info()
        print(info)
        self.api.disconnect()

handle_connect is the only one required method. If you want to handle server events you'll heed to implement handle_command_insert, handle_command_update and handle_notification methods.

Example:

from devicehive import Handler


class SimpleHandler(Handler):
    
    def handle_connect(self):
        device_ids = ['example-device-1', 'example-device-2']
        for device_id in device_ids:
            device = self.api.put_device(device_id)
            device.subscribe_insert_commands()
            device.subscribe_update_commands()
            device.subscribe_notifications()

    def handle_command_insert(self, command):
        print(command.command)

    def handle_command_update(self, command):
        print(command.command)

    def handle_notification(self, notification):
        print(notification.notification)

The second step is to use DeviceHive class for creating connection to the server.

Example:

from devicehive import Handler
from devicehive import DeviceHive


class SimpleHandler(Handler):

    def handle_connect(self):
        device_ids = ['example-device-1', 'example-device-2']
        for device_id in device_ids:
            device = self.api.put_device(device_id)
            device.subscribe_insert_commands()
            device.subscribe_update_commands()
            device.subscribe_notifications()

    def handle_command_insert(self, command):
        print(command.command)

    def handle_command_update(self, command):
        print(command.command)

    def handle_notification(self, notification):
        print(notification.notification)


url = 'http://playground.devicehive.com/api/rest'
refresh_token = 'SOME_REFRESH_TOKEN'
dh = DeviceHive(SimpleHandler)
dh.connect(url, refresh_token=refresh_token)

Custom handler args

If you need to initialize your handler you can do it the next way:

from devicehive import Handler
from devicehive import DeviceHive


class SimpleHandler(Handler):

    def __init__(self, api, some_arg, some_kwarg):
        Handler.__init__(self, api)
        self._some_arg = some_arg
        self._some_kwarg = some_kwarg

    def handle_connect(self):
        info = self.api.get_info()
        print(info)
        self.api.disconnect()

device_hive = DeviceHive(SimpleHandler, 'some_arg', some_kwarg='some_kwarg')

Websocket protocol

If you want to use Websocket protocol you need only to specify the url:

url = 'ws://playground.devicehive.com/api/websocket'

Authentication

There are three ways of initial authentication:

  • Using refresh token
  • Using access token
  • Using login and password

Examples:

url = 'ws://playground.devicehive.com/api/websocket'
device_hive.connect(url, refresh_token='SOME_REFRESH_TOKEN')
url = 'ws://playground.devicehive.com/api/websocket'
device_hive.connect(url, access_token='SOME_ACCESS_TOKEN')
url = 'ws://playground.devicehive.com/api/websocket'
device_hive.connect(url, login='SOME_LOGIN', password='SOME_PASSWORD')

API

All api calls may be done via api object. This object available inside custom handler with self.api property.

API info

self.api.get_info() method returns dict. get_info method of DeviceHiveApi class is the wrapper on top of this call.

self.api.get_cluster_info() method returns dict. get_cluster_info method of DeviceHiveApi class is the wrapper on top of this call.

See the description of DeviceHiveApi info methods for more details.

Example:

from devicehive import Handler


class SimpleHandler(Handler):

    def handle_connect(self):
        info = self.api.get_info()
        print(info)
        cluster_info = self.api.get_cluster_info()
        print(cluster_info)
        self.api.disconnect()

API properties

self.api.get_property(name) method returns dict. get_property method of DeviceHiveApi class is the wrapper on top of this call.

self.api.set_property(name, value) method returns entity version. set_property method of DeviceHiveApi class is the wrapper on top of this call.

self.api.delete_property(name) method does not return anything. delete_property method of DeviceHiveApi class is the wrapper on top of this call.

See the description of DeviceHiveApi property methods for more details.

Example:

from devicehive import Handler


class SimpleHandler(Handler):

    def handle_connect(self):
        name = 'user.login.lastTimeoutSent'
        prop = self.api.get_property(name)
        print(prop)
        entity_version = self.api.get_property(name, 'value')
        print(entity_version)
        self.api.delete_property(name)
        self.api.disconnect()

API tokens

self.api.create_token(user_id, expiration, actions, network_ids, device_ids) method returns dict. create_token method of DeviceHiveApi class is the wrapper on top of this call.

self.api.refresh_token() method refreshes the access token and returns it. refresh_token method of DeviceHiveApi class is the wrapper on top of this call.

See the description of DeviceHiveApi token methods for more details.

Example:

from devicehive import Handler


class SimpleHandler(Handler):

    def handle_connect(self):
        tokens = self.api.create_token(1)
        print(tokens)
        access_token = self.api.refresh_token()
        print(access_token)
        self.api.disconnect()

API commands subscription

self.api.subscribe_insert_commands(device_id, network_ids, device_type_ids, names, timestamp) method returns CommandsSubscription object.

self.api.subscribe_update_commands(device_id, network_ids, device_type_ids, names, timestamp) method returns CommandsSubscription object.

API CommandsSubscription object

Properties:

  • id (read only)

Methods:

  • remove() method does not return anything.

Example:

from devicehive import Handler


class SimpleHandler(Handler):
    insert_subscription = None
    update_subscription = None

    def handle_connect(self):
        device_id = 'example-device'
        device = self.api.put_device(device_id)
        command_name = 'example-command'
        self.insert_subscription = self.api.subscribe_insert_commands(
            device_id, [command_name])
        self.update_subscription= self.api.subscribe_update_commands(
            device_id, [command_name])
        command = device.send_command(command_name)
        command.status = 'new-status'
        command.save()

    def handle_command_insert(self, command):
        print('Command insert: %s, status: %s.' % (command.command,
                                                   command.status))

    def handle_command_update(self, command):
        print('Command update: %s, status: %s.' % (command.command,
                                                   command.status))
        self.insert_subscription.remove()
        self.update_subscription.remove()

API notifications subscription

self.api.subscribe_notifications(device_id, network_ids, device_type_ids, names, timestamp) method returns NotificationsSubscription object.

API NotificationsSubscription object

Properties:

  • id (read only)

Methods:

  • remove() method does not return anything.

Example:

from devicehive import Handler


class SimpleHandler(Handler):
    notification_subscription = None

    def handle_connect(self):
        device_id = 'example-device'
        device = self.api.put_device(device_id)
        notification_name = 'example-notification'
        self.notification_subscription = self.api.subscribe_notifications(
            device_id, [notification_name])
        device.send_notification(notification_name)

    def handle_notification(self, notification):
        print('Notification: %s.' % notification.notification)
        self.notification_subscription.remove()

API devices

self.api.list_devices(name, name_pattern, network_id, network_name, sort_field, sort_order, take, skip) method returns list of Device objects. list_devices method of DeviceHiveApi class is the wrapper on top of this call.

self.api.get_device(device_id) method returns Device object. get_device method of DeviceHiveApi class is the wrapper on top of this call.

self.api.put_device(device_id, name, data, network_id, device_type_id, is_blocked) method does not return anything. put_device method of DeviceHiveApi class is the wrapper on top of this call.

self.api.list_commands(device_id, start, end, command, status, sort_field, sort_order, take, skip) method returns list of Command objects. list_commands method of DeviceHiveApi class is the wrapper on top of this call.

self.api.send_command(device_id, command_name, parameters, lifetime, timestamp, status, result) method returns Command object. send_command method of DeviceHiveApi class is the wrapper on top of this call.

self.api.list_notifications(device_id, start, end, notification, sort_field, sort_order, take, skip) method returns list of Notification objects. list_notifications method of DeviceHiveApi class is the wrapper on top of this call.

self.api.send_notification(device_id, notification_name, parameters, timestamp) method returns Notification object. send_notification method of DeviceHiveApi class is the wrapper on top of this call.

See the description of DeviceHiveApi device methods for more details.

API device object

API device object has the same properties as device object.

API device object has all methods from device object and extends these methods with:

  • subscribe_insert_commands(names, timestamp) method returns CommandsSubscription object. All args are optional.
  • subscribe_update_commands(names, timestamp) method returns CommandsSubscription object. All args are optional.
  • subscribe_notifications(names, timestamp) method returns NotificationsSubscription object. All args are optional.

API command object

API command object has the same properties as command object.

API command object has the same methods as command object.

API notification object

API notification object has the same properties as notification object

Example:

from devicehive import Handler


class SimpleHandler(Handler):

    def handle_connect(self):
        device_id = 'example-device'
        device = self.api.put_device(device_id)
        device.name = 'new-device-name'
        device.data = {'key': 'value'}
        device.save()
        devices = self.api.list_devices()
        for device in devices:
            print('Device: %s, name: %s, data: %s' % (device.id, device.name,
                                                      device.data))
            device.remove()
        self.api.disconnect()

API networks

self.api.list_networks(name, name_pattern, sort_field, sort_order, take, skip) method returns list of Network objects. list_networks method of DeviceHiveApi class is the wrapper on top of this call.

self.api.get_network(network_id) method returns Network object. get_network method of DeviceHiveApi class is the wrapper on top of this call.

self.api.create_network(name, description) method returns Network object. create_network method of DeviceHiveApi class is the wrapper on top of this call.

See the description of DeviceHiveApi network methods for more details.

API network object

API network object has the same properties as network object.

API network object has all methods from network object and extends these methods with:

  • list_devices(name, name_pattern, sort_field, sort_order, take, skip) method returns list of Device objects. All args are optional.
  • subscribe_insert_commands(names, timestamp) method returns CommandsSubscription object. All args are optional.
  • subscribe_update_commands(names, timestamp) method returns CommandsSubscription object. All args are optional.
  • subscribe_notifications(names, timestamp) method returns NotificationsSubscription object. All args are optional.

Example:

from devicehive import Handler


class SimpleHandler(Handler):

    def handle_connect(self):
        network_name = 'example-name'
        network_description = 'example-description'
        network = self.api.create_network(network_name, network_description)
        print(network.name)
        self.api.disconnect()

API device types

self.api.list_device_types(name, name_pattern, sort_field, sort_order, take, skip) method returns list of DeviceType objects. list_device_types method of DeviceHiveApi class is the wrapper on top of this call.

self.api.get_device_type(device_type_id) method returns DeviceType object. get_device_type method of DeviceHiveApi class is the wrapper on top of this call.

self.api.create_device_type(name, description) method returns DeviceType object. create_device_type method of DeviceHiveApi class is the wrapper on top of this call.

See the description of DeviceHiveApi device types methods for more details.

API device type object

API device type object has the same properties as device type object.

API device type object has all methods from device type object and extends these methods with:

  • list_devices(name, name_pattern, sort_field, sort_order, take, skip) method returns list of Device objects. All args are optional.
  • subscribe_insert_commands(names, timestamp) method returns CommandsSubscription object. All args are optional.
  • subscribe_update_commands(names, timestamp) method returns CommandsSubscription object. All args are optional.
  • subscribe_notifications(names, timestamp) method returns NotificationsSubscription object. All args are optional.

Example:

from devicehive import Handler


class SimpleHandler(Handler):

    def handle_connect(self):
        device_type_name = 'example-name'
        device_type_description = 'example-description'
        device_type = self.api.create_device_type(device_type_name, device_type_description)
        print(device_type.name)
        self.api.disconnect()

API users

self.api.list_users(login, login_pattern, role, status, sort_field, sort_order, take, skip) method returns list of User objects. list_users method of DeviceHiveApi class is the wrapper on top of this call.

self.api.get_current_user() method returns User object. get_current_user method of DeviceHiveApi class is the wrapper on top of this call.

self.api.get_user(user_id) method returns User object. get_user method of DeviceHiveApi class is the wrapper on top of this call.

self.api.create_user(self, login, password, role, data, all_device_types_available) method returns User object. create_user method of DeviceHiveApi class is the wrapper on top of this call.

See the description of DeviceHiveApi user methods for more details.

API user object

API user object has the same properties as user object.

API user object has the same methods as user object.

Example:

from devicehive import Handler
from devicehive.user import User


class SimpleHandler(Handler):

    def handle_connect(self):
        login = 'example-login'
        password = 'example-password'
        role = User.CLIENT_ROLE
        data = {'key': 'value'}
        user = self.api.create_user(login, password, role, data)
        print(user.login)
        self.api.disconnect()

API extended example

Here we will create one endpoint which sends notifications and other endpoint which receives these notifications.

On the first we will create receiver.py:

from devicehive import Handler
from devicehive import DeviceHive


class ReceiverHandler(Handler):

    def __init__(self, api, device_id='simple-example-device',
                 accept_command_name='accept_notifications'):
        Handler.__init__(self, api)
        self._device_id = device_id
        self._accept_command_name = accept_command_name
        self._device = None

    def handle_connect(self):
        self._device = self.api.put_device(self._device_id)
        self._device.subscribe_insert_commands([self._accept_command_name])
        self._device.subscribe_notifications()

    def handle_command_insert(self, command):
        print('Accept command "%s"' % self._accept_command_name)
        command.status = 'accepted'
        command.save()

    def handle_notification(self, notification):
        print('Notification "%s" received' % notification.notification)


url = 'ws://playground.devicehive.com/api/websocket'
refresh_token = 'SOME_REFRESH_TOKEN'
dh = DeviceHive(ReceiverHandler)
dh.connect(url, refresh_token=refresh_token)

On the next step we will create sender.py

from devicehive import Handler
from devicehive import DeviceHive


class SenderHandler(Handler):

    def __init__(self, api, device_id='simple-example-device',
                 accept_command_name='accept_notifications',
                 num_notifications=10):
        Handler.__init__(self, api)
        self._device_id = device_id
        self._accept_command_name = accept_command_name
        self._num_notifications = num_notifications
        self._device = None

    def _send_notifications(self):
        for num_notification in range(self._num_notifications):
            notification = '%s-notification' % num_notification
            self._device.send_notification(notification)
            print('Sending notification "%s"' % notification)
        self.api.disconnect()

    def handle_connect(self):
        self._device = self.api.get_device(self._device_id)
        self._device.send_command(self._accept_command_name)
        print('Sending command "%s"' % self._accept_command_name)
        self._device.subscribe_update_commands([self._accept_command_name])

    def handle_command_update(self, command):
        if command.status == 'accepted':
            print('Command "%s" accepted' % self._accept_command_name)
            self._send_notifications()


url = 'http://playground.devicehive.com/api/rest'
refresh_token = 'SOME_REFRESH_TOKEN'
dh = DeviceHive(SenderHandler)
dh.connect(url, refresh_token=refresh_token)

Run python receiver.py in the first terminal. And python sender.py in the second. The order of run is important. receiver.py must be started first.

Docker tests

Build image

docker build -f Dockerfile.tests -t devicehive-tests .

Run tests

You can run tests with refresh_token by setting ADMIN_REFRESH_TOKEN and/or CLIENT_REFRESH_TOKEN variable:

docker run -it -e ADMIN_REFRESH_TOKEN='SOME_ADMIN_REFRESH_TOKEN' devicehive-tests

Or with access_token by setting ADMIN_ACCESS_TOKEN and/or CLIENT_ACCESS_TOKEN variable:

docker run -it -e ADMIN_ACCESS_TOKEN='SOME_ADMIN_ACCESS_TOKEN' devicehive-tests

Or with user login and password by setting ADMIN_LOGIN and ADMIN_PASSWORD for admin account and/or CLIENT_LOGIN and CLIENT_PASSWORD for client account.

docker run -it -e ADMIN_LOGIN='SOME_ADMIN_LOGIN' -e ADMIN_PASSWORD='SOME_ADMIN_PASSWORD' devicehive-tests

To run tests with enabled requests logging you need to change LOG_LEVEL variable:

docker run -it -e ADMIN_REFRESH_TOKEN='SOME_ADMIN_REFRESH_TOKEN' -e LOG_LEVEL='DEBUG' devicehive-tests

To run the specific test you need to set TEST variable:

docker run -it -e TEST=test_api.py::test_get_info -e ADMIN_REFRESH_TOKEN='SOME_ADMIN_REFRESH_TOKEN' devicehive-tests
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].