一个基于 Android 的智能家居控制面板应用,专为平板设备设计,支持 Home Assistant 集成、天气显示、提醒管理等功能。
LinkMate 是一个横屏显示的智能家居控制面板应用,可以运行在 Android 平板设备上,作为家庭智能设备的控制中心。应用支持与 Home Assistant 系统集成,提供实时设备控制、天气信息显示、提醒管理等功能。
- 支持通过 WebSocket 和 REST API 连接 Home Assistant
- 实时显示和控制多种设备类型:
- 灯光(支持亮度和色温调节)
- 开关
- 传感器
- 空调(支持温度调节和模式切换)
- 风扇
- 按钮
- 输入选择器(input_select)
- 设备图标动态颜色显示(灯实体根据亮度和色温显示不同颜色)
- 乐观更新机制,提供流畅的用户体验
- 集成和风天气 API
- 支持多种定位方式:
- GPS 自动定位
- 手动输入位置
- 显示天气描述、温度、空气质量等信息
- 支持三种显示模式:
- 垂直完整模式(1x2)
- 紧凑模式(1x1)
- 横向排列模式(2x1)
- 创建和管理提醒事项
- 支持提醒的激活和停用
- 新提醒浮动窗口通知
- 滑动切换多个提醒
- 将 Android 设备状态上报到 Home Assistant:
- 电池电量
- 充电状态
- 屏幕状态
- GPS 位置信息
- 屏幕亮度(作为 light 实体)
- 屏幕常亮开关(作为 switch 实体)
- 可配置上报间隔
- 可拖拽的网格布局系统
- 支持自定义网格列数和行数
- 每个组件可独立调整位置
- 支持保存和恢复布局配置
- 内置 Ktor Web 服务器
- 提供 RESTful API 接口
- 支持密码保护
- 可用于远程控制或第三方集成
- 屏幕亮度管理(可通过 Home Assistant 控制)
- 屏幕常亮开关(可通过 Home Assistant 控制)
- 支持接近传感器唤醒(可选)
- 支持动态系统主题
- 支持自定义主色调
- 自动适配浅色/深色模式
- Kotlin - 主要编程语言
- Jetpack Compose - UI 框架
- Material 3 - 设计系统
- Android Architecture Components - 架构组件
- ViewModel
- LiveData / StateFlow
- Room Database
- Navigation Component
- Hilt - 依赖注入框架
- Retrofit - REST API 客户端
- OkHttp - HTTP 客户端和 WebSocket 支持
- Ktor - 嵌入式 Web 服务器
- Room Database - 本地数据库
- DataStore - 配置数据存储
- Coil - 图片加载
- Gson - JSON 序列化(通过 Retrofit converter-gson)
- Kotlin Coroutines - 异步编程支持
- Google Play Services Location - 位置服务
- 最低 Android 版本: Android 5.0 (API 21)
- 目标 Android 版本: Android 14 (API 34)
- 屏幕方向: 横屏(Landscape)
- 设备类型: 推荐平板设备
app/src/main/java/io/linkmate/
├── data/
│ ├── device/ # 设备管理(亮度、屏幕控制等)
│ ├── local/ # Room 数据库实体和 DAO
│ ├── model/ # 数据模型
│ ├── remote/ # 远程 API 服务
│ │ ├── hefeng/ # 和风天气 API
│ │ └── homeassistant/ # Home Assistant API
│ └── repository/ # 数据仓库层
├── di/ # 依赖注入模块
├── navigation/ # 导航配置
├── service/ # 后台服务(Web 服务器)
├── ui/
│ ├── components/ # UI 组件(可拖拽网格等)
│ ├── screens/ # 屏幕组件
│ ├── theme/ # 主题配置
│ └── viewmodels/ # ViewModel
├── util/ # 工具类
├── LinkMateApp.kt # Application 类(Hilt 应用入口)
├── MainActivity.kt # 主 Activity
├── MainScreen.kt # 主屏幕
├── BakingScreen.kt # 烘焙模式屏幕
├── BakingViewModel.kt # 烘焙模式 ViewModel
└── UiState.kt # UI 状态定义
- 在设置页面输入 Home Assistant 服务器地址(例如:
http://192.168.1.100:8123) - 输入访问令牌(Long-Lived Access Token)
- 选择要显示的实体 ID
- 应用会自动连接到 Home Assistant 并同步设备状态
- 注册和风天气账号并获取 API Key
- 在设置页面输入 API Key
- 选择定位方式:
- GPS:自动使用设备 GPS 定位
- 手动:输入城市名称或坐标(格式:
经度,纬度)
- 设置刷新间隔(分钟)
- 在设置中启用"设备状态上报"
- 设置上报间隔(分钟)
- 应用会自动在 Home Assistant 中创建以下实体:
sensor.{device_id}_battery_level- 电池电量binary_sensor.{device_id}_charging- 充电状态binary_sensor.{device_id}_screen- 屏幕状态light.{device_id}_screen_brightness- 屏幕亮度switch.{device_id}_keep_screen_on- 屏幕常亮device_tracker.{device_id}- 位置追踪
- 在设置中启用 Web 服务器
- 设置端口号(默认:8080)
- 设置访问密码(4 位数字,首次启动自动生成)
- 服务器会在应用启动时自动运行
应用需要以下权限:
- INTERNET - 网络访问(连接 Home Assistant 和天气 API)
- ACCESS_FINE_LOCATION - 精确位置(GPS 定位)
- ACCESS_COARSE_LOCATION - 粗略位置(网络定位)
- ACCESS_BACKGROUND_LOCATION - 后台位置(可选,用于持续定位)
- WAKE_LOCK - 唤醒锁(保持屏幕常亮)
- FOREGROUND_SERVICE - 前台服务(Web 服务器)
- Android Studio Hedgehog 或更高版本
- JDK 8 或更高版本
- Android SDK API 34
- 克隆项目到本地
- 使用 Android Studio 打开项目
- 同步 Gradle 依赖
- 配置签名(如需要发布版本)
- 连接 Android 设备或启动模拟器
- 运行应用
# Debug 构建
./gradlew assembleDebug
# Release 构建
./gradlew assembleRelease
# 安装到设备
./gradlew installDebug项目采用 MVVM(Model-View-ViewModel)架构模式:
- Model: 数据层(Repository, Entity, API Service)
- View: UI 层(Compose Screens, Components)
- ViewModel: 业务逻辑层(处理数据流和 UI 状态)
- Repository 层负责数据获取和缓存
- ViewModel 观察 Repository 的数据流
- UI 通过 StateFlow/LiveData 观察 ViewModel 状态
- 用户操作通过 ViewModel 方法修改状态
- ViewModel 通过 Repository 更新数据源
Room 数据库版本变更时,需要在 AppDatabase 中添加迁移策略。数据库 schema 文件位于 app/schemas/ 目录。
- 首次连接 Home Assistant 时可能需要等待几秒钟
- 某些设备可能不支持屏幕亮度控制
- Web 服务器默认仅监听本地网络接口
- 支持更多设备类型(摄像头、门锁等)
- 添加场景和自动化支持
- 支持多用户账户
- 添加数据备份和恢复功能
- 支持自定义图标和主题
- 添加语音控制支持
本项目采用 MIT 许可证。
欢迎提交 Issue 和 Pull Request。
如有问题或建议,请通过 GitHub Issues 联系。