CATALOG

芯步这款红外版传感器本身是“状态变化才上报”,要实现定时上报需要换个思路——用轮询接口主动拉取,或者用平台定时任务触发查询。下面两种方案供你参考。

开篇闲聊一下

嘿,你好!最近在折腾芯步的那款智能人体存在传感器(吸顶红外版) 吗?

我懂你的痛点,这种传感器默认是“智能”的——也就是有人/无人状态变化了才上报。但在很多实际落地项目中,服务器端可能因为网络抖动漏掉了一条消息,或者业务侧就是想每隔10分钟确认一下“设备还活着吗?现在到底有没有人?”

要实现“定时状态上报”,其实不需要去改烧录在传感器里的固件代码。芯步这点做得比较开放,我们可以利用它的开放接口,从“云端”或者“服务器端”来曲线救国。

下面我整理了两套比较实用的二次开发方案,偏口语化,我们一步步来看。

方案一:服务器端定时轮询(最推荐,通用性强)

这个思路很简单:既然设备不愿意主动张嘴,那你就让服务器主动去问它。

利用芯步提供的 HTTP 接口,在你的服务器上写一个定时任务,每隔一段时间(比如5分钟、10分钟)去调用一次“查询设备状态”的接口。

虽然产品手册里主要提了下发命令,但查询本质上也是下发一个特定的“系统命令”,让设备把当前状态吐出来。

1. 准备工作

首先你得拿到三样东西,在芯步控制台能看到:

  • AppID:你的应用ID。

  • AppSecret:你的应用密钥(要保密,计算签名用)。

  • Device ID:那个吸顶传感器的设备ID。

2. 核心逻辑:签名计算

调用芯步的接口稍微有点绕,需要加个签名,其实就是 md5(md5(AppSecret) + 当前时间戳)为了方便你理解,我用伪代码写一下,你自己用 Python、Java 或 PHP 实现逻辑是一样的:

3. 执行查询(下发读取命令)

传感器[红外版]支持系统命令,其中有一个命令是专门用来查信息的。我们构造一个 HTTP POST 请求,让设备上报网络信息,这也算是一种“状态确认”。

请求地址http(s)://api.thingboot.com/{你的AppID}/device/control/?sign={上面算的sign}&ts={时间戳}

POST Body (JSON格式)

返回的数据示例

注意:这个接口主要看能不能调通。如果设备在线且收到了“查询”指令,它会通过消息推送把详细状态发到你服务器上。这其实就是一次完整的“定时上报”。

4. 部署定时任务

在你的服务器环境(比如 Linux Crontab、Windows 计划任务,或者你代码里的 TimerScheduler)里,设置一个周期,比如 */5 * * * * (每5分钟),运行上面这段代码。

优点:不需要改设备逻辑,任何能发HTTP请求的语言都能写。缺点:设备如果掉线了,你就问不到了(不过这也正符合你需要知道设备状态的需求)。

方案二:利用物模型中的“配置项”间接实现(进阶玩法)

如果你觉得方案一频繁调用接口太费服务器资源,想纯靠设备自己报,可以研究一下那个红外传感器的配置项

在芯步的文档里,这款传感器有一个很关键的配置项叫 “红外无人触发持续时间” (infrared_change_0)

默认情况下,这个时间可能是30秒或1分钟。意思就是:当检测到无人后,等这么久才上报“无人”状态。

如果你想实现“定时上报”:

  1. 将触发持续时间设置成一个固定值:比如你通过接口下发配置,将 infrared_change_0 设置为 300 (5分钟)。

  2. 效果:只要没人,设备会每隔5分钟就报一次“无人”。这虽然是在触发条件变化时的上报,但只要环境一直是“无人”,它就变成了周期性的上报。

  3. 缺点:环境如果一直是“有人”,它就不会触发变化,也就不会主动报。除非你配合“红外有人触发持续时间”来设置。

这个方法有点取巧,适合只需要关注“无人”状态的场景。

方案三:平台层的“定时任务”功能(零代码)

芯步的开放平台其实自带了一个HTTP 接口用来创建定时任务

你可以调用 /task/create 接口,创建一个循环任务(stage 类型为 loop):

  • 周期:设置 interval 为 300(秒)。

  • 动作:下发我们方案一提到的查询命令 {“system”: “network”}

这样一来,芯步的云平台会帮你承担定时触发的工作,到了时间点,云平台自动给你的设备发命令。你的服务器只需要被动接收设备返回的状态即可,都不用写轮询代码了。这是最符合云原生架构的做法。

总结与

对于这个型号(吸顶红外版),最直接且稳定的二次开发方式就是 方案一

你可以把它理解成“主动问好”

  1. 服务器当闹钟,每隔几分钟喊一次。

  2. 带上签名,把 HTTP 请求发出去。

  3. 传感器听到后,乖乖把当前“有人/无人”的状态和在线状态吐出来。

这在传统的物联网开发里叫 “透传” 或者 “轮询” ,虽然看着有点笨,但在逻辑判断和设备保活检测上,绝对是最靠谱的。

如果你在写签名代码(MD5嵌套那一步)的时候遇到了 sign invalid 的报错,大概率是时间戳没有对齐,或者把 MD5 算成了大写,记得检查一下细节~