Hide navigation sidebar
Hide table of contents sidebar
Back to top
Toggle table of contents sidebar

# REST API

All the API’s use a key called `ID` which is the unique device id (chip id). This is used as an API key when sending requests to the device.

## GET: /api/config

Retrive the current configuation of the device via an HTTP GET command. Payload is in JSON format.

- `temp-format` can be either `C` or `F`

- `gravity-format` is always `G` (plato is not yet supported)

Other parameters are the same as in the configuration guide.

    {
       "mdns": "gravmon",
       "id": "ee1bfc",
       "ota-url": "http://192.168.1.50:80/firmware/gravmon/",
       "temp-format": "C",
       "brewfather-push": "http://log.brewfather.net/stream?id=Qwerty",
       "token": "token",
       "http-push": "http://192.168.1.50:9090/api/v1/Qwerty/telemetry",
       "http-push-h1": "header: value",
       "http-push-h2": "header: value",
       "http-push2": "http://192.168.1.50/ispindel",
       "http-push2-h1": "header: value",
       "http-push2-h2": "header: value",
       "influxdb2-push": "http://192.168.1.50:8086",
       "influxdb2-org": "org",
       "influxdb2-bucket": "bucket_id",
       "influxdb2-auth": "token",
       "mqtt-push": "192.168.1.50",
       "mqtt-port": 1883,
       "mqtt-user": "user",
       "mqtt-pass": "pass",
       "sleep-interval": 30,
       "voltage-factor": 1.59,
       "gravity-formula": "0.0*tilt^3+0.0*tilt^2+0.0017978*tilt+0.9436",
       "gravity-format": "G",
       "temp-adjustment-value": 0,
       "gravity-temp-adjustment": false,
       "gyro-temp": true,
       "gyro-calibration-data": {
          "ax": -330,
          "ay": -2249,
          "az": 1170,
          "gx": 99,
          "gy": -6,
          "gz": 4
       },
       "angle": 90.93,
       "gravity": 1.105,
       "battery": 0.04,
       "runtime-average": 3.12
    }

## GET: /api/device

Retrive the current device settings via an HTTP GET command. Payload is in JSON format.

    {
       "app-name": "GravityMon",
       "app-ver": "0.0.0",
       "id": "ee1bfc",
       "mdns": "gravmon",
       "runtime-average": 3.12
    }

## GET: /api/status

Retrive the current device status via an HTTP GET command. Payload is in JSON format.

- `temp-format` can be either `C` or `F`

Other parameters are the same as in the configuration guide.

    {
       "id": "ee1bfc",
       "angle": 89.86,
       "gravity": 1.1052,
       "gravity-tempcorr": 1.1031,
       "temp-c": 0,
       "temp-f": 32,
       "battery": 0,
       "temp-format": "C",
       "sleep-mode": false,
       "rssi": -56
    }

## GET: /api/config/formula

Retrive the data used for formula calculation data via an HTTP GET command. Payload is in JSON format.

- `a1`-`a4` are the angles/tilt readings (up to 5 are currently supported)

- `g1`-`g4` are the corresponding gravity reaadings in SG or Plato depending on the device-format.

    {
       "id": "ee1bfc",
       "a1": 22.4,
       "a2": 54.4,
       "a3": 58,
       "a4": 0,
       "a5": 0,
       "g1": 1.000,
       "g2": 1.053,
       "g3": 1.062,
       "g4": 1,
       "g5": 1,
       "gravity-format": "G",
       "gravity-formula": "0.0*tilt^3+0.0*tilt^2+0.0017978*tilt+0.9436"
    }

## GET: /api/factory

Will do a reset to factory defaults and delete all data except wifi settings.

For this to work you will need to supply the device id as a parameter in the request:

    http://mygravity.local/api/factory?id=<mydeviceid>

## POST: /api/config/device

Used to update device settings via an HTTP POST command.

Payload should be in standard format used for posting a form. Such as as: id=value&mdns=value etc. Key value pairs are shown below.

- `temp-format` can be either `C` (Celcius) or `F` (Farenheight)

    id=ee1bfc
    mdns=gravmon
    temp-format=C
    sleep-interval=30

## POST: /api/config/push

Used to update push settings via an HTTP POST command. Payload is in JSON format.

Payload should be in standard format used for posting a form. Such as as: id=value&mdns=value etc. Key value pairs are shown below.

    id=ee1bfc
    http-push=http://192.168.1.50/ispindel
    http-push2=
    http-push-h1=
    http-push-h2=
    http-push2-h1=
    http-push2-h2=
    brewfather-push=
    influxdb2-push=http://192.168.1.50:8086
    influxdb2-org=
    influxdb2-bucket=
    influxdb2-auth=
    mqtt-push=192.168.1.50
    mqtt-port=1883
    mqtt-user=
    mqtt-pass=

## POST: /api/config/gravity

Used to update gravity settings via an HTTP POST command. Payload is in JSON format.

- `gravity-formula` keywords `temp` and `tilt` are supported.

- `gravity-format` can be either `G` (SG) or `P` (PLATO)

Note

`gravity-temp-adjustment` is defined as “on” or “off” when posting since this is the output values from a checkbox, when reading data it’s sent as boolean (true,false).

Payload should be in standard format used for posting a form. Such as as: id=value&mdns=value etc. Key value pairs are shown below.

    id=ee1bfc
    gravity-formula=0.0*tilt^3+0.0*tilt^2+0.0017978*tilt+0.9436,
    gravity-format=P
    gravity-temp-adjustment=off

## POST: /api/config/hardware

Used to update hardware settings via an HTTP POST command. Payload is in JSON format.

Note

`gyro-temp` is defined as “on” or “off” when posting since this is the output values from a checkbox, when reading data it’s sent as boolean (true,false).

Payload should be in standard format used for posting a form. Such as as: id=value&mdns=value etc. Key value pairs are shown below.

    id=ee1bfc
    voltage-factor=1.59
    temp-adjustment=0
    gyro-temp=off
    ota-url=http://192.168.1.50/firmware/gravmon/

## POST: /api/config/formula

Used to update formula calculation data via an HTTP POST command. Payload is in JSON format.

- `a1`-`a4` are the angles/tilt readings (up to 5 are currently supported)

- `g1`-`g4` are the corresponding gravity reaadings (in SG)

Payload should be in standard format used for posting a form. Such as as: id=value&mdns=value etc. Key value pairs are shown below.

    id=ee1bfc
    a1=22.4
    a2=54.4
    a3=58
    a4=0
    a5=0
    g1=1.000
    g2=1.053
    g3=1.062
    g4=1
    g5=1

## Calling the API’s from Python

Here is some example code for how to access the API’s from a python script. Keys should always be present or the API call will fail.

The requests package converts the json to standard form post format.

    import requests
    import json

    host = "192.168.1.1"           # IP adress (or name) of the device to send these settings to
    id = "ee1bfc"                  # Device ID (shown in serial console during startup or in UI)

    def set_config( url, json ):
       headers = { "ContentType": "application/json" }
       print( url )
       resp = requests.post( url, headers=headers, data=json )
       if resp.status_code != 200 :
          print ( "Failed "  )
       else :
          print ( "Success "  )

    url = "http://" + host + "/api/config/device"
    json = { "id": id,
             "mdns": "gravmon",             # Name of the device
             "temp-format": "C",            # Temperature format C or F
             "sleep-interval": 30           # Sleep interval in seconds
          }
    set_config( url, json )

    url = "http://" + host + "/api/config/push"
    json = { "id": id,
             "token": "",
             "http-push": "http://192.168.1.1/ispindel",
             "http-push2": "",
             "http-push-h1": "",
             "http-push-h2": "",
             "http-push2-h1": "",
             "http-push2-h2": "",
             "brewfather-push": "",
             "influxdb2-push": "",
             "influxdb2-org": "",
             "influxdb2-bucket": "",
             "influxdb2-auth": "",
             "mqtt-push": "192.168.1.50",
             "mqtt-port": 1883,
             "mqtt-user": "Qwerty",
             "mqtt-pass": "Qwerty"
             }
    set_config( url, json )

    url = "http://" + host + "/api/config/gravity"
    json = { "id": id,
             "gravity-formula": "",
             "gravity-format": "P",
             "gravity-temp-adjustment": "off"        # Adjust gravity (on/off)
             }
    set_config( url, json )

    url = "http://" + host + "/api/config/hardware"
    json = { "id": id,
             "voltage-factor": 1.59,                 # Default value for voltage calculation
             "temp-adjustment": 0,                   # If temp sensor needs to be corrected
             "gyro-temp": "on",                      # Use the temp sensor in the gyro instead (on/off)
             "ota-url": ""                           # if the device should seach for a new update when active
          }
    set_config( url, json )

    url = "http://" + host + "/api/formula"
    json = { "id": id,
             "a1": 22.4,
             "a2": 54.4,
             "a3": 58,
             "a4": 0,
             "a5": 0,
             "g1": 1.000,
             "g2": 1.053,
             "g3": 1.062,
             "g4": 1,
             "g5": 1
             }
    set_config( url, json )