# DZXJ DTU 应用安装说明

本文档提供了在 ARM Ubuntu 系统上安装和部署 DZXJ DTU 应用的详细说明。

## 系统要求

- **架构**：ARM 架构（支持 aarch64、armv7l、armv8l）
- **操作系统**：Ubuntu 18.04 LTS 或更高版本
- **权限**：支持 root 用户或具有 sudo 权限的普通用户
- **网络**：需要互联网连接以安装依赖

## 安装方法

### 1. 准备工作

确保您的系统满足上述要求，并已连接到互联网。

### 2. 本地构建前端应用

```bash
cd frontend
npm install
npm run build
```
确保生成了 `frontend/dist` 目录

### 3. 使用一键安装脚本

项目根目录中提供了针对 ARM Ubuntu 的一键安装脚本：

```bash
chmod +x install_arm_ubuntu.sh
./install_arm_ubuntu.sh
```

### 4. 安装过程

脚本会自动完成以下操作：

- 配置 apt-get 使用阿里源以加速包安装
- 安装系统依赖（Python、Node.js、Git、nginx等）
- 配置 pip 镜像源以加速安装
- 创建 Python 虚拟环境
- 安装 Python 依赖包
- 部署前端应用（从预编译的 dist 目录）
- 配置 nginx 服务器提供前端服务
- 创建启动和停止脚本
- 生成系统服务配置文件（可选）

## 启动与停止

### 手动启动

```bash
cd ~/dzxj_dtu
./start.sh
```

### 手动停止

```bash
cd ~/dzxj_dtu
./stop.sh
```

### 作为系统服务运行

脚本已自动生成 systemd 服务配置文件，可以将应用设置为系统服务：

```bash
sudo cp ~/dzxj_dtu/dzxj_dtu.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable dzxj_dtu.service
sudo systemctl start dzxj_dtu.service
```

### 检查服务状态

```bash
sudo systemctl status dzxj_dtu.service
```

## 访问应用

应用启动后，可以通过以下地址访问：

```
http://localhost
```

如果是在远程服务器上安装，可以使用服务器的 IP 地址：

```
http://服务器IP地址
```

前端通过 nginx 提供服务，默认监听 80 端口，前端 API 请求会通过 nginx 代理到后端的 5001 端口。

## 常见问题

### 端口占用

如果安装过程中提示端口 5001 已被占用，可以：

1. 停止占用该端口的进程：
   ```bash
   sudo lsof -i :5001
   sudo kill -9 进程ID
   ```

2. 或者修改应用端口（需编辑 app.py 文件中的端口配置）

### 依赖安装失败

如果遇到依赖安装失败，可以尝试：

1. 确保系统已更新：
   ```bash
   sudo apt-get update && sudo apt-get upgrade -y
   ```

2. 检查网络连接是否正常

3. 手动安装特定失败的依赖

### 权限问题

如果遇到权限错误：

1. 确保以普通用户身份运行安装脚本
2. 确保脚本具有执行权限：`chmod +x install_arm_ubuntu.sh`

## 卸载方法

要完全卸载应用，执行以下命令：

```bash
# 停止服务（如果已设置为系统服务）
sudo systemctl stop dzxj_dtu.service
sudo systemctl disable dzxj_dtu.service
sudo rm /etc/systemd/system/dzxj_dtu.service

# 删除安装目录
rm -rf ~/dzxj_dtu
```

## DHT11 本地 GPIO 温湿度传感器配置（可选）

如果主板上接有 DHT11 传感器，安装脚本已自动安装 `libgpiod` 相关依赖，但仍需按实际接线配置 GPIO 编号。

### 1. 确认 GPIO line 编号

本驱动使用 libgpiod，需要填写 **gpio line 编号**，而不是丝印上的 `GPIO2` 名称。

Rockchip 芯片的 GPIO 编号计算公式：

```
编号 = bank * 32 + group * 8 + bit
```

其中 `group` 对应 A/B/C/D，分别取 0/1/2/3。例如：

- `GPIO2_A0` → `2 * 32 + 0 * 8 + 0` = `64`
- `GPIO2_B3` → `2 * 32 + 1 * 8 + 3` = `75`
- `GPIO2_C0` → `2 * 32 + 2 * 8 + 0` = `80`

在目标设备上也可以用以下命令列出所有 gpio line：

```bash
sudo gpioinfo
```

### 2. 配置环境变量

#### 手动启动（start.sh）

编辑 `~/dzxj_dtu/start.sh`，取消 DHT11 相关注释并填写 GPIO 编号：

```bash
export DHT11_ENABLED=true
export DHT11_GPIO_PIN=64   # 按实际接线修改
export DHT11_GPIO_CHIP=gpiochip0
export DHT11_POLL_INTERVAL=5
export DHT11_SIMULATE=false
```

#### systemd 服务启动

编辑 `/etc/systemd/system/dzxj_dtu.service`，取消 DHT11 相关注释并填写 GPIO 编号：

```ini
Environment="DHT11_ENABLED=true"
Environment="DHT11_GPIO_PIN=64"
Environment="DHT11_GPIO_CHIP=gpiochip0"
Environment="DHT11_POLL_INTERVAL=5"
Environment="DHT11_SIMULATE=false"
```

然后重载并重启服务：

```bash
sudo systemctl daemon-reload
sudo systemctl restart dzxj_dtu.service
```

### 3. 接线建议

DHT11 三根线连接方式：

| DHT11 | 主板扩展口 | 说明 |
|-------|-----------|------|
| VCC   | 3.3V 或 5V | 按模块供电要求选择 |
| GND   | GND        | 电源地 |
| DATA  | 配置好的 GPIO | 单总线数据 |

### 4. 验证

启动应用后查看日志，应出现类似输出：

```
DHT11 本地传感器数据已处理: 温度=24.0°C, 湿度=55.0%
```

Web 管理页面“环境传感器”页面也会显示温湿度。

如果暂时无法确认 GPIO 编号或没有接传感器，可将 `DHT11_SIMULATE` 设为 `true` 进入模拟模式。

## 注意事项

1. 安装脚本会检查系统架构，仅在 ARM 架构上运行
   - 以 root 用户运行时，会自动使用 /opt/dzxj_dtu 作为安装目录
   - 以普通用户运行时，会使用 ~/dzxj_dtu 作为安装目录
2. 脚本会自动备份并配置apt-get和pip使用阿里云镜像源以加速安装过程
3. 后端应用默认端口为 5001，请确保该端口未被占用
4. 前端通过nginx提供服务，默认监听80端口
5. 前端API请求会通过nginx代理到后端的5001端口
6. 前端必须在本地预编译，确保生成 `frontend/dist` 目录
7. nginx配置会替换默认站点，如果需要保留其他站点配置，请先备份
8. 建议定期更新应用以获取最新功能和安全修复

## 技术支持

如果您在安装或使用过程中遇到问题，请检查应用日志或联系技术支持。

---

*本安装说明适用于 DZXJ DTU 应用的 ARM Ubuntu 版本*