ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

从CAN到云端:边缘计算网关接入AWS IoT全流程指南

从CAN到云端:边缘计算网关接入AWS IoT全流程指南 1. 为什么要把CAN总线数据送到云端工厂里那台孤岛设备先说一个我实际遇到的场景。某次去一家做汽车零部件的工厂做产线调研车间里几十台老化测试设备每台设备主控板都带着一路CAN总线实时采集电机电流、温度、振动信号。设备本身运行没问题但工程师每天要拿笔记本电脑挨个去接CAN分析仪手动记录数据、导出Excel、再回办公室做分析。线体主管想看的设备稼动率、故障预警、历史趋势统统拿不出来。这个场景放在今天很典型CAN总线在工业现场、车载系统、储能设备里随处可见它可靠、实时性好、抗干扰能力强是设备内部通信的主力选手。但CAN有一个天然短板——它是一个局域网络数据只能在几十米、最多几百米的范围内传输而且必须通过专用的CAN收发器才能读取。一旦数据需要离开车间、跨地域汇总、进云端做长期存储和大数据分析CAN就无能为力了。所以边缘计算网关这个角色就出现了。EC312这类网关设备本质上是一个翻译官搬运工一头接着工业现场密密麻麻的CAN线另一头通过Wi-Fi、4G或以太网把数据送到AWS IoT Core这样的云平台。今天我完整梳理一遍从CAN到AWS IoT的接入链路把硬件选型、协议转换、证书配置、数据上云、故障排查整个流程讲透给准备做设备数据采集和工业物联网改造的朋友一个可以直接参考的模板。2. CAN总线和EC312网关先从底层把链路看清楚2.1 CAN协议要点回顾不要上来就调代码先搞懂物理链路做CAN数据上云很多人第一步就踩坑代码写完却发现一包数据都收不到或者数据时对时错。问题往往不在代码而在对CAN底层机制的理解。这里把几个核心概念过一遍也是后面排查问题的理论基础。差分信号与双绞线。CAN总线物理层用的是差分电压传输CAN_H和CAN_L两根线之间的电压差决定逻辑电平。优势是抗共模干扰能力很强这也是它在工业环境里存活几十年的根本原因。接线时要注意CAN_H接CAN_H、CAN_L接CAN_L屏蔽层单端接地。这个看似基础实际接线端子排上搞反的情况我见过太多次。终端电阻。CAN总线两端必须各接一个120欧姆终端电阻用来匹配阻抗、消除信号反射。网上很多教程会告诉你近距离测试可以不用接但我建议哪怕只有两块板子对接也把终端电阻接上。有时候数据不稳定、偶发错误帧排查到最后发现就是忘了终端电阻。CAN 2.0A与CAN 2.0B。2.0A是标准帧11位标识符2.0B是扩展帧29位标识符。EC312网关通常两种都支持。如果对端设备用的是扩展帧你按标准帧解析连报文头都对不上。波特率与位定时。这是最容易出问题的环节。CAN总线上所有节点必须使用相同的波特率常见的工业设备有125Kbps、250Kbps、500Kbps、1Mbps等。波特率对不上总线上会疯狂报错误帧。图省事的话先用CAN分析仪监听总线读出对端实际波特率再配置网关比对着设备手册猜要快得多。2.2 EC312网关的硬件与接口拿到设备先认清家底EC312是一款主打工业级边缘计算的网关设备我手头这台的具体配置如下项目参数CPUARM Cortex-A7 双核 1.2GHz内存512MB DDR3存储8GB eMMCCAN接口2路标准CAN 2.0A/B支持CAN FD网络接口1路10/100M以太网支持Wi-Fi可选4G模块串口RS232/RS485各1路备用供电DC 9~36V宽压输入工作温度-40℃~85℃接口上的核心是两路CAN。以我用的EC312为例CAN0和CAN1是独立的波特率可以分别设置。这意味着同一台网关能同时采集两条不同波特率的总线数据对于设备上有两条CAN网段的场景非常实用。拿到设备后第一步不是写程序而是先确认系统的CAN接口是否被正确识别。EC312内部跑的是Linux系统CAN接口在系统中以SocketCAN的形式呈现。在终端执行如下命令查看ip link show如果驱动加载正常能看到can0和can1两个接口。如果看不到先检查内核模块是否加载lsmod | grep can常见需要加载的模块有can_dev、can_raw、m_can等等具体取决于EC312使用的CAN控制器芯片。2.3 为什么要加一块网关而不是拿开发板硬怼有人会问CAN数据上云我直接用个USB-CAN适配器插电脑上或者拿树莓派加一个CAN扩展板不是也能干吗确实能但有几个问题第一可靠性。工业设备的采集要求是7x24小时不间断运行。商用开发板在温湿度变化大的车间、在电压有波动的产线上稳定性很难保证。EC312这类设备从电源设计、接口保护到外壳散热都是按工业标准做的长时间运行不掉链子。第二接口能力。商用开发板扩展CAN通常用SPI转CAN芯片延迟高、稳定性差而且多数只有一路CAN。EC312是两路原生CAN控制器吞吐量和实时性都不是一个量级。第三部署形态。网关可以DIN导轨安装放在设备控制柜里接线端子直连不用额外做外壳和保护电路。拿开发板做原型验证没问题进产线长期跑还是老老实实用工业网关。3. 上云前的准备工作AWS IoT Core侧的所有细节3.1 创建物联网设备和证书环节看起来多实际是有规律可循的AWS IoT Core接入的标准流程是创建事物Thing、生成证书、附加策略、把证书和设备关联。EC312网关这边要把证书和密钥下载下来放到指定目录建好与云端的MQTT连接。创建证书的具体步骤AWS管理控制台上有可视化向导跟着走不会错。但有几个细节会影响后续调试效率证书格式。AWS IoT Core颁发的是X.509证书。控制台下载时会提供三样东西设备证书xxx.crt、私钥xxx-private.pem.key、Amazon Root CA证书AmazonRootCA1.pem。前两个要在设备上使用第三个用于校验服务端身份。三个文件一个都不能少别下载完就丢到一边。证书策略。这一步很多人会遗漏。单纯创建证书还不够必须在AWS IoT Core的策略Policy里给证书授权设备才能连接和收发消息。一个最低限度的策略如下{ Version: 2012-10-17, Statement: [ { Effect: Allow, Action: [ iot:Connect, iot:Publish, iot:Subscribe, iot:Receive ], Resource: [ arn:aws:iot:us-east-1:123456789012:* ] } ] }创建好策略后到安全-策略里把策略附加到对应的证书上。证书没绑策略会报连接被拒绝或者权限不足的错误。端点和端口。在AWS IoT Core控制台的设置页面能看到一个自定义端点形如xxxxxxxxxxxxxx-ats.iot.region.amazonaws.com。设备连接时填的是这个端点不是物联网平台主页。端口方面如果网络环境允许用8883MQTT over TLS这是最稳妥的方式。443端口也可以并且在网络受限的环境下更容易穿透防火墙。3.2 MQTT主题结构设计别拍脑袋随便定这关系到后续数据管理AWS IoT Core的数据传输基于MQTT协议发布/订阅模型下主题Topic就是数据流转的通道。我建议在上项目之初就把主题结构定好因为后面设备多了、数据种类多了改主题结构会非常痛苦。我的常用做法是按项目维度/设备维度/数据类型三级命名project/ec312-gateway/device-01/can-data project/ec312-gateway/device-01/status project/ec312-gateway/device-01/config这样设计有几个好处AWS IoT Core的规则引擎支持通配符订阅project//device-01/#方便批量处理数据按类型分主题存储和查询路径清晰权限控制也可以按主题前缀做细粒度管理。另外不要把每帧CAN数据单独发一个主题那会造成主题数量爆炸。正确做法是网关端做聚合攒够一批数据再发布这个后面细说。3.3 AWS IoT规则引擎的基本配置思路设备数据上云之后通常不能只停留在能看到的层面还要写进数据库、触发告警、转发给其他服务。AWS IoT Core里的规则引擎就是干这个的。规则引擎的最简用法是写一条规则把某个主题的消息转发到另一个服务比如Lambda、S3、Kinesis或者Timestream。以转发到S3为例SQL语句大致是SELECT * FROM project/ec312-gateway/device-01/can-data然后设定一个动作将消息写入S3存储桶。这里注意几个点第一规则引擎的SELECT语句是类SQL语法支持JSON路径比如SELECT temperature, speed FROM xxx后续查询时字段名就是temperature和speed。第二转发到S3时有一个分隔符配置可选换行每行一条消息或逗号。建议选换行配合Athena查询或者直接拉起做数据分析都方便。第三规则引擎的调用和权限也是分开的。在创建规则时要给一个IAM角色这个角色必须有权限写入目标服务比如S3的PutObject。创建角色时AWS控制台会生成一个默认的信任策略直接用就行。4. 从零配置EC312网关一步步打通CAN到AWS IoT的链路4.1 配置CAN接口设置波特率、开启接口拿到EC312先通过串口或者SSH登录系统。我习惯用串口做首次配置因为默认情况下Wi-Fi和网络参数还不知道串口是最后的后备通道。登录后先把CAN接口配置起来。假设CAN0接的设备是500Kbps波特率# 配置CAN0波特率为500K ip link set can0 type can bitrate 500000 # 开启CAN0接口 ip link set can0 up想设置其他波特率把bitrate参数换成对应的值比如125000、250000、1000000。CAN FD对应的配置略有区别要设置数据段波特率ip link set can0 type can bitrate 1000000 dbitrate 5000000 fd on配置好之后验证接口状态ip -details link show can0输出中能看到can state ERROR-ACTIVE或者can state ACTIVE这样的状态信息。正常能通讯的状态是ERROR-ACTIVE如果显示BUS-OFF说明总线上有严重错误多半是波特率不匹配或者接线有问题。需要提醒的是每次开机后这些配置会丢失。EC312的rootfs里有一个开机自启脚本机制可以把这两条命令写进去做成开机自动配置。具体路径因固件版本而异查看/etc/init.d/或者systemd服务配置即可。4.2 测试CAN数据接收先收数据再谈上云CAN接口up之后先用命令行工具确认能正常收到数据。SocketCAN自带的candump命令是最快的验证手段candump can0如果总线上有数据流终端里会不断刷新类似下面的输出can0 123 [8] 11 22 33 44 55 66 77 88 can0 456 [8] 0A 0B 0C 0D 0E 0F 10 11每一行代表一帧CAN报文接口名、报文ID、数据长度、数据字节。看到数据能正常刷出来物理链路基本没问题。刷不出来或者报错先按前面说的排查波特率、终端电阻和接线。顺便讲一个很实用的工具cansend用来向总线上发送测试帧cansend can0 123#DEADBEEF这个工具在做设备测试、模拟数据推流时非常有用。比如你调试云上数据处理逻辑时不想一直操作真实设备就可以用isolated总线配合cansend模拟数据。4.3 编写数据采集服务把CAN原始帧转成JSON网关侧要写一个后台服务用SocketCAN的原始套接字读取CAN报文解析后打包成JSON通过MQTT发布。这里用Python实现一个最简版本一方面是Python开发效率高另一方面EC312的算力足以支撑每秒几百帧CAN报文的解析。#!/usr/bin/env python3 import socket import struct import json import time import ssl import paho.mqtt.client as mqtt # ---------- CAN 配置 ---------- CAN_INTERFACE can0 # ---------- AWS IoT 配置 ---------- ENDPOINT xxxxxxxxxxxxxx-ats.iot.us-east-1.amazonaws.com THING_NAME ec312-gateway-01 TOPIC_PUBLISH project/ec312-gateway/device-01/can-data # 证书路径按实际存放位置修改 PATH_CA /home/root/certs/AmazonRootCA1.pem PATH_CERT /home/root/certs/device.crt PATH_KEY /home/root/certs/device-private.pem.key # ---------- 创建CAN原始套接字 ---------- def create_can_socket(interface): s socket.socket(socket.PF_CAN, socket.SOCK_RAW, socket.CAN_RAW) iface interface s.bind((iface,)) return s # ---------- 解析CAN帧 ---------- def parse_can_frame(frame): # CAN_RAW 收到的帧是16字节: 4字节IDflags, 8字节数据, 1字节长度, 1字节padding, 2字节padding can_id, flags, data_len, padding1, padding2 struct.unpack(IBBBB, frame[:8]) data list(frame[8:8 data_len]) return can_id 0x1FFFFFFF, data # ---------- MQTT发布 ---------- def publish_can_data(mqtt_client, can_id, data): payload { device: THING_NAME, timestamp: int(time.time() * 1000), can_id: hex(can_id), data: data, data_len: len(data) } mqtt_client.publish(TOPIC_PUBLISH, json.dumps(payload), qos0) # ---------- MQTT连接 ---------- def create_mqtt_client(): client mqtt.Client(client_idTHING_NAME) client.tls_set(PATH_CA, certfilePATH_CERT, keyfilePATH_KEY, tls_versionssl.PROTOCOL_TLSv1_2) client.connect(ENDPOINT, port8883, keepalive60) return client def main(): # 初始化CAN套接字 try: can_socket create_can_socket(CAN_INTERFACE) except OSError as e: print(f无法打开CAN接口: {e}) return # 连接AWS IoT Core try: mqtt_client create_mqtt_client() mqtt_client.loop_start() print(AWS IoT Core连接成功) except Exception as e: print(fAWS IoT Core连接失败: {e}) return print(开始监听CAN总线数据...) while True: try: frame can_socket.recv(16) can_id, data parse_can_frame(frame) publish_can_data(mqtt_client, can_id, data) except KeyboardInterrupt: print(停止采集) break except Exception as e: print(f处理异常: {e}) time.sleep(1) if __name__ __main__: main()有几个地方需要解释为什么用SocketCAN而不是其他库SocketCAN是Linux内核自带的CAN协议栈无需额外硬件驱动库性能稳定支持多进程同时访问同一个CAN接口。这也是EC312这类Linux网关设备的通用做法。can_id 0x1FFFFFFF的目的是什么原始套接字收到的高字节里可能带有错误帧标记、扩展帧标记等位和ID混在一起。做这个掩码运算可以只保留纯ID部分否则解析出的ID会偏大。发送什么数据格式我上面的例子把每帧CAN报文逐条发布实时性没问题。但如果在高波特率、大数据量的场景比如1Mbps跑满每秒会产生几千条消息对云端存储和流量都会产生压力。工业场景更推荐的做法是批量聚合网关端缓存50条或100条CAN帧一次性组成JSON数组发出去云端再做拆分。这个可以根据实际需求调整。4.4 部署与开机自启这个环节最容易忽略开发调试完成后要把程序部署成系统服务保证网关断电重启后程序能自动跑起来。EC312的Linux系统使用systemd管理服务写一个service文件[Unit] DescriptionCAN to AWS IoT Data Publisher Afternetwork-online.target [Service] ExecStart/usr/bin/python3 /home/root/app/can_to_iot.py WorkingDirectory/home/root/app Restartalways RestartSec5 [Install] WantedBymulti-user.target把文件放到/etc/systemd/system/can2iot.service然后执行systemctl daemon-reload systemctl enable can2iot systemctl start can2iotRestartalways这行很重要程序异常退出后会自动拉起避免现场设备跑几天就停了没人发现。提示生产环境一定要加日志输出。可以给Python脚本加上logging模块把运行日志写到文件里配合logrotate做轮转。不然遇到问题连现场发生了什么都不知道。5. 跑通之后踩过的坑CAN时钟误差、证书、端口这些看着小却致命的细节5.1 CAN时钟误差和波特率校准为什么明明配了500K还是疯狂报错这是我在一个汽车电子项目里踩过的大坑。网关和ECU都标称500Kbps但连上后can0状态变成了BUS-OFF完全没办法通信。排查思路是这样的先用示波器抓CAN_H和CAN_L之间的差分波形从波形图上量出每一位的时长。实测一位的时间大约2.2微秒换算成波特率约454Kbps和标称500K差了不少。问题出在ECU端的CAN控制器晶振精度不高加上温度漂移实际波特率偏移了将近10%。在CAN总线上波特率偏移超过一定范围通常采样点附近就会导致位定时错误进而产生错误帧、总线关闭。解决方法是调整CAN控制器的采样点。SocketCAN支持通过resample参数调整采样点位置ip link set can0 type can bitrate 500000 sample-point 0.80把采样点从默认值往中间挪容错空间会大一些。如果波特率偏差实在太大就需要换成外置高精度晶振的CAN收发器方案。这个问题的教训是标称波特率不等于实际波特率特别是车载ECU这种用内部RC振荡器的场景偏差很常见。配置网关时如果发现数据不稳定不要只怀疑代码先拿CAN分析仪或示波器量一下实际位宽。5.2 证书连接失败从报错反向排查配置问题证书配置错误导致的连接失败几乎是每个做AWS IoT接入的人都会遇到的。常见的报错和原因如下报错信息可能原因解决方法SSL: CERTIFICATE_VERIFY_FAILED设备证书和私钥不匹配重新下载证书确认使用的是同一对密钥Connection refused端点地址错误检查控制台设置里的自定义端点确认region一致Connection timed out网络不通或端口被封检查本地网络能否访问8883端口必要时换443端口Not authorized to connect证书策略中没有iot:Connect权限检查附加在证书上的策略Client ID conflict多台设备用了相同的client_id每台网关用唯一的Thing Name作为MQTT Client ID我有一次排查了很久最后发现是服务器时间不对导致TLS证书校验失败。AWS IoT Core的TLS握手会校验证书有效期设备系统时间如果偏离当前时间太多证书会被判定为未生效或已过期。EC312网关如果长时间断网、没有NTP同步系统时间很可能漂移。解决方法是配置好NTP服务或者在程序启动前手动同步时间ntpdate -u ntp.aliyun.com5.3 数据到了云端但规则引擎不落库数据发布成功AWS IoT Core控制台的测试-订阅里也能看到消息但规则引擎转发到S3或数据库却没有数据。我遇到过好几次这种情况排查要点有第一确认规则引擎的SQL语句匹配了正确的主题。规则引擎的主题过滤是精确的写project/ec312-gateway/device-01/can-data就不能匹配project/ec312-gateway/device-01/can-data-new。第二确认规则引擎的IAM角色有目标服务的写入权限。AWS控制台不会明确提示权限不足只是规则静默失败。第三确认目标服务的地域和规则引擎一致。AWS IoT Core的规则引擎只能把数据转发到同一个区域Region内的目标服务跨区域配置不会生效。排查手段在规则引擎操作一栏启用CloudWatch日志每条消息的处理结果和报错信息都会写到日志组比黑盒调试高效得多。5.4 使用MQTT测试工具验证云端连通性在网关侧程序还没写好的时候可以先用手头的MQTT调试工具验证一下整个链路。常见做法是用mosquitto_pub命令行工具在带证书的情况下发布一条测试消息mosquitto_pub \ --cafile AmazonRootCA1.pem \ --cert device.crt \ --key device-private.pem.key \ -h xxxxxxxxxxxxxx-ats.iot.us-east-1.amazonaws.com \ -p 8883 \ -t project/ec312-gateway/device-01/can-data \ -m {test:hello} \ --tls-version tlsv1.2如果能发布成功在AWS控制台的MQTT测试客户端里订阅对应主题就能看到消息。这相当于把云端链路单独验证了一遍后续网关程序不工作就能快速定位是CAN数据采集的问题还是MQTT发布的问提。5.5 MQTT连接断线重连现场最怕的静默离线MQTT长连接应用中网络抖动、网关重启、云端服务端负载均衡都可能导致连接断开。如果程序没有做断线重连设备会一直处于离线状态但设备侧看起来程序进程还在跑。这就造成一个假在线的假象。paho-mqtt库支持通过回调函数处理连接断开事件def on_connect(client, userdata, flags, rc): if rc 0: print(连接成功) else: print(f连接失败错误码: {rc}) def on_disconnect(client, userdata, rc): print(连接断开尝试重连...) # 延时重连避免频繁重试 time.sleep(5) try: client.reconnect() except Exception as e: print(f重连失败: {e}) mqtt_client.on_connect on_connect mqtt_client.on_disconnect on_disconnect重连之外还有一个容易被忽略的机制——MQTT的will message遗嘱消息。在建立连接时可以设置遗嘱主题和内容设备异常离线时比如断网、断电、进程崩溃AWS IoT Core会代替设备向遗嘱主题发送一条消息。云端可以订阅$aws/events/presence/connected/disconnected这样的系统主题来做设备在线状态监控配合告警就能及时发现设备掉线。6. 数据到达AWS IoT之后别只满足了能看到这些后续方向更值钱6.1 镜像设备状态用设备影子解决网关重启后云端状态丢失的问题实际做过物联网项目的人都知道设备不止是上报数据还要处理云端下发指令和设备状态同步的需求。AWS IoT Core的设备影子Device Shadow机制非常适合做这件事。设备影子本质上是云端保存的一个JSON文档设备可以把自身的运行状态比如当前采集频率、固件版本、连接状态同步到影子中。云端应用和设备都通过这个文档保持状态一致。EC312网关端可以通过发布消息更新影子比如$aws/things/ec312-gateway-01/shadow/update对应的payload是{ state: { reported: { can0: { status: active, bitrate: 500000, firmware_version: v1.2.3 } } } }这样做的好处是应用层不需要维护独立的设备状态数据库统一从设备影子查询即可设备重启后重新上报状态影子自动更新不用人为干预。6.2 数据压缩和流量成本控制工业网关上云之后流量成本是个真实存在的问题。以CAN数据为例如果1s产生200帧CAN报文每帧打包成一条MQTT消息一天的数据量大约在200条/秒 × 86400秒/天 × 300字节/条 ≈ 5.18GB/天这个体量的流量按运营商4G套餐算成本是很可观的。控制成本的办法有几个批量聚合。网关端攒够50条或者100条CAN帧合成一个JSON数组再加一次设备信息头整体消息数能减少一个数量级。压缩字段。CAN数据本身很有规律可以去掉冗余的JSON字段名比如接收端自己知道device是从哪个主题来的就不必重复携带。甚至可以按固定位偏移的二进制协议传输比如自定义一个字节流格式云端解析时按格式拆包压缩比更高。时间戳采样。不是所有数据都值得毫秒级精度。比如温度数据1分钟上报一次完全够用周界检测数据才需要秒级响应。在网关侧做过滤和采样能省很多流量。6.3 OTA远程升级实现设备在线进化设备分布在车间各个角落出了新版本固件总不能一台台拿U盘现场更新。AWS IoT Core提供了OTAOver-The-Air升级的完整链路。整体思路是把固件包上传到S3创建OTA job设备端运行agent监听job通知、下载固件、校验签名、更新程序。EC312网关跑的是Linux系统OTA更新就是替换Python脚本或者C程序的完整流程。值得提醒的是OTA升级一定要有失败回滚机制。新版程序运行后如果无法连接云端或者崩溃需要自动回滚到上一版本否则设备会变砖。最简单的方式是保留两个固件版本目录在部署新版本前写一个健康检查脚本异常则自动切换回旧目录。6.4 边缘计算在网关侧先做一轮数据处理话说回来边缘计算网关这个词里的计算不是白说的。EC312的算力其实比较充裕完全可以在本地先处理一轮数据再上云。常见做法阈值判断CAN报文里的温度值超过80度本地直接触发告警标志同时上报云端省去云端规则引擎的实时计算压力。数据清洗丢弃重复帧、修正异常帧、补全缺失数据。本地缓存网络中断时CAN数据先缓存在本地SQLite或者文件里网络恢复后补传。这样即使断网几小时云端数据也不会丢。这些策略的核心思想是把云端能做的事尽量往边缘下沉减少网络开销和云端计算成本。上了规模的物联网项目这个思路对整体架构的健壮性和成本控制影响非常大。7. 延展从EC312到更大规模的物联网架构如果你是做一个设备的原型验证前面的内容已经完全够用了。但如果你是在做整个工厂或整个车队的设备联网需要考虑的就不只是单台网关怎么上云而是整个系统的规模化和可维护性。网关管理平台。几十台EC312同时运行总不能在每台上面单独SSH改配置。可以考虑引入配置下发机制云端通过MQTT把配置文件推给网关网关收到后校验、替换、重启服务。AWS IoT的shadow机制天然适合做这类配置同步。数据治理。所有设备的数据都进了同一个数据库之后查询会越来越慢。建议按设备ID和时间维度做分区配合AWS的Timestream时序数据库或者数据库归档策略能有效应对数据膨胀的问题。安全加固。工业物联网最怕的是安全问题。设备证书一旦泄露别人可以冒充你的设备往云端发数据。建议购买HSM安全芯片或者使用网关自带的TLS安全模块存储私钥私钥永远不落文件系统能显著提升设备认证安全性。另外在云端配置证书吊销列表发现异常证书立即吊销也是必要的安全措施。做了这么多项目我最大的体会是工业设备上云这件事技术本身并不困难难的是把链路中的每个环节都打磨稳定。CAN物理层、网关程序、MQTT连接、云端规则、数据存储任何一环出问题都会导致数据链路中断。所以在部署的每个环节都要留好观测手段CAN有没有数据、MQTT连接状态如何、云端有没有收到消息、规则引擎有没有处理这些都要有日志和告警。链路打通只是第一步稳定运行才是真正体现工程能力的地方。
返回列表