家庭安全卫士应用


欢迎加入开源鸿蒙跨平台社区:
https://openharmonycrossplatform.csdn.net

一、项目概述

运行效果图

image-20260409192422614

image-20260409192427161

image-20260409192435504

image-20260409192446393

image-20260409192450781

1.1 应用简介

家庭安全卫士是一款智能家居类应用,为用户提供全方位的家庭安全监测与管理服务。应用整合门窗、烟雾、漏水、移动、燃气、温度等多种传感器,实现统一管理、异常告警、一键联系人等功能,全方位守护家庭安全。

应用以蓝色为主色调,象征安全与信任。涵盖安全总览、设备管理、告警记录、紧急联系人四大模块。用户可以实时查看各传感器状态、接收异常告警、快速联系紧急联系人,构建完整的家庭安全防护体系。

1.2 核心功能

功能模块功能描述实现方式
传感器管理6种传感器统一管理枚举定义
实时监测传感器状态实时更新Timer定时刷新
异常告警多级告警与处理记录状态管理
紧急联系一键联系人快速拨打弹窗交互
安全总览整体安全状态展示数据聚合
一键求助紧急情况快速求助批量通知

1.3 传感器类型定义

序号传感器名称Emoji描述
1门窗传感器🚪检测门窗开关状态
2烟雾传感器💨检测烟雾浓度
3漏水传感器💧检测漏水情况
4移动传感器🏃检测人体移动
5燃气传感器🔥检测燃气泄漏
6温度传感器🌡️检测环境温度

1.4 告警级别定义

序号级别名称Emoji颜色
1正常绿色
2警告⚠️黄色
3危险橙色
4紧急🚨红色

1.5 传感器状态定义

序号状态名称颜色说明
1在线绿色设备正常工作
2离线灰色设备未连接
3报警红色检测到异常
4低电量黄色电量不足提醒

1.6 联系人类型定义

序号类型名称Emoji用途
1家人👨‍👩‍👧‍👦家庭成员联系
2邻居👥紧急情况求助
3报警👮110报警电话
4消防🚒119消防电话
5急救🏥120急救电话
6物业🏢小区物业联系

1.7 技术栈

技术领域技术选型版本要求
开发框架Flutter>= 3.0.0
编程语言Dart>= 2.17.0
设计规范Material Design 3-
状态管理setState-
定时任务Timer-
目标平台鸿蒙OS / WebAPI 21+

1.8 项目结构

lib/
└── main_home_security.dart
    ├── HomeSecurityApp              # 应用入口
    ├── SensorType                   # 传感器类型枚举
    ├── AlertLevel                   # 告警级别枚举
    ├── SensorStatus                 # 传感器状态枚举
    ├── ContactType                  # 联系人类型枚举
    ├── Sensor                       # 传感器模型
    ├── AlertRecord                  # 告警记录模型
    ├── EmergencyContact             # 紧急联系人模型
    ├── HomeSecurityHomePage         # 主页面(底部导航)
    ├── _buildMonitorPage            # 总览页面
    ├── _buildSensorsPage            # 设备页面
    ├── _buildAlertsPage             # 告警页面
    └── _buildContactsPage           # 联系人页面

二、系统架构

2.1 整体架构图

Data Layer

Business Layer

Presentation Layer

主页面
HomeSecurityHomePage

总览页

设备页

告警页

联系人页

安全状态卡片

快捷操作

设备概览

设备统计

设备列表

告警统计

告警列表

紧急求助

联系人列表

传感器管理器
SensorManager

告警处理器
AlertHandler

联系人管理
ContactManager

Sensor
传感器数据

AlertRecord
告警记录

EmergencyContact
联系人数据

2.2 类图设计

has

has

has

references

has

has

HomeSecurityApp

+Widget build()

«enumeration»

SensorType

+String label

+IconData icon

+Color color

+String description

+door()

+smoke()

+water()

+motion()

+gas()

+temperature()

«enumeration»

AlertLevel

+String label

+IconData icon

+Color color

+normal()

+warning()

+danger()

+critical()

«enumeration»

SensorStatus

+String label

+Color color

+online()

+offline()

+alert()

+lowBattery()

«enumeration»

ContactType

+String label

+IconData icon

+Color color

+family()

+neighbor()

+police()

+fire()

+medical()

+property()

Sensor

+String id

+String name

+SensorType type

+SensorStatus status

+AlertLevel alertLevel

+String location

+int batteryLevel

+DateTime lastUpdate

+String currentValue

AlertRecord

+String id

+Sensor sensor

+AlertLevel level

+String message

+DateTime time

+bool isHandled

+String handler

EmergencyContact

+String id

+String name

+String phone

+ContactType type

+bool isDefault

2.3 页面导航流程

总览

设备

告警

联系人

应用启动

总览页

底部导航

查看安全状态

设备管理

告警记录

紧急联系人

快捷操作

紧急求助

一键布防

一键撤防

查看设备详情

设备状态监控

处理告警

标记已处理

拨打联系人

确认拨打

2.4 告警处理流程

用户界面告警处理器状态管理传感器用户界面告警处理器状态管理传感器检测到异常创建告警记录显示告警通知播放提示音用户处理告警更新处理状态恢复正常监测

三、核心模块设计

3.1 数据模型设计

3.1.1 传感器类型枚举 (SensorType)
enum SensorType {
  door('门窗传感器', Icons.sensor_door, Color(0xFF4CAF50), '检测门窗开关状态'),
  smoke('烟雾传感器', Icons.smoke_free, Color(0xFFFF5722), '检测烟雾浓度'),
  water('漏水传感器', Icons.water_damage, Color(0xFF2196F3), '检测漏水情况'),
  motion('移动传感器', Icons.directions_run, Color(0xFF9C27B0), '检测人体移动'),
  gas('燃气传感器', Icons.gas_meter, Color(0xFFFF9800), '检测燃气泄漏'),
  temperature('温度传感器', Icons.thermostat, Color(0xFF00BCD4), '检测环境温度');

  final String label;
  final IconData icon;
  final Color color;
  final String description;
}
3.1.2 告警级别枚举 (AlertLevel)
enum AlertLevel {
  normal('正常', Icons.check_circle, Color(0xFF4CAF50)),
  warning('警告', Icons.warning, Color(0xFFFFC107)),
  danger('危险', Icons.dangerous, Color(0xFFFF5722)),
  critical('紧急', Icons.error, Color(0xFFD32F2F));

  final String label;
  final IconData icon;
  final Color color;
}
3.1.3 传感器模型 (Sensor)
class Sensor {
  final String id;              // 传感器ID
  final String name;            // 传感器名称
  final SensorType type;        // 传感器类型
  final SensorStatus status;    // 当前状态
  final AlertLevel alertLevel;  // 告警级别
  final String location;        // 安装位置
  final int batteryLevel;       // 电量百分比
  final DateTime lastUpdate;    // 最后更新时间
  final String? currentValue;   // 当前检测值
}
3.1.4 告警记录模型 (AlertRecord)
class AlertRecord {
  final String id;              // 告警ID
  final Sensor sensor;          // 关联传感器
  final AlertLevel level;       // 告警级别
  final String message;         // 告警消息
  final DateTime time;          // 告警时间
  final bool isHandled;         // 是否已处理
  final String? handler;        // 处理说明
}
3.1.5 传感器类型分布
29%14%14%14%14%14%传感器类型分布示例门窗传感器烟雾传感器漏水传感器移动传感器燃气传感器温度传感器

3.2 页面结构设计

3.2.1 主页面布局

HomeSecurityHomePage

IndexedStack

总览页

设备页

告警页

联系人页

NavigationBar

总览 Tab

设备 Tab

告警 Tab

联系人 Tab

3.2.2 总览页结构

总览页

SliverAppBar

安全状态卡片

快捷操作

设备概览

整体安全等级

正常/警告/危险统计

紧急求助

一键布防

一键撤防

传感器类型网格

告警状态标识

3.2.3 设备页结构

设备页

SliverAppBar

设备统计卡片

设备列表

设备总数

在线数量

告警数量

传感器卡片

设备图标

状态标签

电量显示

告警级别

3.2.4 告警页结构

告警页

SliverAppBar

告警统计

告警列表

待处理数量

今日告警

已处理数量

告警卡片

传感器名称

告警消息

时间显示

处理按钮

3.3 告警处理逻辑

正常

异常

警告

危险

紧急

处理

忽略

传感器检测

是否异常

更新状态为正常

判断告警级别

告警级别

创建警告记录

创建危险记录

创建紧急记录

显示通知

用户操作

标记已处理

保持待处理

恢复正常监测

3.4 紧急求助逻辑

取消

确认

点击紧急求助

显示确认对话框

用户确认

关闭对话框

发送求助

通知所有联系人

家人

邻居

报警

显示发送成功


四、UI设计规范

4.1 配色方案

应用以蓝色为主色调,象征安全与信任:

颜色类型色值用途
主色#1565C0导航、主题元素
辅助色#42A5F5渐变、背景
正常色#4CAF50正常状态
警告色#FFC107警告状态
危险色#FF5722危险状态
紧急色#D32F2F紧急状态

4.2 传感器类型颜色

传感器类型色值视觉效果
门窗传感器#4CAF50绿色安全
烟雾传感器#FF5722橙色警示
漏水传感器#2196F3蓝色水感
移动传感器#9C27B0紫色神秘
燃气传感器#FF9800橙色警告
温度传感器#00BCD4青色温度

4.3 字体规范

元素字号字重颜色
页面标题24pxBold主色
设备名称15pxSemiBold#000000
状态标签10pxRegular状态颜色
告警消息12pxRegular#757575
统计数字20pxBold白色

4.4 组件规范

4.4.1 安全状态卡片
┌─────────────────────────────────────┐
│         ✅ 安全状态:正常           │
│                                     │
│    [5]        [1]        [0]        │
│    正常       警告       危险       │
└─────────────────────────────────────┘
4.4.2 快捷操作按钮
┌─────────────────────────────────────┐
│  快捷操作                            │
│                                     │
│  [🚨紧急求助] [🔒一键布防] [🔓一键撤防] │
└─────────────────────────────────────┘
4.4.3 传感器卡片
┌─────────────────────────────────────┐
│ [🚪] 大门传感器        [在线]  [✅] │
│      入口 · 已关闭                   │
│      🔋 85%                          │
└─────────────────────────────────────┘
4.4.4 告警卡片
┌─────────────────────────────────────┐
│ [⚠️] 大门传感器        [警告]       │
│      大门异常开启                    │
│      2小时前              [处理]    │
└─────────────────────────────────────┘
4.4.5 联系人卡片
┌─────────────────────────────────────┐
│ [👨‍👩‍👧‍👦] 张三            [默认]    │
│      138****1234                    │
│      家人                    📞     │
└─────────────────────────────────────┘

五、核心功能实现

5.1 传感器状态更新实现

void _startStatusUpdate() {
  _updateTimer = Timer.periodic(const Duration(seconds: 5), (timer) {
    _updateSensorStatus();
  });
}

void _updateSensorStatus() {
  final random = Random();
  setState(() {
    for (int i = 0; i < _sensors.length; i++) {
      if (random.nextDouble() > 0.95) {
        _sensors[i] = Sensor(
          id: _sensors[i].id,
          name: _sensors[i].name,
          type: _sensors[i].type,
          status: random.nextDouble() > 0.5 
              ? SensorStatus.online 
              : SensorStatus.alert,
          alertLevel: random.nextDouble() > 0.7 
              ? AlertLevel.warning 
              : AlertLevel.normal,
          location: _sensors[i].location,
          batteryLevel: _sensors[i].batteryLevel,
          lastUpdate: DateTime.now(),
          currentValue: _sensors[i].currentValue,
        );
      }
    }
  });
}

5.2 告警触发实现

void _triggerAlert(Sensor sensor, AlertLevel level, String message) {
  setState(() {
    _alerts.insert(
      0,
      AlertRecord(
        id: 'a${DateTime.now().millisecondsSinceEpoch}',
        sensor: sensor,
        level: level,
        message: message,
        time: DateTime.now(),
        isHandled: false,
      ),
    );
  });

  ScaffoldMessenger.of(context).showSnackBar(
    SnackBar(
      content: Text('$message - ${level.label}'),
      backgroundColor: level.color,
      action: SnackBarAction(
        label: '处理',
        textColor: Colors.white,
        onPressed: () => _handleAlert(_alerts.first),
      ),
    ),
  );
}

5.3 告警处理实现

void _handleAlert(AlertRecord alert) {
  setState(() {
    final index = _alerts.indexOf(alert);
    if (index != -1) {
      _alerts[index] = AlertRecord(
        id: alert.id,
        sensor: alert.sensor,
        level: alert.level,
        message: alert.message,
        time: alert.time,
        isHandled: true,
        handler: '已处理',
      );
    }
  });
}

5.4 紧急求助实现

void _triggerEmergency() {
  showDialog(
    context: context,
    builder: (context) => AlertDialog(
      title: const Row(
        children: [
          Icon(Icons.warning, color: Colors.red),
          SizedBox(width: 8),
          Text('紧急求助'),
        ],
      ),
      content: const Text('确定要发送紧急求助吗?将通知所有紧急联系人。'),
      actions: [
        TextButton(
          onPressed: () => Navigator.pop(context),
          child: const Text('取消'),
        ),
        ElevatedButton(
          onPressed: () {
            Navigator.pop(context);
            ScaffoldMessenger.of(context).showSnackBar(
              const SnackBar(
                content: Text('紧急求助已发送,正在通知所有联系人...'),
                backgroundColor: Colors.red,
              ),
            );
          },
          style: ElevatedButton.styleFrom(
            backgroundColor: Colors.red,
          ),
          child: const Text('确认发送'),
        ),
      ],
    ),
  );
}

5.5 联系人拨打实现

void _callContact(EmergencyContact contact) {
  showDialog(
    context: context,
    builder: (context) => AlertDialog(
      title: Text('联系 ${contact.name}'),
      content: Column(
        mainAxisSize: MainAxisSize.min,
        children: [
          Icon(contact.type.icon, size: 48, color: contact.type.color),
          const SizedBox(height: 16),
          Text(
            contact.phone,
            style: const TextStyle(fontSize: 24, fontWeight: FontWeight.bold),
          ),
          const SizedBox(height: 8),
          Text(contact.type.label),
        ],
      ),
      actions: [
        TextButton(
          onPressed: () => Navigator.pop(context),
          child: const Text('取消'),
        ),
        ElevatedButton(
          onPressed: () {
            Navigator.pop(context);
            ScaffoldMessenger.of(context).showSnackBar(
              SnackBar(content: Text('正在拨打 ${contact.phone}...')),
            );
          },
          style: ElevatedButton.styleFrom(
            backgroundColor: contact.type.color,
          ),
          child: const Text('拨打'),
        ),
      ],
    ),
  );
}

六、交互设计

6.1 总览流程

告警系统状态管理总览页用户告警系统状态管理总览页用户查看安全状态获取传感器状态返回状态数据显示安全等级点击紧急求助发送求助显示发送成功

6.2 设备管理流程

点击设备

添加设备

打开设备页

显示设备列表

用户操作

显示设备详情

查看状态信息

添加新设备

配置设备参数

6.3 告警处理流程

用户点击处理

确认处理

用户忽略

重新提醒

告警触发

待处理

处理中

已处理

忽略


七、扩展功能规划

7.1 后续版本规划

2024-01-072024-01-142024-01-212024-01-282024-02-042024-02-112024-02-182024-02-252024-03-032024-03-102024-03-172024-03-242024-03-31基础UI框架 传感器管理 告警系统 真实设备对接 推送通知 视频监控 AI智能分析 家庭共享 云端存储 V1.0 基础版本V1.1 增强版本V1.2 进阶版本家庭安全卫士应用开发计划

7.2 功能扩展建议

7.2.1 真实设备对接

对接功能:

  • WiFi/Zigbee设备协议
  • 实时数据同步
  • 远程控制
  • 固件升级
7.2.2 视频监控集成

监控功能:

  • 实时视频流
  • 云存储回放
  • 移动侦测录像
  • 双向语音
7.2.3 AI智能分析

AI功能:

  • 异常行为识别
  • 智能告警过滤
  • 安全趋势分析
  • 风险预测

八、注意事项

8.1 开发注意事项

  1. 定时器管理:状态更新Timer需要在dispose时取消

  2. 状态同步:传感器状态变化需及时更新UI

  3. 告警处理:告警记录需要持久化存储

  4. 权限处理:拨打电话需要申请相应权限

  5. 电量优化:定时刷新频率需平衡实时性和电量消耗

8.2 常见问题

问题原因解决方案
状态不更新Timer未启动检查_startStatusUpdate
告警不显示列表未刷新调用setState
联系人拨打失败权限未申请申请电话权限
设备离线网络问题检查网络连接

8.3 使用技巧

🏠 家庭安全使用技巧 🏠

传感器布置建议

  • 门窗传感器:安装在主要出入口
  • 烟雾传感器:厨房和卧室各一个
  • 漏水传感器:厨房、卫生间、阳台
  • 移动传感器:客厅和走廊
  • 燃气传感器:厨房燃气设备附近

告警处理建议

  • 警告级别:及时查看确认
  • 危险级别:立即处理或联系物业
  • 紧急级别:立即联系紧急联系人

联系人设置建议

  • 设置默认联系人便于快速联系
  • 家人、邻居、报警电话都要设置
  • 定期更新联系人信息

九、运行说明

9.1 环境要求

环境版本要求
Flutter SDK>= 3.0.0
Dart SDK>= 2.17.0
鸿蒙OSAPI 21+
Web浏览器Chrome 90+

9.2 运行命令

# 查看可用设备
flutter devices

# 运行到Web服务器
flutter run -d web-server -t lib/main_home_security.dart --web-port 8140

# 运行到鸿蒙设备
flutter run -d 127.0.0.1:5555 lib/main_home_security.dart

# 代码分析
flutter analyze lib/main_home_security.dart

十、总结

家庭安全卫士应用通过安全总览、设备管理、告警记录、紧急联系人四大模块,为用户提供了一个全方位的家庭安全监测与管理平台。应用整合6种传感器类型、4级告警体系、6种联系人类型,实现统一管理、异常告警、一键联系人等功能。

核心功能涵盖传感器状态监测、告警处理、紧急求助三大模块。传感器类型包括门窗、烟雾、漏水、移动、燃气、温度,覆盖家庭安全的主要场景;告警级别分为正常、警告、危险、紧急四级,便于用户快速判断安全状况;紧急联系人支持家人、邻居、报警、消防、急救、物业六种类型,确保紧急情况能够快速联系。

应用采用 Material Design 3 设计规范,以蓝色为主色调,象征安全与信任。通过本应用,希望能够帮助用户构建完整的家庭安全防护体系,守护家庭安全。

家庭安全卫士——守护家庭安全


Logo

讨论HarmonyOS开发技术,专注于API与组件、DevEco Studio、测试、元服务和应用上架分发等。

更多推荐