物联网相关连接总结 - 摄像头、传感器

 

工作应用总结

1、确认信息:

(1)摄像头/设备型号(2)是否有开放平台、是post or get连接(3)接口文档(4)headers、body/params参数和编码格式。

2、连接通信:

若有示例,参考示例编辑代码,由返回值结果确认连接成功与否

 

具体示例

1、开放平台 - 和目摄像头平台开发记录

  • 学习消息头header和正文body规范
  • 调用python的requests包与服务器端建立连接
  • response = requests.post(url, data=json.dumps(body), headers=headers)
  • 获取并验证响应报文response.text

 

具体流程详细说明:

1、首先在专业平台申请账号 https://pro.andmu.cn/,因为本次开发需要专业版,普通版申请未通过;

2、在和目开放平台申请账号 https://open.andmu.cn/,其中专业版账号密码和region与第一步相同,见图1;

      申请专业应用的结果和账号部分信息,见图2。获取平台开发的相关信息之后,即可以参考接口文档做二次开发了。

3、参照和目开放平台开发文档

      依次获取token、设备列表、摄像机视频播放WebSDK链接等

附:

基于Token的身份验证的过程如下:

1.用户通过用户名和密码发送请求。

2.程序验证。

3.程序返回一个签名的token 给客户端。

4.客户端储存token,并且每次用于每次发送请求。

5.服务端验证token并返回数据。

 

问题及解决方式:

(1)直接拿网页上的参数调接口,网页可以调通,但本地出现{"resultCode":"000008","resultMsg":"数据校验失败"}

方法:打印日志对比如下。

正确:"request":"{"sig":"68a182330016b9d6957f09e8c8d07eec","operatorType":1}"}"
错误:"request":"sig=68a182330016b9d6957f09e8c8d07eec&operatorType=1"}"

更新:data=json.dumps(body).replace(" ", "")

(2)报错:{"resultCode":"000004","resultMsg":"签名验证失败“}

更新:在headers里添加token

headers = {
    'content-type': 'application/json;utf-8',
    "appid": appid,
    "md5": md5,
    "timestamp": "1569218400437",
    "version": "1.0.0",
    "token": token,
    "signature": signature2
}

图1:图2:完成开发账号申请:

物联网相关连接总结 - 摄像头、传感器_第1张图片物联网相关连接总结 - 摄像头、传感器_第2张图片

物联网相关连接总结 - 摄像头、传感器_第3张图片

备注:研究rsa加密原理。

本次python实现rsa签名的示意代码如下:

# RSA密钥
rsakey = RSA.importKey(base64.b64decode(rsaSecret))
signer = Signature_pkcs1_v1_5.new(rsakey)
digest = SHA.new()
digest.update(json.dumps(header).replace(" ", "").encode("utf-8"))
sign = signer.sign(digest)
signature = base64.b64encode(sign)

示意代码:

# coding:utf-8
import requests, json
import hashlib
from Crypto.Hash import SHA
from Crypto.Signature import PKCS1_v1_5 as Signature_pkcs1_v1_5
from Crypto.PublicKey import RSA
import base64

#(1)获取token

url1 = "https://open.andmu.cn/v3/open/api/token"
appid = '5ee2606645f345fc800ec'
secret = 'UWHAPpsG1e0'
rsaSecret = 'MIICdgIBADAN'
test = appid + secret

m = hashlib.md5()
m.update(test.encode(encoding='utf-8'))
sig = m.hexdigest()

body = {
    "sig": sig,
    "operatorType": 1,
}

m = hashlib.md5()
m.update(json.dumps(body).replace(" ", "").encode("utf-8"))
md5 = m.hexdigest()

header = {
    "appid": appid,
    "md5": md5,
    "timestamp": "1569218400437",
    "version": "1.0.0"
}

# RSA密钥
rsakey = RSA.importKey(base64.b64decode(rsaSecret))
signer = Signature_pkcs1_v1_5.new(rsakey)
digest = SHA.new()
digest.update(json.dumps(header).replace(" ", "").encode("utf-8"))
sign = signer.sign(digest)
signature = base64.b64encode(sign)

headers = {
    'content-type': 'application/json;utf-8',
    "appid": appid,
    "md5": md5,
    "timestamp": "1569218400437",
    "version": "1.0.0",
    "signature": signature
}

response = requests.post(url1, data=json.dumps(body).replace(" ", ""), headers=headers)

print(response)
print(response.text)

 

2、单机连接 - 物联网AI摄像头开发记录

  • 用于办公区人脸检测、人流统计的摄像头连接

 

HTTP服务器 - python中http.server

参考文档:http.server

HTTPServer,是socketserver.TCPServer的子类,利用此python工具包监听相机端投递的人脸图、客流数据以及设备状态信息。

相机投递数据官方文档

官方文档:接口和数据文档

关键点包括:与相机单机连接方式为POST方式,投递数据内容为json格式。

其他介绍

AI摄像机的开发包括单机模式和平台模式,需要获取摄像机的信息包括人脸抓拍图和视频流,目前物联网公司给出的AI摄像头仅支持从平台模式拉取视频流,且需通过rtmp服务器接收。

动产质押demo时间有限,没有rtmp服务器,所以暂定使用单机模式获取抓拍人脸图。

具体流程

(1)摄像机联网配置单机模式 - 参照说明书中指导手册 or 官方网页文档

(2)获取两个工具:AI搜索工具(验证摄像机联网成功)、第三方传图demo工具(验证摄像机传图功能)

(3)利用python的HTTPServer工具包,建立服务器端口并抓取相机数据(与相机单机连接方式为POST方式,投递数据内容为json格式。

示例:

from http.server import HTTPServer, BaseHTTPRequestHandler
import json

class Resquest(BaseHTTPRequestHandler):
    def handler(self):
        print("data:", self.rfile.readline().decode())
        self.wfile.write(self.rfile.readline())

    def do_POST(self):
        print(self.headers)
        print(self.command)
        req_datas = self.rfile.read(int(self.headers['content-length']))  # 重点在此步!
        print(req_datas.decode())
        data = {

        }
        self.send_response(200)
        self.send_header('Content-type', 'application/json')
        self.end_headers()
        self.wfile.write(json.dumps(data).encode('utf-8'))

if __name__ == '__main__':
    host = ('', 9002)
    server = HTTPServer(host, Resquest)
    print("Starting server, listen at: %s:%s" % host)
    server.serve_forever()

 

3、平台连接 - 物联网传感器设备“追货宝”,连接onenet平台和平台接口调用

  • 用于仓库货物状态、移动监控、位置温度等状态监控的物联网设备连接

 

设备连接onenet平台

(1)申请onenet开放平台账号(2)进入平台开发者中心,添加产品和设备(此处在NB-IoT物联网套件下添加)(3)添加设备,并验证设备连接成功

物联网相关连接总结 - 摄像头、传感器_第4张图片

 

平台接口api调用

总接口文档:https://open.iot.10086.cn/doc/book/application-develop/api/api-usage.html

调用批量查询接口(抓取信息):https://open.iot.10086.cn/doc/book/application-develop/api/LwM2M/20批量查询设备最新数据.html

物联网相关连接总结 - 摄像头、传感器_第5张图片

 

更新设备灵敏度接口文档:https://open.iot.10086.cn/doc/book/application-develop/api/LwM2M/10缓存命令-写设备资源.html

依照协议确定设备更新参数之后,调用onenet平台接口更新设备灵敏度。更新之后,摇动唤醒设备接收信号。

物联网相关连接总结 - 摄像头、传感器_第6张图片

物联网相关连接总结 - 摄像头、传感器_第7张图片

物联网相关连接总结 - 摄像头、传感器_第8张图片

 

你可能感兴趣的:(物联网相关连接总结 - 摄像头、传感器)