物聯網相關連接總結 - 攝像頭、傳感器

 

工作應用總結

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:完成開發賬號申請:

備註:研究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)添加設備,並驗證設備連接成功

 

平臺接口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

 

更新設備靈敏度接口文檔:https://open.iot.10086.cn/doc/book/application-develop/api/LwM2M/10緩存命令-寫設備資源.html

依照協議確定設備更新參數之後,調用onenet平臺接口更新設備靈敏度。更新之後,搖動喚醒設備接收信號。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章