329 lines
8.1 KiB
Markdown
329 lines
8.1 KiB
Markdown
|
|
# IoT Smart Control - 智能家居控制系统
|
|||
|
|
|
|||
|
|
一个现代化的智能家居控制前端演示项目,支持空调控制、照明控制、能源监控和设备状态管理。
|
|||
|
|
|
|||
|
|
## 功能特性
|
|||
|
|
|
|||
|
|
### 🏠 仪表盘
|
|||
|
|
- 实时显示设备在线状态统计
|
|||
|
|
- 能耗趋势图表展示
|
|||
|
|
- 快捷控制面板
|
|||
|
|
- 设备状态概览
|
|||
|
|
|
|||
|
|
### ❄️ 空调控制
|
|||
|
|
- 多设备管理
|
|||
|
|
- 温度调节(16°C - 30°C)
|
|||
|
|
- 运行模式切换(制冷/制热/自动/送风/除湿)
|
|||
|
|
- 风速控制(低/中/高/自动)
|
|||
|
|
- 摆风开关
|
|||
|
|
- 定时功能
|
|||
|
|
- 能耗信息展示
|
|||
|
|
|
|||
|
|
### 💡 照明控制
|
|||
|
|
- 多房间灯光管理
|
|||
|
|
- 亮度调节
|
|||
|
|
- 色温调节
|
|||
|
|
- 颜色选择
|
|||
|
|
- 场景模式(日常/阅读/观影/睡眠/派对)
|
|||
|
|
- 一键开关所有灯光
|
|||
|
|
|
|||
|
|
### ⚡ 能源监控
|
|||
|
|
- 实时能耗数据
|
|||
|
|
- 时/日/月能耗趋势图表
|
|||
|
|
- 设备能耗分布饼图
|
|||
|
|
- 节能提醒通知
|
|||
|
|
- 费用概览
|
|||
|
|
|
|||
|
|
### 📱 设备状态
|
|||
|
|
- 设备在线/离线/警告状态
|
|||
|
|
- 房间筛选
|
|||
|
|
- 设备类型筛选
|
|||
|
|
- 信号强度显示
|
|||
|
|
- 电池电量监控
|
|||
|
|
- 设备详情弹窗
|
|||
|
|
|
|||
|
|
## 技术栈
|
|||
|
|
|
|||
|
|
- **React 18** - 前端框架
|
|||
|
|
- **TypeScript** - 类型安全
|
|||
|
|
- **Vite** - 构建工具
|
|||
|
|
- **Redux Toolkit** - 状态管理
|
|||
|
|
- **Ant Design** - UI组件库
|
|||
|
|
- **ECharts** - 数据可视化
|
|||
|
|
- **Tailwind CSS** - 样式框架
|
|||
|
|
- **Framer Motion** - 动画库
|
|||
|
|
- **React Router** - 路由管理
|
|||
|
|
- **Axios** - HTTP请求库
|
|||
|
|
|
|||
|
|
## 项目结构
|
|||
|
|
|
|||
|
|
```
|
|||
|
|
src/
|
|||
|
|
├── api/ # API接口定义
|
|||
|
|
│ └── index.ts
|
|||
|
|
├── components/ # 可复用组件
|
|||
|
|
│ ├── Charts/ # 图表组件
|
|||
|
|
│ ├── Control/ # 控制组件
|
|||
|
|
│ ├── Device/ # 设备组件
|
|||
|
|
│ └── Layout/ # 布局组件
|
|||
|
|
├── config/ # 配置文件
|
|||
|
|
│ └── index.ts
|
|||
|
|
├── hooks/ # 自定义Hooks
|
|||
|
|
├── pages/ # 页面组件
|
|||
|
|
├── store/ # Redux状态管理
|
|||
|
|
├── utils/ # 工具函数
|
|||
|
|
│ └── request.ts # Axios封装
|
|||
|
|
├── App.tsx
|
|||
|
|
├── main.tsx
|
|||
|
|
└── index.css
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
## 快速开始
|
|||
|
|
|
|||
|
|
### 安装依赖
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
npm install
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 启动开发服务器
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
npm run dev
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
访问 http://localhost:3000 查看应用
|
|||
|
|
|
|||
|
|
### 构建生产版本
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
npm run build
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 预览生产版本
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
npm run preview
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## ⚙️ 服务器配置说明
|
|||
|
|
|
|||
|
|
### 配置文件位置
|
|||
|
|
|
|||
|
|
项目使用环境变量文件进行配置,配置文件位于项目根目录:
|
|||
|
|
|
|||
|
|
| 文件 | 用途 |
|
|||
|
|
|------|------|
|
|||
|
|
| `.env` | 默认配置 |
|
|||
|
|
| `.env.development` | 开发环境配置 |
|
|||
|
|
| `.env.production` | 生产环境配置 |
|
|||
|
|
|
|||
|
|
### 配置项说明
|
|||
|
|
|
|||
|
|
打开 `.env.production` 文件,可以看到以下配置项:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 服务器域名
|
|||
|
|
VITE_DOMAIN=ashai.com.cn
|
|||
|
|
|
|||
|
|
# 服务器端口
|
|||
|
|
VITE_PORT=8888
|
|||
|
|
|
|||
|
|
# 应用部署路径前缀(必须以/开头和结尾)
|
|||
|
|
VITE_BASE_PATH=/demo/
|
|||
|
|
|
|||
|
|
# API请求路径前缀
|
|||
|
|
VITE_API_PREFIX=/demo/api
|
|||
|
|
|
|||
|
|
# 是否使用HTTPS (true/false)
|
|||
|
|
VITE_USE_HTTPS=false
|
|||
|
|
|
|||
|
|
# 请求超时时间(毫秒)
|
|||
|
|
VITE_TIMEOUT=30000
|
|||
|
|
|
|||
|
|
# 应用程序标题(未设置时使用默认值"loT Smart Control - 智能控制系统")
|
|||
|
|
VITE_APP_TITLE=loT Smart Control - 智能控制系统
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 如何修改域名和端口
|
|||
|
|
|
|||
|
|
#### 方法一:修改环境变量文件(推荐)
|
|||
|
|
|
|||
|
|
1. 打开 `.env.production` 文件
|
|||
|
|
2. 修改 `VITE_DOMAIN` 为新的域名
|
|||
|
|
3. 修改 `VITE_PORT` 为新的端口
|
|||
|
|
4. 修改 `VITE_BASE_PATH` 为新的部署路径
|
|||
|
|
5. 重新执行 `npm run build` 打包
|
|||
|
|
|
|||
|
|
**示例:修改为新的服务器地址**
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 修改前
|
|||
|
|
VITE_DOMAIN=ashai.com.cn
|
|||
|
|
VITE_PORT=8888
|
|||
|
|
VITE_BASE_PATH=/demo/
|
|||
|
|
|
|||
|
|
# 修改后
|
|||
|
|
VITE_DOMAIN=myserver.example.com
|
|||
|
|
VITE_PORT=9000
|
|||
|
|
VITE_BASE_PATH=/iot-app/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 方法二:修改代码配置文件
|
|||
|
|
|
|||
|
|
如果需要更灵活的配置,可以修改 `src/config/index.ts` 文件中的默认值:
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
const getConfig = (): AppConfig => {
|
|||
|
|
if (typeof __APP_CONFIG__ !== 'undefined') {
|
|||
|
|
return __APP_CONFIG__
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
// 修改这里的默认值
|
|||
|
|
return {
|
|||
|
|
domain: 'ashai.com.cn', // 修改域名
|
|||
|
|
port: '8888', // 修改端口
|
|||
|
|
basePath: '/demo/', // 修改部署路径
|
|||
|
|
apiPrefix: '/demo/api', // 修改API前缀
|
|||
|
|
useHttps: false, // 是否使用HTTPS
|
|||
|
|
timeout: 30000, // 超时时间
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 配置项详细说明
|
|||
|
|
|
|||
|
|
| 配置项 | 说明 | 示例值 |
|
|||
|
|
|--------|------|--------|
|
|||
|
|
| `VITE_DOMAIN` | 服务器域名,不含协议和端口 | `ashai.com.cn` |
|
|||
|
|
| `VITE_PORT` | 服务器端口号 | `8888` |
|
|||
|
|
| `VITE_BASE_PATH` | 应用部署的基础路径,必须以 `/` 开头和结尾 | `/demo/` |
|
|||
|
|
| `VITE_API_PREFIX` | API请求的路径前缀 | `/demo/api` |
|
|||
|
|
| `VITE_USE_HTTPS` | 是否使用HTTPS协议 | `true` 或 `false` |
|
|||
|
|
| `VITE_TIMEOUT` | HTTP请求超时时间(毫秒) | `30000` |
|
|||
|
|
| `VITE_APP_TITLE` | 应用程序标题,显示在浏览器标签页,未设置时使用默认值 | `loT Smart Control - 智能控制系统` |
|
|||
|
|
|
|||
|
|
### 应用程序标题配置
|
|||
|
|
|
|||
|
|
`VITE_APP_TITLE` 用于自定义浏览器标签页显示的应用程序标题。
|
|||
|
|
|
|||
|
|
#### 配置方法
|
|||
|
|
|
|||
|
|
在 `.env.development` 或 `.env.production` 文件中设置:
|
|||
|
|
|
|||
|
|
```bash
|
|||
|
|
# 设置自定义标题
|
|||
|
|
VITE_APP_TITLE=IoT Smart Control - 智能控制系统
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
#### 默认值机制
|
|||
|
|
|
|||
|
|
如果未配置 `VITE_APP_TITLE` 或将其留空,应用程序将使用默认标题 **"loT Smart Control - 智能控制系统"**。
|
|||
|
|
|
|||
|
|
#### 适用场景
|
|||
|
|
|
|||
|
|
| 场景 | 建议配置 |
|
|||
|
|
|------|----------|
|
|||
|
|
| 开发环境 | 可设置为项目名称,便于开发者识别 |
|
|||
|
|
| 测试环境 | 可设置为"测试环境 - xxx"以区分 |
|
|||
|
|
| 生产环境 | 设置为正式的产品名称 |
|
|||
|
|
| 多租户部署 | 可根据不同客户动态设置不同标题 |
|
|||
|
|
|
|||
|
|
#### 注意事项
|
|||
|
|
|
|||
|
|
1. **环境区分**:开发环境使用 `.env.development`,生产环境使用 `.env.production`
|
|||
|
|
2. **重新启动**:修改环境变量后需要重启开发服务器或重新构建
|
|||
|
|
3. **编码问题**:标题支持中文字符,无需额外编码处理
|
|||
|
|
4. **HTML 预设**:`index.html` 中设置了默认标题作为初始值,JavaScript 加载后会覆盖
|
|||
|
|
|
|||
|
|
### 访问路径示例
|
|||
|
|
|
|||
|
|
根据默认配置,构建后的访问路径为:
|
|||
|
|
|
|||
|
|
| 类型 | URL |
|
|||
|
|
|------|-----|
|
|||
|
|
| 应用首页 | `http://ashai.com.cn:8888/demo/` |
|
|||
|
|
| API基础路径 | `http://ashai.com.cn:8888/demo/api` |
|
|||
|
|
|
|||
|
|
### 使用配置的API
|
|||
|
|
|
|||
|
|
在代码中使用配置好的API:
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
import { getApiBaseUrl, getServerBaseUrl, getBasePath } from '@/config'
|
|||
|
|
|
|||
|
|
// 获取API基础URL
|
|||
|
|
console.log(getApiBaseUrl()) // http://ashai.com.cn:8888/demo/api
|
|||
|
|
|
|||
|
|
// 获取服务器基础URL
|
|||
|
|
console.log(getServerBaseUrl()) // http://ashai.com.cn:8888
|
|||
|
|
|
|||
|
|
// 获取应用部署路径
|
|||
|
|
console.log(getBasePath()) // /demo/
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### API请求示例
|
|||
|
|
|
|||
|
|
```typescript
|
|||
|
|
import { deviceApi, airConditioningApi, lightingApi, energyApi } from '@/api'
|
|||
|
|
|
|||
|
|
// 获取设备列表
|
|||
|
|
const devices = await deviceApi.getList()
|
|||
|
|
|
|||
|
|
// 设置空调温度
|
|||
|
|
await airConditioningApi.setTemperature('ac-1', 24)
|
|||
|
|
|
|||
|
|
// 设置灯光亮度
|
|||
|
|
await lightingApi.setBrightness('light-1', 80)
|
|||
|
|
|
|||
|
|
// 获取能耗数据
|
|||
|
|
const energyData = await energyApi.getDailyData()
|
|||
|
|
```
|
|||
|
|
|
|||
|
|
### 部署注意事项
|
|||
|
|
|
|||
|
|
1. **路径匹配**:确保 `VITE_BASE_PATH` 与服务器上的部署路径一致
|
|||
|
|
2. **跨域配置**:如果前后端分离部署,需要配置CORS
|
|||
|
|
3. **HTTPS**:生产环境建议启用HTTPS,设置 `VITE_USE_HTTPS=true`
|
|||
|
|
4. **重新打包**:每次修改配置后都需要重新执行 `npm run build`
|
|||
|
|
|
|||
|
|
---
|
|||
|
|
|
|||
|
|
## 响应式设计
|
|||
|
|
|
|||
|
|
项目支持多种屏幕尺寸:
|
|||
|
|
|
|||
|
|
- **桌面端** (>1200px): 完整侧边栏,多列布局
|
|||
|
|
- **平板端** (768px - 1200px): 可折叠侧边栏,双列布局
|
|||
|
|
- **移动端** (<768px): 抽屉式菜单,单列布局
|
|||
|
|
|
|||
|
|
## Mock数据
|
|||
|
|
|
|||
|
|
所有数据均为模拟数据,包括:
|
|||
|
|
|
|||
|
|
- 空调设备列表和状态
|
|||
|
|
- 照明设备列表和状态
|
|||
|
|
- 能耗历史数据
|
|||
|
|
- 设备状态信息
|
|||
|
|
|
|||
|
|
## 演示说明
|
|||
|
|
|
|||
|
|
1. 点击侧边栏导航切换不同功能模块
|
|||
|
|
2. 在空调控制页面可以调节温度、切换模式等
|
|||
|
|
3. 在照明控制页面可以调节亮度、色温、颜色等
|
|||
|
|
4. 在能源监控页面可以查看能耗趋势和分布
|
|||
|
|
5. 在设备状态页面可以查看所有设备状态
|
|||
|
|
|
|||
|
|
## 浏览器支持
|
|||
|
|
|
|||
|
|
- Chrome (推荐)
|
|||
|
|
- Firefox
|
|||
|
|
- Safari
|
|||
|
|
- Edge
|
|||
|
|
|
|||
|
|
## 许可证
|
|||
|
|
|
|||
|
|
MIT License
|