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

一、核心功能模块
1. 设备管理
- 设备全生命周期管理:支持设备注册、配置、监控、删除等操作,提供设备 ID、型号、固件版本等基本信息管理
- 网关配置器:支持网关设备的管理与配置
- 设备属性管理:允许自定义设备属性字段(如温度阈值、湿度范围),自动收集并存储数据,提供可视化图表展示
- 多类型设备支持:区分普通设备与网关设备,提供差异化管理能力
2. 遥测数据监测
- 多参数采集:支持温度、湿度、压力等多种遥测数据的实时采集
- 高效数据传输:自动收集设备端数据并传输至云端服务器进行处理和存储
- 可视化展示:提供实时图表、历史曲线图等丰富的数据展示工具
- 异常触发机制:内置规则链设计引擎,支持设置异常值报警条件和自动化响应动作
3. RPC 多模式远程控制
- 跨网络控制:通过网络连接实现远程设备操作,支持指令编码、传输、解码及执行结果反馈的完整闭环
- 多访问途径:支持 Web 界面、移动应用程序、API 接口等多种控制方式
- 安全机制:所有通信过程加密传输,提供详尽日志记录功能,便于故障排查与审计
- 灵活操作:Web 端提供直观操作面板,移动端优化小屏幕体验,API 支持第三方定制化集成
4. 规则链设计引擎
- 可视化规则配置:通过拖拽方式创建数据处理流程
- 灵活触发逻辑:支持基于设备数据、时间、事件等多维度触发条件
- 自动化响应:可联动告警、设备控制、数据转发等动作
- 模块化处理:通过
FlowRuleProcessor负责规则链的执行
5. 告警与通知系统
- 多源监控:监控设备、网关和资产的异常状态
- 灵活规则配置:支持自定义告警触发条件和阈值
- 多通道通知:可通过邮件、短信、Webhook 等多种方式通知相关人员
- 状态管理:支持告警确认、清除、查询及多租户数据隔离
二、技术架构支持
1. 协议支持
- 标准协议:HTTP、MQTT、CoAp
- 协议扩展:支持非标协议的转换与接入
- SDK 支持:提供 HTTP 和 MQTT 协议的客户端 SDK
2. 数据库支持
| 类型 | 支持的数据库 |
|---|---|
| 关系型数据库 | PostgreSQL、MySQL、Oracle、SQL Server、SQLite(均支持分表) |
| 时序数据库 | InfluxDB、IoTDB、TDengine、TimescaleDB、PinusDB |
| 消息存储 | PostgreSQL、MongoDB、LiteDB、MySQL、SQL Server、InMemory |
3. 消息中间件
支持 RabbitMQ、Kafka、ZeroMQ、NATS、Pulsar、Redis Streams、Amazon SQS、Azure Service Bus、InMemory 等多种消息队列
4. 事件总线
- 发布 - 订阅模式:提供松耦合的异步通信机制
- 核心组件:
EventBusPublisher(事件发布)和EventBusSubscriber(事件订阅与处理) - 高扩展性:支持多种消息队列后端,确保系统弹性
三、数字孪生与资产管理
1. 数字孪生实现
- 物理设备映射:将可见与不可见的物理设备统一孪生到数字世界
- 实时同步:设备状态、属性、遥测数据实时同步至数字孪生体
- 虚拟化运营:支持在数字环境中模拟设备行为与系统配置变更
2. 资产管理
- 资产列表管理:对物联网资产进行统一管理
- 产品化理念:结合资产管理与产品化发展,适应复杂应用场景
- 多租户隔离:租户数据完全隔离,确保安全性
四、平台管理功能
1. 仪表盘
- 全局概览:展示设备数量、在线设备、最新遥测、报警事件等关键指标
- 实时状态:可视化呈现系统运行状态与设备健康状况
2. 多租户管理
- 租户列表:支持多租户环境的租户信息管理
- 权限分级:区分系统管理员与租户管理员权限,实现精细化管理
- 独立配置:各租户可独立配置设备、规则与告警策略
3. 用户与客户管理
- 用户列表:平台用户账户管理
- 客户列表:客户信息管理
- 国际化配置:支持多语言与本地化设置
4. 系统设置
- 字典设置:配置系统参数与业务字典
- 证书管理:管理设备接入证书与安全凭证
- 安全配置:身份认证、访问控制、数据加密等安全机制
五、部署与生态
环境说明:
- Visual Studio 2022 Community
- IotSharp 代码:https://github.com/IoTSharp/IoTSharp.git
- IoTGateway 版本:v2.1.1
- Node 版本:v20.18.1
- Influxdb 版本:v2.7.11
1. 安装 Node
官网下载并安装,npm 使用淘宝镜像
用于编译 IotSharp 前端 Vue 项目使用
2. 编译和启动 IotSharp
后端环境需要安装.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'
3. IoTGateway 配置,接入 IotSharp
1)部署 IoTGateway
下载 Releases · iioter/iotgateway
下载并解压 iotgateway-2.1.1-win-x64.zip,启动
IoTGateway.exe
浏览器访问 http://localhost:518/
用户名:admin 密码:iotgateway.net
2)接入 IotSharp
为方便演示,设置【变量配置】,只勾选并上传'用电量'

设置【传输配置】接入 IotSharp

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

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

有实时的遥测数据

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

4. 使用 Influxdb
1)部署 influxdb
Releases · influxdata/influxdb
下载 influxdb2-2.7.11-windows.zip 并解压

启动
influxd.exe
启动后浏览器打开 http://localhost:8086/,设置好用户名和密码等信息,并记录下 API Token 值'rMJtiyyXgUlhztRAgooCXRlkDi55hHcvRJAUUijKkDvBajr0YI-T5CK75uT1JC9zSXyMey1i6lRQUBXLyJmjHA=='
2)修改项目配置
修改配置'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 条
3)查询 Influxdb 中数据

六、技术架构优势
- 跨平台兼容:基于 .NET 8.0,支持 Windows、Linux、macOS
- 插件化设计:时序数据存储采用插件化架构,支持动态切换存储后端
- 高性能:支持数据库分表、异步消息处理、高效规则引擎
- 安全可靠:内置身份认证、数据加密、访问控制与日志审计机制


