国产物联网平台(IotSharp+IoTGateway+Influxdb)快速上手

ops/2024/12/13 17:06:11/

环境说明:

  • Visual Studio 2022 Community
  • IotSharp代码:https://github.com/IoTSharp/IoTSharp.git
  • IoTGateway版本:v2.1.1
  • Node版本:v20.18.1
  • Influxdb版本:v2.7.11

安装Node

Node.js官网

官网下载并安装,npm使用淘宝镜像

用于编译IotSharp前端Vue项目使用

编译和启动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”

IoTGateway配置,接入IotSharp

部署IoTGateway

下载Releases · iioter/iotgateway

下载并解压iotgateway-2.1.1-win-x64.zip​,启动

IoTGateway.exe

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

用户名: admin​ 密码: iotgateway.net

接入IotSharp

为方便演示,设置【变量配置】,只勾选并上传“用电量”

在这里插入图片描述

设置【传输配置】接入IotSharp

在这里插入图片描述

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

在这里插入图片描述

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

在这里插入图片描述

有实时的遥测数据

在这里插入图片描述

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

在这里插入图片描述

使用Influxdb

部署influxdb

Releases · influxdata/influxdb

下载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条

查询Influxdb中数据

在这里插入图片描述


http://www.ppmy.cn/ops/141590.html

相关文章

Android Studio 控制台输出的中文显示乱码

1. Android Studio 控制台输出的中文显示乱码 1.1. 问题 安卓在调试阶段,需要查看app运行时的输出信息、出错提示信息。乱码,会极大的阻碍开发者前进的信心,不能及时的根据提示信息定位问题,因此我们需要查看没有乱码的打印信息。…

机器学习周报(12.2-12.8)

文章目录 摘要Abstract Vision Transformer1 原理2 代码 摘要 本周学习了Vision Transformer (ViT) 的基本原理及其实现,并完成了基于PyTorch的模型训练、验证和预测任务。深入理解了ViT如何将图像分割成patch作为输入序列,并结合Transformer Encoder处…

Pydantic中的discriminator:优雅地处理联合类型详解

Pydantic中的discriminator:优雅地处理联合类型详解 引言1. 什么是discriminator?2. 基本使用示例3. discriminator的工作原理4. 更复杂的实际应用场景5. 使用建议6. 潜在陷阱和注意事项结论最佳实践 引言 在Python的类型系统中,有时我们需要…

使用 XAML 和 C# 旋转 3D 立方体

此示例演示如何使用 XAML 显示和旋转 3D 立方体。它显示一个带有滚动条的蓝色三维立方体,您可以使用滚动条旋转立方体以从不同方向查看它。 下面显示了该程序的完整 XAML 代码。XAML 代码处理所有用户交互,包括旋转立方体,因此该示例不需要任…

Netty 的 SSL/TLS 安全通信

SSL/TLS(Secure Sockets Layer/Transport Layer Security)协议是网络通信中常用的加密协议,用于确保客户端和服务器之间数据的安全性与完整性。SSL/TLS 通过对数据进行加密和身份验证,可以防止数据泄露和篡改。 在基于 Netty 的应…

【jvm】内存溢出内存不够的原因

目录 1. 内存分配与回收问题2. 代码逻辑问题3. JVM参数设置不当4. 系统资源限制 1. 内存分配与回收问题 1.堆内存不足:应用程序申请的内存超过了JVM堆内存的限制,导致内存溢出。代码中可能存在内存泄漏,即对象在不再需要时仍被引用&#xff…

【强化学习】表格型方法 李宏毅 蘑菇书 第三章

本文主要针对查找表的强化学习方法(表格型方法),讨论表格型方法是什么,他的常见类型和使用的场景,常见的算法,这三个类型给具有一定基础知识的读者介绍表格方法。 主要参考李宏毅的蘑菇书,在线…

selenium获取请求头

【原创】Selenium获取请求头、响应头-腾讯云开发者社区-腾讯云 selenium 4.0.0 selenium-wire 5.1.0 python 3.10 from seleniumwire import webdriver import time from selenium.webdriver.common.by import By import re def get_request_headers(driver):"""…