Skip to content
Switch branches/tags

Latest commit


Git stats


Failed to load latest commit information.
Latest commit message
Commit time

SITCH Sensor

Join the chat at

Build Status

Code Climate

Test Coverage

Getting Started


  • Accounts with the following providers:
    • Github
  • Access to the following services (See Service configuration for more information)
  • Hardware
    • Raspberry Pi 3
    • Simcom (SIM808 | SIM800L | SIM900) GSM modem with SIM
    • USB TTY cable (for GSM modem)
    • RTL-SDR device. Tested with NooElec NESDR Mini and NooElec NESDR XTR
    • GlobalSat USB GPS dongle (any gpsd-compatible USB GPS shold work)

Step by step...

  1. Create an application in Resin.
  2. Fork this project and clone it on your workstation. Or clone it directly... but forking makes modifications and PRs easier to deal with.
  3. Add the Resin application as a remote repo (git remote add resin
  4. Push to your Resin application: git push resin master

We expect (at least) the following environment variables to be set in Resin:

Variable Purpose
LOCATION_NAME Override the default device name (Resin UUID)
LOG_HOST hostname:port
STATE_LIST List of states (in caps) for FCC feed. ex: "CA,TX"
VAULT_PATH Path to logstash cert/keys in Vault
VAULT_TOKEN Token for accessing credentials in vault
VAULT_URL URL for accessing Vault. ex:

For more configuration options, consult the environment variables section of the documentation.


Testing is done with pytest. Coverage module optional.

Testing requirements (local testing possible only on Linux):

  • lshw
  • pip packages: pytest-cov pytest-pep8 pyserial hvac kalibrate haversine python-geoip python-geoip-geolite2 pyudev gps3 LatLon python-dateutil
  1. Navigate to the base directory of the repository.
  2. Set the environment variable to reach your SITCH feed: export SITCH_FEED_BASE=https://MY.FEED.URL/base
  3. Run py.test --cov sitchlib .
  • OR, offer a PR and let travis-ci build and run the tests for you.

GSM modem device detection

If you're using a GSM modem that's not recognized by the device detector, please add the output from running the ATI command against your GSM modem in the variable named positive_match in the is_a_gsm_modem() method, in the sensor/sitch/sitchlib/ file. Then send a pull request so that everyone can get the benefit of your discovery.

Included binaries

This repository contains pre-built binaries for Filebeat and Kalibrate. The licenses which apply to these two tools can be found here and here, respectively.


  • Please do PRs against the test branch.
  • To add an ID string to the device detector for GSM modems, add part of the ID string to the positive_match variable in the DeviceDetector.is_a_gsm_modem() function