[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"site-config":3,"primary-menu":6,"project-category":85,"project-posts":97},{"config":4,"socialLinks":5},null,[],{"metadata":7,"spec":10,"menuItems":20},{"name":8,"creationTimestamp":9},"primary","2026-09-12T06:13:55.024154Z",{"displayName":11,"menuItems":12},"主菜单",[13,14,15,16,17,18,19],"88c3f10b-321c-4092-86a8-70db00251b74","menu-item-izrtmxer","c4c814d1-0c2c-456b-8c96-4864965fee94","menu-item-column","menu-item-tools","menu-item-zsxq","menu-item-ocrxlczu",[21,30,40,49,58,67,76],{"displayName":22,"metadata":23,"spec":25,"status":28,"children":29},"首页",{"name":13,"creationTimestamp":24},"2026-09-12T06:13:54.422830Z",{"displayName":22,"href":26,"priority":27,"menuName":8},"\u002F",0,{"displayName":22,"href":26},[],{"displayName":31,"metadata":32,"spec":34,"status":38,"children":39},"Java面试八股",{"name":14,"creationTimestamp":33},"2026-09-13T09:42:02.854891Z",{"displayName":31,"href":35,"target":36,"priority":37,"menuName":8},"\u002Fjava-interview","_self",1,{"displayName":31,"href":35},[],{"displayName":41,"metadata":42,"spec":44,"status":47,"children":48},"文章",{"name":15,"creationTimestamp":43},"2026-09-12T06:13:54.457307Z",{"displayName":41,"href":45,"priority":46,"menuName":8},"\u002Farchives",2,{"displayName":41,"href":45},[],{"displayName":50,"metadata":51,"spec":53,"status":56,"children":57},"项目实战",{"name":16,"creationTimestamp":52},"2026-09-14T00:35:08.138170Z",{"displayName":50,"href":54,"target":36,"priority":55,"menuName":8},"\u002Fcolumn",3,{"displayName":50,"href":54},[],{"displayName":59,"metadata":60,"spec":62,"status":65,"children":66},"在线工具",{"name":17,"creationTimestamp":61},"2026-09-14T00:35:08.171474Z",{"displayName":59,"href":63,"target":36,"priority":64,"menuName":8},"\u002Ftools",4,{"displayName":59,"href":63},[],{"displayName":68,"metadata":69,"spec":71,"status":74,"children":75},"知识星球",{"name":18,"creationTimestamp":70},"2026-09-14T00:35:08.199145Z",{"displayName":68,"href":72,"target":36,"priority":73,"menuName":8},"\u002Fzsxq",5,{"displayName":68,"href":72},[],{"displayName":77,"metadata":78,"spec":80,"status":83,"children":84},"特价云服务器",{"name":19,"creationTimestamp":79},"2026-09-25T15:30:59.201614Z",{"displayName":77,"href":81,"target":36,"priority":82,"menuName":8},"\u002Fserver",6,{"displayName":77,"href":81},[],{"metadata":86,"spec":89,"status":94,"postCount":96},{"name":87,"creationTimestamp":88},"project","2026-09-14T00:20:18.353502Z",{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},"\u002Fupload\u002Ftutorial-cover-project.png","企业级项目从 0 到 1 实战讲解：需求拆解、架构设计、编码落地到部署上线，以连载方式持续更新。",true,false,{"permalink":95,"postCount":96,"visiblePostCount":96},"\u002Fcategories\u002Fproject",20,[98,121,145,167,189,211,233,255,277,299,321,343,365,387,409,431,453,475,497,519],{"metadata":99,"spec":102,"status":112,"categories":116},{"name":100,"creationTimestamp":101},"post-project-column-preface","2026-09-14T00:20:19.104051Z",{"title":103,"slug":104,"cover":105,"excerpt":106,"publishTime":108,"categories":109,"tags":110,"priority":27,"pinned":92,"deleted":93,"visible":111,"allowComment":92},"项目实战专栏发刊词：从看懂教程到做出项目","project-column-preface","\u002Fupload\u002Fproject-column-cover.png",{"raw":107,"autoGenerate":93},"从看懂教程到独立做出项目，中间差一次完整的从 0 到 1。本专栏用真实场景项目，带你走完需求拆解、架构设计、编码落地到部署上线的全过程。","2026-09-14T00:20:19.187525Z",[87],[],"PUBLIC",{"permalink":113,"excerpt":107,"lastModifyTime":114,"phase":115},"\u002Farchives\u002Fproject-column-preface","2026-09-18T01:59:45.817659Z","PUBLISHED",[117],{"metadata":118,"spec":119,"status":120,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":122,"spec":127,"status":136,"categories":140},{"name":123,"creationTimestamp":124,"annotations":125},"md-f9da9383732c","2026-09-21T14:03:21.131131Z",{"haloweb\u002Fseries":126},"digital-twin",{"title":128,"slug":129,"cover":130,"excerpt":131,"publishTime":133,"categories":134,"tags":135,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（十九）：面试考点全景图——30 个高频追问 Q&A","digital-twin-19-interview-cheatsheet","\u002Fupload\u002Fstudio-t1789999382113sz32-p1.jpg",{"raw":132,"autoGenerate":92},"","2026-09-21T14:03:21.282887Z",[87],[],{"permalink":137,"excerpt":138,"lastModifyTime":139,"phase":115},"\u002Farchives\u002Fdigital-twin-19-interview-cheatsheet","数字孪生巡检平台实战（十九）：面试考点全景图——30 个高频追问 Q&A 18 章走完，这个项目从 ThingsBoard 部署到 Cesium 三维球、从 Modbus 寄存器到分布式锁全部闭环。但面试官不看你写了多少代码——他挖的是每个技术决策背后的为什么。 收官章做两件事：一张考点全景图（18","2026-09-21T14:03:21.222579Z",[141],{"metadata":142,"spec":143,"status":144,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":146,"spec":150,"status":158,"categories":162},{"name":147,"creationTimestamp":148,"annotations":149},"md-853683010f9e","2026-09-21T14:03:00.967474Z",{"haloweb\u002Fseries":126},{"title":151,"slug":152,"cover":153,"excerpt":154,"publishTime":155,"categories":156,"tags":157,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（十八）：生产部署——从 compose 到\"像样的生产环境","digital-twin-18-production-deploy","\u002Fupload\u002Fstudio-t1789999365515rtet-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-21T14:03:01.098245Z",[87],[],{"permalink":159,"excerpt":160,"lastModifyTime":161,"phase":115},"\u002Farchives\u002Fdigital-twin-18-production-deploy","数字孪生巡检平台实战（十八）：生产部署——从 compose 到\"像样的生产环境\" 前 17 章的成果都活在\"开发环境\"里：业务服务 mvn spring-boot:run 起在本机 8081，前端 Vite dev server 起在 5173，MySQL\u002FRedis 挂在 docker-comp","2026-09-21T14:03:01.043456Z",[163],{"metadata":164,"spec":165,"status":166,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":168,"spec":172,"status":180,"categories":184},{"name":169,"creationTimestamp":170,"annotations":171},"md-06ca2597b444","2026-09-21T14:02:42.398224Z",{"haloweb\u002Fseries":126},{"title":173,"slug":174,"cover":175,"excerpt":176,"publishTime":177,"categories":178,"tags":179,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（十七）：测试金字塔——从纯单元到 Testcontainers CI","digital-twin-17-testing-ci","\u002Fupload\u002Fstudio-t1789999338990bjaz-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-21T14:02:42.439826Z",[87],[],{"permalink":181,"excerpt":182,"lastModifyTime":183,"phase":115},"\u002Farchives\u002Fdigital-twin-17-testing-ci","数字孪生巡检平台实战（十七）：测试金字塔——从纯单元到 Testcontainers CI 前 16 章一直在写功能代码——状态机、告警引擎、WebSocket、Cesium 三维球。功能写完了，怎么保证它们没坏？ \"我手动测过了\" 是上线前最常见的谎言。手动测试能覆盖 happy path，但覆盖","2026-09-21T14:02:43.694787Z",[185],{"metadata":186,"spec":187,"status":188,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":190,"spec":194,"status":202,"categories":206},{"name":191,"creationTimestamp":192,"annotations":193},"md-ee41577c4f9e","2026-09-21T14:02:16.990990Z",{"haloweb\u002Fseries":126},{"title":195,"slug":196,"cover":197,"excerpt":198,"publishTime":199,"categories":200,"tags":201,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（十六）：实时驱动——航线绘制 + 轨迹回放 + 告警标记","digital-twin-16-route-playback","\u002Fupload\u002Fstudio-t1789999316320qqef-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-21T14:02:17.122174Z",[87],[],{"permalink":203,"excerpt":204,"lastModifyTime":205,"phase":115},"\u002Farchives\u002Fdigital-twin-16-route-playback","数字孪生巡检平台实战（十六）：实时驱动——航线绘制 + 轨迹回放 + 告警标记 上一章把 Cesium Viewer 搭起来了——三维地球、设备 Marker、WebSocket 实时推送都跑通了。但那是个\"看球\"的 demo：设备是静态的圆点点，WebSocket 推过来也只是换个位置，没有\"路线","2026-09-21T14:02:17.082042Z",[207],{"metadata":208,"spec":209,"status":210,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":212,"spec":216,"status":224,"categories":228},{"name":213,"creationTimestamp":214,"annotations":215},"md-2e4519f840df","2026-09-21T14:01:52.960238Z",{"haloweb\u002Fseries":126},{"title":217,"slug":218,"cover":219,"excerpt":220,"publishTime":221,"categories":222,"tags":223,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（十五）：从零到三维球——Cesium + Vite 集成避坑记","digital-twin-15-cesium-frontend","\u002Fupload\u002Fstudio-t1789999285264l4ml-p1.png",{"raw":132,"autoGenerate":92},"2026-09-21T14:01:53.036543Z",[87],[],{"permalink":225,"excerpt":226,"lastModifyTime":227,"phase":115},"\u002Farchives\u002Fdigital-twin-15-cesium-frontend","数字孪生巡检平台实战（十五）：从零到三维球——Cesium + Vite 集成避坑记 前 14 章后端闭环已经打通——设备注册、ThingsBoard 同步、巡检下发、影子同步、告警工单、WebSocket 实时推送、审计日志、数据看板。但全是后端代码，看不到效果。 本章从零建 frontend\u002F（","2026-09-21T14:01:54.389125Z",[229],{"metadata":230,"spec":231,"status":232,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":234,"spec":238,"status":246,"categories":250},{"name":235,"creationTimestamp":236,"annotations":237},"md-d91f0d25eca5","2026-09-21T14:01:23.551758Z",{"haloweb\u002Fseries":126},{"title":239,"slug":240,"cover":241,"excerpt":242,"publishTime":243,"categories":244,"tags":245,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（十四）：看板数字可信——审计日志 AOP 与空值穿透防护","digital-twin-14-audit-log-dashboard","\u002Fupload\u002Fstudio-t1789999264639vf51-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-21T14:01:23.589040Z",[87],[],{"permalink":247,"excerpt":248,"lastModifyTime":249,"phase":115},"\u002Farchives\u002Fdigital-twin-14-audit-log-dashboard","数字孪生巡检平台实战（十四）：看板数字可信——审计日志 AOP 与空值穿透防护 前 13 章跑通了从\"设备注册 → ThingsBoard 同步 → 巡检下发 → 影子同步 → 告警工单 → WebSocket 实时推送\"的完整业务闭环。但有两个\"运营级\"缺口没补：谁干了什么？（审计日志）和大屏数字","2026-09-21T14:01:23.755654Z",[251],{"metadata":252,"spec":253,"status":254,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":256,"spec":260,"status":268,"categories":272},{"name":257,"creationTimestamp":258,"annotations":259},"md-770bfb17ae4d","2026-09-21T14:01:03.564405Z",{"haloweb\u002Fseries":126},{"title":261,"slug":262,"cover":263,"excerpt":264,"publishTime":265,"categories":266,"tags":267,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（十三）：毫秒级实时通道——WebSocket 协议补全","digital-twin-13-websocket","\u002Fupload\u002Fstudio-t1789999241984apkf-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-21T14:01:03.684241Z",[87],[],{"permalink":269,"excerpt":270,"lastModifyTime":271,"phase":115},"\u002Farchives\u002Fdigital-twin-13-websocket","数字孪生巡检平台实战（十三）：毫秒级实时通道——WebSocket 协议补全 前 12 章从设备注册到告警工单闭环跑通了\"写\"链路——数据落库、状态迁移、告警触发都没问题，但\"读\"链路里实时推送这一环是空的。前端三维场景要展示设备位置，是去数据库轮询？1 秒一次太慢；还是等设备上报完再刷新页面？没有","2026-09-21T14:01:03.639979Z",[273],{"metadata":274,"spec":275,"status":276,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":278,"spec":282,"status":290,"categories":294},{"name":279,"creationTimestamp":280,"annotations":281},"md-c15def5256bd","2026-09-21T14:00:41.226555Z",{"haloweb\u002Fseries":126},{"title":283,"slug":284,"cover":285,"excerpt":286,"publishTime":287,"categories":288,"tags":289,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（十二）：拔掉设备那一根——告警规则引擎与工单闭环","digital-twin-12-alert-rule-engine","\u002Fupload\u002Fstudio-t1789999213123iw9d-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-21T14:00:41.359653Z",[87],[],{"permalink":291,"excerpt":292,"lastModifyTime":293,"phase":115},"\u002Farchives\u002Fdigital-twin-12-alert-rule-engine","数字孪生巡检平台实战（十二）：拔掉设备那一根——告警规则引擎与工单闭环 上一章把巡检任务的状态机显式化了，但整个项目的\"大脑\"还没搭好——告警规则引擎和工单闭环。拔掉模拟设备的网线，等 1 分钟，工单自动生成，这是全项目里\"看见效果\"最直观的一个闭环。 问题是，\"自动生成\"的链路在存量代码里是断裂的","2026-09-21T14:00:41.313456Z",[295],{"metadata":296,"spec":297,"status":298,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":300,"spec":304,"status":312,"categories":316},{"name":301,"creationTimestamp":302,"annotations":303},"md-020c29e82597","2026-09-21T14:00:10.356138Z",{"haloweb\u002Fseries":126},{"title":305,"slug":306,"cover":307,"excerpt":308,"publishTime":309,"categories":310,"tags":311,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（十一）：长任务的骨架——巡检任务与设备状态机","digital-twin-11-state-machine","\u002Fupload\u002Fstudio-t1789999190716w80u-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-21T14:00:10.463087Z",[87],[],{"permalink":313,"excerpt":314,"lastModifyTime":315,"phase":115},"\u002Farchives\u002Fdigital-twin-11-state-machine","数字孪生巡检平台实战（十一）：长任务的骨架——巡检任务与设备状态机 前两章分别解决了\"设备注册 → ThingsBoard 同步\"和\"离线设备指令暂存 → 影子同步\"。但有一个更深层的问题没碰：状态到底由谁管？ 项目里至少有两类实体带 status 字段——Device.status（online ","2026-09-21T14:00:11.505665Z",[317],{"metadata":318,"spec":319,"status":320,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":322,"spec":326,"status":334,"categories":338},{"name":323,"creationTimestamp":324,"annotations":325},"md-ec629c1d6e06","2026-09-21T13:59:48.468696Z",{"haloweb\u002Fseries":126},{"title":327,"slug":328,"cover":329,"excerpt":330,"publishTime":331,"categories":332,"tags":333,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（十）：离线设备的归宿——设备影子","digital-twin-10-shadow","\u002Fupload\u002Fstudio-t1789999172044uwwq-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-21T13:59:48.669793Z",[87],[],{"permalink":335,"excerpt":336,"lastModifyTime":337,"phase":115},"\u002Farchives\u002Fdigital-twin-10-shadow","数字孪生巡检平台实战（十）：离线设备的归宿——设备影子 上一章结尾埋了个悬而未决的问题：\"给 3 号仓库的温控设备设成 26 度\"——但这台设备此刻偏偏离线了，指令发给谁？第 09 章打通了\"设备注册 ↔ ThingsBoard\"的链路，但链路通 ≠ 链路永远能用，现场环境复杂到你想不到：厂区地下车","2026-09-21T13:59:48.587838Z",[339],{"metadata":340,"spec":341,"status":342,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":344,"spec":348,"status":356,"categories":360},{"name":345,"creationTimestamp":346,"annotations":347},"md-9934564e909c","2026-09-20T05:57:42.239479Z",{"haloweb\u002Fseries":126},{"title":349,"slug":350,"cover":351,"excerpt":352,"publishTime":353,"categories":354,"tags":355,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（九）：打通设备联动——REST 客户端加固与单一事实源","digital-twin-09-tbclient","\u002Fupload\u002Fstudio-t17898838336016zbi-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-20T05:57:42.408258Z",[87],[],{"permalink":357,"excerpt":358,"lastModifyTime":359,"phase":115},"\u002Farchives\u002Fdigital-twin-09-tbclient","数字孪生巡检平台实战（九）：打通设备联动——REST 客户端加固与单一事实源 上一章结尾卖了个关子：业务库里的设备目前只是\"数字分身\"——在 ThingsBoard 网页上建设备，业务库并不知情；反过来在平台建设备，TB 侧也没有感知。更扎眼的是 ThingsBoardClient.java 里硬编","2026-09-20T05:57:42.336797Z",[361],{"metadata":362,"spec":363,"status":364,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":366,"spec":370,"status":378,"categories":382},{"name":367,"creationTimestamp":368,"annotations":369},"md-f3786c05ea39","2026-09-20T05:24:41.087650Z",{"haloweb\u002Fseries":126},{"title":371,"slug":372,"cover":373,"excerpt":374,"publishTime":375,"categories":376,"tags":377,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（八）：登录与三角色权限——JWT 与多租户的完整闭环","digital-twin-08-auth","\u002Fupload\u002Fstudio-t1789881859046v59a-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-20T05:24:41.205697Z",[87],[],{"permalink":379,"excerpt":380,"lastModifyTime":381,"phase":115},"\u002Farchives\u002Fdigital-twin-08-auth","数字孪生巡检平台实战（八）：登录与三角色权限——JWT 与多租户的完整闭环 前七章我们把\"物\"的那条链路跑通了：MQTT 传感器、Modbus PLC、MAVLink 无人机、rosbridge 机器狗，数据穿过网关落进 ThingsBoard。但从这一章开始进入连载重心——自研业务层（Spring","2026-09-20T05:24:42.276388Z",[383],{"metadata":384,"spec":385,"status":386,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":388,"spec":392,"status":400,"categories":404},{"name":389,"creationTimestamp":390,"annotations":391},"md-e9e53314a36a","2026-09-20T04:50:51.401485Z",{"haloweb\u002Fseries":126},{"title":393,"slug":394,"cover":395,"excerpt":396,"publishTime":397,"categories":398,"tags":399,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（七）：机器狗上岗——rosbridge 接入","digital-twin-07-ros","\u002Fupload\u002Fstudio-t1789879832497yerc-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-20T04:50:51.493374Z",[87],[],{"permalink":401,"excerpt":402,"lastModifyTime":403,"phase":115},"\u002Farchives\u002Fdigital-twin-07-ros","数字孪生巡检平台实战（七）：机器狗上岗——rosbridge 接入 上一章的无人机讲的是\"二进制的世界\"：MAVLink 一帧 21 字节，每一 bit 都有精确语义。这一章的机器狗正好相反——ROS 是一个\"文本的世界\"，消息是 JSON，传输靠 WebSocket，连协议包名都带 self-ex","2026-09-20T04:50:52.556202Z",[405],{"metadata":406,"spec":407,"status":408,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":410,"spec":414,"status":422,"categories":426},{"name":411,"creationTimestamp":412,"annotations":413},"md-9930f0a46bea","2026-09-20T03:35:08.936577Z",{"haloweb\u002Fseries":126},{"title":415,"slug":416,"cover":417,"excerpt":418,"publishTime":419,"categories":420,"tags":421,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（六）：无人机上天——MAVLink 接入","digital-twin-06-mavlink","\u002Fupload\u002Fstudio-t1789875285986kuev-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-20T03:35:08.998102Z",[87],[],{"permalink":423,"excerpt":424,"lastModifyTime":425,"phase":115},"\u002Farchives\u002Fdigital-twin-06-mavlink","数字孪生巡检平台实战（六）：无人机上天——MAVLink 接入 上一章我们把网关的连接器机制拆到了源码层，顺手在自己的 MAVLink 连接器里抓出一颗雷（send_to_storage 少传参数）。本章兑现全部承诺：修雷、补断线重连状态机、打开从平台直达飞控的下行链路——最后让一架\"无人机\"在平台","2026-09-20T03:35:10.449710Z",[427],{"metadata":428,"spec":429,"status":430,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":432,"spec":436,"status":444,"categories":448},{"name":433,"creationTimestamp":434,"annotations":435},"md-0f21cd59f584","2026-09-20T00:12:54.322916Z",{"haloweb\u002Fseries":126},{"title":437,"slug":438,"cover":439,"excerpt":440,"publishTime":441,"categories":442,"tags":443,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（五）：连接器机制剖析——二开前置课","digital-twin-05-connectors","\u002Fupload\u002Fstudio-t1789863156639vt0m-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-20T00:12:54.485661Z",[87],[],{"permalink":445,"excerpt":446,"lastModifyTime":447,"phase":115},"\u002Farchives\u002Fdigital-twin-05-connectors","数字孪生巡检平台实战（五）：连接器机制剖析——二开前置课 上一章我们用两份 JSON 把一台 PLC 接进了平台，全程零代码。但如果你盯着那份 modbus.json 多看两秒，一个问题会自动浮出来：我往 JSON 里写的 functionCode: 3、divider: 10，是谁在逐字阅读它、把","2026-09-20T00:12:54.438949Z",[449],{"metadata":450,"spec":451,"status":452,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":454,"spec":458,"status":466,"categories":470},{"name":455,"creationTimestamp":456,"annotations":457},"md-10c756ef3aec","2026-09-19T18:07:26.700088Z",{"haloweb\u002Fseries":126},{"title":459,"slug":460,"cover":461,"excerpt":462,"publishTime":463,"categories":464,"tags":465,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（四）：网关登场——把一台 PLC 接进平台","digital-twin-04-gateway","\u002Fupload\u002Fstudio-t17898412316930lr9-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-19T18:07:26.793706Z",[87],[],{"permalink":467,"excerpt":468,"lastModifyTime":469,"phase":115},"\u002Farchives\u002Fdigital-twin-04-gateway","数字孪生巡检平台实战（四）：网关登场——把一台 PLC 接进平台 上一章我们拆开了 ThingsBoard 的引擎盖，看清了一条遥测在云端的完整旅程。但车间里的大部分设备——PLC、变频器、电表、老式传感器——根本不会说 MQTT。它们说的是 Modbus：一个 1979 年诞生的协议，比 MQTT","2026-09-19T18:07:27.860300Z",[471],{"metadata":472,"spec":473,"status":474,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":476,"spec":480,"status":488,"categories":492},{"name":477,"creationTimestamp":478,"annotations":479},"md-4529d8a38468","2026-09-19T18:07:06.560263Z",{"haloweb\u002Fseries":126},{"title":481,"slug":482,"cover":483,"excerpt":484,"publishTime":485,"categories":486,"tags":487,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（三）：拆开 ThingsBoard——一条遥测的源码之旅","digital-twin-03-internals","\u002Fupload\u002Fstudio-t1789841210017wdnt-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-19T18:07:06.677411Z",[87],[],{"permalink":489,"excerpt":490,"lastModifyTime":491,"phase":115},"\u002Farchives\u002Fdigital-twin-03-internals","数字孪生巡检平台实战（三）：拆开 ThingsBoard——一条遥测的源码之旅 上一章我们把\"车\"开上了高速——一条模拟器上报的温湿度遥测，穿过 MQTT 进了平台，面板曲线动了起来。但那只是把车开走，这一章我们把引擎盖拆开。 本章没有一行新代码，只做一件事：跟着上一章那条 {\"temperatur","2026-09-19T18:07:07.749749Z",[493],{"metadata":494,"spec":495,"status":496,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":498,"spec":502,"status":510,"categories":514},{"name":499,"creationTimestamp":500,"annotations":501},"md-e500d52f367c","2026-09-19T12:41:49.525687Z",{"haloweb\u002Fseries":126},{"title":503,"slug":504,"cover":505,"excerpt":506,"publishTime":507,"categories":508,"tags":509,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（二）：一条 MQTT 遥测的诞生","digital-twin-02-telemetry","\u002Fupload\u002Fstudio-t1789821680511lcwa-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-19T12:41:49.695087Z",[87],[],{"permalink":511,"excerpt":512,"lastModifyTime":513,"phase":115},"\u002Farchives\u002Fdigital-twin-02-telemetry","数字孪生巡检平台实战（二）：一条 MQTT 遥测的诞生 上一章我们说好了：这条数据链路的第一步，是让设备数据进入平台。本章交付三样东西——一个 docker-compose.yml、一个设备开通脚本、一个 30 行的 MQTT 模拟器。跑完本章，你在浏览器面板上能看到自己的曲线在动。 一、先解决镜像","2026-09-19T12:41:50.763253Z",[515],{"metadata":516,"spec":517,"status":518,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96},{"metadata":520,"spec":524,"status":532,"categories":536},{"name":521,"creationTimestamp":522,"annotations":523},"md-88b408d4e167","2026-09-19T12:41:13.656629Z",{"haloweb\u002Fseries":126},{"title":525,"slug":526,"cover":527,"excerpt":528,"publishTime":529,"categories":530,"tags":531,"priority":27,"pinned":93,"deleted":93,"visible":111,"allowComment":92},"数字孪生巡检平台实战（一）：为什么是数字孪生巡检？","digital-twin-01-why","\u002Fupload\u002Fstudio-t1789821654744s80r-p1.jpg",{"raw":132,"autoGenerate":92},"2026-09-19T12:41:13.716554Z",[87],[],{"permalink":533,"excerpt":534,"lastModifyTime":535,"phase":115},"\u002Farchives\u002Fdigital-twin-01-why","数字孪生巡检平台实战（一）：为什么是数字孪生巡检？ 一、从一个尴尬的面试现场说起 先问一个问题：你简历上的项目，面试官几个月内见过多少次？ 商城、秒杀、短链接、外卖——这几个项目的教程铺天盖地，简历筛选官早已免疫。不是这些项目不好，而是同质化本身让项目失去了信息量：面试官看到\"秒杀系统\"四个字，脑子","2026-09-19T12:41:15.341974Z",[537],{"metadata":538,"spec":539,"status":540,"postCount":96},{"name":87,"creationTimestamp":88},{"displayName":50,"slug":87,"cover":90,"description":91,"priority":27,"hideFromList":92,"preventParentPostCascadeQuery":93},{"permalink":95,"postCount":96,"visiblePostCount":96}]