trphoenix
2025-08-28 a396a42049e99a20bb41f751afa1fa505d105c01
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
<!DOCTYPE html>
<html class="writer-html5" lang="en" >
<head>
    <meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" /><meta name="author" content="岱特智能科技(上海)有限公司" />
      <link rel="shortcut icon" href="../../../img/favicon.ico" />
    <title>透析中心HA环境温度发送到胜透的操作指南 - DT-HA</title>
    <link rel="stylesheet" href="../../../css/theme.css" />
    <link rel="stylesheet" href="../../../css/theme_extra.css" />
        <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github.min.css" />
    
      <script>
        // Current page data
        var mkdocs_page_name = "\u900f\u6790\u4e2d\u5fc3HA\u73af\u5883\u6e29\u5ea6\u53d1\u9001\u5230\u80dc\u900f\u7684\u64cd\u4f5c\u6307\u5357";
        var mkdocs_page_input_path = "Usages\\QA\\\u900f\u6790\u4e2d\u5fc3HA\u73af\u5883\u6e29\u5ea6\u53d1\u9001\u5230\u80dc\u900f\u7684\u64cd\u4f5c\u6307\u5357.md";
        var mkdocs_page_url = null;
      </script>
    
    <!--[if lt IE 9]>
      <script src="../../../js/html5shiv.min.js"></script>
    <![endif]-->
      <script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js"></script>
      <script>hljs.highlightAll();</script> 
</head>
 
<body class="wy-body-for-nav" role="document">
 
  <div class="wy-grid-for-nav">
    <nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
    <div class="wy-side-scroll">
      <div class="wy-side-nav-search">
          <a href="../../.." class="icon icon-home"> DT-HA
        </a><div role="search">
  <form id ="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
      <input type="text" name="q" placeholder="Search docs" aria-label="Search docs" title="Type search term here" />
  </form>
</div>
      </div>
 
      <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
              <ul>
                <li class="toctree-l1"><a class="reference internal" href="../../..">首页</a>
                </li>
              </ul>
              <ul>
                <li class="toctree-l1"><a class="reference internal" href="../../../about/">关于</a>
                </li>
              </ul>
              <p class="caption"><span class="caption-text">使用教程</span></p>
              <ul class="current">
                  <li class="toctree-l1"><a class="reference internal" href="../../../install-guide/installHa/">安装</a>
                  </li>
                  <li class="toctree-l1"><a class="reference internal" >使用</a>
    <ul>
                <li class="toctree-l2"><a class="reference internal" href="../../usage/">使用概述</a>
                </li>
                <li class="toctree-l2"><a class="reference internal" href="../../netconfig/netconfig/">配置网络</a>
                </li>
                <li class="toctree-l2"><a class="reference internal" href="../../initConfig/initConfig/">系统初始化配置</a>
                </li>
    </ul>
                  </li>
                  <li class="toctree-l1 current"><a class="reference internal current" >Q/A</a>
    <ul class="current">
                <li class="toctree-l2 current"><a class="reference internal current" href="#">透析中心HA环境温度发送到胜透的操作指南</a>
    <ul class="current">
    <li class="toctree-l3"><a class="reference internal" href="#1">1. 前提条件</a>
    </li>
    <li class="toctree-l3"><a class="reference internal" href="#2-home-assistant">2. 在Home Assistant中配置传感器自动化</a>
        <ul>
    <li class="toctree-l4"><a class="reference internal" href="#1id">1.找到环境温度传感器实体ID</a>
    </li>
    <li class="toctree-l4"><a class="reference internal" href="#2">2. 创建自动化规则</a>
    </li>
        </ul>
    </li>
    <li class="toctree-l3"><a class="reference internal" href="#3-node-redmqtt">3. 在Node-RED中配置MQTT接收转发</a>
        <ul>
    <li class="toctree-l4"><a class="reference internal" href="#1-node-red">1. 打开Node-RED编辑器</a>
    </li>
    <li class="toctree-l4"><a class="reference internal" href="#2_1">2. 创建新工作流</a>
    </li>
    <li class="toctree-l4"><a class="reference internal" href="#3-mqtt">3. 配置MQTT节点</a>
    </li>
    <li class="toctree-l4"><a class="reference internal" href="#4">4.配置工作流全局变量</a>
    </li>
        </ul>
    </li>
    </ul>
                </li>
                <li class="toctree-l2"><a class="reference internal" href="../errorsQA/">errorsQA</a>
                </li>
                <li class="toctree-l2"><a class="reference internal" href="../HA-%E5%A6%82%E4%BD%95%E5%AE%9E%E7%8E%B0%E7%8A%B6%E6%80%81%E5%8F%8D%E8%BD%AC/">HA-如何实现状态反转</a>
                </li>
                <li class="toctree-l2"><a class="reference internal" href="../TS88%E9%80%8F%E6%9E%90%E6%9C%BA%E8%81%94%E6%9C%BA%E9%80%9A%E4%BF%A1-%E4%B8%AD%E6%96%87%E7%89%88/">TS88透析机联机通信-中文版</a>
                </li>
                <li class="toctree-l2"><a class="reference internal" href="../VMware-ESXi%E6%89%A9%E5%B1%95HomeAssistant%E7%A1%AC%E7%9B%98%E6%8C%87%E5%8D%97/">VMware-ESXi扩展HomeAssistant硬盘指南</a>
                </li>
                <li class="toctree-l2"><a class="reference internal" href="../%E5%A6%82%E4%BD%95%E9%9B%86%E6%88%90%E5%92%8C%E9%A3%8E%E5%A4%A9%E6%B0%94%E7%BB%84%E4%BB%B6%E5%88%B0HA/">如何集成和风天气组件到HA</a>
                </li>
                <li class="toctree-l2"><a class="reference internal" href="../%E5%A6%82%E5%8E%95%E9%A3%8E%E9%99%A9-%E4%BA%BA%E5%AD%98%E5%9C%A8%E4%BC%A0%E6%84%9F%E5%99%A8%E9%85%8D%E7%BD%AE%E6%96%B9%E6%B3%95/">如厕风险-人存在传感器配置方法</a>
                </li>
                <li class="toctree-l2"><a class="reference internal" href="../ubunte-desktop%E6%A1%8C%E9%9D%A2%E7%B3%BB%E7%BB%9F%E5%A6%82%E4%BD%95%E9%85%8D%E7%BD%AE%E5%BC%80%E5%90%AF%E8%BF%9C%E7%A8%8B%E5%8D%8F%E5%8A%A9/">Ubuntu-desktop桌面系统如何配置开启远程协助</a>
                </li>
    </ul>
                  </li>
              </ul>
              <p class="caption"><span class="caption-text">其它教程</span></p>
              <ul>
                  <li class="toctree-l1"><a class="reference internal" >Node-red相关</a>
    <ul>
                <li class="toctree-l2"><a class="reference internal" href="../../../node-reds/%E5%AE%89%E8%A3%85node-red%E8%AE%B0%E5%BD%95/">安装node-red记录</a>
                </li>
                <li class="toctree-l2"><a class="reference internal" href="../../../node-reds/%E5%A6%82%E4%BD%95%E6%8A%8Anode-red%E5%AE%89%E8%A3%85%E5%88%B0orangepiZero3/">如何把node-red安装到orangepiZero</a>
                </li>
                <li class="toctree-l2"><a class="reference internal" href="../../../node-reds/ModbusPoll-v7.0.0%E4%BD%BF%E7%94%A8%E6%95%99%E7%A8%8B/">ModbusPoll-v7.0.0使用教程</a>
                </li>
                <li class="toctree-l2"><a class="reference internal" href="../../../node-reds/node-red%E5%B8%B8%E7%94%A8%E7%BB%84%E4%BB%B6%E5%88%97%E8%A1%A8/">node-red常用组件列表</a>
                </li>
                <li class="toctree-l2"><a class="reference internal" href="../../../node-reds/node-red%E5%A6%82%E4%BD%95%E8%BF%9E%E6%8E%A5modbus%20_slave%E8%AE%BE%E5%A4%87/">node-red如何连接modbus _slave设备</a>
                </li>
    </ul>
                  </li>
              </ul>
      </div>
    </div>
    </nav>
 
    <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
      <nav class="wy-nav-top" role="navigation" aria-label="Mobile navigation menu">
          <i data-toggle="wy-nav-top" class="fa fa-bars"></i>
          <a href="../../..">DT-HA</a>
        
      </nav>
      <div class="wy-nav-content">
        <div class="rst-content"><div role="navigation" aria-label="breadcrumbs navigation">
  <ul class="wy-breadcrumbs">
    <li><a href="../../.." class="icon icon-home" aria-label="Docs"></a></li>
          <li class="breadcrumb-item">使用教程</li>
          <li class="breadcrumb-item">Q/A</li>
      <li class="breadcrumb-item active">透析中心HA环境温度发送到胜透的操作指南</li>
    <li class="wy-breadcrumbs-aside">
    </li>
  </ul>
  <hr/>
</div>
          <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
            <div class="section" itemprop="articleBody">
              
                <h2 id="_1">透析中心环境温度发送到胜透的操作指南<a class="headerlink" href="#_1" title="Permanent link">&para;</a></h2>
<h3 id="1">1. 前提条件<a class="headerlink" href="#1" title="Permanent link">&para;</a></h3>
<ul>
<li>已安装并配置好Home Assistant</li>
<li>已经安装并配置了MQTT Broker</li>
<li>已经安装并配置了Node-RED</li>
<li>已经安装并配置了米家温度传感器(如Miaomiaoc CN BLT 3)</li>
<li>已经获取到了胜透的MQTT服务器Broker地址和端口</li>
</ul>
<h3 id="2-home-assistant">2. 在Home Assistant中配置传感器自动化<a class="headerlink" href="#2-home-assistant" title="Permanent link">&para;</a></h3>
<h4 id="1id">1.找到环境温度传感器实体ID<a class="headerlink" href="#1id" title="Permanent link">&para;</a></h4>
<p>透析中心可能安装了多个米家温度传感器,首先需要找到对应的实体ID。
可以在Home Assistant的开发者工具中查看当前所有传感器的状态。</p>
<p><img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715150132.png" />
也可以在已经设备与服务,集成,中找到米家的设备,找到那个传感器
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715150425.png" /></p>
<p><img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715150504.png" />
找到需要配置为环境温度的传感器
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715150606.png" />
点击温度实体
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715153539.png" /></p>
<p>点击设置图标
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715153737.png" /></p>
<p><img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715153845.png" />
如本例获取到的实体ID为<code>sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1</code>。记住此ID,后面很多地方都会用到.</p>
<h4 id="2">2. 创建自动化规则<a class="headerlink" href="#2" title="Permanent link">&para;</a></h4>
<p>我们需要创建一个自动化规则,当传感器状态更新时及每隔30秒,将温度数据发送到Home Assistant内部集成的的MQTT服务器。
进入 "配置" → "自动化和场景" → "自动化",点击右下角的 "+" 创建新的自动化规则。
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715154208.png" />
进入自动化规则编辑界面后,点击右下角的"创建自动化"按钮。在弹出的对话框中选择"创建新的自动化"。
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715154317.png" />
在新建自动化界面,点右上角的三个点,如下图所示
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715154543.png" />
在弹出的下拉菜单中,点击进入YHAML编辑,进入代码模式,如下所示
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715155050.png" /></p>
<p><img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715155148.png" />
在这个大的文本框中粘入如下代码:</p>
<div class="codehilite"><pre><span></span><code><span class="nt">alias</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">发布环境温度传感器状态到MQTT</span>
<span class="nt">description</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">当米家温度传感器状态变化或每30秒定时时,自动发布到MQTT供Node-RED使用</span>
<span class="nt">triggers</span><span class="p">:</span>
<span class="w">  </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">entity_id</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1</span>
<span class="w">    </span><span class="nt">trigger</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">state</span>
<span class="w">  </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">seconds</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">/30</span>
<span class="w">    </span><span class="nt">trigger</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">time_pattern</span>
<span class="nt">conditions</span><span class="p">:</span>
<span class="w">  </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">condition</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">template</span>
<span class="w">    </span><span class="nt">value_template</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">&gt;-</span>
<span class="w">      </span><span class="no">{{ states(&#39;sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1&#39;)</span>
<span class="w">      </span><span class="no">not in [&#39;unavailable&#39;, &#39;unknown&#39;, &#39;None&#39;] and</span>
<span class="w">      </span><span class="no">states(&#39;sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1&#39;) |</span>
<span class="w">      </span><span class="no">float(-999) != -999 }}</span>
<span class="nt">actions</span><span class="p">:</span>
<span class="w">  </span><span class="p p-Indicator">-</span><span class="w"> </span><span class="nt">data</span><span class="p">:</span>
<span class="w">      </span><span class="nt">topic</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">&gt;-</span>
<span class="w">        </span><span class="no">homeassistant/sensor/sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1/state</span>
<span class="w">      </span><span class="nt">payload</span><span class="p">:</span><span class="w"> </span><span class="p p-Indicator">&gt;-</span>
<span class="w">        </span><span class="no">{{</span>
<span class="w">        </span><span class="no">states(&#39;sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1&#39;)</span>
<span class="w">        </span><span class="no">}}</span>
<span class="w">      </span><span class="nt">retain</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">false</span>
<span class="w">      </span><span class="nt">qos</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">0</span>
<span class="w">    </span><span class="nt">action</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">mqtt.publish</span>
<span class="nt">mode</span><span class="p">:</span><span class="w"> </span><span class="l l-Scalar l-Scalar-Plain">single</span>
</code></pre></div>
 
<p><strong><em>注意:</em></strong> 
以上代码中的 <code>sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1</code> 是示例实体ID,请替换为你<strong>实际的温度传感器实体ID</strong>。
放置完成后,如下图示意
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715160254.png" />
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715160557.png" />
观察上次触发列是否会每隔30秒执行一次
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715160657.png" />
返回到传感器的设备界面也能看到设备的自动化下面有一条自动化规则,如下图
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715160841.png" />
到此,自动化规则已配置完成。</p>
<h3 id="3-node-redmqtt">3. 在Node-RED中配置MQTT接收转发<a class="headerlink" href="#3-node-redmqtt" title="Permanent link">&para;</a></h3>
<h4 id="1-node-red">1. 打开Node-RED编辑器<a class="headerlink" href="#1-node-red" title="Permanent link">&para;</a></h4>
<p>打开nod-red编辑器,有的HA可能是配置在左侧航菜单中,如下图志示,点击即可进入
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715161325.png" />
有的是没有配置node-red到左侧导航菜单的,这种情况下,可以点击"设置-加载项"进入加载项页面
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715161438.png" />
找到Node-RED加载项,点击进入
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715161523.png" />
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715161829.png" />
进入界面如下:
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715161920.png" /></p>
<h4 id="2_1">2. 创建新工作流<a class="headerlink" href="#2_1" title="Permanent link">&para;</a></h4>
<p>点击右上角的"菜单"按钮,再点导入。
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715162009.png" /></p>
<p>在此处贴入工作流代码,注意:要选择导入到新流程
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715162224.png" />
工作流代码如下</p>
<div class="codehilite"><pre><span></span><code><span class="p">[</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">        </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1407d4531e19a951&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;tab&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;label&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;透析中心环境温度数据转发&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;disabled&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;info&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;从HomeAssistant获取温度传感器数据并发布到公司MQTT服务器&quot;</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">        </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;97e254f4a87ddde9&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;mqtt in&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;z&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1407d4531e19a951&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;订阅HA温度传感器&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;topic&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;homeassistant/sensor/+/state&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;qos&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;datatype&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;auto&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;broker&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;mqtt-ha-broker&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;nl&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;rap&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;rh&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;inputs&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;x&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">150</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;y&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">100</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;wires&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">            </span><span class="p">[</span>
<span class="w">                </span><span class="s2">&quot;44d729e67618e4f2&quot;</span>
<span class="w">            </span><span class="p">]</span>
<span class="w">        </span><span class="p">]</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">        </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;44d729e67618e4f2&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;function&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;z&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1407d4531e19a951&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;处理温度数据&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;func&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;// 从全局变量获取共享配置\nconst nameSpace = global.get(\&quot;nameSpace\&quot;) || \&quot;Environment\&quot;;\nconst clientCode = global.get(\&quot;clientCode\&quot;) || \&quot;Data-It_XzOffice\&quot;;\nconst targetDeviceId = global.get(\&quot;deviceId\&quot;) || \&quot;sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1\&quot;;\n\n// 从topic中提取当前设备ID\nconst topicParts = msg.topic.split(&#39;/&#39;);\nconst currentDeviceId = topicParts.length &gt;= 3 ? topicParts[2] : \&quot;\&quot;;\n\n// 只处理目标设备的消息\nif (currentDeviceId !== targetDeviceId) {\n    node.log(\&quot;忽略设备消息: \&quot; + currentDeviceId + \&quot; (目标设备: \&quot; + targetDeviceId + \&quot;)\&quot;);\n    return null;\n}\n\n// 生成唯一的消息ID\nconst messageId = \&quot;temp_\&quot; + Date.now() + \&quot;_\&quot; + Math.floor(Math.random() * 1000);\nconst timestamp = Date.now();\nconst deviceType = \&quot;sensor\&quot;;\n\n// 解析温度值\nlet temperature = parseFloat(msg.payload);\nif (isNaN(temperature)) {\n    node.warn(\&quot;接收到无效的温度值: \&quot; + msg.payload);\n    return null;\n}\n\n// 按照胜透物联网通信协议格式化数据\nconst protocolMessage = {\n    \&quot;messageId\&quot;: messageId,\n    \&quot;timestamp\&quot;: timestamp,\n    \&quot;clientCode\&quot;: clientCode,\n    \&quot;deviceId\&quot;: targetDeviceId,\n    \&quot;deviceType\&quot;: deviceType,\n    \&quot;version\&quot;: \&quot;1.0\&quot;,\n    \&quot;data\&quot;: {\n        \&quot;properties\&quot;: {\n            \&quot;temperature\&quot;: {\n                \&quot;value\&quot;: temperature,\n                \&quot;unit\&quot;: \&quot;°C\&quot;,\n                \&quot;quality\&quot;: \&quot;good\&quot;,\n                \&quot;timestamp\&quot;: timestamp\n            }\n        }\n    }\n};\n\n// 设置输出消息\nmsg.payload = JSON.stringify(protocolMessage);\nmsg.topic = `${nameSpace}/sensor/${clientCode}/${targetDeviceId}/properties`;\nmsg.qos = 0;\n\nnode.log(\&quot;温度数据已处理: \&quot; + temperature + \&quot;°C (设备: \&quot; + targetDeviceId + \&quot;)\&quot;);\n\nreturn msg;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;outputs&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;timeout&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;noerr&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;initialize&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;finalize&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;libs&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span>
<span class="w">        </span><span class="nt">&quot;x&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">420</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;y&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">100</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;wires&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">            </span><span class="p">[</span>
<span class="w">                </span><span class="s2">&quot;573842ea77192dbb&quot;</span><span class="p">,</span>
<span class="w">                </span><span class="s2">&quot;4c630c164e08dc2c&quot;</span>
<span class="w">            </span><span class="p">]</span>
<span class="w">        </span><span class="p">]</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">        </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;573842ea77192dbb&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;mqtt out&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;z&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1407d4531e19a951&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;发布到公司MQTT&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;topic&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;qos&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;retain&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;respTopic&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;contentType&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;userProps&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;correl&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;expiry&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;broker&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;mqtt-company-broker&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;x&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">990</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;y&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">80</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;wires&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">        </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;4c630c164e08dc2c&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;debug&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;z&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1407d4531e19a951&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;调试输出&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;active&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;tosidebar&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;console&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;tostatus&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;complete&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;payload&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;targetType&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;msg&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;statusVal&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;statusType&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;auto&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;x&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1040</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;y&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">360</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;wires&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[]</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">        </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;495c392574ee1bf4&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;inject&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;z&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1407d4531e19a951&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;发布设备物模型&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;props&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">            </span><span class="p">{</span>
<span class="w">                </span><span class="nt">&quot;p&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;payload&quot;</span>
<span class="w">            </span><span class="p">},</span>
<span class="w">            </span><span class="p">{</span>
<span class="w">                </span><span class="nt">&quot;p&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;topic&quot;</span><span class="p">,</span>
<span class="w">                </span><span class="nt">&quot;vt&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;str&quot;</span>
<span class="w">            </span><span class="p">}</span>
<span class="w">        </span><span class="p">],</span>
<span class="w">        </span><span class="nt">&quot;repeat&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;60&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;crontab&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;once&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;onceDelay&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;5&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;topic&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;shengtou/sensor/TH001_HA/model&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;payload&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;payloadType&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;date&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;x&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">170</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;y&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">180</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;wires&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">            </span><span class="p">[</span>
<span class="w">                </span><span class="s2">&quot;3aea3ce2deb4ea99&quot;</span>
<span class="w">            </span><span class="p">]</span>
<span class="w">        </span><span class="p">]</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">        </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;3aea3ce2deb4ea99&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;function&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;z&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1407d4531e19a951&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;生成物模型数据&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;func&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;const messageId = \&quot;mdl_\&quot; + Date.now();\nconst timestamp = Date.now();\n// 从全局变量获取共享配置\nconst nameSpace = global.get(\&quot;nameSpace\&quot;) || \&quot;Environment\&quot;;\nconst clientCode = global.get(\&quot;clientCode\&quot;) || \&quot;Data-It_XzOffice\&quot;;\nconst deviceId = global.get(\&quot;deviceId\&quot;) || \&quot;sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1\&quot;;\nconst deviceType = \&quot;sensor\&quot;;\n\n// 按照胜透物联网通信协议生成物模型定义\nconst modelMessage = {\n    \&quot;messageId\&quot;: messageId,\n    \&quot;timestamp\&quot;: timestamp,\n    \&quot;clientCode\&quot;: clientCode,\n    \&quot;deviceId\&quot;: deviceId,\n    \&quot;deviceType\&quot;: deviceType,\n    \&quot;version\&quot;: \&quot;1.0\&quot;,\n    \&quot;data\&quot;: {\n        \&quot;model\&quot;: {\n            \&quot;deviceInfo\&quot;: {\n                \&quot;manufacturer\&quot;: \&quot;小米\&quot;,\n                \&quot;model\&quot;: \&quot;MIAOMIAOC_CN_BLT_3_11A1SBR5K5O01_T2\&quot;,\n                \&quot;version\&quot;: \&quot;1.0.0\&quot;,\n                \&quot;description\&quot;: \&quot;米家温湿度传感器(通过HomeAssistant集成)\&quot;\n            },\n            \&quot;properties\&quot;: {\n                \&quot;temperature\&quot;: {\n                    \&quot;dataType\&quot;: \&quot;float\&quot;,\n                    \&quot;unit\&quot;: \&quot;°C\&quot;,\n                    \&quot;range\&quot;: {\n                        \&quot;min\&quot;: -40,\n                        \&quot;max\&quot;: 85\n                    },\n                    \&quot;precision\&quot;: 1,\n                    \&quot;description\&quot;: \&quot;环境温度\&quot;\n                }\n            },\n            \&quot;events\&quot;: {\n                \&quot;startup\&quot;: {\n                    \&quot;eventType\&quot;: \&quot;info\&quot;,\n                    \&quot;description\&quot;: \&quot;设备启动事件\&quot;\n                }\n            },\n            \&quot;alarms\&quot;: {\n                \&quot;TEMP_HIGH\&quot;: {\n                    \&quot;alarmType\&quot;: \&quot;threshold_exceeded\&quot;,\n                    \&quot;description\&quot;: \&quot;温度过高报警\&quot;,\n                    \&quot;defaultThreshold\&quot;: 35.0\n                },\n                \&quot;TEMP_LOW\&quot;: {\n                    \&quot;alarmType\&quot;: \&quot;threshold_exceeded\&quot;,\n                    \&quot;description\&quot;: \&quot;温度过低报警\&quot;,\n                    \&quot;defaultThreshold\&quot;: 0.0\n                }\n            }\n        }\n    }\n};\n\n// 设置MQTT发布主题\nmsg.topic = `${nameSpace}/sensor/${clientCode}/${deviceId}/model`;\nmsg.payload = JSON.stringify(modelMessage);\nmsg.qos = 1;\n\nnode.log(\&quot;设备物模型数据已生成,发布到主题: \&quot; + msg.topic);\n\nreturn msg;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;outputs&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;timeout&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;noerr&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;initialize&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;finalize&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;libs&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span>
<span class="w">        </span><span class="nt">&quot;x&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">400</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;y&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">160</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;wires&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">            </span><span class="p">[</span>
<span class="w">                </span><span class="s2">&quot;573842ea77192dbb&quot;</span><span class="p">,</span>
<span class="w">                </span><span class="s2">&quot;4c630c164e08dc2c&quot;</span>
<span class="w">            </span><span class="p">]</span>
<span class="w">        </span><span class="p">]</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">        </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;70e1e283448c941e&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;inject&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;z&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1407d4531e19a951&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;设备状态心跳&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;props&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">            </span><span class="p">{</span>
<span class="w">                </span><span class="nt">&quot;p&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;payload&quot;</span>
<span class="w">            </span><span class="p">},</span>
<span class="w">            </span><span class="p">{</span>
<span class="w">                </span><span class="nt">&quot;p&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;topic&quot;</span><span class="p">,</span>
<span class="w">                </span><span class="nt">&quot;vt&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;str&quot;</span>
<span class="w">            </span><span class="p">}</span>
<span class="w">        </span><span class="p">],</span>
<span class="w">        </span><span class="nt">&quot;repeat&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;120&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;crontab&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;once&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;onceDelay&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;10&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;topic&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;shengtou/sensor/TH001_HA/status&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;payload&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;payloadType&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;date&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;x&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">160</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;y&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">240</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;wires&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">            </span><span class="p">[</span>
<span class="w">                </span><span class="s2">&quot;ae74b6d386748045&quot;</span>
<span class="w">            </span><span class="p">]</span>
<span class="w">        </span><span class="p">]</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">        </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;ae74b6d386748045&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;function&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;z&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1407d4531e19a951&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;生成状态数据&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;func&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;const messageId = \&quot;sts_\&quot; + Date.now();\nconst timestamp = Date.now();\n// 从全局变量获取共享配置\nconst nameSpace = global.get(\&quot;nameSpace\&quot;) || \&quot;Environment\&quot;;\nconst clientCode = global.get(\&quot;clientCode\&quot;) || \&quot;Data-It_XzOffice\&quot;;\nconst deviceId = global.get(\&quot;deviceId\&quot;) || \&quot;sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1\&quot;;\nconst deviceType = \&quot;sensor\&quot;;\n\n// 计算设备运行时间(从第一次启动开始)\nif (!context.get(\&quot;startTime\&quot;)) {\n    context.set(\&quot;startTime\&quot;, timestamp);\n}\nconst startTime = context.get(\&quot;startTime\&quot;);\nconst uptime = timestamp - startTime;\n\n// 按照胜透物联网通信协议生成状态数据\nconst statusMessage = {\n    \&quot;messageId\&quot;: messageId,\n    \&quot;timestamp\&quot;: timestamp,\n    \&quot;clientCode\&quot;: clientCode,\n    \&quot;deviceId\&quot;: deviceId,\n    \&quot;deviceType\&quot;: deviceType,\n    \&quot;version\&quot;: \&quot;1.0\&quot;,\n    \&quot;data\&quot;: {\n        \&quot;status\&quot;: {\n            \&quot;online\&quot;: true,\n            \&quot;lastHeartbeat\&quot;: timestamp,\n            \&quot;uptime\&quot;: uptime\n        }\n    }\n};\n\n// 设置MQTT发布主题\nmsg.topic = `${nameSpace}/sensor/${clientCode}/${deviceId}/status`;\nmsg.payload = JSON.stringify(statusMessage);\nmsg.qos = 0;\n\nnode.log(\&quot;设备状态心跳已发送,发布到主题: \&quot; + msg.topic);\n\nreturn msg;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;outputs&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;timeout&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;noerr&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;initialize&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;finalize&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;libs&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span>
<span class="w">        </span><span class="nt">&quot;x&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">400</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;y&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">240</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;wires&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">            </span><span class="p">[</span>
<span class="w">                </span><span class="s2">&quot;573842ea77192dbb&quot;</span><span class="p">,</span>
<span class="w">                </span><span class="s2">&quot;4c630c164e08dc2c&quot;</span>
<span class="w">            </span><span class="p">]</span>
<span class="w">        </span><span class="p">]</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">        </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;7f9acf10d0c6085d&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;inject&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;z&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1407d4531e19a951&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;初始化全局配置&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;props&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">            </span><span class="p">{</span>
<span class="w">                </span><span class="nt">&quot;p&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;payload&quot;</span>
<span class="w">            </span><span class="p">}</span>
<span class="w">        </span><span class="p">],</span>
<span class="w">        </span><span class="nt">&quot;repeat&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;crontab&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;once&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;onceDelay&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;topic&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;payload&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;payloadType&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;date&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;x&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">150</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;y&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">40</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;wires&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">            </span><span class="p">[</span>
<span class="w">                </span><span class="s2">&quot;6f6b825dfc5e9512&quot;</span>
<span class="w">            </span><span class="p">]</span>
<span class="w">        </span><span class="p">]</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">        </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;6f6b825dfc5e9512&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;function&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;z&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1407d4531e19a951&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;设置全局配置&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;func&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;// 设置全局共享常量\nglobal.set(\&quot;nameSpace\&quot;, \&quot;Environment\&quot;);\nglobal.set(\&quot;clientCode\&quot;, \&quot;Data-It_XzOffice\&quot;);\nglobal.set(\&quot;deviceId\&quot;, \&quot;sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1\&quot;);\n\nnode.log(\&quot;全局配置已设置: nameSpace=\&quot; + global.get(\&quot;nameSpace\&quot;) + \&quot;, clientCode=\&quot; + global.get(\&quot;clientCode\&quot;) + \&quot;, deviceId=\&quot; + global.get(\&quot;deviceId\&quot;));\n\nreturn msg;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;outputs&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;timeout&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;noerr&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;initialize&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;finalize&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;libs&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span>
<span class="w">        </span><span class="nt">&quot;x&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">360</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;y&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">40</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;wires&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">            </span><span class="p">[</span>
<span class="w">                </span><span class="s2">&quot;794c422d39898a7f&quot;</span>
<span class="w">            </span><span class="p">]</span>
<span class="w">        </span><span class="p">]</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">        </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;794c422d39898a7f&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;function&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;z&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1407d4531e19a951&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;更新MQTT订阅Topic&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;func&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;// 从全局变量生成HomeAssistant MQTT订阅Topic\nconst deviceId = global.get(\&quot;deviceId\&quot;) || \&quot;sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1\&quot;;\nconst haTopic = `homeassistant/sensor/${deviceId}/state`;\n\n// 将Topic保存到全局变量供其他地方使用\nglobal.set(\&quot;haSubscribeTopic\&quot;, haTopic);\n\nnode.log(\&quot;HomeAssistant订阅Topic已更新: \&quot; + haTopic);\nnode.log(\&quot;注意:如需更改MQTT In节点的订阅Topic,请手动修改为: \&quot; + haTopic);\n\nreturn msg;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;outputs&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;timeout&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;noerr&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;initialize&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;finalize&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;libs&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span>
<span class="w">        </span><span class="nt">&quot;x&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">590</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;y&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">40</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;wires&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">            </span><span class="p">[]</span>
<span class="w">        </span><span class="p">]</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">        </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;3bf854e9bd3e6937&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;inject&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;z&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1407d4531e19a951&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;启动事件&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;props&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">            </span><span class="p">{</span>
<span class="w">                </span><span class="nt">&quot;p&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;payload&quot;</span>
<span class="w">            </span><span class="p">},</span>
<span class="w">            </span><span class="p">{</span>
<span class="w">                </span><span class="nt">&quot;p&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;topic&quot;</span><span class="p">,</span>
<span class="w">                </span><span class="nt">&quot;vt&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;str&quot;</span>
<span class="w">            </span><span class="p">}</span>
<span class="w">        </span><span class="p">],</span>
<span class="w">        </span><span class="nt">&quot;repeat&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;crontab&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;once&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;onceDelay&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;15&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;topic&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;shengtou/sensor/TH001_HA/events&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;payload&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;payloadType&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;date&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;x&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">160</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;y&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">340</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;wires&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">            </span><span class="p">[</span>
<span class="w">                </span><span class="s2">&quot;26f6196b2d6fba29&quot;</span>
<span class="w">            </span><span class="p">]</span>
<span class="w">        </span><span class="p">]</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">        </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;26f6196b2d6fba29&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;function&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;z&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1407d4531e19a951&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;生成启动事件&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;func&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;const messageId = \&quot;evt_startup_\&quot; + Date.now();\nconst timestamp = Date.now();\n// 从全局变量获取共享配置\nconst nameSpace = global.get(\&quot;nameSpace\&quot;) || \&quot;Environment\&quot;;\nconst clientCode = global.get(\&quot;clientCode\&quot;) || \&quot;Data-It_XzOffice\&quot;;\nconst deviceId = global.get(\&quot;deviceId\&quot;) || \&quot;sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1\&quot;;\nconst deviceType = \&quot;sensor\&quot;;\n\n// 按照胜透物联网通信协议生成事件数据\nconst eventMessage = {\n    \&quot;messageId\&quot;: messageId,\n    \&quot;timestamp\&quot;: timestamp,\n    \&quot;clientCode\&quot;: clientCode,\n    \&quot;deviceId\&quot;: deviceId,\n    \&quot;deviceType\&quot;: deviceType,\n    \&quot;version\&quot;: \&quot;1.0\&quot;,\n    \&quot;data\&quot;: {\n        \&quot;events\&quot;: [\n            {\n                \&quot;eventType\&quot;: \&quot;startup\&quot;,\n                \&quot;eventLevel\&quot;: \&quot;info\&quot;,\n                \&quot;eventCode\&quot;: \&quot;EVT_001\&quot;,\n                \&quot;description\&quot;: \&quot;HomeAssistant温度传感器代理设备启动完成\&quot;,\n                \&quot;timestamp\&quot;: timestamp\n            }\n        ]\n    }\n};\n\n// 设置MQTT发布主题\nmsg.topic = `${nameSpace}/sensor/${clientCode}/${deviceId}/events`;\nmsg.payload = JSON.stringify(eventMessage);\nmsg.qos = 1;\n\nnode.log(\&quot;设备启动事件已生成,发布到主题: \&quot; + msg.topic);\n\nreturn msg;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;outputs&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;timeout&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;noerr&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;initialize&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;finalize&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;libs&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span>
<span class="w">        </span><span class="nt">&quot;x&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">380</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;y&quot;</span><span class="p">:</span><span class="w"> </span><span class="mi">320</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;wires&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">[</span>
<span class="w">            </span><span class="p">[</span>
<span class="w">                </span><span class="s2">&quot;573842ea77192dbb&quot;</span><span class="p">,</span>
<span class="w">                </span><span class="s2">&quot;4c630c164e08dc2c&quot;</span>
<span class="w">            </span><span class="p">]</span>
<span class="w">        </span><span class="p">]</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">        </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;mqtt-ha-broker&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;mqtt-broker&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;HomeAssistant MQTT&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;broker&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;192.168.50.83&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;port&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;1883&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;clientid&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;autoConnect&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;usetls&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;protocolVersion&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;4&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;keepalive&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;60&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;cleansession&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;autoUnsubscribe&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;birthTopic&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;birthQos&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;birthPayload&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;birthMsg&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
<span class="w">        </span><span class="nt">&quot;closeTopic&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;closeQos&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;closePayload&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;closeMsg&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
<span class="w">        </span><span class="nt">&quot;willTopic&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;willQos&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;willPayload&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;willMsg&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
<span class="w">        </span><span class="nt">&quot;sessionExpiry&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span>
<span class="w">    </span><span class="p">},</span>
<span class="w">    </span><span class="p">{</span>
<span class="w">        </span><span class="nt">&quot;id&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;mqtt-company-broker&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;type&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;mqtt-broker&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;name&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;公司MQTT服务器&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;broker&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;mqtt-test.ihemodialysis.com&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;port&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;62183&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;clientid&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;usetls&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;protocolVersion&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;4&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;keepalive&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;60&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;cleansession&quot;</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;birthTopic&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;birthQos&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;birthPayload&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;birthMsg&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
<span class="w">        </span><span class="nt">&quot;closeTopic&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;closeQos&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;closePayload&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;closeMsg&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
<span class="w">        </span><span class="nt">&quot;willTopic&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;shengtou/sensor/TH001_HA/status&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;willQos&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;0&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;willPayload&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;{\&quot;messageId\&quot;:\&quot;sts_offline\&quot;,\&quot;timestamp\&quot;:0,\&quot;deviceId\&quot;:\&quot;TH001_HA\&quot;,\&quot;deviceType\&quot;:\&quot;sensor\&quot;,\&quot;version\&quot;:\&quot;1.0\&quot;,\&quot;data\&quot;:{\&quot;status\&quot;:{\&quot;online\&quot;:false,\&quot;lastHeartbeat\&quot;:0,\&quot;uptime\&quot;:0}}}&quot;</span><span class="p">,</span>
<span class="w">        </span><span class="nt">&quot;willMsg&quot;</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
<span class="w">        </span><span class="nt">&quot;sessionExpiry&quot;</span><span class="p">:</span><span class="w"> </span><span class="s2">&quot;&quot;</span>
<span class="w">    </span><span class="p">}</span>
<span class="p">]</span>
</code></pre></div>
 
<p>当然,你也可以从<a href="http://datacdn.data-it.tech/HomeAssistant/%E8%BD%AC%E5%8F%91%E7%8E%AF%E5%A2%83%E6%B8%A9%E5%BA%A6/flows%28%E8%BD%AC%E5%8F%91%E7%8E%AF%E5%A2%83%E6%B8%A9%E5%BA%A6%29.zip">工作流文件</a>导入新新工作流。
点击上述链接后,下载文件,并解压,得到一个名为<code>flows.json</code>的文件。
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715162926.png" />
点击导入节点文件,</p>
<p><img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715163031.png" /></p>
<p><img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715163056.png" />
部署成功后,会出现如下图所示的工作流
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715163149.png" />
此时,工作流已创完成.</p>
<h4 id="3-mqtt">3. 配置MQTT节点<a class="headerlink" href="#3-mqtt" title="Permanent link">&para;</a></h4>
<p>工作流中有两个MQTT节点,分别是Home Assistant的MQTT Broker和公司MQTT服务器的Broker。这两个节点的配置需要根据实际情况进行调整。
首先,要先配置Home Assistant的MQTT Broker节点,确保其连接信息正确无误。
在我们没有配置mqtt in 的连接信息时,我们发现这个节点一直处理连接中
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715163605.png" />
双击该节点,进入配置界面
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715163656.png" />
点击编辑图标
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715163805.png" />
在编辑mqtt-broker节点的界面中的连接参数选项卡中,输入正确的服务端与端口号
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715163909.png" />
如果MQTT有用户名和密码,请在认证选项卡中输入正确的用户名和密码后,然后点更新
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715164109.png" />
然后,再点击完成
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715164132.png" />
最后点击部署
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715164154.png" />
部署完成后,我们可以看到,此节点会变为已联接
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715164232.png" />
对于"发布到公司MQTT"节点,我们需要配置连接到公司MQTT服务器的Broker。也时同样的操作方法,双击
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715164525.png" />
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715164716.png" />
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715164745.png" />
然后,更新,完成,部署即可。</p>
<p><strong><em>查找HomeAssistant的Mqtt配置信息</em></strong></p>
<p>对于HomeAssistant我们一般都是提前部署了内置的MQTT Broker,在不知端口与密码的情况下,我样可以在HomeAssistant中去查找
进入设置加载项
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715165034.png" />
找到Mosquitto broker这个选项卡,点击进入
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715165556.png" />
点击配置选项卡
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715165648.png" />
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715170410.png" />
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715170521.png" />
在这里可以看到MQTT的端口号与用户名密码等信息,及下面的mqtt开放的端口信息,ip地址,就是ha主机所在的Ip地址。以上信息,用来配置工作流的mqtt in的参数。</p>
<p><strong><em>公司mqtt服务端口信息</em></strong>
这个参数,请向公司管理员获取,或者在公司MQTT服务器的配置文件中查看。</p>
<h4 id="4">4.配置工作流全局变量<a class="headerlink" href="#4" title="Permanent link">&para;</a></h4>
<p>双击工作流的节点"设置全局配置",打开编辑function节点
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715170815.png" />
对如下三行,进行更改</p>
<div class="codehilite"><pre><span></span><code><span class="c1">// 设置全局共享常量</span>
<span class="nb">global</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s2">&quot;nameSpace&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;Environment&quot;</span><span class="p">);</span><span class="w"> </span><span class="c1">//命名空间,默认为:Environment,如果有需要,以联系相关工程师确认后,更改.</span>
<span class="nb">global</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s2">&quot;clientCode&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;Data-It_XzOffice&quot;</span><span class="p">);</span><span class="c1">// 客户端代码,默认为:Data-It_XzOffice,一定要改为中心对就的ClientCode,</span>
<span class="nb">global</span><span class="p">.</span><span class="nx">set</span><span class="p">(</span><span class="s2">&quot;deviceId&quot;</span><span class="p">,</span><span class="w"> </span><span class="s2">&quot;sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1&quot;</span><span class="p">);</span><span class="c1">//一定要改为之前我们定的传感器实体ID</span>
</code></pre></div>
 
<p>如果不确定,请联系相关工程师确认。
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715171257.png" />
然后,点击,完成,部署
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715171454.png" />
然后,下一步,非常重要,一定要执行
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715171602.png" />
这一步,非常重要,必须执行,否则工作流没有把全局变量写入工作流,会导致发布数据不正确。
然后,我样就可以用在debug的日志中看到我们发布的节点数据了,
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715171803.png" />
此图,可以观察到mqtt发布到公司的数据,clientCode,deviceid是否正常了。</p>
<h5 id="5">5. 测试工作流的数据是否正常<a class="headerlink" href="#5" title="Permanent link">&para;</a></h5>
<p>我们可以使用第三方工具来查看公司mqtt服务收到的数据是否正常如下图
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715171959.png" /></p>
<p>这里我推荐使用工具<a href="https://mqttx.app/">MQTTX</a>
下载地址为:https://mqttx.app/downloads
<img alt="" src="https://qncdn.tairongkj.com/docs/images/20250715172131.png" /></p>
<p>至此,透析中心HA环境温度数据发送到胜透的工作流配置完成。
<end></p>
              
            </div>
          </div><footer>
    <div class="rst-footer-buttons" role="navigation" aria-label="Footer Navigation">
        <a href="../../initConfig/initConfig/" class="btn btn-neutral float-left" title="系统初始化配置"><span class="icon icon-circle-arrow-left"></span> Previous</a>
        <a href="../errorsQA/" class="btn btn-neutral float-right" title="errorsQA">Next <span class="icon icon-circle-arrow-right"></span></a>
    </div>
 
  <hr/>
 
  <div role="contentinfo">
    <!-- Copyright etc -->
  </div>
 
  Built with <a href="https://www.mkdocs.org/">MkDocs</a> using a <a href="https://github.com/readthedocs/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
          
        </div>
      </div>
 
    </section>
 
  </div>
 
  <div class="rst-versions" role="note" aria-label="Versions">
  <span class="rst-current-version" data-toggle="rst-current-version">
    
        <span>
          <a href="http://dh.leon056.com:7499/r/Embedded/HomeAssistantPtoject.git" class="fa fa-code-fork" style="color: #fcfcfc"> Dh</a>
        </span>
    
    
      <span><a href="../../initConfig/initConfig/" style="color: #fcfcfc">&laquo; Previous</a></span>
    
    
      <span><a href="../errorsQA/" style="color: #fcfcfc">Next &raquo;</a></span>
    
  </span>
</div>
    <script src="../../../js/jquery-3.6.0.min.js"></script>
    <script>var base_url = "../../..";</script>
    <script src="../../../js/theme_extra.js"></script>
    <script src="../../../js/theme.js"></script>
      <script src="../../../search/main.js"></script>
    <script>
        jQuery(function () {
            SphinxRtdTheme.Navigation.enable(true);
        });
    </script>
 
</body>
</html>