Files
electricity-monitor/README.md
EchoZenith e79975f2f5 feat: 初始化智能电量监控系统项目
该提交完成了完整的电费监控系统项目初始化,包含:
1.  后端Node.js+Express服务,支持定时采集、登录认证、数据API
2.  React前端界面,包含登录页和数据仪表盘
3.  Docker容器化配置和docker-compose部署文件
4.  环境变量示例和gitignore、dockerignore配置
5.  完整的项目文档README
2026-05-22 19:12:13 +08:00

132 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 智能电量监控系统
实时监控宿舍/房间电费余额和用电量,通过企业微信推送每日用电报告和异常告警。
## 功能
- 定时采集电费数据(每小时整点)
- 可视化展示今日用电趋势和用电量
- 历史用电数据统计7天/15天/30天
- 企业微信机器人通知(每日用电报告 + 采集异常告警)
- 登录认证保护
- 手动触发数据采集
- 响应式布局,支持手机端访问
## 技术栈
| 层级 | 技术 |
|---|---|
| 前端 | React 18 + Ant Design 5 + Chart.js |
| 后端 | Node.js + Express |
| 数据库 | SQLite (better-sqlite3) |
| 定时任务 | node-cron |
| 容器化 | Docker |
## 快速开始
### 1. 配置环境变量
复制 `.env.example``.env` 并填写:
```env
# 必填 - 小程序的登录 Cookie
SHIRO_COOKIE=shiroJID=你的cookie
# 必填 - 登录用户名和密码
LOGIN_USERNAME=admin
LOGIN_PASSWORD=你的密码
# 选填 - 企业微信群机器人 Webhook URL
WECOM_WEBHOOK_URL=https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=你的key
# 选填 - Cookie 签名密钥
COOKIE_SECRET=任意随机字符串
```
> **如何获取 SHIRO_COOKIE**
> 1. 打开微信小程序
> 2. 进入电费查询页面
> 3. 通过抓包工具获取请求中的 Cookie 值
### 2. 使用 Docker 运行(推荐)
```bash
docker compose build --no-cache
docker compose up -d
```
访问 `http://localhost:3000`
### 3. 本地开发
需要同时启动后端和前端:
**终端 1 - 启动后端:**
```bash
npm install
node server.js
```
后端运行在 `http://localhost:3000`
**终端 2 - 启动前端开发服务器:**
```bash
cd client
npm install
npm run dev
```
前端运行在 `http://localhost:5173`Vite 会自动代理 API 请求到后端。
### 4. 手动采集
登录系统后,点击右上角 **手动获取** 按钮即可立即采集最新数据。
## 项目结构
```
electricity-monitor/
├── server.js # 后端服务入口
├── package.json # 后端依赖
├── Dockerfile # Docker 构建
├── docker-compose.yml # Docker Compose 配置
├── .env # 环境变量(勿提交)
├── .env.example # 环境变量示例
├── .gitignore
├── data/ # SQLite 数据库文件
└── client/ # 前端项目
├── package.json
├── index.html
├── vite.config.js
└── src/
├── main.jsx # 入口
├── App.jsx # 根组件(认证状态管理)
├── api.js # API 请求模块
└── pages/
├── Login.jsx # 登录页
└── Dashboard.jsx # 仪表盘页
```
## API 接口
| 接口 | 方法 | 说明 | 需登录 |
|---|---|---|---|
| `/api/login` | POST | 登录 | 否 |
| `/api/logout` | POST | 登出 | 否 |
| `/api/check-auth` | GET | 检查登录状态 | 否 |
| `/api/current` | GET | 获取当前数据 | 是 |
| `/api/history` | GET | 获取历史数据 | 是 |
| `/api/trigger-collect` | GET | 手动触发采集 | 是 |
## 定时任务
- **每小时整点**:采集电费数据
- **每天 00:00**:发送昨日用电报告到企业微信
- **采集失败时**:立即发送异常告警到企业微信
## 许可
MIT