Python中如何实现非官方的BigIot SDK

https://github.com/ma6254/bigiot_sdk

初学 Python,写了个东西练练手,觉得不错的给个 Star 吧!


Python中如何实现非官方的BigIot SDK
1 回复

要自己实现一个非官方的BigIot SDK,核心是封装HTTP API调用和处理JSON数据。下面是一个基础实现:

import requests
import json
import time
from typing import Dict, Any, Optional

class BigIotClient:
    def __init__(self, api_key: str, base_url: str = "https://api.bigiot.net"):
        self.api_key = api_key
        self.base_url = base_url
        self.session = requests.Session()
        self.session.headers.update({
            "Authorization": f"Bearer {api_key}",
            "Content-Type": "application/json"
        })
    
    def _make_request(self, method: str, endpoint: str, data: Optional[Dict] = None) -> Dict:
        url = f"{self.base_url}/{endpoint}"
        try:
            if method.upper() == "GET":
                response = self.session.get(url, params=data)
            else:
                response = self.session.post(url, json=data)
            
            response.raise_for_status()
            return response.json()
        except requests.exceptions.RequestException as e:
            raise Exception(f"API请求失败: {e}")
    
    def get_device_data(self, device_id: str, start_time: Optional[int] = None, 
                       end_time: Optional[int] = None) -> Dict:
        """获取设备数据"""
        params = {"device_id": device_id}
        if start_time:
            params["start_time"] = start_time
        if end_time:
            params["end_time"] = end_time
        
        return self._make_request("GET", "api/v1/data", params)
    
    def send_command(self, device_id: str, command: str, 
                    params: Optional[Dict] = None) -> Dict:
        """发送控制命令"""
        data = {
            "device_id": device_id,
            "command": command
        }
        if params:
            data["params"] = params
        
        return self._make_request("POST", "api/v1/command", data)
    
    def register_device(self, device_info: Dict) -> Dict:
        """注册设备"""
        required_fields = ["name", "type", "location"]
        for field in required_fields:
            if field not in device_info:
                raise ValueError(f"缺少必要字段: {field}")
        
        return self._make_request("POST", "api/v1/device/register", device_info)

# 使用示例
if __name__ == "__main__":
    # 初始化客户端
    client = BigIotClient(api_key="your_api_key_here")
    
    # 获取设备数据
    data = client.get_device_data(
        device_id="device_123",
        start_time=int(time.time()) - 3600,  # 过去1小时
        end_time=int(time.time())
    )
    print(f"设备数据: {data}")
    
    # 发送控制命令
    result = client.send_command(
        device_id="device_123",
        command="switch",
        params={"state": "on"}
    )
    print(f"命令执行结果: {result}")

这个实现包含了基本的认证、数据获取和命令发送功能。关键点:1)使用requests处理HTTP请求;2)统一的错误处理;3)类型提示提高代码可读性;4)灵活的API端点配置。

实际使用时需要根据BigIot的具体API文档调整端点路径和参数。建议封装成pip包方便复用。

总结:核心是HTTP客户端封装加JSON数据处理。

回到顶部