Pareto Anywhere
Pareto Anywhere enables context-aware physical spaces. Pareto Anywhere is continuously-evolving open source middleware that transforms ambient data into hyperlocal context: a real-time stream of who/what is where/how.
Configured as a lightweight Node.js package, this pareto-anywhere package installs quickly, and easily runs edge, local or cloud, on anything from a Raspberry Pi to a personal computer or server. The bundled web apps, APIs and Elastic Stack integration offer a friendly and comprehensive introduction to context-aware physical spaces. And, thanks to a modular, open architecture, Pareto Anywhere can easily be customised for scale and/or functionality.
Installation guides
Install Pareto Anywhere by following a step-by-step tutorial on our reelyActive Developers site:
Quick start
Alternatively, install the pareto-anywhere package globally as follows:
npm install -g pareto-anywhere
Then run from the command line as follows:
pareto-anywhere
Browse to localhost:3001 to see Pareto Anywhere running and browse the web apps and APIs.
Dev install
Alternatively, clone the repo and submodules as follows:
git clone --recurse-submodules https://github.com/reelyactive/pareto-anywhere.git
Then, from the pareto-anywhere folder, install the dependencies and run:
cd pareto-anywhere
npm install
npm start
Browse to localhost:3001 to see Pareto Anywhere running and browse the web apps and APIs.
What is Pareto Anywhere?
Pareto Anywhere is middleware that makes any physical space context-aware for any application by processing the real-time wireless ambient data stream collected from any infrastructure. This pareto-anywhere package is a convenient, lightweight and novice-friendly configuration of Pareto Anywhere which itself is highly modular and scalable.
Pareto Anywhere is the collection of various open source software modules by reelyActive which are hosted in their own individual repositories, specifically:
Software module | Role |
---|---|
barnowl | Technology-agnostic middleware for RFID, RTLS and M2M |
barnacles | Efficient data aggregator/distributor for RFID, RTLS and M2M |
barterer | Real-time location & sensor data API |
chickadee | Contextual associations store and API |
chimps | Spatial dynamics processor |
advlib | Library for wireless advertising packet decoding |
sniffypedia | Index for implicit URI assocation |
The experimental web app version of Pareto Anywhere which runs entirely in-browser is maintained in the gh-pages branch of this repository (see below).
Where's the ambient data?
This pareto-anywhere package listens for data streams from the following sources:
- UDP raddec packets on port 50001 (ex: from an Owl-in-One)
- UDP reel packets on port 50000
- UDP Huawei packets on port 50010
- HTTP POST to the /minew route (ex: from a Minew G1) (G1 firmware v4.x required since Pareto Anywhere v1.7)
- HTTP POST to the /impinj route
- WebSocket connection on the /aruba route (ex: from an Aruba AP)
- STOMP over WebSockets from a RF Controls RFC OS instance running on the same machine (with default credentials)
If a local Bluetooth radio is available, barnowl-hci can be installed and run with the command npm run forwarder
to forward the data to Pareto Anywhere.
Pareto Anywhere is infrastructure-agnostic and supports simultaneous data streams from a heterogeneous mix of sources.
Collect and analyse the data with the Elastic Stack
This pareto-anywhere package writes its real-time stream of data to an Elasticsearch database, if installed and running, so that it may in turn be analysed in Kibana.
- pareto-anywhere v1.8 and above expect an Elasticsearch 8.x instance, offering nominal backwards-compatiblility with 7.x
- pareto-anywhere v1.7 and below require an Elasticsearch 7.x instance
If an Elasticsearch database is running locally at http://localhost:9200, data storage should be automatic, with the data available for analysis at http://localhost:5601 if Kibana is also running locally.
To instead have pareto-anywhere store data in a remote Elasticsearch database, first set the environment variable ELASTICSEARCH_NODE to the corresponding URL, including the corresponding username and password, for example:
https://username:password@server.com:9243
Elasticsearch and Kibana are not required to enjoy the real-time functionality of Pareto Anywhere. Instead, they add extensive, user-friendly data analysis functionality as described in our Kibana tutorials.
Build and run with Docker
For users who prefer deployment using containers, first build the Docker image from the root folder of this repository:
docker build -t pareto-anywhere:core .
Then start the container:
docker run -d \
-p 3001:3001/tcp \
-p 50000:5000/udp \
-p 50001:50001/udp \
--restart unless-stopped \
--name pareto-anywhere \
pareto-anywhere:core
Browse to localhost:3001 to see Pareto Anywhere running and browse the APIs.
Run Pareto Anywhere, Elastisearch and Kibana with Docker-Compose
For users who prefer deployment using containers, Deploy Elasticsearch, Kibana and Pareto Anywhere from the root folder of this repository:
docker-compose up -d
Browse to localhost:3001 to see Pareto Anywhere running and browse the APIs. Browse to localhost:5601 to see Kibana dashboard running. Browse to localhost:9200 to see Elasticsearch running and browse the APIs.
Developer Notes
The pareto-anywhere codebase includes Pareto Apps as a git submodule (in the web/apps folder). To update to the latest Pareto Apps run:
git submodule update --remote
If developing Pareto Apps from within this repository, changes can be pushed to the Pareto Apps origin (pareto-anywhere-develop branch) by the usual means, from the web/apps folder:
cd web/apps
git checkout pareto-anywhere-develop
...update files...
git add [...]
git commit -m "Description of update"
git push origin pareto-anywhere-develop
Pareto Anywhere Web App
The experimental Web Bluetooth Scanning feature, introduced to the Chrome browser in late 2019, enables an experimental web app version of Pareto Anywhere hosted here, with code in the gh-pages branch.
Project History
Pareto Anywhere is in active development, evolving the hlc-server code base (first created in 2014) which it is intended to supersede. It is therefore normal for documentation to refer to hlc-server as a pseudonym of Pareto Anywhere.
pareto-anywhere v1.5.0 adopts chickadee v1.4.0 which migrates to ESMapDB from NeDB. If upgrading from a previous version, any stored associations will need to be recreated.
Contributing
Discover how to contribute to this open source project which upholds a standard code of conduct.
Security
Consult our security policy for best practices using this open source software and to report vulnerabilities.
License
MIT License
Copyright (c) 2020-2022 reelyActive
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.