IoTSharp 开源物联网基础平台功能与部署详解
IoTSharp 是基于 .NET 8.0 的开源物联网平台,支持设备管理、遥测数据监测、RPC 远程控制及规则链引擎。提供数字孪生与资产管理功能,兼容多种数据库(如 PostgreSQL、InfluxDB)和消息中间件。支持跨平台部署,包含仪表盘、多租户管理及安全配置。本文介绍了核心功能模块、技术架构优势及基于 Node.js 和 InfluxDB 的部署流程。

IoTSharp 是基于 .NET 8.0 的开源物联网平台,支持设备管理、遥测数据监测、RPC 远程控制及规则链引擎。提供数字孪生与资产管理功能,兼容多种数据库(如 PostgreSQL、InfluxDB)和消息中间件。支持跨平台部署,包含仪表盘、多租户管理及安全配置。本文介绍了核心功能模块、技术架构优势及基于 Node.js 和 InfluxDB 的部署流程。

IoTSharp 是一个基于 .NET 8.0 的开源物联网基础平台,采用 Apache-2.0 许可证,集设备管理、数据收集、处理、可视化与远程控制于一体,遵循数字孪生理念将物理设备映射到数字世界。

FlowRuleProcessor 负责规则链的执行| 类型 | 支持的数据库 |
|---|---|
| 关系型数据库 | PostgreSQL、MySQL、Oracle、SQL Server、SQLite(均支持分表) |
| 时序数据库 | InfluxDB、IoTDB、TDengine、TimescaleDB、PinusDB |
| 消息存储 | PostgreSQL、MongoDB、LiteDB、MySQL、SQL Server、InMemory |
支持 RabbitMQ、Kafka、ZeroMQ、NATS、Pulsar、Redis Streams、Amazon SQS、Azure Service Bus、InMemory 等多种消息队列
EventBusPublisher(事件发布)和 EventBusSubscriber(事件订阅与处理)环境说明:
官网下载并安装,npm 使用淘宝镜像
用于编译 IotSharp 前端 Vue 项目使用
后端环境需要安装.NET 8.0
拉取最新 IotSharp 项目代码,使用 VS 2022 打开,设置如下

先使用数据库 Sqlite 进行快速演示,这时遥测将存储在 Sqlite 数据库中,后面可以换成其他时序数据库,使用配置文件为'appsettings.Sqlite.json'
{
"DataBase": "Sqlite",
"ConnectionStrings": {
"IoTSharp": "Data Source=.data/IoTSharp.db",
"TelemetryStorage": "Data Source=.data/TelemetryStorage.db"
},
"EventBusStore": "InMemory",
"EventBusMQ": "InMemory",
"TelemetryStorage": "Sharding",
"RootKey": "kissme",
"EventBus": "Shashlik"
}
启动项目,浏览器访问 http://localhost:8888/ 打开前端页面,注册用户并登录
【设备管理】新增网关'IoTGateway'


复制 Token 值'e07c389fae774f07a810dc87b6466761'和 Id 值'b6e643f0-4403-4437-b406-1ec84d677e68'
下载并解压 iotgateway-2.1.1-win-x64.zip,启动
IoTGateway.exe
浏览器访问 http://localhost:518/
用户名:admin 密码:iotgateway.net
为方便演示,设置【变量配置】,只勾选并上传'用电量'

设置【传输配置】接入 IotSharp

MqttServer 的 IP 地址填写 IotSharp 的服务 IP,Id 和用户名分别填写 IotSharp 设备管理中网关的 Id 和 Token 值

提交后,回到 IotSharp 前端页面,活动状态变为'活动'

有实时的遥测数据

遥测历史可以查询历史数据

下载 influxdb2-2.7.11-windows.zip 并解压

启动
influxd.exe
启动后浏览器打开 http://localhost:8086/,设置好用户名和密码等信息,并记录下 API Token 值'rMJtiyyXgUlhztRAgooCXRlkDi55hHcvRJAUUijKkDvBajr0YI-T5CK75uT1JC9zSXyMey1i6lRQUBXLyJmjHA=='
修改配置'appsettings.InfluxDB.json'
{
"Logging": {
"LogLevel": {
"Default": "Information"
}
},
"DataBase": "Sqlite",
"ConnectionStrings": {
"IoTSharp": "Data Source=.data/IoTSharp.db",
"TelemetryStorage": "http://192.168.1.212:8086/?org=vinciyan.com&bucket=vinci_bucket&token=rMJtiyyXgUlhztRAgooCXRlkDi55hHcvRJAUUijKkDvBajr0YI-T5CK75uT1JC9zSXyMey1i6lRQUBXLyJmjHA=="
},
"JwtKey": "kissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissmekissme",
"JwtExpireHours": 24,
"JwtIssuer": "IoTSharp.Net",
"JwtAudience": "IoTSharp.Net",
"EventBusStore": "InMemory",
"EventBusMQ": "InMemory",
"TelemetryStorage": "InfluxDB",
"EventBus": "Shashlik"
}
更改项目启动方式

此时后端日志输出如下,表示数据已经写入 Influxdb
IoTSharp.EventBus.EventBusSubscriber: Information: 更新 IoTGateway(b6e643f0-4403-4437-b406-1ec84d677e68) 属性数据结果 2
IoTSharp.EventBus.EventBusSubscriber: Information: 更新 IoTGateway(b6e643f0-4403-4437-b406-1ec84d677e68) 属性数据结果 2
IoTSharp.EventBus.EventBusSubscriber: Information: 更新 IoTGateway(b6e643f0-4403-4437-b406-1ec84d677e68) 属性数据结果 2
IoTSharp.Storage.InfluxDBStorage: Information: 数据入库完成,共数据 1 条


微信公众号「极客日志」,在微信中扫描左侧二维码关注。展示文案:极客日志 zeeklog
将字符串编码和解码为其 Base64 格式表示形式即可。 在线工具,Base64 字符串编码/解码在线工具,online
将字符串、文件或图像转换为其 Base64 表示形式。 在线工具,Base64 文件转换器在线工具,online
将 Markdown(GFM)转为 HTML 片段,浏览器内 marked 解析;与 HTML 转 Markdown 互为补充。 在线工具,Markdown 转 HTML在线工具,online
将 HTML 片段转为 GitHub Flavored Markdown,支持标题、列表、链接、代码块与表格等;浏览器内处理,可链接预填。 在线工具,HTML 转 Markdown在线工具,online
通过删除不必要的空白来缩小和压缩JSON。 在线工具,JSON 压缩在线工具,online
将JSON字符串修饰为友好的可读格式。 在线工具,JSON美化和格式化在线工具,online