0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

LuatOS:AirCloud 云协议——物联网设备数据上报实操详解

合宙LuatOS 来源:合宙LuatOS 作者:合宙LuatOS 2026-03-19 18:23 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

物联网设备开发中,便捷上云与稳定数传是核心需求,LuatOSAirCloud 物联网云服务通信协议可实现数据上报核心功能,支持七类数据的定期 / 触发式上报。本文将讲解该协议相关内容,同时提供模组开源示例、核心代码及配套开发硬件与教程,助力开发者快速实现设备接入与数据上报。

一、AirCloud数据上报功能

1.1、数据上报功能概述

数据上报是AirCloud的核心功能之一,允许设备将各种状态数据、传感器数据等信息定期或触发式地传输到云端平台,用于实现:

  • 设备状态实时监控
  • 传感器数据采集与分析
  • 设备运行历史记录
  • 基于数据的业务决策

1.2、支持的数据类型

AirCloud支持上报多种类型的数据,通过excloud扩展库的excloud.FIELD_MEANINGS常量定义,主要包括以下几大类:

  • 传感器数据如:温度、湿度、酸碱度、颗粒物浓度、环境温度、电量计量等。
  • 定位与运动数据如:GNSS经纬度、行驶速度、GNSS卫星信噪比、搜索到的卫星总数、航向角、方向角、定位方式标识等。
  • 设备状态数据如:电池电压、4G信号强度、SIM卡ICCID、设备休眠模式、定时唤醒间隔等。
  • 设备参数数据如:设备物理高度/宽度、转速、驻留小区、小区信息、元器件型号等。
  • 软件与系统数据如:固件版本、系统错误信息、短信转发、来电转发等。
  • 通用数据如:时间戳、无意义数据等。
  • 控制与响应数据如:控制命令/回应、鉴权请求/回复等。

二、开源实例

针对各模组型号提供开源示例demo,并持续更新配套教程,开发者可以掌握AirCloud数据上报功能的使用方法。

以Air780EHV系列为例,可选用配套核心板或开发板实操验证。
Air780EHV 是 Air780Exx 系列的 4G Cat.1 全网通模组,有 3.3V/1.8V 两种 IO 电平版本,内置 ES8311 音频芯片,支持 VoLTE 高清通话、TTS 语音合成等语音功能,外设接口丰富且支持 485、CAN以太网等工业常用配置,支持低功耗,功耗最低3uA,仅支持 LuatOS 二次开发,适用于智能语音交互、工业物联网等低功耗物联网场景。
c1-1.png

核心代码如下图示,完整demo详见源码仓库最新文件。

开发者可根据实际项目需求灵活配置连接参数,实现设备接入与数据上报。

本demo演示了excloud扩展库的完整使用流程,包括:

  1. 设备连接与认证
  2. 数据上报与接收
  3. 运维日志管理
  4. 文件上传功能
  5. 心跳保活机制
]]
-- 导入excloud库
local excloud = require("excloud")
-- 注册回调函数
function on_excloud_event(event, data)
log.info("用户回调函数", event, json.encode(data))

if event == "connect_result" then
if data.success then
log.info("连接成功")
sys.publish("aircloud_connected")
else
log.info("连接失败: " .. (data.error or "未知错误"))
end
elseif event == "auth_result" then
if data.success then
log.info("认证成功")
else
log.info("认证失败: " .. data.message)
end
elseif event == "message" then
log.info("收到消息, 流水号: " .. data.header.sequence_num)

-- 处理服务器下发的消息
for _, tlv in ipairs(data.tlvs) do
log.info("TLV字段", "含义:", tlv.field, "类型:", tlv.type, "值:", tlv.value)

if tlv.field == excloud.FIELD_MEANINGS.CONTROL_COMMAND then
log.info("收到控制命令: " .. tostring(tlv.value))

-- 处理控制命令并发送响应
local response_ok, err_msg = excloud.send({
{
field_meaning = excloud.FIELD_MEANINGS.CONTROL_RESPONSE,
data_type = excloud.DATA_TYPES.UNICODE,
value = "命令执行成功"
}
}, false)

if not response_ok then
log.info("发送控制响应失败: " .. err_msg)
end
end
end
elseif event == "disconnect" then
log.warn("与服务器断开连接")
elseif event == "reconnect_failed" then
log.info("重连失败,已尝试 " .. data.count .. " 次")
elseif event == "send_result" then
if data.success then
log.info("发送成功,流水号: " .. data.sequence_num)
else
log.info("发送失败: " .. data.error_msg)
end

elseif event == "mtn_log_upload_start" then
log.info("运维日志上传开始", "文件数量:", data.file_count)

elseif event == "mtn_log_upload_progress" then
log.info("运维日志上传进度",
"当前文件:", data.current_file,
"总数:", data.total_files,
"文件名:", data.file_name,
"状态:", data.status)

elseif event == "mtn_log_upload_complete" then
log.info("运维日志上传完成",
"成功:", data.success_count,
"失败:", data.failed_count,
"总计:", data.total_files)
end

end

-- 注册回调
excloud.on(on_excloud_event)
-- 主任务函数
function excloud_task_func()
-- 如果当前时间点设置的默认网卡还没有连接成功,一直在这里循环等待
while not socket.adapter(socket.dft()) do
log.warn("excloud_task_func", "wait IP_READY", socket.dft())
-- 在此处阻塞等待默认网卡连接成功的消息"IP_READY"
-- 或者等待1秒超时退出阻塞等待状态;
-- 注意:此处的1000毫秒超时不要修改的更长;
-- 因为当使用exnetif.set_priority_order配置多个网卡连接外网的优先级时,会隐式的修改默认使用的网卡
-- 当exnetif.set_priority_order的调用时序和此处的socket.adapter(socket.dft())判断时序有可能不匹配
-- 此处的1秒,能够保证,即使时序不匹配,也能1秒钟退出阻塞状态,再去判断socket.adapter(socket.dft())
sys.waitUntil("IP_READY", 1000)
end
-- -- 配置excloud参数
local ok, err_msg = excloud.setup({
use_getip = true, -- 使用getip服务
device_type = 1,   -- 4G设备
-- auth_key = "Qqn2TH50319ELOuO0rhPgF5fOxNVNhNW",
transport = "udp",       -- 使用TCP传输
auto_reconnect = true,   -- 自动重连
reconnect_interval = 10, -- 重连间隔(秒)
max_reconnect = 5,       -- 最大重连次数
mtn_log_enabled = true,  -- 启用运维日志
mtn_log_blocks = 1,      -- 日志文件块数
mtn_log_write_way = excloud.MTN_LOG_ADD_WRITE  -- 追加写入方式
})

--不使用getip服务,注意把use_getip设置为false
-- local ok, err_msg = excloud.setup({
--     use_getip = false,                             -- 不使用getip服务
--     device_type = 1,                               -- 设备类型: 4G
--     host = "112.125.89.8",                         -- 服务器地址
--     port = 32585,                                  -- 服务器端口
--     auth_key = "Qqn2TH50319ELOuO0rhPgF5fOxNVNhNW", -- 鉴权密钥
--     transport = "tcp",                             -- 使用TCP传输
--     auto_reconnect = true,                         -- 自动重连
--     reconnect_interval = 10,                       -- 重连间隔(秒)
--     max_reconnect = 5,                             -- 最大重连次数
--     mtn_log_enabled = true                         -- 启用运维日志
-- })

-- 配置excloud参数,虚拟设备链接
-- local ok, err_msg = excloud.setup({
--     use_getip = true, --使用getip服务
--     device_type = 9,
--     auth_key = "Qqn2TH50319ELOuO0rhPgF5fOxNVNhNW",
--     virtual_phone_number = "15893470522",  -- 11位手机
--     virtual_serial_num = 1,                -- 序列号(0-999)
--     transport = "tcp", -- 由于mqtt链接需要使用imei,虚拟设备没有,所以只能使用TCP传输
--     mtn_log_enabled = true
-- })

if not ok then
log.info("初始化失败: " .. err_msg)
return
end
log.info("excloud初始化成功")

-- 开启excloud服务
local ok, err_msg = excloud.open()
if not ok then
log.info("开启excloud服务失败: " .. err_msg)
return
end
log.info("excloud服务已开启")
-- 启动自动心跳,默认5分钟一次的心跳
excloud.start_heartbeat()
log.info("自动心跳已启动")

-- 启动3分钟一次的心跳,可配置自定义内容
-- excloud.start_heartbeat(180, {
--     { field_meaning = excloud.FIELD_MEANINGS.TIMESTAMP,
--     data_type = excloud.DATA_TYPES.INTEGER,
--     value = os.time() }
-- })

-- 停止自动心跳
--excloud.stop_heartbeat()
-- 记录启动日志
--excloud.mtn_log("system", "设备启动完成", "version", "1.0.0")
-- 获取并打印二维码信息
local qrinfo = excloud.get_qrinfo()
if qrinfo and qrinfo.url then
log.info("二维码URL:", qrinfo.url)
else
log.info("未获取到二维码信息")
end

-- 主循环:定期上报数据

while true do
-- 每30秒上报一次数据
sys.wait(30000)
-- 检查连接状态
local status = excloud.status()
if not status.is_connected then
log.warn("设备未连接,跳过数据上报")

else
-- 上报基础状态数据
local ok, err_msg = excloud.send({
{
field_meaning = excloud.FIELD_MEANINGS.SIGNAL_STRENGTH_4G,
data_type = excloud.DATA_TYPES.INTEGER,
value = 22  -- 信号强度
},
{
field_meaning = excloud.FIELD_MEANINGS.SIM_ICCID,
data_type = excloud.DATA_TYPES.ASCII,
value = "89860118801012345678"  -- SIM卡ICCID
},
{
field_meaning = excloud.FIELD_MEANINGS.TIMESTAMP,
data_type = excloud.DATA_TYPES.INTEGER,
value = os.time()
}
}, false)

if ok then
log.info("基础数据上报成功")
else
log.error("基础数据上报失败:", err_msg)
end
end
end
end

以上便是 AirCloud 数据上报的相关使用方法与核心要点,今天的分享就到这里啦!~

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 物联网
    +关注

    关注

    2950

    文章

    48101

    浏览量

    418102
  • LuatOS
    +关注

    关注

    0

    文章

    169

    浏览量

    2745
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    AirCloud 协议联网设备数据上报实现与指南

    联网设备开发过程中,便捷实现云端接入、保障数据稳定传输是两大核心诉求。LuatOSAirClou
    的头像 发表于 03-25 12:34 137次阅读
    <b class='flag-5'>AirCloud</b> <b class='flag-5'>协议</b>:<b class='flag-5'>物</b><b class='flag-5'>联网</b><b class='flag-5'>设备</b><b class='flag-5'>数据</b><b class='flag-5'>上报</b>实现与<b class='flag-5'>实</b><b class='flag-5'>操</b>指南

    LuatOS:485 总线硬件设计要点与 exmodbus 库开发实战

    在工业联网通信开发中,485 总线与 Modbus 协议的组合应用十分常见。本文以合宙 Air780EHV 系列模组为实例,围绕 LuatOS 开发环境,
    的头像 发表于 03-19 17:57 200次阅读
    <b class='flag-5'>LuatOS</b>:485 总线硬件设计要点与 exmodbus 库开发实战

    基于LuatOS的MQTT联网通信全解

    在构建物联网终端设备时,通信协议的选择直接决定系统的稳定性与扩展性。LuatOS通过内置MQTT客户端支持,使开发者能以极少代码实现设备
    的头像 发表于 01-29 19:42 302次阅读
    基于<b class='flag-5'>LuatOS</b>的MQTT<b class='flag-5'>物</b><b class='flag-5'>联网</b>通信全解

    京东关键词搜索接口获取商品数据指南

    京东关键词搜索接口获取商品数据 指南 本指南聚焦 京东开放平台合规接口 (item_search基础版 / item_search_pro增强版),提供 从账号准备→接口调用→数据
    的头像 发表于 01-07 13:56 408次阅读

    4G工业网关实现PLC数据采集与HTTP协议上报

    HTTP(超文本传输协议)是互联网最基础的应用层协议,在工业联网(IIoT)中也被广泛用于设备
    的头像 发表于 12-23 10:22 430次阅读
    4G工业网关实现PLC<b class='flag-5'>数据</b>采集与HTTP<b class='flag-5'>协议</b><b class='flag-5'>上报</b>

    快速掌握TCP/IP?LuatOS新手入门指南

    仅是互联网的通信基石,更像是一套精妙绝伦的“世界语”,让形态各异、遍布全球的设备能够跨越硬件和软件的差异,使用统一的规则进行对话。   相比传统开发方式,LuatOS通过高效易用的API:将复杂的
    的头像 发表于 10-15 17:27 787次阅读
    快速掌握TCP/IP?<b class='flag-5'>LuatOS</b>新手入门指南

    学习联网怎么入门?

    联网的基本概念和技术是学习联网的重要第一步。联网是指互联网上的物品相互连接,通过网络实现信息
    发表于 10-14 10:34

    学习联网可以做什么工作?

    健康、智能制造等领域。以下是一些常见的职业方向: 联网工程师:从事物联网系统的设计、开发、测试、维护和升级等工作,包括传感器、无线通信、计算、大
    发表于 10-11 16:40

    不同品牌PLC如何接入平台?御控多协议联网网关一站式集成方案

    御控工业联网网关提供强大协议转换能力,免编程实现PLC数据采集、MQTT协议转换与平台(阿里
    的头像 发表于 09-22 12:04 635次阅读
    不同品牌PLC如何接入<b class='flag-5'>云</b>平台?御控多<b class='flag-5'>协议</b><b class='flag-5'>物</b><b class='flag-5'>联网</b>网关一站式集成方案

    数据中台可以接入哪些联网平台

    数据中台作为企业数字化转型的核心枢纽,能够通过标准化接口、协议适配及数据治理能力,接入多种类型的联网
    的头像 发表于 08-19 15:22 912次阅读

    联网平台的作用有哪些?让万互联

    联网从概念走向规模化落地的过程中,离不开联网平台对设备
    的头像 发表于 08-07 18:00 1153次阅读

    低代码联网平台功能解析:从设备接入到智能应用

    设备数据与应用的核心枢纽,其功能覆盖了从设备接入到数据处理、应用开发的全流程。以下是其主要功能的详细说明: 一、设备接入与管理
    的头像 发表于 07-31 15:23 1145次阅读

    职业教育联网训平台:御控网关赋能产教融合新范式

    场景中多协议共存的复杂环境; l 实践与产业脱节:学生缺乏对边缘计算、协议转换等关键技术的经验,难以适应企业需求; l 教学评估低效:传统
    的头像 发表于 06-26 15:18 692次阅读

    联网的应用范围有哪些?

    情况;网络通信技术保障数据在不同设备、系统间稳定传输,像 4G、5G 甚至未来的 6G 网络;大数据计算技术则对海量的感知数据进行存储、
    发表于 06-16 16:01

    联网工程师为什么要学Linux?

    联网工程师需要掌握Linux的主要原因可以从技术生态、开发需求、行业应用及就业竞争力四个角度来分析: 一、技术生态与行业适配性 1)嵌入式开发的主流平台 联网
    发表于 05-26 10:32