Flutter 框架跨平台鸿蒙开发 - 家庭能源可视化

家庭能源可视化应用


欢迎加入开源鸿蒙跨平台社区:

https://openharmonycrossplatform.csdn.net

一、项目概述

运行效果图

1.1 应用简介

家庭能源可视化是一款智能家居类应用,为家庭用户提供直观的用电监测与节能管理服务。应用以绿色为主色调,象征节能环保的理念。界面设计采用卡片式布局,让用户一目了然地掌握家庭用电情况。

应用实时显示各电器的用电状态,通过热力图直观展示用电规律,提供个性化的节能建议。用户可以在不知不觉中养成节能习惯,有效降低电费支出。智能管理家庭能源,从了解开始,从改变做起。

1.2 核心功能

功能模块 功能描述 实现方式
实时监测 实时功率显示 Timer定时刷新
电器管理 各电器用电统计 列表卡片展示
热力图 用电规律可视化 CustomPaint绘制
节能建议 个性化节能方案 智能推荐系统
用电统计 日/月用电分析 数据聚合计算
电费计算 自动电费估算 阶梯电价模型

1.3 电器分类体系

应用支持10种常见家用电器:

电器类型 图标 颜色 额定功率 运行特点
空调 ac_unit #2196F3 1500W 制冷制热
冰箱 kitchen #4CAF50 150W 24小时运行
洗衣机 local_laundry_service #9C27B0 500W 间歇运行
电视 tv #FF5722 120W 娱乐设备
照明 lightbulb #FFC107 60W 日常照明
电脑 computer #607D8B 200W 办公娱乐
热水器 water_drop #00BCD4 2000W 加热耗能
微波炉 microwave #E91E63 1000W 短时高功率
电饭煲 rice_bowl #795548 800W 烹饪设备
电风扇 toys #03A9F4 50W 夏季降温

1.4 能耗等级体系

等级 名称 颜色 功率范围 状态说明
低能耗 Low #4CAF50 0-30% 节能状态
中等 Medium #FFC107 30-60% 正常用电
高能耗 High #FF9800 60-80% 需要关注
超高 Critical #F44336 80-100% 建议节能

1.5 时段电价体系

时段 时间范围 电价倍率 说明
凌晨 0:00-6:00 0.5 低谷电价
早晨 6:00-9:00 1.0 平时电价
上午 9:00-12:00 1.0 平时电价
中午 12:00-14:00 1.2 峰时电价
下午 14:00-18:00 1.0 平时电价
傍晚 18:00-21:00 1.5 高峰电价
夜间 21:00-24:00 0.8 低谷电价

1.6 技术栈

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

1.7 项目结构

复制代码
lib/
└── main_home_energy.dart
    ├── HomeEnergyApp               # 应用入口
    ├── ApplianceType               # 电器类型枚举
    ├── EnergyLevel                 # 能耗等级枚举
    ├── TimeSlot                    # 时段枚举
    ├── ApplianceUsage              # 电器用电模型
    ├── HourlyUsage                 # 小时用电模型
    ├── DailyUsage                  # 日用电模型
    ├── EnergySavingTip             # 节能建议模型
    ├── HomeEnergyHomePage          # 主页面(底部导航)
    ├── _buildDashboardPage         # 总览页面
    ├── _buildAppliancesPage        # 电器页面
    ├── _buildHeatmapPage           # 热力图页面
    ├── _buildTipsPage              # 节能页面
    └── HourlyChartPainter          # 用电曲线绘制器

二、设计理念

2.1 能源管理可视化

家庭能源可视化
实时监测
电器管理
热力图分析
节能建议
实时功率
能耗等级
用电曲线
电器列表
开关控制
用电统计
月度热力图
日度热力图
用电规律
节能贴士
潜在节省
行动建议

2.2 节能管理流程

节能管理
监测阶段
实时功率监测
电器用电统计
用电规律分析
分析阶段
热力图展示
高峰时段识别
高耗电器定位
行动阶段
采纳节能建议
调整用电习惯
追踪节省效果

2.3 色彩体系

应用采用绿色为主色调:

颜色类型 色值 RGB 用途
主色 #4CAF50 76,175,80 导航、按钮、强调
辅助色 #8BC34A 139,195,74 渐变、背景
低能耗色 #4CAF50 76,175,80 低能耗标识
中等色 #FFC107 255,193,7 中等能耗
高能耗色 #FF9800 255,152,0 高能耗警告
超高色 #F44336 244,67,54 超高能耗警示

2.4 用电数据流程

界面展示 数据处理 数据采集 电器设备 界面展示 数据处理 数据采集 电器设备 loop [每3秒] 实时功率数据 原始数据流 聚合计算 更新UI 刷新数据 更新显示


三、系统架构

3.1 整体架构图

Data Layer
Business Layer
Presentation Layer
主页面

HomeEnergyHomePage
总览页
电器页
热力图页
节能页
实时功率卡片
用电统计卡片
用电曲线图
电器列表
电器详情
月度热力图
日度热力图
节省潜力卡片
节能建议列表
实时监测引擎

Timer定时刷新
能耗计算器

功率/用电量/费用
热力图生成器

数据可视化
节能推荐系统

智能建议
ApplianceUsage

电器用电数据
HourlyUsage

小时用电数据
DailyUsage

日用电数据
EnergySavingTip

节能建议数据

3.2 类图设计

manages
manages
manages
manages
uses
uses
uses
has
HomeEnergyApp
+Widget build()
<<enumeration>>
ApplianceType
+airConditioner 空调
+refrigerator 冰箱
+washingMachine 洗衣机
+television 电视
+lighting 照明
+computer 电脑
+waterHeater 热水器
+microwave 微波炉
+riceCooker 电饭煲
+electricFan 电风扇
+String label
+IconData icon
+Color color
+int defaultPower
+String description
<<enumeration>>
EnergyLevel
+low 低能耗
+medium 中等
+high 高能耗
+critical 超高
+String label
+Color color
+int minPercent
+int maxPercent
+fromPercent() : EnergyLevel
<<enumeration>>
TimeSlot
+midnight 凌晨
+morning 早晨
+forenoon 上午
+noon 中午
+afternoon 下午
+evening 傍晚
+night 夜间
+String label
+int startHour
+int endHour
+double priceMultiplier
+fromHour() : TimeSlot
ApplianceUsage
+String id
+ApplianceType type
+double currentPower
+double todayUsage
+double monthUsage
+bool isRunning
+DateTime lastActive
+double todayCost
+double monthCost
HourlyUsage
+int hour
+double usage
+double cost
DailyUsage
+DateTime date
+double totalUsage
+double totalCost
+Map<ApplianceType,double> applianceUsage
EnergySavingTip
+String id
+String title
+String content
+String category
+double potentialSaving
+IconData icon
+Color color
HomeEnergyHomePage
-int _currentIndex
-List<ApplianceUsage> _applianceUsages
-List<HourlyUsage> _hourlyUsages
-List<DailyUsage> _dailyUsages
-List<EnergySavingTip> _savingTips
-Timer _updateTimer
-AnimationController _pulseController
+void _initializeData()
+void _startRealTimeUpdate()
+void _updateRealTimeData()
+void _toggleAppliance()

3.3 实时数据更新流程

UI组件 电器数据 状态管理 Timer UI组件 电器数据 状态管理 Timer 每3秒触发 更新运行中电器功率 添加用电量累计 返回更新后数据 setState刷新 重新计算总功率 更新能耗等级


四、核心功能实现

4.1 电器类型枚举

定义10种家用电器:

dart 复制代码
enum ApplianceType {
  airConditioner('空调', Icons.ac_unit, Color(0xFF2196F3), 1500, '制冷制热'),
  refrigerator('冰箱', Icons.kitchen, Color(0xFF4CAF50), 150, '24小时运行'),
  washingMachine('洗衣机', Icons.local_laundry_service, Color(0xFF9C27B0), 500, '间歇运行'),
  television('电视', Icons.tv, Color(0xFFFF5722), 120, '娱乐设备'),
  lighting('照明', Icons.lightbulb, Color(0xFFFFC107), 60, '日常照明'),
  computer('电脑', Icons.computer, Color(0xFF607D8B), 200, '办公娱乐'),
  waterHeater('热水器', Icons.water_drop, Color(0xFF00BCD4), 2000, '加热耗能'),
  microwave('微波炉', Icons.microwave, Color(0xFFE91E63), 1000, '短时高功率'),
  riceCooker('电饭煲', Icons.rice_bowl, Color(0xFF795548), 800, '烹饪设备'),
  electricFan('电风扇', Icons.toys, Color(0xFF03A9F4), 50, '夏季降温');

  final String label;
  final IconData icon;
  final Color color;
  final int defaultPower;
  final String description;

  const ApplianceType(this.label, this.icon, this.color, this.defaultPower, this.description);
}

4.2 能耗等级枚举

定义四级能耗体系:

dart 复制代码
enum EnergyLevel {
  low('低能耗', Color(0xFF4CAF50), 0, 30),
  medium('中等', Color(0xFFFFC107), 30, 60),
  high('高能耗', Color(0xFFFF9800), 60, 80),
  critical('超高', Color(0xFFF44336), 80, 100);

  final String label;
  final Color color;
  final int minPercent;
  final int maxPercent;

  const EnergyLevel(this.label, this.color, this.minPercent, this.maxPercent);

  static EnergyLevel fromPercent(double percent) {
    for (var level in EnergyLevel.values) {
      if (percent >= level.minPercent && percent < level.maxPercent) {
        return level;
      }
    }
    return EnergyLevel.critical;
  }
}

4.3 实时数据更新

定时刷新电器数据:

dart 复制代码
void _startRealTimeUpdate() {
  _updateTimer = Timer.periodic(const Duration(seconds: 3), (timer) {
    _updateRealTimeData();
  });
}

void _updateRealTimeData() {
  final random = Random();
  setState(() {
    for (var usage in _applianceUsages) {
      if (usage.isRunning) {
        final fluctuation = 0.9 + random.nextDouble() * 0.2;
        _applianceUsages[_applianceUsages.indexOf(usage)] = ApplianceUsage(
          id: usage.id,
          type: usage.type,
          currentPower: usage.type.defaultPower * fluctuation,
          todayUsage: usage.todayUsage + usage.type.defaultPower * 0.001,
          monthUsage: usage.monthUsage,
          isRunning: usage.isRunning,
          lastActive: DateTime.now(),
        );
      }
    }
    _calculateTotals();
  });
}

4.4 热力图颜色计算

根据用电强度返回对应颜色:

dart 复制代码
Color _getHeatmapColor(double intensity) {
  if (intensity < 0.2) return const Color(0xFFE8F5E9);
  if (intensity < 0.4) return const Color(0xFFC8E6C9);
  if (intensity < 0.6) return const Color(0xFFFFEB3B);
  if (intensity < 0.8) return const Color(0xFFFF9800);
  return const Color(0xFFF44336);
}

4.5 用电曲线绘制

使用CustomPaint绘制24小时用电曲线:

dart 复制代码
class HourlyChartPainter extends CustomPainter {
  final List<HourlyUsage> usages;

  @override
  void paint(Canvas canvas, Size size) {
    final maxUsage = usages.map((u) => u.usage).reduce(max);
    final barWidth = size.width / 24;
    final paint = Paint()..style = PaintingStyle.fill;

    for (int i = 0; i < usages.length; i++) {
      final usage = usages[i];
      final barHeight = (usage.usage / maxUsage) * size.height;
      final x = i * barWidth;
      final y = size.height - barHeight;

      final intensity = usage.usage / maxUsage;
      paint.color = _getBarColor(intensity);

      final rect = RRect.fromRectAndRadius(
        Rect.fromLTWH(x + 1, y, barWidth - 2, barHeight),
        const Radius.circular(2),
      );
      canvas.drawRRect(rect, paint);
    }
  }
}

4.6 节能建议系统

提供个性化节能建议:

dart 复制代码
List<EnergySavingTip> _savingTips = [
  EnergySavingTip(
    id: 't1',
    title: '空调温度优化',
    content: '将空调温度调高1°C,可节省约10%的空调用电。建议夏季设置26°C,冬季设置20°C。',
    category: '温控',
    potentialSaving: 15.0,
    icon: Icons.thermostat,
    color: const Color(0xFF2196F3),
  ),
  EnergySavingTip(
    id: 't3',
    title: '热水器定时',
    content: '热水器是家庭耗电大户。建议设置定时加热,避开用电高峰期,仅在需要时加热。',
    category: '热水',
    potentialSaving: 25.0,
    icon: Icons.timer,
    color: const Color(0xFF00BCD4),
  ),
];

五、UI设计规范

5.1 配色方案

应用采用绿色为主色调:

颜色类型 色值 用途
主色 #4CAF50 导航、按钮、强调
辅助色 #8BC34A 渐变、背景
低能耗色 #4CAF50 低能耗标识
中等色 #FFC107 中等能耗
高能耗色 #FF9800 高能耗警告
超高色 #F44336 超高能耗警示

5.2 字体规范

元素 字号 字重 颜色
页面标题 20px Bold #000000
实时功率 48px Bold 能耗等级颜色
电器名称 15px SemiBold #000000
用电数据 12px Regular #757575
节省金额 36px Bold #FFFFFF

5.3 组件规范

5.3.1 实时功率卡片
复制代码
┌─────────────────────────────────────────┐
│              ⚡ 实时功率                 │
│                                         │
│              1234 W                     │
│                                         │
│           [中等能耗]                     │
└─────────────────────────────────────────┘
5.3.2 电器卡片
复制代码
┌─────────────────────────────────────────┐
│ [❄️] 空调              [运行中]    [○] │
│      当前功率: 1520W                    │
│      今日: 3.25 kWh                     │
└─────────────────────────────────────────┘
5.3.3 热力图单元格
复制代码
┌───┬───┬───┬───┬───┬───┬───┐
│ 1 │ 2 │ 3 │ 4 │ 5 │ 6 │ 7 │  ← 周日-周六
├───┼───┼───┼───┼───┼───┼───┤
│🟢│🟢│🟡│🟡│🟠│🟢│🟢│  ← 颜色深浅表示用电强度
├───┼───┼───┼───┼───┼───┼───┤
│🟢│🟡│🟠│🔴│🟠│🟡│🟢│
└───┴───┴───┴───┴───┴───┴───┘

六、交互设计

6.1 总览页面交互

查看实时功率
查看用电曲线
查看统计卡片
用户操作
操作类型
显示能耗等级
展示24小时数据
显示日/月用电
颜色动态变化
柱状图交互
点击查看详情

6.2 电器管理流程

开关控制 电器详情 电器列表 用户 开关控制 电器详情 电器列表 用户 浏览电器状态 显示运行状态 切换电器开关 更新状态 刷新显示 点击电器卡片 显示详情弹窗 展示用电数据

6.3 页面切换状态

点击电器Tab
点击热力图Tab
点击节能Tab
点击总览Tab
点击热力图Tab
点击节能Tab
点击总览Tab
点击电器Tab
点击节能Tab
点击总览Tab
点击电器Tab
点击热力图Tab
总览页
电器页
热力图页
节能页


七、数据分析

7.1 统计指标

统计项 计算方式 说明
实时功率 运行中电器功率之和 当前用电状态
今日用电 各电器今日用电累加 日用电量
今日费用 今日用电 × 0.5元/kWh 日电费估算
本月用电 各电器月用电累加 月用电量
本月费用 本月用电 × 0.5元/kWh 月电费估算

7.2 能耗分析

dart 复制代码
void _calculateTotals() {
  _totalCurrentPower = _applianceUsages.fold(0, (sum, u) => sum + u.currentPower);
  _todayTotalUsage = _applianceUsages.fold(0, (sum, u) => sum + u.todayUsage);
  _todayTotalCost = _applianceUsages.fold(0, (sum, u) => sum + u.todayCost);
  _monthTotalUsage = _applianceUsages.fold(0, (sum, u) => sum + u.monthUsage);
  _monthTotalCost = _applianceUsages.fold(0, (sum, u) => sum + u.monthCost);
}

7.3 节能潜力分析

建议类型 潜在节省 实施难度
空调温度优化 ¥15/月 简单
热水器定时 ¥25/月 中等
待机设备断电 ¥8/月 简单
LED照明替换 ¥12/月 中等
错峰用电 ¥10/月 简单
冰箱合理使用 ¥5/月 简单

八、扩展功能规划

8.1 后续版本规划

2024-01-07 2024-01-14 2024-01-21 2024-01-28 2024-02-04 2024-02-11 2024-02-18 2024-02-25 2024-03-03 2024-03-10 2024-03-17 2024-03-24 实时监测 电器管理 热力图展示 节能建议 智能插座对接 远程控制 电费账单分析 AI节能推荐 家庭能源报告 社区能耗对比 V1.0 基础版本 V1.1 增强版本 V1.2 进阶版本 家庭能源可视化开发计划

8.2 功能扩展建议

8.2.1 智能插座对接

接入智能插座实现真实数据采集:

  • WiFi/蓝牙插座协议
  • 实时功率读取
  • 远程开关控制
  • 定时任务设置
8.2.2 AI节能推荐

基于用电数据的智能推荐:

  • 用电习惯分析
  • 异常用电预警
  • 个性化节能方案
  • 电费预测
8.2.3 家庭能源报告

生成详细的能源报告:

  • 周报/月报生成
  • 用电趋势分析
  • 节能效果追踪
  • 分享与对比

九、注意事项

9.1 开发注意事项

  1. 定时器管理:Timer需要在dispose时取消,避免内存泄漏

  2. 状态更新:使用setState刷新UI,注意性能优化

  3. 数据精度:用电数据保留适当小数位,避免精度问题

  4. 动画控制:AnimationController需要正确初始化和释放

9.2 常见问题

问题 原因 解决方案
功率不更新 Timer未启动 检查_startRealTimeUpdate
热力图颜色异常 强度计算错误 检查intensity范围
费用计算不准 电价模型错误 验证阶梯电价
动画卡顿 刷新频率过高 降低刷新频率

9.3 使用提示

💡 家庭能源可视化使用小贴士 💡

关注实时功率,了解当前用电状态。

查看热力图,发现用电规律。

采纳节能建议,不知不觉省电费。

定期查看统计,追踪节能效果。

提示:养成随手关灯、合理使用空调的好习惯,节能从点滴做起。


十、运行说明

10.1 环境要求

环境 版本要求
Flutter SDK >= 3.0.0
Dart SDK >= 2.17.0
鸿蒙OS API 21+

10.2 运行命令

bash 复制代码
# 查看可用设备
flutter devices

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

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

# 运行到Windows
flutter run -d windows -t lib/main_home_energy.dart

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

十一、总结

家庭能源可视化是一款智能家居类应用,为家庭用户提供直观的用电监测与节能管理服务。应用以绿色为主色调,采用卡片式布局,让用户一目了然地掌握家庭用电情况。

从技术实现来看,应用使用枚举类型定义10种家用电器、4级能耗等级和7个时段电价,通过Timer实现每3秒的实时数据刷新,使用CustomPaint绘制用电曲线和热力图。节能建议系统提供6条个性化建议,累计潜在节省可达75元/月。

从用户体验来看,应用提供直观的实时功率显示,让用户了解当前用电状态。电器管理功能支持开关控制和用电统计,热力图功能直观展示用电规律,节能建议帮助用户养成节能习惯。

应用不仅是一个用电监测工具,更是一个节能管理助手。它提醒我们:关注实时功率,了解当前用电状态;查看热力图,发现用电规律;采纳节能建议,不知不觉省电费;定期查看统计,追踪节能效果。在家庭能源管理的道路上,家庭能源可视化为用户提供了全方位的辅助工具。

智能管理家庭能源,从了解开始

相关推荐
Utopia^3 小时前
Flutter 框架跨平台鸿蒙开发 - 植物识别科普
flutter·华为·harmonyos
世人万千丶3 小时前
Flutter 框架跨平台鸿蒙开发 - 气味图书馆应用
学习·flutter·华为·开源·harmonyos·鸿蒙
一直在想名3 小时前
Flutter 框架跨平台鸿蒙开发 - 读书交流俱乐部
flutter·华为·harmonyos
前端不太难3 小时前
鸿蒙 App、PC、游戏,本质是同一套系统吗?
游戏·状态模式·harmonyos
Cxiaomu3 小时前
Flutter 录制视频+大文件上传 MinIO + NodeJS落库
flutter·音视频·文件上传
独特的螺狮粉3 小时前
雾色配色器:鸿蒙Flutter框架 实现的配色方案生成工具
flutter·华为·架构·开源·harmonyos
特立独行的猫a4 小时前
HarmonyOS鸿蒙PC的QT应用开发:(二、开发环境搭建及第一个HelloWorld)
qt·华为·harmonyos·鸿蒙·鸿蒙pc
浮芷.4 小时前
Flutter 框架跨平台鸿蒙开发 - 旧物改造灵感库应用
科技·flutter·华为·harmonyos·鸿蒙
luoganttcc4 小时前
华为 的 npu 架构如何 进行 flash attention
数据库·华为