loT-demo/README.md

329 lines
8.1 KiB
Markdown
Raw Permalink Normal View History

2026-02-26 01:43:07 +00:00
# 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