ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

DeepBasic Folar物联基座二次开发实战:从接口到数据库避坑指南

DeepBasic Folar物联基座二次开发实战:从接口到数据库避坑指南 1. 物联基座到底解决什么问题先从设备接入到业务复用说起很多软件公司第一次接触物联基座这个概念时第一反应通常是这不就是一个设备接入平台吗设备连上来、数据存起来、大屏展示一下完事。真到做项目的时候就发现事情远没有这么简单。设备接入只是最底层的一环往上还有数据标准化、设备管理、告警规则、指令下发、权限体系、多租户隔离、第三方系统对接每一层都可能让项目周期翻倍。拉孚 DeepBasic Folar 这种物联基座本质上是把设备连接和管理这一层做成了一套可复用的基础设施让软件公司不必从裸机开始撸 MQTT 服务、设备影子、时序数据存储而是直接在一个相对完整的底座上做业务。这也是它定位为基座而非应用的原因它不替你决定业务长什么样但它帮你把设备侧的脏活累活先干完。做二次开发之前我的建议是先想清楚一个问题你们公司在这个项目里到底想从 DeepBasic Folar 身上拿什么是要快速接一批设备做数据采集还是要在基座之上构建一套行业 SaaS亦或是想把它嵌入到已有的业务系统里只把它当成一个设备中间件这三种诉求对应的开发深度完全不同。第一种你大概率只需要用开放接口做设备接入和数据查询第二种你还需要了解它的数据模型、租户扩展机制甚至可能要动底层数据表第三种你得吃透它的接口鉴权、回调机制和指令下发链路保证业务系统的指令能准确触达设备。基于我自己和同行做过的一些类似项目的经验大多数二次开发项目死在两个地方一是对基座的能力边界没摸清做着做着发现平台不支持某个关键能力只能绕路重构二是对接口和数据库的理解浮于表面以为会调用几个 API 就算完成了结果上线后才发现数据对不上、指令丢了、权限穿透了。这篇文章我会从实战角度把 DeepBasic Folar 的二次开发路径完整梳理一遍重点讲清楚开放接口的调用逻辑、示例代码的实际落地方式、以及数据库层哪些表可以动、哪些表碰都不要碰。全程尽量避开那些看文档就能知道的事多讲一些文档里写不清楚、但实际开发中一定会遇到的细节。2. DeepBasic Folar 开放接口的核心逻辑与调用流程2.1 接口体系概览不是所有接口都需要自己写先看整体接口体系。DeepBasic Folar 开放接口大体上分这么几类认证与鉴权接口获取 access_token刷新 token管理应用凭据设备管理接口设备注册、编辑、删除、状态查询、设备列表分页检索数据接口实时测点数据获取、历史数据查询、数据推送订阅指令控制接口下发指令、指令状态回执查询告警接口告警规则配置、告警记录查询、告警确认与处理组织与权限接口租户/项目/部门结构管理、用户权限分配听起来很多但实际开发中高频使用的往往只有十几个。特别是做行业应用集成的软件公司核心链路就三条设备接入、数据获取、指令下发。告警往往走的是消息推送而不是轮询接口。这里有一个关键认知DeepBasic Folar 的设计思路是基座管连接应用管业务。所以它更希望你通过接口去操作设备资产和数据而不是期望你直接在平台上写业务逻辑。换句话说你的二次开发工作绝大多数都发生在 DeepBasic Folar 之外——你的业务服务去调它的接口或者被它的回调通知而不是把代码塞进基座里面跑。2.2 鉴权机制与 Token 维护的实战细节绝大多数基于物联基座的对接第一步卡在鉴权上。DeepBasic Folar 走的是主流的 AppKey AppSecret 换取 access_token 的模式token 有有效期过期后需要重新获取或通过 refresh_token 刷新。看似简单的机制实际落地有几个容易踩坑的细节第一token 必须做全局缓存不能每个请求都去重新换取。我曾经见过有团队在循环下发指令的场景里每发一条指令就调一次认证接口结果把基座的鉴权服务打到限流。正确做法是在应用启动时获取 token存到内存缓存或 Redis 中设置一个略小于 token 有效期比如官方有效期 2 小时你就 110 分钟过期的定时刷新任务。第二当接口返回 401 时要有自动重试机制。分布式环境下 token 刷新可能存在短暂的不一致某个节点持有的 token 已经被吊销另一节点还在用。所以对接客户端里要统一封装一个token 失效自动重新获取并重放请求的逻辑这是生产级对接的基础要求。第三AppSecret 不要写死在代码里尤其是交付给客户的私有化部署项目。建议放到环境变量或专门的配置中心密钥轮换时要保证多个服务实例平滑切换。2.3 设备接入与数据上报的典型调用链一个标准的设备接入流程大概是这样的在 DeepBasic Folar 中创建产品Product定义产品的测点模型物模型在产品下批量注册设备拿到设备唯一标识 device_id设备侧通过 MQTT 接入基座上报数据基座按产品物模型对数据进行解析、存储业务系统通过历史数据查询接口拿到数据或者通过订阅/回调方式实时接收这里我特别想强调产品-设备-测点这个三层模型。你把产品物模型定义好设备接入后数据才能被正确解析和存储。很多做二次开发的团队不重视物模型设计觉得随便建个产品、设备能连上就行数据全都用一个 JSON 字段存。短期看是省事了但后续做数据分析和跨系统共享时这种非结构化数据会让人非常痛苦。我见过一个项目接入了几千个不同类型的环境监测设备温度、湿度、PM2.5、噪声、电压电流每一个都是单独的自定义字段结果写历史查询的时候根本没法统一处理只能把所有原始报文捞出来自己做二次解析。这一层如果一开始就用 DeepBasic Folar 标准测点模型走历史数据查询接口直接就能按测点维度给你把数据聚合好根本不费这个劲。2.4 指令下发的链路状态回执才是关键指令下发流程是业务服务调用指令下发接口基座通过 MQTT 将指令转发给设备设备执行后返回执行结果基座再把结果上报给业务系统。很多初次接触的人容易忽略一个点指令下发接口往往只是代表基座已经接收指令并不代表设备已经执行成功。完整的链路状态是已接收 - 已转发 - 设备已应答 - 设备执行结果回执。开发的时候一定要把状态机考虑进去界面上如果只展示已下发而不展示设备实际执行结果那在工业场景里是要出大事的——比如你下发了一个关闭阀门的指令设备实际没有执行但界面显示已下发现场人员以为关了后果不堪设想。所以二次开发时指令的状态轮询或者回调绑定这两个坑必须提前设计好。建议优先使用 Webhook 回调方式让基座把指令回执主动推给你的业务系统这样可以做到秒级状态同步而不是靠定时任务去轮询指令状态接口白白增加基座负载。3. 从零跑通一个真实场景示例代码的完整解读3.1 场景定义接入一批温湿度传感器并实现告警推送光说接口逻辑太空了我拿一个实际做过的场景来讲某园区项目需要接入 200 个温湿度传感器数据实时上传到 DeepBasic Folar 基座然后软件公司要做的事情是在这批设备基础上做一个能耗与环境监测的 Web 应用要求能实时看到每个区域的温湿度并且当某个区域温度超过设定阈值时应用内要收到告警通知同时推送企业微信消息。这种需求在 DeepBasic Folar 的二次开发中非常典型设备接入和基础数据存储基座负责但业务展示、告警联动、消息推送都要软件公司自己写。下面我把这个场景的完整代码逻辑拆开讲。3.2 第一步封装统一的接口调用客户端无论用 Java、C#、Python 还是 Node.js 做后端第一步都应该封装一个统一的客户端模块把 token 管理、请求重试、统一返回结构解析都封装好。我习惯用 C# 来写示例因为做园区类项目的软件公司用 .NET 技术栈的比例不低但逻辑本身是语言无关的public class FolarClient { private readonly string _appKey; private readonly string _appSecret; private readonly string _baseUrl; private string _accessToken; private DateTime _tokenExpireTime; private static readonly HttpClient _httpClient new HttpClient(); public FolarClient(string baseUrl, string appKey, string appSecret) { _baseUrl baseUrl.TrimEnd(/); _appKey appKey; _appSecret appSecret; } public async Taskstring GetTokenAsync() { if (!string.IsNullOrEmpty(_accessToken) DateTime.Now _tokenExpireTime) { return _accessToken; } var request new { appKey _appKey, appSecret _appSecret }; var response await PostAsyncobject, TokenResponse(/api/auth/access_token, request, needAuth: false); _accessToken response.Data.AccessToken; // 提前 10 分钟过期避免边缘情况下的 token 失效 _tokenExpireTime DateTime.Now.AddSeconds(response.Data.ExpiresIn - 600); return _accessToken; } public async TaskT PostAsyncTReq, TResp(string path, TReq request, bool needAuth true) { // 省略完整实现核心逻辑附加 token - 序列化 - 发送 - 超时重试 } }这里有个小技巧token 过期时间我习惯减掉 600 秒提前 10 分钟而不是卡着官方过期时间刷新。因为在网络抖动、服务时钟偏差等因素影响下卡在临界点刷新很容易出现某个请求刚好撞上 401。3.3 第二步通过产品与设备接口建立基础数据接入设备之前我通常先通过接口把产品建好然后批量创建设备。之所以用接口而不是去控制台手工创建是因为软件公司做交付时往往需要从旧系统或 Excel 表格里把设备资产批量迁移过来手工创建几百个设备的效率太低而且容易出错。// 创建产品 var createProductRequest new { productName 园区环境监测, productType environment, // 测点定义 thingModel new { properties new[] { new { identifier temperature, name 温度, dataType double, unit ℃ }, new { identifier humidity, name 湿度, dataType double, unit %RH } } } }; var productResponse await client.PostAsyncobject, ProductResponse(/api/products, createProductRequest); // 批量注册设备 var deviceBatchRequest new { productId productResponse.Data.ProductId, devices sensorList.Select(s new { deviceName s.Name, deviceSn s.SerialNumber }).ToList() }; var deviceResponse await client.PostAsyncobject, BatchDeviceResponse(/api/devices/batch, deviceBatchRequest);注意一个细节设备注册成功后基座会为每个设备分配 device_id 和接入凭证如 MQTT 用户名密码。这些凭证需要持久化保存到你们业务系统的数据库里因为设备侧接入、后续状态查询、指令下发都会用到。我在实际项目里遇到过一个客户设备注册了 500 台当时没保存接入凭证结果 100 台设备要重新烧录固件时全部得重新注册浪费了大量时间。3.4 第三步历史数据查询与实时推送订阅数据接进来了业务侧要展示实时数据和历史曲线。实时数据一般有两种做法前端轮询查询接口或者走 WebSocket/SSE 推送。在园区类项目里前端实时性要求不算极端轮询 5-10 秒也能接受但如果你想做更实时的体验建议走基座的消息订阅。DeepBasic Folar 的实时数据订阅我理解是通过 WebSocket 长连接或者 MQTT 订阅主题来实现的具体机制可能因部署版本不同存在差异。我这边更推荐的做法是业务后端订阅数据流然后通过你自己系统的 WebSocket/SignalR 转发给前端。这样做的原因是你的业务系统可能有权限控制、数据加工逻辑直接把基座的数据流暴露给前端权限和格式都不好控制。历史数据查询相对简单关键是理解查询参数var historyRequest new { deviceIds new[] { device_001, device_002 }, identifiers new[] { temperature, humidity }, startTime DateTime.Now.AddHours(-24).ToString(yyyy-MM-dd HH:mm:ss), endTime DateTime.Now.ToString(yyyy-MM-dd HH:mm:ss), // 聚合方式原始值、平均值、最大值、最小值 aggregate avg, interval 5m, // 5分钟聚合一个点 pageSize 1000 }; var historyResponse await client.PostAsyncobject, HistoryDataResponse(/api/telemetry/history, historyRequest);这里有个易踩的坑时间参数格式。基座接口对时间格式一般有严格要求比如必须是yyyy-MM-dd HH:mm:ss、且时区必须统一。如果你们业务系统数据库存的是 UTC 时间直接传参就会导致查出来的数据差 8 个小时。这个坑我踩过建议在客户端封装层统一处理时区所有时间参数一律先转成基座期望的时区格式再发送。3.5 第四步告警联动与第三方推送告警是业务价值的核心。DeepBasic Folar 通常支持在平台上配置告警规则比如温度超过 40℃ 触发告警告警发生后基座会产生一条告警记录。软件公司要做的是把告警触发实时推送到自己的业务系统里。基座告警产生 - Webhook 回调业务系统 - 业务系统落库并且推送企业微信/钉钉/邮件 - 前端实时刷新Webhook 回调的代码逻辑比较简单但需要注意签名验证[HttpPost(/api/webhook/folar-alarm)] public async TaskIActionResult ReceiveFolarAlarm() { // 1. 验证签名 var signature Request.Headers[X-Folar-Signature].ToString(); var body await new StreamReader(Request.Body).ReadToEndAsync(); if (!VerifySignature(body, signature, _webhookSecret)) { return Unauthorized(signature mismatch); } // 2. 解析告警数据结构 var alarmData JsonSerializer.DeserializeAlarmPayload(body); // 3. 落库 await _alarmRepository.SaveAsync(alarmData); // 4. 推送企业微信 await _wechatPushService.SendAsync($【环境告警】{alarmData.DeviceName} 温度 {alarmData.Value}℃ 超过阈值 {alarmData.Threshold}℃); // 5. 返回成功基座收到响应后停止重试 return Ok(); }务必在回调处理里做签名验证这点很多人会忽略。我在一次安全测试中发现有的项目把 Webhook 地址直接暴露到公网又没有签名验证别人只要摸到地址就能伪造告警数据往里灌。即使你们是私有化部署基座和业务系统在同一内网也建议加上签名验证成本很低但能堵住一个明显漏洞。另外一个细节回调处理要幂等。基座的 Webhook 推送在业务系统返回非 2xx 状态码时会重试如果业务系统处理超时但实际已经写入数据库了重试就会产生重复数据。所以落库时要有去重逻辑比如用告警唯一 ID 做唯一索引或者先查再插。4. 数据库结构盘点哪些表可以直接碰哪些不能动4.1 为什么二次开发一定要摸数据库结构接口再完善做深入集成的时候你一定会碰到数据库层面的问题。最典型的场景是你们业务系统需要和设备资产做关联映射比如每个设备要绑定一个房间、绑定一个客户这些业务字段在基座的标准设备表里是没有的。这时候有几个选择一是用基座提供的扩展属性功能二是把映射关系存在你们自己业务库里三是直接往基座数据库里加字段。掌握数据库结构才能真正做出正确的技术选型而不是凭感觉乱来。4.2 DeepBasic Folar 的核心表结构分析根据我对这类物联基座数据库的观察具体表命名和字段在不同版本可能略有差异核心表大概分这几类资产与产品域product / product_model产品及物模型定义存测点标识符、数据类型、单位device设备主表存设备名、产品 ID、设备状态在线/离线/未激活、接入凭证device_group / device_relation设备分组和层级关系数据与消息域telemetry_data / device_data测点历史数据这类表是典型的大表通常按月或按设备分表分区event_log事件日志包括上下线事件、系统事件alarm_record告警记录存告警规则 ID、设备 ID、触发值、触发时间、确认状态指令与控制域command_record指令下发记录存指令内容、目标设备、状态、发送时间、设备回执内容command_reply设备应答记录有的版本合并在 command_record 中权限与配置域tenant / project / department租户和层级组织user / role / permission用户和权限app_credential开放接口应用凭据4.3 三种常见的数据库扩展策略策略一只通过 OpenAPI 操作基座数据业务映射放自己库这是我最推荐的模式。基座所有的数据操作都通过接口走你们的业务库只存业务映射关系比如CREATE TABLE biz_device_binding ( id BIGINT PRIMARY KEY AUTO_INCREMENT, folar_device_id VARCHAR(64) NOT NULL COMMENT 基座中的设备ID, biz_device_code VARCHAR(64) NOT NULL COMMENT 业务系统设备编码, room_id BIGINT NOT NULL COMMENT 关联业务系统的房间ID, customer_id BIGINT COMMENT 关联客户ID, extra_config JSON COMMENT 扩展配置, created_at DATETIME DEFAULT CURRENT_TIMESTAMP, UNIQUE KEY uk_folar_device (folar_device_id) );这种方式的优势是基座升级、数据清理都不影响你们的业务库权限边界清晰基座数据库只需要给基座服务用。缺点是每次查询设备信息要跨系统拿数据多一次关联开销但在绝大多数业务场景下这点开销可以忽略。策略二合理使用基座的扩展字段能力DeepBasic Folar 大概率在设备表上支持自定义扩展字段或标签tags功能类似于给设备打标签。适合那些需要跟着设备生命周期走的业务属性比如设备安装位置、所属站点、维护责任人。这类信息用扩展属性存到基座在设备查询时可以直接按标签筛选比较方便。策略三适度补充独立业务表如果你们的业务非常特殊需要基于基座数据做二次加工存储比如设备上报数据后你们要做复杂的清洗计算产生一批派生数据那就直接在你们业务库建表把基座作为原始数据源。这也是很常见的模式相当于建了一个数据仓库层。4.4 直接操作基座数据库的几条红线我见过一些团队图省事直接连接基座数据库去读写数据这里必须明确给几条红线不要直接改基座的系统表结构包括 device、product、user、permission 这些核心表。基座服务自己有一套内部缓存和状态机你直接在数据库里改字段基座服务感知不到轻则数据不一致重则直接把基座搞崩溃。不要在基座数据库里建触发器、存储过程。这类物联基座在私有化部署时数据库账号权限通常只开放给基座自己用一旦你们加了触发器后续基座升级、数据迁移时极大概率出问题。我在一个项目上接手过烂摊子前一家供应商在基座数据库里建了 12 个触发器做数据同步结果每次基座升级都要专门去排查这些触发器苦不堪言。不要跨库 join。就算你们业务库和基座库部署在同一台数据库实例上也严禁用跨库 JOIN 去查询。物联基座的表结构在版本迭代中比较活跃跨库 JOIN 会让你们业务系统与基座产生强耦合版本一升级就全挂。需要关联数据时通过接口把基座数据同步到自己库再做本地关联。正确姿势基座数据库账号尽量只分配给基座服务本身你们自己的服务连自己的业务库。必须要读基座数据做报表时用只读账号 定时同步的方式把数据拉到数仓或者自己的报表库里。5. 二次开发最容易踩的五个坑附排查链路5.1 坑一物模型定义混乱导致的脏数据问题现象设备上报的数据在基座历史数据查询里经常出现空值或类型转换错误。排查链路先查产品物模型定义确认测点标识符和上报数据里 JSON 的 key 是否完全一致注意大小写再查数据类型定义是否与设备上报的数据类型相符设备上报的是字符串23.5而物模型定义的是 double就会导致存储失败或解析异常最后用基座提供的调试工具或日志查一下原始报文。这个坑的本质是物模型设计期没做好。我建议在开发阶段就建立物模型评审机制设备接入前产品、测点标识符必须经过复查标识符命名统一用小写下划线不能出现温度TempTEMPERATURE这种混乱命名。否则后续所有接口查询、报表开发都会为这个混乱买单。5.2 坑二高并发下 token 缓存失效导致大面积 401现象系统上线后偶尔出现一批请求同时报 401刷新 token 后恢复正常但过一段时间又出现。排查链路第一步看是否所有服务实例共用同一个 token 缓存。如果一个负载均衡后端挂了 5 个服务实例每个实例各持有一个 token其中 4 个实例持有的 token 因某种原因被吊销另一个实例持有的 token 没被吊销这 4 个实例的请求就会大面积 401。第二步看 token 刷新逻辑是否做到了并发控制如果多个线程同时发现 token 过期会同时去刷新导致旧的 token 被覆写然后其他地方用新 token 缓存被旧 token 覆盖形成刷新风暴。解决方案token 缓存要集中管理比如放到 Redis并且设置缓存击穿保护——同一时间只有一个线程能去刷新 token其他线程等待后直接拿新值。我用 C# 的 SemaphoreSlim 或者 Java 的分布式锁都做过很简单但非常有效。5.3 坑三Webhook 回调丢失或重复现象告警推送偶尔收不到或者偶尔收到重复通知。排查链路先看基座侧 webhook 投递日志如果有确认是否已发出再看业务系统的回调接口响应时间基座对回调响应是有超时限制的比如要求 5 秒内响应你们业务系统如果在回调里同步做了一堆数据库操作、企业微信推送很容易超时导致基座重试进而产生重复通知。解决办法回调接口只做三件事——验签、把消息丢进队列、立刻返回 200。后续的落库、推送都交给后台任务异步处理。这样响应时间可以控制在几十毫秒基座侧不会触发重试业务处理流程也不会被第三方服务企业微信、钉钉等的响应时间拖累。消息处理要做幂等告警记录表用消息唯一 ID做唯一约束重复消息直接跳过。5.4 坑四指令下发假成功现象接口返回成功但设备实际没执行业务侧无从感知。排查链路第一步确认你们展示的是指令已接收还是设备已执行状态第二步排查指令下发后是否订阅了设备的回复主题或者设置了状态回执轮询第三步检查设备端固件是否实现了指令应答。这个问题的核心是你们对指令全链路状态的理解。DeepBasic Folar 这种基座一般会把指令状态暴露出来但具体是同步返回还是异步回调、状态字段怎么定义不同版本有差异。做二次开发前必须把指令状态机画出来明确每个状态代表什么含义。我见过一个项目指令下发后前端展示成功两个字实际上基座只把指令存到了待发队列服务器崩溃后指令就丢了。后来改成了展示指令的完整状态流转配合设备未应答的超时提示问题才算真正解决。5.5 坑五数据库直连与跨库关联引发的连锁故障现象基座升级或数据清理任务执行后你们业务系统的报表数据对不上。排查链路如果你们有直接连接基座库做查询先检查你们业务系统是否因为基座表结构变化比如字段改名导致 SQL 执行报错再看是否存在对基座表的长时间锁定查询比如跑大报表时锁了 device 表导致基座在批量修改设备状态时阻塞。我接手过的最严重的一个事故是一个报表服务每天凌晨直接连基座库跑全量聚合查询和基座自己的数据归档任务撞在一起结果两边互相锁表基座的数据写入积压严重线上几千台设备上报的数据延迟了几个小时。最后我们花了很大力气把直连查询改成接口查询加本地数据同步这个问题才算根除。6. 二次开发项目管理层面的几条实在建议这一节聊点项目管理和协作层面的东西。搞技术的人容易只盯着代码但物联基座二次开发项目里很多失败其实发生在技术之外。第一入场第一周把基座的能力清单摸清楚形成一份基座支持/基座不支持的对照表。这个对照表不能只看官方文档必须结合你们的目标场景做验证性测试。比如你们项目里有一个定制设备用的不是标准的 MQTT 协议而是 HTTP 上报那这个协议适配能力就必须在需求阶段验证而不是等开发到一半才问基座能不能支持。文档里写的支持 HTTP 接入和实际生产情况下支持的并发量、数据格式灵活性往往都有差距。第二把物模型设计当成一个正式评审点来做。我在前面反复提到物模型这里再说一次因为它太重要了。指导原则是物模型的标识符一旦发布尽量不要改。设备固件会按这个模型上报历史数据会按这个模型存储报表会按这个模型出改一个标识符意味着从设备端到应用端全链路都要改。所以物模型设计一定要在设备接入前由硬件团队、平台团队、应用团队三方共同评审。第三版本兼容策略提前定。基座本身会迭代升级你们基于它的二次开发也会迭代。要约定清楚哪些接口和表结构是稳定的哪些可能变化。私有化部署的项目基座升级前要有一套完整的回归测试方案优先保证三类核心链路设备接入、数据采集展示、指令下发。这三条链路只要有一条在升级后坏了现场就是事故。第四监控和日志体系要提前建设。基座对接方最被动的时刻就是设备现场出故障往往需要三方配合排查设备厂商看设备日志、你们看业务系统日志、平台运维看基座日志。如果从一开始就把 trace_id 贯通在这三层日志里排查效率会高很多。具体做法是你们业务系统在调用基座接口时生成一个 request_id记录在业务日志里基座侧如果支持透传就把 request_id 也带到基座日志里设备侧的报文 ID 也做关联。这样一条数据从设备到基座再到业务系统全程可追溯。7. 基于 DeepBasic Folar 做二次开发的一些后续扩展思路文章写到这儿主要的内容已经讲透了。最后分享一些我最近在实际项目中看到或者正在尝试的扩展方向给准备在基座之上做深一层产品的团队一点参考。一个是数据服务化。基座已经帮你把设备原始数据采集存储好了但这只是数据而非服务。你可以考虑在基座之上搭建一个数据服务层把设备数据按照业务语义封装成 API供上层业务系统调用。比如把按区域查询平均温湿度封装成一个带权限校验的业务 API而不是让每个业务系统直接去调基座的原始查询接口。这个服务层本质上是一个业务数据网关能让你后续接十个业务系统时不用每个系统都去理解物模型和测点标识符。另一个是规则引擎。DeepBasic Folar 本身可能带了一些基础告警规则但复杂业务场景下你需要的是把设备数据、业务数据和外部数据放到一起做判断比如当房间温度超过 30℃ 且当前电价处于峰时段且房间有人占用时触发空调策略调整。这种跨系统联动规则更适合在你们自己的规则引擎中实现基座负责提供实时数据输入和指令下发输出。还有一个思路是设备资产的一体化建模。基座管理的是设备但业务系统需要的是资产——设备只是资产的一个组成部分。比如一个冷站资产可能关联了冷冻水泵、冷却塔、阀门传感器、电表等一系列设备。你可以基于基座的数据在业务层构建一套资产模型把设备级数据聚合成资产级指标提供给运维和决策层使用。这些方向都说明一个核心观点物联基座的价值在于让你不用重复建设设备接入和管理的轮子但也绝不意味着二次开发只是调几个接口完事。真正有价值的二次开发是在基座之上建立业务理解、数据加工和服务化的能力。从我自己的体会来说做这类集成项目最怕的就是把基座当一个黑盒来用出了问题完全无解。花时间把开放接口、数据模型以及你业务系统与基座之间的边界彻底搞清楚才是在 DeepBasic Folar 之上做出稳定、可维护、能交付的好产品的前提。
返回列表