<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <id>https://www.thingspanel.io/blog</id>
    <title>ThingsPanel IoT Platform Blog</title>
    <updated>2023-01-31T00:00:00.000Z</updated>
    <generator>https://github.com/jpmonette/feed</generator>
    <link rel="alternate" href="https://www.thingspanel.io/blog"/>
    <subtitle>ThingsPanel IoT Platform Blog</subtitle>
    <icon>https://www.thingspanel.io/img/favicon.ico</icon>
    <entry>
        <title type="html"><![CDATA[ThingsPanel 非官方标准MQTT协议设备接入]]></title>
        <id>https://www.thingspanel.io/blog/script</id>
        <link href="https://www.thingspanel.io/blog/script"/>
        <updated>2023-01-31T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[问题]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="问题">问题<a href="https://www.thingspanel.io/blog/script#%E9%97%AE%E9%A2%98" class="hash-link" aria-label="Direct link to 问题" title="Direct link to 问题" translate="no">​</a></h2>
<ol>
<li class="">
<p>mqtt设备/网关<code>发送和订阅主题</code>与平台不一致并无法修改，怎么接入ThingsPanel平台?</p>
</li>
<li class="">
<p>mqtt设备/网关<code>json报文规范</code>与平台规范不一致，怎么接入ThingsPanel平台?</p>
</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="使用规则引擎转发设备数据">使用规则引擎转发设备数据<a href="https://www.thingspanel.io/blog/script#%E4%BD%BF%E7%94%A8%E8%A7%84%E5%88%99%E5%BC%95%E6%93%8E%E8%BD%AC%E5%8F%91%E8%AE%BE%E5%A4%87%E6%95%B0%E6%8D%AE" class="hash-link" aria-label="Direct link to 使用规则引擎转发设备数据" title="Direct link to 使用规则引擎转发设备数据" translate="no">​</a></h2>
<p>使用规则引擎转发设备数据的方式常用来解决第一种问题。</p>
<ol>
<li class="">在规则引擎中新建一条接入规则</li>
<li class="">拖拽一个<code>mqtt in</code>节点，填写设备主题接入数据</li>
<li class="">再拖拽一个<code>mqtt out</code>节点，与<code>mqtt in</code>节点连线</li>
<li class="">在<code>mqtt out</code>配置中需要添加新的mqtt-broker节点，根据平台mqtt网关/设备接入规则填写主题和认证方式（AccessToken接入填写用户名,MQTTBasic认证填写用户名和密码）</li>
<li class="">平台到设备的通信参考以上步骤</li>
<li class="">除了以上节点，合理使用其他功能节点，也可以转换报文规范并对设备传输的值加工和处理</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="使用编辑参数页面的数据处理脚本功能">使用编辑参数页面的<code>数据处理脚本</code>功能<a href="https://www.thingspanel.io/blog/script#%E4%BD%BF%E7%94%A8%E7%BC%96%E8%BE%91%E5%8F%82%E6%95%B0%E9%A1%B5%E9%9D%A2%E7%9A%84%E6%95%B0%E6%8D%AE%E5%A4%84%E7%90%86%E8%84%9A%E6%9C%AC%E5%8A%9F%E8%83%BD" class="hash-link" aria-label="Direct link to 使用编辑参数页面的数据处理脚本功能" title="Direct link to 使用编辑参数页面的数据处理脚本功能" translate="no">​</a></h2>
<p>数据处理脚本功能可解决第二种问题，它的原理相当于中间件。</p>
<ol>
<li class="">创建设备后，点击编辑参数，在数据处理下拉框选择<code>自定义协议</code></li>
<li class="">在弹出的<code>自定义数据解析脚本</code>对话框中输入<code>上行解析脚本</code>和<code>下行解析脚本</code></li>
<li class="">保存后创建其他同类设备的时候可以直接选择解析脚本</li>
<li class="">数据处理脚本通常还可对设备传输的值做加工处理</li>
<li class="">具体细节可以参考下面提供给的解析案例</li>
</ol>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="案例">案例<a href="https://www.thingspanel.io/blog/script#%E6%A1%88%E4%BE%8B" class="hash-link" aria-label="Direct link to 案例" title="Direct link to 案例" translate="no">​</a></h2>
<p>网关设备平台规范报文：</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	"TH180001": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">		"temp": 26.5,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">		"hum": 45.5</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	},</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	"TH180002": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">		"temp": 26.5,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">		"hum": 45.5</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre></div></div>
<p>非规范设备报文：</p>
<div class="language-json codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-json codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token plain">{</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	"sensorDatas": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">		"TH180001": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">			"temp": 265,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">			"hum": 455</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">		},</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">		"TH180002": {</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">			"temp": 265,</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">			"hum": 455</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">		}</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	},</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">	"type": 2</span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">}</span><br></span></code></pre></div></div>
<p>以上行解析脚本为例：</p>
<ol>
<li class="">分析发现设备发来的报文多了一层嵌套，并且数值都未做处理</li>
<li class="">创建网关设备，添加两个子设备。（注意子设备地址在编辑参数中填写，同一网关中不可重复，如下图）
<img decoding="async" loading="lazy" src="https://www.thingspanel.io/assets/images/compatible_device_02-f21109405ff9dd991408ea29f9ad7609.png" width="2560" height="1297" class="img_ev3q"></li>
<li class="">首先编写代码<!-- -->
<div class="language-javascript codeBlockContainer_Ckt0 theme-code-block" style="--prism-color:#393A34;--prism-background-color:#f6f8fa"><div class="codeBlockContent_QJqH"><pre tabindex="0" class="prism-code language-javascript codeBlock_bY9V thin-scrollbar" style="color:#393A34;background-color:#f6f8fa"><code class="codeBlockLines_e6Vv"><span class="token-line" style="color:#393A34"><span class="token keyword" style="color:#00009f">var</span><span class="token plain"> device_msg </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">'{"sensorDatas":{"TH180001":{"temp":265,"hum":455},"TH180002":{"temp":26.5,"hum":45.5}},"type":2}'</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">var</span><span class="token plain"> public_topic </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"gateway/attributes"</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">var</span><span class="token plain"> msg </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">encodeInp</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">device_msg</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain">public_topic</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token console class-name">console</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">log</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">msg</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">function</span><span class="token plain"> </span><span class="token function" style="color:#d73a49">encodeInp</span><span class="token punctuation" style="color:#393A34">(</span><span class="token parameter">msg</span><span class="token parameter punctuation" style="color:#393A34">,</span><span class="token parameter"> topic</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token comment" style="color:#999988;font-style:italic">// 将设备自定义msg（自定义形式）数据转换为json形式数据, 设备上报数据到物联网平台时调用</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// 入参：topic string 设备上报消息的 topic</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// 入参：msg byte[] 数组 不能为空</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// 出参：string</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// 处理完后将对象转回字符串形式</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// 例，byte[]转string：var msgString = String.fromCharCode.apply(null, msg);</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// 例，string转jsonObj：msgJson = JSON.parse(msgString);</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token comment" style="color:#999988;font-style:italic">// 例，jsonObj转string：msgString = JSON.stringify(msgJson);</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token keyword" style="color:#00009f">var</span><span class="token plain"> msgString </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token known-class-name class-name">String</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">fromCharCode</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">apply</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword null nil" style="color:#00009f">null</span><span class="token punctuation" style="color:#393A34">,</span><span class="token plain"> msg</span><span class="token punctuation" style="color:#393A34">)</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">if</span><span class="token plain"> </span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">topic </span><span class="token operator" style="color:#393A34">===</span><span class="token plain"> </span><span class="token string" style="color:#e3116c">"gateway/attributes"</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword" style="color:#00009f">var</span><span class="token plain"> jsonObj </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token known-class-name class-name">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">parse</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">msgString</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        newObj </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> jsonObj</span><span class="token punctuation" style="color:#393A34">.</span><span class="token property-access">sensorDatas</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token keyword control-flow" style="color:#00009f">for</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">var</span><span class="token plain"> key </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> newObj</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token keyword control-flow" style="color:#00009f">for</span><span class="token punctuation" style="color:#393A34">(</span><span class="token keyword" style="color:#00009f">var</span><span class="token plain"> k </span><span class="token keyword" style="color:#00009f">in</span><span class="token plain"> newObj</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">key</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">{</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">                newObj</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">key</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">k</span><span class="token punctuation" style="color:#393A34">]</span><span class="token plain"> </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> newObj</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">key</span><span class="token punctuation" style="color:#393A34">]</span><span class="token punctuation" style="color:#393A34">[</span><span class="token plain">k</span><span class="token punctuation" style="color:#393A34">]</span><span class="token operator" style="color:#393A34">/</span><span class="token number" style="color:#36acaa">10</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">            </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">        msg </span><span class="token operator" style="color:#393A34">=</span><span class="token plain"> </span><span class="token known-class-name class-name">JSON</span><span class="token punctuation" style="color:#393A34">.</span><span class="token method function property-access" style="color:#d73a49">stringify</span><span class="token punctuation" style="color:#393A34">(</span><span class="token plain">newObj</span><span class="token punctuation" style="color:#393A34">)</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token punctuation" style="color:#393A34">}</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain">    </span><span class="token keyword control-flow" style="color:#00009f">return</span><span class="token plain"> msg</span><span class="token punctuation" style="color:#393A34">;</span><span class="token plain"></span><br></span><span class="token-line" style="color:#393A34"><span class="token plain"></span><span class="token punctuation" style="color:#393A34">}</span><br></span></code></pre></div></div>
</li>
<li class="">使用在线js调试工具,这里用的是：<a href="https://www.lddgo.net/code/runcode/javascript" target="_blank" rel="noopener noreferrer" class="">https://www.lddgo.net/code/runcode/javascript</a>
<img decoding="async" loading="lazy" src="https://www.thingspanel.io/assets/images/compatible_device_01-54a5cf338fe8323e4aebea0d87cf7683.png" width="2560" height="1297" class="img_ev3q"></li>
<li class="">调试好以后，将函数粘贴进脚本保存（脚本在网关的编辑参数中，如图）
<img decoding="async" loading="lazy" src="https://www.thingspanel.io/assets/images/compatible_device_03-5d15e42e6967fca2e781c2b8c57f2c93.png" width="2560" height="1297" class="img_ev3q">
<img decoding="async" loading="lazy" src="https://www.thingspanel.io/assets/images/compatible_device_04-4124f23bf20e07e0fd8641d71dfd6f5c.png" width="2560" height="1297" class="img_ev3q"></li>
<li class="">下行脚本的编写也同上</li>
</ol>]]></content>
        <author>
            <name>hezhuo</name>
            <uri>https://github.com/hezhuozhuo</uri>
        </author>
        <category label="ThingsPanel" term="ThingsPanel"/>
        <category label="MQTT" term="MQTT"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[ThingsPanel-0.3.0 发布，增加规则引擎、权限系统、优化设备接入]]></title>
        <id>https://www.thingspanel.io/blog/thingspanel-ver0.3.0-release</id>
        <link href="https://www.thingspanel.io/blog/thingspanel-ver0.3.0-release"/>
        <updated>2022-08-15T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[发布说明]]></summary>
        <content type="html"><![CDATA[<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="发布说明">发布说明<a href="https://www.thingspanel.io/blog/thingspanel-ver0.3.0-release#%E5%8F%91%E5%B8%83%E8%AF%B4%E6%98%8E" class="hash-link" aria-label="Direct link to 发布说明" title="Direct link to 发布说明" translate="no">​</a></h2>
<p>这次的发布修改了之前用户提出的众多问题，尤其是大规模设备的管理、复杂设备的接入、如何高效的将数据转发给第三方。另外这次也是对性能进行了一个整体的测试，模拟10000个设备对系统进行了压力测试，并实现了单TimescaleDB节点5000设备/秒接入能力（4核心8G）。在权限方面，横向精细到操作和按钮，建立了较为完整的RBAC权限支持。当然也包括很多细节改进。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="系统演示">系统演示<a href="https://www.thingspanel.io/blog/thingspanel-ver0.3.0-release#%E7%B3%BB%E7%BB%9F%E6%BC%94%E7%A4%BA" class="hash-link" aria-label="Direct link to 系统演示" title="Direct link to 系统演示" translate="no">​</a></h2>
<p>演示地址：<a href="http://dev.thingspanel.cn/" target="_blank" rel="noopener noreferrer" class="">http://dev.thingspanel.cn</a></p>
<p>账号密码</p>
<ul>
<li class="">用户名：<a href="mailto:admin@thingspanel.cn" target="_blank" rel="noopener noreferrer" class="">admin@thingspanel.cn</a></li>
<li class="">密码：123456</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="新增功能">新增功能​<a href="https://www.thingspanel.io/blog/thingspanel-ver0.3.0-release#%E6%96%B0%E5%A2%9E%E5%8A%9F%E8%83%BD" class="hash-link" aria-label="Direct link to 新增功能​" title="Direct link to 新增功能​" translate="no">​</a></h2>
<ul>
<li class="">增加了 Redis 作为缓存模块</li>
<li class="">增加了 RBAC 权限管理模块，使用的是 Casbin 权限框架，权限粒度具体到设备、按钮或者接口</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://www.thingspanel.io/assets/images/2022-08-15-11-25-27-edcc0589a23120a34297081a4ca00b08.png" width="1920" height="942" class="img_ev3q"></p>
<ul>
<li class="">增加了角色管理页面，支持多个角色。</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://www.thingspanel.io/assets/images/2022-08-15-11-28-22-ef641defb0c7ef82e37eff61dec239b5.png" width="2736" height="1548" class="img_ev3q"></p>
<ul>
<li class="">增加了权限管理页面，权限精细到操作。</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://www.thingspanel.io/assets/images/2022-08-15-11-29-21-07cf8310aba9a9d2182610e9b595c74c.png" width="1920" height="942" class="img_ev3q"></p>
<ul>
<li class="">系统后端增加了对 Docker 环境变量的支持，方便配置。</li>
<li class="">简化了部署，增加了对华为云 / 阿里云的适配。</li>
<li class="">增加了接入规则引擎和数据转发功能。</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://www.thingspanel.io/assets/images/2022-08-15-11-30-05-615543ea96b534fc116214c3caa54679.png" width="1920" height="942" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://www.thingspanel.io/assets/images/2022-08-15-11-30-15-f7ad6ee09cb2ad7f29898a1d6d5c087a.png" width="1920" height="942" class="img_ev3q"></p>
<ul>
<li class="">重写了业务 - 设备分组 - 设备模块，支持设备无限分组</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://www.thingspanel.io/assets/images/2022-08-15-11-30-50-c66dceb356a3b33ff680550f2bef2a24.png" width="1920" height="942" class="img_ev3q"></p>
<p><img decoding="async" loading="lazy" src="https://www.thingspanel.io/assets/images/2022-08-15-11-30-59-4609e9396e966f1dea780ef3b283bee9.png" width="911" height="435" class="img_ev3q"></p>
<ul>
<li class="">增加了操作设备的日志，支持查询手动操作和自动操作记录</li>
</ul>
<p><img decoding="async" loading="lazy" src="https://www.thingspanel.io/assets/images/2022-08-15-11-31-15-05ace52bf2c3aa8873d76e1d9c768a2c.png" width="1920" height="942" class="img_ev3q"></p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="优化和修复">优化和修复​<a href="https://www.thingspanel.io/blog/thingspanel-ver0.3.0-release#%E4%BC%98%E5%8C%96%E5%92%8C%E4%BF%AE%E5%A4%8D" class="hash-link" aria-label="Direct link to 优化和修复​" title="Direct link to 优化和修复​" translate="no">​</a></h2>
<ul>
<li class="">优化了首次登录加载速度。</li>
<li class="">优化了整体的 UI。</li>
<li class="">优化了部分表索引和排序，提高了操作的流畅度。</li>
<li class="">提高了压力测试标准，对各方面性能和结构进行了优化。</li>
<li class="">优化了自动化的告警和控制策略。</li>
<li class="">重写了用户添加功能和页面。</li>
<li class="">优化了告警信息页面。</li>
</ul>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="下一个版本计划">下一个版本计划<a href="https://www.thingspanel.io/blog/thingspanel-ver0.3.0-release#%E4%B8%8B%E4%B8%80%E4%B8%AA%E7%89%88%E6%9C%AC%E8%AE%A1%E5%88%92" class="hash-link" aria-label="Direct link to 下一个版本计划" title="Direct link to 下一个版本计划" translate="no">​</a></h2>
<p>下一个版本编号0.4.0，功能上计划借鉴HomeAssistant，实现更为开放的结构，增加共享图表组件组，使开发插件更为简单，更高的插件开发效率。ThingsPanel之前存在的重大结构性问题将得到改进，尤其在大型集成项目上，效率将非常突出。</p>]]></content>
        <author>
            <name>zjhong</name>
            <uri>https://github.com/zjhong</uri>
        </author>
        <category label="ThingsPanel" term="ThingsPanel"/>
        <category label="规则引擎" term="规则引擎"/>
        <category label="权限系统" term="权限系统"/>
        <category label="性能测试" term="性能测试"/>
    </entry>
    <entry>
        <title type="html"><![CDATA[ThingsPanel 发布物联网手机客户端（多图）]]></title>
        <id>https://www.thingspanel.io/blog/thingspanel-app</id>
        <link href="https://www.thingspanel.io/blog/thingspanel-app"/>
        <updated>2022-07-22T00:00:00.000Z</updated>
        <summary type="html"><![CDATA[ThingsPanel 是一款物联网底层开源软件，主要功能是采集设备数据、可视化、自动化控制，为众多集成商、设备商、方案商提供快速的产品和交付方案。]]></summary>
        <content type="html"><![CDATA[<p>ThingsPanel 是一款物联网底层开源软件，主要功能是采集设备数据、可视化、自动化控制，为众多集成商、设备商、方案商提供快速的产品和交付方案。</p>
<p>ThingsPanel 的手机端 APP 用于对 ThingsPanel 提供移动管理和控制支持。主要实现的功能包括监测、控制、策略、以及设备添加管理等功能。是 ThingsPanel 的轻型使用客户端，支持 SAAS 场景。</p>
<h2 class="anchor anchorTargetStickyNavbar_Vzrq" id="手机端的功能特点包括">手机端的功能特点包括：<a href="https://www.thingspanel.io/blog/thingspanel-app#%E6%89%8B%E6%9C%BA%E7%AB%AF%E7%9A%84%E5%8A%9F%E8%83%BD%E7%89%B9%E7%82%B9%E5%8C%85%E6%8B%AC" class="hash-link" aria-label="Direct link to ��手机端的功能特点包括：" title="Direct link to 手机端的功能特点包括：" translate="no">​</a></h2>
<ul>
<li class="">使用 Uniapp 开发，可以方便的编译成 iOS，安卓，微信小程序以及其他小程序，H5。</li>
<li class="">可以扫码添加设备（设备需要在后台先导入）。</li>
<li class="">查看监测值。</li>
<li class="">切换智能化项目和设备分组。</li>
<li class="">手动控制。</li>
<li class="">设置控制策略，</li>
<li class="">分为设备触发和时间条件触发两种。</li>
<li class="">查看操作日志。</li>
<li class="">个人账号管理功能。</li>
<li class="">手机验证码登录。</li>
</ul>
<p>ThingsPanel-APP手机客户端登录页面
<img decoding="async" loading="lazy" alt="ThingsPanel-APP登录页" src="https://www.thingspanel.io/assets/images/thingspanel-app-login-c0f332e33ebb51113ab0296a79a29d71.webp" width="519" height="1031" class="img_ev3q"></p>
<p>ThingsPanel-APP手机客户端首页
<img decoding="async" loading="lazy" alt="ThingsPanel-APP" src="https://www.thingspanel.io/assets/images/thingspanel-app-home-519993a05bd1fdc486ffef36daba299a.webp" width="519" height="1031" class="img_ev3q"></p>]]></content>
        <author>
            <name>zjhong</name>
            <uri>https://github.com/zjhong</uri>
        </author>
        <category label="ThingsPanel" term="ThingsPanel"/>
        <category label="APP" term="APP"/>
    </entry>
</feed>