loT-demo/README.md

329 lines
8.1 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.

# 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