W76M(WiFi+蓝牙mini门禁控制器)API
W76M(WiFi+蓝牙 mini 门禁控制器)API
概述
W76M 是单门 WiFi+蓝牙门禁控制器,设备序列号以 W76M 开头。本文档说明设备注册、远程开门、门磁与继电器配置、WiFi 配置、在线查询、OTA 和蓝牙应急开门协议。
- API 基础地址:
https://wdev.wmj.com.cn - 云端命令地址:
POST https://wdev.wmj.com.cn/deviceApi/send - 当前回调维护版本:
76.0.8,适用 W76M 硬件1.0.0、软件76.0.x版本线。 76.0.5支持set_ext_button及开门按钮事件;旧版本使用前应通过getdevinfo确认返回ext_button_enabled字段。
除单独标明的地址外,下列云端命令均使用 POST https://wdev.wmj.com.cn/deviceApi/send,请求头为 Content-Type: application/json。
云端接口的 code=0 表示平台请求成功;设备命令还应检查 data.info.code。涉及配置变更时,建议再次调用 getdevinfo 回读最终状态。
点击下面的序号展开
1.注册设备
简要描述
将 W76M 设备绑定到开发者账号。注册成功后才能调用设备控制接口。
请求URL
https://wdev.wmj.com.cn/deviceApi/register
请求方式
POST
请求参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}"
}
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
app_id |
是 | string | 开发者 app_id |
app_secret |
是 | string | 开发者 app_secret |
device_sn |
是 | string | W76M 设备序列号 |
返回示例
{
"code": 0,
"msg": "注册成功"
}
2.远程开门
简要描述
按设备当前配置的继电器脉冲时长触发开门。脉冲时长通过 set_relay 设置。
请求URL
https://wdev.wmj.com.cn/deviceApi/send
请求参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {
"cmd_type": "open",
"info": {
"sn": "{{device_sn}}"
}
}
}
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
data.cmd_type |
是 | string | 固定为 open |
data.info.sn |
否 | string | 传入时必须与目标设备序列号一致 |
返回示例
{
"code": 0,
"data": {
"device_sn": "{{device_sn}}",
"type": 1,
"cmd_type": "open",
"info": {
"doorstate": 0,
"err_code": 0,
"code": 0,
"msg": ""
}
}
}
备注
doorstate是门磁输入状态,不等同于继电器动作反馈。- 若设备处于常开模式,开门命令只进行提示,不重复改变常开状态。
3.获取设备信息
请求URL
https://wdev.wmj.com.cn/deviceApi/send
请求参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {
"cmd_type": "getdevinfo",
"info": {}
}
}
主要返回字段
| 字段 | 类型 | 说明 |
|---|---|---|
sw_ver |
string | 软件版本 |
hw_ver |
string | 硬件版本 |
project |
string | 固定为 W76M |
net_type |
string | 固定为 wifi |
sta_ssid |
string | 当前 WiFi 名称 |
rssi |
number | WiFi 信号强度,单位 dBm |
doorstate |
number | 门磁状态:0 或 1 |
switch_state |
number | 当前继电器输出状态 |
nonc |
number | 0=常闭模式,1=常开模式 |
relay1 |
number | 开门继电器脉冲时长,单位毫秒 |
device_sound |
number | 蜂鸣器:0=关闭,1=启用 |
ext_button_enabled |
number | 开门按钮:0=停用,1=启用;仅支持该字段的固件返回 |
ble_advertising |
boolean | 蓝牙是否正在广播 |
mqtt_connected |
boolean | MQTT 是否已连接 |
free_heap |
number | 当前空闲堆内存 |
min_free_heap |
number | 本次启动后的最小空闲堆内存 |
uptime_ms |
number | 本次启动后的运行时间,单位毫秒 |
code |
number | 设备业务码,0 表示成功 |
msg |
string | 设备业务说明 |
备注
设备信息可能包含配置字段,业务系统不应将完整原始响应写入公开日志。
4.获取门状态
请求参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {
"cmd_type": "getdoorstate",
"info": {}
}
}
返回示例
{
"code": 0,
"data": {
"device_sn": "{{device_sn}}",
"cmd_type": "getdoorstate",
"info": {
"doorstate": 0,
"err_code": 0,
"code": 0,
"msg": ""
}
}
}
5.设置常开/常闭模式
请求参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {
"cmd_type": "set_nonc",
"info": {
"type": 0
}
}
}
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
data.info.type |
是 | number | 0=常闭模式,1=常开模式 |
返回说明
成功时 data.info.nonc 返回最终模式。配置会持久保存。
6.设置继电器脉冲时长
请求参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {
"cmd_type": "set_relay",
"info": {
"relay1": 1000
}
}
}
| 参数名 | 必选 | 类型 | 取值范围 | 说明 |
|---|---|---|---|---|
data.info.relay1 |
是 | number | 100~60000 |
开门继电器脉冲时长,单位毫秒 |
成功时 data.info.relay1 返回保存后的时长。
7.设置蜂鸣器
请求参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {
"cmd_type": "set_device_sound",
"info": {
"device_sound": 1
}
}
}
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
data.info.device_sound |
是 | number | 0=关闭提示音,1=启用提示音 |
8.远程配置WiFi
请求参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {
"cmd_type": "set_wifi",
"info": {
"ssid": "ExampleWiFi",
"passwd": "example-password"
}
}
}
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
data.info.ssid |
是 | string | 2.4GHz WiFi 名称,最长32字节 |
data.info.passwd |
是 | string | WiFi 密码;开放网络可传空字符串,最长63字符 |
备注
- 兼容字段
password,新接入建议统一使用passwd。 - 此接口只保存 WiFi 配置,不立即切换当前连接。保存成功后,在允许设备短暂离线的维护窗口调用
restart使新配置生效,再查询在线状态并回读sta_ssid;不要以保存应答代替联网结果。
9.修改设备密码
请求参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {
"cmd_type": "set_pwd",
"info": {
"device_pwd": "new-device-password",
"admin_pwd": "new-admin-password"
}
}
}
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
data.info.device_pwd |
否 | string | 本地应急开门密码,最长31字符 |
data.info.admin_pwd |
否 | string | 配网页面管理密码,最长31字符 |
至少传入一个需要修改的密码。密码属于敏感信息,禁止记录在公开日志中。
10.设置开门按钮
版本要求
当前 76.0.5 支持此协议。旧版本应先检查 getdevinfo 是否返回 ext_button_enabled;不返回时请先升级,不能假定接口可用。
请求参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {
"cmd_type": "set_ext_button",
"info": {
"enable": 1
}
}
}
| 参数名 | 必选 | 类型 | 说明 |
|---|---|---|---|
data.info.enable |
是 | number | 只接受数字 0 或 1 |
行为说明
1:启用短按开门和ext_button事件。0:停用短按开门和事件;不影响长按5秒进入配网及长按15秒恢复出厂。- 配置持久保存。成功后应调用
getdevinfo校验ext_button_enabled。
11.开门按钮主动事件
启用按钮后,每次确认短按上报一次 type=2 事件:
{
"device_sn": "{{device_sn}}",
"type": 2,
"cmd_type": "ext_button",
"info": {
"event": "press",
"state": 1,
"uptime_ms": 123456,
"event_uid": "{{device_sn}}-2-123456-1"
}
}
业务系统应使用 event_uid 做幂等去重。设备离线时本地按钮开门不受影响,但事件不会补发。
12.重启设备
请求参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {
"cmd_type": "restart",
"info": {}
}
}
设备先返回应答,约1.2秒后重启。应通过在线状态和 getdevinfo.uptime_ms 确认重启结果。
13.OTA固件升级
适用W76M硬件1.0.0,目标版本76.0.8。POST https://wdev.wmj.com.cn/deviceApi/send,Content-Type: application/json。
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}",
"type": 1,
"data": {
"cmd_type": "set_ota",
"info": {
"hw_ver": "1.0.0",
"sw_ver": "76.0.8",
"url": "http://fm.wmj.com.cn/ota/W76M/W76M_v76.0.8_ota.bin"
}
}
}
目标版本必须高于当前版本。ACK仅表示升级受理;重启上线后通过getdevinfo回读版本并验证业务。
14.查询在线状态
请求URL
https://wdev.wmj.com.cn/deviceApi/getOnLine
请求参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}"
}
返回示例
{
"code": 0,
"data": {
"online": 1
},
"msg": "查询成功"
}
部分旧版服务可能返回兼容字段 on_line,取值同样为 0 或 1。
15.蓝牙应急开门
获取临时密码
POST https://wdev.wmj.com.cn/deviceApi/TPassword
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}"
}
成功后读取 data.pwd,并通过BLE写入设备:
- 开锁服务:
FEE0 - 写特性:
FEE1 - 通知特性:
FEE2
向 FEE1 写入:
{
"cmd_type": "ble_pwd_open_lock",
"info": {
"data": "12345678"
}
}
设备通过 FEE2 通知执行结果:
{
"state": 1,
"info": {
"code": 0,
"msg": "Unlock success"
}
}
临时密码采用滚动码校验,开门成功后状态会推进;业务端不得缓存后重复使用。
16.本地配网与应急能力
- 设备持续提供以序列号命名的 SoftAP,并支持2.4GHz WiFi配网。
- 手机连接设备热点后可访问
http://192.168.4.1/;主流系统会尝试自动弹出配网页面。 - BLE配网服务 UUID 为
0D38;蓝牙应急开门服务为FEE0。 - 断网时仍可通过本地配网页面输入设备应急开门密码,不依赖云端连接。
17.常见错误
| 场景 | 处理建议 |
|---|---|
| 平台返回设备不在线 | 先调用 getOnLine;不要通过反复发送控制命令探活 |
| 配置命令平台返回成功但设备字段未改变 | 检查 data.info.code,再使用 getdevinfo 回读 |
| OTA收到应答但版本未改变 | 核对硬件版本、目标版本、URL和应用固件类型,并等待设备重连回读 |
| 蓝牙能发现但无法开门 | 重新获取临时密码,确认写入 FEE1 并监听 FEE2 通知 |
17.1 配置回调地址与开门通知
统一开门回调协议
适用 W767 67.1.22、W76M 76.0.8,硬件1.0.0。使用前通过 getdevinfo 确认型号和版本;旧版本不能只按版本数值推断支持全部回调。
配置及回读
POST https://wdev.wmj.com.cn/deviceApi/send,Content-Type: application/json。
{"app_id":"{{wmjv2appid}}","app_secret":"{{wmjv2appsecret}}","device_sn":"{{device_sn}}","type":1,"data":{"cmd_type":"set_callback","info":{"url":"https://example.com/callback","enabled":1}}}
url 为 HTTP(S) 地址,最多255字节;enabled 必须为数值0或1。兼容 callback_url/callback_enabled 别名;同时提交两套字段时值必须一致。省略字段保留原值。空参数、错误类型、冲突值、启用但URL为空均返回设备 data.info.code 非零。平台 code=0 不等于设备配置或投递成功。
{"app_id":"{{wmjv2appid}}","app_secret":"{{wmjv2appsecret}}","device_sn":"{{device_sn}}","type":1,"data":{"cmd_type":"get_callback","info":{}}}
回读设备 data.info 示例:
{"code":0,"err_code":0,"msg":"","callback_ready":true,"callback_url":"https://example.com/callback","callback_enabled":1,"pending_callbacks":0,"callback_capacity":4,"callback_success":1,"callback_failed":0,"callback_dropped":0,"callback_storage_errors":0,"callback_last_http":200,"callback_last_error":0}
ready 表示回调功能初始化状态;pending/capacity 为待发数和容量。success/failed/dropped/storage_errors 为本次启动计数,不是终身计数。last_http 为最近HTTP状态;last_error 为传输错误码,0表示无传输错误,仍须检查HTTP状态。
POST 通知格式
设备向配置的URL发送 HTTP POST,Content-Type: application/json,不包裹 data/info:
{"device_sn":"{{device_sn}}","event":"door_opened","open_type":"api","event_uid":"example-device-8ce5dafcc085d6d8","callback_id":627159385,"msg_id":206,"timestamp":23,"rssi":-40,"cmd_id":"order-001","user_id":"user-001"}
| 字段 | 类型 | 说明 |
|---|---|---|
| device_sn | string | 设备序列号 |
| event | string | door_opened,表示控制器执行开门动作,不代表物理门已打开;门磁需另查 |
| open_type | string | api / ble / button / web / schedule / delay |
| event_uid | string | 幂等键,重试及重启补发保持不变 |
| callback_id | number | 数字事件编号,优先以event_uid去重 |
| msg_id | number | API open消息ID;其他入口为0 |
| timestamp | number | 事件产生时设备本次启动的秒数,不是Unix时间戳 |
| rssi | number | 当时WiFi信号dBm;获取失败可能为0 |
| cmd_id | string,可选 | API open.info透传,最多96字节 |
| user_id | string,可选 | API open.info透传,最多96字节,不代表设备自动识别用户 |
api 为API触发开门;ble 为蓝牙鉴权后开门;button 为控制器可感知的开门按钮;web 为本地应急网页;schedule 为定时计划;delay 为延时到期。蓝牙/按钮等不带 cmd_id/user_id,其他自定义字段不透传。关闭或释放继电器不产生door_opened。
W76M 开门按钮支持button;W767板载按键用于配网/复位,不因此变成开门按钮。外接按钮若绕过控制器直接接门禁电源,固件无法感知其操作。
投递、离线及错误处理
- 接收端返回 HTTP200/201/204 表示成功,正文不限;其他状态和网络失败重试。不跟随重定向。
- 重试间隔10/20/40/80/160/300秒,之后上限300秒;必须按event_uid幂等,不能假设只到达一次或严格按发生顺序到达。
- 最多4条持久化待发记录;断网期间启用状态下的开门记录入队,联网后补发。满队列不会覆盖旧记录,新记录可能丢弃,应监测callback_dropped/storage_errors;不保证无限离线事件留存。
- API open应答中的callback_queued/callback_error独立于开门结果。队列失败不撤销开门动作;禁用时不入队。仅ACK成功不能证明业务服务器收到通知。
- 禁用暂停旧队列;重新启用后按事件原URL补发,已在途请求可能完成。恢复出厂清除回调配置与队列。升级前产生的旧事件保留原内容,可能仍含旧值mqtt。
- 建议使用HTTPS并校验业务关联。本载荷没有应用级签名,不应仅凭此通知授予新的开门权限。
验证范围:两款均已验证API开门、延时回调及失败重启补发;W76M另有按钮实测。蓝牙、网页、定时计划的回调入口已接入,但本轮尚未完成对应现场触发验证;HTTPS、满队列与长时间离线需按业务环境验证。
18.解绑设备
请求URL
https://wdev.wmj.com.cn/deviceApi/logout
请求参数
{
"app_id": "{{wmjv2appid}}",
"app_secret": "{{wmjv2appsecret}}",
"device_sn": "{{device_sn}}"
}
返回示例
{
"code": 0,
"msg": "解绑成功"
}
更新日志
| 日期 | 内容 |
|---|---|
| 2026-09-14 | 更新 76.0.8 回调维护版本及OTA示例,统一六种开门来源、配置别名、完整通知字段和重试去重规则,明确验证范围。 |
| 2026-09-09 | 发布 76.0.5 量产维护版本,明确适用硬件及版本线,完善统一请求方式、按钮接口版本要求与 OTA 使用说明,明确远程 WiFi 配置保存后需重启生效。 |
| 2026-09-08 | 更新 76.0.5 固件下载及升级示例,改善长时间无法连接云端时的自动恢复,减少重复网络错误日志,补充升级忙状态处理。 |
| 2026-08-30 | 首次发布 W76M 开发者接口文档,补充云端控制、WiFi配置、在线查询、OTA、BLE应急开门、本地配网及开门按钮版本边界。 |
最后编辑:极客师傅 更新时间:2026-09-14 11:42