CATALOG

芯步的16路智能电源控制器开放了完整的HTTP API接口,二次开发的核心是调用 /device/control 接口,配合定时器服务实现精准的通断控制。以下是具体实现方案:

1. 解决概述

1.1 目标

通过调用芯步开放平台的 HTTP API,对 16 路智能远程电源控制器 进行二次开发,实现:

  1. 对任意单路或多路电源输出的定时开启定时关闭

  2. 支持周期性的任务(如每天、每周);

  3. 支持一次性定时任务。

1.2 技术路径

采用 定时调度服务 + HTTP API 调用 的架构:

  • 应用层:开发者搭建的后端服务(Python/Java/Node.js/Go等),负责定时任务的创建、存储与触发,并调用平台接口。

  • 接口层:芯步开放平台 API https://api.thingboot.com/{AppID}/device/control/

  • 设备层:16 路智能电源控制器(支持继电器独立通断)。

1.3 准备条件

  1. 设备准备:已购买的“16路智能远程电源控制器”,已通电并连网。

  2. 平台账号:注册 账号。

  3. 获取凭证:登录控制台,在 “开发设置” 中获取 AppIDAppSecret(开发者密码),并记录设备的 Device ID(设备详情页可查)

  4. 开发环境:任何支持 HTTP 请求的编程语言环境。

2. 核心技术:芯步 API 调用机制

2.1 接口基本信息

  • 请求方式POST

  • URLhttps://api.thingboot.com/{AppID}/device/control/?sign={sign}&ts={ts}

  • HeaderContent-Type: application/json

  • Body 参数

    • device:字符串,设备唯一ID。

    • order:JSON 字符串,控制指令。

2.2 签名算法 (Sign)

为了安全,正式环境需计算签名 sign

  1. AppSecret 做一次 MD5 加密:secret_md5 = MD5(AppSecret)

  2. 拼接时间戳:sign_str = secret_md5 + tsts 为 Unix 时间戳,单位秒)

  3. 将拼接后的字符串再做 MD5:sign = MD5(sign_str)

开发调试阶段可在控制台开启“调试模式”暂时绕过签名校验

2.3 针对16路控制器的指令集 (order 构造)

基于芯步产品规范,针对多路控制器(4路/8路/16路模型一致),order 参数支持以下操作

功能描述order 参数示例 (JSON)说明
单路开启{"power1":"1"}开启第1路
单路关闭{"power1":"0"}关闭第1路
全开/全关{"power":"1"}{"power":"0"}控制所有16路
批量指定{"batch":{"relay":[1,3,5],"power":"0"}}同时关闭第1、3、5路
临时开启(点动){"point1":"5000"}开启第1路,5秒后自动关闭
临时关闭(重启){"reset1":"10000"}关闭第1路,10秒后自动开启

注:对于16路设备,power1power16 分别对应16个通道。

3. 定时任务实现方案

由于开放平台侧主要提供“即时控制”接口,定时任务的逻辑需要在开发者服务器上实现。

3.1 设计

采用 “数据库存储 + 任务调度器” 的模式:

  1. 任务表设计:在数据库中建立定时任务表,包含:

    • id:主键

    • device_id:目标设备ID

    • relay_channel:目标通道 (1-16)

    • action:动作 (on/off)

    • cron:时间表达式 (如 0 30 8 * * ? 表示每天8:30)

    • status:启用/禁用

  2. 调度逻辑

    • 轮询扫描:每60秒扫描一次任务表,匹配当前时间需要执行的任务。

    • 或使用 Cron 组件 (如 Linux Cron, Python APScheduler, Java Quartz)。

3.2 代码实现示例 (Python + Flask)

以下示例展示如何封装签名函数,并结合 schedule 库实现定时任务。

3.3 高级场景:点动与脉冲控制(无需软件计时)

若在定时任务中需要实现“开启10分钟后自动关闭”的逻辑,可以直接利用设备硬件的 resetpoint 指令,避免服务端维护复杂的状态机

场景示例:定时开启水泵,30分钟后自动停止。此时对于定时器触发的动作,order 可以直接发送:

代码实现:order_data = {"point": {"relay": [channel], "interval": duration_ms}}

4. 常见问题与优化

4.1 时间同步问题

  • 现象:定时任务不准。

  • 解决:确保服务器时间与 NTP 时间服务器同步;ts 参数使用的是 Unix 时间戳(秒),需确保服务器时间准确,否则会导致签名失败。

4.2 任务持久化

  • 上述示例中的任务存储在内存中,服务重启会丢失。

  • 解决:引入 Redis 或 MySQL 存储定时任务配置。服务启动时加载任务,并可用后台管理系统进行 CRUD 操作。

4.3 并发与批量控制

  • 如需在极短时间内同时控制多个通道(例如场景模式:打开所有灯光),应使用 batch 指令一次性发送,而不是循环请求 16 次 API,这能避免网络延迟和接口限流

  • 批量指令示例{"batch":{"relay":[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16],"power":"1"}}

4.4 设备状态同步

  • 定时任务执行后,如果想知道设备是否真的动作成功,可以配置平台的 消息推送 功能(Webhook),让设备在状态变化时将结果推送到你的服务器

5. 总结

通过芯步的开放 API,开发者可以轻松实现对 16 路电源控制器的二次开发。核心步骤在于:

  1. 获取凭证:AppID 和 AppSecret。

  2. 掌握签名:MD5 嵌套加密。

  3. 构建指令:利用 powerXbatchpoint 等参数完成单路或多路的精准控制。

  4. 集成调度:结合后端框架的定时任务模块(如 Python APScheduler、Java Quartz、Linux Crontab 调用脚本)即可完成复杂的自动化定时启停需求。