ramunarlapati-13/FFSD

GitHub: ramunarlapati-13/FFSD

基于 React Native 和 Firebase 构建的消防员安全监控应用,通过穿戴设备遥测数据实现多单元实时态势感知与事件回放。

Stars: 0 | Forks: 0

# FFSD - 消防员安全设备

实时消防员生命体征、地理围栏情报、事件回放及恢复支持。
基于 React Native + Expo + Firebase Realtime Database 构建的多单元作战仪表盘。

## 项目概述 FFSD 是一款用于多单元现场作业的端到端消防员安全监控应用。 可穿戴设备将遥测数据流式传输到 Firebase,移动应用则为现场响应和事后分析提供指挥级的态势感知。 核心作战目标: - 持续监控消防员的生命体征和移动情况。 - 快速识别紧急状态和危险位置。 - 在低连通性场景下保持可靠的追踪行为。 - 为汇报和训练提供可操作的事件回放。 ## 当前功能 | 功能 | 作用 | |---|---| | 多单元车队监控 | 在一个仪表盘中追踪多个消防员单元,包含车队卡片、状态摘要和快速切换单元功能。 | | 实时 + 每秒回退轮询 | 使用 Firebase 实时监听器作为主数据流,并提供 1 秒轮询回退机制,以便在连接不稳定时进行弹性刷新。 | | 数据库驱动的状态映射 | 将传入的 `device_state` 值转换为 NORMAL/WARNING/EMERGENCY/SOS/OFFLINE 作战状态。 | | 基于新鲜度的离线检测 | 当心跳/时间戳的新鲜度窗口超时时,将单元标记为 OFFLINE。 | | 紧急情况危急处理 | 针对 EMERGENCY、SOS 和 FALL 状态触发循环警报和振动的 CRITICAL ALERT(危急警报)模态框。 | | 恢复正常自动解除 | 当触发单元恢复至 NORMAL 且跌倒状态清除时,自动清除当前活动的危急警报。 | | 警报冷却保护 | 应用每单元/每警报的冷却机制,避免在突发更新期间出现通知/警报刷屏。 | | 地理围栏监控 (SAFE + DANGER) | 从 Firebase (`config/geofence_zones`) 加载区域,并检测安全区越界和危险区进入事件。 | | 地理围栏回退默认值 | 当 Firebase 配置缺失/无效时,自动回退到内置的默认区域。 | | 事件历史持久化 | 将周期性事件点写入 Firebase (`incident_history/{firefighterId}/{timestamp}`) 以用于汇报和回放。 | | 事件回放模式 | 支持回放窗口选择 (1h/3h/6h)、播放速度 (0.5x/1x/2x/4x)、播放/暂停以及逐帧步进。 | | 回放拖动时间轴 | 提供可点击的回放时间轴点,支持快速手动拖动至事件发生时刻。 | | 轨迹恢复模式 | 绘制最近的移动轨迹 (20/50/100 个点),以支持路线回溯/恢复。 | | 实时移动轨迹 | 维护每单元的路径轨迹,并在地图上显示所选单元的移动路线。 | | 离线地图样式 | 将地图渲染切换为离线安全样式,同时保留叠加层和作战标记。 | | 多层地图控制 | 支持矢量和卫星地图样式,并提供应用内图层切换功能。 | | 聚焦和外部导航操作 | 提供地图聚焦/居中操作,并打开平台导航应用前往选定单元的坐标。 | | 地理围栏/地图叠加层 | 同时渲染 SAFE/DANGER 多边形、实时轨迹、回放路径和轨迹叠加层。 | | 传感器遥测面板 | 显示温度、湿度、气体、移动/状态、跌倒状态以及单元级传感器健康状态 (GPS、DHT11、MPU6050、Wi-Fi)。 | | 作战分析面板 | 显示状态细分和传感器健康摘要,以提供指挥感知。 | | Dark/Light 主题切换 | 运行时主题切换,以适应不同的光照条件,提高可读性。 | ## 截图

Normal Dashboard Warning Dashboard Critical Alert Modal

## 系统架构 ``` Field Devices (firefighter_01..N) -> Wi-Fi / RTDB publish (temp, humidity, gas, fall, movement, gps, device_state, timestamp) -> Firebase Realtime Database - firefighter_01/ - firefighter_02/ - incident_history/{firefighterId}/{timestamp} - config/geofence_zones -> FFSD Mobile App (Dashboard) - Live map + unit markers + trails - Geofence overlays and alerts - Fleet vitals and status cards - Incident replay and breadcrumb recovery ``` ## Firebase 数据结构 ``` // firefighter_01/ { "device_state": "NORMAL", "temperature": 32.5, "humidity": 45.0, "gas_ppm": 25, "fall_detected": false, "movement": "MOVING", "gps": { "lat": 12.9716, "lng": 77.5946 }, "ts": 1711700000000 } ``` 支持的新鲜度时间戳键: - ts - timestamp - lastUpdated - last_update - updatedAt ``` // incident_history/firefighter_01/{timestamp}/ { "ts": 1711700000000, "lat": 12.9716, "lng": 77.5946, "temperature": 32.5, "humidity": 45.0, "gas": 25, "falling": false, "movement": "MOVING", "status": "NORMAL" } ``` ``` // config/geofence_zones/ { "zone_1": { "name": "Safe Zone A", "type": "SAFE", "center": { "lat": 12.9716, "lng": 77.5946 }, "radiusMeters": 500 }, "zone_2": { "name": "Danger Zone B", "type": "DANGER", "center": { "lat": 12.98, "lng": 77.585 }, "radiusMeters": 300 } } ``` ## 项目结构 ``` . |- app.json |- App.tsx |- index.ts |- package.json |- tsconfig.json |- src/ | |- components/ | | |- AlarmPlayer.tsx | | |- AnalyticsPanel.tsx | | |- MapWrapper.tsx | |- lib/ | | |- firebase.ts | | |- types.ts | |- screens/ | |- Dashboard.tsx |- assets/ |- docs/screenshots/ ``` ## 技术栈 | 层级 | 技术 | |---|---| | 移动端框架 | React Native (Expo SDK 55) | | 语言 | TypeScript | | 后端 | Firebase Realtime Database | | 地图 | MapLibre (inside WebView) + OpenFreemap/Esri styles | | UI 图标 | lucide-react-native | | 警报音频 | expo-av | ## 入门指南 ### 前置条件 - Node.js 18+ - Android 或 iOS 上的 Expo Go ### 安装 ``` git clone https://github.com/Rsmk27/firefighter-monitoring-device.git cd firefighter-monitoring-device/FFSD npm install --legacy-peer-deps ``` ### 配置环境 从 .env.example 创建 .env 并设置 Firebase 值。 ``` EXPO_PUBLIC_FIREBASE_API_KEY=your-key EXPO_PUBLIC_FIREBASE_DATABASE_URL=https://your-project.firebaseio.com ``` ### 运行 ``` npx expo start ``` ## 可靠性说明 - 实时数据流仍是响应式更新的主要方式。 - 每秒轮询为每个单元提供回退搜索功能。 - OFFLINE 行为基于新鲜度,并遵循数据库时间戳/状态值。 - 当状况恢复正常时,危急警报弹窗会自动解除。 ## 安全性 - 使用环境变量存储 Firebase 凭证。 - 不要提交 .env 或生产凭证文件。 - 对按角色/设备的写入/读取范围保持严格的数据库规则。 ## 开发人员 1. R.S. Manikanta - GitHub: https://github.com/Rsmk27 - LinkedIn: https://www.linkedin.com/in/srinivasamanikanta/ 2. G. Sairam - GitHub: https://github.com/sairamgalam017 - LinkedIn: https://www.linkedin.com/in/sairam-galam/ 3. J. Santhosh - GitHub: https://github.com/chintu-boltey - LinkedIn: https://www.linkedin.com/in/santhosh-juvvanapudi-07a871373/ 4. N. Ramu - GitHub: https://github.com/ramunarlapati-13 - LinkedIn: https://www.linkedin.com/in/ramunarlapati/ ## 许可证 Copyright (c) 2026 Power Pulse Team. Licensed under MIT.
标签:Expo, Firebase Realtime Database, React Native, SOS紧急报警, TypeScript, 事故回放与复盘, 低连通性弹性设计, 公共安全, 可穿戴设备遥测, 地理围栏, 多单元协同作战, 多点定位与追踪, 安全插件, 实时生命体征监测, 应急响应系统, 应急救援, 态势感知平台, 消防信息化, 消防员安全监控, 物联网数据流, 移动指挥终端, 自动化攻击