Monitoring Fire Safety Sensors in a Mobile App
We develop mobile apps for monitoring fire safety sensors, integrating with any PPK via OPC UA, MQTT, or RS-232. In one project for a hypermarket, we encountered a situation: the app showed "All clear", while the control panel had a red indicator. It turned out the gateway incorrectly parsed responses over RS-232. Since then, every bit in the protocol is verified with double reading. Our team has been developing such apps for 7+ years with over 50 successful projects, saving clients up to 30% on monthly monitoring costs. We guarantee reliability and compliance with fire safety requirements.
The fire alarm control panel (PPK/panel) of types Bolid S2000-KDL, Honeywell NOTIFIER, Siemens Sinteso always remains the master: the mobile app reads its state but never overrides local automation. Acknowledging an alarm on the phone does not reset the PPK—this requires a physical keypad.
Which PPKs and Protocols Are Supported?
We work with any PPK that provides access via OPC UA, MODBUS TCP, REST API, or through RS-232 with a proprietary protocol. For Honeywell NOTIFIER we use REST API via LifeSafety Power Manager, for Bolid S2000-KDL—RS-232 converted to MQTT via a Linux gateway. OPC UA is the standard for modern systems, but older PPKs often require direct port reading. In any case, we implement a reliable chain: PPK → gateway → MQTT → mobile app.
Integration with PPK via OPC UA and RS-232
Typical architecture: a Linux mini-server in the server room reads the PPK via RS-232/OPC and publishes normalized events to MQTT. The mobile client subscribes to MQTT over TLS. We use Flutter 3.x (Dart) with the mqtt_client library, providing flexibility for both iOS and Android.
MQTT topic structure:
fire/{buildingId}/panel/{panelId}/zone/{zoneId}/state fire/{buildingId}/panel/{panelId}/alarm fire/{buildingId}/panel/{panelId}/fault Zone state is an enum: normal, alarm, fault, disabled, test.
MQTT delivers events within 100 ms, which is 10 times faster than REST polling. For alarms, this is critical.
Priority and Display
In the app, events are strictly prioritized:
enum FireEventPriority { alarm, fault, warning, normal } Color getZoneColor(ZoneState state) => switch (state) { ZoneState.alarm => const Color(0xFFD32F2F), // red ZoneState.fault => const Color(0xFFFF6F00), // orange ZoneState.disabled => const Color(0xFF757575), // gray ZoneState.test => const Color(0xFF1976D2), // blue ZoneState.normal => const Color(0xFF388E3C), // green }; An alarm must be immediately visible: FCM priority: high + notification.android.channel_id with IMPORTANCE_HIGH and sound. On Xiaomi/Huawei devices, without notification_priority: PRIORITY_MAX the notification gets lost in the background—this is a common mistake.
How We Ensure Reliability
We design the system so that failure of the mobile app does not affect fire automation. We use dual channels: MQTT + HTTP fallback, caching last states on the device. Every alarm event is logged with timestamp and zone ID. We guarantee push notification delivery within 3 seconds when internet is available.
| Protocol | Latency | Reliability | Implementation Complexity |
|---|---|---|---|
| MQTT | <100 ms | 99.99% | Medium |
| REST | 1-5 s | 99.9% | Low |
Real case: for a shopping mall with 15 Bolid PPKs (2000 zones), we deployed a fault-tolerant cluster: two gateways on different servers, MQTT with QoS 2, and a separate channel for alarms. Over a year of operation—zero false negative notifications.
Setting Up Push Notifications for Alarms
- Create a dedicated notification channel in
AndroidManifest.xmlwithIMPORTANCE_HIGH. - Set up FCM with
priority: highand specifychannel_id. - For iOS, add
criticalAlertandcontent-available: 1in payload. - Test on real devices, including Xiaomi and Huawei.
| Platform | Notification Service | Priority | Background Fetch |
|---|---|---|---|
| Android | FCM | HIGH | + (data-only) |
| iOS | APNs | critical | + (background fetch) |
Push notifications on Android via FCM are delivered in 1-2 seconds on average, which is 5 times faster than standard polling.
Development Stages
- Analysis and design—discuss PPK type, number of zones, mapping requirements.
- Gateway development—write protocol converter in Python/C++ for Linux.
- Mobile app—Flutter 3.x (Swift/Kotlin for native parts).
- Testing—unit, integration, load up to 1000 events per second.
- Deployment—publishing to App Store and Google Play, setting up TestFlight and Firebase App Distribution.
- Training—instructions for duty staff, handover of source code and documentation.
Scope of Work
- Architecture documentation (integration scheme, ER diagrams)
- Gateway development (Linux, Python/C++, protocol conversion)
- Mobile app (Flutter 3.x, Swift 5.9, Kotlin)
- Push notification setup (FCM + APNs)
- Testing (unit, integration, load)
- Deployment to App Store Connect and Google Play Console
- Training of duty personnel and technical documentation
Event Log and Responsible Duty Officer
Every alarm event is logged with timestamp, zone ID, sensor type, and the user who acknowledged receipt. Acknowledging in the app is only an informational layer, not a replacement for physical reset on the PPK.
Thanks to automation, our clients save up to 30% on monthly monitoring, eliminating false dispatches and reducing response time. The development cost is calculated individually, but typical projects range from $8,000 to $15,000.
Contact us for a project assessment—we will offer the optimal solution. Request a consultation for integrating your PPKs into a mobile app.
Standards: NFPA 72, SP 5.13130.2009







