Skip to content
This repository has been archived by the owner on Jul 17, 2024. It is now read-only.

TCP/IP课设——带有可视化系统的家庭能源管理系统

Notifications You must be signed in to change notification settings

Lihewin/HEMS-tcp_ip_assignment

Repository files navigation

HEMS-tcp_ip_assignment

以Socket作为服务器与传感器通讯手段的家庭能源管理系统

特性

  • 以Socket作为服务器与传感器通讯手段
  • 多传感器支持
  • 友好的Web用户界面
  • 可以控制每一个传感器的开关面板
  • 清晰的实时动态数据分析大屏幕

警告

  • 程序说崩就崩,我没有做任何与鲁棒性有关的考虑与设计。
  • 哪怕程序正常跑起来了也不能说明是神明在保佑。我是坚定的唯物主义者。
  • 别动代码,除非您知道自己在干什么。
  • 以上三条纯属娱乐。不过程序确实挺粗糙的就对了。

项目组成

这个项目由以下三个大模块组成:

  1. 后端通信模块
  2. 数据处理中间件
  3. WEB服务器与相应前端

根据课设要求,现在主要介绍后端通信模块。

后端通信模块

SocketServer.py

模块作用

SocketServer.py为通信模块的服务器端,负责接收传感器数据。

模块实现

服务器端采用了socketserver库,该库封装了socket模块,使得每个拨入的连接将被传入一个新的线程处理,从而实现多传感器通信的功能。

socket模块

socket模块运作模式如下:

  1. 定义连接,端口族等(这些功能已经被封装,将在编程时默认调用)
  2. 将程序绑定至指定端口
  3. 监听进入阻塞状态
  4. 当呼叫传入时,切换为accept状态
  5. 接受数据,填充缓冲区
  6. 循环程序,再次填充缓冲区,输出数据

SocketClient.py

模块作用

SocketServer.py为通信模块的传感器端,负责模拟发送传感器数据。

模块详情

模块允许创建多个线程来模拟多个传感器同时呼入的情况。

协议文档

发送

一个传感器应当发送这样的 json :

{
  "type": "data",
  "id": 1,
  "sn": "DNPLK11FNK",
  "power": "1200",
  "state": "on",
  "time": 1639451655.1565
}
  • type:定义了数据类型,目前仅定义了“data”。
  • id:传感器id,为整形类型
  • sn:传感器序列号
  • power:传感器检测到的功率
  • state:传感器目前的状态
    • on:表示传感器处于开启状态
    • suspend:表示传感器正忙,处于挂起状态
    • off:表示传感器处于关闭状态。当传感器处于关闭或挂起状态时,传感器将不发送当前功率。
  • time:当前时间戳,为double类型
接收

传感器将在每个通信轮询中接受来自服务器的命令,并会按照服务器命令切换状态。

{
  "result": "ok"
}
  • 当服务器返回ok时,传感器将在下一个通讯轮询切换为打开状态。
{
  "result": "off"
}
  • 当服务器返回off时,传感器将在下两个通讯轮询切换为suspend状态,随后切换为off状态
  • 当传感器连续两个周期不返回任何数据,传感器将自动挂起并关闭。

数据处理部分与WEB部分

  • 数据处理负责将后端数据写入sqlite数据库,并计算相关数据供前端直接调用
  • WEB部分负责创建相应的接口与前端页面,调用并显示页面与相关数据,并允许控制
    • WEB服务器部分采用flask框架,采用Pywebio进行页面生,echarts生成实时图形。

运行项目

本项目完全使用Python构成,解释器版本为3.10。您可以像运行普通Python程序一样运行本项目。

  1. 将本仓库克隆到本地
  2. 安装本项目使用的所有依赖库
  3. 运行仓库根目录下的main.py

项目截图

image-20211214113946638

image-20211214114008400

image-20211214114237191

About

TCP/IP课设——带有可视化系统的家庭能源管理系统

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published