# 介绍
通过该SDK可以方便的调用物联网平台的API，包括
- 基于MQTT协议与物联网平台互操作，包括Attriutes, Telemetry, RPC三种类型
- 基于CoAP协议与物联网平台互操作，包括Attriutes, Telemetry, RPC三种类型
- 在Server APP端，基于HTTP协议调用REST API对设备发送命令

在python2.7上测试通过

# 安装SDK
pip install aihub-things

# 使用例子
首先 from things_aihub import attribute, telemetry, rpc_mqtt, rpc_coap, rest

## 上传指定设备属性
### 基于MQTT协议
```
s = attribute.Mqtt(host='192.168.1.71', token='token1')
s.upload({"geoZone": "Zone D"})
```

### 基于CoAP协议
```
c = attribute.CoAP(host="192.168.1.71", token="token1")
c.post({"coapKey1":11, "coapKey2":12})
```

## 获取指定设备Client Side属性, Shared属性
### 基于MQTT协议
```
c = attribute.CoAP(host="192.168.1.71", token="token1")
# msg.topic 为主题名， msg.message为返回json
msg = s.request({"clientKeys": "key15,key16", "sharedKeys": "shared1,shared2"}) 
```

### 基于CoAP协议
```
c = attribute.CoAP(host="192.168.1.71", token="token1")
c.get(attrs=['coapKey1', "coapKey2"], shared=["key1", "key2"])
```

## 上传指定设备遥测信息
### 基于MQTT协议
```
s = telemetry.Mqtt(host='192.168.1.71',token='token1')
s.upload({"test1" : "aa", "test2" : "bb"})
```

### 基于CoAP协议
```
c = telemetry.CoAP(host="192.168.1.71", token="token1")
c.post({"coapKey1":11, "coapKey2":12})
```

## 向物联网平台发送RPC命令, 并获得返回值
### 通过MQTT协议
```
s = rpc_mqtt.Session(host='192.168.1.71', token='token1')
# msg.topic 为主题， msg.message为返回json
msg = s.request(payload={"method": "getTime", "params": {}}) 
```

### 基于CoAP协议
```
c = rpc_coap.Session(host="192.168.1.71", token="token1")
response = c.post({"method": "getTime", "params": {}})
```

## 设备端监听RPC命令
比如可接收REST API向设备发出的命令、 物联网平台通过Widget对设备的命令等
### 基于MQTT

```
rpc = rpc_mqtt.Session(host='192.168.1.71', token='token1')
```

- 不传入回调函数的情况:

```
rpc.listen_request()
```

- 传入回调函数的情况

```
def on_message(msg):
    rpc.response(msg, payload={"responsetest":"aaa"})

def on_connect(rc):
    print('connect now ', str(rc))

rpc.user_on_message_action = on_message
rpc.user_on_connect_action = on_connect    
rpc.listen_request()
```

### 基于CoAP
```
c = attribute.CoAP(host="192.168.1.71", token="token1")
```

- 不传入回调函数的情况:

```
c.observe()
```

- 传入回调函数的情况

```
def callback(response):
    dir(response)

c.observe(callbak)
```

## Server APP 调用 REST API 向设备发送命令并接受返回
```
HOST = "192.168.1.71:8080"
DEVICE = "device1"
TOKEN = "jwt_token"
data = {
   "method": "setExmaple",
   "params": {
    "key9": "1",
    "key10": "5"
    }
}

r = rest.Session(device_id=DEVICE, host=HOST, jwt_token=TOKEN)
result = r.request(data, 2) #1 代表oneway不等待返回信息 2代表twoway等待返回信息
```