diff --git a/404.html b/404.html index cb19f46109b75036c7c922f630f866a0870c3475..718c0240969e958b2fd4aac2085d1465f2f9693e 100644 --- a/404.html +++ b/404.html @@ -6,13 +6,13 @@ Page Not Found | IoTSharp 在线文档 - +
Skip to main content

Page Not Found

We could not find what you were looking for.

Please contact the owner of the site that linked you to the original URL and let them know their link is broken.

- + \ No newline at end of file diff --git a/assets/js/b2206c24.2705bf10.js b/assets/js/b2206c24.e613e52a.js similarity index 98% rename from assets/js/b2206c24.2705bf10.js rename to assets/js/b2206c24.e613e52a.js index 5c02d8ee6f4cb403199b8ea24412ae71c6289e90..4b96ba0afa52aa7e80e45526ad895db467093d4c 100644 --- a/assets/js/b2206c24.2705bf10.js +++ b/assets/js/b2206c24.e613e52a.js @@ -1 +1 @@ -"use strict";(self.webpackChunkiotsharp=self.webpackChunkiotsharp||[]).push([[7892],{3905:function(t,e,r){r.d(e,{Zo:function(){return s},kt:function(){return d}});var n=r(7294);function o(t,e,r){return e in t?Object.defineProperty(t,e,{value:r,enumerable:!0,configurable:!0,writable:!0}):t[e]=r,t}function i(t,e){var r=Object.keys(t);if(Object.getOwnPropertySymbols){var n=Object.getOwnPropertySymbols(t);e&&(n=n.filter((function(e){return Object.getOwnPropertyDescriptor(t,e).enumerable}))),r.push.apply(r,n)}return r}function a(t){for(var e=1;e=0||(o[r]=t[r]);return o}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}var u=n.createContext({}),l=function(t){var e=n.useContext(u),r=e;return t&&(r="function"==typeof t?t(e):a(a({},e),t)),r},s=function(t){var e=l(t.components);return n.createElement(u.Provider,{value:e},t.children)},p={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},f=n.forwardRef((function(t,e){var r=t.components,o=t.mdxType,i=t.originalType,u=t.parentName,s=c(t,["components","mdxType","originalType","parentName"]),f=l(r),d=o,b=f["".concat(u,".").concat(d)]||f[d]||p[d]||i;return r?n.createElement(b,a(a({ref:e},s),{},{components:r})):n.createElement(b,a({ref:e},s))}));function d(t,e){var r=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var i=r.length,a=new Array(i);a[0]=f;var c={};for(var u in e)hasOwnProperty.call(e,u)&&(c[u]=e[u]);c.originalType=t,c.mdxType="string"==typeof t?t:o,a[1]=c;for(var l=2;l=0||(o[r]=t[r]);return o}(t,e);if(Object.getOwnPropertySymbols){var i=Object.getOwnPropertySymbols(t);for(n=0;n=0||Object.prototype.propertyIsEnumerable.call(t,r)&&(o[r]=t[r])}return o}var u=n.createContext({}),l=function(t){var e=n.useContext(u),r=e;return t&&(r="function"==typeof t?t(e):a(a({},e),t)),r},s=function(t){var e=l(t.components);return n.createElement(u.Provider,{value:e},t.children)},p={inlineCode:"code",wrapper:function(t){var e=t.children;return n.createElement(n.Fragment,{},e)}},f=n.forwardRef((function(t,e){var r=t.components,o=t.mdxType,i=t.originalType,u=t.parentName,s=c(t,["components","mdxType","originalType","parentName"]),f=l(r),d=o,b=f["".concat(u,".").concat(d)]||f[d]||p[d]||i;return r?n.createElement(b,a(a({ref:e},s),{},{components:r})):n.createElement(b,a({ref:e},s))}));function d(t,e){var r=arguments,o=e&&e.mdxType;if("string"==typeof t||o){var i=r.length,a=new Array(i);a[0]=f;var c={};for(var u in e)hasOwnProperty.call(e,u)&&(c[u]=e[u]);c.originalType=t,c.mdxType="string"==typeof t?t:o,a[1]=c;for(var l=2;l=a)&&Object.keys(o.O).every((function(e){return o.O[e](n[u])}))?n.splice(u--,1):(f=!1,a0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[n,r,a]},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},o.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var a=Object.create(null);o.r(a);var c={};t=t||[null,n({}),n([]),n(n)];for(var f=2&r&&e;"object"==typeof f&&!~t.indexOf(f);f=n(f))Object.getOwnPropertyNames(f).forEach((function(t){c[t]=function(){return e[t]}}));return c.default=function(){return e},o.d(a,c),a},o.d=function(e,t){for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.f={},o.e=function(e){return Promise.all(Object.keys(o.f).reduce((function(t,n){return o.f[n](e,t),t}),[]))},o.u=function(e){return"assets/js/"+({53:"935f2afb",533:"b2b675dd",594:"56ff1900",879:"f89a48e8",1004:"3fc0374d",1113:"e92b9761",1129:"a85c2565",1477:"b2f554cd",1713:"a7023ddc",2162:"73a2e67c",2449:"efdf10ba",2535:"814f3328",2829:"c9b73897",3085:"1f391b9e",3089:"a6aa9e1f",3608:"9e4087bc",3640:"3477043f",4013:"01a85c17",4069:"a1402aa2",4195:"c4f5d8e4",4571:"12418a3d",4645:"4e4af493",4934:"7302895b",4943:"be98181b",5199:"eeec0974",5217:"af7c3c85",5612:"b26f26e7",6068:"40c6f67f",6103:"ccc49370",6408:"898a7946",6598:"f3c88a92",6655:"4dd18239",6928:"7e1a15c5",7414:"393be207",7562:"44b3aa03",7860:"ed6d1ca8",7892:"b2206c24",7918:"17896441",8569:"c0a3ef7c",8592:"4a4400a9",8610:"6875c492",8732:"09a89718",9279:"b64b6df2",9514:"1be78505",9671:"0e384e19",9960:"19b30b0f"}[e]||e)+"."+{53:"a0bf4a2c",533:"6ec91450",594:"b3cb8eb9",879:"149294f2",1004:"20046ca7",1113:"0440f1a7",1129:"11e8b628",1477:"79b2e235",1713:"3a564a00",2162:"738aa6a6",2449:"90a36521",2535:"306d167c",2829:"36d1b1da",3085:"353907a8",3089:"5627737e",3608:"12d8eacc",3640:"2fb55378",4013:"76a192ee",4069:"6a76d42a",4195:"1b30da21",4571:"478d76e9",4608:"3440db81",4645:"68e18259",4934:"281b791b",4943:"e577cd27",5199:"07750283",5217:"94fcc25c",5612:"1b5aa8cd",6068:"b0e547d3",6103:"99157679",6408:"bddd724b",6598:"422f88e3",6655:"9cc4876f",6926:"7bd2d2dc",6928:"66660793",7414:"1dea5499",7562:"2301a777",7860:"b698f6e3",7892:"2705bf10",7918:"8eabf4a4",8569:"94f3e664",8592:"8ca27bd9",8610:"baae662c",8732:"f2ee47af",9279:"fa94ccb3",9514:"27ea0f70",9671:"4a98a806",9960:"bbec8c9d"}[e]+".js"},o.miniCssF=function(e){},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},a="iotsharp:",o.l=function(e,t,n,c){if(r[e])r[e].push(t);else{var f,u;if(void 0!==n)for(var i=document.getElementsByTagName("script"),d=0;d=a)&&Object.keys(o.O).every((function(e){return o.O[e](n[u])}))?n.splice(u--,1):(f=!1,a0&&e[d-1][2]>a;d--)e[d]=e[d-1];e[d]=[n,r,a]},o.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return o.d(t,{a:t}),t},n=Object.getPrototypeOf?function(e){return Object.getPrototypeOf(e)}:function(e){return e.__proto__},o.t=function(e,r){if(1&r&&(e=this(e)),8&r)return e;if("object"==typeof e&&e){if(4&r&&e.__esModule)return e;if(16&r&&"function"==typeof e.then)return e}var a=Object.create(null);o.r(a);var c={};t=t||[null,n({}),n([]),n(n)];for(var f=2&r&&e;"object"==typeof f&&!~t.indexOf(f);f=n(f))Object.getOwnPropertyNames(f).forEach((function(t){c[t]=function(){return e[t]}}));return c.default=function(){return e},o.d(a,c),a},o.d=function(e,t){for(var n in t)o.o(t,n)&&!o.o(e,n)&&Object.defineProperty(e,n,{enumerable:!0,get:t[n]})},o.f={},o.e=function(e){return Promise.all(Object.keys(o.f).reduce((function(t,n){return o.f[n](e,t),t}),[]))},o.u=function(e){return"assets/js/"+({53:"935f2afb",533:"b2b675dd",594:"56ff1900",879:"f89a48e8",1004:"3fc0374d",1113:"e92b9761",1129:"a85c2565",1477:"b2f554cd",1713:"a7023ddc",2162:"73a2e67c",2449:"efdf10ba",2535:"814f3328",2829:"c9b73897",3085:"1f391b9e",3089:"a6aa9e1f",3608:"9e4087bc",3640:"3477043f",4013:"01a85c17",4069:"a1402aa2",4195:"c4f5d8e4",4571:"12418a3d",4645:"4e4af493",4934:"7302895b",4943:"be98181b",5199:"eeec0974",5217:"af7c3c85",5612:"b26f26e7",6068:"40c6f67f",6103:"ccc49370",6408:"898a7946",6598:"f3c88a92",6655:"4dd18239",6928:"7e1a15c5",7414:"393be207",7562:"44b3aa03",7860:"ed6d1ca8",7892:"b2206c24",7918:"17896441",8569:"c0a3ef7c",8592:"4a4400a9",8610:"6875c492",8732:"09a89718",9279:"b64b6df2",9514:"1be78505",9671:"0e384e19",9960:"19b30b0f"}[e]||e)+"."+{53:"a0bf4a2c",533:"6ec91450",594:"b3cb8eb9",879:"149294f2",1004:"20046ca7",1113:"0440f1a7",1129:"11e8b628",1477:"79b2e235",1713:"3a564a00",2162:"738aa6a6",2449:"90a36521",2535:"306d167c",2829:"36d1b1da",3085:"353907a8",3089:"5627737e",3608:"12d8eacc",3640:"2fb55378",4013:"76a192ee",4069:"6a76d42a",4195:"1b30da21",4571:"478d76e9",4608:"3440db81",4645:"68e18259",4934:"281b791b",4943:"e577cd27",5199:"07750283",5217:"94fcc25c",5612:"1b5aa8cd",6068:"b0e547d3",6103:"99157679",6408:"bddd724b",6598:"422f88e3",6655:"9cc4876f",6926:"7bd2d2dc",6928:"66660793",7414:"1dea5499",7562:"2301a777",7860:"b698f6e3",7892:"e613e52a",7918:"8eabf4a4",8569:"94f3e664",8592:"8ca27bd9",8610:"baae662c",8732:"f2ee47af",9279:"fa94ccb3",9514:"27ea0f70",9671:"4a98a806",9960:"bbec8c9d"}[e]+".js"},o.miniCssF=function(e){},o.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),o.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r={},a="iotsharp:",o.l=function(e,t,n,c){if(r[e])r[e].push(t);else{var f,u;if(void 0!==n)for(var i=document.getElementsByTagName("script"),d=0;d Archive | IoTSharp 在线文档 - + - + \ No newline at end of file diff --git a/blog/first-version-doc/index.html b/blog/first-version-doc/index.html index ebb13c0a1cdf730e9d4a81140d624d9caad04329..7f9692fa35d42bf333fe05c1fd2a741ef4161f02 100644 --- a/blog/first-version-doc/index.html +++ b/blog/first-version-doc/index.html @@ -6,13 +6,13 @@ 第一版文档发布 | IoTSharp 在线文档 - + - + \ No newline at end of file diff --git a/blog/index.html b/blog/index.html index 9c8393b5feef9c2ec8c1734c00dba9d26cd6129f..f8b38606e6adba61edeff3074609e1c76e8fdc4c 100644 --- a/blog/index.html +++ b/blog/index.html @@ -6,13 +6,13 @@ Blog | IoTSharp 在线文档 - +

· One min read
maikebing

IoTSharp 是一个 基于.Net Core 开源的物联网基础平台, 支持 HTTP、MQTT 、CoAp 协议, 属性数据和遥测数据协议简单类型丰富,简单设置即可将数据存储在PostgreSql、MySql、Oracle、SQLServer、Sqlite,是一个用于数据收集、处理、可视化与设备管理的 IoT 平台.

· 2 min read
maikebing

2022年度OSC中国开源项目奖

图片

特别奖项:最具极客精神奖

经组委会讨论决定,2022 年度 OSC 中国开源项目评选「最具极客精神奖」获奖者是开源项目 IoTSharp 创始人 麦壳饼

今年的年度 OSC 中国开源项目评选新策划了「最火热中国开源项目社区」奖项,并且增加了全新的 “极客” 玩法。在此背景下,开发者纷纷施展才华,积极为开源项目贡献 “热度值”

其中,IoTSharp 项目的作者 @麦壳饼 在了解活动玩法后,很快就用 .NET (C#) 实现了分别支持 Win 64 和 Linux x64 的脚本。

图片

不仅如此,在评选活动进行期间他更是直接将贡献热度的工具开源了出来:https://gitee.com/maikebing/oschina2022,并在后续积极优化代码。

图片

热爱开源,无私分享,追求极致,这正是 “极客精神” 的真实写照。

· One min read
maikebing

2022年2月14日情人节, 我们发布了第一版文档, 在这里特别感谢王海东先生(535915157@qq.com), 推荐了博客平台, 也实现了第一个教程。

- + \ No newline at end of file diff --git a/blog/osc2022/index.html b/blog/osc2022/index.html index 816bfcf3bb31493316d440de75b7425555c96bdb..f084dbc768e656e5444a9b38fa2c39f55b699912 100644 --- a/blog/osc2022/index.html +++ b/blog/osc2022/index.html @@ -6,13 +6,13 @@ IoTSharp凭借“热度值”入围《2022年度OSC中国开源项目奖》 和《最具极客精神奖》 | IoTSharp 在线文档 - +

IoTSharp凭借“热度值”入围《2022年度OSC中国开源项目奖》 和《最具极客精神奖》

· 2 min read
maikebing

2022年度OSC中国开源项目奖

图片

特别奖项:最具极客精神奖

经组委会讨论决定,2022 年度 OSC 中国开源项目评选「最具极客精神奖」获奖者是开源项目 IoTSharp 创始人 麦壳饼

今年的年度 OSC 中国开源项目评选新策划了「最火热中国开源项目社区」奖项,并且增加了全新的 “极客” 玩法。在此背景下,开发者纷纷施展才华,积极为开源项目贡献 “热度值”

其中,IoTSharp 项目的作者 @麦壳饼 在了解活动玩法后,很快就用 .NET (C#) 实现了分别支持 Win 64 和 Linux x64 的脚本。

图片

不仅如此,在评选活动进行期间他更是直接将贡献热度的工具开源了出来:https://gitee.com/maikebing/oschina2022,并在后续积极优化代码。

图片

热爱开源,无私分享,追求极致,这正是 “极客精神” 的真实写照。

- + \ No newline at end of file diff --git a/blog/tags/index.html b/blog/tags/index.html index 3b5cc830f83fd0da11e5e9398d54907104454081..bb6971c3e5c9edb0e2c68c9257363cac7169a06f 100644 --- a/blog/tags/index.html +++ b/blog/tags/index.html @@ -6,13 +6,13 @@ Tags | IoTSharp 在线文档 - + - + \ No newline at end of file diff --git a/blog/tags/iotsharp/index.html b/blog/tags/iotsharp/index.html index 7c2e89a155084ebc2b284623e48db13b268a1b1f..b223671fbea69d01a82208717dc9331e2dcfc8f5 100644 --- a/blog/tags/iotsharp/index.html +++ b/blog/tags/iotsharp/index.html @@ -6,13 +6,13 @@ 4 posts tagged with "iotsharp" | IoTSharp 在线文档 - +

4 posts tagged with "iotsharp"

View All Tags

· One min read
maikebing

IoTSharp 是一个 基于.Net Core 开源的物联网基础平台, 支持 HTTP、MQTT 、CoAp 协议, 属性数据和遥测数据协议简单类型丰富,简单设置即可将数据存储在PostgreSql、MySql、Oracle、SQLServer、Sqlite,是一个用于数据收集、处理、可视化与设备管理的 IoT 平台.

· 2 min read
maikebing

2022年度OSC中国开源项目奖

图片

特别奖项:最具极客精神奖

经组委会讨论决定,2022 年度 OSC 中国开源项目评选「最具极客精神奖」获奖者是开源项目 IoTSharp 创始人 麦壳饼

今年的年度 OSC 中国开源项目评选新策划了「最火热中国开源项目社区」奖项,并且增加了全新的 “极客” 玩法。在此背景下,开发者纷纷施展才华,积极为开源项目贡献 “热度值”

其中,IoTSharp 项目的作者 @麦壳饼 在了解活动玩法后,很快就用 .NET (C#) 实现了分别支持 Win 64 和 Linux x64 的脚本。

图片

不仅如此,在评选活动进行期间他更是直接将贡献热度的工具开源了出来:https://gitee.com/maikebing/oschina2022,并在后续积极优化代码。

图片

热爱开源,无私分享,追求极致,这正是 “极客精神” 的真实写照。

- + \ No newline at end of file diff --git a/blog/videos_1/index.html b/blog/videos_1/index.html index 91690969a2352f11df8f4896cbe2e09827b2cd1a..ef402363b574379fa8b2e29189613d3309121e97 100644 --- a/blog/videos_1/index.html +++ b/blog/videos_1/index.html @@ -6,13 +6,13 @@ IoTSharp培训教程第一集 开发环境安装配置、项目克隆、编译、调试、安装、登录 | IoTSharp 在线文档 - +

IoTSharp培训教程第一集 开发环境安装配置、项目克隆、编译、调试、安装、登录

· One min read
maikebing

IoTSharp 是一个 基于.Net Core 开源的物联网基础平台, 支持 HTTP、MQTT 、CoAp 协议, 属性数据和遥测数据协议简单类型丰富,简单设置即可将数据存储在PostgreSql、MySql、Oracle、SQLServer、Sqlite,是一个用于数据收集、处理、可视化与设备管理的 IoT 平台.

- + \ No newline at end of file diff --git a/blog/videos_2/index.html b/blog/videos_2/index.html index 512af3db675ac3ef203a40395149b074c289ccd1..c3fa1f4bd6834760fa70aeeabef32e3bd1c7bba8 100644 --- a/blog/videos_2/index.html +++ b/blog/videos_2/index.html @@ -6,13 +6,13 @@ IoTSharp培训教程第二集 规则链使用 | IoTSharp 在线文档 - + - + \ No newline at end of file diff --git a/docs/intro/index.html b/docs/intro/index.html index 415d73f854a56376853935b45317c2dd20496217..66cd8eeba9075bce6bd7afad0debac9abce4bb0f 100644 --- a/docs/intro/index.html +++ b/docs/intro/index.html @@ -6,13 +6,13 @@ IoTSharp 简介 | IoTSharp 在线文档 - +

IoTSharp 简介

让我们探索一下 IoTSharp 在五分钟内.

IoTSharp 是什么?

IoTSharp 是一个开源的物联网基础平台,集设备属性数据管理、遥测数据监测、RPC多模式远程控制、规则链设计引擎等强大能力,依据数字孪生概念将可见与不可见的物理设备统一孪生到数字世界,在落地上IoTSharp结合了资产管理、产品化发展的理念,让平台应用更加贴合复杂的应用场景,在协议支持上支持HTTP、MQTT 、CoAp 等多种标准物联网协议接入和非标协议的转换。

IoTSharp的系统必备有哪些?

  • [Docker]](https://www.docker.com/) 最新版本
    • 如果你要部署IoTSharp, 我们首先推荐的是docker, 以及Docker-Compose, 通过我们推荐的docker-compose.yml 你可以直接部署成功,而不用煞费周折的部署环境。
  • 关系型数据库 用来存储基础数据和属性数据。
    • PostgreSQL 验证过的版本为 PostgreSQL 11.3,12.x等。
    • MySql 验证过的版本为 MySQL 8.0.17
    • Oracle 验证过的版本为 Oracle Standard Edition 12c Release 2 , 操作系统为Cent OS 7
    • Sqlite 程序内置,均验证。 小项目推荐。
    • SQLServer 验证过的版本为 Microsoft SQL Server 2016 (RTM-GDR) (KB4019088) - 13.0.1742.0 (X64)
    • InMemory 通过EF 的内存数据库,一般用于测试 。
    • Cassandra 现在开始我们通过 EFCore.Cassandra 支持了Cassandra。
  • 时序数据库 用来存储遥测数据并提供遥测数据的查询统计等等。
    • 通过EFCore 使用关系型数据库来存储带有时间戳的数据,虽然不推荐,但不妨是一种小型项目的最佳选择。
    • InfluxDB 2.x 我们致力于推荐的时序数据库, InfluxDB集成非常好用的可视化工具, 除了不符合信创没有任何可挑剔的。
    • TDengine 我们致力于推荐的国产时序数据库, 甚至为了支持它我花了大量时间编写他的提供程序 Maikebing.EntityFrameworkCore.Taos
    • PinusDB 国产松果时序数据库, 简单易用, 我们也为他编写了提供程序, PinusDB.Data
    • TimescaleDB 基于PostgreSQL的时序数据库, 你可以直接选择它来当时序数据库也可以当关系型数据库, 一次搞定。
    • 关系数据库 分区法 , 我们有支持这种方式,但始终不推荐,除非你想只想用一个数据库且通过分区就能搞定你的数据量。
    • SingleTable 通过EF的的单表存储。 通过单表, 我们就不需要依赖于数据库或者分区等等。 小项目推荐。
  • 消息队列 我们是通过CAP项目来实现的,因此它支持的理论上我们都支持。
    • RabbitMQ 我们推荐的。
    • Kafka 测试似乎正常。
    • ZeroMQ 针对出门的ZeroMQ , 我们编写了MaiKeBing.CAP.ZeroMQ 和 MaiKeBing.HostedService.ZeroMQ 以支持它。
    • InMemory 通过它可以不需要依赖任何外接, 这是CAP提供的一种途径。 小项目推荐。
  • 消息队列存储
    • PostgreSql 如果全称用PostgreSQL 可以考虑。
    • MongoDB 我们推荐的
    • LiteDB .Net 编写的NoSQL 项目, 小项目推荐,
    • InMemory 存储在内存, 不依赖于外接。 小项目推荐。

如何部署?

如何使用docker-compose 安装IoTSharp ?

  • RMI 使用Rabbitmq 作为 EventBus, Mongodb 作为消息存储, 遥测数据使用Influx 2.0 ,这个方案中遥测数据也可以使用TDengine

  • ZPT 使用ZeroMQ 作为 EventBus, PostgreSQL 作为消息存储, 遥测数据使用 TDengine

  • ZPS 默认开发配置, IoTSharp 和 PostgreSql, 遥测数据可以通过单表或者分表。

初次使用

  • 初始租户和管理员、用户注册信息在系统发现你未初始化时自动跳转到安装界面, 填写完成后, 系统会初始化权限、基础数据等种子数据。
  • X509 CA证书用于通过证书进行保障安全通讯和关系验证, 第一次时需要调用高级管理员权限办法并写入系统, 尤其是当你使用了非管理员用户进行启动IoTSharp 时 , 因此, 需要确保第一次生成使用高权限, 后续使用低权限。

关于赞助

  • 我们接受资金以及任何方式的的捐赠,但并不意味着我们会为您承诺或担保任何事情, 也并不意味着对你使用IoTSharp带来的负面影响负有责任。 所有你使用IoTSharp造成的任何损失以及任何关联的责任等我们均不会有任何责任和义务承担,你需要为你做的决定而负责。
  • IoTSharp开源并不等于你可以用他申报项目、申请专利、提供云服务、重新包装等某种其他方式来获利但对IoTSharp毫无建树。 我们讨厌这种自私行为。
- + \ No newline at end of file diff --git a/docs/tutorial-basics/aggregate/index.html b/docs/tutorial-basics/aggregate/index.html index 3366877ca25759d905eb77d1eb2d4fd035615792..3ef6211d4447704652a396c109752daa144f4e52 100644 --- a/docs/tutorial-basics/aggregate/index.html +++ b/docs/tutorial-basics/aggregate/index.html @@ -6,13 +6,13 @@ 遥测数据聚合 | IoTSharp 在线文档 - +

遥测数据聚合

对于物联网平台来说, 聚合是非常重要的数据查询方式, IoTSharp支持指定时间段、遥测、聚合断面、聚合方式等, IoTSharp提供了统一的接口 /api/Devices/id/TelemetryData 来完成这一点。

参数示例如下:


{ "keys": "", "begin": "2022-03-23T11:44:56.488Z", "every": "1.03:14:56:166", "aggregate": "Mean" }

keys 指定了要查询那些遥测, begin 和 end决定了时间范围, end可以忽略, 但是begin必须存在, every 决定了返回的数据与数据之间的时间间隔, 比如每五分钟一条数据, 或者每1秒钟一条数据, aggregate决定了是取最大值?中值 ?或者其他。

支持情况

注意

` 目前 InfluxDB 和IoTDB 支持原生的数据聚合,分表和EFCore 关系数据库是通过IoTSharp 本地运算得到的结果, Taos 和 PinusDB 目前不支持 任何形式的聚合,TimescaleDB在后期逐步实现。

- + \ No newline at end of file diff --git a/docs/tutorial-basics/appsettings/index.html b/docs/tutorial-basics/appsettings/index.html index fa1a13f2f53f8f4d74ec71d91bfdf9379a8762de..70ef3ef5b1a44ae4602ca36e553e03f2f0041956 100644 --- a/docs/tutorial-basics/appsettings/index.html +++ b/docs/tutorial-basics/appsettings/index.html @@ -6,13 +6,13 @@ 配置IoTSharp | IoTSharp 在线文档 - +

配置IoTSharp

​ 本教程主要讲述 appsettings 的配置 , 大家可以在 代码目录或者安装文件目录看到 有很多个 appsettings.xxxxx.json 的文件, 主要的默认配置, 我们是通过 appsettings.json 配置。但是由于开发需要, 我们提供了根据数据库不通而不通的配置, 可以根据你使用情况来参考这些配置。 比如, 环境中使用Mysql , 可以把 appsettings.MySql.json 改为 appsettings.Production.json 。但推荐通过环境变量 ASPNETCORE_ENVIRONMENT 来决定使用的配置文件, 比如 ASPNETCORE_ENVIRONMENT 设置为 MySQL , 使用的配置文件就是 appsettings.MySQL.json 文件, 如果ASPNETCORE_ENVIRONMENT 设置为 Sqlite,使用的配置文件就是 appsettings.Sqlite.json 文件。于此同时, 在VS中调试时 , 也通过 launchSettings.json 文件预配了支持的数据库 环境变量和对应的文件 , 方便调试, 只需要在VS中选择调试环境即可。

数据库和中间件配置

开始使用前, 我们需要最先了解的应该是数据库, 数据如何存放, 时序数据如何存放等, 这里我们考虑到了各种情况, 多种数据库和多种中间件的组合,你可以根据你的喜好, 选择五种关系型数据库的其中一个, 也可以从我们支持的四个时序数据库中选择一个, 当然, 你可以选择在关系数据库中存储时序数据, 可以选择单表 , 也可以选择分表, 如果分表, 你可以选择按分钟, 按日, 按月, 按年,也可以选择各种支持的 消息中间件等, 下面我们描述如何配置他们:

  1. 你需要通过 "DataBase" 来指定关系型数据库, 比如指定为 "Sqlite"。
  2. 配置关系型数据库连接字符串 , 通过 "ConnectionStrings" 中的 "IoTSharp"配置项配置关系型数据库连接字符串, 比如 "Data Source=IoTSharp.db"
  3. 配置时序存储模式 , 通过 "TelemetryStorage" 来配置时序数据存储方式, 比如 我们在Sqlite中使用分表模式, 那么就需要 "Sharding" , 如果是单表就填写为 SingleTable , 如果使用InfluxDB , 则连写InfluxDB
  4. 配置时序存储连接字符串 ,通过 "ConnectionStrings"中的 "TelemetryStorage"我们配置使用Sqlite的分表模式, 那么连接字符串就是这样, “Data Source=TelemetryStorage.db”,
  5. 配置事件总线中间件, 通过配置项"EventBusMQ" 来配置消息总线使用什么中间件, 你可以配置 RabbitMQ或 内存模式 InMemory ,如果使用了InMemory可以不用配置连接字符串,请忽略 第六条。
  6. 配置事件总线连接字符串 ,通过"ConnectionStrings"中的 "EventBusMQ" 来配置连接字符串, 内存模式时不需要配人, 但比如当我们使用 RabbitMQ等中间件时则需要配置, 比如 "EventBusMQ": "amqp://root:kissme@rabbitmq:5672"
  7. 配置事件总线消息存储方式, 我们通过 "EventBusStore" 来设置用何种方式来存储消息, 比如使用, MongoDB, 那么就需要将配置项 "EventBusStore" 改为 MongoDB, 也可以使用 InMemory, 如果使用了InMemory可以不配置 连接字符串,请忽略第八条。
  8. 配置事件消息存储连接字符串 , 如果使用了MongoDB 等一些存储消息的组件, 那么需要通过 通过"ConnectionStrings"中的 "EventBusStore" 来配置, 比如 如果使用了MongoDB 的连接字符串是 "mongodb://root:kissme@mongodb:27017

支持的关系型数据库配置项

配置项名称是 DataBase

  1. PostgreSql

  2. SqlServer

  3. MySql

  4. Oracle

  5. Sqlite

  6. InMemory

  7. Cassandra

    支持的时序数据库及其配置项

    配置项名称是 TelemetryStorage

  8. SingleTable

  9. Sharding

  10. Taos

  11. InfluxDB

  12. PinusDB

  13. TimescaleDB

  14. IoTDB

支持的事件总线

配置项名称为 EventBusMQ

  1. RabbitMQ
  2. Kafka
  3. InMemory
  4. ZeroMQ
  5. NATS
  6. Pulsar
  7. RedisStreams
  8. AmazonSQS
  9. AzureServiceBus

支持的事件总线存储方式

配置项名称为 EventBusStore

  1. PostgreSql
  2. MongoDB
  3. InMemory
  4. LiteDB
  5. MySql
  6. SqlServer
下面是几个示例:
- + \ No newline at end of file diff --git a/docs/tutorial-basics/connectivity/index.html b/docs/tutorial-basics/connectivity/index.html index 73d2972f491fe1d974a2a282f966e3da0ecd334a..63b1103087e34c8c8fcf838ad44efc3714774d39 100644 --- a/docs/tutorial-basics/connectivity/index.html +++ b/docs/tutorial-basics/connectivity/index.html @@ -6,13 +6,13 @@ 设备连通性 | IoTSharp 在线文档 - +

设备连通性

IoTSharp设备状态服务负责监视设备连接状态并触发推送到规则链的设备连接事件。 你可以设置对应规则链来处理这些事件。

支持事件如下:

  • Connect - 设备连接到IoTSharp时触发。
  • Disconnect - 设备断开IoTSharp时触发
  • Activity - 在设备的超时时间范围内触发一次,如果正好有数据的话就会触发
  • Inactivity - 当超过设备的超时时间范围后,如果依然没数据, 就会触发。

设备状态服务负责维护以下服务端属性:

  • Active - 表示当前设备状态为True或False;
  • LastConnectDateTime - 表示设备最后一次连接到IoTSharp的时间
  • LastDisconnectDateTime - 表示设备与IoTSharp断开连接的最后时间
  • LastActivityDateTime - 表示设备上次推送遥测属性更新或rpc命令的时间
  • InactivityAlarmDateTime - 表示设备在超过设备超时时间范围后依然没有收到数据的最后时间。
- + \ No newline at end of file diff --git a/docs/tutorial-basics/debug/index.html b/docs/tutorial-basics/debug/index.html index 89d3801201406877f5d30eb340f7c7554aca8f11..a4140408303e2630a8837c03b8a940ce14790623 100644 --- a/docs/tutorial-basics/debug/index.html +++ b/docs/tutorial-basics/debug/index.html @@ -6,7 +6,7 @@ 调试IoTSharp | IoTSharp 在线文档 - + @@ -14,7 +14,7 @@

调试IoTSharp

本教程使用rabbit_mongo_influx 方式进行源码运行

注意

编译运行要在docker运行的基础上进行,因为需要使用rabbitmq、mongo、influxdb等应用; 要先停止容器中的iotsharp,建议直接使用VS打开解决方案, 设置docker-compose 为启动项。这样Vs会自动启动相应的容器, 并将IoTSharp设置为调试模式。

docker stop iotsharp
注意

另外前端使用angular,需要安装node、npm或yarn才可以进行前端编译,如果项目启动时无法跳转至前端界面, 那么在VS启动项目之前需要先 npm install -g @angular/cli@13.3.7

我的node版本v16.13.1,npm版本8.1.2,yarn版本1.22.17,可用

生成解决方案

打开解决方案IoTSharp.sln

先生成解决方案,第一次生成ng的前端比较慢

修改配置文件

/IoTSharp/IoTSharp/appsettings.Development.json
{
"ConnectionStrings": {
"IoTSharp": "Server=127.0.0.1;Database=IoTSharp;Username=postgres;Password=future;Pooling=true;MaxPoolSize=1024;",
"EventBusStore": "mongodb://root:kissme@127.0.0.1:27017",
"TelemetryStorage": "http://127.0.0.1:8086/?org=iotsharp&bucket=iotsharp-bucket&token=iotsharp-token&&latest=-72h",
"EventBusMQ": "amqp://root:kissme@127.0.0.1:5672"
},
"DataBase": "PostgreSql",
"EventBusStore": "MongoDB",
"EventBusMQ": "RabbitMQ",
"TelemetryStorage": "InfluxDB"
}
注意

一定要把influx的连接字符串中的iotsharp-token换成自己的token

源码启动

IoTSharp项目设为启动项目,运行

源码启动

访问后台前端

默认的后台部分页面访问地址默认的是 http://localhost:5000 ,会涉及到swagger 以及健康检查等页面

访问后台前端

访问前端

前端会在项目启动后开始开始自动编译,浏览器会打开一个 等待页面, 此页面等待直到前端就绪, 然后会重定位到前端部分。 新的前端SPA采用.Net 6.0在中的新方法, 因此等待不会像之前那么久。

访问前端

- + \ No newline at end of file diff --git a/docs/tutorial-basics/deploy_by_docker/index.html b/docs/tutorial-basics/deploy_by_docker/index.html index 8c0e74c0c399e881146bd96e6062ebbb7485fa6a..aeec9be707bc40c868df5dd9c6ee34de1d437801 100644 --- a/docs/tutorial-basics/deploy_by_docker/index.html +++ b/docs/tutorial-basics/deploy_by_docker/index.html @@ -6,7 +6,7 @@ 使用Dcoker部署 | IoTSharp 在线文档 - + @@ -14,7 +14,7 @@

使用Dcoker部署

本教程使用 RabbitMQ作为消息中间件, 使用MongoDB作为消息存储, 使用InfluxDB 作为时序数据存储, 使用Postgresql 作为关系型数据库。 ,

修改docker-compose.yml文件

注意

influxdb_cli容器的相关配置,通过此命令行容器,初始化influxdb, 初始化之前需要提前设置好token等,如果自己自行配置, 则直接删除此配置即可。

/IoTSharp/Deployments/rabbit_mongo_influx/docker-compose.yml
influxdb_cli:
links:
- influx
image: quay.io/influxdb/influxdb:v2.0.4
entrypoint: influx setup --bucket iotsharp-bucket -t iotsharp-token -o iotsharp --username=root --password=1-q2-w3-e4-r5-t --host=http://influx:8086 -f
restart: on-failure:20
depends_on:
- influx

启动容器

进入/IoTSharp/Deployments/rabbit_mongo_influx,把里面的docker-compose.yml 等文件拷贝到你的目标目录中, 确保docker和docker-compose 都已经安装, 然后直接在执行up命令。

docker-compose up -d

看到下图说明运行成功 docker-compose启动成功

初始化influxdb

浏览器访问 http://localhost:8086/,初始化influxdb

初始化influxdb

Org: iotsharp Bucket: iotsharp-bucket

然后点Config Later

创建token

添加token

复制token

复制token

修改配置文件

/IoTSharp/Deployments/rabbit_mongo_influx/appsettings.Production.json
"TelemetryStorage":"http://influx:8086/?org=iotsharp&bucket=iotsharp-bucket&token=iotsharp-token&&latest=-72h",

iotsharp-token修改为你的真实token

重启IoTSharp容器

命令行执行

docker restart iotsharp

注册

Chrome浏览器访问 http://localhost:2927/

注册

访问

注册后登入进入首页 访问

- + \ No newline at end of file diff --git a/docs/tutorial-basics/deploy_linux/index.html b/docs/tutorial-basics/deploy_linux/index.html index 51a91f8ab259aa2e0e24e7d6a38363622ce1e07d..9d2d08c915863ec27fd4d63118c624caa12a8099 100644 --- a/docs/tutorial-basics/deploy_linux/index.html +++ b/docs/tutorial-basics/deploy_linux/index.html @@ -6,14 +6,14 @@ 在Linux中部署IoTSharp | IoTSharp 在线文档 - +

在Linux中部署IoTSharp

本教程使用Sqlite 为数据存储 方式进行部署

下载

首先在 https://github.com/IoTSharp/IoTSharp/releases 或者 https://gitee.com/IoTSharp/IoTSharp/releases 中下载最新版本的安装包, 常用系统中压缩包选择 IoTSharp.Release.linux-x64.zip , 如果是树莓派版本则下载 IoTSharp.Release.linux-arm64.zip 至本地。

直接启动

解压压缩包后, 我们可以看到里面 有一个 IoTSharp 文件, 使用 chmod 777 IoTSharp , 然后 在命令行使用 ./IoTSharp 即可。 启动后, 即可在浏览器中打开 http://localhost:2927 来访问。

注册为服务

IoTSharp 已经支持了Linux 服务的方式运行, 按照下面的步骤可以将IoTSharp 注册为LInux daemon

  • mkdir /var/lib/iotsharp/ # 创建运行目录
  • cp ./* /var/lib/iotsharp/ # 将所有文件拷贝至目标目录
  • chmod 777 /var/lib/iotsharp/IoTSharp # 设置IoTSharp 的可执行权限
  • cp iotsharp.service /etc/systemd/system/iotsharp.service # 将服务文件拷贝至系统
  • sudo systemctl enable /etc/systemd/system/iotsharp.service # 启用服务
  • sudo systemctl start iotsharp.service # 启动此服务
  • sudo journalctl -fu iotsharp.service # 查看该服务日志

注册

Chrome浏览器访问 http://localhost:2927/

注册

访问

注册后登入进入首页 访问

- + \ No newline at end of file diff --git a/docs/tutorial-basics/deploy_win/index.html b/docs/tutorial-basics/deploy_win/index.html index b2b1631aeca894c7bc2d5565c7f1454eb99c1887..c91172fbb55ed3c27c5a40eb73660680261ce80f 100644 --- a/docs/tutorial-basics/deploy_win/index.html +++ b/docs/tutorial-basics/deploy_win/index.html @@ -6,7 +6,7 @@ 在Windows中部署IoTSharp | IoTSharp 在线文档 - + @@ -14,7 +14,7 @@

在Windows中部署IoTSharp

本教程使用Sqlite 为数据存储 方式进行部署

下载

首先在 https://github.com/IoTSharp/IoTSharp/releases 或者 https://gitee.com/IoTSharp/IoTSharp/releases 中下载最新版本的安装包, 通畅Windows下的安装包 名为 IoTSharp.Release.win7-x64.zip 下载至本地。

直接启动

解压压缩包后, 我们可以看到里面 有一个 IoTSharp的Exe文件, 双击运行即可启动。 可以看到控制台启动, 启动后, 即可在浏览器中打开 http://localhost:2927 来访问。

注册为服务

IoTSharp 已经支持了Windows服务的方式运行, 如果有需要注册为Widnows服务, 你需要首先了解 https://docs.microsoft.com/zh-cn/windows-server/administration/windows-commands/sc-create , 使用sc 命令创建 为Windows服务,然后打开 http://localhost:2927 来访问

看到下图说明运行成功 docker-compose启动成功

初始化influxdb

浏览器访问 http://localhost:8086/,初始化influxdb

初始化influxdb

Org: iotsharp Bucket: iotsharp-bucket

 

注册

Chrome浏览器访问 http://localhost:2927/

注册

访问

注册后登入进入首页 访问

- + \ No newline at end of file diff --git a/docs/tutorial-basics/gateway/index.html b/docs/tutorial-basics/gateway/index.html index 39ee5287ede56a0bb5c3e85a1ed75e131dd1f5c0..1d78d4cd1c7ba4f022d78d00d8bc0aa4305b1243 100644 --- a/docs/tutorial-basics/gateway/index.html +++ b/docs/tutorial-basics/gateway/index.html @@ -6,14 +6,14 @@ 如何对接第三方网关? | IoTSharp 在线文档 - + - + \ No newline at end of file diff --git a/docs/tutorial-basics/influxdb/index.html b/docs/tutorial-basics/influxdb/index.html index 4a42b3e9483bd976843f73903b31554df654d822..2f523699d3c35e14f8f793a0d9b3ffab291f0f05 100644 --- a/docs/tutorial-basics/influxdb/index.html +++ b/docs/tutorial-basics/influxdb/index.html @@ -6,13 +6,13 @@ 如何查询遥测源数据? | IoTSharp 在线文档 - +
-

如何查询遥测源数据?

遥测数据存储方式有很多种, 这里暂时只介绍 InfluxDB 的查询方法

浏览器访问 http://localhost:8086/

注意, 地址取决于你安装地址, 或者容器的映射地址。 一些情况下遥测数据能存储在InfluxDB之前, 你可能需要手动创建taken等填写到配置文件中。

influxdb数据

- +

如何查询遥测源数据?

遥测数据存储方式有很多种, 这里暂时只介绍 InfluxDB 的查询方法

浏览器访问 http://localhost:8086/

注意, 地址取决于你安装地址, 或者容器的映射地址。 一些情况下遥测数据能存储在InfluxDB之前, 你可能需要手动创建token等填写到配置文件中。

influxdb数据

+ \ No newline at end of file diff --git a/docs/tutorial-basics/iotsharp/index.html b/docs/tutorial-basics/iotsharp/index.html index faa9c8b73a81980b9d77e162b9ce7ebb5ff9914a..68b909a3c13d775de155f4c5c8c8a2d07c408e4b 100644 --- a/docs/tutorial-basics/iotsharp/index.html +++ b/docs/tutorial-basics/iotsharp/index.html @@ -6,13 +6,13 @@ IoTSharp是什么? | IoTSharp 在线文档 - +

IoTSharp是什么?

IoTSharp是一个基于 .Net 6.0 使用C#语言编写的以实现可见与不可见的物理设备数字孪生物联网平台, 什么是数字孪生?

属性数据(Attributes Data)

显示设备中类似于型号, 性别或者串口、IP地址等设备上固定的信息我们称之为属性数据。 属性数据分三侧如下:

  • 客户侧属性 型号、性别等固定属性从设备中采集到的称之为客户端侧属性
  • 服务侧属性 姓名、用途、归于哪一个资产旗下的标识等这些服务端定义的属性就是服务侧属性。
  • 任意侧属性 类似串口配置, IP地址配置等服务端定义需要下发到客户端的数据称之为任意侧属性。

遥测数据 (Telemetry Data)

遥测数据类似温度、湿度、气压、电压、年龄 体温 等不停的在变化的我们均称之为遥测数据, 这些数据主要以时序方式存储,你可以将其用于基于时间序列的预测, 也可以统计分析环比,利用大数据工具探索这些数据之前的关系等等。 或者提供图表等可视化展示等等。

远程控制(RPC)

比如 灯 , 我们拥有他的属性瓦数,拥有他的遥测数据亮度和耗电量, 远程控制就是灯的开关功能我们称之为远程控制, 远程控制分服务单向、双向和客户端远程控制。 以下分别介绍:

  • 服务端单向控制 业务层调用IoTSharp提供的统一API,调用后直接返回,不等待设备返回,实际结果一般是通过遥测数据体现, 假设 空调温度, 你控制空调将温度设置为31°, 效果则从遥测反馈的结果来体现。

  • 服务端双向控制 业务层调用IoTSharp后,需要等待设备响应结果, 比如, 灯泡的开关控制了打开, 我们需要可靠的知道控制灯泡的开关是否确实打开了灯泡,并告诉服务端结果, 结果包括成功、失败、为什么失败, 或者超时。

  • 客户端远程控制 比如, 一个报警按钮, 按下报警按钮后, 信息发送到IoTSharp , IoTSharp 通过远程控制的规则链调用了你事先提供的接口后,将结果提供给客户端, 客户端确认无误,这样一个过程就叫 客户端远程控制。

    规则链

    IoTSharp提供的规则链功能具有非常丰富的自定义能力和脚本支持能力, 类似一个流程图, 数据先进入到某个规则链, 这个规则链的起点中IoTSharp将数据转换为一个对象, 然后 你可以连接多个 任务块, 连接线上的动态表达式结果决定了需要将数据转交给后面的那些任务块, 在后面的任务块收到对象数据后, 任务块中你实现指定的脚本开始发挥作用, 这些脚本可以是前端最熟悉的JS,也可以是C#, 也可以是Python, 也可以是 SQL、当然, 你也可以装载C#写动态库,或者是我们预制的功能。 这些任务块有输入, 有输出, 输出依然为一个对象数据, 如果输出上依然连接有连接线, 那么开始计算条件 走向下一个任务块, 否则就算结束。

- + \ No newline at end of file diff --git a/docs/tutorial-basics/scriptuse/index.html b/docs/tutorial-basics/scriptuse/index.html index 1a0974fcecceff557fb852b12e7fc7a65047dd56..83b43fec58bf00eafc6b32aad48354397db869f8 100644 --- a/docs/tutorial-basics/scriptuse/index.html +++ b/docs/tutorial-basics/scriptuse/index.html @@ -6,13 +6,13 @@ 规则链使用方式 | IoTSharp 在线文档 - +

规则链使用方式

一、各种脚本语言执行测试

脚本分类: javascript脚本、python脚本、sql脚本、lua脚本、csharp脚本

image.png

1.javascript脚本

底层是通过第三方库jint来执行javascript脚本代码

https://github.com/sebastienros/jint

脚本参数以参数名:input 传入,所以在方法中取值时需要加上input前缀

如下图所示,写了一个javascript方法,实现计算乘方功能

image.png

对工作链传参数并执行测试

image.png

测试结果,可以看到工作链成功接收了参数,并且执行了乘方操作,并反馈结果

image.png

2.lua脚本

底层是通过NeoLua来执行python语句

https://github.com/neolithos/neolua

写了一个lua的计算乘方函数,接收参数输入并返回乘方结果,输入参数也是以input接收

image.png

传参并测试

image.png

测试结果

image.png

3.sql脚本

此sql非彼sql,不是我们理解的查数据库的sql,这里的sql语法是要符合jsonDB要求的,因为它的数据源是jsonDB封装后的对象

底层用到了两个库:

a. 通过jsonDB库把json对象封装一下,使它支持sql查询

b.通过jint库执行你的sql脚本

jsonDB库地址:https://github.com/thinkeridea/jsonDB

image.png

由于是jsonDB的sql,而且数据源是json对象,并非数据库。 所以这个脚本引擎仅支持简单的crud,函数、存储过程这些都不支持。

一个简单的例子,过滤姓名="lihong"的人,查出性别

image.png

输入参数

image.png

执行结果

image.png

4.python脚本

底层是通过IronPython执行脚本

https://github.com/IronLanguages/ironpython3

定义乘方函数,注意python需要把返回值复制给output形参,没有这个参数会报错

image.png

传参并测试

image.png

执行结果

image.png

5.csharp脚本

底层通过cs-script动态执行c#脚本代码

c#脚本计算乘方

image.png

发送数据并测试

image.png

测试结果

image.png

二、通过mqtt客户端模拟设备告警上报

image.png

设计规则链

image.png

在javascript脚本中,加入发烧的逻辑判断语句,然后createAlarmDto并返回

image.png

mqtt客户端连接到平台,并模拟发送数据

image.png

成功创建告警

image.png

- + \ No newline at end of file diff --git a/docs/tutorial-basics/sourcecode/index.html b/docs/tutorial-basics/sourcecode/index.html index fbfd6a360c41be8c999ff0020729425431226b8d..195df5c8c4b91987f184cfb91b8679e9113c07ab 100644 --- a/docs/tutorial-basics/sourcecode/index.html +++ b/docs/tutorial-basics/sourcecode/index.html @@ -6,13 +6,13 @@ 在哪里下载源码? | IoTSharp 在线文档 - + - + \ No newline at end of file diff --git a/docs/tutorial-basics/webapi/index.html b/docs/tutorial-basics/webapi/index.html index a9b95dc99dc3565500271c1d8c29da525b5461d6..47a5c95b06cad70490eb91c71c5729c4b7d9de2d 100644 --- a/docs/tutorial-basics/webapi/index.html +++ b/docs/tutorial-basics/webapi/index.html @@ -6,14 +6,14 @@ webapi查询遥测 | IoTSharp 在线文档 - + - + \ No newline at end of file diff --git a/docs/tutorial-extras/http/index.html b/docs/tutorial-extras/http/index.html index 4ffb58e73fc00a40fbec604b28d29449c3d1c38d..94f63a4af5e549152015b94bdca23b6d91d4f3ed 100644 --- a/docs/tutorial-extras/http/index.html +++ b/docs/tutorial-extras/http/index.html @@ -6,13 +6,13 @@ Http协议 | IoTSharp 在线文档 - +

Http协议

IoTSharp支持Http协议上传遥测数据, 可以通过标准接口, 也可以通过在属性里设置 映射方式 接收数据, 也可以通过规则链进行解析数据然后再推送的指定数据。

IoTSharp直连设备和常规网关设备的数据上传

PushDataToMap

PushDataToMap 是 RawDataGateway 的Http接口,同样, 在Mqtt里面也支持它。

- + \ No newline at end of file diff --git a/docs/tutorial-extras/mqtt/index.html b/docs/tutorial-extras/mqtt/index.html index 3f163bc5277cfd49f53929048b9da646738bf7a8..211bdbec5a7c95b61868951610346a2771f88782 100644 --- a/docs/tutorial-extras/mqtt/index.html +++ b/docs/tutorial-extras/mqtt/index.html @@ -6,7 +6,7 @@ MQTT协议 | IoTSharp 在线文档 - + @@ -14,7 +14,7 @@

MQTT协议

本文章介绍如何通过MQTT进行遥测和属性数据上传以及RPC控制的实现。

发送属性和遥测数据

设备分直连设备和网关设备, 发送数据方式也有所不同。 telemetry 为 遥测, attributes表示属性,客户端上传的属性在服务器端永远为 ClientSide , 即客户端侧属性。 不推荐在服务端修改。

连接直连设备或者网关

通过 mqtt客户端连接mqtt服务器,用户名填写 token, 密码可以为空。

直连设备发送遥测数据

devices/me/telemetry
devices/me/attributes

MQTT的负载为如下格式

{
"stringvalue":"here is strvalue",
"intvalue":234
}

网关设备发送遥测数据

devices/{设备名称}/telemetry
devices/{设备名称}/attributes

{设备名称} 则是隶属当前网关设备处理的设备名称。 MQTT的负载为如下格式

{
"stringvalue":"here is strvalue",
"intvalue":234
}

网关子设备的上线与已下线

gateway/connect
gateway/disconnect

注意, 这里直接兼容

v1/gateway/connect
v1/gateway/disconnect

网关设备批量发送设备遥测数据和属性数据

gateway/telemetry
gateway/attributes

注意, 这里直接兼容

v1/gateway/telemetry
v1/gateway/attributes

批量发送数据格式如下:

{
"subdevice1": [
{
"ts": 637834108219892435,
"devicestatus": 0,
"values": {
"string": "this string",
"float": 22.222
}
}
],
"subdevice2": [
{
"ts": 637834108219892435,
"devicestatus": 0,
"values": {
"intvalue": 22
}
}
]
}

这里是一个C#合成批量上传的例子

 Dictionary<string, List<Playload>> pairs = new Dictionary<string, List<Playload>>();
var plst = new List<Playload>();
var values = new Dictionary<string, object>();
values.Add("string", "this string");
values.Add("intvalue",22);
plst.Add(new Playload() { DeviceStatus = DeviceStatus.Good, Ticks = DateTime.Now.Ticks, Values = values });
values.Add("float", 22.222);
plst.Add(new Playload() { DeviceStatus = DeviceStatus.Bad, Ticks = DateTime.Now.Ticks, Values = values });
pairs.Add("subdevice1",plst);
pairs.Add("subdevice2", plst);
var str= Newtonsoft.Json.JsonConvert.SerializeObject(pairs);
Console.WriteLine(str);

订阅属性

直连设备请求属性

发布请求

  devices/me/attributes/request/{请求唯一标识}

订阅结果

 devices/me/attributes/response/{请求唯一标识}

网关设备请求属性

发布请求

  devices/{设备名称}/attributes/request/{请求唯一标识}

订阅结果

 devices/{设备名称}/attributes/response/{请求唯一标识}

发起上行RPC远程控制

上行RPC控制是指 终端设备远程调用服务端的内容, IoTSharp 收到此请求则调用规则链, 你可以在规则链中处理此请求, 关于规则链请查看相关章节。

  devices/{设备名称}/rpc/request/{方法名称}

设备名称这里如果是直连设备, 则为me, 如果是网关设备, 则是设备名称, {方法名称}用于区别调用了何种方法, 这里交由规则链处理。 通过规则链, 你可以调用 内部服务, 也可以调用外部服务等, 发挥你的想象就好。

发起下行RPC远程控制

下行RPC是指平台端或者第三方服务调用IoTSharp进行远程控制终端设备的方法。

通过MQTT发起时, 先订阅response, 然后发布request。

 devices/{设备名称}/rpc/request/{方法名称}/{请求唯一标识}
devices/{设备名称}/rpc/response/{方法名称}/{请求唯一标识}

RawData

在Mqtt中我们通过topic gateway/json 和 gateway/xml 来支持 RawDataGateway 解析。

设备透传的原始数据

注意, 通常情况下你需要 配合规则链的脚本来解析透传的原始数据, 相关视频请查看 【IoTSharp 教程第二集 规则链使用】 https://www.bilibili.com/video/BV1be4y1N74s/?share_source=copy_web&vd_source=5b4c8cb51c4e0e2e985b5927ecc05d4a
目前支持的topic如下

  1. devices/{设备名称}/data/json 来处理json格式的数据
  2. devices/{设备名称}/data/binary 用于处理二进制数据

第三方服务调用时我们建议通过通过 Web Api 发起, 示例如下

curl -X 'POST' \
'https://cloud.iotsharp.net/api/Devices/{设备的TOKEN}/Rpc/{方法名称}?timeout={超时时间}' \
-H 'accept: application/json' \
-H 'Content-Type: application/json' \
-d '"{参数, 可以是json}"'

KepServerEx

在MQTT协议中, 我们提供了接收KepServerEx消息的服务端网关

  1. 在KepServerEx的IoT Gateway 新建 一个 MQTT的 客户端
  2. URL 填写 tcp://<iotsharp地址>:1883
  3. Topic 填写 /gateway/kepserverex
  4. ClientId填写设备ID或者随意
  5. UserName填写 网关程序的Token

配置如下图所示:

设置

设置

- + \ No newline at end of file diff --git a/docs/tutorial-extras/mqtt_tls/index.html b/docs/tutorial-extras/mqtt_tls/index.html index dd94a08f37dc08b4e6d22a05173a68ab07e36a84..f8ce2e680ab3a4c6beec7d6c16ed1b68daac0306 100644 --- a/docs/tutorial-extras/mqtt_tls/index.html +++ b/docs/tutorial-extras/mqtt_tls/index.html @@ -6,14 +6,14 @@ MQTT使用X509加密通讯和设备认证 | IoTSharp 在线文档 - +

MQTT使用X509加密通讯和设备认证

IoTSharp支持MQTT协议通过 TLS 1.2 加密通讯, 并可以通过X509证书进行设备认证登录。

配置

在 appsettings.Production.json中需要 指定域名, 并设置EnableTls为true

  "MqttBroker":
{
"DomainName":"http://demo.iotsharp.net:2927/",
"EnableTls":"true"
}

如果是docker 务必映射目录 , 下面的例子是将配置文件和 证书目录映射在当前文件夹。

    volumes:
- "./appsettings.Production.json:/app/appsettings.Production.json"
- "./data/security:/app/security"

自签发根证书和设备证书

用系统管理员账号打开设置->证书, 点击签发 , 刷新界面, 显示指纹信息后, 说明签发成功。 新建一个证书, 选择X509 验证方式, 点击下载证书界面, 点击生成证书, 然后下载。

使用mqtt.fx 通过x509证书连接

新建连接, 设置端口为 8883 , 选择 SSL/TLS ,并选择启用, 选择TLS 版本为 1.2 , 并选择 Self Sigend certificates , 依次选择根证书ca.crt , 设备证书 client.crt,以及设备私钥 client.ke , 必须选择 PEM format 点击确认。 连接即可。 如下图所示:

有关 MQTT如果发送遥测和属性数据 , 请参考 相关章节。

- + \ No newline at end of file diff --git a/docs/tutorial-extras/raw_data_gateway/index.html b/docs/tutorial-extras/raw_data_gateway/index.html index 46756ef29af944fb8ba920ae0641117f022bb074..a551238ae0aeed0beaee2de80bebede7768ea4a8 100644 --- a/docs/tutorial-extras/raw_data_gateway/index.html +++ b/docs/tutorial-extras/raw_data_gateway/index.html @@ -6,7 +6,7 @@ 原生数据推送网关 | IoTSharp 在线文档 - + @@ -14,7 +14,7 @@

原生数据推送网关

http 协议

在Http协议中使用 接口 PushDataToMap 来实现, 并通过设置网关的属性值让接口自动解析下面的数据, 如果是文本包含字符串json也可以通过配置进行处理。 http 请求

curl --location --request POST  'http://cloud.iotsharp.net/api/Devices/{网关Token}/PushDataToMap/json' \
--header 'Content-Type: application/json' \
--data-raw '{
"dev_id": "2021082640",
"volt": 0,
"sample_time": "2022-03-17 15:21:47",
"datas": [
{
"point_name": "2",
"mon_type": 4,
"dev_type": 10,
"depth": 0,
"data1": 0
}
]
}'

样例数据 如下:

{"dataType":"1","dataJson":"{\"serialNumber\":\"12003378\",\"uploadDate\":\"2022-03-20 22:22:19\",\"pm25\":21,\"pm10\":26,\"windSpeed\":25,\"windDirection\":14,\"noise\":46,\"temperature\":60,\"humidity\":900,\"sprayStatus\":0,\"warnReason\":64}"}

属性配置参考

  1. map_to_attribute{映射到子设备的属性名称} 属性值为在当前json中的路径。 例如:
    _map_to_attribute_currentAllowWeight    currentAllowWeight   
    _map_to_attribute_driverCardNo driverCardNo
    _map_to_attribute_version version

2. _map_to_devname 指定设备的名称使用哪个字段
3. _map_to_devname_format 指定设备名称的格式,可用的变量有 $devname 和 $subdevname, 格式内容为 hf_crane_$devname
4. _map_to_jsontext_in_json 指定如果是文本类型的将自动将字符串转为json,示例中为: dataJson
5. _map_to_telemetry_{映射到子设备中的遥测名称}

_map_to_telemetry_windSpeed windSpeed

 6. _map_to_subdevname 二级关联
7. _map_to_data_in_array 如果子设备数据在某个数组占用, 则这里指定。

注意, 当_map_to_data_in_array 指定了字段时 , 使用 '@' 的字段指定的是 根json路径, 不使用 则表示当前数组元素中的路径。
_map_to_data_in_array和_map_to_jsontext_in_json只能使用其中一种, 不能重合。
- + \ No newline at end of file diff --git a/index.html b/index.html index d9e462b927c54e0be4b70b9237cdefe974b2806a..1bd9b1b5adc1aad65bd99dd2a3225232a3b36c4d 100644 --- a/index.html +++ b/index.html @@ -6,13 +6,13 @@ IoTSharp 在线文档 | IoTSharp 在线文档 - +

IoTSharp 在线文档

IoTSharp is an open-source IoT platform for data collection, processing, visualization, and device management.

数字孪生

IoTSharp 通过服务侧、客户端侧属性、遥测数据、RPC等实现了数字孪生, 实现了所有设备统一接口提供给业务调用。

docu_tree

规则链

IoTSharp 允许你通过JS、C#、Lua、Python、SQL等脚本处理数据并结合动态Linq表达式处理节点与节点之间的走向以实现数据清洗、告警、事件等相应手段, 也可以将网关数据通过规则链合成真正的数字孪生设备。

多样性

IoTSharp 重复考虑到物联网架构的重要性,因此我们具有丰富的中间件支持,比如消息中间件(RabbitMQ、AmazonSQS、Kafka、ZeroMQ、AzureServiceBus、Pulsar、NATS)进行处理、也支持多种时序数据库(InfluxDB、TDengine、TimescaleDB、IoTDB)存储和处理遥测数据。基础数据我们支持多种关系型数据库(PostgreSQL、Cassandra、Oracle、Sql Server、Sqlite、MySQl)

- + \ No newline at end of file diff --git a/markdown-page/index.html b/markdown-page/index.html index 5e72dad9c708969906e92d418cc3c410622ffcd9..3f641b1df9e6c15bc74c8f02cbb50a33acb3fbbc 100644 --- a/markdown-page/index.html +++ b/markdown-page/index.html @@ -6,13 +6,13 @@ Markdown page example | IoTSharp 在线文档 - +

Markdown page example

You don't need React to write simple standalone pages.

- + \ No newline at end of file