Chamberlain

Merix Logo

该项目正在进行开源。目前只有一个移动应用程序。Firebase 项目将尽快提供。

Merixstudio 的物联网会议室预订系统。Chamberlain 是我们内部 Ginny 应用程序的一部分,用于预订热门办公桌、会议室和停车位。如果您想了解更多关于此项目的信息,请查看我们的 博客文章

入门

目前我们只共享 Chamberlain 系统的客户端应用程序,因此您将无法在不进行额外工作的情况下将该应用程序与您的日历集成。我们将在尽可能快的时间内开源日历集成。

构建 Flutter 应用

  1. 通过 build_runner 生成所需文件,您可以运行 make run_build_runner 命令。

  2. 通过 Flutter Fire CLI 生成 Firebase 配置来连接 Firebase 项目。目前,不支持不同的 flavor,因此我们需要多次生成配置(取决于 flavor 的数量)。运行 flutterfire configuration 为特定 flavor(例如 prod)生成配置。

flutterfire configure -a com.merixstudio.chamberlain -i com.merixstudio.chamberlain -o lib/config/firebase/options/prod/firebase_options.dart

将生成的 android/google-services.json 复制到 flavor 目录 android/app/prod/google-services.json

为其他 flavor 重复此过程。

  1. 设置所需的 --dart-define 环境变量 CALENDAR_IDPIN_CODETIMZONE。VSC 启动配置在 .vscode/launch.json 文件中提供。

环境变量

  • FLAVOR [必需] – 允许为 firebase 项目加载不同的配置,
  • CALENDAR_ID [必需] – 可在日历设置中找到的 Google 日历 ID,
  • INTERACTION_COUNTER_DISABLED – 允许禁用自动返回状态页面,
  • PIN_CODE – 为管理部分设置 PIN 码,
  • TIMZONE – 日历事件的默认时区,
  • EMULATOR_ENABLED– 启用 firebase 模拟器支持,
  • EMULATOR_HOST – 定义 firebase 模拟器主机地址,

架构

架构的核心组件

  • BloC 用于状态管理
  • get_it + injectable 用于 DI
  • auto_route 用于路由
  • 一如既往:freezed ❤️

应用程序的总体概念非常简单。每个设备仅与 Firestore 通信以实现实时通信和离线支持。设备有两个主要任务:监听特定会议室的事件并创建新事件。Cloud Functions 负责监听事件中的更改,并通过 REST API 在 Google 日历上创建或修改它们。Firestore 存储未来两天的事件。午夜过后,Cloud Functions Scheduler 会清除数据库并获取未来两天的数据。

Google 日历的 watch 机制 用于保持所有事件的最新状态。它允许您监视特定的日历 ID。

Chamberlain flow diagram

Kiosk 模式

该应用程序已准备好在 kiosk 模式下运行。这是一种仅将平板电脑的功能限制在 Chamberlain 应用程序的模式。设备所有者是通过 ADB 设置的。在管理部分,可以禁用 kiosk 模式。要进入管理部分,请双击房间名称。

设备

我们的目标是使用一些不寻常的设备,因此我们决定在 RPI 4B 上运行 Android OS。通过 https://konstakang.com 的出色工作,我们轻松地做到了。我们使用了 LineageOS 19 (Android 12L)。该设备由官方 Raspberry Pi 7 英寸触摸屏显示器控制。

设备管理

由于可以通过 SSH 控制设备,我们决定使用 Flutter 构建一个简单的桌面应用程序来管理我们所有的设备。这是一个非常简单的应用程序,具有一些有用的功能

  • 显示设备列表
  • 显示设备信息(名称、IP、屏幕镜像预览)
  • 控制设备(重启设备、关闭屏幕等)。
  • 将命令发送到多台设备
  • 上传新 apk 以安装更新
Application & source code availalbe soon

Firebase

Firebase Cloud Functions 用于将事件与 Google 日历同步。Firestore 用于存储事件并提供与目标设备的实时通信。整个逻辑是 Ginny 应用程序的一部分。

Source code availalbe soon

待办事项

  • 发布 Firebase 项目(Google 日历集成)
  • 发布用于设备管理的专用桌面应用程序
  • (Chamberlain) 延长会议时间
  • (Chamberlain) 夜间模式 – 夜间关闭屏幕

GitHub

查看 Github