<!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>
|
<li class="toctree-l2"><a class="reference internal" href="../%E5%A6%82%E4%BD%95%E7%A6%BB%E7%BA%BF%E5%AE%89%E8%A3%85Docker%28ubunt24.04%29/">如何离线安装Docker(ubuntu24.04)</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../%E5%A6%82%E4%BD%95%E5%9C%A8%E7%BA%BFDocker%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85%E8%A3%85HomeAssistant/">如何在线Docker一键安装HomeAssistant</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../%E5%A6%82%E4%BD%95%E7%A6%BB%E7%BA%BFDocker%E4%B8%80%E9%94%AE%E5%AE%89%E8%A3%85HomeAssistant/">如何离线Docker一键安装HomeAssistant</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../%E5%9F%BA%E4%BA%8EDocker%E7%9A%84%E6%96%B9%E5%BC%8F%E5%AE%89%E8%A3%85HomeAssistant/">基于Docker的方式安装HomeAssistant</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../%E5%A6%82%E4%BD%95%E5%BF%AB%E9%80%9F%E9%83%A8%E7%BD%B2frpc%E6%9C%8D%E5%8A%A1/">如何快速部署frpc服务</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../windows%E4%B8%8D%E8%83%BD%E8%AE%BF%E9%97%AEHA%E7%9A%84%E5%85%B1%E4%BA%AB%E9%85%8D%E7%BD%AE%E7%9B%AE%E5%BD%95%E7%9A%84%E8%A7%A3%E5%86%B3%E5%8A%9E%E6%B3%95/">windows不能访问HA的共享配置目录的解决办法</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../%E8%AF%AD%E9%9F%B3%E5%90%88%E6%88%90%E4%B8%8E%E8%AF%86%E5%88%AB%E6%9C%8D%E5%8A%A1Docker-%E9%83%A8%E7%BD%B2%E8%AF%B4%E6%98%8E/">语音合成与识别服务Docker-部署说明</a>
|
</li>
|
<li class="toctree-l2"><a class="reference internal" href="../%E4%BA%BA%E8%84%B8%E8%AF%86%E5%88%AB%E6%9C%8D%E5%8A%A1%E5%AE%89%E8%A3%85%E8%AF%B4%E6%98%8E/">人脸识别服务安装说明</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">¶</a></h2>
|
<h3 id="1">1. 前提条件<a class="headerlink" href="#1" title="Permanent link">¶</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">¶</a></h3>
|
<h4 id="1id">1.找到环境温度传感器实体ID<a class="headerlink" href="#1id" title="Permanent link">¶</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">¶</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">>-</span>
|
<span class="w"> </span><span class="no">{{ states('sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1')</span>
|
<span class="w"> </span><span class="no">not in ['unavailable', 'unknown', 'None'] and</span>
|
<span class="w"> </span><span class="no">states('sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1') |</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">>-</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">>-</span>
|
<span class="w"> </span><span class="no">{{</span>
|
<span class="w"> </span><span class="no">states('sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1')</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">¶</a></h3>
|
<h4 id="1-node-red">1. 打开Node-RED编辑器<a class="headerlink" href="#1-node-red" title="Permanent link">¶</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">¶</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">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1407d4531e19a951"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"tab"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"label"</span><span class="p">:</span><span class="w"> </span><span class="s2">"透析中心环境温度数据转发"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"disabled"</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">"info"</span><span class="p">:</span><span class="w"> </span><span class="s2">"从HomeAssistant获取温度传感器数据并发布到公司MQTT服务器"</span>
|
<span class="w"> </span><span class="p">},</span>
|
<span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"97e254f4a87ddde9"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mqtt in"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"z"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1407d4531e19a951"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"订阅HA温度传感器"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"topic"</span><span class="p">:</span><span class="w"> </span><span class="s2">"homeassistant/sensor/+/state"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"qos"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"datatype"</span><span class="p">:</span><span class="w"> </span><span class="s2">"auto"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"broker"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mqtt-ha-broker"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"nl"</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">"rap"</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">"rh"</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">"inputs"</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">"x"</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">"y"</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">"wires"</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">"44d729e67618e4f2"</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">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"44d729e67618e4f2"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"function"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"z"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1407d4531e19a951"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"处理温度数据"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"func"</span><span class="p">:</span><span class="w"> </span><span class="s2">"// 从全局变量获取共享配置\nconst nameSpace = global.get(\"nameSpace\") || \"Environment\";\nconst clientCode = global.get(\"clientCode\") || \"Data-It_XzOffice\";\nconst targetDeviceId = global.get(\"deviceId\") || \"sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1\";\n\n// 从topic中提取当前设备ID\nconst topicParts = msg.topic.split('/');\nconst currentDeviceId = topicParts.length >= 3 ? topicParts[2] : \"\";\n\n// 只处理目标设备的消息\nif (currentDeviceId !== targetDeviceId) {\n node.log(\"忽略设备消息: \" + currentDeviceId + \" (目标设备: \" + targetDeviceId + \")\");\n return null;\n}\n\n// 生成唯一的消息ID\nconst messageId = \"temp_\" + Date.now() + \"_\" + Math.floor(Math.random() * 1000);\nconst timestamp = Date.now();\nconst deviceType = \"sensor\";\n\n// 解析温度值\nlet temperature = parseFloat(msg.payload);\nif (isNaN(temperature)) {\n node.warn(\"接收到无效的温度值: \" + msg.payload);\n return null;\n}\n\n// 按照胜透物联网通信协议格式化数据\nconst protocolMessage = {\n \"messageId\": messageId,\n \"timestamp\": timestamp,\n \"clientCode\": clientCode,\n \"deviceId\": targetDeviceId,\n \"deviceType\": deviceType,\n \"version\": \"1.0\",\n \"data\": {\n \"properties\": {\n \"temperature\": {\n \"value\": temperature,\n \"unit\": \"°C\",\n \"quality\": \"good\",\n \"timestamp\": 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(\"温度数据已处理: \" + temperature + \"°C (设备: \" + targetDeviceId + \")\");\n\nreturn msg;"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"outputs"</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">"timeout"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"noerr"</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">"initialize"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"finalize"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"libs"</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span>
|
<span class="w"> </span><span class="nt">"x"</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">"y"</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">"wires"</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">"573842ea77192dbb"</span><span class="p">,</span>
|
<span class="w"> </span><span class="s2">"4c630c164e08dc2c"</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">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"573842ea77192dbb"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mqtt out"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"z"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1407d4531e19a951"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"发布到公司MQTT"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"topic"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"qos"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"retain"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"respTopic"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"contentType"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"userProps"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"correl"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"expiry"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"broker"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mqtt-company-broker"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"x"</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">"y"</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">"wires"</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">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"4c630c164e08dc2c"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"debug"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"z"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1407d4531e19a951"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"调试输出"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"active"</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">"tosidebar"</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">"console"</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">"tostatus"</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">"complete"</span><span class="p">:</span><span class="w"> </span><span class="s2">"payload"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"targetType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"msg"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"statusVal"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"statusType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"auto"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"x"</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">"y"</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">"wires"</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">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"495c392574ee1bf4"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"inject"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"z"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1407d4531e19a951"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"发布设备物模型"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"props"</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">"p"</span><span class="p">:</span><span class="w"> </span><span class="s2">"payload"</span>
|
<span class="w"> </span><span class="p">},</span>
|
<span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"p"</span><span class="p">:</span><span class="w"> </span><span class="s2">"topic"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"vt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"str"</span>
|
<span class="w"> </span><span class="p">}</span>
|
<span class="w"> </span><span class="p">],</span>
|
<span class="w"> </span><span class="nt">"repeat"</span><span class="p">:</span><span class="w"> </span><span class="s2">"60"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"crontab"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"once"</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">"onceDelay"</span><span class="p">:</span><span class="w"> </span><span class="s2">"5"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"topic"</span><span class="p">:</span><span class="w"> </span><span class="s2">"shengtou/sensor/TH001_HA/model"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"payload"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"payloadType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"date"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"x"</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">"y"</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">"wires"</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">"3aea3ce2deb4ea99"</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">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3aea3ce2deb4ea99"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"function"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"z"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1407d4531e19a951"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"生成物模型数据"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"func"</span><span class="p">:</span><span class="w"> </span><span class="s2">"const messageId = \"mdl_\" + Date.now();\nconst timestamp = Date.now();\n// 从全局变量获取共享配置\nconst nameSpace = global.get(\"nameSpace\") || \"Environment\";\nconst clientCode = global.get(\"clientCode\") || \"Data-It_XzOffice\";\nconst deviceId = global.get(\"deviceId\") || \"sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1\";\nconst deviceType = \"sensor\";\n\n// 按照胜透物联网通信协议生成物模型定义\nconst modelMessage = {\n \"messageId\": messageId,\n \"timestamp\": timestamp,\n \"clientCode\": clientCode,\n \"deviceId\": deviceId,\n \"deviceType\": deviceType,\n \"version\": \"1.0\",\n \"data\": {\n \"model\": {\n \"deviceInfo\": {\n \"manufacturer\": \"小米\",\n \"model\": \"MIAOMIAOC_CN_BLT_3_11A1SBR5K5O01_T2\",\n \"version\": \"1.0.0\",\n \"description\": \"米家温湿度传感器(通过HomeAssistant集成)\"\n },\n \"properties\": {\n \"temperature\": {\n \"dataType\": \"float\",\n \"unit\": \"°C\",\n \"range\": {\n \"min\": -40,\n \"max\": 85\n },\n \"precision\": 1,\n \"description\": \"环境温度\"\n }\n },\n \"events\": {\n \"startup\": {\n \"eventType\": \"info\",\n \"description\": \"设备启动事件\"\n }\n },\n \"alarms\": {\n \"TEMP_HIGH\": {\n \"alarmType\": \"threshold_exceeded\",\n \"description\": \"温度过高报警\",\n \"defaultThreshold\": 35.0\n },\n \"TEMP_LOW\": {\n \"alarmType\": \"threshold_exceeded\",\n \"description\": \"温度过低报警\",\n \"defaultThreshold\": 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(\"设备物模型数据已生成,发布到主题: \" + msg.topic);\n\nreturn msg;"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"outputs"</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">"timeout"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"noerr"</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">"initialize"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"finalize"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"libs"</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span>
|
<span class="w"> </span><span class="nt">"x"</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">"y"</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">"wires"</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">"573842ea77192dbb"</span><span class="p">,</span>
|
<span class="w"> </span><span class="s2">"4c630c164e08dc2c"</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">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"70e1e283448c941e"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"inject"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"z"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1407d4531e19a951"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"设备状态心跳"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"props"</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">"p"</span><span class="p">:</span><span class="w"> </span><span class="s2">"payload"</span>
|
<span class="w"> </span><span class="p">},</span>
|
<span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"p"</span><span class="p">:</span><span class="w"> </span><span class="s2">"topic"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"vt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"str"</span>
|
<span class="w"> </span><span class="p">}</span>
|
<span class="w"> </span><span class="p">],</span>
|
<span class="w"> </span><span class="nt">"repeat"</span><span class="p">:</span><span class="w"> </span><span class="s2">"120"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"crontab"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"once"</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">"onceDelay"</span><span class="p">:</span><span class="w"> </span><span class="s2">"10"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"topic"</span><span class="p">:</span><span class="w"> </span><span class="s2">"shengtou/sensor/TH001_HA/status"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"payload"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"payloadType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"date"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"x"</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">"y"</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">"wires"</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">"ae74b6d386748045"</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">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ae74b6d386748045"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"function"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"z"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1407d4531e19a951"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"生成状态数据"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"func"</span><span class="p">:</span><span class="w"> </span><span class="s2">"const messageId = \"sts_\" + Date.now();\nconst timestamp = Date.now();\n// 从全局变量获取共享配置\nconst nameSpace = global.get(\"nameSpace\") || \"Environment\";\nconst clientCode = global.get(\"clientCode\") || \"Data-It_XzOffice\";\nconst deviceId = global.get(\"deviceId\") || \"sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1\";\nconst deviceType = \"sensor\";\n\n// 计算设备运行时间(从第一次启动开始)\nif (!context.get(\"startTime\")) {\n context.set(\"startTime\", timestamp);\n}\nconst startTime = context.get(\"startTime\");\nconst uptime = timestamp - startTime;\n\n// 按照胜透物联网通信协议生成状态数据\nconst statusMessage = {\n \"messageId\": messageId,\n \"timestamp\": timestamp,\n \"clientCode\": clientCode,\n \"deviceId\": deviceId,\n \"deviceType\": deviceType,\n \"version\": \"1.0\",\n \"data\": {\n \"status\": {\n \"online\": true,\n \"lastHeartbeat\": timestamp,\n \"uptime\": 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(\"设备状态心跳已发送,发布到主题: \" + msg.topic);\n\nreturn msg;"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"outputs"</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">"timeout"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"noerr"</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">"initialize"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"finalize"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"libs"</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span>
|
<span class="w"> </span><span class="nt">"x"</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">"y"</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">"wires"</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">"573842ea77192dbb"</span><span class="p">,</span>
|
<span class="w"> </span><span class="s2">"4c630c164e08dc2c"</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">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"7f9acf10d0c6085d"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"inject"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"z"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1407d4531e19a951"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"初始化全局配置"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"props"</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">"p"</span><span class="p">:</span><span class="w"> </span><span class="s2">"payload"</span>
|
<span class="w"> </span><span class="p">}</span>
|
<span class="w"> </span><span class="p">],</span>
|
<span class="w"> </span><span class="nt">"repeat"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"crontab"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"once"</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">"onceDelay"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"topic"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"payload"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"payloadType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"date"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"x"</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">"y"</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">"wires"</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">"6f6b825dfc5e9512"</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">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"6f6b825dfc5e9512"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"function"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"z"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1407d4531e19a951"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"设置全局配置"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"func"</span><span class="p">:</span><span class="w"> </span><span class="s2">"// 设置全局共享常量\nglobal.set(\"nameSpace\", \"Environment\");\nglobal.set(\"clientCode\", \"Data-It_XzOffice\");\nglobal.set(\"deviceId\", \"sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1\");\n\nnode.log(\"全局配置已设置: nameSpace=\" + global.get(\"nameSpace\") + \", clientCode=\" + global.get(\"clientCode\") + \", deviceId=\" + global.get(\"deviceId\"));\n\nreturn msg;"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"outputs"</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">"timeout"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"noerr"</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">"initialize"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"finalize"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"libs"</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span>
|
<span class="w"> </span><span class="nt">"x"</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">"y"</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">"wires"</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">"794c422d39898a7f"</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">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"794c422d39898a7f"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"function"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"z"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1407d4531e19a951"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"更新MQTT订阅Topic"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"func"</span><span class="p">:</span><span class="w"> </span><span class="s2">"// 从全局变量生成HomeAssistant MQTT订阅Topic\nconst deviceId = global.get(\"deviceId\") || \"sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1\";\nconst haTopic = `homeassistant/sensor/${deviceId}/state`;\n\n// 将Topic保存到全局变量供其他地方使用\nglobal.set(\"haSubscribeTopic\", haTopic);\n\nnode.log(\"HomeAssistant订阅Topic已更新: \" + haTopic);\nnode.log(\"注意:如需更改MQTT In节点的订阅Topic,请手动修改为: \" + haTopic);\n\nreturn msg;"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"outputs"</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">"timeout"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"noerr"</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">"initialize"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"finalize"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"libs"</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span>
|
<span class="w"> </span><span class="nt">"x"</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">"y"</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">"wires"</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">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"3bf854e9bd3e6937"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"inject"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"z"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1407d4531e19a951"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"启动事件"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"props"</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">"p"</span><span class="p">:</span><span class="w"> </span><span class="s2">"payload"</span>
|
<span class="w"> </span><span class="p">},</span>
|
<span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"p"</span><span class="p">:</span><span class="w"> </span><span class="s2">"topic"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"vt"</span><span class="p">:</span><span class="w"> </span><span class="s2">"str"</span>
|
<span class="w"> </span><span class="p">}</span>
|
<span class="w"> </span><span class="p">],</span>
|
<span class="w"> </span><span class="nt">"repeat"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"crontab"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"once"</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">"onceDelay"</span><span class="p">:</span><span class="w"> </span><span class="s2">"15"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"topic"</span><span class="p">:</span><span class="w"> </span><span class="s2">"shengtou/sensor/TH001_HA/events"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"payload"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"payloadType"</span><span class="p">:</span><span class="w"> </span><span class="s2">"date"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"x"</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">"y"</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">"wires"</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">"26f6196b2d6fba29"</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">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"26f6196b2d6fba29"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"function"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"z"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1407d4531e19a951"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"生成启动事件"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"func"</span><span class="p">:</span><span class="w"> </span><span class="s2">"const messageId = \"evt_startup_\" + Date.now();\nconst timestamp = Date.now();\n// 从全局变量获取共享配置\nconst nameSpace = global.get(\"nameSpace\") || \"Environment\";\nconst clientCode = global.get(\"clientCode\") || \"Data-It_XzOffice\";\nconst deviceId = global.get(\"deviceId\") || \"sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1\";\nconst deviceType = \"sensor\";\n\n// 按照胜透物联网通信协议生成事件数据\nconst eventMessage = {\n \"messageId\": messageId,\n \"timestamp\": timestamp,\n \"clientCode\": clientCode,\n \"deviceId\": deviceId,\n \"deviceType\": deviceType,\n \"version\": \"1.0\",\n \"data\": {\n \"events\": [\n {\n \"eventType\": \"startup\",\n \"eventLevel\": \"info\",\n \"eventCode\": \"EVT_001\",\n \"description\": \"HomeAssistant温度传感器代理设备启动完成\",\n \"timestamp\": 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(\"设备启动事件已生成,发布到主题: \" + msg.topic);\n\nreturn msg;"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"outputs"</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">"timeout"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"noerr"</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">"initialize"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"finalize"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"libs"</span><span class="p">:</span><span class="w"> </span><span class="p">[],</span>
|
<span class="w"> </span><span class="nt">"x"</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">"y"</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">"wires"</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">"573842ea77192dbb"</span><span class="p">,</span>
|
<span class="w"> </span><span class="s2">"4c630c164e08dc2c"</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">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mqtt-ha-broker"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mqtt-broker"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"HomeAssistant MQTT"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"broker"</span><span class="p">:</span><span class="w"> </span><span class="s2">"192.168.50.83"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"port"</span><span class="p">:</span><span class="w"> </span><span class="s2">"1883"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"clientid"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"autoConnect"</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">"usetls"</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">"protocolVersion"</span><span class="p">:</span><span class="w"> </span><span class="s2">"4"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"keepalive"</span><span class="p">:</span><span class="w"> </span><span class="s2">"60"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"cleansession"</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">"autoUnsubscribe"</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">"birthTopic"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"birthQos"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"birthPayload"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"birthMsg"</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
|
<span class="w"> </span><span class="nt">"closeTopic"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"closeQos"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"closePayload"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"closeMsg"</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
|
<span class="w"> </span><span class="nt">"willTopic"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"willQos"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"willPayload"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"willMsg"</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
|
<span class="w"> </span><span class="nt">"sessionExpiry"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span>
|
<span class="w"> </span><span class="p">},</span>
|
<span class="w"> </span><span class="p">{</span>
|
<span class="w"> </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mqtt-company-broker"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"type"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mqtt-broker"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"公司MQTT服务器"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"broker"</span><span class="p">:</span><span class="w"> </span><span class="s2">"mqtt-test.ihemodialysis.com"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"port"</span><span class="p">:</span><span class="w"> </span><span class="s2">"62183"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"clientid"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"usetls"</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">"protocolVersion"</span><span class="p">:</span><span class="w"> </span><span class="s2">"4"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"keepalive"</span><span class="p">:</span><span class="w"> </span><span class="s2">"60"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"cleansession"</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">"birthTopic"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"birthQos"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"birthPayload"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"birthMsg"</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
|
<span class="w"> </span><span class="nt">"closeTopic"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"closeQos"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"closePayload"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"closeMsg"</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
|
<span class="w"> </span><span class="nt">"willTopic"</span><span class="p">:</span><span class="w"> </span><span class="s2">"shengtou/sensor/TH001_HA/status"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"willQos"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"willPayload"</span><span class="p">:</span><span class="w"> </span><span class="s2">"{\"messageId\":\"sts_offline\",\"timestamp\":0,\"deviceId\":\"TH001_HA\",\"deviceType\":\"sensor\",\"version\":\"1.0\",\"data\":{\"status\":{\"online\":false,\"lastHeartbeat\":0,\"uptime\":0}}}"</span><span class="p">,</span>
|
<span class="w"> </span><span class="nt">"willMsg"</span><span class="p">:</span><span class="w"> </span><span class="p">{},</span>
|
<span class="w"> </span><span class="nt">"sessionExpiry"</span><span class="p">:</span><span class="w"> </span><span class="s2">""</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">¶</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">¶</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">"nameSpace"</span><span class="p">,</span><span class="w"> </span><span class="s2">"Environment"</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">"clientCode"</span><span class="p">,</span><span class="w"> </span><span class="s2">"Data-It_XzOffice"</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">"deviceId"</span><span class="p">,</span><span class="w"> </span><span class="s2">"sensor.miaomiaoc_cn_blt_3_11a1sbr5k5o01_t2_temperature_p_2_1"</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">¶</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">« Previous</a></span>
|
|
|
<span><a href="../errorsQA/" style="color: #fcfcfc">Next »</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>
|