Git Product home page Git Product logo

hems-tcp_ip_assignment's Introduction

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

hems-tcp_ip_assignment's People

Contributors

lihewin avatar

Stargazers

 avatar

Watchers

 avatar

Forkers

winsonm duocaixie

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.