logo
0
0
WeChat Login

LYG API - 配网中压开关变位信号消息系统接口模拟

📋 项目概述

本项目实现配网中压开关变位信号消息订阅服务,基于 RabbitMQ 消息队列提供可靠的消息传递能力,支持消息生产、消费和数据库存储。

核心特性

  • 统一消息中间件 - 全部使用RabbitMQ,简化架构和运维
  • 5种消息类型 - 支持开关状态、保护动作、离散信息等多种消息
  • 消息持久化 - SQLite数据库存储,支持消息查询和统计
  • 5个模拟生产者 - 生成逼真的测试数据
  • 消息消费者 - 自动接收、处理和存储消息
  • 系统服务支持 - 可配置为systemd服务后台运行

📦 项目结构

lyg-api/ ├── README.md # 本文件 ├── main.py # 主程序入口 ├── requirements.txt # Python依赖 ├── .gitignore # Git忽略文件 ├── docs/ # 详细文档 │ ├── README.md # 数据库集成文档 │ ├── 接口实现设计方案.md # 架构设计方案 │ ├── 数据库文档.md # 数据库说明 │ ├── 服务器.md # 服务器配置 │ ├── 消费者文档.md # 消费者使用指南 │ ├── 生产者文档.md # 生产者项目总结 │ └── 接口文档/ # API接口文档 │ ├── creater/ # 消息生产者模块 │ ├── __init__.py │ ├── config_rabbitmq.py # RabbitMQ配置 │ ├── demo_rabbitmq.py # 演示脚本 │ ├── rabbit_mq_producer.py # RabbitMQ生产者 │ ├── test_rabbitmq.py # 测试脚本 │ └── fake_producers/ # 假消息生产者 │ ├── __init__.py │ ├── base.py # 基础生产者类 │ ├── switch_state.py # 开关状态消息 │ ├── switch_protect.py # 开关保护消息 │ ├── discrete_info.py # 中压设备遥信 │ ├── low_voltage_discrete.py # 低压设备遥信 │ └── low_voltage_abnormal.py # 低压设备异常 │ ├── mq-consumer/ # 消息消费者 │ ├── README.md # 消费者使用指南 │ ├── config_rabbitmq.py # RabbitMQ配置 │ ├── rabbit_mq_consumer.py # 消费者主程序 │ └── database/ # 数据库模块 │ ├── database.py # 数据库操作 │ ├── init/ # 数据库初始化 │ └── messages.db # SQLite数据库文件 │ ├── deploy/ # 部署文件 └── venv/ # Python虚拟环境

🎯 核心组件

1. 消息生产者(5种消息类型)

生产者文件队列名称消息类型说明
switch_state.pyrmc_forward_medium_switch_state开关状态消息开关变位信号
switch_protect.pyrmc_forward_medium_switch_protect开关保护消息保护动作信号
discrete_info.pyrmc_forward_medium_discrete_info中压设备遥信实时遥信信息
low_voltage_discrete.pyrmc_forward_low_voltage_discrete低压设备遥信低压设备状态
low_voltage_abnormal.pyrmc_forward_low_voltage_abnormal低压设备异常运行异常信息

2. 消息消费者

消费者从5个队列接收消息,解析JSON并保存到SQLite数据库。

数据库设计(简化版):

CREATE TABLE messages ( id INTEGER PRIMARY KEY AUTOINCREMENT, mq_name TEXT NOT NULL, -- 消息队列名称 message_json TEXT NOT NULL, -- 完整的JSON消息 created_at DATETIME DEFAULT CURRENT_TIMESTAMP -- 创建时间 );

核心功能:

  • 自动接收消息
  • JSON解析
  • 数据库存储
  • 消息确认

3. 数据库管理

  • 类型: SQLite
  • 位置: mq-consumer/database/messages.db
  • 设计: 单表存储所有消息,简化架构
  • 索引: 按队列名称和创建时间建立索引
  • 查询: 支持按队列过滤和数量限制

🚀 快速开始

前置条件

  1. Python 3.6+
  2. RabbitMQ 服务器
    • Docker部署:docker run -d -p 5672:5672 rabbitmq
    • 或使用已安装的RabbitMQ服务
  3. Python依赖
    pip install pika faker

1. 启动消费者

cd /home/zhong/projects/lyg-api/mq-consumer python rabbit_mq_consumer.py

2. 启动生产者

# 方式1:使用主程序(随机发送不同类型消息) cd /home/zhong/projects/lyg-api python main.py # 方式2:运行演示脚本 cd /home/zhong/projects/lyg-api/creater python demo_rabbitmq.py

3. 验证消息流

# 查看队列状态 rabbitmqctl list_queues # 访问管理界面 # http://localhost:15672 (guest/guest)

4. 查询数据库

参考详细文档:数据库集成文档

📊 消息格式

标准消息格式

{ "dataClass": "0", "operateType": "Subscribe_emergency", "dataGroup": "253038", "dataType": "SwitchDiscrete", "messageId": "UUID", "queueName": "rmc_forward_medium_switch_state", "payload": [ { "switchId": "40位十六进制ID", "switchName": "10kV北京主干线#168杆开关", "switchType": "0305", "currentStatus": "0|1", "value": "01|10", "displaceTime": "2025-12-09 10:30:45", "devDetail": [...], "source": "1|2|3" } ] }

消息类型说明

消息类型dataType队列名称说明
开关变位信号SwitchDiscretermc_forward_medium_switch_state开关状态变化消息
开关保护动作SwitchActionrmc_forward_medium_switch_protect开关保护动作消息
中压设备遥信DiscreteInformc_forward_medium_discrete_info中压设备实时遥信
低压设备遥信LowVoltageDiscretermc_forward_low_voltage_discrete低压设备实时遥信
低压设备异常LowVoltageAbnormalrmc_forward_low_voltage_abnormal低压设备运行异常

🔧 配置说明

配置文件位置

  • 生产者配置creater/config_rabbitmq.py
  • 消费者配置mq-consumer/config_rabbitmq.py

详细配置说明请参考:

🧪 测试验证

测试脚本

  • 消费者测试mq-consumer/test_*.py
  • 生产者测试creater/test_rabbitmq.py

详细测试方法请参考:

📚 详细文档

⚙️ 系统服务配置(可选)

部署文件

服务配置文件位于 deploy/ 目录:

  • lyg-api-mq-producer.service - Systemd服务配置

详细部署说明请参考:

🔍 故障排除

常见问题

详细使用说明请参考各模块文档。

快速导航:

祝您使用愉快! 🎉

About

No description, topics, or website provided.
Language
Python100%