Pagermon
Multimon-ng pager message parser and viewer
Install / Use
/learn @pagermon/PagermonREADME
PagerMon
PagerMon is an API driven client/server framework for parsing and displaying pager messages from multimon-ng.
It is built around POCSAG messages, but should easily support other message types as required.
The UI is built around a Node/Express/Angular/Bootstrap stack, while the client scripts are Node scripts that receive piped input.
Features
- Capcode aliasing with colors and FontAwesome icons
- API driven extensible architecture
- Multi-user support
- SQLite or MySQL database backing
- Configurable via UI
- Pagination and searching
- Filtering by capcode or agency
- Duplicate message filtering
- Native POCSAG / FLEX / EAS Client Support
- Keyword highlighting
- WebSockets support - messages are delivered to clients in near realtime
- Pretty HTML5
- Native browser notifications
- Plugin Support - Current Plugins:
- Pushover near realtime muti-device notification service
- Prowl near realtime iOS notification service with Apple Watch support
- Telegram near realtime cloud based multi-device messaging
- Discord near realtime cloud based messaging service
- Gotify Self-Hosted messaging service
- Microsoft Teams Team colaboration platform
- Slack Team colabortation platform
- SMTP Email Support for conventional SMTP email notifications
- Regex Filters - Filter incoming messages via regex
- Regex Replace - Modify incoming messages via regex
- Message Repeat - Repeat incoming messages to another pagermon server
- May or may not contain cute puppies
Planned Features
- Horizontal scaling
- Enhanced message filtering
- Bootstrap 4 + Angular 2 support
- Enhanced alias control
- Graphing
Screenshots



Getting Started
These instructions will get you a copy of the project up and running on your local machine for development and testing purposes.
Prerequisites
- nodejs 12.x or higher
- sqlite3
- Probably some other stuff
Recommended
- nvm
- nginx or some kind of reverse proxy for SSL offloading
Running the server
Local setup
- Copy server/process-default.json to server/process.json and modify according to your environment
- Launch the app from the Terminal:
$ sudo apt-get install npm sqlite3
$ npm install npm@latest -g
$ npm install pm2 -g
$ cd server
$ npm install
$ export NODE_ENV=production
$ pm2 start process.json
- To start on boot, let pm2 handle it:
$ sudo pm2 startup
$ pm2 save
- You probably want to rotate logs, too:
$ pm2 install pm2-logrotate
$ sudo pm2 logrotate -u user
- Now login via the website, default port is 3000, default credentials are 'admin' / 'changeme'
- Head to /admin, change your password, and generate some API keys
- Grab your API keys and drop them in the PagerMon client, then you're good to go!
Alternatively a production ready setup guide is available here https://github.com/pagermon/pagermon/wiki/Tutorial---Production-Ready-Ubuntu,-PM2,-Nginx-Reverse-Proxy,-Let's-Encrypt-SSL,-Pagermon-server
Docker
Manual build
You can use image already built for you or you can build it yourself:
# For PC
docker build -t pagermon/pagermon .
# For Raspberry Pi
docker build -t pagermon/pagermon:latest-armhf -f Dockerfile.armhf .
Running
docker create \
--name=pagermon \
-e APP_NAME=pagermon \
-p 3000:3000 \
-e TZ=Europe/London \
-v </path/to/config-mount>:/config \
--restart unless-stopped \
pagermon/pagermon:<VERSION>
docker start pagermon
docker-compose
version: "2"
services:
pagermon:
#build: ./server # To build localy
image: pagermon/pagermon:<VERSION>
container_name: pagermon
environment:
- APP_NAME=pagermon
- PUID=1000 # Not required since node user inside docker has UID 1000
- PGID=1000 # Not required since node user inside docker has GID 1000
- TZ=Europe/London
ports:
- "3000:3000"
volumes:
- </path/to/config-mount>:/config
restart: unless-stopped
Then run:
# Building with compose file
docker-compose build
# Running from compose file in foreground
docker-compose up
# Running from compose file in background
docker-compose up -d
Parameters
|Parameter|Function|
|:-------:|:-------|
| -e APP_NAME=<name> | Application name |
| -e HOSTNAME=<hostname> | Hostname |
| -e USE_COOKIE_HOST=true | Use cookie host. |
| -e NO_CHOWN=true| Disable fixing permissions. |
| -e PUID=1000 | for UserID |
| -e PGID=1000 | for GroupID |
| -e SKIP_APP=true | Don't start app, useful for development. |
| -e TZ=Europe/London | Specify a timezone to use eg. Europe/London. |
| -v <path>:/config | Mount config diretory, so config persist during container restarts (option 1) |
| -v <volumename>:/config | Create named volume for config diretory, so config persist during container restarts (option 2)|
| -v /config | Create unnamed volume for config diretory, so config persist during container restarts (option 3)|
| -p 3000:3000 | Expose container port |
Note:
- Configuration is stored in
/configinside container and it is owned by node user with UID/GID 1000. To fix config directory ownership use-e PUID=<UID>and-e PGID=<GID>. (Here are database and config file stored) - The local port
3000will be forwarded to the docker container to port3000(by-p 3000:3000) - In case you would like to follow the logfile, run
docker logs -f pagermon(by--name pagermon) - To shutdown and remove the container (if using compose), run
docker-compose down - If you make changes to the app for testing, you will need to re-build the image, run
docker-compose down && docker-compose up --build - To run on Raspberry Pi use armhf variant (add
-armhfat the end of version), but be aware that OracleDB does not work there.
Tip: You probably want to setup docker log rotation before, more can be found here.
Running the client
Local setup
Prerequisites
These programs/libraries are required for Pagermon Client to work
- RTL-SDR - RTL-SDR tools/libraries to access RTL-SDR dongle
- RTL-SDR dongle - You can get these from Ebay, Amazon or other stores (Has to have RTL2832U chip)
- nodejs - JavaScript Programming Language (Only if installing separate from server)
- npm - Javascript Package Manager (Only if installing separate from server)
- Git Client - Github.com client for getting source code (Only if installing separate from server)
To install the Prerequisites run
sudo apt install nodejs npm git rtl-sdr
Installing Pagermon Client
Run the following commands from Terminal:
git clone https://github.com/pagermon/pagermon.git
cd pagermon/client
npm install
edit reader.sh and edit frequency and rtl_device number, Edit Multimon-ng command
rtl_fm -d 0 -E dc -F 0 -A fast -f 148.5875M -s22050 - |
multimon-ng -q -b1 -c -a POCSAG512 -f alpha -t raw /dev/stdin |
node reader.js
-d 0 - change this to your rtl_device number using rtl_test
-f 148.5875M - change this to the frequency you are decoding
Multimon-ng Command examples
POCSAG
multimon-ng -q -b1 -c -a POCSAG512 -f alpha -t raw /dev/stdin
FLEX
multimon-ng -a FLEX -t raw /dev/stdin
EAS
multimon-ng -a EAS -t raw /dev/stdin
Configuring Pagermon Client
Before running Pagermon Client you have to configure it to send the decoded info to the pagermon server.
copy default.json to config.json
cp config/default.json config/config.json
Edit config.json with your favorite editor
{
"apikey": "changeme",
"hostname": "http://127.0.0.1:3000",
"identifier": "TEST",
"sendFunctionCode": false,
"useTimestamp": true,
"EAS": {
"excludeEvents": [],
"includeFIPS": [],
"addressAddType": true
}
}
Pager Options
apikey: This is the API key generate on the Pagermon Server ht
