ServerDemon and MySql

目录

1      概述.... 1

2      MySql 1

3      数据库脚本.... 1

4      数据库设计.... 12

4.1       表汇总.... 12

4.2       概念图.... 13

4.3       gw_config.. 13

4.4       gw_report_info.. 14

4.5       gw_message_list 14

4.6       gw_key. 15

4.7       tenant_info.. 15

4.8       tenant_gw.. 16

4.9       tenant_north_config.. 16

4.10     tenant_sourth_config.. 16

4.11     tenant_hardware_config.. 17

5     使用示例.... 17

5.1       编译ServerDemon. 17

5.2       运行ServerDemon. 17

5.3       从ManageTools查看.... 19

5.4       从MySql查看.... 20

 

 

1     概述

ServerDemon位于ManageTools解决方案中,是一个基于C#的跨平台控制台应用,可以部署为服务器上的服务程序,支持windowslinux,也有使用docker部署的案例。

ServerDemon的功能很简单,把MQTT收到的所有消息保存到MySql数据库里面。数据库架构很简单,仅涉及几张很简单的表,但足以支持按网关和消息类别等条件查询数据。

ServerDemon的代码非常简单,主要就是MQTTMySql的连接,连接参数就在代码里,可以根据需要修改。

ManageTool界面上有个MySql图标按钮,点一下就可以查询数据库的信息。

ManageTool界面上也有个InfluxDB图标按钮,如果在ServerDemon的代码里开启InfluxDB的相关代码,也可以把数据插入到InfluxDB里面。

2     MySql

为了快速验证本系统,可以在本地安装MySql数据库,推荐使用9.01版(当然,完全没有用到任何罕见数据库特性,任何一个版本应该都是没有问题的)。

源码里默认的连接方式为:127.0.0.1,默认端口,数据库名“gateway”,用户名和密码都是“user1”。

3     数据库脚本

CREATE DATABASE  IF NOT EXISTS `gateway` /*!40100 DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_0900_ai_ci */ /*!80016 DEFAULT ENCRYPTION='N' */;

USE `gateway`;

-- MySQL dump 10.13  Distrib 8.0.38, for Win64 (x86_64)

--

-- Host: 127.0.0.1    Database: gateway

-- ------------------------------------------------------

-- Server version 9.0.1

 

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;

/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;

/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;

/*!50503 SET NAMES utf8 */;

/*!40103 SET @OLD_TIME_ZONE=@@TIME_ZONE */;

/*!40103 SET TIME_ZONE='+00:00' */;

/*!40014 SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0 */;

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40101 SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */;

/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */;

 

--

-- Table structure for table `gw_config`

--

 

DROP TABLE IF EXISTS `gw_config`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!50503 SET character_set_client = utf8mb4 */;

CREATE TABLE `gw_config` (

  `gw_sn` varchar(30) NOT NULL COMMENT '网关序列号',

  `gw_model` varchar(30) DEFAULT NULL COMMENT '型号',

  `gw_iccid` varchar(30) DEFAULT NULL COMMENT 'ICCID(如果有)',

  `sw_version` varchar(45) DEFAULT NULL COMMENT '软件版本',

  `confirmed_data_sequence` int DEFAULT NULL COMMENT '已确认的数据序列',

  `last_data_sequence` int DEFAULT NULL COMMENT '最新数据序列',

  `use_gm` int DEFAULT NULL COMMENT '是否使用国密',

  `key_seq` int DEFAULT NULL COMMENT '密钥标识(设置值)',

  PRIMARY KEY (`gw_sn`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='网关配置(平台侧)';

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Dumping data for table `gw_config`

--

 

LOCK TABLES `gw_config` WRITE;

/*!40000 ALTER TABLE `gw_config` DISABLE KEYS */;

INSERT INTO `gw_config` VALUES ('GW-5G-VM-DELL','GW-5G',NULL,NULL,NULL,NULL,NULL,NULL);

/*!40000 ALTER TABLE `gw_config` ENABLE KEYS */;

UNLOCK TABLES;

 

--

-- Table structure for table `gw_key`

--

 

DROP TABLE IF EXISTS `gw_key`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!50503 SET character_set_client = utf8mb4 */;

CREATE TABLE `gw_key` (

  `gw_sn` varchar(30) NOT NULL COMMENT '网关序列号',

  `gw_key_seq` int NOT NULL COMMENT 'key标识',

  `gw_key` varchar(128) DEFAULT NULL COMMENT 'key',

  PRIMARY KEY (`gw_sn`,`gw_key_seq`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='网关key信息';

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Dumping data for table `gw_key`

--

 

LOCK TABLES `gw_key` WRITE;

/*!40000 ALTER TABLE `gw_key` DISABLE KEYS */;

INSERT INTO `gw_key` VALUES ('GW-5G-VM-DELL',0,'123'),('GW-5G-VM-DELL',1,'12345'),('GW-5G-VM-DELL',2,'1234567');

/*!40000 ALTER TABLE `gw_key` ENABLE KEYS */;

UNLOCK TABLES;

 

--

-- Table structure for table `gw_message_list`

--

 

DROP TABLE IF EXISTS `gw_message_list`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!50503 SET character_set_client = utf8mb4 */;

CREATE TABLE `gw_message_list` (

  `id` int NOT NULL AUTO_INCREMENT,

  `gw_sn` varchar(30) DEFAULT NULL,

  `func` varchar(30) DEFAULT NULL,

  `ts_str` varchar(30) DEFAULT NULL,

  `insert_time` datetime DEFAULT CURRENT_TIMESTAMP,

  `topic` varchar(255) DEFAULT NULL,

  `message` mediumtext COMMENT '消息体,超长部分被丢弃',

  `uid` varchar(45) DEFAULT NULL COMMENT '消息标识',

  `respond_for_uid` varchar(45) DEFAULT NULL COMMENT '如果是应答,针对的uid',

  `data_seq` int DEFAULT NULL,

  `summary` varchar(255) DEFAULT NULL COMMENT '摘要,超过长度的部分被丢弃',

  PRIMARY KEY (`id`),

  KEY `i_sn` (`gw_sn`,`insert_time`)

) ENGINE=InnoDB AUTO_INCREMENT=22 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='网关消息列表';

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Dumping data for table `gw_message_list`

--

 

LOCK TABLES `gw_message_list` WRITE;

/*!40000 ALTER TABLE `gw_message_list` DISABLE KEYS */;

/*!40000 ALTER TABLE `gw_message_list` ENABLE KEYS */;

UNLOCK TABLES;

 

--

-- Table structure for table `gw_report_info`

--

 

DROP TABLE IF EXISTS `gw_report_info`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!50503 SET character_set_client = utf8mb4 */;

CREATE TABLE `gw_report_info` (

  `gw_sn` varchar(30) NOT NULL COMMENT '网关序列号',

  `gw_model` varchar(30) DEFAULT NULL COMMENT '型号',

  `gw_iccid` varchar(30) DEFAULT NULL COMMENT 'ICCID(如果有)',

  `sw_version` varchar(45) DEFAULT NULL COMMENT '软件版本',

  `confirmed_data_sequence` int DEFAULT NULL COMMENT '已确认的数据序列',

  `last_data_sequence` int DEFAULT NULL COMMENT '最新数据序列',

  `start_time` varchar(30) DEFAULT NULL COMMENT '启动时间(程序)',

  `last_time` varchar(30) DEFAULT NULL COMMENT '上一次上报信息的时间(包含上报数据)',

  `last_data_time` varchar(30) DEFAULT NULL COMMENT '上一次上报数据的时间',

  `use_gm` int DEFAULT NULL COMMENT '是否使用国密',

  `key_seq` int DEFAULT NULL COMMENT '密钥标识(设置值)',

  `current_key_seq` int DEFAULT NULL COMMENT '当前密钥标识(使用值)',

  PRIMARY KEY (`gw_sn`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='网关列表';

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Dumping data for table `gw_report_info`

--

 

LOCK TABLES `gw_report_info` WRITE;

/*!40000 ALTER TABLE `gw_report_info` DISABLE KEYS */;

/*!40000 ALTER TABLE `gw_report_info` ENABLE KEYS */;

UNLOCK TABLES;

 

--

-- Table structure for table `tenant_gw`

--

 

DROP TABLE IF EXISTS `tenant_gw`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!50503 SET character_set_client = utf8mb4 */;

CREATE TABLE `tenant_gw` (

  `tenant_name` varchar(64) NOT NULL COMMENT '租户名称',

  `gw_sn` varchar(30) NOT NULL COMMENT '网关序列号',

  `gw_north_config_name` varchar(64) DEFAULT NULL COMMENT '网关北向配置',

  `gw_source_config_name` varchar(64) DEFAULT NULL COMMENT '网关南向配置',

  `gw_hardware_config_name` varchar(64) DEFAULT NULL COMMENT '网关硬件配置',

  PRIMARY KEY (`tenant_name`,`gw_sn`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='租户的网关';

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Dumping data for table `tenant_gw`

--

 

LOCK TABLES `tenant_gw` WRITE;

/*!40000 ALTER TABLE `tenant_gw` DISABLE KEYS */;

/*!40000 ALTER TABLE `tenant_gw` ENABLE KEYS */;

UNLOCK TABLES;

 

--

-- Table structure for table `tenant_hardware_config`

--

 

DROP TABLE IF EXISTS `tenant_hardware_config`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!50503 SET character_set_client = utf8mb4 */;

CREATE TABLE `tenant_hardware_config` (

  `tenant_name` varchar(64) NOT NULL COMMENT '租户名称',

  `hardware_config_name` varchar(64) NOT NULL,

  `hardware_cinfig_data` varchar(16000) DEFAULT NULL,

  PRIMARY KEY (`tenant_name`,`hardware_config_name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='硬件配置';

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Dumping data for table `tenant_hardware_config`

--

 

LOCK TABLES `tenant_hardware_config` WRITE;

/*!40000 ALTER TABLE `tenant_hardware_config` DISABLE KEYS */;

/*!40000 ALTER TABLE `tenant_hardware_config` ENABLE KEYS */;

UNLOCK TABLES;

 

--

-- Table structure for table `tenant_info`

--

 

DROP TABLE IF EXISTS `tenant_info`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!50503 SET character_set_client = utf8mb4 */;

CREATE TABLE `tenant_info` (

  `tenant_name` varchar(64) NOT NULL COMMENT '租户名称',

  `tenant_contact` varchar(45) DEFAULT NULL COMMENT '联系人',

  `tenant_phone_number` varchar(45) DEFAULT NULL COMMENT '电话',

  PRIMARY KEY (`tenant_name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='租户信息';

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Dumping data for table `tenant_info`

--

 

LOCK TABLES `tenant_info` WRITE;

/*!40000 ALTER TABLE `tenant_info` DISABLE KEYS */;

INSERT INTO `tenant_info` VALUES ('default_tenant','联系人','电话');

/*!40000 ALTER TABLE `tenant_info` ENABLE KEYS */;

UNLOCK TABLES;

 

--

-- Table structure for table `tenant_north_config`

--

 

DROP TABLE IF EXISTS `tenant_north_config`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!50503 SET character_set_client = utf8mb4 */;

CREATE TABLE `tenant_north_config` (

  `tenant_name` varchar(64) NOT NULL COMMENT '租户名称',

  `north_config_name` varchar(32) NOT NULL COMMENT '配置名称',

  `north_type` varchar(45) DEFAULT NULL COMMENT 'MQTT/MQTTS',

  `host` varchar(45) DEFAULT NULL COMMENT '地址',

  `port` int DEFAULT NULL COMMENT '端口',

  `user` varchar(45) DEFAULT NULL COMMENT '用户名',

  `passowrd` varchar(45) DEFAULT NULL COMMENT '密码',

  PRIMARY KEY (`tenant_name`,`north_config_name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='租户的北向配置';

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Dumping data for table `tenant_north_config`

--

 

LOCK TABLES `tenant_north_config` WRITE;

/*!40000 ALTER TABLE `tenant_north_config` DISABLE KEYS */;

/*!40000 ALTER TABLE `tenant_north_config` ENABLE KEYS */;

UNLOCK TABLES;

 

--

-- Table structure for table `tenant_south_config`

--

 

DROP TABLE IF EXISTS `tenant_south_config`;

/*!40101 SET @saved_cs_client     = @@character_set_client */;

/*!50503 SET character_set_client = utf8mb4 */;

CREATE TABLE `tenant_south_config` (

  `tenant_name` varchar(64) NOT NULL COMMENT '租户名称',

  `south_config_name` varchar(64) NOT NULL,

  `south_config_data` mediumtext COMMENT '配置数据',

  PRIMARY KEY (`tenant_name`,`south_config_name`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='南向配置(数采)';

/*!40101 SET character_set_client = @saved_cs_client */;

 

--

-- Dumping data for table `tenant_south_config`

--

 

LOCK TABLES `tenant_south_config` WRITE;

/*!40000 ALTER TABLE `tenant_south_config` DISABLE KEYS */;

/*!40000 ALTER TABLE `tenant_south_config` ENABLE KEYS */;

UNLOCK TABLES;

/*!40103 SET TIME_ZONE=@OLD_TIME_ZONE */;

 

/*!40101 SET SQL_MODE=@OLD_SQL_MODE */;

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

/*!40014 SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS */;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;

/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;

/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;

/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */;

 

-- Dump completed on 2025-04-29 12:03:05

4    数据库设计

4.1  表汇总

名称

说明

gw_config

网关配置(平台侧)

gw_report_info

网关上报信息(网关侧配置)

gw_message_list

网关消息列表

gw_key

网关key信息

tenant_info

租户

tenant_gw

租户拥有的网关

tenant_north_config

平台连接配置(MQTT

tenant_sourth_config

设备连接配置(MODBUS等)

tenant_hardware_config

硬件配置(IP

4.2  概念图

4.3  gw_config

网关平台侧配置信息,与网关实际可能不一致。

列名

类型

说明

confirmed_data_sequence

YES

int

已确认的数据序列

gw_iccid

YES

varchar(30)

ICCID(如果有)

gw_model

YES

varchar(30)

型号

gw_sn

NO

varchar(30)

网关序列号

key_seq

YES

int

密钥标识(设置值)

last_data_sequence

YES

int

最新数据序列

sw_version

YES

varchar(45)

软件版本

use_gm

YES

int

是否使用国密

       PKgw_sn

4.4  gw_report_info

网关上报的信息,符合网关实际但与平台配置不一定一致。

列名

类型

说明

confirmed_data_sequence

YES

int

已确认的数据序列

current_key_seq

YES

int

当前密钥标识(使用值)

gw_iccid

YES

varchar(30)

ICCID(如果有)

gw_model

YES

varchar(30)

型号

gw_sn

NO

varchar(30)

网关序列号

key_seq

YES

int

密钥标识(设置值)

last_data_sequence

YES

int

最新数据序列

last_data_time

YES

varchar(30)

上一次上报数据的时间

last_time

YES

varchar(30)

上一次上报信息的时间(包含上报数据)

start_time

YES

varchar(30)

启动时间(程序)

sw_version

YES

varchar(45)

软件版本

use_gm

YES

int

是否使用国密

       PKgw_sn

 

4.5  gw_message_list

网关消息(超长信息被截断)。

列名

类型

说明

data_seq

YES

int

func

YES

varchar(30)

gw_sn

YES

varchar(30)

id

NO

int

自动增量

insert_time

YES

datetime

message

YES

mediumtext

消息体,超长部分被丢弃

respond_for_uid

YES

varchar(45)

如果是应答,针对的uid

summary

YES

varchar(255)

摘要,超过长度的部分被丢弃

topic

YES

varchar(255)

ts_str

YES

varchar(30)

uid

YES

varchar(45)

消息标识

       PKid

       Index:gw_sn,insert_time(不唯一)

4.6  gw_key

网关密钥序列。

列名

类型

说明

gw_key

YES

varchar(128)

key

gw_key_seq

NO

int

key标识

gw_sn

NO

varchar(30)

网关序列号

       PKgw_sn,gw_key_seq

4.7  tenant_info

列名

类型

说明

tenant_contact

YES

varchar(45)

联系人

tenant_name

NO

varchar(64)

租户名称

tenant_phone_number

YES

varchar(45)

电话

4.8  tenant_gw

列名

类型

说明

tenant_name

NO

varchar(64)

租户名称

gw_hardware_config_name

YES

varchar(64)

网关硬件配置

gw_north_config_name

YES

varchar(64)

网关北向配置

gw_sn

NO

varchar(30)

网关序列号

gw_source_config_name

YES

varchar(64)

网关南向配置

tenant_name

NO

varchar(64)

租户名称

4.9  tenant_north_config

列名

类型

说明

tenant_name

NO

varchar(64)

租户名称

host

YES

varchar(45)

地址

north_config_name

NO

varchar(32)

配置名称

north_type

YES

varchar(45)

MQTT/MQTTS

passowrd

YES

varchar(45)

密码

port

YES

int

端口

user

YES

varchar(45)

用户名

4.10    tenant_sourth_config

列名

类型

说明

south_config_data

YES

mediumtext

配置数据

south_config_name

NO

varchar(64)

 

tenant_name

NO

varchar(64)

租户名称

 

4.11    tenant_hardware_config

列名

类型

说明

hardware_cinfig_data

YES

varchar(16000)

 

hardware_config_name

NO

varchar(64)

 

tenant_name

NO

varchar(64)

租户名称

 

5     使用示例

5.1  编译ServerDemon

注意ServerDemonManageTools有两个相同的nuget依赖包,与MySql有关的部分是完全相同的。

可以在Visual Studio里直接运行,也可以打包之后放在Windowslinux服务器上运行。

5.2  运行ServerDemon

如果连接参数没什么问题,应该一切正常。

运行日志:

图形用户界面, 文本

AI 生成的内容可能不正确。

2025-04-29 13:28:25.620 tid 主线程 [Info ]C:\working\ctGateway\ManageTools\ServerDemon\Program.cs       :55   :ServerDemon 2024.09.13 16:39

2025-04-29 13:28:25.633 tid 主线程 [Info ]C:\working\ctGateway\ManageTools\ServerDemon\Program.cs       :58   :-debug

2025-04-29 13:28:25.633 tid 主线程 [Info ]C:\working\ctGateway\ManageTools\ServerDemon\Program.cs       :71   :调试模式:True

2025-04-29 13:28:25.634 tid 主线程 [Info ]C:\working\ctGateway\ManageTools\ServerDemon\Program.cs       :72   :BaseInfluxDBTools.url =

2025-04-29 13:28:26.546 tid 主线程 [Info ]C:\working\ctGateway\ManageTools\ServerDemon\Program.cs       :19   :GW-5G-VM-DELL

2025-04-29 13:28:26.547 tid 主线程 [Info ]C:\working\ctGateway\ManageTools\ServerDemon\Program.cs       :19   :GW-5G-VM-DELL

2025-04-29 13:28:26.547 tid 主线程 [Info ]C:\working\ctGateway\ManageTools\ServerDemon\Program.cs       :19   :GW-5G-VM-DELL

2025-04-29 13:28:26.624 tid 主线程 [Info ]C:\working\ctGateway\ManageTools\ServerDemon\Program.cs       :27   :mysql连接成功

2025-04-29 13:28:26.626 tid 主线程 [Info ]      :0    :记录总数 3 错误 0

2025-04-29 13:28:26.650 tid 主线程 [Info ]C:\working\ctGateway\ManageTools\ServerDemon\Program.cs       :48   :Mqtt客户端正在连接......

2025-04-29 13:28:26.657 tid 主线程 [Info ]C:\working\ctGateway\ManageTools\ServerDemon\Program.cs       :91   :成功连接到  localtest MQTTS 127.0.0.1

2025-04-29 13:28:26.706 tid 11 [Info ]C:\working\ctGateway\ManageTools\ServerDemon\Program.cs   :48   :Mqtt客户端连接成功(1).

2025-04-29 13:28:26.717 tid 11 [Info ]  :0    :device_gateway/reg 订阅成功

2025-04-29 13:28:26.718 tid 11 [Info ]  :0    :device_gateway/# 订阅成功

2025-04-29 13:28:40.794 tid 06 [Debug]  :0    :收到来自[GW-5G-VM-DELL]的消息

2025-04-29 13:28:40.796 tid 06 [Info ]C:\working\ctGateway\ManageTools\ServerDemon\Program.cs   :37   :GW-5G-VM-DELL

5.3  ManageTools查看

主界面上有个MySql图标:

图片包含 图形用户界面

AI 生成的内容可能不正确。

       点一下MySql图标:

图形用户界面, 应用程序

AI 生成的内容可能不正确。

       功能其实挺乱的,尚未认真设计,意思意思吧。

       查看网关的所有消息:

图形用户界面, 应用程序, 表格

AI 生成的内容可能不正确。

       如果网关不在gw_config里面,可以用菜单的“网关管理”-“注册信息更新到配置”来把右边选中的网关添加到gw_config里面。

5.4    MySql查看

主要就是消息列表gw_message_list