Alarm Display for Fire Departments
SituationBoard is a web-based application that provides an alarm and information display for fire departments and emergency services. It consists of a Python backend (that is extendable via plugins) and an HTML/JavaScript frontend. SituationBoard offers a lot of configuration options and supports different alarm sources. In addition, an alarm can trigger several actions (e.g. sending alarm messages via an external service or controlling outlets / alarm lights).
Keywords: Alarm, Emergency, Operation, Fire, Rescue, Mission, Situation, Incident, Briefing, Display, Monitor, Screen, Dashboard, Board, View, Panel, Visualization, Einsatz, Lage, Feuerwehr, FW, FFW, THW, Technisches Hilfswerk, Rettungsdienst, Alarmierung, Visualisierung, Anzeige, Bildschirm, Alarmmonitor, Einsatzmonitor, Alarmanzeige, Einsatzanzeige, Alarmdisplay, Einsatzdisplay
- supports multiple sources (e.g. SMS and binary sources)
- alarm view with optional support for maps (showing route and fire hydrants at location)
- enables forwarding of alarms to external alarm services
- can trigger a variety of other alarm actions (e.g. turn on lights)
- stores alarms in a database with CSV import/export support
- standby view with recent alarms, statistics and upcoming calendar events
- support for an arbitrary number of screens/monitors
- extensive configuration options for frontend and backend
- robust handling of alarms (fallback to raw mode if messages cannot be parsed)
- extendable via plugins (alarm sources/parsers, alarm actions)
- setup script, systemd service and extensive documentation
Standby View (showing recent alarms, statistics and upcoming calendar events)
Alarm View with Maps (showing nearby fire hydrants, water tanks etc.)
Simplified Alarm View (for improved readability)
Overview of SituationBoard (with a selection of source and action plugins)
This project is licensed unter the terms of the GNU Affero General Public License, version 3 (AGPLv3). See LICENSE file for more details.
The credits in form of a list of contributors and used third-party projects can be found in CREDITS.md.
- Raspberry Pi or another Linux box
- Huawei E303 UMTS-Modem (for alarm reception via SMS)
- HDMI TV/Display (with optional CEC support)
- Internet access (optional for calendar updates, maps and external alarm services)
- Linux (with systemd and GUI)
- Gammu (SMS/Phone Library)
- Python (Version >= 3.7)
- Flask (Webserver)
- Flask-SocketIO (Socket IO for Webserver)
- some other Python, JavaScript and Linux packages
To install SituationBoard, checkout this GIT repository to the target machine and use the install
command of the sbctl
tool:
# Clone GIT with SSH key:
git clone git@github.com:SituationBoard/SituationBoard.git
# Clone GIT without SSH key:
git clone https://github.com/SituationBoard/SituationBoard.git
# Install SituationBoard:
cd SituationBoard
sudo ./sbctl install
The automatic setup should work on Debian-based Linux distros (like Raspbian or Ubuntu).
It first asks some questions on required features and then installs all the required dependencies.
It also makes several adjustments to the system depending on the selected features (e.g. enables autostart of the browser, disables screensaver, ...).
After the installation, it is necessary to adjust the configuration in the situationboard.conf
file before the first start.
In addition to the setup script, there is also a guide on how to install SituationBoard manually.
Depending on your needs it might also be useful to enable the SSH daemon
for remote command line access and the automatic GUI login on startup.
On Raspbian both these settings can be configured with the command sudo raspi-config
.
To interact with the backend server the sbctl
command line tool is used.
It allows debugging, importing/exporting data and controlling the systemd service.
For a full list of available commands run the sbctl
command line tool (without any parameter).
Before running the server for the first time, make sure you adjusted the configuration in the situationboard.conf
file according to your needs.
An extensive documentation on the configuration options is available here.
Afterwards, test your setup by executing:
sbctl run
The server should now be running in the background and the website of the frontend should be available under:
http://localhost:5000
All console output of the backend server is also written to situationboard.log
.
To kill the server use the command sbctl kill
.
By default, SituationBoard is configured for testing/development purposes and therefore uses the dummy
driver as source for events.
This allows you to send test alarms to the running server with one of the following two commands.
To simulate regular (text) alarms use:
sbctl dalarm
To simulate binary alarms use:
sbctl dbinary
To export all alarms from the database and store them into a CSV file use the following command:
sbctl export <csv-file>
This export functionality is handy for example to backup alarm events in a human-readable format, to allow processing of alarm events with external tools, or to analyze received alarm events manually.
More details on alarm events, their information and the CSV format can be found in docs/CSV.md.
To import alarms from a CSV file and add them to an existing database use the following command:
sbctl import <csv-file>
This import functionality is handy for example to restore CSV backups or to add/edit alarm events manually.
To also reset the database before importing the alarms from the CSV file use the following command instead:
sbctl rimport <csv-file>
After adjusting the configuration and extensive testing, the following commands can be used to permanently enable the service:
sbctl enable
sbctl start
To update the local installation with a git pull
of the newest version use the command:
sbctl update
After an update it might be necessary to adjust your situationboard.conf
configuration file
(see CHANGELOG.md and docs/Configuration.md for details).
To backup the configuration, the database and a CSV to a remote machine use:
sbctl backup <HOST>:<PATH>
If you use the SMS
source driver, the information on the standby view can be updated via SMS.
To update the header or news line you can simply write an SMS in the format
header=<HEADER_TEXT>
or
news=<NEWS_TEXT>
If there is no text specified for header/news the corresponding lines will be hidden from the standby view.
SituationBoard comes with a variety of source drivers, message parsers and action handlers. However, you can always add additional sources, parsers and actions in form of plugins (and share them with others).
Pull requests (e.g. with new plugins or other improvements) are always welcome.
Depending on the alarm source (SMS, Binary, Dummy, ...) and the format of the alarm messages it might be necessary to create your own source driver or parser. When writing your own driver or parser, you can use an existing source driver or parser as a template and adjust it according to your needs.
An alarm can already trigger a variety of actions (e.g. it can be forwarded to external services or activate external devices). However, if you need to trigger different actions feel free to add a new action plugin. Most of the time, the integration of additional actions in form of a new plugin is only a matter of minutes.
The plugins are subclasses of SourceDriver, MessageParser or Action. An extensive documentation of the different plugin types (and an overview of the interfaces those plugins implement) can be found in the aforementioned files.
Important: To use new plugins they also have to be added to the PluginManager.