Archive docs for v0.8
0
docs/v0.8/.nojekyll
Normal file
BIN
docs/v0.8/_images/brewflasher.png
Normal file
After Width: | Height: | Size: 156 KiB |
BIN
docs/v0.8/_images/config-popup1.png
Normal file
After Width: | Height: | Size: 13 KiB |
BIN
docs/v0.8/_images/config1.png
Normal file
After Width: | Height: | Size: 26 KiB |
BIN
docs/v0.8/_images/config2.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
docs/v0.8/_images/config3.png
Normal file
After Width: | Height: | Size: 45 KiB |
BIN
docs/v0.8/_images/config4.png
Normal file
After Width: | Height: | Size: 36 KiB |
BIN
docs/v0.8/_images/device.png
Normal file
After Width: | Height: | Size: 16 KiB |
BIN
docs/v0.8/_images/fermentation.png
Normal file
After Width: | Height: | Size: 40 KiB |
BIN
docs/v0.8/_images/format.png
Normal file
After Width: | Height: | Size: 67 KiB |
BIN
docs/v0.8/_images/formula1.png
Normal file
After Width: | Height: | Size: 78 KiB |
BIN
docs/v0.8/_images/formula2.png
Normal file
After Width: | Height: | Size: 59 KiB |
BIN
docs/v0.8/_images/index.png
Normal file
After Width: | Height: | Size: 24 KiB |
BIN
docs/v0.8/_images/perf1.png
Normal file
After Width: | Height: | Size: 85 KiB |
BIN
docs/v0.8/_images/serial.png
Normal file
After Width: | Height: | Size: 52 KiB |
BIN
docs/v0.8/_images/software_design.png
Normal file
After Width: | Height: | Size: 196 KiB |
BIN
docs/v0.8/_images/temp1.png
Normal file
After Width: | Height: | Size: 37 KiB |
BIN
docs/v0.8/_images/wifi.png
Normal file
After Width: | Height: | Size: 14 KiB |
92
docs/v0.8/_sources/advanced.rst.txt
Normal file
@ -0,0 +1,92 @@
|
|||||||
|
Advanced Configuration
|
||||||
|
######################
|
||||||
|
|
||||||
|
.. _format-editor:
|
||||||
|
|
||||||
|
Format editor
|
||||||
|
+++++++++++++
|
||||||
|
|
||||||
|
To reduce the need for adding custom endpoints for various services there is an built in format editor that allows the user to customize the format being sent to the push target.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
Since the format templates can be big this function can be quite slow on a small device such as the esp8266.
|
||||||
|
|
||||||
|
.. image:: images/format.png
|
||||||
|
:width: 800
|
||||||
|
:alt: Format editor
|
||||||
|
|
||||||
|
You enter the format data in the text field and the test button will show an example on what the output would look like. If the data cannot be formatted in json it will just be displayed as a long string.
|
||||||
|
The save button will save the current formla and reload the data from the device.
|
||||||
|
|
||||||
|
.. tip::
|
||||||
|
|
||||||
|
If you save a blank string the default template will be loaded.
|
||||||
|
|
||||||
|
These are the format keys available for use in the format.
|
||||||
|
|
||||||
|
.. list-table:: Directory structure
|
||||||
|
:widths: 30 50 20
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - key
|
||||||
|
- description
|
||||||
|
- example
|
||||||
|
* - ${mdns}
|
||||||
|
- Name of the device
|
||||||
|
- gravmon2
|
||||||
|
* - ${id}
|
||||||
|
- Unique id of the device
|
||||||
|
- e422a3
|
||||||
|
* - ${sleep-interval}
|
||||||
|
- Seconds between data is pushed
|
||||||
|
- 900
|
||||||
|
* - ${temp}
|
||||||
|
- Temperature in format configured on device, one decimal
|
||||||
|
- 21.2
|
||||||
|
* - ${temp-c}
|
||||||
|
- Temperature in C, one decimal
|
||||||
|
- 21.2
|
||||||
|
* - ${temp-f}
|
||||||
|
- Temperature in F, one decimal
|
||||||
|
- 58.0
|
||||||
|
* - ${temp-unit}
|
||||||
|
- Temperature format `C` or `F`
|
||||||
|
- C
|
||||||
|
* - ${battery}
|
||||||
|
- Battery voltage, two decimals
|
||||||
|
- 3.89
|
||||||
|
* - ${rssi}
|
||||||
|
- Wifi signal strength
|
||||||
|
- -75
|
||||||
|
* - ${run-time}
|
||||||
|
- How long the last measurement took, two decimals
|
||||||
|
- 3.87
|
||||||
|
* - ${angle}
|
||||||
|
- Angle of the gyro, two decimals
|
||||||
|
- 28.67
|
||||||
|
* - ${tilt}
|
||||||
|
- Same as angle.
|
||||||
|
- 28.67
|
||||||
|
* - ${gravity}
|
||||||
|
- Calculated gravity, 4 decimals for SG and 1 for Plato.
|
||||||
|
- 1.0456
|
||||||
|
* - ${gravity-sg}
|
||||||
|
- Calculated gravity in SG, 4 decimals
|
||||||
|
- 1.0456
|
||||||
|
* - ${gravity-plato}
|
||||||
|
- Calculated gravity in Plato, 1 decimal
|
||||||
|
- 8.5
|
||||||
|
* - ${corr-gravity}
|
||||||
|
- Temperature corrected gravity, 4 decimals for SG and 1 for Plato.
|
||||||
|
- 1.0456
|
||||||
|
* - ${corr-gravity-sg}
|
||||||
|
- Temperature corrected gravity in SG, 4 decimals
|
||||||
|
- 1.0456
|
||||||
|
* - ${corr-gravity-plato}
|
||||||
|
- Temperature corrected gravity in Plato, 1 decimal
|
||||||
|
- 8.5
|
||||||
|
* - ${gravity-unit}
|
||||||
|
- Gravity format, `G` or `P`
|
||||||
|
- G
|
||||||
|
|
338
docs/v0.8/_sources/api.rst.txt
Normal file
@ -0,0 +1,338 @@
|
|||||||
|
.. _rest-api:
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"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.
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"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.
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"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.
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"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)
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
.. code-block:: python
|
||||||
|
|
||||||
|
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 )
|
20
docs/v0.8/_sources/backlog.rst.txt
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
Backlog of changes
|
||||||
|
##################
|
||||||
|
|
||||||
|
This is a list of potential ideas to implemnt in the software.
|
||||||
|
|
||||||
|
Documentation
|
||||||
|
-------------
|
||||||
|
|
||||||
|
- Write contribution instructions
|
||||||
|
- Example project for creating integrations and instructions
|
||||||
|
- Add instructions for other services
|
||||||
|
|
||||||
|
Code
|
||||||
|
----
|
||||||
|
|
||||||
|
- Support for plato
|
||||||
|
- Use pre-commit for validating check-in
|
||||||
|
- Show indicated battery life based on interval (check if its feasable)
|
||||||
|
- Add possibility to add one certificate for proper SSL authentication.
|
||||||
|
- Add configurable Authentication/Token header to http/https requests
|
103
docs/v0.8/_sources/compiling.rst.txt
Normal file
@ -0,0 +1,103 @@
|
|||||||
|
.. _compiling-the-software:
|
||||||
|
|
||||||
|
Compiling the software
|
||||||
|
######################
|
||||||
|
|
||||||
|
Tools
|
||||||
|
=====
|
||||||
|
I use the following tools in order to build and manage the software:
|
||||||
|
|
||||||
|
* Visual Studio Code
|
||||||
|
* PlatformIO
|
||||||
|
* Git for Windows
|
||||||
|
* VSCode plugin: Minify (used to minimise the html files)
|
||||||
|
|
||||||
|
Code Formatting
|
||||||
|
===============
|
||||||
|
I use pre-commit and their cpp style checks to validate the code. Plugin defintions are found in **.pre-commit-config.yaml**
|
||||||
|
|
||||||
|
`Pre-Commit <https://www.pre-commit.com>`_
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
There is not yet any automatic checks since this does not work on Windows. It works if running under WSL2 with Ubuntu.
|
||||||
|
|
||||||
|
|
||||||
|
Targets
|
||||||
|
=======
|
||||||
|
In the platformio config there are 3 targets defined
|
||||||
|
|
||||||
|
* gravity-debug; Maximum logging for trouble shooting, deep sleep is disabled.
|
||||||
|
* gravity-release; Standard release
|
||||||
|
* gravity-perf; Standard release but contains code for measuring performance
|
||||||
|
* gravity32-perf: Experimental version for ESP32.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
There is an experimental ESP32 target but since platformio only supports SDK 1.0.6 and the WIFI connection is really slow compared to ESP8266,
|
||||||
|
so the recommendation is to wait for support on 2.0.x branch. With the tested version an wifi connection takes 3-8s on a ESP32 compared
|
||||||
|
to 0.5s on an ESP8266. There is also a bug in OneWire connected to ESP32 that has not been fixed in the main repository yet.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
The debug target can be unstable and crash the device under certain circumstanses. Excessive logging to the serial port can cause corruption and crashes.
|
||||||
|
So only enable enough debugging to troubleshoot your changes.
|
||||||
|
|
||||||
|
|
||||||
|
Source structure
|
||||||
|
================
|
||||||
|
.. list-table:: Directory structure
|
||||||
|
:widths: 40 60
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - path
|
||||||
|
- content
|
||||||
|
* - /bin
|
||||||
|
- Contains compiled binaries
|
||||||
|
* - /data
|
||||||
|
- Directory for flashing device filesystem
|
||||||
|
* - /doc
|
||||||
|
- Various external documents used as input
|
||||||
|
* - /html
|
||||||
|
- Source for html files
|
||||||
|
* - /img
|
||||||
|
- Images uses in README.md
|
||||||
|
* - /lib
|
||||||
|
- External libraries used when compiling
|
||||||
|
* - /script
|
||||||
|
- Scripts used in build process
|
||||||
|
* - /src
|
||||||
|
- Source code for software
|
||||||
|
* - /src_docs
|
||||||
|
- Source code for documentation
|
||||||
|
* - /stl
|
||||||
|
- 3d models
|
||||||
|
* - /test
|
||||||
|
- Test data for developing html files
|
||||||
|
|
||||||
|
|
||||||
|
Options
|
||||||
|
=======
|
||||||
|
This is a list of C++ defines that is used to enable/disable functions in the code.
|
||||||
|
|
||||||
|
.. list-table:: Defines
|
||||||
|
:widths: 40 60
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - define
|
||||||
|
- description
|
||||||
|
* - ACTIVATE_OTA
|
||||||
|
- Enables the OTA functionallity in the code
|
||||||
|
* - SKIP_SLEEPMODE
|
||||||
|
- The device never goes into sleep mode, useful when developing.
|
||||||
|
* - xxx_DISABLE_LOGGING
|
||||||
|
- Done include verbose logging in the corresponding class. Excessive logging may crash device.
|
||||||
|
* - USE_LITTLEFS
|
||||||
|
- Use the new filesystem in Ardurino
|
||||||
|
* - EMBED_HTML
|
||||||
|
- Html files are included in code, if not defined they are served from the file system.
|
||||||
|
* - USER_SSID
|
||||||
|
- If defined the device will always use this SSID
|
||||||
|
* - USER_SSID_PWD
|
||||||
|
- Password to the SSID
|
||||||
|
* - CFG_APPVER
|
||||||
|
- Defines the version of the compiled software
|
||||||
|
|
276
docs/v0.8/_sources/configuration.rst.txt
Normal file
@ -0,0 +1,276 @@
|
|||||||
|
.. _setting-up-device:
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
#############
|
||||||
|
|
||||||
|
The device can operate in two modes and must be in ``configuration mode`` in order for the web server to be active.
|
||||||
|
|
||||||
|
One of the following conditions will place the device in ``configuration mode``:
|
||||||
|
|
||||||
|
- Gyro has not been calibrated
|
||||||
|
- Sleep mode has been disabled in the web interface
|
||||||
|
- Placed in horizontal mode 85-90 degrees
|
||||||
|
- Charger connected >4.15V
|
||||||
|
|
||||||
|
|
||||||
|
Status
|
||||||
|
======
|
||||||
|
|
||||||
|
URL: (http://gravmon.local)
|
||||||
|
|
||||||
|
.. image:: images/index.png
|
||||||
|
:width: 800
|
||||||
|
:alt: Index page
|
||||||
|
|
||||||
|
Configuration is accessed by entering the URL for the device, this will be the mDNS name *device.local* or the IP adress. The following chapter assumes the device name is *gravmon*.
|
||||||
|
|
||||||
|
The main page shows the device readings; gravity, angle, temperature and battery charge. If the checkbox is active then the device will never go into sleep mode. This is useful if
|
||||||
|
you are collecting angle/tilt for calibration. If this is unchecked the device will change mode as explained before.
|
||||||
|
|
||||||
|
.. tip::
|
||||||
|
|
||||||
|
If you are connected to the device via a serial console (speed: 115200) you can see the connection sequence and get the Unique ID and IP adress from there.
|
||||||
|
|
||||||
|
|
||||||
|
Device
|
||||||
|
======
|
||||||
|
|
||||||
|
URL: (http://gravmon.local/device)
|
||||||
|
|
||||||
|
.. image:: images/device.png
|
||||||
|
:width: 800
|
||||||
|
:alt: Device Settings
|
||||||
|
|
||||||
|
.. tip::
|
||||||
|
|
||||||
|
The button `view error log` will show the last 15 errors on the device. This can be useful for checking errors without
|
||||||
|
the need to connect to the serial port or to check what errors has occured while in `gravity mode`.
|
||||||
|
|
||||||
|
* **Version:**
|
||||||
|
|
||||||
|
Installed version of the code and html files.
|
||||||
|
|
||||||
|
* **Device name:**
|
||||||
|
|
||||||
|
This is unique name of the device which is set in the configuration, also known as MDNS name.
|
||||||
|
|
||||||
|
* **Device ID:**
|
||||||
|
|
||||||
|
This is unique identifier for the device (ESP8266 id), this is required when using the API as an API Key to safeguard
|
||||||
|
against faulty requests. This is the ESP8266 chip ID, so it should be unique.
|
||||||
|
|
||||||
|
* **Average runtime:**
|
||||||
|
|
||||||
|
This shows the average time a gravity measurement takes. Under optimal setting this should be
|
||||||
|
around 1.5 - 2.0 seconds. If this is higher than 2 seconds this is most likley connected to slow wifi
|
||||||
|
connection. It will show 0 if data has not been collected yet.
|
||||||
|
|
||||||
|
|
||||||
|
Configuration
|
||||||
|
=============
|
||||||
|
|
||||||
|
URL: (http://gravmon.local/config)
|
||||||
|
|
||||||
|
Device Setting
|
||||||
|
++++++++++++++
|
||||||
|
|
||||||
|
.. image:: images/config1.png
|
||||||
|
:width: 800
|
||||||
|
:alt: Device Settings
|
||||||
|
|
||||||
|
* **Device name:**
|
||||||
|
|
||||||
|
This is unique name for the device. It will be used in pushing data as well as mDNS name on the network (<name>.local)
|
||||||
|
|
||||||
|
* **Temperature format:**
|
||||||
|
|
||||||
|
Choose between Celsius and Farenheight when displaying temperature.
|
||||||
|
|
||||||
|
* **Interval:**
|
||||||
|
|
||||||
|
This defines how long the device should be sleeping between the readings when in `gravity monitoring` mode. You will also see
|
||||||
|
the values in minutes/seconds to easier set the interval. 900s is a recommended interval. The sleep interval can
|
||||||
|
be set between 10 - 3600 seconds (60 minutes).
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
A low value such as 30s will give a lifespan of 1-2 weeks and 300s (5 min) would last for 3+ weeks. This assumes that
|
||||||
|
there is good wifi connection that takes less than 1s to reconnect. Poor wifi connection is the main reason for battery drain.
|
||||||
|
|
||||||
|
|
||||||
|
* **Calibration values:**
|
||||||
|
|
||||||
|
These are calibration data for the gyro. Place the device flat on a table and press the button to save the default orientation values. Without this calibration we cannot calculate the correct angle/tilt.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
|
||||||
|
The device will **not** go into `gravity monitoring` mode unless calibrated
|
||||||
|
|
||||||
|
Push Settings
|
||||||
|
+++++++++++++
|
||||||
|
|
||||||
|
.. image:: images/config2.png
|
||||||
|
:width: 800
|
||||||
|
:alt: Push Settings
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
When enabling SSL this will not validate the root CA of the remote service, this is a design decision based on two aspects. Enabling CA validation will take 3-4s extra on each connection which means way less
|
||||||
|
battery life, so the decision is to prioritize battery life over security. The data transmitted is not really that sensitive anyway so I belive this is a good balance.
|
||||||
|
|
||||||
|
|
||||||
|
* **HTTP URL 1:**
|
||||||
|
|
||||||
|
Endpoint to send data via http. Default format used Format used :ref:`data-formats-ispindle`. You can customize the format using :ref:`format-editor`.
|
||||||
|
|
||||||
|
If you add the prefix `https://` then the device will use SSL when sending data.
|
||||||
|
|
||||||
|
* **HTTP URL 2:**
|
||||||
|
|
||||||
|
Endpoint to send data via http. Default format used :ref:`data-formats-ispindle`. You can customize the format using :ref:`format-editor`.
|
||||||
|
|
||||||
|
If you add the prefix `https://` then the device will use SSL when sending data.
|
||||||
|
|
||||||
|
* **Token:**
|
||||||
|
|
||||||
|
The token is included in the iSpindle JSON format and will be used for both HTTP targets. If you
|
||||||
|
need to have 2 different tokens please use the :ref:`format-editor` to customize the data format.
|
||||||
|
|
||||||
|
* **Brewfather URL:**
|
||||||
|
|
||||||
|
Endpoint to send data via http to brewfather. Format used :ref:`data-formats-brewfather`
|
||||||
|
|
||||||
|
SSL is not supported for this target.
|
||||||
|
|
||||||
|
* **Influx DB v2 URL:**
|
||||||
|
|
||||||
|
Endpoint to send data via http to InfluxDB. Format used :ref:`data-formats-influxdb2`. You can customize the format using :ref:`format-editor`.
|
||||||
|
|
||||||
|
SSL is not supported for this target. Raise a issue on github if this is wanted.
|
||||||
|
|
||||||
|
* **Influx DB v2 Organisation:**
|
||||||
|
|
||||||
|
Name of organisation in Influx.
|
||||||
|
|
||||||
|
* **Influx DB v2 Bucket:**
|
||||||
|
|
||||||
|
Identifier for bucket.
|
||||||
|
|
||||||
|
* **Influx DB v2 Token:**
|
||||||
|
|
||||||
|
Token with write access to bucket.
|
||||||
|
|
||||||
|
* **MQTT server:**
|
||||||
|
|
||||||
|
IP or name of server to send data to. Default format used :ref:`data-formats-mqtt`. You can customize the format using :ref:`format-editor`.
|
||||||
|
|
||||||
|
* **MQTT Port:**
|
||||||
|
|
||||||
|
Which port should be used for communication, default is 1883 (standard port). For SSL use 8883 (any port over 8000 is treated as SSL).
|
||||||
|
|
||||||
|
* **MQTT user:**
|
||||||
|
|
||||||
|
Username or blank if anonymous is accepted
|
||||||
|
|
||||||
|
* **MQTT password:**
|
||||||
|
|
||||||
|
Password or blank if anonymous is accepted
|
||||||
|
|
||||||
|
* **HTTP Headers**
|
||||||
|
|
||||||
|
.. image:: images/config-popup1.png
|
||||||
|
:width: 300
|
||||||
|
:alt: HTTP Headers
|
||||||
|
|
||||||
|
You can define 2 http headers per push target. This is available via a pop-up window but dont forget
|
||||||
|
to press the save buttons on the post section to save the values. One common header is content type which is the
|
||||||
|
default setting for http targets.
|
||||||
|
|
||||||
|
The input must have the format **'<header>: <value>'** for it to work. The UI will accept any value so errors
|
||||||
|
will not show until the device tries to push data.
|
||||||
|
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
Content-Type: application/json
|
||||||
|
X-Auth-Token: <api-token>
|
||||||
|
|
||||||
|
|
||||||
|
Mozilla has a good guide on what headers are valid; `HTTP Headers <https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers>`_
|
||||||
|
|
||||||
|
|
||||||
|
Gravity Settings
|
||||||
|
++++++++++++++++
|
||||||
|
|
||||||
|
.. image:: images/config3.png
|
||||||
|
:width: 800
|
||||||
|
:alt: Gravity Settings
|
||||||
|
|
||||||
|
* **Gravity format:**
|
||||||
|
|
||||||
|
Gravity format can be eihter `SG` or `Plato`. The device will use SG Internally and convert to Plato when displaying or sending data.
|
||||||
|
|
||||||
|
* **Gravity formula:**
|
||||||
|
|
||||||
|
Gravity formula is compatible with standard iSpindle formulas so any existing calculation option can be used. You can also use
|
||||||
|
the feature to create the formula by supplying the raw data. See :ref:`create-formula`
|
||||||
|
|
||||||
|
The gravity formula accepts to paramaters, **tilt** for the angle or **temp** for temperature (temperature inserted into the formula
|
||||||
|
will be in celsius). I would recommend to use the formula calculation feature instead since this is much easier.
|
||||||
|
|
||||||
|
* **Temperature correct gravity:**
|
||||||
|
|
||||||
|
Will apply a temperature calibration formula to the gravity as a second step after gravity has been calculated. It's also possible to
|
||||||
|
build this into the gravity formula.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
This formula assumes that the calibration has been done at 20°C / 68°F.
|
||||||
|
|
||||||
|
Formula used in temperature correction.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
gravity*((1.00130346-0.000134722124*temp+0.00000204052596*temp^2-0.00000000232820948*temp^3)/
|
||||||
|
(1.00130346-0.000134722124*cal+0.00000204052596*cal^2-0.00000000232820948*cal^3))
|
||||||
|
|
||||||
|
|
||||||
|
Hardware Settings
|
||||||
|
+++++++++++++++++
|
||||||
|
|
||||||
|
.. image:: images/config4.png
|
||||||
|
:width: 800
|
||||||
|
:alt: Hardware Settings
|
||||||
|
|
||||||
|
* **Voltage factor:**
|
||||||
|
|
||||||
|
Factor used to calcualate the battery voltage. If you get a too low/high voltage you can adjust this value.
|
||||||
|
|
||||||
|
* **Temperature correction:**
|
||||||
|
|
||||||
|
This value will be added to the temperature reading (negative value will reduce temperature reading). This is applied
|
||||||
|
when the device starts. So changing this will not take affect until the device is restarted.
|
||||||
|
|
||||||
|
* **Gyro Temperature:**
|
||||||
|
|
||||||
|
Enable this feature will use the temp sensor i the gyro instead of the DS18B20, the benefit is shorter run time and
|
||||||
|
longer battery life (this is an experimental feature). The value used is the first temperature reading from when the
|
||||||
|
device is activated, since the gyro should be cool this is reflecting the surronding temperature. After it has
|
||||||
|
been running the value would be totally off.
|
||||||
|
|
||||||
|
* **OTA URL:**
|
||||||
|
|
||||||
|
Should point to a URL where the firmware.bin file + version.json file are located.
|
||||||
|
|
||||||
|
For the OTA to work, place the following files (version.json + firmware.bin) at the location that you pointed out in OTA URL. If the version number in the json file is newer than in the
|
||||||
|
code the update will be done during startup.
|
||||||
|
|
||||||
|
If you have the previx `https://` then the device will use secure transfer without CA validation.
|
||||||
|
|
||||||
|
Example; OTA URL (don't forget trailing dash), the name of the file should be firmware.bin
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
http://192.168.1.1/firmware/gravmon/
|
||||||
|
https://192.168.1.1/firmware/gravmon/
|
||||||
|
|
||||||
|
|
5
docs/v0.8/_sources/contributing.rst.txt
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Contributing
|
||||||
|
------------
|
||||||
|
|
||||||
|
This section is under construction.
|
||||||
|
|
156
docs/v0.8/_sources/data.rst.txt
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
.. _data-formats:
|
||||||
|
|
||||||
|
Data Formats
|
||||||
|
############
|
||||||
|
|
||||||
|
.. _data-formats-ispindle:
|
||||||
|
|
||||||
|
iSpindle format
|
||||||
|
===============
|
||||||
|
|
||||||
|
This is the format used for standard http posts.
|
||||||
|
|
||||||
|
* ``corr-gravity`` is an extended parameter containing a temperature corrected gravity reading.
|
||||||
|
* ``gravity-format`` is an extended parameter containing the gravity format (G or P).
|
||||||
|
* ``run-time`` is an extended parameter containing the number of seconds the execution took.
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"name" : "gravmon",
|
||||||
|
"ID": "2E6753",
|
||||||
|
"token" : "gravmon",
|
||||||
|
"interval": 900,
|
||||||
|
"temperature": 20.5,
|
||||||
|
"temp-units": "C",
|
||||||
|
"gravity": 1.0050,
|
||||||
|
"angle": 45.34,
|
||||||
|
"battery": 3.67,
|
||||||
|
"rssi": -12,
|
||||||
|
|
||||||
|
"corr-gravity": 1.0050,
|
||||||
|
"gravity-unit": "G",
|
||||||
|
"run-time": 6
|
||||||
|
}
|
||||||
|
|
||||||
|
This is the format template used to create the json above.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
{
|
||||||
|
"name" : "${mdns}",
|
||||||
|
"ID": "${id}",
|
||||||
|
"token" : "gravmon",
|
||||||
|
"interval": ${sleep-interval},
|
||||||
|
"temperature": ${temp},
|
||||||
|
"temp-units": "${temp-unit}",
|
||||||
|
"gravity": ${gravity},
|
||||||
|
"angle": ${angle},
|
||||||
|
"battery": ${battery},
|
||||||
|
"rssi": ${rssi},
|
||||||
|
"corr-gravity": ${corr-gravity},
|
||||||
|
"gravity-unit": "${gravity-unit}",
|
||||||
|
"run-time": ${run-time}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.. _data-formats-brewfather:
|
||||||
|
|
||||||
|
Brewfather format
|
||||||
|
=================
|
||||||
|
|
||||||
|
This is the format for Brewfather. See: `Brewfather API docs <https://docs.brewfather.app/integrations/custom-stream>`_
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"name" : "gravmon",
|
||||||
|
"temp": 20.5,
|
||||||
|
"temp_unit": "C",
|
||||||
|
"battery": 3.67,
|
||||||
|
"gravity": 1.0050,
|
||||||
|
"gravity_unit": "G",
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
.. _data-formats-influxdb2:
|
||||||
|
|
||||||
|
Influx DB v2
|
||||||
|
============
|
||||||
|
|
||||||
|
This is the format for InfluxDB v2
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
measurement,host=<mdns>,device=<id>,temp-format=<C|F>,gravity-format=SG,gravity=1.0004,corr-gravity=1.0004,angle=45.45,temp=20.1,battery=3.96,rssi=-18
|
||||||
|
|
||||||
|
|
||||||
|
This is the format template used to create the json above.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
measurement,host=${mdns},device=${id},temp-format=${temp-unit},gravity-format=${gravity-unit} gravity=${gravity},corr-gravity=${corr-gravity},angle=${angle},temp=${temp},battery=${battery},rssi=${rssi}
|
||||||
|
|
||||||
|
|
||||||
|
.. _data-formats-mqtt:
|
||||||
|
|
||||||
|
MQTT
|
||||||
|
====
|
||||||
|
|
||||||
|
This is the format used to send data to MQTT. Each of the lines are specific topics
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
ispindel/device_name/tilt 89.96796
|
||||||
|
ispindel/device_name/temperature 21.375
|
||||||
|
ispindel/device_name/temp_units C
|
||||||
|
ispindel/device_name/battery 0.04171
|
||||||
|
ispindel/device_name/gravity 33.54894
|
||||||
|
ispindel/device_name/interval 1
|
||||||
|
ispindel/device_name/RSSI -58
|
||||||
|
|
||||||
|
|
||||||
|
This is the format template used to create the json above.
|
||||||
|
|
||||||
|
.. tip::
|
||||||
|
|
||||||
|
Each line in the format is treated as one topic. The `|` is used as separator between lines and the first `:` is used as separator between topic and value. Each line is formatted as `<topic>:<value>`
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
ispindel/${mdns}/tilt:${angle}|
|
||||||
|
ispindel/${mdns}/temperature:${temp}|
|
||||||
|
ispindel/${mdns}/temp_units:${temp-unit}|
|
||||||
|
ispindel/${mdns}/battery:${battery}|
|
||||||
|
ispindel/${mdns}/gravity:${gravity}|
|
||||||
|
ispindel/${mdns}/interval:${sleep-interval}|
|
||||||
|
ispindel/${mdns}/RSSI:${rssi}|
|
||||||
|
|
||||||
|
This is a format template that is compatible with v0.6. Just replace the `topic` with the topic you want to post data to.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
topic:{"name":"gravmon","ID":"${id}","token":"gravmon","interval": ${sleep-interval},"temperature": ${temp},"temp-units": "${temp-unit}","gravity":${gravity},"angle": ${angle},"battery":${battery},"rssi": ${rssi},"corr-gravity":${corr-gravity},"gravity-unit": "${gravity-unit}","run-time": ${run-time}}|
|
||||||
|
|
||||||
|
|
||||||
|
version.json
|
||||||
|
============
|
||||||
|
|
||||||
|
Contents version.json. The version is used by the device to check if the this version is newer. The html files will also be downloaded if the are present on the server. This way it's easy to
|
||||||
|
upgrade to a version that serve the html files from the file system. If they dont exist nothing will happen, the OTA flashing will still work. If the html files are missing from the file system
|
||||||
|
they can be uploaded manually afterwards.
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"project":"gravmon",
|
||||||
|
"version":"0.7.0",
|
||||||
|
"html": [
|
||||||
|
"index.min.htm",
|
||||||
|
"device.min.htm",
|
||||||
|
"config.min.htm",
|
||||||
|
"format.min.htm",
|
||||||
|
"calibration.min.htm",
|
||||||
|
"about.min.htm"
|
||||||
|
]
|
||||||
|
}
|
16
docs/v0.8/_sources/formula.rst.txt
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
.. _create-formula:
|
||||||
|
|
||||||
|
Create formula
|
||||||
|
##############
|
||||||
|
|
||||||
|
.. image:: images/formula1.png
|
||||||
|
:width: 800
|
||||||
|
:alt: Formula data
|
||||||
|
|
||||||
|
Here you can enter up to 5 values (angles + gravity) that is then used to create the formula. Angles equal to zero will be regarded as empty even if there is a gravity reading.
|
||||||
|
|
||||||
|
.. image:: images/formula2.png
|
||||||
|
:width: 800
|
||||||
|
:alt: Formula graph
|
||||||
|
|
||||||
|
Once the formula is created a graph over the entered values and a simulation of the formula will give you a nice overview on how the formula will work.
|
183
docs/v0.8/_sources/functionallity.rst.txt
Normal file
@ -0,0 +1,183 @@
|
|||||||
|
.. _functionallity:
|
||||||
|
|
||||||
|
Functionallity
|
||||||
|
==============
|
||||||
|
|
||||||
|
The main features
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
* **Operates in two modes gravity monitoring and configuration mode**
|
||||||
|
|
||||||
|
In ``gravity monitoring`` mode it behaves just like the iSpindle, it wakes up at regular intervals, measures
|
||||||
|
angle/tile, temperature, calculates gravity and pushes the data to defined endpoints.
|
||||||
|
|
||||||
|
In ``configuration mode`` the device is always active and the webserver is active. Here you can view the
|
||||||
|
angle/tilt values, change configuration, update the gravity formula. When in this mode you can also interact
|
||||||
|
with the device via an REST API so data can be pushed to the device via scripts (see API section for more information).
|
||||||
|
|
||||||
|
.. image:: images/index.png
|
||||||
|
:width: 700
|
||||||
|
:alt: UI example
|
||||||
|
|
||||||
|
You can force the device into ``configuration mode`` while measuring gravity. This is useful when calibrating
|
||||||
|
the device so you don't needs to wait for the device to wake up and push the data. The entire calibration
|
||||||
|
sequence can be handled via the web interface without need for additional software tools.
|
||||||
|
|
||||||
|
See the :ref:`setting-up-device` section for more information on how to trigger the configuration mode.
|
||||||
|
|
||||||
|
* **Can send data to multiple endpoints**
|
||||||
|
|
||||||
|
The original iSpindle can only have one destination, this software will push data to all defined endpoints so
|
||||||
|
in theory you can use them all. However this will consume more battery power so use only as many as needed. Its much
|
||||||
|
more efficient to have the endpoints on your local network than on the internet.
|
||||||
|
|
||||||
|
Currently the device supports the following endpoints.
|
||||||
|
|
||||||
|
* http or https
|
||||||
|
* influxdb v2
|
||||||
|
* Brewfather
|
||||||
|
* MQTT
|
||||||
|
* Home Assistant
|
||||||
|
* Brew Spy
|
||||||
|
* Brewers Friend
|
||||||
|
* Fermentrack
|
||||||
|
* Ubidots
|
||||||
|
* Thingsspeak
|
||||||
|
|
||||||
|
|
||||||
|
Under the :ref:`services` section you can find guides for how to connect GravityMon to these services. For a
|
||||||
|
description of what data is transmitted you can see :ref:`data-formats`.
|
||||||
|
|
||||||
|
The software support SSL endpoints but currently without CA validation, this means that the data is encrypted
|
||||||
|
but it does not validate if the remote endpoint is who it claims to be.
|
||||||
|
|
||||||
|
if you require CA validation please leave a comment on GitHub and I will make that a priority. Adding this function
|
||||||
|
will dramatically reduce the battery life of the device.
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Using SSL on a small device such as the esp8266 can be unstable since it requires a lot of RAM to work. And running out
|
||||||
|
of RAM will cause the device to crash. So enable SSL with caution and only when you really need it. GravityMon will try
|
||||||
|
to minimize the needed RAM but the remote service might not support that feature.
|
||||||
|
|
||||||
|
* **Create gravity formulas on the device**
|
||||||
|
|
||||||
|
Another big difference is that this software can create the gravity formula in the device, just enter the
|
||||||
|
angle/gravity data that you have collected. You will also see a graph simulating how the formula would work.
|
||||||
|
|
||||||
|
Currently the device can handle 5 data points which should be enough to get a accurate formula. At least 3 data points
|
||||||
|
is needed to get an accurate formula.
|
||||||
|
|
||||||
|
If there is a need for more data points, raise a comment on github.
|
||||||
|
|
||||||
|
* **Customize the data format beeing sent to push targets**
|
||||||
|
|
||||||
|
In order to make it easier to support more targets there is a built in format editor that can be used to
|
||||||
|
customize the data that is to be sent. This way you can easily adapt the software to new targets without coding.
|
||||||
|
If you have a good template please share it on the github repository and I will add it to the documentation
|
||||||
|
for other users to enjoy. See the :ref:`format-editor` for more information. See :ref:`services` for a list of
|
||||||
|
services currently validated.
|
||||||
|
|
||||||
|
* **Automatic temperature adjustment of gravity reading**
|
||||||
|
|
||||||
|
If you want to correct gravity based on beer temperature you can do this in the formula but here is a nice
|
||||||
|
feature that can correct the gravity as a second step making this independant of the formula.
|
||||||
|
|
||||||
|
* **OTA support from webserver**
|
||||||
|
|
||||||
|
When starting up in configuration mode the device will check for a software update from a webserver. This is an easily
|
||||||
|
way to keep the software up to date. In the future I might add a hosted endpoint for providing updates.
|
||||||
|
|
||||||
|
* **DS18B20 temperature adjustments**
|
||||||
|
|
||||||
|
You can adjust the temperature reading of the temperature sensor. In normal cases this should not be needed since
|
||||||
|
the sensors should be calibrated.
|
||||||
|
|
||||||
|
* **Gyro Movement**
|
||||||
|
|
||||||
|
The software will detect if the gyro is moving and if this is the case it will go back to sleep for 60seconds.
|
||||||
|
This way we should avoid faulty measurements and peaks in the graphs.
|
||||||
|
|
||||||
|
* **WIFI connection issues**
|
||||||
|
|
||||||
|
The software will not wait indefiently for a wifi connection. If it takes longer than 20 seconds to connect then
|
||||||
|
the device will go into deep sleep for 60 seoncds and then retry later. This to conserve batter as much as possible.
|
||||||
|
|
||||||
|
* **Use gyro temperature sensor**
|
||||||
|
|
||||||
|
This works fine when the device has time to cool down between measurements and it saves up to 400 ms.
|
||||||
|
My testing shows that this is quite accurate with a deviation of less than 0.3C. This
|
||||||
|
reduces the run time by 20% (with optimal wifi connection).
|
||||||
|
|
||||||
|
The graph below compares from the temp from two different devices in the same bucket of water. One with
|
||||||
|
gyro temp enabled and one with the DS18B20 sensor. The blue line is the gyro temperature and this clear
|
||||||
|
that the temperature will be higher after it has been running but cools down when in sleep mode. The interval
|
||||||
|
has been set to 300s. A low delay of 30s will not allow the gyro to cool down and the temperature will
|
||||||
|
be 0.5-1.0C higher.
|
||||||
|
|
||||||
|
.. image:: images/temp1.png
|
||||||
|
:width: 800
|
||||||
|
:alt: Gyro temp vs DS18B20
|
||||||
|
|
||||||
|
* **Celsius or Farenheigt**
|
||||||
|
|
||||||
|
You can switch between different temperature formats. GravityMon will always use C for it's internal calculations and
|
||||||
|
convert to F when displayed.
|
||||||
|
|
||||||
|
* **SG or Plato**
|
||||||
|
|
||||||
|
You can switch between different gravity formats. GravityMon will always use SG for it's internal calculations and
|
||||||
|
convert to Plato when displayed.
|
||||||
|
|
||||||
|
* **Stable gyro data**
|
||||||
|
|
||||||
|
The device will read the gyro 50 times to get an accurate reading. If the standad deviation is to high it will not
|
||||||
|
use the data since this is inacurate and the device is probably moving, probably do to active fermentation or movement of
|
||||||
|
fermentation vessel. This sequence takes 900 ms seconds to execute and besides wifi connection this is what consumes the most
|
||||||
|
battery. With more testing this might be changes to either speed up or provide more stable readings.
|
||||||
|
|
||||||
|
* **Performance measurements**
|
||||||
|
|
||||||
|
I've also create a small library to measure execution code in some areas of the code that i know is time consuming. This
|
||||||
|
way I can find a good balance between performace and quality. This is a lot of help trying to figure out where bottlenecks
|
||||||
|
are in the code and where to put optimization efforts. Examples of real measurements:
|
||||||
|
|
||||||
|
* Reading the gyro: 885 ms
|
||||||
|
* Reading DS18B20 temperature sensor: 546 ms
|
||||||
|
* Connect to WIFI: 408 ms
|
||||||
|
* Send data to local influxdb v2: 25 ms
|
||||||
|
* Send data to local mqtt server: 35 ms
|
||||||
|
* Send data to local http server: 40 ms
|
||||||
|
* Send data to http server on internet: 0.2 - 5 seconds
|
||||||
|
|
||||||
|
See the :ref:`compiling-the-software` for more information.
|
||||||
|
|
||||||
|
* **Power measurements**
|
||||||
|
|
||||||
|
I've also create a project to measure the power consumption of the device, but more on this later.
|
||||||
|
|
||||||
|
|
||||||
|
Battery life
|
||||||
|
------------
|
||||||
|
|
||||||
|
The long term battery test has now been completed. Using a 2200 mA battery and sending data every 5 minutes to a local server on my network. The battery lasted 47 days which is excellet battery life.
|
||||||
|
|
||||||
|
In another test I had a device running with an sleep interval of only 30s with ok wifi connection. The device lasted 12 days which i think is excellent considering the short sleep interval.
|
||||||
|
|
||||||
|
From what I have discovered it's the WIFI connection or latency to internet hosted that has the most impact on the battery life. The typical runtime in the tests above was around 2 seconds.
|
||||||
|
|
||||||
|
|
||||||
|
Performance
|
||||||
|
-----------
|
||||||
|
|
||||||
|
Since I have the possibility to measure the performance of different function in the code this is what I have been able to gather.
|
||||||
|
|
||||||
|
The typical runtime in a measurement cycle is approx 2 seconds and in some cases it can take up to 6-8 seconds but this is mainly related to establishing the WIFI connection. So stable wifi is
|
||||||
|
essential for long batterylife. Out of the 2 seconds of run-time the major time is spent on gyro readings (1.3s) and temperature measurements of (0.6s) so using the gyro sensor for measureing
|
||||||
|
temperature would reduce the total runtime with 25%. Sending data over http takes less than 100ms (on my local network) so this is not drawing much power.
|
||||||
|
|
||||||
|
The image below shows how the run-time varies over time. The pink line is the wifi connection time and this is why the time varies. The orange is the total runtime for the awake period.
|
||||||
|
|
||||||
|
.. image:: images/perf1.png
|
||||||
|
:width: 800
|
||||||
|
:alt: Performance view
|
153
docs/v0.8/_sources/index.rst.txt
Normal file
@ -0,0 +1,153 @@
|
|||||||
|
.. GravityMon documentation master file, created by
|
||||||
|
sphinx-quickstart on Wed Jan 5 22:46:42 2022.
|
||||||
|
You can adapt this file completely to your liking, but it should at least
|
||||||
|
contain the root `toctree` directive.
|
||||||
|
|
||||||
|
Welcome to GravityMon's documentation!
|
||||||
|
######################################
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
This documentation reflects **v0.8**. Last updated 2022-03-05
|
||||||
|
|
||||||
|
GravityMon is used to measure gravity and temperature during fermentation of beer and report the progress. The graph below is
|
||||||
|
an example on how the fermentation process can be tracked. This is from my last brew that was over on a few days. The graph is rendered using
|
||||||
|
Fermentrack.
|
||||||
|
|
||||||
|
.. image:: images/fermentation.png
|
||||||
|
:width: 500
|
||||||
|
:alt: Example fermentation
|
||||||
|
|
||||||
|
GravityMon is a replacement firmware for the iSpindle and uses the same hardware configuration and is 100% compatible. It
|
||||||
|
implements a lot of the features that has been requested in the orginal iSpindle project but has been rejected for
|
||||||
|
various reasons. Here is a list of :ref:`main_features`.
|
||||||
|
|
||||||
|
I started GravityMon because I like to create software and wanted to do some low level programming. I had done a few
|
||||||
|
projects based on esp8266 and also started to brew beer so this combination was quite natural.
|
||||||
|
|
||||||
|
The hardware design comes from the fantastic iSpindle project so that is not covered in this documentation. For more
|
||||||
|
information on this topic and function please visit `iSpindel Homepage <https://www.ispindel.de>`_ .
|
||||||
|
|
||||||
|
My approach to this software is a little different from that the original iSpindle firmware. The github repository
|
||||||
|
can be found here; `GravityMon on Github <https://github.com/mp-se/gravitymon>`_
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
I dont take responsibility for any errors or issues caused by the software. The software is provided as-is. I will however
|
||||||
|
try my best to fix issues that might occur.
|
||||||
|
|
||||||
|
I have tested this software over the last year on 20+ brews with good results.
|
||||||
|
|
||||||
|
.. _main_features:
|
||||||
|
|
||||||
|
Main features:
|
||||||
|
--------------
|
||||||
|
|
||||||
|
* Operates in two modes gravity monitoring and configuration mode (simplify calibration). Gravity mode
|
||||||
|
is comparable to how the iSpindle works.
|
||||||
|
* Modern web based UI when in configuration mode. No need to start the access point changing settings.
|
||||||
|
* REST API to enable scripted configuration
|
||||||
|
* Send data to multiple endpoints and services at once
|
||||||
|
* Setup guides for how to send data to many popular services. Currently 8+ are documented.
|
||||||
|
* Automatic temperature adjustment of gravity reading
|
||||||
|
* OTA support from webserver
|
||||||
|
* Built in function to create gravity formulas, no need for additional software, just enter tilt/gravity and
|
||||||
|
let GravityMon create the formula.
|
||||||
|
* Visual graph showing how formula will be interpreted based on entered values
|
||||||
|
* Using the temperature sensor in gyro instead of DS18B20 (faster)
|
||||||
|
* SSL support in standard HTTP and MQTT connections.
|
||||||
|
* Option to customize data posted to endpoints using template from the UI.
|
||||||
|
* Built in performance measurements (used to optimise code)
|
||||||
|
|
||||||
|
For a complete breakdown see the :ref:`functionallity`
|
||||||
|
|
||||||
|
This is a simple overview of the different components that the software contains. The green ones are only active during `configuration mode` in
|
||||||
|
order to save battery.
|
||||||
|
|
||||||
|
.. image:: images/software_design.png
|
||||||
|
:width: 600
|
||||||
|
:alt: Software design
|
||||||
|
|
||||||
|
|
||||||
|
Credits to
|
||||||
|
----------
|
||||||
|
Ideas to some of these functions have been picked up from disucssions in the iSpindle forums. This software uses
|
||||||
|
the following libraries and without these this would have been much more difficult to acheive:
|
||||||
|
|
||||||
|
* https://github.com/jrowberg/i2cdevlib
|
||||||
|
|
||||||
|
This library contains the basic code to interact with the gyro + many more chips.
|
||||||
|
|
||||||
|
* https://github.com/codeplea/tinyexpr
|
||||||
|
|
||||||
|
Proccess the gravity formula and calculate the gravity and various corrections.
|
||||||
|
|
||||||
|
* https://github.com/graphitemaster/incbin
|
||||||
|
|
||||||
|
Include binary files into the code, used to service html files.
|
||||||
|
|
||||||
|
* https://github.com/khoih-prog/ESP_DoubleResetDetector
|
||||||
|
|
||||||
|
Can detect if the reset button is pressed twice, is used to enter WIFI config mode.
|
||||||
|
|
||||||
|
* https://github.com/khoih-prog/ESP_WiFiManager
|
||||||
|
|
||||||
|
Configure wifi settings.
|
||||||
|
|
||||||
|
* https://github.com/thijse/Arduino-Log
|
||||||
|
|
||||||
|
Logging library for handling different loglevels and configure what sent over the serial.
|
||||||
|
|
||||||
|
* https://github.com/bblanchon/ArduinoJson
|
||||||
|
|
||||||
|
Json parser/creator used in configuration files and API's
|
||||||
|
|
||||||
|
* https://github.com/PaulStoffregen/OneWire
|
||||||
|
|
||||||
|
Communication library used for interacting with temperature sensor.
|
||||||
|
|
||||||
|
* https://github.com/milesburton/Arduino-Temperature-Control-Library
|
||||||
|
|
||||||
|
Interaction with the DS18B20 sensor
|
||||||
|
|
||||||
|
* https://github.com/Rotario/arduinoCurveFitting
|
||||||
|
|
||||||
|
Create the gravity formula.
|
||||||
|
|
||||||
|
* https://github.com/256dpi/arduino-mqtt
|
||||||
|
|
||||||
|
Library for sending data to mqtt based on lightweight mqtt implemenentation.
|
||||||
|
|
||||||
|
* https://graphjs.com/
|
||||||
|
|
||||||
|
Render the graphs in the UI.
|
||||||
|
|
||||||
|
* https://getbootstrap.com/
|
||||||
|
|
||||||
|
CSS templates for the web page.
|
||||||
|
|
||||||
|
|
||||||
|
.. toctree::
|
||||||
|
:maxdepth: 2
|
||||||
|
:caption: Contents:
|
||||||
|
|
||||||
|
license
|
||||||
|
functionallity
|
||||||
|
intro
|
||||||
|
installation
|
||||||
|
releases
|
||||||
|
configuration
|
||||||
|
formula
|
||||||
|
services
|
||||||
|
advanced
|
||||||
|
api
|
||||||
|
data
|
||||||
|
compiling
|
||||||
|
contributing
|
||||||
|
troubleshooting
|
||||||
|
q_and_a
|
||||||
|
|
||||||
|
Indices and tables
|
||||||
|
==================
|
||||||
|
|
||||||
|
* :ref:`genindex`
|
||||||
|
* :ref:`modindex`
|
||||||
|
* :ref:`search`
|
79
docs/v0.8/_sources/installation.rst.txt
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
.. _installation:
|
||||||
|
|
||||||
|
Installation
|
||||||
|
------------
|
||||||
|
|
||||||
|
Brewflasher
|
||||||
|
===========
|
||||||
|
|
||||||
|
The prefered option for flashing GravityMon is using BrewFlasher, its a tools that support many brewing related firmwares for ESP8266 and ESP32. This works
|
||||||
|
on both Windows and Mac. You can download the latest version from here: `Brewflasher <https://www.brewflasher.com/>`_
|
||||||
|
|
||||||
|
.. image:: images/brewflasher.png
|
||||||
|
:width: 600
|
||||||
|
:alt: Serial output
|
||||||
|
|
||||||
|
Binaries
|
||||||
|
********
|
||||||
|
|
||||||
|
In the /bin directory you will find 2 different firmware builds;
|
||||||
|
|
||||||
|
* **firmware.bin**
|
||||||
|
|
||||||
|
This is the standard release build (prefered version)
|
||||||
|
|
||||||
|
* **firmware-perf.bin**
|
||||||
|
|
||||||
|
This version also submits performance data to an influx database with detailed execution times.
|
||||||
|
|
||||||
|
In these versions all the html files are embedded in the binaries. The file system is currently only used for storing
|
||||||
|
the configuration file.
|
||||||
|
|
||||||
|
If the software becomes so large the html files can be moved to the file system, but this is not enabled by
|
||||||
|
default (see compiling for details). This approach makes installation much easier and ensure that html files
|
||||||
|
and code is in sync.
|
||||||
|
|
||||||
|
Esptool
|
||||||
|
=======
|
||||||
|
|
||||||
|
The other option for flashing esp8266 device is via the official esptool. Documentation can be found
|
||||||
|
here; `esptool home page <https://docs.espressif.com/projects/esptool/en/latest/esp32/>`_
|
||||||
|
|
||||||
|
Windows 10 should install a driver for the USB -> Serial automatically when you connect a esp8266.
|
||||||
|
|
||||||
|
The basic command for flashing on Windows is;
|
||||||
|
|
||||||
|
``esptool.py --port COM4 write_flash 0x0 firmware.bin``
|
||||||
|
|
||||||
|
If there are issues you can try do erase the flash first using this command;
|
||||||
|
|
||||||
|
``esptool.py --port COM4 erase_flash``
|
||||||
|
|
||||||
|
Serial Monitoring
|
||||||
|
=================
|
||||||
|
|
||||||
|
To check output from the device (logs) there are several tools out there. I found this simple tool in the Windows Store called ``Serial Port Monitoring``.
|
||||||
|
Just select a baud rate of 115200, 8N1.
|
||||||
|
|
||||||
|
.. image:: images/serial.png
|
||||||
|
:width: 800
|
||||||
|
:alt: Serial output
|
||||||
|
|
||||||
|
|
||||||
|
.. _setup_wifi:
|
||||||
|
|
||||||
|
Configuring WIFI
|
||||||
|
================
|
||||||
|
|
||||||
|
When the device is flashed it will need to have WIFI configuration in order to work. If you have used other software on
|
||||||
|
the device its possible that wifi settings exist.
|
||||||
|
|
||||||
|
If this is not configured in the device it will create an wirless access point called `GravMon`. The default password is `password`.
|
||||||
|
|
||||||
|
Connect to this AP and enter the SSID and password you want to use. If the web page dont open automatically you can enter the following adress
|
||||||
|
in the browser: **http://192.168.4.1**
|
||||||
|
|
||||||
|
.. image:: images/wifi.png
|
||||||
|
:width: 200
|
||||||
|
:alt: Wifi page
|
||||||
|
|
73
docs/v0.8/_sources/intro.rst.txt
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
.. _getting_started:
|
||||||
|
|
||||||
|
Getting started
|
||||||
|
===============
|
||||||
|
|
||||||
|
First you need a completed iSpindle hardware, there are several resouces around that topic so it
|
||||||
|
will not be covered in this documentation. Please visit `iSpindel Homepage <https://www.ispindel.de>`_ for
|
||||||
|
more information.
|
||||||
|
|
||||||
|
Step 1 - Flash the device
|
||||||
|
-------------------------
|
||||||
|
|
||||||
|
The first step is to flash the firmware, I recommend using Brewflasher as the easy option. Detailed
|
||||||
|
instructions can be found here :ref:`installation`
|
||||||
|
|
||||||
|
Step 2 - Setup WIFI
|
||||||
|
-------------------
|
||||||
|
|
||||||
|
When the device starts up the first time it will first start an WIFI access point so that the WIFI Settings
|
||||||
|
can be configured. The instructions for that can be found here :ref:`setup_wifi`
|
||||||
|
|
||||||
|
Step 3 - Configuration
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Once the device can connect to WIFI it will go into `configuration mode` and start a web server for
|
||||||
|
doing the initial configuration. In order to access the device you will need to find its name or ip adress.
|
||||||
|
|
||||||
|
It will broadcast a name like gravitymonXXXXXX.local over mDNS. Where the XXXXXX is the unique device id. You can
|
||||||
|
find the name via an mDNS browser, check your router or connect the device to a serial monitor. On windows mDNS
|
||||||
|
might not work so then use the IP address instead. Once connected you will meet a web interface that looks like this.
|
||||||
|
|
||||||
|
.. image:: images/index.png
|
||||||
|
:width: 800
|
||||||
|
:alt: Index page
|
||||||
|
|
||||||
|
The next step is then to configure the device, most settings should work but there are a few that should be changed.
|
||||||
|
|
||||||
|
Configuration - Device Settings - Device Name
|
||||||
|
+++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
|
Give your device a good name.
|
||||||
|
|
||||||
|
Configuration - Device Settings - Gyro Calibration
|
||||||
|
++++++++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
|
||||||
|
You need to place the device on a flat surface and then press the
|
||||||
|
calibrate button. It will take a few seconds for this to complete and the angle should be close to 90 degress. Without
|
||||||
|
calibration the device will not go into gravity mode.
|
||||||
|
|
||||||
|
Configuration - Push Settings
|
||||||
|
+++++++++++++++++++++++++++++
|
||||||
|
Add the endpoints where you want data to be transmitted. All URLs that contain a valid endpoint will receive the data.
|
||||||
|
|
||||||
|
Calibration
|
||||||
|
+++++++++++
|
||||||
|
|
||||||
|
I recommend to use the calibration feature to create a gravity formula. If you have values from a
|
||||||
|
previous calibration then you can add them here, if not follow the calibration guidelines on the iSpindle site.
|
||||||
|
|
||||||
|
There are several guides for how to calibrate the device (`iSpindle Calibration <https://www.ispindel.de/docs/Calibration_en.html>`_)
|
||||||
|
|
||||||
|
This will get the data points needed to create the formula, and the datapoints will be stored on the device so you can
|
||||||
|
adjust them when needed.
|
||||||
|
|
||||||
|
Step 4 - Completed
|
||||||
|
------------------
|
||||||
|
|
||||||
|
You are now done and can enjoy the GravityMon software. Check out the :ref:`setting-up-device` section for other configuration options.
|
||||||
|
|
||||||
|
If you want to enter the configuration mode place the device flat on a surface and do a reset (or wait until it wakes up).
|
||||||
|
Its recommended to attach the device to power when you have it in `configuration mode` so the battery is not drained.
|
||||||
|
|
||||||
|
**If you have suggestions for more awesome features, head over to the github repository and make a request.**
|
26
docs/v0.8/_sources/license.rst.txt
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
.. _licence:
|
||||||
|
|
||||||
|
Licence
|
||||||
|
#######
|
||||||
|
|
||||||
|
MIT License
|
||||||
|
|
||||||
|
Copyright (c) 2021-22 Magnus
|
||||||
|
|
||||||
|
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.
|
14
docs/v0.8/_sources/q_and_a.rst.txt
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
Q & A
|
||||||
|
#####
|
||||||
|
|
||||||
|
My device is no going in to sleep after fully charged
|
||||||
|
-----------------------------------------------------
|
||||||
|
- Calibrate the device in the web interface
|
||||||
|
- Check the angle/tilt. If the device is reporting 90 degress then its not going into sleep. Tilt the device and check if sleep works.
|
||||||
|
- Check in reported voltage of the battery in the web interface. If this is higher than 4.15V the device belives its beeing charged. In that case adjust the voltage factor under hardware so the voltage drops below 4.15V.
|
||||||
|
- Check if the `always on` option is activated in the web interface.
|
||||||
|
|
||||||
|
My device reports a temperature of -273C or -491F
|
||||||
|
-------------------------------------------------
|
||||||
|
- The DS18B20 temperature sensor cannot be found and this is the default value reported in this case.
|
||||||
|
- Check the orienation of the sensor and soldering.
|
98
docs/v0.8/_sources/releases.rst.txt
Normal file
@ -0,0 +1,98 @@
|
|||||||
|
.. _releases:
|
||||||
|
|
||||||
|
Releases
|
||||||
|
########
|
||||||
|
|
||||||
|
v0.8.0
|
||||||
|
------
|
||||||
|
|
||||||
|
* Added option to set http headers (2 per http endpoint), these can be used for
|
||||||
|
other http formats than json (default) and for adding authentication headers.
|
||||||
|
* Added possibility to view last 10 errors on device page.
|
||||||
|
* Added possibility to define token parameter used in iSpindle format.
|
||||||
|
* Added instructions for how to configure integration with Brewspy
|
||||||
|
* Added instructions for how to configure integration with Thingspeak
|
||||||
|
* Added option to do a factory reset via API.
|
||||||
|
* Logging the runtime, how long a measurement take (last 10 are stored). This can be
|
||||||
|
used to check how good the wifi connection is and estimate the lifetime when on battery.
|
||||||
|
Check the device page in the UI for this information.
|
||||||
|
* Refactored code to free up more RAM to make SSL more stable.
|
||||||
|
* Before connecting to an SSL endpoint the device will try to use a new SSL feature
|
||||||
|
called MFLN (Maximum Fragment Length Negotiation) that allow us to reduce the buffers
|
||||||
|
from 16k to 2k. This can make a huge difference on a device with only 40k RAM. Not all
|
||||||
|
servers might support this feature.
|
||||||
|
* Updated documentation pages.
|
||||||
|
* Tested batterylife, 47 days using an update frequency of 5 min
|
||||||
|
|
||||||
|
v0.7.1
|
||||||
|
------
|
||||||
|
|
||||||
|
* Added instructions for how to configure integration with Fermentrack
|
||||||
|
* Added instructions for how to configure integration with Ubidots
|
||||||
|
* Added instructions for how to configure integration with HomeAssistant
|
||||||
|
* Added instructions for how to configure integration with Brewers Friend (not verified)
|
||||||
|
* BUG: Defined mqtt port was ignored, used default values.
|
||||||
|
* BUG: Extended length of HTTP url fields from 100 to 120 chars.
|
||||||
|
* BUG: Fixed issue with default template so it now includes the device name correctly.
|
||||||
|
|
||||||
|
v0.7.0
|
||||||
|
------
|
||||||
|
|
||||||
|
Latest stable version. `Release v0.7 on Github <https://github.com/mp-se/gravitymon/releases/tag/v0.7.0>`_
|
||||||
|
|
||||||
|
* SSL support for HTTP targets
|
||||||
|
* SSL support for MQTT targets
|
||||||
|
* SSL support for OTA
|
||||||
|
* Added support for Plato
|
||||||
|
* Added error handling for calibration page.
|
||||||
|
* Added experimental target ESP32 (using an ESP32 D1 Mini which is pin compatible with ESP8266). Not
|
||||||
|
really usable since wifi connection is extreamly slow with current Arduino releases (3-8 seconds).
|
||||||
|
* Added experimental format editor so users can customize their data format used for pushing data.
|
||||||
|
This will reduce the need for custom push targets. As long as the service is supporting http
|
||||||
|
or https then the data format can be customized.
|
||||||
|
* Added check so that pushing data is not done if memory is low (this will avoid crashes)
|
||||||
|
* MQTT topic has been removed from config (handled via format templates)
|
||||||
|
* MQTT port port number added. Port over 8000 will activate SSL.
|
||||||
|
|
||||||
|
* **Breaking change**: To simplify the internal structure the
|
||||||
|
temp sensor adjustment is now stored in C. So if you have
|
||||||
|
enabled this function using F you will need to go into
|
||||||
|
the configuration and update the adjustment factor again (hardware config).
|
||||||
|
|
||||||
|
* **Breaking change**: The MQTT push option has been changed to match the iSpindle behaviour. If
|
||||||
|
the behaviour in v0.6 is wanted this can be done via the format editor.
|
||||||
|
|
||||||
|
v0.6.0
|
||||||
|
------
|
||||||
|
|
||||||
|
`Release v0.6 on Github <https://github.com/mp-se/gravitymon/releases/tag/v0.6.0>`_
|
||||||
|
|
||||||
|
* Changed the wifi manager and refactored wifi.cpp
|
||||||
|
* LED is now turned on when Wifi Portal is open
|
||||||
|
* Refactored main.cpp to make it easier to read
|
||||||
|
* Tested runtime performance
|
||||||
|
* Improved documentation
|
||||||
|
* Added warning on config page when sleep is <300
|
||||||
|
* Enabled selection of gyro temperature sensor under Hardware settings
|
||||||
|
* Added warning when short sleep interval and gyro temp is enabled
|
||||||
|
* Added support for MQTT
|
||||||
|
* Bug: MPU init sometimes caused crash during startup.
|
||||||
|
|
||||||
|
v0.5.0
|
||||||
|
------
|
||||||
|
|
||||||
|
`Release v0.5 on Github <https://github.com/mp-se/gravitymon/releases/tag/v0.5.0>`_
|
||||||
|
|
||||||
|
* Added feature to calcuate formula on device
|
||||||
|
* Total rewrite of documentation
|
||||||
|
* WIFI settings are now stored in config file
|
||||||
|
* Defined version numbers for all dependant libraries to avoid updates breaking build.
|
||||||
|
* Cleanup of code
|
||||||
|
* Refactor code from C to C++
|
||||||
|
|
||||||
|
v0.4.0
|
||||||
|
------
|
||||||
|
|
||||||
|
`Release v0.4 on Github <https://github.com/mp-se/gravitymon/releases/tag/v0.4.0>`_
|
||||||
|
|
||||||
|
* First release
|
197
docs/v0.8/_sources/services.rst.txt
Normal file
@ -0,0 +1,197 @@
|
|||||||
|
.. _services:
|
||||||
|
|
||||||
|
Service Integration
|
||||||
|
###################
|
||||||
|
|
||||||
|
This chapter contains a list of targets and what configuration is needed to interact with them.
|
||||||
|
|
||||||
|
Brewfather
|
||||||
|
++++++++++
|
||||||
|
|
||||||
|
Brewfather is an all in one service that allows you to manage you recepies and brews.
|
||||||
|
|
||||||
|
Just enter the http adress found on brewfather, not other settings are needed. The endpoint has the following format:
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
http://log.brewfather.net/http://log.brewfather.net/stream?id=<yourid>
|
||||||
|
|
||||||
|
|
||||||
|
The URL is found under settings.
|
||||||
|
|
||||||
|
Fermentrack
|
||||||
|
+++++++++++
|
||||||
|
|
||||||
|
`Fermentrack <https://www.fermentrack.com>`_ is a open source brewing software to monitor and control fermentation.
|
||||||
|
|
||||||
|
GravityMon can be installed and used as an iSpindle. Just register the device as an iSpindle and use the defined endpoint which normally is:
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
http://myservername/ispindel
|
||||||
|
|
||||||
|
|
||||||
|
UBIdots
|
||||||
|
+++++++
|
||||||
|
|
||||||
|
`UBIdots <https://www.ubidots.com>`_ is a IoT service that display data collected various sources.
|
||||||
|
|
||||||
|
For this service there are two options to configure the integration. First you will need your default token which is found under `API Credentials` (<api-tokem> in the example below).
|
||||||
|
Swap the text <devicename> with the name you want to show in ubidots.
|
||||||
|
|
||||||
|
**Option 1** - token as an URL parameter
|
||||||
|
|
||||||
|
Enter the following as URL:
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
http://industrial.api.ubidots.com/api/v1.6/devices/<devicename>/?token=<api-token>
|
||||||
|
|
||||||
|
|
||||||
|
This is the less secure option.
|
||||||
|
|
||||||
|
**Option 2** - token as the http header
|
||||||
|
|
||||||
|
Enter the following as URL, use either standard or ssl.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
http://industrial.api.ubidots.com/api/v1.6/devices/<devicename>
|
||||||
|
https://industrial.api.ubidots.com/api/v1.6/devices/<devicename>
|
||||||
|
|
||||||
|
|
||||||
|
Under `Headers` (button after the http url in the UI) enter the following string:
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
X-Auth-Token: <api-token>
|
||||||
|
|
||||||
|
|
||||||
|
This is the more secure option.
|
||||||
|
|
||||||
|
Even though ubidots can handle the default ispindle format it probably better to just post the data you want. This is an example of a
|
||||||
|
format template that can be used. For information on customizing the format see :ref:`format-editor`.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
{
|
||||||
|
"temperature": ${temp},
|
||||||
|
"gravity": ${gravity},
|
||||||
|
"angle": ${angle},
|
||||||
|
"battery": ${battery},
|
||||||
|
"rssi": ${rssi}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Home Assistant
|
||||||
|
+++++++++++++++
|
||||||
|
|
||||||
|
`HomeAssistant <https://www.homeassistant.com>`_ is a platform for home automation and can collect sensor data
|
||||||
|
from multiple devices.
|
||||||
|
|
||||||
|
This setup uses the MQTT integration with home assistant to collect values from the device.
|
||||||
|
|
||||||
|
This part of the configuration goes into the home assistant configuration.yaml file. The example assumes that the
|
||||||
|
device is named `gravmon2`
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
sensor:
|
||||||
|
- platform: mqtt
|
||||||
|
name: "gravmon2_gravity"
|
||||||
|
state_topic: "gravmon/gravmon2/gravity"
|
||||||
|
- platform: mqtt
|
||||||
|
name: "gravmon2_battery"
|
||||||
|
state_topic: "gravmon/gravmon2/battery"
|
||||||
|
- platform: mqtt
|
||||||
|
name: "gravmon2_rssi"
|
||||||
|
state_topic: "gravmon/gravmon2/rssi"
|
||||||
|
|
||||||
|
|
||||||
|
Enter the name of the MQTT server in Home Assistant in the URL. You might need to install that option
|
||||||
|
first. This is the format needed to submit the data to the correct topics as needed above. You can add as
|
||||||
|
many sensors / topics as you want.
|
||||||
|
|
||||||
|
::
|
||||||
|
|
||||||
|
gravmon/${mdns}/tilt:${angle}|
|
||||||
|
gravmon/${mdns}/temperature:${temp}|
|
||||||
|
gravmon/${mdns}/temp_units:${temp-unit}|
|
||||||
|
|
||||||
|
|
||||||
|
Brewer's Friend
|
||||||
|
+++++++++++++++
|
||||||
|
|
||||||
|
Brewer's friend is an all in one service that allows you to manage you recepies and brews.
|
||||||
|
|
||||||
|
.. warning::
|
||||||
|
I dont have an account for brewers friend so I have not been able to verfy this completely. Its based on
|
||||||
|
the available documentation. If this works please let
|
||||||
|
|
||||||
|
You can find you API key when logged in to the service. Follow these `instructions <https://docs.brewersfriend.com/devices/ispindel>`_
|
||||||
|
|
||||||
|
**Note there are different URLs if you are using plato or specific gravity!**
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
http://log.brewersfriend.com/ispindel/[API KEY]
|
||||||
|
http://log.brewersfriend.com/ispindel_sg/[API KEY]
|
||||||
|
|
||||||
|
|
||||||
|
From what I can read in the documentation you need to add the API key as a token as well. This can be done using a custom
|
||||||
|
format for the endpoint. Just add you API key after token.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
{
|
||||||
|
"name" : "${mdns}",
|
||||||
|
"ID": "${id}",
|
||||||
|
"token" : "[API KEY]",
|
||||||
|
"interval": ${sleep-interval},
|
||||||
|
"temperature": ${temp},
|
||||||
|
"temp-units": "${temp-unit}",
|
||||||
|
"gravity": ${gravity},
|
||||||
|
"angle": ${angle},
|
||||||
|
"battery": ${battery},
|
||||||
|
"rssi": ${rssi}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Brewspy
|
||||||
|
+++++++
|
||||||
|
|
||||||
|
BrewSpy is a service that can show the history and manage the brew.
|
||||||
|
|
||||||
|
You need to enter the Token found in brewspy. The field is found under the field for http configuration.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
http://brew-spy.com/api/ispindel
|
||||||
|
|
||||||
|
|
||||||
|
Thingspeak
|
||||||
|
++++++++++
|
||||||
|
|
||||||
|
Thingspeak is an IoT platform for receiving data which can be visualized.
|
||||||
|
|
||||||
|
In order to use this platform you need to create a channel (channel = device) and get the APIKEY for
|
||||||
|
writing to the channel. Each channel can handle up to 8 measurements. In the http field enter the following URL.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
http://api.thingspeak.com/update.json
|
||||||
|
|
||||||
|
|
||||||
|
You also need to create a custom format for the selected endpoint where the field1-field8 contains the data
|
||||||
|
you want to include. The example below sends 5 different values to the channel identified by the API key.
|
||||||
|
|
||||||
|
.. code-block::
|
||||||
|
|
||||||
|
{
|
||||||
|
"api_key": "<your write api key for channel>",
|
||||||
|
"field1": ${gravity},
|
||||||
|
"field2": ${temp},
|
||||||
|
"field3": ${angle},
|
||||||
|
"field4": ${battery},
|
||||||
|
"field5": ${rssi}
|
||||||
|
}
|
58
docs/v0.8/_sources/styling.rst.txt
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
Testing formatting
|
||||||
|
------------------
|
||||||
|
|
||||||
|
Header 1
|
||||||
|
########
|
||||||
|
|
||||||
|
Header 2
|
||||||
|
--------
|
||||||
|
|
||||||
|
Header 3
|
||||||
|
********
|
||||||
|
|
||||||
|
**BOLD**
|
||||||
|
|
||||||
|
*ITALIC*
|
||||||
|
|
||||||
|
``CODE SAMPLE``
|
||||||
|
|
||||||
|
1. List
|
||||||
|
2. List
|
||||||
|
|
||||||
|
* List
|
||||||
|
* List
|
||||||
|
|
||||||
|
.. list-table:: Table
|
||||||
|
:widths: 40 60
|
||||||
|
:header-rows: 1
|
||||||
|
|
||||||
|
* - table
|
||||||
|
- table
|
||||||
|
* - content
|
||||||
|
- content
|
||||||
|
|
||||||
|
.. image:: images/formula1.png
|
||||||
|
:width: 400
|
||||||
|
:alt: image
|
||||||
|
|
||||||
|
.. code-block:: objdump
|
||||||
|
|
||||||
|
measurement,host=<mdns>,device=<id>,temp-format=<C|F>,gravity-format=SG,gravity=1.0004,corr-gravity=1.0004,angle=45.45,temp=20.1,battery=3.96,rssi=-18
|
||||||
|
|
||||||
|
.. code-block:: json
|
||||||
|
|
||||||
|
{
|
||||||
|
"project":"gravmon",
|
||||||
|
"version":"0.4.10",
|
||||||
|
"html": [
|
||||||
|
"index.min.htm",
|
||||||
|
"device.min.htm",
|
||||||
|
"config.min.htm",
|
||||||
|
"calibration.min.htm",
|
||||||
|
"about.min.htm"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
.. note::
|
||||||
|
|
||||||
|
Note...
|
48
docs/v0.8/_sources/troubleshooting.rst.txt
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
.. _troubleshooting:
|
||||||
|
|
||||||
|
Troubleshooting
|
||||||
|
###############
|
||||||
|
|
||||||
|
Log errors
|
||||||
|
++++++++++
|
||||||
|
|
||||||
|
* Not enough values for deriving formula
|
||||||
|
|
||||||
|
To create a formula its required to have at least 3 measurements.
|
||||||
|
|
||||||
|
* Error validating created formula. Deviation to large, formula rejected
|
||||||
|
|
||||||
|
The device will try to create formulas with different complexities. It will try to
|
||||||
|
validate the formula using the supplied values. If the differnce is more than 1.6 SG on any point
|
||||||
|
the formula will be rejected. Check the entered values if they seams to be resonable.
|
||||||
|
|
||||||
|
* No valid calibration values, please calibrate the device.
|
||||||
|
|
||||||
|
The gyro needs to be calibrated at 90 degress (flat). This is done on the configration page.
|
||||||
|
|
||||||
|
* Low on memory, skipping push
|
||||||
|
|
||||||
|
The arduino libraries sometimes leak memory, this only occurs when running in configuration mode. To avoid
|
||||||
|
crashes the device will skip pushing data if the memory drops to much. Network connections seams to be connected
|
||||||
|
to memory leaks.
|
||||||
|
|
||||||
|
* Unable to set header, invalid value
|
||||||
|
|
||||||
|
Check the format for your custom header. This means it has not a correct format.
|
||||||
|
|
||||||
|
* Influxdb push failed response
|
||||||
|
* Brewfather push failed response
|
||||||
|
* HTTP push failed response
|
||||||
|
|
||||||
|
All these errors are standard http error codes. This are the commone ones;
|
||||||
|
|
||||||
|
* 400 - Bad request. Probably an issue with the post format. Check format in the format editor.
|
||||||
|
* 401 - Unathorized. The service needs an token or other means to authenticate the device.
|
||||||
|
* 403 - Forbidden. Could be an issue with token or URL.
|
||||||
|
* 404 - Not found. Probably a wrong URL.
|
||||||
|
|
||||||
|
* MQTT push on <topic> failed error
|
||||||
|
|
||||||
|
* -3 - Network failed connected
|
||||||
|
* -10 - Connection denied
|
||||||
|
|
906
docs/v0.8/_static/basic.css
Normal file
@ -0,0 +1,906 @@
|
|||||||
|
/*
|
||||||
|
* basic.css
|
||||||
|
* ~~~~~~~~~
|
||||||
|
*
|
||||||
|
* Sphinx stylesheet -- basic theme.
|
||||||
|
*
|
||||||
|
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
|
||||||
|
* :license: BSD, see LICENSE for details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* -- main layout ----------------------------------------------------------- */
|
||||||
|
|
||||||
|
div.clearer {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.section::after {
|
||||||
|
display: block;
|
||||||
|
content: '';
|
||||||
|
clear: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- relbar ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
div.related {
|
||||||
|
width: 100%;
|
||||||
|
font-size: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.related h3 {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.related ul {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0 0 0 10px;
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.related li {
|
||||||
|
display: inline;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.related li.right {
|
||||||
|
float: right;
|
||||||
|
margin-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- sidebar --------------------------------------------------------------- */
|
||||||
|
|
||||||
|
div.sphinxsidebarwrapper {
|
||||||
|
padding: 10px 5px 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar {
|
||||||
|
float: left;
|
||||||
|
width: 230px;
|
||||||
|
margin-left: -100%;
|
||||||
|
font-size: 90%;
|
||||||
|
word-wrap: break-word;
|
||||||
|
overflow-wrap : break-word;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar ul {
|
||||||
|
list-style: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar ul ul,
|
||||||
|
div.sphinxsidebar ul.want-points {
|
||||||
|
margin-left: 20px;
|
||||||
|
list-style: square;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar ul ul {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar form {
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar input {
|
||||||
|
border: 1px solid #98dbcc;
|
||||||
|
font-family: sans-serif;
|
||||||
|
font-size: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar #searchbox form.search {
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar #searchbox input[type="text"] {
|
||||||
|
float: left;
|
||||||
|
width: 80%;
|
||||||
|
padding: 0.25em;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar #searchbox input[type="submit"] {
|
||||||
|
float: left;
|
||||||
|
width: 20%;
|
||||||
|
border-left: none;
|
||||||
|
padding: 0.25em;
|
||||||
|
box-sizing: border-box;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
img {
|
||||||
|
border: 0;
|
||||||
|
max-width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- search page ----------------------------------------------------------- */
|
||||||
|
|
||||||
|
ul.search {
|
||||||
|
margin: 10px 0 0 20px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.search li {
|
||||||
|
padding: 5px 0 5px 20px;
|
||||||
|
background-image: url(file.png);
|
||||||
|
background-repeat: no-repeat;
|
||||||
|
background-position: 0 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.search li a {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.search li p.context {
|
||||||
|
color: #888;
|
||||||
|
margin: 2px 0 0 30px;
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
ul.keywordmatches li.goodmatch a {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- index page ------------------------------------------------------------ */
|
||||||
|
|
||||||
|
table.contentstable {
|
||||||
|
width: 90%;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.contentstable p.biglink {
|
||||||
|
line-height: 150%;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.biglink {
|
||||||
|
font-size: 1.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.linkdescr {
|
||||||
|
font-style: italic;
|
||||||
|
padding-top: 5px;
|
||||||
|
font-size: 90%;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- general index --------------------------------------------------------- */
|
||||||
|
|
||||||
|
table.indextable {
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.indextable td {
|
||||||
|
text-align: left;
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.indextable ul {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
list-style-type: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.indextable > tbody > tr > td > ul {
|
||||||
|
padding-left: 0em;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.indextable tr.pcap {
|
||||||
|
height: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.indextable tr.cap {
|
||||||
|
margin-top: 10px;
|
||||||
|
background-color: #f2f2f2;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.toggler {
|
||||||
|
margin-right: 3px;
|
||||||
|
margin-top: 3px;
|
||||||
|
cursor: pointer;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.modindex-jumpbox {
|
||||||
|
border-top: 1px solid #ddd;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
margin: 1em 0 1em 0;
|
||||||
|
padding: 0.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.genindex-jumpbox {
|
||||||
|
border-top: 1px solid #ddd;
|
||||||
|
border-bottom: 1px solid #ddd;
|
||||||
|
margin: 1em 0 1em 0;
|
||||||
|
padding: 0.4em;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- domain module index --------------------------------------------------- */
|
||||||
|
|
||||||
|
table.modindextable td {
|
||||||
|
padding: 2px;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- general body styles --------------------------------------------------- */
|
||||||
|
|
||||||
|
div.body {
|
||||||
|
min-width: 450px;
|
||||||
|
max-width: 800px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.body p, div.body dd, div.body li, div.body blockquote {
|
||||||
|
-moz-hyphens: auto;
|
||||||
|
-ms-hyphens: auto;
|
||||||
|
-webkit-hyphens: auto;
|
||||||
|
hyphens: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.headerlink {
|
||||||
|
visibility: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
a.brackets:before,
|
||||||
|
span.brackets > a:before{
|
||||||
|
content: "[";
|
||||||
|
}
|
||||||
|
|
||||||
|
a.brackets:after,
|
||||||
|
span.brackets > a:after {
|
||||||
|
content: "]";
|
||||||
|
}
|
||||||
|
|
||||||
|
h1:hover > a.headerlink,
|
||||||
|
h2:hover > a.headerlink,
|
||||||
|
h3:hover > a.headerlink,
|
||||||
|
h4:hover > a.headerlink,
|
||||||
|
h5:hover > a.headerlink,
|
||||||
|
h6:hover > a.headerlink,
|
||||||
|
dt:hover > a.headerlink,
|
||||||
|
caption:hover > a.headerlink,
|
||||||
|
p.caption:hover > a.headerlink,
|
||||||
|
div.code-block-caption:hover > a.headerlink {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.body p.caption {
|
||||||
|
text-align: inherit;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.body td {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.first {
|
||||||
|
margin-top: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.rubric {
|
||||||
|
margin-top: 30px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.align-left, figure.align-left, .figure.align-left, object.align-left {
|
||||||
|
clear: left;
|
||||||
|
float: left;
|
||||||
|
margin-right: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.align-right, figure.align-right, .figure.align-right, object.align-right {
|
||||||
|
clear: right;
|
||||||
|
float: right;
|
||||||
|
margin-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.align-center, figure.align-center, .figure.align-center, object.align-center {
|
||||||
|
display: block;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
img.align-default, figure.align-default, .figure.align-default {
|
||||||
|
display: block;
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-left {
|
||||||
|
text-align: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-center {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-default {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
.align-right {
|
||||||
|
text-align: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- sidebars -------------------------------------------------------------- */
|
||||||
|
|
||||||
|
div.sidebar,
|
||||||
|
aside.sidebar {
|
||||||
|
margin: 0 0 0.5em 1em;
|
||||||
|
border: 1px solid #ddb;
|
||||||
|
padding: 7px;
|
||||||
|
background-color: #ffe;
|
||||||
|
width: 40%;
|
||||||
|
float: right;
|
||||||
|
clear: right;
|
||||||
|
overflow-x: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.sidebar-title {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.admonition, div.topic, blockquote {
|
||||||
|
clear: left;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- topics ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
div.topic {
|
||||||
|
border: 1px solid #ccc;
|
||||||
|
padding: 7px;
|
||||||
|
margin: 10px 0 10px 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.topic-title {
|
||||||
|
font-size: 1.1em;
|
||||||
|
font-weight: bold;
|
||||||
|
margin-top: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- admonitions ----------------------------------------------------------- */
|
||||||
|
|
||||||
|
div.admonition {
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
padding: 7px;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.admonition dt {
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
p.admonition-title {
|
||||||
|
margin: 0px 10px 5px 0px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.body p.centered {
|
||||||
|
text-align: center;
|
||||||
|
margin-top: 25px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- content of sidebars/topics/admonitions -------------------------------- */
|
||||||
|
|
||||||
|
div.sidebar > :last-child,
|
||||||
|
aside.sidebar > :last-child,
|
||||||
|
div.topic > :last-child,
|
||||||
|
div.admonition > :last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sidebar::after,
|
||||||
|
aside.sidebar::after,
|
||||||
|
div.topic::after,
|
||||||
|
div.admonition::after,
|
||||||
|
blockquote::after {
|
||||||
|
display: block;
|
||||||
|
content: '';
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- tables ---------------------------------------------------------------- */
|
||||||
|
|
||||||
|
table.docutils {
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
border: 0;
|
||||||
|
border-collapse: collapse;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.align-center {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.align-default {
|
||||||
|
margin-left: auto;
|
||||||
|
margin-right: auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
table caption span.caption-number {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
table caption span.caption-text {
|
||||||
|
}
|
||||||
|
|
||||||
|
table.docutils td, table.docutils th {
|
||||||
|
padding: 1px 8px 1px 5px;
|
||||||
|
border-top: 0;
|
||||||
|
border-left: 0;
|
||||||
|
border-right: 0;
|
||||||
|
border-bottom: 1px solid #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.footnote td, table.footnote th {
|
||||||
|
border: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
th {
|
||||||
|
text-align: left;
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.citation {
|
||||||
|
border-left: solid 1px gray;
|
||||||
|
margin-left: 1px;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.citation td {
|
||||||
|
border-bottom: none;
|
||||||
|
}
|
||||||
|
|
||||||
|
th > :first-child,
|
||||||
|
td > :first-child {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
th > :last-child,
|
||||||
|
td > :last-child {
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- figures --------------------------------------------------------------- */
|
||||||
|
|
||||||
|
div.figure, figure {
|
||||||
|
margin: 0.5em;
|
||||||
|
padding: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.figure p.caption, figcaption {
|
||||||
|
padding: 0.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.figure p.caption span.caption-number,
|
||||||
|
figcaption span.caption-number {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.figure p.caption span.caption-text,
|
||||||
|
figcaption span.caption-text {
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- field list styles ----------------------------------------------------- */
|
||||||
|
|
||||||
|
table.field-list td, table.field-list th {
|
||||||
|
border: 0 !important;
|
||||||
|
}
|
||||||
|
|
||||||
|
.field-list ul {
|
||||||
|
margin: 0;
|
||||||
|
padding-left: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.field-list p {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.field-name {
|
||||||
|
-moz-hyphens: manual;
|
||||||
|
-ms-hyphens: manual;
|
||||||
|
-webkit-hyphens: manual;
|
||||||
|
hyphens: manual;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- hlist styles ---------------------------------------------------------- */
|
||||||
|
|
||||||
|
table.hlist {
|
||||||
|
margin: 1em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.hlist td {
|
||||||
|
vertical-align: top;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- object description styles --------------------------------------------- */
|
||||||
|
|
||||||
|
.sig {
|
||||||
|
font-family: 'Consolas', 'Menlo', 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', monospace;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig-name, code.descname {
|
||||||
|
background-color: transparent;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig-name {
|
||||||
|
font-size: 1.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
code.descname {
|
||||||
|
font-size: 1.2em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig-prename, code.descclassname {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.optional {
|
||||||
|
font-size: 1.3em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig-paren {
|
||||||
|
font-size: larger;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig-param.n {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* C++ specific styling */
|
||||||
|
|
||||||
|
.sig-inline.c-texpr,
|
||||||
|
.sig-inline.cpp-texpr {
|
||||||
|
font-family: unset;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig.c .k, .sig.c .kt,
|
||||||
|
.sig.cpp .k, .sig.cpp .kt {
|
||||||
|
color: #0033B3;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig.c .m,
|
||||||
|
.sig.cpp .m {
|
||||||
|
color: #1750EB;
|
||||||
|
}
|
||||||
|
|
||||||
|
.sig.c .s, .sig.c .sc,
|
||||||
|
.sig.cpp .s, .sig.cpp .sc {
|
||||||
|
color: #067D17;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* -- other body styles ----------------------------------------------------- */
|
||||||
|
|
||||||
|
ol.arabic {
|
||||||
|
list-style: decimal;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol.loweralpha {
|
||||||
|
list-style: lower-alpha;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol.upperalpha {
|
||||||
|
list-style: upper-alpha;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol.lowerroman {
|
||||||
|
list-style: lower-roman;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol.upperroman {
|
||||||
|
list-style: upper-roman;
|
||||||
|
}
|
||||||
|
|
||||||
|
:not(li) > ol > li:first-child > :first-child,
|
||||||
|
:not(li) > ul > li:first-child > :first-child {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
:not(li) > ol > li:last-child > :last-child,
|
||||||
|
:not(li) > ul > li:last-child > :last-child {
|
||||||
|
margin-bottom: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol.simple ol p,
|
||||||
|
ol.simple ul p,
|
||||||
|
ul.simple ol p,
|
||||||
|
ul.simple ul p {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol.simple > li:not(:first-child) > p,
|
||||||
|
ul.simple > li:not(:first-child) > p {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
ol.simple p,
|
||||||
|
ul.simple p {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.footnote > dt,
|
||||||
|
dl.citation > dt {
|
||||||
|
float: left;
|
||||||
|
margin-right: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.footnote > dd,
|
||||||
|
dl.citation > dd {
|
||||||
|
margin-bottom: 0em;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.footnote > dd:after,
|
||||||
|
dl.citation > dd:after {
|
||||||
|
content: "";
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.field-list {
|
||||||
|
display: grid;
|
||||||
|
grid-template-columns: fit-content(30%) auto;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.field-list > dt {
|
||||||
|
font-weight: bold;
|
||||||
|
word-break: break-word;
|
||||||
|
padding-left: 0.5em;
|
||||||
|
padding-right: 5px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.field-list > dt:after {
|
||||||
|
content: ":";
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.field-list > dd {
|
||||||
|
padding-left: 0.5em;
|
||||||
|
margin-top: 0em;
|
||||||
|
margin-left: 0em;
|
||||||
|
margin-bottom: 0em;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl {
|
||||||
|
margin-bottom: 15px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd > :first-child {
|
||||||
|
margin-top: 0px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd ul, dd table {
|
||||||
|
margin-bottom: 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dd {
|
||||||
|
margin-top: 3px;
|
||||||
|
margin-bottom: 10px;
|
||||||
|
margin-left: 30px;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl > dd:last-child,
|
||||||
|
dl > dd:last-child > :last-child {
|
||||||
|
margin-bottom: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
dt:target, span.highlighted {
|
||||||
|
background-color: #fbe54e;
|
||||||
|
}
|
||||||
|
|
||||||
|
rect.highlighted {
|
||||||
|
fill: #fbe54e;
|
||||||
|
}
|
||||||
|
|
||||||
|
dl.glossary dt {
|
||||||
|
font-weight: bold;
|
||||||
|
font-size: 1.1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.versionmodified {
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
.system-message {
|
||||||
|
background-color: #fda;
|
||||||
|
padding: 5px;
|
||||||
|
border: 3px solid red;
|
||||||
|
}
|
||||||
|
|
||||||
|
.footnote:target {
|
||||||
|
background-color: #ffa;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line-block {
|
||||||
|
display: block;
|
||||||
|
margin-top: 1em;
|
||||||
|
margin-bottom: 1em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.line-block .line-block {
|
||||||
|
margin-top: 0;
|
||||||
|
margin-bottom: 0;
|
||||||
|
margin-left: 1.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
.guilabel, .menuselection {
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
.accelerator {
|
||||||
|
text-decoration: underline;
|
||||||
|
}
|
||||||
|
|
||||||
|
.classifier {
|
||||||
|
font-style: oblique;
|
||||||
|
}
|
||||||
|
|
||||||
|
.classifier:before {
|
||||||
|
font-style: normal;
|
||||||
|
margin: 0 0.5em;
|
||||||
|
content: ":";
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
abbr, acronym {
|
||||||
|
border-bottom: dotted 1px;
|
||||||
|
cursor: help;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- code displays --------------------------------------------------------- */
|
||||||
|
|
||||||
|
pre {
|
||||||
|
overflow: auto;
|
||||||
|
overflow-y: hidden; /* fixes display issues on Chrome browsers */
|
||||||
|
}
|
||||||
|
|
||||||
|
pre, div[class*="highlight-"] {
|
||||||
|
clear: both;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.pre {
|
||||||
|
-moz-hyphens: none;
|
||||||
|
-ms-hyphens: none;
|
||||||
|
-webkit-hyphens: none;
|
||||||
|
hyphens: none;
|
||||||
|
white-space: nowrap;
|
||||||
|
}
|
||||||
|
|
||||||
|
div[class*="highlight-"] {
|
||||||
|
margin: 1em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
td.linenos pre {
|
||||||
|
border: 0;
|
||||||
|
background-color: transparent;
|
||||||
|
color: #aaa;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.highlighttable {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.highlighttable tbody {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.highlighttable tr {
|
||||||
|
display: flex;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.highlighttable td {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.highlighttable td.linenos {
|
||||||
|
padding-right: 0.5em;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.highlighttable td.code {
|
||||||
|
flex: 1;
|
||||||
|
overflow: hidden;
|
||||||
|
}
|
||||||
|
|
||||||
|
.highlight .hll {
|
||||||
|
display: block;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.highlight pre,
|
||||||
|
table.highlighttable pre {
|
||||||
|
margin: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-block-caption + div {
|
||||||
|
margin-top: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-block-caption {
|
||||||
|
margin-top: 1em;
|
||||||
|
padding: 2px 5px;
|
||||||
|
font-size: small;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-block-caption code {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
table.highlighttable td.linenos,
|
||||||
|
span.linenos,
|
||||||
|
div.highlight span.gp { /* gp: Generic.Prompt */
|
||||||
|
user-select: none;
|
||||||
|
-webkit-user-select: text; /* Safari fallback only */
|
||||||
|
-webkit-user-select: none; /* Chrome/Safari */
|
||||||
|
-moz-user-select: none; /* Firefox */
|
||||||
|
-ms-user-select: none; /* IE10+ */
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-block-caption span.caption-number {
|
||||||
|
padding: 0.1em 0.3em;
|
||||||
|
font-style: italic;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.code-block-caption span.caption-text {
|
||||||
|
}
|
||||||
|
|
||||||
|
div.literal-block-wrapper {
|
||||||
|
margin: 1em 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
code.xref, a code {
|
||||||
|
background-color: transparent;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
h1 code, h2 code, h3 code, h4 code, h5 code, h6 code {
|
||||||
|
background-color: transparent;
|
||||||
|
}
|
||||||
|
|
||||||
|
.viewcode-link {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
.viewcode-back {
|
||||||
|
float: right;
|
||||||
|
font-family: sans-serif;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.viewcode-block:target {
|
||||||
|
margin: -1px -10px;
|
||||||
|
padding: 0 10px;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- math display ---------------------------------------------------------- */
|
||||||
|
|
||||||
|
img.math {
|
||||||
|
vertical-align: middle;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.body div.math p {
|
||||||
|
text-align: center;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.eqno {
|
||||||
|
float: right;
|
||||||
|
}
|
||||||
|
|
||||||
|
span.eqno a.headerlink {
|
||||||
|
position: absolute;
|
||||||
|
z-index: 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.math:hover a.headerlink {
|
||||||
|
visibility: visible;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* -- printout stylesheet --------------------------------------------------- */
|
||||||
|
|
||||||
|
@media print {
|
||||||
|
div.document,
|
||||||
|
div.documentwrapper,
|
||||||
|
div.bodywrapper {
|
||||||
|
margin: 0 !important;
|
||||||
|
width: 100%;
|
||||||
|
}
|
||||||
|
|
||||||
|
div.sphinxsidebar,
|
||||||
|
div.related,
|
||||||
|
div.footer,
|
||||||
|
#top-link {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
}
|
1
docs/v0.8/_static/css/badge_only.css
Normal file
@ -0,0 +1 @@
|
|||||||
|
.fa:before{-webkit-font-smoothing:antialiased}.clearfix{*zoom:1}.clearfix:after,.clearfix:before{display:table;content:""}.clearfix:after{clear:both}@font-face{font-family:FontAwesome;font-style:normal;font-weight:400;src:url(fonts/fontawesome-webfont.eot?674f50d287a8c48dc19ba404d20fe713?#iefix) format("embedded-opentype"),url(fonts/fontawesome-webfont.woff2?af7ae505a9eed503f8b8e6982036873e) format("woff2"),url(fonts/fontawesome-webfont.woff?fee66e712a8a08eef5805a46892932ad) format("woff"),url(fonts/fontawesome-webfont.ttf?b06871f281fee6b241d60582ae9369b9) format("truetype"),url(fonts/fontawesome-webfont.svg?912ec66d7572ff821749319396470bde#FontAwesome) format("svg")}.fa:before{font-family:FontAwesome;font-style:normal;font-weight:400;line-height:1}.fa:before,a .fa{text-decoration:inherit}.fa:before,a .fa,li .fa{display:inline-block}li .fa-large:before{width:1.875em}ul.fas{list-style-type:none;margin-left:2em;text-indent:-.8em}ul.fas li .fa{width:.8em}ul.fas li .fa-large:before{vertical-align:baseline}.fa-book:before,.icon-book:before{content:"\f02d"}.fa-caret-down:before,.icon-caret-down:before{content:"\f0d7"}.fa-caret-up:before,.icon-caret-up:before{content:"\f0d8"}.fa-caret-left:before,.icon-caret-left:before{content:"\f0d9"}.fa-caret-right:before,.icon-caret-right:before{content:"\f0da"}.rst-versions{position:fixed;bottom:0;left:0;width:300px;color:#fcfcfc;background:#1f1d1d;font-family:Lato,proxima-nova,Helvetica Neue,Arial,sans-serif;z-index:400}.rst-versions a{color:#2980b9;text-decoration:none}.rst-versions .rst-badge-small{display:none}.rst-versions .rst-current-version{padding:12px;background-color:#272525;display:block;text-align:right;font-size:90%;cursor:pointer;color:#27ae60}.rst-versions .rst-current-version:after{clear:both;content:"";display:block}.rst-versions .rst-current-version .fa{color:#fcfcfc}.rst-versions .rst-current-version .fa-book,.rst-versions .rst-current-version .icon-book{float:left}.rst-versions .rst-current-version.rst-out-of-date{background-color:#e74c3c;color:#fff}.rst-versions .rst-current-version.rst-active-old-version{background-color:#f1c40f;color:#000}.rst-versions.shift-up{height:auto;max-height:100%;overflow-y:scroll}.rst-versions.shift-up .rst-other-versions{display:block}.rst-versions .rst-other-versions{font-size:90%;padding:12px;color:grey;display:none}.rst-versions .rst-other-versions hr{display:block;height:1px;border:0;margin:20px 0;padding:0;border-top:1px solid #413d3d}.rst-versions .rst-other-versions dd{display:inline-block;margin:0}.rst-versions .rst-other-versions dd a{display:inline-block;padding:6px;color:#fcfcfc}.rst-versions.rst-badge{width:auto;bottom:20px;right:20px;left:auto;border:none;max-width:300px;max-height:90%}.rst-versions.rst-badge .fa-book,.rst-versions.rst-badge .icon-book{float:none;line-height:30px}.rst-versions.rst-badge.shift-up .rst-current-version{text-align:right}.rst-versions.rst-badge.shift-up .rst-current-version .fa-book,.rst-versions.rst-badge.shift-up .rst-current-version .icon-book{float:left}.rst-versions.rst-badge>.rst-current-version{width:auto;height:30px;line-height:30px;padding:0 6px;display:block;text-align:center}@media screen and (max-width:768px){.rst-versions{width:85%;display:none}.rst-versions.shift{display:block}}
|
BIN
docs/v0.8/_static/css/fonts/Roboto-Slab-Bold.woff
Normal file
BIN
docs/v0.8/_static/css/fonts/Roboto-Slab-Bold.woff2
Normal file
BIN
docs/v0.8/_static/css/fonts/Roboto-Slab-Regular.woff
Normal file
BIN
docs/v0.8/_static/css/fonts/Roboto-Slab-Regular.woff2
Normal file
BIN
docs/v0.8/_static/css/fonts/fontawesome-webfont.eot
Normal file
2671
docs/v0.8/_static/css/fonts/fontawesome-webfont.svg
Normal file
After Width: | Height: | Size: 434 KiB |
BIN
docs/v0.8/_static/css/fonts/fontawesome-webfont.ttf
Normal file
BIN
docs/v0.8/_static/css/fonts/fontawesome-webfont.woff
Normal file
BIN
docs/v0.8/_static/css/fonts/fontawesome-webfont.woff2
Normal file
BIN
docs/v0.8/_static/css/fonts/lato-bold-italic.woff
Normal file
BIN
docs/v0.8/_static/css/fonts/lato-bold-italic.woff2
Normal file
BIN
docs/v0.8/_static/css/fonts/lato-bold.woff
Normal file
BIN
docs/v0.8/_static/css/fonts/lato-bold.woff2
Normal file
BIN
docs/v0.8/_static/css/fonts/lato-normal-italic.woff
Normal file
BIN
docs/v0.8/_static/css/fonts/lato-normal-italic.woff2
Normal file
BIN
docs/v0.8/_static/css/fonts/lato-normal.woff
Normal file
BIN
docs/v0.8/_static/css/fonts/lato-normal.woff2
Normal file
4
docs/v0.8/_static/css/theme.css
Normal file
326
docs/v0.8/_static/doctools.js
Normal file
@ -0,0 +1,326 @@
|
|||||||
|
/*
|
||||||
|
* doctools.js
|
||||||
|
* ~~~~~~~~~~~
|
||||||
|
*
|
||||||
|
* Sphinx JavaScript utilities for all documentation.
|
||||||
|
*
|
||||||
|
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
|
||||||
|
* :license: BSD, see LICENSE for details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* select a different prefix for underscore
|
||||||
|
*/
|
||||||
|
$u = _.noConflict();
|
||||||
|
|
||||||
|
/**
|
||||||
|
* make the code below compatible with browsers without
|
||||||
|
* an installed firebug like debugger
|
||||||
|
if (!window.console || !console.firebug) {
|
||||||
|
var names = ["log", "debug", "info", "warn", "error", "assert", "dir",
|
||||||
|
"dirxml", "group", "groupEnd", "time", "timeEnd", "count", "trace",
|
||||||
|
"profile", "profileEnd"];
|
||||||
|
window.console = {};
|
||||||
|
for (var i = 0; i < names.length; ++i)
|
||||||
|
window.console[names[i]] = function() {};
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* small helper function to urldecode strings
|
||||||
|
*
|
||||||
|
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/decodeURIComponent#Decoding_query_parameters_from_a_URL
|
||||||
|
*/
|
||||||
|
jQuery.urldecode = function(x) {
|
||||||
|
if (!x) {
|
||||||
|
return x
|
||||||
|
}
|
||||||
|
return decodeURIComponent(x.replace(/\+/g, ' '));
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* small helper function to urlencode strings
|
||||||
|
*/
|
||||||
|
jQuery.urlencode = encodeURIComponent;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This function returns the parsed url parameters of the
|
||||||
|
* current request. Multiple values per key are supported,
|
||||||
|
* it will always return arrays of strings for the value parts.
|
||||||
|
*/
|
||||||
|
jQuery.getQueryParameters = function(s) {
|
||||||
|
if (typeof s === 'undefined')
|
||||||
|
s = document.location.search;
|
||||||
|
var parts = s.substr(s.indexOf('?') + 1).split('&');
|
||||||
|
var result = {};
|
||||||
|
for (var i = 0; i < parts.length; i++) {
|
||||||
|
var tmp = parts[i].split('=', 2);
|
||||||
|
var key = jQuery.urldecode(tmp[0]);
|
||||||
|
var value = jQuery.urldecode(tmp[1]);
|
||||||
|
if (key in result)
|
||||||
|
result[key].push(value);
|
||||||
|
else
|
||||||
|
result[key] = [value];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* highlight a given string on a jquery object by wrapping it in
|
||||||
|
* span elements with the given class name.
|
||||||
|
*/
|
||||||
|
jQuery.fn.highlightText = function(text, className) {
|
||||||
|
function highlight(node, addItems) {
|
||||||
|
if (node.nodeType === 3) {
|
||||||
|
var val = node.nodeValue;
|
||||||
|
var pos = val.toLowerCase().indexOf(text);
|
||||||
|
if (pos >= 0 &&
|
||||||
|
!jQuery(node.parentNode).hasClass(className) &&
|
||||||
|
!jQuery(node.parentNode).hasClass("nohighlight")) {
|
||||||
|
var span;
|
||||||
|
var isInSVG = jQuery(node).closest("body, svg, foreignObject").is("svg");
|
||||||
|
if (isInSVG) {
|
||||||
|
span = document.createElementNS("http://www.w3.org/2000/svg", "tspan");
|
||||||
|
} else {
|
||||||
|
span = document.createElement("span");
|
||||||
|
span.className = className;
|
||||||
|
}
|
||||||
|
span.appendChild(document.createTextNode(val.substr(pos, text.length)));
|
||||||
|
node.parentNode.insertBefore(span, node.parentNode.insertBefore(
|
||||||
|
document.createTextNode(val.substr(pos + text.length)),
|
||||||
|
node.nextSibling));
|
||||||
|
node.nodeValue = val.substr(0, pos);
|
||||||
|
if (isInSVG) {
|
||||||
|
var rect = document.createElementNS("http://www.w3.org/2000/svg", "rect");
|
||||||
|
var bbox = node.parentElement.getBBox();
|
||||||
|
rect.x.baseVal.value = bbox.x;
|
||||||
|
rect.y.baseVal.value = bbox.y;
|
||||||
|
rect.width.baseVal.value = bbox.width;
|
||||||
|
rect.height.baseVal.value = bbox.height;
|
||||||
|
rect.setAttribute('class', className);
|
||||||
|
addItems.push({
|
||||||
|
"parent": node.parentNode,
|
||||||
|
"target": rect});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (!jQuery(node).is("button, select, textarea")) {
|
||||||
|
jQuery.each(node.childNodes, function() {
|
||||||
|
highlight(this, addItems);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var addItems = [];
|
||||||
|
var result = this.each(function() {
|
||||||
|
highlight(this, addItems);
|
||||||
|
});
|
||||||
|
for (var i = 0; i < addItems.length; ++i) {
|
||||||
|
jQuery(addItems[i].parent).before(addItems[i].target);
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
/*
|
||||||
|
* backward compatibility for jQuery.browser
|
||||||
|
* This will be supported until firefox bug is fixed.
|
||||||
|
*/
|
||||||
|
if (!jQuery.browser) {
|
||||||
|
jQuery.uaMatch = function(ua) {
|
||||||
|
ua = ua.toLowerCase();
|
||||||
|
|
||||||
|
var match = /(chrome)[ \/]([\w.]+)/.exec(ua) ||
|
||||||
|
/(webkit)[ \/]([\w.]+)/.exec(ua) ||
|
||||||
|
/(opera)(?:.*version|)[ \/]([\w.]+)/.exec(ua) ||
|
||||||
|
/(msie) ([\w.]+)/.exec(ua) ||
|
||||||
|
ua.indexOf("compatible") < 0 && /(mozilla)(?:.*? rv:([\w.]+)|)/.exec(ua) ||
|
||||||
|
[];
|
||||||
|
|
||||||
|
return {
|
||||||
|
browser: match[ 1 ] || "",
|
||||||
|
version: match[ 2 ] || "0"
|
||||||
|
};
|
||||||
|
};
|
||||||
|
jQuery.browser = {};
|
||||||
|
jQuery.browser[jQuery.uaMatch(navigator.userAgent).browser] = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Small JavaScript module for the documentation.
|
||||||
|
*/
|
||||||
|
var Documentation = {
|
||||||
|
|
||||||
|
init : function() {
|
||||||
|
this.fixFirefoxAnchorBug();
|
||||||
|
this.highlightSearchWords();
|
||||||
|
this.initIndexTable();
|
||||||
|
if (DOCUMENTATION_OPTIONS.NAVIGATION_WITH_KEYS) {
|
||||||
|
this.initOnKeyListeners();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* i18n support
|
||||||
|
*/
|
||||||
|
TRANSLATIONS : {},
|
||||||
|
PLURAL_EXPR : function(n) { return n === 1 ? 0 : 1; },
|
||||||
|
LOCALE : 'unknown',
|
||||||
|
|
||||||
|
// gettext and ngettext don't access this so that the functions
|
||||||
|
// can safely bound to a different name (_ = Documentation.gettext)
|
||||||
|
gettext : function(string) {
|
||||||
|
var translated = Documentation.TRANSLATIONS[string];
|
||||||
|
if (typeof translated === 'undefined')
|
||||||
|
return string;
|
||||||
|
return (typeof translated === 'string') ? translated : translated[0];
|
||||||
|
},
|
||||||
|
|
||||||
|
ngettext : function(singular, plural, n) {
|
||||||
|
var translated = Documentation.TRANSLATIONS[singular];
|
||||||
|
if (typeof translated === 'undefined')
|
||||||
|
return (n == 1) ? singular : plural;
|
||||||
|
return translated[Documentation.PLURALEXPR(n)];
|
||||||
|
},
|
||||||
|
|
||||||
|
addTranslations : function(catalog) {
|
||||||
|
for (var key in catalog.messages)
|
||||||
|
this.TRANSLATIONS[key] = catalog.messages[key];
|
||||||
|
this.PLURAL_EXPR = new Function('n', 'return +(' + catalog.plural_expr + ')');
|
||||||
|
this.LOCALE = catalog.locale;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* add context elements like header anchor links
|
||||||
|
*/
|
||||||
|
addContextElements : function() {
|
||||||
|
$('div[id] > :header:first').each(function() {
|
||||||
|
$('<a class="headerlink">\u00B6</a>').
|
||||||
|
attr('href', '#' + this.id).
|
||||||
|
attr('title', _('Permalink to this headline')).
|
||||||
|
appendTo(this);
|
||||||
|
});
|
||||||
|
$('dt[id]').each(function() {
|
||||||
|
$('<a class="headerlink">\u00B6</a>').
|
||||||
|
attr('href', '#' + this.id).
|
||||||
|
attr('title', _('Permalink to this definition')).
|
||||||
|
appendTo(this);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* workaround a firefox stupidity
|
||||||
|
* see: https://bugzilla.mozilla.org/show_bug.cgi?id=645075
|
||||||
|
*/
|
||||||
|
fixFirefoxAnchorBug : function() {
|
||||||
|
if (document.location.hash && $.browser.mozilla)
|
||||||
|
window.setTimeout(function() {
|
||||||
|
document.location.href += '';
|
||||||
|
}, 10);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* highlight the search words provided in the url in the text
|
||||||
|
*/
|
||||||
|
highlightSearchWords : function() {
|
||||||
|
var params = $.getQueryParameters();
|
||||||
|
var terms = (params.highlight) ? params.highlight[0].split(/\s+/) : [];
|
||||||
|
if (terms.length) {
|
||||||
|
var body = $('div.body');
|
||||||
|
if (!body.length) {
|
||||||
|
body = $('body');
|
||||||
|
}
|
||||||
|
window.setTimeout(function() {
|
||||||
|
$.each(terms, function() {
|
||||||
|
body.highlightText(this.toLowerCase(), 'highlighted');
|
||||||
|
});
|
||||||
|
}, 10);
|
||||||
|
$('<p class="highlight-link"><a href="javascript:Documentation.' +
|
||||||
|
'hideSearchWords()">' + _('Hide Search Matches') + '</a></p>')
|
||||||
|
.appendTo($('#searchbox'));
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* init the domain index toggle buttons
|
||||||
|
*/
|
||||||
|
initIndexTable : function() {
|
||||||
|
var togglers = $('img.toggler').click(function() {
|
||||||
|
var src = $(this).attr('src');
|
||||||
|
var idnum = $(this).attr('id').substr(7);
|
||||||
|
$('tr.cg-' + idnum).toggle();
|
||||||
|
if (src.substr(-9) === 'minus.png')
|
||||||
|
$(this).attr('src', src.substr(0, src.length-9) + 'plus.png');
|
||||||
|
else
|
||||||
|
$(this).attr('src', src.substr(0, src.length-8) + 'minus.png');
|
||||||
|
}).css('display', '');
|
||||||
|
if (DOCUMENTATION_OPTIONS.COLLAPSE_INDEX) {
|
||||||
|
togglers.click();
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* helper function to hide the search marks again
|
||||||
|
*/
|
||||||
|
hideSearchWords : function() {
|
||||||
|
$('#searchbox .highlight-link').fadeOut(300);
|
||||||
|
$('span.highlighted').removeClass('highlighted');
|
||||||
|
var url = new URL(window.location);
|
||||||
|
url.searchParams.delete('highlight');
|
||||||
|
window.history.replaceState({}, '', url);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* make the url absolute
|
||||||
|
*/
|
||||||
|
makeURL : function(relativeURL) {
|
||||||
|
return DOCUMENTATION_OPTIONS.URL_ROOT + '/' + relativeURL;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* get the current relative url
|
||||||
|
*/
|
||||||
|
getCurrentURL : function() {
|
||||||
|
var path = document.location.pathname;
|
||||||
|
var parts = path.split(/\//);
|
||||||
|
$.each(DOCUMENTATION_OPTIONS.URL_ROOT.split(/\//), function() {
|
||||||
|
if (this === '..')
|
||||||
|
parts.pop();
|
||||||
|
});
|
||||||
|
var url = parts.join('/');
|
||||||
|
return path.substring(url.lastIndexOf('/') + 1, path.length - 1);
|
||||||
|
},
|
||||||
|
|
||||||
|
initOnKeyListeners: function() {
|
||||||
|
$(document).keydown(function(event) {
|
||||||
|
var activeElementType = document.activeElement.tagName;
|
||||||
|
// don't navigate when in search box, textarea, dropdown or button
|
||||||
|
if (activeElementType !== 'TEXTAREA' && activeElementType !== 'INPUT' && activeElementType !== 'SELECT'
|
||||||
|
&& activeElementType !== 'BUTTON' && !event.altKey && !event.ctrlKey && !event.metaKey
|
||||||
|
&& !event.shiftKey) {
|
||||||
|
switch (event.keyCode) {
|
||||||
|
case 37: // left
|
||||||
|
var prevHref = $('link[rel="prev"]').prop('href');
|
||||||
|
if (prevHref) {
|
||||||
|
window.location.href = prevHref;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case 39: // right
|
||||||
|
var nextHref = $('link[rel="next"]').prop('href');
|
||||||
|
if (nextHref) {
|
||||||
|
window.location.href = nextHref;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// quick alias for translations
|
||||||
|
_ = Documentation.gettext;
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
Documentation.init();
|
||||||
|
});
|
12
docs/v0.8/_static/documentation_options.js
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
var DOCUMENTATION_OPTIONS = {
|
||||||
|
URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'),
|
||||||
|
VERSION: '0.8.0',
|
||||||
|
LANGUAGE: 'None',
|
||||||
|
COLLAPSE_INDEX: false,
|
||||||
|
BUILDER: 'html',
|
||||||
|
FILE_SUFFIX: '.html',
|
||||||
|
LINK_SUFFIX: '.html',
|
||||||
|
HAS_SOURCE: true,
|
||||||
|
SOURCELINK_SUFFIX: '.txt',
|
||||||
|
NAVIGATION_WITH_KEYS: false
|
||||||
|
};
|
BIN
docs/v0.8/_static/file.png
Normal file
After Width: | Height: | Size: 286 B |
10598
docs/v0.8/_static/jquery-3.4.1.js
vendored
Normal file
10872
docs/v0.8/_static/jquery-3.5.1.js
vendored
Normal file
2
docs/v0.8/_static/jquery.js
vendored
Normal file
1
docs/v0.8/_static/js/badge_only.js
Normal file
@ -0,0 +1 @@
|
|||||||
|
!function(e){var t={};function r(n){if(t[n])return t[n].exports;var o=t[n]={i:n,l:!1,exports:{}};return e[n].call(o.exports,o,o.exports,r),o.l=!0,o.exports}r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var o in e)r.d(n,o,function(t){return e[t]}.bind(null,o));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=4)}({4:function(e,t,r){}});
|
4
docs/v0.8/_static/js/html5shiv-printshiv.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/**
|
||||||
|
* @preserve HTML5 Shiv 3.7.3-pre | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
||||||
|
*/
|
||||||
|
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=y.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=y.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),y.elements=c+" "+a,j(b)}function f(a){var b=x[a[v]];return b||(b={},w++,a[v]=w,x[w]=b),b}function g(a,c,d){if(c||(c=b),q)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():u.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||t.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),q)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return y.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(y,b.frag)}function j(a){a||(a=b);var d=f(a);return!y.shivCSS||p||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),q||i(a,d),a}function k(a){for(var b,c=a.getElementsByTagName("*"),e=c.length,f=RegExp("^(?:"+d().join("|")+")$","i"),g=[];e--;)b=c[e],f.test(b.nodeName)&&g.push(b.applyElement(l(b)));return g}function l(a){for(var b,c=a.attributes,d=c.length,e=a.ownerDocument.createElement(A+":"+a.nodeName);d--;)b=c[d],b.specified&&e.setAttribute(b.nodeName,b.nodeValue);return e.style.cssText=a.style.cssText,e}function m(a){for(var b,c=a.split("{"),e=c.length,f=RegExp("(^|[\\s,>+~])("+d().join("|")+")(?=[[\\s,>+~#.:]|$)","gi"),g="$1"+A+"\\:$2";e--;)b=c[e]=c[e].split("}"),b[b.length-1]=b[b.length-1].replace(f,g),c[e]=b.join("}");return c.join("{")}function n(a){for(var b=a.length;b--;)a[b].removeNode()}function o(a){function b(){clearTimeout(g._removeSheetTimer),d&&d.removeNode(!0),d=null}var d,e,g=f(a),h=a.namespaces,i=a.parentWindow;return!B||a.printShived?a:("undefined"==typeof h[A]&&h.add(A),i.attachEvent("onbeforeprint",function(){b();for(var f,g,h,i=a.styleSheets,j=[],l=i.length,n=Array(l);l--;)n[l]=i[l];for(;h=n.pop();)if(!h.disabled&&z.test(h.media)){try{f=h.imports,g=f.length}catch(o){g=0}for(l=0;g>l;l++)n.push(f[l]);try{j.push(h.cssText)}catch(o){}}j=m(j.reverse().join("")),e=k(a),d=c(a,j)}),i.attachEvent("onafterprint",function(){n(e),clearTimeout(g._removeSheetTimer),g._removeSheetTimer=setTimeout(b,500)}),a.printShived=!0,a)}var p,q,r="3.7.3",s=a.html5||{},t=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,u=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,v="_html5shiv",w=0,x={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",p="hidden"in a,q=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){p=!0,q=!0}}();var y={elements:s.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:r,shivCSS:s.shivCSS!==!1,supportsUnknownElements:q,shivMethods:s.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=y,j(b);var z=/^$|\b(?:all|print)\b/,A="html5shiv",B=!q&&function(){var c=b.documentElement;return!("undefined"==typeof b.namespaces||"undefined"==typeof b.parentWindow||"undefined"==typeof c.applyElement||"undefined"==typeof c.removeNode||"undefined"==typeof a.attachEvent)}();y.type+=" print",y.shivPrint=o,o(b),"object"==typeof module&&module.exports&&(module.exports=y)}("undefined"!=typeof window?window:this,document);
|
4
docs/v0.8/_static/js/html5shiv.min.js
vendored
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
/**
|
||||||
|
* @preserve HTML5 Shiv 3.7.3 | @afarkas @jdalton @jon_neal @rem | MIT/GPL2 Licensed
|
||||||
|
*/
|
||||||
|
!function(a,b){function c(a,b){var c=a.createElement("p"),d=a.getElementsByTagName("head")[0]||a.documentElement;return c.innerHTML="x<style>"+b+"</style>",d.insertBefore(c.lastChild,d.firstChild)}function d(){var a=t.elements;return"string"==typeof a?a.split(" "):a}function e(a,b){var c=t.elements;"string"!=typeof c&&(c=c.join(" ")),"string"!=typeof a&&(a=a.join(" ")),t.elements=c+" "+a,j(b)}function f(a){var b=s[a[q]];return b||(b={},r++,a[q]=r,s[r]=b),b}function g(a,c,d){if(c||(c=b),l)return c.createElement(a);d||(d=f(c));var e;return e=d.cache[a]?d.cache[a].cloneNode():p.test(a)?(d.cache[a]=d.createElem(a)).cloneNode():d.createElem(a),!e.canHaveChildren||o.test(a)||e.tagUrn?e:d.frag.appendChild(e)}function h(a,c){if(a||(a=b),l)return a.createDocumentFragment();c=c||f(a);for(var e=c.frag.cloneNode(),g=0,h=d(),i=h.length;i>g;g++)e.createElement(h[g]);return e}function i(a,b){b.cache||(b.cache={},b.createElem=a.createElement,b.createFrag=a.createDocumentFragment,b.frag=b.createFrag()),a.createElement=function(c){return t.shivMethods?g(c,a,b):b.createElem(c)},a.createDocumentFragment=Function("h,f","return function(){var n=f.cloneNode(),c=n.createElement;h.shivMethods&&("+d().join().replace(/[\w\-:]+/g,function(a){return b.createElem(a),b.frag.createElement(a),'c("'+a+'")'})+");return n}")(t,b.frag)}function j(a){a||(a=b);var d=f(a);return!t.shivCSS||k||d.hasCSS||(d.hasCSS=!!c(a,"article,aside,dialog,figcaption,figure,footer,header,hgroup,main,nav,section{display:block}mark{background:#FF0;color:#000}template{display:none}")),l||i(a,d),a}var k,l,m="3.7.3-pre",n=a.html5||{},o=/^<|^(?:button|map|select|textarea|object|iframe|option|optgroup)$/i,p=/^(?:a|b|code|div|fieldset|h1|h2|h3|h4|h5|h6|i|label|li|ol|p|q|span|strong|style|table|tbody|td|th|tr|ul)$/i,q="_html5shiv",r=0,s={};!function(){try{var a=b.createElement("a");a.innerHTML="<xyz></xyz>",k="hidden"in a,l=1==a.childNodes.length||function(){b.createElement("a");var a=b.createDocumentFragment();return"undefined"==typeof a.cloneNode||"undefined"==typeof a.createDocumentFragment||"undefined"==typeof a.createElement}()}catch(c){k=!0,l=!0}}();var t={elements:n.elements||"abbr article aside audio bdi canvas data datalist details dialog figcaption figure footer header hgroup main mark meter nav output picture progress section summary template time video",version:m,shivCSS:n.shivCSS!==!1,supportsUnknownElements:l,shivMethods:n.shivMethods!==!1,type:"default",shivDocument:j,createElement:g,createDocumentFragment:h,addElements:e};a.html5=t,j(b),"object"==typeof module&&module.exports&&(module.exports=t)}("undefined"!=typeof window?window:this,document);
|
1
docs/v0.8/_static/js/theme.js
Normal file
297
docs/v0.8/_static/language_data.js
Normal file
@ -0,0 +1,297 @@
|
|||||||
|
/*
|
||||||
|
* language_data.js
|
||||||
|
* ~~~~~~~~~~~~~~~~
|
||||||
|
*
|
||||||
|
* This script contains the language-specific data used by searchtools.js,
|
||||||
|
* namely the list of stopwords, stemmer, scorer and splitter.
|
||||||
|
*
|
||||||
|
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
|
||||||
|
* :license: BSD, see LICENSE for details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
var stopwords = ["a","and","are","as","at","be","but","by","for","if","in","into","is","it","near","no","not","of","on","or","such","that","the","their","then","there","these","they","this","to","was","will","with"];
|
||||||
|
|
||||||
|
|
||||||
|
/* Non-minified version is copied as a separate JS file, is available */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Porter Stemmer
|
||||||
|
*/
|
||||||
|
var Stemmer = function() {
|
||||||
|
|
||||||
|
var step2list = {
|
||||||
|
ational: 'ate',
|
||||||
|
tional: 'tion',
|
||||||
|
enci: 'ence',
|
||||||
|
anci: 'ance',
|
||||||
|
izer: 'ize',
|
||||||
|
bli: 'ble',
|
||||||
|
alli: 'al',
|
||||||
|
entli: 'ent',
|
||||||
|
eli: 'e',
|
||||||
|
ousli: 'ous',
|
||||||
|
ization: 'ize',
|
||||||
|
ation: 'ate',
|
||||||
|
ator: 'ate',
|
||||||
|
alism: 'al',
|
||||||
|
iveness: 'ive',
|
||||||
|
fulness: 'ful',
|
||||||
|
ousness: 'ous',
|
||||||
|
aliti: 'al',
|
||||||
|
iviti: 'ive',
|
||||||
|
biliti: 'ble',
|
||||||
|
logi: 'log'
|
||||||
|
};
|
||||||
|
|
||||||
|
var step3list = {
|
||||||
|
icate: 'ic',
|
||||||
|
ative: '',
|
||||||
|
alize: 'al',
|
||||||
|
iciti: 'ic',
|
||||||
|
ical: 'ic',
|
||||||
|
ful: '',
|
||||||
|
ness: ''
|
||||||
|
};
|
||||||
|
|
||||||
|
var c = "[^aeiou]"; // consonant
|
||||||
|
var v = "[aeiouy]"; // vowel
|
||||||
|
var C = c + "[^aeiouy]*"; // consonant sequence
|
||||||
|
var V = v + "[aeiou]*"; // vowel sequence
|
||||||
|
|
||||||
|
var mgr0 = "^(" + C + ")?" + V + C; // [C]VC... is m>0
|
||||||
|
var meq1 = "^(" + C + ")?" + V + C + "(" + V + ")?$"; // [C]VC[V] is m=1
|
||||||
|
var mgr1 = "^(" + C + ")?" + V + C + V + C; // [C]VCVC... is m>1
|
||||||
|
var s_v = "^(" + C + ")?" + v; // vowel in stem
|
||||||
|
|
||||||
|
this.stemWord = function (w) {
|
||||||
|
var stem;
|
||||||
|
var suffix;
|
||||||
|
var firstch;
|
||||||
|
var origword = w;
|
||||||
|
|
||||||
|
if (w.length < 3)
|
||||||
|
return w;
|
||||||
|
|
||||||
|
var re;
|
||||||
|
var re2;
|
||||||
|
var re3;
|
||||||
|
var re4;
|
||||||
|
|
||||||
|
firstch = w.substr(0,1);
|
||||||
|
if (firstch == "y")
|
||||||
|
w = firstch.toUpperCase() + w.substr(1);
|
||||||
|
|
||||||
|
// Step 1a
|
||||||
|
re = /^(.+?)(ss|i)es$/;
|
||||||
|
re2 = /^(.+?)([^s])s$/;
|
||||||
|
|
||||||
|
if (re.test(w))
|
||||||
|
w = w.replace(re,"$1$2");
|
||||||
|
else if (re2.test(w))
|
||||||
|
w = w.replace(re2,"$1$2");
|
||||||
|
|
||||||
|
// Step 1b
|
||||||
|
re = /^(.+?)eed$/;
|
||||||
|
re2 = /^(.+?)(ed|ing)$/;
|
||||||
|
if (re.test(w)) {
|
||||||
|
var fp = re.exec(w);
|
||||||
|
re = new RegExp(mgr0);
|
||||||
|
if (re.test(fp[1])) {
|
||||||
|
re = /.$/;
|
||||||
|
w = w.replace(re,"");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (re2.test(w)) {
|
||||||
|
var fp = re2.exec(w);
|
||||||
|
stem = fp[1];
|
||||||
|
re2 = new RegExp(s_v);
|
||||||
|
if (re2.test(stem)) {
|
||||||
|
w = stem;
|
||||||
|
re2 = /(at|bl|iz)$/;
|
||||||
|
re3 = new RegExp("([^aeiouylsz])\\1$");
|
||||||
|
re4 = new RegExp("^" + C + v + "[^aeiouwxy]$");
|
||||||
|
if (re2.test(w))
|
||||||
|
w = w + "e";
|
||||||
|
else if (re3.test(w)) {
|
||||||
|
re = /.$/;
|
||||||
|
w = w.replace(re,"");
|
||||||
|
}
|
||||||
|
else if (re4.test(w))
|
||||||
|
w = w + "e";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 1c
|
||||||
|
re = /^(.+?)y$/;
|
||||||
|
if (re.test(w)) {
|
||||||
|
var fp = re.exec(w);
|
||||||
|
stem = fp[1];
|
||||||
|
re = new RegExp(s_v);
|
||||||
|
if (re.test(stem))
|
||||||
|
w = stem + "i";
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 2
|
||||||
|
re = /^(.+?)(ational|tional|enci|anci|izer|bli|alli|entli|eli|ousli|ization|ation|ator|alism|iveness|fulness|ousness|aliti|iviti|biliti|logi)$/;
|
||||||
|
if (re.test(w)) {
|
||||||
|
var fp = re.exec(w);
|
||||||
|
stem = fp[1];
|
||||||
|
suffix = fp[2];
|
||||||
|
re = new RegExp(mgr0);
|
||||||
|
if (re.test(stem))
|
||||||
|
w = stem + step2list[suffix];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 3
|
||||||
|
re = /^(.+?)(icate|ative|alize|iciti|ical|ful|ness)$/;
|
||||||
|
if (re.test(w)) {
|
||||||
|
var fp = re.exec(w);
|
||||||
|
stem = fp[1];
|
||||||
|
suffix = fp[2];
|
||||||
|
re = new RegExp(mgr0);
|
||||||
|
if (re.test(stem))
|
||||||
|
w = stem + step3list[suffix];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 4
|
||||||
|
re = /^(.+?)(al|ance|ence|er|ic|able|ible|ant|ement|ment|ent|ou|ism|ate|iti|ous|ive|ize)$/;
|
||||||
|
re2 = /^(.+?)(s|t)(ion)$/;
|
||||||
|
if (re.test(w)) {
|
||||||
|
var fp = re.exec(w);
|
||||||
|
stem = fp[1];
|
||||||
|
re = new RegExp(mgr1);
|
||||||
|
if (re.test(stem))
|
||||||
|
w = stem;
|
||||||
|
}
|
||||||
|
else if (re2.test(w)) {
|
||||||
|
var fp = re2.exec(w);
|
||||||
|
stem = fp[1] + fp[2];
|
||||||
|
re2 = new RegExp(mgr1);
|
||||||
|
if (re2.test(stem))
|
||||||
|
w = stem;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Step 5
|
||||||
|
re = /^(.+?)e$/;
|
||||||
|
if (re.test(w)) {
|
||||||
|
var fp = re.exec(w);
|
||||||
|
stem = fp[1];
|
||||||
|
re = new RegExp(mgr1);
|
||||||
|
re2 = new RegExp(meq1);
|
||||||
|
re3 = new RegExp("^" + C + v + "[^aeiouwxy]$");
|
||||||
|
if (re.test(stem) || (re2.test(stem) && !(re3.test(stem))))
|
||||||
|
w = stem;
|
||||||
|
}
|
||||||
|
re = /ll$/;
|
||||||
|
re2 = new RegExp(mgr1);
|
||||||
|
if (re.test(w) && re2.test(w)) {
|
||||||
|
re = /.$/;
|
||||||
|
w = w.replace(re,"");
|
||||||
|
}
|
||||||
|
|
||||||
|
// and turn initial Y back to y
|
||||||
|
if (firstch == "y")
|
||||||
|
w = firstch.toLowerCase() + w.substr(1);
|
||||||
|
return w;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
var splitChars = (function() {
|
||||||
|
var result = {};
|
||||||
|
var singles = [96, 180, 187, 191, 215, 247, 749, 885, 903, 907, 909, 930, 1014, 1648,
|
||||||
|
1748, 1809, 2416, 2473, 2481, 2526, 2601, 2609, 2612, 2615, 2653, 2702,
|
||||||
|
2706, 2729, 2737, 2740, 2857, 2865, 2868, 2910, 2928, 2948, 2961, 2971,
|
||||||
|
2973, 3085, 3089, 3113, 3124, 3213, 3217, 3241, 3252, 3295, 3341, 3345,
|
||||||
|
3369, 3506, 3516, 3633, 3715, 3721, 3736, 3744, 3748, 3750, 3756, 3761,
|
||||||
|
3781, 3912, 4239, 4347, 4681, 4695, 4697, 4745, 4785, 4799, 4801, 4823,
|
||||||
|
4881, 5760, 5901, 5997, 6313, 7405, 8024, 8026, 8028, 8030, 8117, 8125,
|
||||||
|
8133, 8181, 8468, 8485, 8487, 8489, 8494, 8527, 11311, 11359, 11687, 11695,
|
||||||
|
11703, 11711, 11719, 11727, 11735, 12448, 12539, 43010, 43014, 43019, 43587,
|
||||||
|
43696, 43713, 64286, 64297, 64311, 64317, 64319, 64322, 64325, 65141];
|
||||||
|
var i, j, start, end;
|
||||||
|
for (i = 0; i < singles.length; i++) {
|
||||||
|
result[singles[i]] = true;
|
||||||
|
}
|
||||||
|
var ranges = [[0, 47], [58, 64], [91, 94], [123, 169], [171, 177], [182, 184], [706, 709],
|
||||||
|
[722, 735], [741, 747], [751, 879], [888, 889], [894, 901], [1154, 1161],
|
||||||
|
[1318, 1328], [1367, 1368], [1370, 1376], [1416, 1487], [1515, 1519], [1523, 1568],
|
||||||
|
[1611, 1631], [1642, 1645], [1750, 1764], [1767, 1773], [1789, 1790], [1792, 1807],
|
||||||
|
[1840, 1868], [1958, 1968], [1970, 1983], [2027, 2035], [2038, 2041], [2043, 2047],
|
||||||
|
[2070, 2073], [2075, 2083], [2085, 2087], [2089, 2307], [2362, 2364], [2366, 2383],
|
||||||
|
[2385, 2391], [2402, 2405], [2419, 2424], [2432, 2436], [2445, 2446], [2449, 2450],
|
||||||
|
[2483, 2485], [2490, 2492], [2494, 2509], [2511, 2523], [2530, 2533], [2546, 2547],
|
||||||
|
[2554, 2564], [2571, 2574], [2577, 2578], [2618, 2648], [2655, 2661], [2672, 2673],
|
||||||
|
[2677, 2692], [2746, 2748], [2750, 2767], [2769, 2783], [2786, 2789], [2800, 2820],
|
||||||
|
[2829, 2830], [2833, 2834], [2874, 2876], [2878, 2907], [2914, 2917], [2930, 2946],
|
||||||
|
[2955, 2957], [2966, 2968], [2976, 2978], [2981, 2983], [2987, 2989], [3002, 3023],
|
||||||
|
[3025, 3045], [3059, 3076], [3130, 3132], [3134, 3159], [3162, 3167], [3170, 3173],
|
||||||
|
[3184, 3191], [3199, 3204], [3258, 3260], [3262, 3293], [3298, 3301], [3312, 3332],
|
||||||
|
[3386, 3388], [3390, 3423], [3426, 3429], [3446, 3449], [3456, 3460], [3479, 3481],
|
||||||
|
[3518, 3519], [3527, 3584], [3636, 3647], [3655, 3663], [3674, 3712], [3717, 3718],
|
||||||
|
[3723, 3724], [3726, 3731], [3752, 3753], [3764, 3772], [3774, 3775], [3783, 3791],
|
||||||
|
[3802, 3803], [3806, 3839], [3841, 3871], [3892, 3903], [3949, 3975], [3980, 4095],
|
||||||
|
[4139, 4158], [4170, 4175], [4182, 4185], [4190, 4192], [4194, 4196], [4199, 4205],
|
||||||
|
[4209, 4212], [4226, 4237], [4250, 4255], [4294, 4303], [4349, 4351], [4686, 4687],
|
||||||
|
[4702, 4703], [4750, 4751], [4790, 4791], [4806, 4807], [4886, 4887], [4955, 4968],
|
||||||
|
[4989, 4991], [5008, 5023], [5109, 5120], [5741, 5742], [5787, 5791], [5867, 5869],
|
||||||
|
[5873, 5887], [5906, 5919], [5938, 5951], [5970, 5983], [6001, 6015], [6068, 6102],
|
||||||
|
[6104, 6107], [6109, 6111], [6122, 6127], [6138, 6159], [6170, 6175], [6264, 6271],
|
||||||
|
[6315, 6319], [6390, 6399], [6429, 6469], [6510, 6511], [6517, 6527], [6572, 6592],
|
||||||
|
[6600, 6607], [6619, 6655], [6679, 6687], [6741, 6783], [6794, 6799], [6810, 6822],
|
||||||
|
[6824, 6916], [6964, 6980], [6988, 6991], [7002, 7042], [7073, 7085], [7098, 7167],
|
||||||
|
[7204, 7231], [7242, 7244], [7294, 7400], [7410, 7423], [7616, 7679], [7958, 7959],
|
||||||
|
[7966, 7967], [8006, 8007], [8014, 8015], [8062, 8063], [8127, 8129], [8141, 8143],
|
||||||
|
[8148, 8149], [8156, 8159], [8173, 8177], [8189, 8303], [8306, 8307], [8314, 8318],
|
||||||
|
[8330, 8335], [8341, 8449], [8451, 8454], [8456, 8457], [8470, 8472], [8478, 8483],
|
||||||
|
[8506, 8507], [8512, 8516], [8522, 8525], [8586, 9311], [9372, 9449], [9472, 10101],
|
||||||
|
[10132, 11263], [11493, 11498], [11503, 11516], [11518, 11519], [11558, 11567],
|
||||||
|
[11622, 11630], [11632, 11647], [11671, 11679], [11743, 11822], [11824, 12292],
|
||||||
|
[12296, 12320], [12330, 12336], [12342, 12343], [12349, 12352], [12439, 12444],
|
||||||
|
[12544, 12548], [12590, 12592], [12687, 12689], [12694, 12703], [12728, 12783],
|
||||||
|
[12800, 12831], [12842, 12880], [12896, 12927], [12938, 12976], [12992, 13311],
|
||||||
|
[19894, 19967], [40908, 40959], [42125, 42191], [42238, 42239], [42509, 42511],
|
||||||
|
[42540, 42559], [42592, 42593], [42607, 42622], [42648, 42655], [42736, 42774],
|
||||||
|
[42784, 42785], [42889, 42890], [42893, 43002], [43043, 43055], [43062, 43071],
|
||||||
|
[43124, 43137], [43188, 43215], [43226, 43249], [43256, 43258], [43260, 43263],
|
||||||
|
[43302, 43311], [43335, 43359], [43389, 43395], [43443, 43470], [43482, 43519],
|
||||||
|
[43561, 43583], [43596, 43599], [43610, 43615], [43639, 43641], [43643, 43647],
|
||||||
|
[43698, 43700], [43703, 43704], [43710, 43711], [43715, 43738], [43742, 43967],
|
||||||
|
[44003, 44015], [44026, 44031], [55204, 55215], [55239, 55242], [55292, 55295],
|
||||||
|
[57344, 63743], [64046, 64047], [64110, 64111], [64218, 64255], [64263, 64274],
|
||||||
|
[64280, 64284], [64434, 64466], [64830, 64847], [64912, 64913], [64968, 65007],
|
||||||
|
[65020, 65135], [65277, 65295], [65306, 65312], [65339, 65344], [65371, 65381],
|
||||||
|
[65471, 65473], [65480, 65481], [65488, 65489], [65496, 65497]];
|
||||||
|
for (i = 0; i < ranges.length; i++) {
|
||||||
|
start = ranges[i][0];
|
||||||
|
end = ranges[i][1];
|
||||||
|
for (j = start; j <= end; j++) {
|
||||||
|
result[j] = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
})();
|
||||||
|
|
||||||
|
function splitQuery(query) {
|
||||||
|
var result = [];
|
||||||
|
var start = -1;
|
||||||
|
for (var i = 0; i < query.length; i++) {
|
||||||
|
if (splitChars[query.charCodeAt(i)]) {
|
||||||
|
if (start !== -1) {
|
||||||
|
result.push(query.slice(start, i));
|
||||||
|
start = -1;
|
||||||
|
}
|
||||||
|
} else if (start === -1) {
|
||||||
|
start = i;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (start !== -1) {
|
||||||
|
result.push(query.slice(start));
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
BIN
docs/v0.8/_static/minus.png
Normal file
After Width: | Height: | Size: 90 B |
BIN
docs/v0.8/_static/plus.png
Normal file
After Width: | Height: | Size: 90 B |
252
docs/v0.8/_static/pygments.css
Normal file
@ -0,0 +1,252 @@
|
|||||||
|
.highlight pre { line-height: 125%; }
|
||||||
|
.highlight td.linenos .normal { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||||
|
.highlight span.linenos { color: inherit; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||||
|
.highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||||
|
.highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||||
|
.highlight .hll { background-color: #ffffcc }
|
||||||
|
.highlight { background: #f8f8f8; }
|
||||||
|
.highlight .c { color: #8f5902; font-style: italic } /* Comment */
|
||||||
|
.highlight .err { color: #a40000; border: 1px solid #ef2929 } /* Error */
|
||||||
|
.highlight .g { color: #000000 } /* Generic */
|
||||||
|
.highlight .k { color: #204a87; font-weight: bold } /* Keyword */
|
||||||
|
.highlight .l { color: #000000 } /* Literal */
|
||||||
|
.highlight .n { color: #000000 } /* Name */
|
||||||
|
.highlight .o { color: #ce5c00; font-weight: bold } /* Operator */
|
||||||
|
.highlight .x { color: #000000 } /* Other */
|
||||||
|
.highlight .p { color: #000000; font-weight: bold } /* Punctuation */
|
||||||
|
.highlight .ch { color: #8f5902; font-style: italic } /* Comment.Hashbang */
|
||||||
|
.highlight .cm { color: #8f5902; font-style: italic } /* Comment.Multiline */
|
||||||
|
.highlight .cp { color: #8f5902; font-style: italic } /* Comment.Preproc */
|
||||||
|
.highlight .cpf { color: #8f5902; font-style: italic } /* Comment.PreprocFile */
|
||||||
|
.highlight .c1 { color: #8f5902; font-style: italic } /* Comment.Single */
|
||||||
|
.highlight .cs { color: #8f5902; font-style: italic } /* Comment.Special */
|
||||||
|
.highlight .gd { color: #a40000 } /* Generic.Deleted */
|
||||||
|
.highlight .ge { color: #000000; font-style: italic } /* Generic.Emph */
|
||||||
|
.highlight .gr { color: #ef2929 } /* Generic.Error */
|
||||||
|
.highlight .gh { color: #000080; font-weight: bold } /* Generic.Heading */
|
||||||
|
.highlight .gi { color: #00A000 } /* Generic.Inserted */
|
||||||
|
.highlight .go { color: #000000; font-style: italic } /* Generic.Output */
|
||||||
|
.highlight .gp { color: #8f5902 } /* Generic.Prompt */
|
||||||
|
.highlight .gs { color: #000000; font-weight: bold } /* Generic.Strong */
|
||||||
|
.highlight .gu { color: #800080; font-weight: bold } /* Generic.Subheading */
|
||||||
|
.highlight .gt { color: #a40000; font-weight: bold } /* Generic.Traceback */
|
||||||
|
.highlight .kc { color: #204a87; font-weight: bold } /* Keyword.Constant */
|
||||||
|
.highlight .kd { color: #204a87; font-weight: bold } /* Keyword.Declaration */
|
||||||
|
.highlight .kn { color: #204a87; font-weight: bold } /* Keyword.Namespace */
|
||||||
|
.highlight .kp { color: #204a87; font-weight: bold } /* Keyword.Pseudo */
|
||||||
|
.highlight .kr { color: #204a87; font-weight: bold } /* Keyword.Reserved */
|
||||||
|
.highlight .kt { color: #204a87; font-weight: bold } /* Keyword.Type */
|
||||||
|
.highlight .ld { color: #000000 } /* Literal.Date */
|
||||||
|
.highlight .m { color: #0000cf; font-weight: bold } /* Literal.Number */
|
||||||
|
.highlight .s { color: #4e9a06 } /* Literal.String */
|
||||||
|
.highlight .na { color: #c4a000 } /* Name.Attribute */
|
||||||
|
.highlight .nb { color: #204a87 } /* Name.Builtin */
|
||||||
|
.highlight .nc { color: #000000 } /* Name.Class */
|
||||||
|
.highlight .no { color: #000000 } /* Name.Constant */
|
||||||
|
.highlight .nd { color: #5c35cc; font-weight: bold } /* Name.Decorator */
|
||||||
|
.highlight .ni { color: #ce5c00 } /* Name.Entity */
|
||||||
|
.highlight .ne { color: #cc0000; font-weight: bold } /* Name.Exception */
|
||||||
|
.highlight .nf { color: #000000 } /* Name.Function */
|
||||||
|
.highlight .nl { color: #f57900 } /* Name.Label */
|
||||||
|
.highlight .nn { color: #000000 } /* Name.Namespace */
|
||||||
|
.highlight .nx { color: #000000 } /* Name.Other */
|
||||||
|
.highlight .py { color: #000000 } /* Name.Property */
|
||||||
|
.highlight .nt { color: #204a87; font-weight: bold } /* Name.Tag */
|
||||||
|
.highlight .nv { color: #000000 } /* Name.Variable */
|
||||||
|
.highlight .ow { color: #204a87; font-weight: bold } /* Operator.Word */
|
||||||
|
.highlight .w { color: #f8f8f8 } /* Text.Whitespace */
|
||||||
|
.highlight .mb { color: #0000cf; font-weight: bold } /* Literal.Number.Bin */
|
||||||
|
.highlight .mf { color: #0000cf; font-weight: bold } /* Literal.Number.Float */
|
||||||
|
.highlight .mh { color: #0000cf; font-weight: bold } /* Literal.Number.Hex */
|
||||||
|
.highlight .mi { color: #0000cf; font-weight: bold } /* Literal.Number.Integer */
|
||||||
|
.highlight .mo { color: #0000cf; font-weight: bold } /* Literal.Number.Oct */
|
||||||
|
.highlight .sa { color: #4e9a06 } /* Literal.String.Affix */
|
||||||
|
.highlight .sb { color: #4e9a06 } /* Literal.String.Backtick */
|
||||||
|
.highlight .sc { color: #4e9a06 } /* Literal.String.Char */
|
||||||
|
.highlight .dl { color: #4e9a06 } /* Literal.String.Delimiter */
|
||||||
|
.highlight .sd { color: #8f5902; font-style: italic } /* Literal.String.Doc */
|
||||||
|
.highlight .s2 { color: #4e9a06 } /* Literal.String.Double */
|
||||||
|
.highlight .se { color: #4e9a06 } /* Literal.String.Escape */
|
||||||
|
.highlight .sh { color: #4e9a06 } /* Literal.String.Heredoc */
|
||||||
|
.highlight .si { color: #4e9a06 } /* Literal.String.Interpol */
|
||||||
|
.highlight .sx { color: #4e9a06 } /* Literal.String.Other */
|
||||||
|
.highlight .sr { color: #4e9a06 } /* Literal.String.Regex */
|
||||||
|
.highlight .s1 { color: #4e9a06 } /* Literal.String.Single */
|
||||||
|
.highlight .ss { color: #4e9a06 } /* Literal.String.Symbol */
|
||||||
|
.highlight .bp { color: #3465a4 } /* Name.Builtin.Pseudo */
|
||||||
|
.highlight .fm { color: #000000 } /* Name.Function.Magic */
|
||||||
|
.highlight .vc { color: #000000 } /* Name.Variable.Class */
|
||||||
|
.highlight .vg { color: #000000 } /* Name.Variable.Global */
|
||||||
|
.highlight .vi { color: #000000 } /* Name.Variable.Instance */
|
||||||
|
.highlight .vm { color: #000000 } /* Name.Variable.Magic */
|
||||||
|
.highlight .il { color: #0000cf; font-weight: bold } /* Literal.Number.Integer.Long */
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] .highlight pre { line-height: 125%; }
|
||||||
|
body[data-theme="dark"] .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||||
|
body[data-theme="dark"] .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||||
|
body[data-theme="dark"] .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||||
|
body[data-theme="dark"] .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||||
|
body[data-theme="dark"] .highlight .hll { background-color: #404040 }
|
||||||
|
body[data-theme="dark"] .highlight { background: #202020; color: #d0d0d0 }
|
||||||
|
body[data-theme="dark"] .highlight .c { color: #999999; font-style: italic } /* Comment */
|
||||||
|
body[data-theme="dark"] .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
||||||
|
body[data-theme="dark"] .highlight .esc { color: #d0d0d0 } /* Escape */
|
||||||
|
body[data-theme="dark"] .highlight .g { color: #d0d0d0 } /* Generic */
|
||||||
|
body[data-theme="dark"] .highlight .k { color: #6ab825; font-weight: bold } /* Keyword */
|
||||||
|
body[data-theme="dark"] .highlight .l { color: #d0d0d0 } /* Literal */
|
||||||
|
body[data-theme="dark"] .highlight .n { color: #d0d0d0 } /* Name */
|
||||||
|
body[data-theme="dark"] .highlight .o { color: #d0d0d0 } /* Operator */
|
||||||
|
body[data-theme="dark"] .highlight .x { color: #d0d0d0 } /* Other */
|
||||||
|
body[data-theme="dark"] .highlight .p { color: #d0d0d0 } /* Punctuation */
|
||||||
|
body[data-theme="dark"] .highlight .ch { color: #999999; font-style: italic } /* Comment.Hashbang */
|
||||||
|
body[data-theme="dark"] .highlight .cm { color: #999999; font-style: italic } /* Comment.Multiline */
|
||||||
|
body[data-theme="dark"] .highlight .cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */
|
||||||
|
body[data-theme="dark"] .highlight .cpf { color: #999999; font-style: italic } /* Comment.PreprocFile */
|
||||||
|
body[data-theme="dark"] .highlight .c1 { color: #999999; font-style: italic } /* Comment.Single */
|
||||||
|
body[data-theme="dark"] .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
|
||||||
|
body[data-theme="dark"] .highlight .gd { color: #d22323 } /* Generic.Deleted */
|
||||||
|
body[data-theme="dark"] .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
|
||||||
|
body[data-theme="dark"] .highlight .gr { color: #d22323 } /* Generic.Error */
|
||||||
|
body[data-theme="dark"] .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
|
||||||
|
body[data-theme="dark"] .highlight .gi { color: #589819 } /* Generic.Inserted */
|
||||||
|
body[data-theme="dark"] .highlight .go { color: #cccccc } /* Generic.Output */
|
||||||
|
body[data-theme="dark"] .highlight .gp { color: #aaaaaa } /* Generic.Prompt */
|
||||||
|
body[data-theme="dark"] .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
|
||||||
|
body[data-theme="dark"] .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
|
||||||
|
body[data-theme="dark"] .highlight .gt { color: #d22323 } /* Generic.Traceback */
|
||||||
|
body[data-theme="dark"] .highlight .kc { color: #6ab825; font-weight: bold } /* Keyword.Constant */
|
||||||
|
body[data-theme="dark"] .highlight .kd { color: #6ab825; font-weight: bold } /* Keyword.Declaration */
|
||||||
|
body[data-theme="dark"] .highlight .kn { color: #6ab825; font-weight: bold } /* Keyword.Namespace */
|
||||||
|
body[data-theme="dark"] .highlight .kp { color: #6ab825 } /* Keyword.Pseudo */
|
||||||
|
body[data-theme="dark"] .highlight .kr { color: #6ab825; font-weight: bold } /* Keyword.Reserved */
|
||||||
|
body[data-theme="dark"] .highlight .kt { color: #6ab825; font-weight: bold } /* Keyword.Type */
|
||||||
|
body[data-theme="dark"] .highlight .ld { color: #d0d0d0 } /* Literal.Date */
|
||||||
|
body[data-theme="dark"] .highlight .m { color: #3677a9 } /* Literal.Number */
|
||||||
|
body[data-theme="dark"] .highlight .s { color: #ed9d13 } /* Literal.String */
|
||||||
|
body[data-theme="dark"] .highlight .na { color: #bbbbbb } /* Name.Attribute */
|
||||||
|
body[data-theme="dark"] .highlight .nb { color: #24909d } /* Name.Builtin */
|
||||||
|
body[data-theme="dark"] .highlight .nc { color: #447fcf; text-decoration: underline } /* Name.Class */
|
||||||
|
body[data-theme="dark"] .highlight .no { color: #40ffff } /* Name.Constant */
|
||||||
|
body[data-theme="dark"] .highlight .nd { color: #ffa500 } /* Name.Decorator */
|
||||||
|
body[data-theme="dark"] .highlight .ni { color: #d0d0d0 } /* Name.Entity */
|
||||||
|
body[data-theme="dark"] .highlight .ne { color: #bbbbbb } /* Name.Exception */
|
||||||
|
body[data-theme="dark"] .highlight .nf { color: #447fcf } /* Name.Function */
|
||||||
|
body[data-theme="dark"] .highlight .nl { color: #d0d0d0 } /* Name.Label */
|
||||||
|
body[data-theme="dark"] .highlight .nn { color: #447fcf; text-decoration: underline } /* Name.Namespace */
|
||||||
|
body[data-theme="dark"] .highlight .nx { color: #d0d0d0 } /* Name.Other */
|
||||||
|
body[data-theme="dark"] .highlight .py { color: #d0d0d0 } /* Name.Property */
|
||||||
|
body[data-theme="dark"] .highlight .nt { color: #6ab825; font-weight: bold } /* Name.Tag */
|
||||||
|
body[data-theme="dark"] .highlight .nv { color: #40ffff } /* Name.Variable */
|
||||||
|
body[data-theme="dark"] .highlight .ow { color: #6ab825; font-weight: bold } /* Operator.Word */
|
||||||
|
body[data-theme="dark"] .highlight .w { color: #666666 } /* Text.Whitespace */
|
||||||
|
body[data-theme="dark"] .highlight .mb { color: #3677a9 } /* Literal.Number.Bin */
|
||||||
|
body[data-theme="dark"] .highlight .mf { color: #3677a9 } /* Literal.Number.Float */
|
||||||
|
body[data-theme="dark"] .highlight .mh { color: #3677a9 } /* Literal.Number.Hex */
|
||||||
|
body[data-theme="dark"] .highlight .mi { color: #3677a9 } /* Literal.Number.Integer */
|
||||||
|
body[data-theme="dark"] .highlight .mo { color: #3677a9 } /* Literal.Number.Oct */
|
||||||
|
body[data-theme="dark"] .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */
|
||||||
|
body[data-theme="dark"] .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */
|
||||||
|
body[data-theme="dark"] .highlight .sc { color: #ed9d13 } /* Literal.String.Char */
|
||||||
|
body[data-theme="dark"] .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */
|
||||||
|
body[data-theme="dark"] .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */
|
||||||
|
body[data-theme="dark"] .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */
|
||||||
|
body[data-theme="dark"] .highlight .se { color: #ed9d13 } /* Literal.String.Escape */
|
||||||
|
body[data-theme="dark"] .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */
|
||||||
|
body[data-theme="dark"] .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */
|
||||||
|
body[data-theme="dark"] .highlight .sx { color: #ffa500 } /* Literal.String.Other */
|
||||||
|
body[data-theme="dark"] .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */
|
||||||
|
body[data-theme="dark"] .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */
|
||||||
|
body[data-theme="dark"] .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */
|
||||||
|
body[data-theme="dark"] .highlight .bp { color: #24909d } /* Name.Builtin.Pseudo */
|
||||||
|
body[data-theme="dark"] .highlight .fm { color: #447fcf } /* Name.Function.Magic */
|
||||||
|
body[data-theme="dark"] .highlight .vc { color: #40ffff } /* Name.Variable.Class */
|
||||||
|
body[data-theme="dark"] .highlight .vg { color: #40ffff } /* Name.Variable.Global */
|
||||||
|
body[data-theme="dark"] .highlight .vi { color: #40ffff } /* Name.Variable.Instance */
|
||||||
|
body[data-theme="dark"] .highlight .vm { color: #40ffff } /* Name.Variable.Magic */
|
||||||
|
body[data-theme="dark"] .highlight .il { color: #3677a9 } /* Literal.Number.Integer.Long */
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) .highlight pre { line-height: 125%; }
|
||||||
|
body:not([data-theme="light"]) .highlight td.linenos .normal { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||||
|
body:not([data-theme="light"]) .highlight span.linenos { color: #aaaaaa; background-color: transparent; padding-left: 5px; padding-right: 5px; }
|
||||||
|
body:not([data-theme="light"]) .highlight td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||||
|
body:not([data-theme="light"]) .highlight span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; }
|
||||||
|
body:not([data-theme="light"]) .highlight .hll { background-color: #404040 }
|
||||||
|
body:not([data-theme="light"]) .highlight { background: #202020; color: #d0d0d0 }
|
||||||
|
body:not([data-theme="light"]) .highlight .c { color: #999999; font-style: italic } /* Comment */
|
||||||
|
body:not([data-theme="light"]) .highlight .err { color: #a61717; background-color: #e3d2d2 } /* Error */
|
||||||
|
body:not([data-theme="light"]) .highlight .esc { color: #d0d0d0 } /* Escape */
|
||||||
|
body:not([data-theme="light"]) .highlight .g { color: #d0d0d0 } /* Generic */
|
||||||
|
body:not([data-theme="light"]) .highlight .k { color: #6ab825; font-weight: bold } /* Keyword */
|
||||||
|
body:not([data-theme="light"]) .highlight .l { color: #d0d0d0 } /* Literal */
|
||||||
|
body:not([data-theme="light"]) .highlight .n { color: #d0d0d0 } /* Name */
|
||||||
|
body:not([data-theme="light"]) .highlight .o { color: #d0d0d0 } /* Operator */
|
||||||
|
body:not([data-theme="light"]) .highlight .x { color: #d0d0d0 } /* Other */
|
||||||
|
body:not([data-theme="light"]) .highlight .p { color: #d0d0d0 } /* Punctuation */
|
||||||
|
body:not([data-theme="light"]) .highlight .ch { color: #999999; font-style: italic } /* Comment.Hashbang */
|
||||||
|
body:not([data-theme="light"]) .highlight .cm { color: #999999; font-style: italic } /* Comment.Multiline */
|
||||||
|
body:not([data-theme="light"]) .highlight .cp { color: #cd2828; font-weight: bold } /* Comment.Preproc */
|
||||||
|
body:not([data-theme="light"]) .highlight .cpf { color: #999999; font-style: italic } /* Comment.PreprocFile */
|
||||||
|
body:not([data-theme="light"]) .highlight .c1 { color: #999999; font-style: italic } /* Comment.Single */
|
||||||
|
body:not([data-theme="light"]) .highlight .cs { color: #e50808; font-weight: bold; background-color: #520000 } /* Comment.Special */
|
||||||
|
body:not([data-theme="light"]) .highlight .gd { color: #d22323 } /* Generic.Deleted */
|
||||||
|
body:not([data-theme="light"]) .highlight .ge { color: #d0d0d0; font-style: italic } /* Generic.Emph */
|
||||||
|
body:not([data-theme="light"]) .highlight .gr { color: #d22323 } /* Generic.Error */
|
||||||
|
body:not([data-theme="light"]) .highlight .gh { color: #ffffff; font-weight: bold } /* Generic.Heading */
|
||||||
|
body:not([data-theme="light"]) .highlight .gi { color: #589819 } /* Generic.Inserted */
|
||||||
|
body:not([data-theme="light"]) .highlight .go { color: #cccccc } /* Generic.Output */
|
||||||
|
body:not([data-theme="light"]) .highlight .gp { color: #aaaaaa } /* Generic.Prompt */
|
||||||
|
body:not([data-theme="light"]) .highlight .gs { color: #d0d0d0; font-weight: bold } /* Generic.Strong */
|
||||||
|
body:not([data-theme="light"]) .highlight .gu { color: #ffffff; text-decoration: underline } /* Generic.Subheading */
|
||||||
|
body:not([data-theme="light"]) .highlight .gt { color: #d22323 } /* Generic.Traceback */
|
||||||
|
body:not([data-theme="light"]) .highlight .kc { color: #6ab825; font-weight: bold } /* Keyword.Constant */
|
||||||
|
body:not([data-theme="light"]) .highlight .kd { color: #6ab825; font-weight: bold } /* Keyword.Declaration */
|
||||||
|
body:not([data-theme="light"]) .highlight .kn { color: #6ab825; font-weight: bold } /* Keyword.Namespace */
|
||||||
|
body:not([data-theme="light"]) .highlight .kp { color: #6ab825 } /* Keyword.Pseudo */
|
||||||
|
body:not([data-theme="light"]) .highlight .kr { color: #6ab825; font-weight: bold } /* Keyword.Reserved */
|
||||||
|
body:not([data-theme="light"]) .highlight .kt { color: #6ab825; font-weight: bold } /* Keyword.Type */
|
||||||
|
body:not([data-theme="light"]) .highlight .ld { color: #d0d0d0 } /* Literal.Date */
|
||||||
|
body:not([data-theme="light"]) .highlight .m { color: #3677a9 } /* Literal.Number */
|
||||||
|
body:not([data-theme="light"]) .highlight .s { color: #ed9d13 } /* Literal.String */
|
||||||
|
body:not([data-theme="light"]) .highlight .na { color: #bbbbbb } /* Name.Attribute */
|
||||||
|
body:not([data-theme="light"]) .highlight .nb { color: #24909d } /* Name.Builtin */
|
||||||
|
body:not([data-theme="light"]) .highlight .nc { color: #447fcf; text-decoration: underline } /* Name.Class */
|
||||||
|
body:not([data-theme="light"]) .highlight .no { color: #40ffff } /* Name.Constant */
|
||||||
|
body:not([data-theme="light"]) .highlight .nd { color: #ffa500 } /* Name.Decorator */
|
||||||
|
body:not([data-theme="light"]) .highlight .ni { color: #d0d0d0 } /* Name.Entity */
|
||||||
|
body:not([data-theme="light"]) .highlight .ne { color: #bbbbbb } /* Name.Exception */
|
||||||
|
body:not([data-theme="light"]) .highlight .nf { color: #447fcf } /* Name.Function */
|
||||||
|
body:not([data-theme="light"]) .highlight .nl { color: #d0d0d0 } /* Name.Label */
|
||||||
|
body:not([data-theme="light"]) .highlight .nn { color: #447fcf; text-decoration: underline } /* Name.Namespace */
|
||||||
|
body:not([data-theme="light"]) .highlight .nx { color: #d0d0d0 } /* Name.Other */
|
||||||
|
body:not([data-theme="light"]) .highlight .py { color: #d0d0d0 } /* Name.Property */
|
||||||
|
body:not([data-theme="light"]) .highlight .nt { color: #6ab825; font-weight: bold } /* Name.Tag */
|
||||||
|
body:not([data-theme="light"]) .highlight .nv { color: #40ffff } /* Name.Variable */
|
||||||
|
body:not([data-theme="light"]) .highlight .ow { color: #6ab825; font-weight: bold } /* Operator.Word */
|
||||||
|
body:not([data-theme="light"]) .highlight .w { color: #666666 } /* Text.Whitespace */
|
||||||
|
body:not([data-theme="light"]) .highlight .mb { color: #3677a9 } /* Literal.Number.Bin */
|
||||||
|
body:not([data-theme="light"]) .highlight .mf { color: #3677a9 } /* Literal.Number.Float */
|
||||||
|
body:not([data-theme="light"]) .highlight .mh { color: #3677a9 } /* Literal.Number.Hex */
|
||||||
|
body:not([data-theme="light"]) .highlight .mi { color: #3677a9 } /* Literal.Number.Integer */
|
||||||
|
body:not([data-theme="light"]) .highlight .mo { color: #3677a9 } /* Literal.Number.Oct */
|
||||||
|
body:not([data-theme="light"]) .highlight .sa { color: #ed9d13 } /* Literal.String.Affix */
|
||||||
|
body:not([data-theme="light"]) .highlight .sb { color: #ed9d13 } /* Literal.String.Backtick */
|
||||||
|
body:not([data-theme="light"]) .highlight .sc { color: #ed9d13 } /* Literal.String.Char */
|
||||||
|
body:not([data-theme="light"]) .highlight .dl { color: #ed9d13 } /* Literal.String.Delimiter */
|
||||||
|
body:not([data-theme="light"]) .highlight .sd { color: #ed9d13 } /* Literal.String.Doc */
|
||||||
|
body:not([data-theme="light"]) .highlight .s2 { color: #ed9d13 } /* Literal.String.Double */
|
||||||
|
body:not([data-theme="light"]) .highlight .se { color: #ed9d13 } /* Literal.String.Escape */
|
||||||
|
body:not([data-theme="light"]) .highlight .sh { color: #ed9d13 } /* Literal.String.Heredoc */
|
||||||
|
body:not([data-theme="light"]) .highlight .si { color: #ed9d13 } /* Literal.String.Interpol */
|
||||||
|
body:not([data-theme="light"]) .highlight .sx { color: #ffa500 } /* Literal.String.Other */
|
||||||
|
body:not([data-theme="light"]) .highlight .sr { color: #ed9d13 } /* Literal.String.Regex */
|
||||||
|
body:not([data-theme="light"]) .highlight .s1 { color: #ed9d13 } /* Literal.String.Single */
|
||||||
|
body:not([data-theme="light"]) .highlight .ss { color: #ed9d13 } /* Literal.String.Symbol */
|
||||||
|
body:not([data-theme="light"]) .highlight .bp { color: #24909d } /* Name.Builtin.Pseudo */
|
||||||
|
body:not([data-theme="light"]) .highlight .fm { color: #447fcf } /* Name.Function.Magic */
|
||||||
|
body:not([data-theme="light"]) .highlight .vc { color: #40ffff } /* Name.Variable.Class */
|
||||||
|
body:not([data-theme="light"]) .highlight .vg { color: #40ffff } /* Name.Variable.Global */
|
||||||
|
body:not([data-theme="light"]) .highlight .vi { color: #40ffff } /* Name.Variable.Instance */
|
||||||
|
body:not([data-theme="light"]) .highlight .vm { color: #40ffff } /* Name.Variable.Magic */
|
||||||
|
body:not([data-theme="light"]) .highlight .il { color: #3677a9 } /* Literal.Number.Integer.Long */
|
||||||
|
}
|
||||||
|
}
|
0
docs/v0.8/_static/scripts/furo-extensions.js
Normal file
3
docs/v0.8/_static/scripts/furo.js
Normal file
7
docs/v0.8/_static/scripts/furo.js.LICENSE.txt
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
/*!
|
||||||
|
* gumshoejs v5.1.2 (patched by @pradyunsg)
|
||||||
|
* A simple, framework-agnostic scrollspy script.
|
||||||
|
* (c) 2019 Chris Ferdinandi
|
||||||
|
* MIT License
|
||||||
|
* http://github.com/cferdinandi/gumshoe
|
||||||
|
*/
|
1
docs/v0.8/_static/scripts/furo.js.map
Normal file
529
docs/v0.8/_static/searchtools.js
Normal file
@ -0,0 +1,529 @@
|
|||||||
|
/*
|
||||||
|
* searchtools.js
|
||||||
|
* ~~~~~~~~~~~~~~~~
|
||||||
|
*
|
||||||
|
* Sphinx JavaScript utilities for the full-text search.
|
||||||
|
*
|
||||||
|
* :copyright: Copyright 2007-2022 by the Sphinx team, see AUTHORS.
|
||||||
|
* :license: BSD, see LICENSE for details.
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
if (!Scorer) {
|
||||||
|
/**
|
||||||
|
* Simple result scoring code.
|
||||||
|
*/
|
||||||
|
var Scorer = {
|
||||||
|
// Implement the following function to further tweak the score for each result
|
||||||
|
// The function takes a result array [filename, title, anchor, descr, score]
|
||||||
|
// and returns the new score.
|
||||||
|
/*
|
||||||
|
score: function(result) {
|
||||||
|
return result[4];
|
||||||
|
},
|
||||||
|
*/
|
||||||
|
|
||||||
|
// query matches the full name of an object
|
||||||
|
objNameMatch: 11,
|
||||||
|
// or matches in the last dotted part of the object name
|
||||||
|
objPartialMatch: 6,
|
||||||
|
// Additive scores depending on the priority of the object
|
||||||
|
objPrio: {0: 15, // used to be importantResults
|
||||||
|
1: 5, // used to be objectResults
|
||||||
|
2: -5}, // used to be unimportantResults
|
||||||
|
// Used when the priority is not in the mapping.
|
||||||
|
objPrioDefault: 0,
|
||||||
|
|
||||||
|
// query found in title
|
||||||
|
title: 15,
|
||||||
|
partialTitle: 7,
|
||||||
|
// query found in terms
|
||||||
|
term: 5,
|
||||||
|
partialTerm: 2
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!splitQuery) {
|
||||||
|
function splitQuery(query) {
|
||||||
|
return query.split(/\s+/);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Search Module
|
||||||
|
*/
|
||||||
|
var Search = {
|
||||||
|
|
||||||
|
_index : null,
|
||||||
|
_queued_query : null,
|
||||||
|
_pulse_status : -1,
|
||||||
|
|
||||||
|
htmlToText : function(htmlString) {
|
||||||
|
var virtualDocument = document.implementation.createHTMLDocument('virtual');
|
||||||
|
var htmlElement = $(htmlString, virtualDocument);
|
||||||
|
htmlElement.find('.headerlink').remove();
|
||||||
|
docContent = htmlElement.find('[role=main]')[0];
|
||||||
|
if(docContent === undefined) {
|
||||||
|
console.warn("Content block not found. Sphinx search tries to obtain it " +
|
||||||
|
"via '[role=main]'. Could you check your theme or template.");
|
||||||
|
return "";
|
||||||
|
}
|
||||||
|
return docContent.textContent || docContent.innerText;
|
||||||
|
},
|
||||||
|
|
||||||
|
init : function() {
|
||||||
|
var params = $.getQueryParameters();
|
||||||
|
if (params.q) {
|
||||||
|
var query = params.q[0];
|
||||||
|
$('input[name="q"]')[0].value = query;
|
||||||
|
this.performSearch(query);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
loadIndex : function(url) {
|
||||||
|
$.ajax({type: "GET", url: url, data: null,
|
||||||
|
dataType: "script", cache: true,
|
||||||
|
complete: function(jqxhr, textstatus) {
|
||||||
|
if (textstatus != "success") {
|
||||||
|
document.getElementById("searchindexloader").src = url;
|
||||||
|
}
|
||||||
|
}});
|
||||||
|
},
|
||||||
|
|
||||||
|
setIndex : function(index) {
|
||||||
|
var q;
|
||||||
|
this._index = index;
|
||||||
|
if ((q = this._queued_query) !== null) {
|
||||||
|
this._queued_query = null;
|
||||||
|
Search.query(q);
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
hasIndex : function() {
|
||||||
|
return this._index !== null;
|
||||||
|
},
|
||||||
|
|
||||||
|
deferQuery : function(query) {
|
||||||
|
this._queued_query = query;
|
||||||
|
},
|
||||||
|
|
||||||
|
stopPulse : function() {
|
||||||
|
this._pulse_status = 0;
|
||||||
|
},
|
||||||
|
|
||||||
|
startPulse : function() {
|
||||||
|
if (this._pulse_status >= 0)
|
||||||
|
return;
|
||||||
|
function pulse() {
|
||||||
|
var i;
|
||||||
|
Search._pulse_status = (Search._pulse_status + 1) % 4;
|
||||||
|
var dotString = '';
|
||||||
|
for (i = 0; i < Search._pulse_status; i++)
|
||||||
|
dotString += '.';
|
||||||
|
Search.dots.text(dotString);
|
||||||
|
if (Search._pulse_status > -1)
|
||||||
|
window.setTimeout(pulse, 500);
|
||||||
|
}
|
||||||
|
pulse();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* perform a search for something (or wait until index is loaded)
|
||||||
|
*/
|
||||||
|
performSearch : function(query) {
|
||||||
|
// create the required interface elements
|
||||||
|
this.out = $('#search-results');
|
||||||
|
this.title = $('<h2>' + _('Searching') + '</h2>').appendTo(this.out);
|
||||||
|
this.dots = $('<span></span>').appendTo(this.title);
|
||||||
|
this.status = $('<p class="search-summary"> </p>').appendTo(this.out);
|
||||||
|
this.output = $('<ul class="search"/>').appendTo(this.out);
|
||||||
|
|
||||||
|
$('#search-progress').text(_('Preparing search...'));
|
||||||
|
this.startPulse();
|
||||||
|
|
||||||
|
// index already loaded, the browser was quick!
|
||||||
|
if (this.hasIndex())
|
||||||
|
this.query(query);
|
||||||
|
else
|
||||||
|
this.deferQuery(query);
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* execute search (requires search index to be loaded)
|
||||||
|
*/
|
||||||
|
query : function(query) {
|
||||||
|
var i;
|
||||||
|
|
||||||
|
// stem the searchterms and add them to the correct list
|
||||||
|
var stemmer = new Stemmer();
|
||||||
|
var searchterms = [];
|
||||||
|
var excluded = [];
|
||||||
|
var hlterms = [];
|
||||||
|
var tmp = splitQuery(query);
|
||||||
|
var objectterms = [];
|
||||||
|
for (i = 0; i < tmp.length; i++) {
|
||||||
|
if (tmp[i] !== "") {
|
||||||
|
objectterms.push(tmp[i].toLowerCase());
|
||||||
|
}
|
||||||
|
|
||||||
|
if ($u.indexOf(stopwords, tmp[i].toLowerCase()) != -1 || tmp[i] === "") {
|
||||||
|
// skip this "word"
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
// stem the word
|
||||||
|
var word = stemmer.stemWord(tmp[i].toLowerCase());
|
||||||
|
// prevent stemmer from cutting word smaller than two chars
|
||||||
|
if(word.length < 3 && tmp[i].length >= 3) {
|
||||||
|
word = tmp[i];
|
||||||
|
}
|
||||||
|
var toAppend;
|
||||||
|
// select the correct list
|
||||||
|
if (word[0] == '-') {
|
||||||
|
toAppend = excluded;
|
||||||
|
word = word.substr(1);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
toAppend = searchterms;
|
||||||
|
hlterms.push(tmp[i].toLowerCase());
|
||||||
|
}
|
||||||
|
// only add if not already in the list
|
||||||
|
if (!$u.contains(toAppend, word))
|
||||||
|
toAppend.push(word);
|
||||||
|
}
|
||||||
|
var highlightstring = '?highlight=' + $.urlencode(hlterms.join(" "));
|
||||||
|
|
||||||
|
// console.debug('SEARCH: searching for:');
|
||||||
|
// console.info('required: ', searchterms);
|
||||||
|
// console.info('excluded: ', excluded);
|
||||||
|
|
||||||
|
// prepare search
|
||||||
|
var terms = this._index.terms;
|
||||||
|
var titleterms = this._index.titleterms;
|
||||||
|
|
||||||
|
// array of [filename, title, anchor, descr, score]
|
||||||
|
var results = [];
|
||||||
|
$('#search-progress').empty();
|
||||||
|
|
||||||
|
// lookup as object
|
||||||
|
for (i = 0; i < objectterms.length; i++) {
|
||||||
|
var others = [].concat(objectterms.slice(0, i),
|
||||||
|
objectterms.slice(i+1, objectterms.length));
|
||||||
|
results = results.concat(this.performObjectSearch(objectterms[i], others));
|
||||||
|
}
|
||||||
|
|
||||||
|
// lookup as search terms in fulltext
|
||||||
|
results = results.concat(this.performTermsSearch(searchterms, excluded, terms, titleterms));
|
||||||
|
|
||||||
|
// let the scorer override scores with a custom scoring function
|
||||||
|
if (Scorer.score) {
|
||||||
|
for (i = 0; i < results.length; i++)
|
||||||
|
results[i][4] = Scorer.score(results[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// now sort the results by score (in opposite order of appearance, since the
|
||||||
|
// display function below uses pop() to retrieve items) and then
|
||||||
|
// alphabetically
|
||||||
|
results.sort(function(a, b) {
|
||||||
|
var left = a[4];
|
||||||
|
var right = b[4];
|
||||||
|
if (left > right) {
|
||||||
|
return 1;
|
||||||
|
} else if (left < right) {
|
||||||
|
return -1;
|
||||||
|
} else {
|
||||||
|
// same score: sort alphabetically
|
||||||
|
left = a[1].toLowerCase();
|
||||||
|
right = b[1].toLowerCase();
|
||||||
|
return (left > right) ? -1 : ((left < right) ? 1 : 0);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// for debugging
|
||||||
|
//Search.lastresults = results.slice(); // a copy
|
||||||
|
//console.info('search results:', Search.lastresults);
|
||||||
|
|
||||||
|
// print the results
|
||||||
|
var resultCount = results.length;
|
||||||
|
function displayNextItem() {
|
||||||
|
// results left, load the summary and display it
|
||||||
|
if (results.length) {
|
||||||
|
var item = results.pop();
|
||||||
|
var listItem = $('<li></li>');
|
||||||
|
var requestUrl = "";
|
||||||
|
var linkUrl = "";
|
||||||
|
if (DOCUMENTATION_OPTIONS.BUILDER === 'dirhtml') {
|
||||||
|
// dirhtml builder
|
||||||
|
var dirname = item[0] + '/';
|
||||||
|
if (dirname.match(/\/index\/$/)) {
|
||||||
|
dirname = dirname.substring(0, dirname.length-6);
|
||||||
|
} else if (dirname == 'index/') {
|
||||||
|
dirname = '';
|
||||||
|
}
|
||||||
|
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + dirname;
|
||||||
|
linkUrl = requestUrl;
|
||||||
|
|
||||||
|
} else {
|
||||||
|
// normal html builders
|
||||||
|
requestUrl = DOCUMENTATION_OPTIONS.URL_ROOT + item[0] + DOCUMENTATION_OPTIONS.FILE_SUFFIX;
|
||||||
|
linkUrl = item[0] + DOCUMENTATION_OPTIONS.LINK_SUFFIX;
|
||||||
|
}
|
||||||
|
listItem.append($('<a/>').attr('href',
|
||||||
|
linkUrl +
|
||||||
|
highlightstring + item[2]).html(item[1]));
|
||||||
|
if (item[3]) {
|
||||||
|
listItem.append($('<span> (' + item[3] + ')</span>'));
|
||||||
|
Search.output.append(listItem);
|
||||||
|
setTimeout(function() {
|
||||||
|
displayNextItem();
|
||||||
|
}, 5);
|
||||||
|
} else if (DOCUMENTATION_OPTIONS.HAS_SOURCE) {
|
||||||
|
$.ajax({url: requestUrl,
|
||||||
|
dataType: "text",
|
||||||
|
complete: function(jqxhr, textstatus) {
|
||||||
|
var data = jqxhr.responseText;
|
||||||
|
if (data !== '' && data !== undefined) {
|
||||||
|
var summary = Search.makeSearchSummary(data, searchterms, hlterms);
|
||||||
|
if (summary) {
|
||||||
|
listItem.append(summary);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Search.output.append(listItem);
|
||||||
|
setTimeout(function() {
|
||||||
|
displayNextItem();
|
||||||
|
}, 5);
|
||||||
|
}});
|
||||||
|
} else {
|
||||||
|
// no source available, just display title
|
||||||
|
Search.output.append(listItem);
|
||||||
|
setTimeout(function() {
|
||||||
|
displayNextItem();
|
||||||
|
}, 5);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// search finished, update title and status message
|
||||||
|
else {
|
||||||
|
Search.stopPulse();
|
||||||
|
Search.title.text(_('Search Results'));
|
||||||
|
if (!resultCount)
|
||||||
|
Search.status.text(_('Your search did not match any documents. Please make sure that all words are spelled correctly and that you\'ve selected enough categories.'));
|
||||||
|
else
|
||||||
|
Search.status.text(_('Search finished, found %s page(s) matching the search query.').replace('%s', resultCount));
|
||||||
|
Search.status.fadeIn(500);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
displayNextItem();
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* search for object names
|
||||||
|
*/
|
||||||
|
performObjectSearch : function(object, otherterms) {
|
||||||
|
var filenames = this._index.filenames;
|
||||||
|
var docnames = this._index.docnames;
|
||||||
|
var objects = this._index.objects;
|
||||||
|
var objnames = this._index.objnames;
|
||||||
|
var titles = this._index.titles;
|
||||||
|
|
||||||
|
var i;
|
||||||
|
var results = [];
|
||||||
|
|
||||||
|
for (var prefix in objects) {
|
||||||
|
for (var iMatch = 0; iMatch != objects[prefix].length; ++iMatch) {
|
||||||
|
var match = objects[prefix][iMatch];
|
||||||
|
var name = match[4];
|
||||||
|
var fullname = (prefix ? prefix + '.' : '') + name;
|
||||||
|
var fullnameLower = fullname.toLowerCase()
|
||||||
|
if (fullnameLower.indexOf(object) > -1) {
|
||||||
|
var score = 0;
|
||||||
|
var parts = fullnameLower.split('.');
|
||||||
|
// check for different match types: exact matches of full name or
|
||||||
|
// "last name" (i.e. last dotted part)
|
||||||
|
if (fullnameLower == object || parts[parts.length - 1] == object) {
|
||||||
|
score += Scorer.objNameMatch;
|
||||||
|
// matches in last name
|
||||||
|
} else if (parts[parts.length - 1].indexOf(object) > -1) {
|
||||||
|
score += Scorer.objPartialMatch;
|
||||||
|
}
|
||||||
|
var objname = objnames[match[1]][2];
|
||||||
|
var title = titles[match[0]];
|
||||||
|
// If more than one term searched for, we require other words to be
|
||||||
|
// found in the name/title/description
|
||||||
|
if (otherterms.length > 0) {
|
||||||
|
var haystack = (prefix + ' ' + name + ' ' +
|
||||||
|
objname + ' ' + title).toLowerCase();
|
||||||
|
var allfound = true;
|
||||||
|
for (i = 0; i < otherterms.length; i++) {
|
||||||
|
if (haystack.indexOf(otherterms[i]) == -1) {
|
||||||
|
allfound = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!allfound) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var descr = objname + _(', in ') + title;
|
||||||
|
|
||||||
|
var anchor = match[3];
|
||||||
|
if (anchor === '')
|
||||||
|
anchor = fullname;
|
||||||
|
else if (anchor == '-')
|
||||||
|
anchor = objnames[match[1]][1] + '-' + fullname;
|
||||||
|
// add custom score for some objects according to scorer
|
||||||
|
if (Scorer.objPrio.hasOwnProperty(match[2])) {
|
||||||
|
score += Scorer.objPrio[match[2]];
|
||||||
|
} else {
|
||||||
|
score += Scorer.objPrioDefault;
|
||||||
|
}
|
||||||
|
results.push([docnames[match[0]], fullname, '#'+anchor, descr, score, filenames[match[0]]]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return results;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expressions
|
||||||
|
*/
|
||||||
|
escapeRegExp : function(string) {
|
||||||
|
return string.replace(/[.*+\-?^${}()|[\]\\]/g, '\\$&'); // $& means the whole matched string
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* search for full-text terms in the index
|
||||||
|
*/
|
||||||
|
performTermsSearch : function(searchterms, excluded, terms, titleterms) {
|
||||||
|
var docnames = this._index.docnames;
|
||||||
|
var filenames = this._index.filenames;
|
||||||
|
var titles = this._index.titles;
|
||||||
|
|
||||||
|
var i, j, file;
|
||||||
|
var fileMap = {};
|
||||||
|
var scoreMap = {};
|
||||||
|
var results = [];
|
||||||
|
|
||||||
|
// perform the search on the required terms
|
||||||
|
for (i = 0; i < searchterms.length; i++) {
|
||||||
|
var word = searchterms[i];
|
||||||
|
var files = [];
|
||||||
|
var _o = [
|
||||||
|
{files: terms[word], score: Scorer.term},
|
||||||
|
{files: titleterms[word], score: Scorer.title}
|
||||||
|
];
|
||||||
|
// add support for partial matches
|
||||||
|
if (word.length > 2) {
|
||||||
|
var word_regex = this.escapeRegExp(word);
|
||||||
|
for (var w in terms) {
|
||||||
|
if (w.match(word_regex) && !terms[word]) {
|
||||||
|
_o.push({files: terms[w], score: Scorer.partialTerm})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
for (var w in titleterms) {
|
||||||
|
if (w.match(word_regex) && !titleterms[word]) {
|
||||||
|
_o.push({files: titleterms[w], score: Scorer.partialTitle})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// no match but word was a required one
|
||||||
|
if ($u.every(_o, function(o){return o.files === undefined;})) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
// found search word in contents
|
||||||
|
$u.each(_o, function(o) {
|
||||||
|
var _files = o.files;
|
||||||
|
if (_files === undefined)
|
||||||
|
return
|
||||||
|
|
||||||
|
if (_files.length === undefined)
|
||||||
|
_files = [_files];
|
||||||
|
files = files.concat(_files);
|
||||||
|
|
||||||
|
// set score for the word in each file to Scorer.term
|
||||||
|
for (j = 0; j < _files.length; j++) {
|
||||||
|
file = _files[j];
|
||||||
|
if (!(file in scoreMap))
|
||||||
|
scoreMap[file] = {};
|
||||||
|
scoreMap[file][word] = o.score;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
// create the mapping
|
||||||
|
for (j = 0; j < files.length; j++) {
|
||||||
|
file = files[j];
|
||||||
|
if (file in fileMap && fileMap[file].indexOf(word) === -1)
|
||||||
|
fileMap[file].push(word);
|
||||||
|
else
|
||||||
|
fileMap[file] = [word];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// now check if the files don't contain excluded terms
|
||||||
|
for (file in fileMap) {
|
||||||
|
var valid = true;
|
||||||
|
|
||||||
|
// check if all requirements are matched
|
||||||
|
var filteredTermCount = // as search terms with length < 3 are discarded: ignore
|
||||||
|
searchterms.filter(function(term){return term.length > 2}).length
|
||||||
|
if (
|
||||||
|
fileMap[file].length != searchterms.length &&
|
||||||
|
fileMap[file].length != filteredTermCount
|
||||||
|
) continue;
|
||||||
|
|
||||||
|
// ensure that none of the excluded terms is in the search result
|
||||||
|
for (i = 0; i < excluded.length; i++) {
|
||||||
|
if (terms[excluded[i]] == file ||
|
||||||
|
titleterms[excluded[i]] == file ||
|
||||||
|
$u.contains(terms[excluded[i]] || [], file) ||
|
||||||
|
$u.contains(titleterms[excluded[i]] || [], file)) {
|
||||||
|
valid = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// if we have still a valid result we can add it to the result list
|
||||||
|
if (valid) {
|
||||||
|
// select one (max) score for the file.
|
||||||
|
// for better ranking, we should calculate ranking by using words statistics like basic tf-idf...
|
||||||
|
var score = $u.max($u.map(fileMap[file], function(w){return scoreMap[file][w]}));
|
||||||
|
results.push([docnames[file], titles[file], '', null, score, filenames[file]]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return results;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* helper function to return a node containing the
|
||||||
|
* search summary for a given text. keywords is a list
|
||||||
|
* of stemmed words, hlwords is the list of normal, unstemmed
|
||||||
|
* words. the first one is used to find the occurrence, the
|
||||||
|
* latter for highlighting it.
|
||||||
|
*/
|
||||||
|
makeSearchSummary : function(htmlText, keywords, hlwords) {
|
||||||
|
var text = Search.htmlToText(htmlText);
|
||||||
|
if (text == "") {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
var textLower = text.toLowerCase();
|
||||||
|
var start = 0;
|
||||||
|
$.each(keywords, function() {
|
||||||
|
var i = textLower.indexOf(this.toLowerCase());
|
||||||
|
if (i > -1)
|
||||||
|
start = i;
|
||||||
|
});
|
||||||
|
start = Math.max(start - 120, 0);
|
||||||
|
var excerpt = ((start > 0) ? '...' : '') +
|
||||||
|
$.trim(text.substr(start, 240)) +
|
||||||
|
((start + 240 - text.length) ? '...' : '');
|
||||||
|
var rv = $('<p class="context"></p>').text(excerpt);
|
||||||
|
$.each(hlwords, function() {
|
||||||
|
rv = rv.highlightText(this, 'highlighted');
|
||||||
|
});
|
||||||
|
return rv;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
$(document).ready(function() {
|
||||||
|
Search.init();
|
||||||
|
});
|
2
docs/v0.8/_static/styles/furo-extensions.css
Normal file
1
docs/v0.8/_static/styles/furo-extensions.css.map
Normal file
2
docs/v0.8/_static/styles/furo.css
Normal file
1
docs/v0.8/_static/styles/furo.css.map
Normal file
2042
docs/v0.8/_static/underscore-1.13.1.js
Normal file
999
docs/v0.8/_static/underscore-1.3.1.js
Normal file
@ -0,0 +1,999 @@
|
|||||||
|
// Underscore.js 1.3.1
|
||||||
|
// (c) 2009-2012 Jeremy Ashkenas, DocumentCloud Inc.
|
||||||
|
// Underscore is freely distributable under the MIT license.
|
||||||
|
// Portions of Underscore are inspired or borrowed from Prototype,
|
||||||
|
// Oliver Steele's Functional, and John Resig's Micro-Templating.
|
||||||
|
// For all details and documentation:
|
||||||
|
// http://documentcloud.github.com/underscore
|
||||||
|
|
||||||
|
(function() {
|
||||||
|
|
||||||
|
// Baseline setup
|
||||||
|
// --------------
|
||||||
|
|
||||||
|
// Establish the root object, `window` in the browser, or `global` on the server.
|
||||||
|
var root = this;
|
||||||
|
|
||||||
|
// Save the previous value of the `_` variable.
|
||||||
|
var previousUnderscore = root._;
|
||||||
|
|
||||||
|
// Establish the object that gets returned to break out of a loop iteration.
|
||||||
|
var breaker = {};
|
||||||
|
|
||||||
|
// Save bytes in the minified (but not gzipped) version:
|
||||||
|
var ArrayProto = Array.prototype, ObjProto = Object.prototype, FuncProto = Function.prototype;
|
||||||
|
|
||||||
|
// Create quick reference variables for speed access to core prototypes.
|
||||||
|
var slice = ArrayProto.slice,
|
||||||
|
unshift = ArrayProto.unshift,
|
||||||
|
toString = ObjProto.toString,
|
||||||
|
hasOwnProperty = ObjProto.hasOwnProperty;
|
||||||
|
|
||||||
|
// All **ECMAScript 5** native function implementations that we hope to use
|
||||||
|
// are declared here.
|
||||||
|
var
|
||||||
|
nativeForEach = ArrayProto.forEach,
|
||||||
|
nativeMap = ArrayProto.map,
|
||||||
|
nativeReduce = ArrayProto.reduce,
|
||||||
|
nativeReduceRight = ArrayProto.reduceRight,
|
||||||
|
nativeFilter = ArrayProto.filter,
|
||||||
|
nativeEvery = ArrayProto.every,
|
||||||
|
nativeSome = ArrayProto.some,
|
||||||
|
nativeIndexOf = ArrayProto.indexOf,
|
||||||
|
nativeLastIndexOf = ArrayProto.lastIndexOf,
|
||||||
|
nativeIsArray = Array.isArray,
|
||||||
|
nativeKeys = Object.keys,
|
||||||
|
nativeBind = FuncProto.bind;
|
||||||
|
|
||||||
|
// Create a safe reference to the Underscore object for use below.
|
||||||
|
var _ = function(obj) { return new wrapper(obj); };
|
||||||
|
|
||||||
|
// Export the Underscore object for **Node.js**, with
|
||||||
|
// backwards-compatibility for the old `require()` API. If we're in
|
||||||
|
// the browser, add `_` as a global object via a string identifier,
|
||||||
|
// for Closure Compiler "advanced" mode.
|
||||||
|
if (typeof exports !== 'undefined') {
|
||||||
|
if (typeof module !== 'undefined' && module.exports) {
|
||||||
|
exports = module.exports = _;
|
||||||
|
}
|
||||||
|
exports._ = _;
|
||||||
|
} else {
|
||||||
|
root['_'] = _;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Current version.
|
||||||
|
_.VERSION = '1.3.1';
|
||||||
|
|
||||||
|
// Collection Functions
|
||||||
|
// --------------------
|
||||||
|
|
||||||
|
// The cornerstone, an `each` implementation, aka `forEach`.
|
||||||
|
// Handles objects with the built-in `forEach`, arrays, and raw objects.
|
||||||
|
// Delegates to **ECMAScript 5**'s native `forEach` if available.
|
||||||
|
var each = _.each = _.forEach = function(obj, iterator, context) {
|
||||||
|
if (obj == null) return;
|
||||||
|
if (nativeForEach && obj.forEach === nativeForEach) {
|
||||||
|
obj.forEach(iterator, context);
|
||||||
|
} else if (obj.length === +obj.length) {
|
||||||
|
for (var i = 0, l = obj.length; i < l; i++) {
|
||||||
|
if (i in obj && iterator.call(context, obj[i], i, obj) === breaker) return;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
for (var key in obj) {
|
||||||
|
if (_.has(obj, key)) {
|
||||||
|
if (iterator.call(context, obj[key], key, obj) === breaker) return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Return the results of applying the iterator to each element.
|
||||||
|
// Delegates to **ECMAScript 5**'s native `map` if available.
|
||||||
|
_.map = _.collect = function(obj, iterator, context) {
|
||||||
|
var results = [];
|
||||||
|
if (obj == null) return results;
|
||||||
|
if (nativeMap && obj.map === nativeMap) return obj.map(iterator, context);
|
||||||
|
each(obj, function(value, index, list) {
|
||||||
|
results[results.length] = iterator.call(context, value, index, list);
|
||||||
|
});
|
||||||
|
if (obj.length === +obj.length) results.length = obj.length;
|
||||||
|
return results;
|
||||||
|
};
|
||||||
|
|
||||||
|
// **Reduce** builds up a single result from a list of values, aka `inject`,
|
||||||
|
// or `foldl`. Delegates to **ECMAScript 5**'s native `reduce` if available.
|
||||||
|
_.reduce = _.foldl = _.inject = function(obj, iterator, memo, context) {
|
||||||
|
var initial = arguments.length > 2;
|
||||||
|
if (obj == null) obj = [];
|
||||||
|
if (nativeReduce && obj.reduce === nativeReduce) {
|
||||||
|
if (context) iterator = _.bind(iterator, context);
|
||||||
|
return initial ? obj.reduce(iterator, memo) : obj.reduce(iterator);
|
||||||
|
}
|
||||||
|
each(obj, function(value, index, list) {
|
||||||
|
if (!initial) {
|
||||||
|
memo = value;
|
||||||
|
initial = true;
|
||||||
|
} else {
|
||||||
|
memo = iterator.call(context, memo, value, index, list);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
if (!initial) throw new TypeError('Reduce of empty array with no initial value');
|
||||||
|
return memo;
|
||||||
|
};
|
||||||
|
|
||||||
|
// The right-associative version of reduce, also known as `foldr`.
|
||||||
|
// Delegates to **ECMAScript 5**'s native `reduceRight` if available.
|
||||||
|
_.reduceRight = _.foldr = function(obj, iterator, memo, context) {
|
||||||
|
var initial = arguments.length > 2;
|
||||||
|
if (obj == null) obj = [];
|
||||||
|
if (nativeReduceRight && obj.reduceRight === nativeReduceRight) {
|
||||||
|
if (context) iterator = _.bind(iterator, context);
|
||||||
|
return initial ? obj.reduceRight(iterator, memo) : obj.reduceRight(iterator);
|
||||||
|
}
|
||||||
|
var reversed = _.toArray(obj).reverse();
|
||||||
|
if (context && !initial) iterator = _.bind(iterator, context);
|
||||||
|
return initial ? _.reduce(reversed, iterator, memo, context) : _.reduce(reversed, iterator);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Return the first value which passes a truth test. Aliased as `detect`.
|
||||||
|
_.find = _.detect = function(obj, iterator, context) {
|
||||||
|
var result;
|
||||||
|
any(obj, function(value, index, list) {
|
||||||
|
if (iterator.call(context, value, index, list)) {
|
||||||
|
result = value;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Return all the elements that pass a truth test.
|
||||||
|
// Delegates to **ECMAScript 5**'s native `filter` if available.
|
||||||
|
// Aliased as `select`.
|
||||||
|
_.filter = _.select = function(obj, iterator, context) {
|
||||||
|
var results = [];
|
||||||
|
if (obj == null) return results;
|
||||||
|
if (nativeFilter && obj.filter === nativeFilter) return obj.filter(iterator, context);
|
||||||
|
each(obj, function(value, index, list) {
|
||||||
|
if (iterator.call(context, value, index, list)) results[results.length] = value;
|
||||||
|
});
|
||||||
|
return results;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Return all the elements for which a truth test fails.
|
||||||
|
_.reject = function(obj, iterator, context) {
|
||||||
|
var results = [];
|
||||||
|
if (obj == null) return results;
|
||||||
|
each(obj, function(value, index, list) {
|
||||||
|
if (!iterator.call(context, value, index, list)) results[results.length] = value;
|
||||||
|
});
|
||||||
|
return results;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Determine whether all of the elements match a truth test.
|
||||||
|
// Delegates to **ECMAScript 5**'s native `every` if available.
|
||||||
|
// Aliased as `all`.
|
||||||
|
_.every = _.all = function(obj, iterator, context) {
|
||||||
|
var result = true;
|
||||||
|
if (obj == null) return result;
|
||||||
|
if (nativeEvery && obj.every === nativeEvery) return obj.every(iterator, context);
|
||||||
|
each(obj, function(value, index, list) {
|
||||||
|
if (!(result = result && iterator.call(context, value, index, list))) return breaker;
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Determine if at least one element in the object matches a truth test.
|
||||||
|
// Delegates to **ECMAScript 5**'s native `some` if available.
|
||||||
|
// Aliased as `any`.
|
||||||
|
var any = _.some = _.any = function(obj, iterator, context) {
|
||||||
|
iterator || (iterator = _.identity);
|
||||||
|
var result = false;
|
||||||
|
if (obj == null) return result;
|
||||||
|
if (nativeSome && obj.some === nativeSome) return obj.some(iterator, context);
|
||||||
|
each(obj, function(value, index, list) {
|
||||||
|
if (result || (result = iterator.call(context, value, index, list))) return breaker;
|
||||||
|
});
|
||||||
|
return !!result;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Determine if a given value is included in the array or object using `===`.
|
||||||
|
// Aliased as `contains`.
|
||||||
|
_.include = _.contains = function(obj, target) {
|
||||||
|
var found = false;
|
||||||
|
if (obj == null) return found;
|
||||||
|
if (nativeIndexOf && obj.indexOf === nativeIndexOf) return obj.indexOf(target) != -1;
|
||||||
|
found = any(obj, function(value) {
|
||||||
|
return value === target;
|
||||||
|
});
|
||||||
|
return found;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Invoke a method (with arguments) on every item in a collection.
|
||||||
|
_.invoke = function(obj, method) {
|
||||||
|
var args = slice.call(arguments, 2);
|
||||||
|
return _.map(obj, function(value) {
|
||||||
|
return (_.isFunction(method) ? method || value : value[method]).apply(value, args);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// Convenience version of a common use case of `map`: fetching a property.
|
||||||
|
_.pluck = function(obj, key) {
|
||||||
|
return _.map(obj, function(value){ return value[key]; });
|
||||||
|
};
|
||||||
|
|
||||||
|
// Return the maximum element or (element-based computation).
|
||||||
|
_.max = function(obj, iterator, context) {
|
||||||
|
if (!iterator && _.isArray(obj)) return Math.max.apply(Math, obj);
|
||||||
|
if (!iterator && _.isEmpty(obj)) return -Infinity;
|
||||||
|
var result = {computed : -Infinity};
|
||||||
|
each(obj, function(value, index, list) {
|
||||||
|
var computed = iterator ? iterator.call(context, value, index, list) : value;
|
||||||
|
computed >= result.computed && (result = {value : value, computed : computed});
|
||||||
|
});
|
||||||
|
return result.value;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Return the minimum element (or element-based computation).
|
||||||
|
_.min = function(obj, iterator, context) {
|
||||||
|
if (!iterator && _.isArray(obj)) return Math.min.apply(Math, obj);
|
||||||
|
if (!iterator && _.isEmpty(obj)) return Infinity;
|
||||||
|
var result = {computed : Infinity};
|
||||||
|
each(obj, function(value, index, list) {
|
||||||
|
var computed = iterator ? iterator.call(context, value, index, list) : value;
|
||||||
|
computed < result.computed && (result = {value : value, computed : computed});
|
||||||
|
});
|
||||||
|
return result.value;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Shuffle an array.
|
||||||
|
_.shuffle = function(obj) {
|
||||||
|
var shuffled = [], rand;
|
||||||
|
each(obj, function(value, index, list) {
|
||||||
|
if (index == 0) {
|
||||||
|
shuffled[0] = value;
|
||||||
|
} else {
|
||||||
|
rand = Math.floor(Math.random() * (index + 1));
|
||||||
|
shuffled[index] = shuffled[rand];
|
||||||
|
shuffled[rand] = value;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return shuffled;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Sort the object's values by a criterion produced by an iterator.
|
||||||
|
_.sortBy = function(obj, iterator, context) {
|
||||||
|
return _.pluck(_.map(obj, function(value, index, list) {
|
||||||
|
return {
|
||||||
|
value : value,
|
||||||
|
criteria : iterator.call(context, value, index, list)
|
||||||
|
};
|
||||||
|
}).sort(function(left, right) {
|
||||||
|
var a = left.criteria, b = right.criteria;
|
||||||
|
return a < b ? -1 : a > b ? 1 : 0;
|
||||||
|
}), 'value');
|
||||||
|
};
|
||||||
|
|
||||||
|
// Groups the object's values by a criterion. Pass either a string attribute
|
||||||
|
// to group by, or a function that returns the criterion.
|
||||||
|
_.groupBy = function(obj, val) {
|
||||||
|
var result = {};
|
||||||
|
var iterator = _.isFunction(val) ? val : function(obj) { return obj[val]; };
|
||||||
|
each(obj, function(value, index) {
|
||||||
|
var key = iterator(value, index);
|
||||||
|
(result[key] || (result[key] = [])).push(value);
|
||||||
|
});
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Use a comparator function to figure out at what index an object should
|
||||||
|
// be inserted so as to maintain order. Uses binary search.
|
||||||
|
_.sortedIndex = function(array, obj, iterator) {
|
||||||
|
iterator || (iterator = _.identity);
|
||||||
|
var low = 0, high = array.length;
|
||||||
|
while (low < high) {
|
||||||
|
var mid = (low + high) >> 1;
|
||||||
|
iterator(array[mid]) < iterator(obj) ? low = mid + 1 : high = mid;
|
||||||
|
}
|
||||||
|
return low;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Safely convert anything iterable into a real, live array.
|
||||||
|
_.toArray = function(iterable) {
|
||||||
|
if (!iterable) return [];
|
||||||
|
if (iterable.toArray) return iterable.toArray();
|
||||||
|
if (_.isArray(iterable)) return slice.call(iterable);
|
||||||
|
if (_.isArguments(iterable)) return slice.call(iterable);
|
||||||
|
return _.values(iterable);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Return the number of elements in an object.
|
||||||
|
_.size = function(obj) {
|
||||||
|
return _.toArray(obj).length;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Array Functions
|
||||||
|
// ---------------
|
||||||
|
|
||||||
|
// Get the first element of an array. Passing **n** will return the first N
|
||||||
|
// values in the array. Aliased as `head`. The **guard** check allows it to work
|
||||||
|
// with `_.map`.
|
||||||
|
_.first = _.head = function(array, n, guard) {
|
||||||
|
return (n != null) && !guard ? slice.call(array, 0, n) : array[0];
|
||||||
|
};
|
||||||
|
|
||||||
|
// Returns everything but the last entry of the array. Especcialy useful on
|
||||||
|
// the arguments object. Passing **n** will return all the values in
|
||||||
|
// the array, excluding the last N. The **guard** check allows it to work with
|
||||||
|
// `_.map`.
|
||||||
|
_.initial = function(array, n, guard) {
|
||||||
|
return slice.call(array, 0, array.length - ((n == null) || guard ? 1 : n));
|
||||||
|
};
|
||||||
|
|
||||||
|
// Get the last element of an array. Passing **n** will return the last N
|
||||||
|
// values in the array. The **guard** check allows it to work with `_.map`.
|
||||||
|
_.last = function(array, n, guard) {
|
||||||
|
if ((n != null) && !guard) {
|
||||||
|
return slice.call(array, Math.max(array.length - n, 0));
|
||||||
|
} else {
|
||||||
|
return array[array.length - 1];
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
// Returns everything but the first entry of the array. Aliased as `tail`.
|
||||||
|
// Especially useful on the arguments object. Passing an **index** will return
|
||||||
|
// the rest of the values in the array from that index onward. The **guard**
|
||||||
|
// check allows it to work with `_.map`.
|
||||||
|
_.rest = _.tail = function(array, index, guard) {
|
||||||
|
return slice.call(array, (index == null) || guard ? 1 : index);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Trim out all falsy values from an array.
|
||||||
|
_.compact = function(array) {
|
||||||
|
return _.filter(array, function(value){ return !!value; });
|
||||||
|
};
|
||||||
|
|
||||||
|
// Return a completely flattened version of an array.
|
||||||
|
_.flatten = function(array, shallow) {
|
||||||
|
return _.reduce(array, function(memo, value) {
|
||||||
|
if (_.isArray(value)) return memo.concat(shallow ? value : _.flatten(value));
|
||||||
|
memo[memo.length] = value;
|
||||||
|
return memo;
|
||||||
|
}, []);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Return a version of the array that does not contain the specified value(s).
|
||||||
|
_.without = function(array) {
|
||||||
|
return _.difference(array, slice.call(arguments, 1));
|
||||||
|
};
|
||||||
|
|
||||||
|
// Produce a duplicate-free version of the array. If the array has already
|
||||||
|
// been sorted, you have the option of using a faster algorithm.
|
||||||
|
// Aliased as `unique`.
|
||||||
|
_.uniq = _.unique = function(array, isSorted, iterator) {
|
||||||
|
var initial = iterator ? _.map(array, iterator) : array;
|
||||||
|
var result = [];
|
||||||
|
_.reduce(initial, function(memo, el, i) {
|
||||||
|
if (0 == i || (isSorted === true ? _.last(memo) != el : !_.include(memo, el))) {
|
||||||
|
memo[memo.length] = el;
|
||||||
|
result[result.length] = array[i];
|
||||||
|
}
|
||||||
|
return memo;
|
||||||
|
}, []);
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Produce an array that contains the union: each distinct element from all of
|
||||||
|
// the passed-in arrays.
|
||||||
|
_.union = function() {
|
||||||
|
return _.uniq(_.flatten(arguments, true));
|
||||||
|
};
|
||||||
|
|
||||||
|
// Produce an array that contains every item shared between all the
|
||||||
|
// passed-in arrays. (Aliased as "intersect" for back-compat.)
|
||||||
|
_.intersection = _.intersect = function(array) {
|
||||||
|
var rest = slice.call(arguments, 1);
|
||||||
|
return _.filter(_.uniq(array), function(item) {
|
||||||
|
return _.every(rest, function(other) {
|
||||||
|
return _.indexOf(other, item) >= 0;
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// Take the difference between one array and a number of other arrays.
|
||||||
|
// Only the elements present in just the first array will remain.
|
||||||
|
_.difference = function(array) {
|
||||||
|
var rest = _.flatten(slice.call(arguments, 1));
|
||||||
|
return _.filter(array, function(value){ return !_.include(rest, value); });
|
||||||
|
};
|
||||||
|
|
||||||
|
// Zip together multiple lists into a single array -- elements that share
|
||||||
|
// an index go together.
|
||||||
|
_.zip = function() {
|
||||||
|
var args = slice.call(arguments);
|
||||||
|
var length = _.max(_.pluck(args, 'length'));
|
||||||
|
var results = new Array(length);
|
||||||
|
for (var i = 0; i < length; i++) results[i] = _.pluck(args, "" + i);
|
||||||
|
return results;
|
||||||
|
};
|
||||||
|
|
||||||
|
// If the browser doesn't supply us with indexOf (I'm looking at you, **MSIE**),
|
||||||
|
// we need this function. Return the position of the first occurrence of an
|
||||||
|
// item in an array, or -1 if the item is not included in the array.
|
||||||
|
// Delegates to **ECMAScript 5**'s native `indexOf` if available.
|
||||||
|
// If the array is large and already in sort order, pass `true`
|
||||||
|
// for **isSorted** to use binary search.
|
||||||
|
_.indexOf = function(array, item, isSorted) {
|
||||||
|
if (array == null) return -1;
|
||||||
|
var i, l;
|
||||||
|
if (isSorted) {
|
||||||
|
i = _.sortedIndex(array, item);
|
||||||
|
return array[i] === item ? i : -1;
|
||||||
|
}
|
||||||
|
if (nativeIndexOf && array.indexOf === nativeIndexOf) return array.indexOf(item);
|
||||||
|
for (i = 0, l = array.length; i < l; i++) if (i in array && array[i] === item) return i;
|
||||||
|
return -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Delegates to **ECMAScript 5**'s native `lastIndexOf` if available.
|
||||||
|
_.lastIndexOf = function(array, item) {
|
||||||
|
if (array == null) return -1;
|
||||||
|
if (nativeLastIndexOf && array.lastIndexOf === nativeLastIndexOf) return array.lastIndexOf(item);
|
||||||
|
var i = array.length;
|
||||||
|
while (i--) if (i in array && array[i] === item) return i;
|
||||||
|
return -1;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Generate an integer Array containing an arithmetic progression. A port of
|
||||||
|
// the native Python `range()` function. See
|
||||||
|
// [the Python documentation](http://docs.python.org/library/functions.html#range).
|
||||||
|
_.range = function(start, stop, step) {
|
||||||
|
if (arguments.length <= 1) {
|
||||||
|
stop = start || 0;
|
||||||
|
start = 0;
|
||||||
|
}
|
||||||
|
step = arguments[2] || 1;
|
||||||
|
|
||||||
|
var len = Math.max(Math.ceil((stop - start) / step), 0);
|
||||||
|
var idx = 0;
|
||||||
|
var range = new Array(len);
|
||||||
|
|
||||||
|
while(idx < len) {
|
||||||
|
range[idx++] = start;
|
||||||
|
start += step;
|
||||||
|
}
|
||||||
|
|
||||||
|
return range;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Function (ahem) Functions
|
||||||
|
// ------------------
|
||||||
|
|
||||||
|
// Reusable constructor function for prototype setting.
|
||||||
|
var ctor = function(){};
|
||||||
|
|
||||||
|
// Create a function bound to a given object (assigning `this`, and arguments,
|
||||||
|
// optionally). Binding with arguments is also known as `curry`.
|
||||||
|
// Delegates to **ECMAScript 5**'s native `Function.bind` if available.
|
||||||
|
// We check for `func.bind` first, to fail fast when `func` is undefined.
|
||||||
|
_.bind = function bind(func, context) {
|
||||||
|
var bound, args;
|
||||||
|
if (func.bind === nativeBind && nativeBind) return nativeBind.apply(func, slice.call(arguments, 1));
|
||||||
|
if (!_.isFunction(func)) throw new TypeError;
|
||||||
|
args = slice.call(arguments, 2);
|
||||||
|
return bound = function() {
|
||||||
|
if (!(this instanceof bound)) return func.apply(context, args.concat(slice.call(arguments)));
|
||||||
|
ctor.prototype = func.prototype;
|
||||||
|
var self = new ctor;
|
||||||
|
var result = func.apply(self, args.concat(slice.call(arguments)));
|
||||||
|
if (Object(result) === result) return result;
|
||||||
|
return self;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Bind all of an object's methods to that object. Useful for ensuring that
|
||||||
|
// all callbacks defined on an object belong to it.
|
||||||
|
_.bindAll = function(obj) {
|
||||||
|
var funcs = slice.call(arguments, 1);
|
||||||
|
if (funcs.length == 0) funcs = _.functions(obj);
|
||||||
|
each(funcs, function(f) { obj[f] = _.bind(obj[f], obj); });
|
||||||
|
return obj;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Memoize an expensive function by storing its results.
|
||||||
|
_.memoize = function(func, hasher) {
|
||||||
|
var memo = {};
|
||||||
|
hasher || (hasher = _.identity);
|
||||||
|
return function() {
|
||||||
|
var key = hasher.apply(this, arguments);
|
||||||
|
return _.has(memo, key) ? memo[key] : (memo[key] = func.apply(this, arguments));
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Delays a function for the given number of milliseconds, and then calls
|
||||||
|
// it with the arguments supplied.
|
||||||
|
_.delay = function(func, wait) {
|
||||||
|
var args = slice.call(arguments, 2);
|
||||||
|
return setTimeout(function(){ return func.apply(func, args); }, wait);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Defers a function, scheduling it to run after the current call stack has
|
||||||
|
// cleared.
|
||||||
|
_.defer = function(func) {
|
||||||
|
return _.delay.apply(_, [func, 1].concat(slice.call(arguments, 1)));
|
||||||
|
};
|
||||||
|
|
||||||
|
// Returns a function, that, when invoked, will only be triggered at most once
|
||||||
|
// during a given window of time.
|
||||||
|
_.throttle = function(func, wait) {
|
||||||
|
var context, args, timeout, throttling, more;
|
||||||
|
var whenDone = _.debounce(function(){ more = throttling = false; }, wait);
|
||||||
|
return function() {
|
||||||
|
context = this; args = arguments;
|
||||||
|
var later = function() {
|
||||||
|
timeout = null;
|
||||||
|
if (more) func.apply(context, args);
|
||||||
|
whenDone();
|
||||||
|
};
|
||||||
|
if (!timeout) timeout = setTimeout(later, wait);
|
||||||
|
if (throttling) {
|
||||||
|
more = true;
|
||||||
|
} else {
|
||||||
|
func.apply(context, args);
|
||||||
|
}
|
||||||
|
whenDone();
|
||||||
|
throttling = true;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Returns a function, that, as long as it continues to be invoked, will not
|
||||||
|
// be triggered. The function will be called after it stops being called for
|
||||||
|
// N milliseconds.
|
||||||
|
_.debounce = function(func, wait) {
|
||||||
|
var timeout;
|
||||||
|
return function() {
|
||||||
|
var context = this, args = arguments;
|
||||||
|
var later = function() {
|
||||||
|
timeout = null;
|
||||||
|
func.apply(context, args);
|
||||||
|
};
|
||||||
|
clearTimeout(timeout);
|
||||||
|
timeout = setTimeout(later, wait);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Returns a function that will be executed at most one time, no matter how
|
||||||
|
// often you call it. Useful for lazy initialization.
|
||||||
|
_.once = function(func) {
|
||||||
|
var ran = false, memo;
|
||||||
|
return function() {
|
||||||
|
if (ran) return memo;
|
||||||
|
ran = true;
|
||||||
|
return memo = func.apply(this, arguments);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Returns the first function passed as an argument to the second,
|
||||||
|
// allowing you to adjust arguments, run code before and after, and
|
||||||
|
// conditionally execute the original function.
|
||||||
|
_.wrap = function(func, wrapper) {
|
||||||
|
return function() {
|
||||||
|
var args = [func].concat(slice.call(arguments, 0));
|
||||||
|
return wrapper.apply(this, args);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Returns a function that is the composition of a list of functions, each
|
||||||
|
// consuming the return value of the function that follows.
|
||||||
|
_.compose = function() {
|
||||||
|
var funcs = arguments;
|
||||||
|
return function() {
|
||||||
|
var args = arguments;
|
||||||
|
for (var i = funcs.length - 1; i >= 0; i--) {
|
||||||
|
args = [funcs[i].apply(this, args)];
|
||||||
|
}
|
||||||
|
return args[0];
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Returns a function that will only be executed after being called N times.
|
||||||
|
_.after = function(times, func) {
|
||||||
|
if (times <= 0) return func();
|
||||||
|
return function() {
|
||||||
|
if (--times < 1) { return func.apply(this, arguments); }
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Object Functions
|
||||||
|
// ----------------
|
||||||
|
|
||||||
|
// Retrieve the names of an object's properties.
|
||||||
|
// Delegates to **ECMAScript 5**'s native `Object.keys`
|
||||||
|
_.keys = nativeKeys || function(obj) {
|
||||||
|
if (obj !== Object(obj)) throw new TypeError('Invalid object');
|
||||||
|
var keys = [];
|
||||||
|
for (var key in obj) if (_.has(obj, key)) keys[keys.length] = key;
|
||||||
|
return keys;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Retrieve the values of an object's properties.
|
||||||
|
_.values = function(obj) {
|
||||||
|
return _.map(obj, _.identity);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Return a sorted list of the function names available on the object.
|
||||||
|
// Aliased as `methods`
|
||||||
|
_.functions = _.methods = function(obj) {
|
||||||
|
var names = [];
|
||||||
|
for (var key in obj) {
|
||||||
|
if (_.isFunction(obj[key])) names.push(key);
|
||||||
|
}
|
||||||
|
return names.sort();
|
||||||
|
};
|
||||||
|
|
||||||
|
// Extend a given object with all the properties in passed-in object(s).
|
||||||
|
_.extend = function(obj) {
|
||||||
|
each(slice.call(arguments, 1), function(source) {
|
||||||
|
for (var prop in source) {
|
||||||
|
obj[prop] = source[prop];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return obj;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Fill in a given object with default properties.
|
||||||
|
_.defaults = function(obj) {
|
||||||
|
each(slice.call(arguments, 1), function(source) {
|
||||||
|
for (var prop in source) {
|
||||||
|
if (obj[prop] == null) obj[prop] = source[prop];
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return obj;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Create a (shallow-cloned) duplicate of an object.
|
||||||
|
_.clone = function(obj) {
|
||||||
|
if (!_.isObject(obj)) return obj;
|
||||||
|
return _.isArray(obj) ? obj.slice() : _.extend({}, obj);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Invokes interceptor with the obj, and then returns obj.
|
||||||
|
// The primary purpose of this method is to "tap into" a method chain, in
|
||||||
|
// order to perform operations on intermediate results within the chain.
|
||||||
|
_.tap = function(obj, interceptor) {
|
||||||
|
interceptor(obj);
|
||||||
|
return obj;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Internal recursive comparison function.
|
||||||
|
function eq(a, b, stack) {
|
||||||
|
// Identical objects are equal. `0 === -0`, but they aren't identical.
|
||||||
|
// See the Harmony `egal` proposal: http://wiki.ecmascript.org/doku.php?id=harmony:egal.
|
||||||
|
if (a === b) return a !== 0 || 1 / a == 1 / b;
|
||||||
|
// A strict comparison is necessary because `null == undefined`.
|
||||||
|
if (a == null || b == null) return a === b;
|
||||||
|
// Unwrap any wrapped objects.
|
||||||
|
if (a._chain) a = a._wrapped;
|
||||||
|
if (b._chain) b = b._wrapped;
|
||||||
|
// Invoke a custom `isEqual` method if one is provided.
|
||||||
|
if (a.isEqual && _.isFunction(a.isEqual)) return a.isEqual(b);
|
||||||
|
if (b.isEqual && _.isFunction(b.isEqual)) return b.isEqual(a);
|
||||||
|
// Compare `[[Class]]` names.
|
||||||
|
var className = toString.call(a);
|
||||||
|
if (className != toString.call(b)) return false;
|
||||||
|
switch (className) {
|
||||||
|
// Strings, numbers, dates, and booleans are compared by value.
|
||||||
|
case '[object String]':
|
||||||
|
// Primitives and their corresponding object wrappers are equivalent; thus, `"5"` is
|
||||||
|
// equivalent to `new String("5")`.
|
||||||
|
return a == String(b);
|
||||||
|
case '[object Number]':
|
||||||
|
// `NaN`s are equivalent, but non-reflexive. An `egal` comparison is performed for
|
||||||
|
// other numeric values.
|
||||||
|
return a != +a ? b != +b : (a == 0 ? 1 / a == 1 / b : a == +b);
|
||||||
|
case '[object Date]':
|
||||||
|
case '[object Boolean]':
|
||||||
|
// Coerce dates and booleans to numeric primitive values. Dates are compared by their
|
||||||
|
// millisecond representations. Note that invalid dates with millisecond representations
|
||||||
|
// of `NaN` are not equivalent.
|
||||||
|
return +a == +b;
|
||||||
|
// RegExps are compared by their source patterns and flags.
|
||||||
|
case '[object RegExp]':
|
||||||
|
return a.source == b.source &&
|
||||||
|
a.global == b.global &&
|
||||||
|
a.multiline == b.multiline &&
|
||||||
|
a.ignoreCase == b.ignoreCase;
|
||||||
|
}
|
||||||
|
if (typeof a != 'object' || typeof b != 'object') return false;
|
||||||
|
// Assume equality for cyclic structures. The algorithm for detecting cyclic
|
||||||
|
// structures is adapted from ES 5.1 section 15.12.3, abstract operation `JO`.
|
||||||
|
var length = stack.length;
|
||||||
|
while (length--) {
|
||||||
|
// Linear search. Performance is inversely proportional to the number of
|
||||||
|
// unique nested structures.
|
||||||
|
if (stack[length] == a) return true;
|
||||||
|
}
|
||||||
|
// Add the first object to the stack of traversed objects.
|
||||||
|
stack.push(a);
|
||||||
|
var size = 0, result = true;
|
||||||
|
// Recursively compare objects and arrays.
|
||||||
|
if (className == '[object Array]') {
|
||||||
|
// Compare array lengths to determine if a deep comparison is necessary.
|
||||||
|
size = a.length;
|
||||||
|
result = size == b.length;
|
||||||
|
if (result) {
|
||||||
|
// Deep compare the contents, ignoring non-numeric properties.
|
||||||
|
while (size--) {
|
||||||
|
// Ensure commutative equality for sparse arrays.
|
||||||
|
if (!(result = size in a == size in b && eq(a[size], b[size], stack))) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// Objects with different constructors are not equivalent.
|
||||||
|
if ('constructor' in a != 'constructor' in b || a.constructor != b.constructor) return false;
|
||||||
|
// Deep compare objects.
|
||||||
|
for (var key in a) {
|
||||||
|
if (_.has(a, key)) {
|
||||||
|
// Count the expected number of properties.
|
||||||
|
size++;
|
||||||
|
// Deep compare each member.
|
||||||
|
if (!(result = _.has(b, key) && eq(a[key], b[key], stack))) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Ensure that both objects contain the same number of properties.
|
||||||
|
if (result) {
|
||||||
|
for (key in b) {
|
||||||
|
if (_.has(b, key) && !(size--)) break;
|
||||||
|
}
|
||||||
|
result = !size;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Remove the first object from the stack of traversed objects.
|
||||||
|
stack.pop();
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Perform a deep comparison to check if two objects are equal.
|
||||||
|
_.isEqual = function(a, b) {
|
||||||
|
return eq(a, b, []);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Is a given array, string, or object empty?
|
||||||
|
// An "empty" object has no enumerable own-properties.
|
||||||
|
_.isEmpty = function(obj) {
|
||||||
|
if (_.isArray(obj) || _.isString(obj)) return obj.length === 0;
|
||||||
|
for (var key in obj) if (_.has(obj, key)) return false;
|
||||||
|
return true;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Is a given value a DOM element?
|
||||||
|
_.isElement = function(obj) {
|
||||||
|
return !!(obj && obj.nodeType == 1);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Is a given value an array?
|
||||||
|
// Delegates to ECMA5's native Array.isArray
|
||||||
|
_.isArray = nativeIsArray || function(obj) {
|
||||||
|
return toString.call(obj) == '[object Array]';
|
||||||
|
};
|
||||||
|
|
||||||
|
// Is a given variable an object?
|
||||||
|
_.isObject = function(obj) {
|
||||||
|
return obj === Object(obj);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Is a given variable an arguments object?
|
||||||
|
_.isArguments = function(obj) {
|
||||||
|
return toString.call(obj) == '[object Arguments]';
|
||||||
|
};
|
||||||
|
if (!_.isArguments(arguments)) {
|
||||||
|
_.isArguments = function(obj) {
|
||||||
|
return !!(obj && _.has(obj, 'callee'));
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
// Is a given value a function?
|
||||||
|
_.isFunction = function(obj) {
|
||||||
|
return toString.call(obj) == '[object Function]';
|
||||||
|
};
|
||||||
|
|
||||||
|
// Is a given value a string?
|
||||||
|
_.isString = function(obj) {
|
||||||
|
return toString.call(obj) == '[object String]';
|
||||||
|
};
|
||||||
|
|
||||||
|
// Is a given value a number?
|
||||||
|
_.isNumber = function(obj) {
|
||||||
|
return toString.call(obj) == '[object Number]';
|
||||||
|
};
|
||||||
|
|
||||||
|
// Is the given value `NaN`?
|
||||||
|
_.isNaN = function(obj) {
|
||||||
|
// `NaN` is the only value for which `===` is not reflexive.
|
||||||
|
return obj !== obj;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Is a given value a boolean?
|
||||||
|
_.isBoolean = function(obj) {
|
||||||
|
return obj === true || obj === false || toString.call(obj) == '[object Boolean]';
|
||||||
|
};
|
||||||
|
|
||||||
|
// Is a given value a date?
|
||||||
|
_.isDate = function(obj) {
|
||||||
|
return toString.call(obj) == '[object Date]';
|
||||||
|
};
|
||||||
|
|
||||||
|
// Is the given value a regular expression?
|
||||||
|
_.isRegExp = function(obj) {
|
||||||
|
return toString.call(obj) == '[object RegExp]';
|
||||||
|
};
|
||||||
|
|
||||||
|
// Is a given value equal to null?
|
||||||
|
_.isNull = function(obj) {
|
||||||
|
return obj === null;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Is a given variable undefined?
|
||||||
|
_.isUndefined = function(obj) {
|
||||||
|
return obj === void 0;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Has own property?
|
||||||
|
_.has = function(obj, key) {
|
||||||
|
return hasOwnProperty.call(obj, key);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Utility Functions
|
||||||
|
// -----------------
|
||||||
|
|
||||||
|
// Run Underscore.js in *noConflict* mode, returning the `_` variable to its
|
||||||
|
// previous owner. Returns a reference to the Underscore object.
|
||||||
|
_.noConflict = function() {
|
||||||
|
root._ = previousUnderscore;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Keep the identity function around for default iterators.
|
||||||
|
_.identity = function(value) {
|
||||||
|
return value;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Run a function **n** times.
|
||||||
|
_.times = function (n, iterator, context) {
|
||||||
|
for (var i = 0; i < n; i++) iterator.call(context, i);
|
||||||
|
};
|
||||||
|
|
||||||
|
// Escape a string for HTML interpolation.
|
||||||
|
_.escape = function(string) {
|
||||||
|
return (''+string).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"').replace(/'/g, ''').replace(/\//g,'/');
|
||||||
|
};
|
||||||
|
|
||||||
|
// Add your own custom functions to the Underscore object, ensuring that
|
||||||
|
// they're correctly added to the OOP wrapper as well.
|
||||||
|
_.mixin = function(obj) {
|
||||||
|
each(_.functions(obj), function(name){
|
||||||
|
addToWrapper(name, _[name] = obj[name]);
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
// Generate a unique integer id (unique within the entire client session).
|
||||||
|
// Useful for temporary DOM ids.
|
||||||
|
var idCounter = 0;
|
||||||
|
_.uniqueId = function(prefix) {
|
||||||
|
var id = idCounter++;
|
||||||
|
return prefix ? prefix + id : id;
|
||||||
|
};
|
||||||
|
|
||||||
|
// By default, Underscore uses ERB-style template delimiters, change the
|
||||||
|
// following template settings to use alternative delimiters.
|
||||||
|
_.templateSettings = {
|
||||||
|
evaluate : /<%([\s\S]+?)%>/g,
|
||||||
|
interpolate : /<%=([\s\S]+?)%>/g,
|
||||||
|
escape : /<%-([\s\S]+?)%>/g
|
||||||
|
};
|
||||||
|
|
||||||
|
// When customizing `templateSettings`, if you don't want to define an
|
||||||
|
// interpolation, evaluation or escaping regex, we need one that is
|
||||||
|
// guaranteed not to match.
|
||||||
|
var noMatch = /.^/;
|
||||||
|
|
||||||
|
// Within an interpolation, evaluation, or escaping, remove HTML escaping
|
||||||
|
// that had been previously added.
|
||||||
|
var unescape = function(code) {
|
||||||
|
return code.replace(/\\\\/g, '\\').replace(/\\'/g, "'");
|
||||||
|
};
|
||||||
|
|
||||||
|
// JavaScript micro-templating, similar to John Resig's implementation.
|
||||||
|
// Underscore templating handles arbitrary delimiters, preserves whitespace,
|
||||||
|
// and correctly escapes quotes within interpolated code.
|
||||||
|
_.template = function(str, data) {
|
||||||
|
var c = _.templateSettings;
|
||||||
|
var tmpl = 'var __p=[],print=function(){__p.push.apply(__p,arguments);};' +
|
||||||
|
'with(obj||{}){__p.push(\'' +
|
||||||
|
str.replace(/\\/g, '\\\\')
|
||||||
|
.replace(/'/g, "\\'")
|
||||||
|
.replace(c.escape || noMatch, function(match, code) {
|
||||||
|
return "',_.escape(" + unescape(code) + "),'";
|
||||||
|
})
|
||||||
|
.replace(c.interpolate || noMatch, function(match, code) {
|
||||||
|
return "'," + unescape(code) + ",'";
|
||||||
|
})
|
||||||
|
.replace(c.evaluate || noMatch, function(match, code) {
|
||||||
|
return "');" + unescape(code).replace(/[\r\n\t]/g, ' ') + ";__p.push('";
|
||||||
|
})
|
||||||
|
.replace(/\r/g, '\\r')
|
||||||
|
.replace(/\n/g, '\\n')
|
||||||
|
.replace(/\t/g, '\\t')
|
||||||
|
+ "');}return __p.join('');";
|
||||||
|
var func = new Function('obj', '_', tmpl);
|
||||||
|
if (data) return func(data, _);
|
||||||
|
return function(data) {
|
||||||
|
return func.call(this, data, _);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Add a "chain" function, which will delegate to the wrapper.
|
||||||
|
_.chain = function(obj) {
|
||||||
|
return _(obj).chain();
|
||||||
|
};
|
||||||
|
|
||||||
|
// The OOP Wrapper
|
||||||
|
// ---------------
|
||||||
|
|
||||||
|
// If Underscore is called as a function, it returns a wrapped object that
|
||||||
|
// can be used OO-style. This wrapper holds altered versions of all the
|
||||||
|
// underscore functions. Wrapped objects may be chained.
|
||||||
|
var wrapper = function(obj) { this._wrapped = obj; };
|
||||||
|
|
||||||
|
// Expose `wrapper.prototype` as `_.prototype`
|
||||||
|
_.prototype = wrapper.prototype;
|
||||||
|
|
||||||
|
// Helper function to continue chaining intermediate results.
|
||||||
|
var result = function(obj, chain) {
|
||||||
|
return chain ? _(obj).chain() : obj;
|
||||||
|
};
|
||||||
|
|
||||||
|
// A method to easily add functions to the OOP wrapper.
|
||||||
|
var addToWrapper = function(name, func) {
|
||||||
|
wrapper.prototype[name] = function() {
|
||||||
|
var args = slice.call(arguments);
|
||||||
|
unshift.call(args, this._wrapped);
|
||||||
|
return result(func.apply(_, args), this._chain);
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
// Add all of the Underscore functions to the wrapper object.
|
||||||
|
_.mixin(_);
|
||||||
|
|
||||||
|
// Add all mutator Array functions to the wrapper.
|
||||||
|
each(['pop', 'push', 'reverse', 'shift', 'sort', 'splice', 'unshift'], function(name) {
|
||||||
|
var method = ArrayProto[name];
|
||||||
|
wrapper.prototype[name] = function() {
|
||||||
|
var wrapped = this._wrapped;
|
||||||
|
method.apply(wrapped, arguments);
|
||||||
|
var length = wrapped.length;
|
||||||
|
if ((name == 'shift' || name == 'splice') && length === 0) delete wrapped[0];
|
||||||
|
return result(wrapped, this._chain);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
// Add all accessor Array functions to the wrapper.
|
||||||
|
each(['concat', 'join', 'slice'], function(name) {
|
||||||
|
var method = ArrayProto[name];
|
||||||
|
wrapper.prototype[name] = function() {
|
||||||
|
return result(method.apply(this._wrapped, arguments), this._chain);
|
||||||
|
};
|
||||||
|
});
|
||||||
|
|
||||||
|
// Start chaining a wrapped Underscore object.
|
||||||
|
wrapper.prototype.chain = function() {
|
||||||
|
this._chain = true;
|
||||||
|
return this;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Extracts the result from a wrapped and chained object.
|
||||||
|
wrapper.prototype.value = function() {
|
||||||
|
return this._wrapped;
|
||||||
|
};
|
||||||
|
|
||||||
|
}).call(this);
|
6
docs/v0.8/_static/underscore.js
Normal file
391
docs/v0.8/advanced.html
Normal file
@ -0,0 +1,391 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="REST API" href="api.html" /><link rel="prev" title="Service Integration" href="services.html" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.03.04"/>
|
||||||
|
<title>Advanced Configuration - GravityMon 0.8.0 documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=935aa2abcc5c1da4283d1dc201fb1f0add16d23a" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=25ceb02ed1c46dc30f2321ff83e92799f69dfdb9" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">GravityMon 0.8.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.8.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
|
||||||
|
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Advanced Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
<div class="section" id="advanced-configuration">
|
||||||
|
<h1>Advanced Configuration<a class="headerlink" href="#advanced-configuration" title="Permalink to this headline">#</a></h1>
|
||||||
|
<div class="section" id="format-editor">
|
||||||
|
<span id="id1"></span><h2>Format editor<a class="headerlink" href="#format-editor" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>To reduce the need for adding custom endpoints for various services there is an built in format editor that allows the user to customize the format being sent to the push target.</p>
|
||||||
|
<div class="admonition warning">
|
||||||
|
<p class="admonition-title">Warning</p>
|
||||||
|
<p>Since the format templates can be big this function can be quite slow on a small device such as the esp8266.</p>
|
||||||
|
</div>
|
||||||
|
<a class="reference internal image-reference" href="_images/format.png"><img alt="Format editor" src="_images/format.png" style="width: 800px;"/></a>
|
||||||
|
<p>You enter the format data in the text field and the test button will show an example on what the output would look like. If the data cannot be formatted in json it will just be displayed as a long string.
|
||||||
|
The save button will save the current formla and reload the data from the device.</p>
|
||||||
|
<div class="admonition tip">
|
||||||
|
<p class="admonition-title">Tip</p>
|
||||||
|
<p>If you save a blank string the default template will be loaded.</p>
|
||||||
|
</div>
|
||||||
|
<p>These are the format keys available for use in the format.</p>
|
||||||
|
<div class="table-wrapper"><table class="colwidths-given docutils align-default" id="id2">
|
||||||
|
<caption><span class="caption-text">Directory structure</span><a class="headerlink" href="#id2" title="Permalink to this table">#</a></caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 30%"/>
|
||||||
|
<col style="width: 50%"/>
|
||||||
|
<col style="width: 20%"/>
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr class="row-odd"><th class="head"><p>key</p></th>
|
||||||
|
<th class="head"><p>description</p></th>
|
||||||
|
<th class="head"><p>example</p></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr class="row-even"><td><p>${mdns}</p></td>
|
||||||
|
<td><p>Name of the device</p></td>
|
||||||
|
<td><p>gravmon2</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>${id}</p></td>
|
||||||
|
<td><p>Unique id of the device</p></td>
|
||||||
|
<td><p>e422a3</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>${sleep-interval}</p></td>
|
||||||
|
<td><p>Seconds between data is pushed</p></td>
|
||||||
|
<td><p>900</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>${temp}</p></td>
|
||||||
|
<td><p>Temperature in format configured on device, one decimal</p></td>
|
||||||
|
<td><p>21.2</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>${temp-c}</p></td>
|
||||||
|
<td><p>Temperature in C, one decimal</p></td>
|
||||||
|
<td><p>21.2</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>${temp-f}</p></td>
|
||||||
|
<td><p>Temperature in F, one decimal</p></td>
|
||||||
|
<td><p>58.0</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>${temp-unit}</p></td>
|
||||||
|
<td><p>Temperature format <cite>C</cite> or <cite>F</cite></p></td>
|
||||||
|
<td><p>C</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>${battery}</p></td>
|
||||||
|
<td><p>Battery voltage, two decimals</p></td>
|
||||||
|
<td><p>3.89</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>${rssi}</p></td>
|
||||||
|
<td><p>Wifi signal strength</p></td>
|
||||||
|
<td><p>-75</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>${run-time}</p></td>
|
||||||
|
<td><p>How long the last measurement took, two decimals</p></td>
|
||||||
|
<td><p>3.87</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>${angle}</p></td>
|
||||||
|
<td><p>Angle of the gyro, two decimals</p></td>
|
||||||
|
<td><p>28.67</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>${tilt}</p></td>
|
||||||
|
<td><p>Same as angle.</p></td>
|
||||||
|
<td><p>28.67</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>${gravity}</p></td>
|
||||||
|
<td><p>Calculated gravity, 4 decimals for SG and 1 for Plato.</p></td>
|
||||||
|
<td><p>1.0456</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>${gravity-sg}</p></td>
|
||||||
|
<td><p>Calculated gravity in SG, 4 decimals</p></td>
|
||||||
|
<td><p>1.0456</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>${gravity-plato}</p></td>
|
||||||
|
<td><p>Calculated gravity in Plato, 1 decimal</p></td>
|
||||||
|
<td><p>8.5</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>${corr-gravity}</p></td>
|
||||||
|
<td><p>Temperature corrected gravity, 4 decimals for SG and 1 for Plato.</p></td>
|
||||||
|
<td><p>1.0456</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>${corr-gravity-sg}</p></td>
|
||||||
|
<td><p>Temperature corrected gravity in SG, 4 decimals</p></td>
|
||||||
|
<td><p>1.0456</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>${corr-gravity-plato}</p></td>
|
||||||
|
<td><p>Temperature corrected gravity in Plato, 1 decimal</p></td>
|
||||||
|
<td><p>8.5</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>${gravity-unit}</p></td>
|
||||||
|
<td><p>Gravity format, <cite>G</cite> or <cite>P</cite></p></td>
|
||||||
|
<td><p>G</p></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="api.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">REST API</div>
|
||||||
|
</div>
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="services.html">
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Service Integration</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2021-2022, Magnus Persson
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
Contents
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Advanced Configuration</a><ul>
|
||||||
|
<li><a class="reference internal" href="#format-editor">Format editor</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
593
docs/v0.8/api.html
Normal file
@ -0,0 +1,593 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Data Formats" href="data.html" /><link rel="prev" title="Advanced Configuration" href="advanced.html" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.03.04"/>
|
||||||
|
<title>REST API - GravityMon 0.8.0 documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=935aa2abcc5c1da4283d1dc201fb1f0add16d23a" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=25ceb02ed1c46dc30f2321ff83e92799f69dfdb9" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">GravityMon 0.8.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.8.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a></li>
|
||||||
|
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">REST API</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
<div class="section" id="rest-api">
|
||||||
|
<span id="id1"></span><h1>REST API<a class="headerlink" href="#rest-api" title="Permalink to this headline">#</a></h1>
|
||||||
|
<p>All the API’s use a key called <code class="docutils literal notranslate"><span class="pre">ID</span></code> which is the unique device id (chip id). This is used as an API key when sending requests to the device.</p>
|
||||||
|
<div class="section" id="get-api-config">
|
||||||
|
<h2>GET: /api/config<a class="headerlink" href="#get-api-config" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>Retrive the current configuation of the device via an HTTP GET command. Payload is in JSON format.</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">temp-format</span></code> can be either <code class="docutils literal notranslate"><span class="pre">C</span></code> or <code class="docutils literal notranslate"><span class="pre">F</span></code></p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">gravity-format</span></code> is always <code class="docutils literal notranslate"><span class="pre">G</span></code> (plato is not yet supported)</p></li>
|
||||||
|
</ul>
|
||||||
|
<p>Other parameters are the same as in the configuration guide.</p>
|
||||||
|
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"mdns"</span><span class="p">:</span><span class="w"> </span><span class="s2">"gravmon"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ee1bfc"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"ota-url"</span><span class="p">:</span><span class="w"> </span><span class="s2">"http://192.168.1.50:80/firmware/gravmon/"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"temp-format"</span><span class="p">:</span><span class="w"> </span><span class="s2">"C"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"brewfather-push"</span><span class="p">:</span><span class="w"> </span><span class="s2">"http://log.brewfather.net/stream?id=Qwerty"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"token"</span><span class="p">:</span><span class="w"> </span><span class="s2">"token"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"http-push"</span><span class="p">:</span><span class="w"> </span><span class="s2">"http://192.168.1.50:9090/api/v1/Qwerty/telemetry"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"http-push-h1"</span><span class="p">:</span><span class="w"> </span><span class="s2">"header: value"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"http-push-h2"</span><span class="p">:</span><span class="w"> </span><span class="s2">"header: value"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"http-push2"</span><span class="p">:</span><span class="w"> </span><span class="s2">"http://192.168.1.50/ispindel"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"http-push2-h1"</span><span class="p">:</span><span class="w"> </span><span class="s2">"header: value"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"http-push2-h2"</span><span class="p">:</span><span class="w"> </span><span class="s2">"header: value"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"influxdb2-push"</span><span class="p">:</span><span class="w"> </span><span class="s2">"http://192.168.1.50:8086"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"influxdb2-org"</span><span class="p">:</span><span class="w"> </span><span class="s2">"org"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"influxdb2-bucket"</span><span class="p">:</span><span class="w"> </span><span class="s2">"bucket_id"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"influxdb2-auth"</span><span class="p">:</span><span class="w"> </span><span class="s2">"token"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"mqtt-push"</span><span class="p">:</span><span class="w"> </span><span class="s2">"192.168.1.50"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"mqtt-port"</span><span class="p">:</span><span class="w"> </span><span class="mi">1883</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"mqtt-user"</span><span class="p">:</span><span class="w"> </span><span class="s2">"user"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"mqtt-pass"</span><span class="p">:</span><span class="w"> </span><span class="s2">"pass"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"sleep-interval"</span><span class="p">:</span><span class="w"> </span><span class="mi">30</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"voltage-factor"</span><span class="p">:</span><span class="w"> </span><span class="mf">1.59</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gravity-formula"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0*tilt^3+0.0*tilt^2+0.0017978*tilt+0.9436"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gravity-format"</span><span class="p">:</span><span class="w"> </span><span class="s2">"G"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"temp-adjustment-value"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gravity-temp-adjustment"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gyro-temp"</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gyro-calibration-data"</span><span class="p">:</span><span class="w"> </span><span class="p">{</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"ax"</span><span class="p">:</span><span class="w"> </span><span class="mi">-330</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"ay"</span><span class="p">:</span><span class="w"> </span><span class="mi">-2249</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"az"</span><span class="p">:</span><span class="w"> </span><span class="mi">1170</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gx"</span><span class="p">:</span><span class="w"> </span><span class="mi">99</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gy"</span><span class="p">:</span><span class="w"> </span><span class="mi">-6</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gz"</span><span class="p">:</span><span class="w"> </span><span class="mi">4</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="p">},</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"angle"</span><span class="p">:</span><span class="w"> </span><span class="mf">90.93</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gravity"</span><span class="p">:</span><span class="w"> </span><span class="mf">1.105</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"battery"</span><span class="p">:</span><span class="w"> </span><span class="mf">0.04</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"runtime-average"</span><span class="p">:</span><span class="w"> </span><span class="mf">3.12</span><span class="w"></span>
|
||||||
|
<span class="p">}</span><span class="w"></span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="get-api-device">
|
||||||
|
<h2>GET: /api/device<a class="headerlink" href="#get-api-device" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>Retrive the current device settings via an HTTP GET command. Payload is in JSON format.</p>
|
||||||
|
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"app-name"</span><span class="p">:</span><span class="w"> </span><span class="s2">"GravityMon"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"app-ver"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0.0"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ee1bfc"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"mdns"</span><span class="p">:</span><span class="w"> </span><span class="s2">"gravmon"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"runtime-average"</span><span class="p">:</span><span class="w"> </span><span class="mf">3.12</span><span class="w"></span>
|
||||||
|
<span class="p">}</span><span class="w"></span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="get-api-status">
|
||||||
|
<h2>GET: /api/status<a class="headerlink" href="#get-api-status" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>Retrive the current device status via an HTTP GET command. Payload is in JSON format.</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">temp-format</span></code> can be either <code class="docutils literal notranslate"><span class="pre">C</span></code> or <code class="docutils literal notranslate"><span class="pre">F</span></code></p></li>
|
||||||
|
</ul>
|
||||||
|
<p>Other parameters are the same as in the configuration guide.</p>
|
||||||
|
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ee1bfc"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"angle"</span><span class="p">:</span><span class="w"> </span><span class="mf">89.86</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gravity"</span><span class="p">:</span><span class="w"> </span><span class="mf">1.1052</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gravity-tempcorr"</span><span class="p">:</span><span class="w"> </span><span class="mf">1.1031</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"temp-c"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"temp-f"</span><span class="p">:</span><span class="w"> </span><span class="mi">32</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"battery"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"temp-format"</span><span class="p">:</span><span class="w"> </span><span class="s2">"C"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"sleep-mode"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"rssi"</span><span class="p">:</span><span class="w"> </span><span class="mi">-56</span><span class="w"></span>
|
||||||
|
<span class="p">}</span><span class="w"></span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="get-api-config-formula">
|
||||||
|
<h2>GET: /api/config/formula<a class="headerlink" href="#get-api-config-formula" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>Retrive the data used for formula calculation data via an HTTP GET command. Payload is in JSON format.</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">a1</span></code>-<code class="docutils literal notranslate"><span class="pre">a4</span></code> are the angles/tilt readings (up to 5 are currently supported)</p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">g1</span></code>-<code class="docutils literal notranslate"><span class="pre">g4</span></code> are the corresponding gravity reaadings in SG or Plato depending on the device-format.</p></li>
|
||||||
|
</ul>
|
||||||
|
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"id"</span><span class="p">:</span><span class="w"> </span><span class="s2">"ee1bfc"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"a1"</span><span class="p">:</span><span class="w"> </span><span class="mf">22.4</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"a2"</span><span class="p">:</span><span class="w"> </span><span class="mf">54.4</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"a3"</span><span class="p">:</span><span class="w"> </span><span class="mi">58</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"a4"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"a5"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"g1"</span><span class="p">:</span><span class="w"> </span><span class="mf">1.000</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"g2"</span><span class="p">:</span><span class="w"> </span><span class="mf">1.053</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"g3"</span><span class="p">:</span><span class="w"> </span><span class="mf">1.062</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"g4"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"g5"</span><span class="p">:</span><span class="w"> </span><span class="mi">1</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gravity-format"</span><span class="p">:</span><span class="w"> </span><span class="s2">"G"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gravity-formula"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.0*tilt^3+0.0*tilt^2+0.0017978*tilt+0.9436"</span><span class="w"></span>
|
||||||
|
<span class="p">}</span><span class="w"></span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="get-api-factory">
|
||||||
|
<h2>GET: /api/factory<a class="headerlink" href="#get-api-factory" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>Will do a reset to factory defaults and delete all data except wifi settings.</p>
|
||||||
|
<p>For this to work you will need to supply the device id as a parameter in the request:</p>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>http://mygravity.local/api/factory?id=<mydeviceid>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="post-api-config-device">
|
||||||
|
<h2>POST: /api/config/device<a class="headerlink" href="#post-api-config-device" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>Used to update device settings via an HTTP POST command.</p>
|
||||||
|
<p>Payload should be in standard format used for posting a form. Such as as: <cite>id=value&mdns=value</cite> etc. Key value pairs are shown below.</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">temp-format</span></code> can be either <code class="docutils literal notranslate"><span class="pre">C</span></code> (Celcius) or <code class="docutils literal notranslate"><span class="pre">F</span></code> (Farenheight)</p></li>
|
||||||
|
</ul>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">id</span><span class="o">=</span><span class="n">ee1bfc</span>
|
||||||
|
<span class="n">mdns</span><span class="o">=</span><span class="n">gravmon</span>
|
||||||
|
<span class="n">temp</span><span class="o">-</span><span class="nb">format</span><span class="o">=</span><span class="n">C</span>
|
||||||
|
<span class="n">sleep</span><span class="o">-</span><span class="n">interval</span><span class="o">=</span><span class="mi">30</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="post-api-config-push">
|
||||||
|
<h2>POST: /api/config/push<a class="headerlink" href="#post-api-config-push" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>Used to update push settings via an HTTP POST command. Payload is in JSON format.</p>
|
||||||
|
<p>Payload should be in standard format used for posting a form. Such as as: <cite>id=value&mdns=value</cite> etc. Key value pairs are shown below.</p>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">id</span><span class="o">=</span><span class="n">ee1bfc</span>
|
||||||
|
<span class="n">http</span><span class="o">-</span><span class="n">push</span><span class="o">=</span><span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="mf">192.168.1.50</span><span class="o">/</span><span class="n">ispindel</span>
|
||||||
|
<span class="n">http</span><span class="o">-</span><span class="n">push2</span><span class="o">=</span>
|
||||||
|
<span class="n">http</span><span class="o">-</span><span class="n">push</span><span class="o">-</span><span class="n">h1</span><span class="o">=</span>
|
||||||
|
<span class="n">http</span><span class="o">-</span><span class="n">push</span><span class="o">-</span><span class="n">h2</span><span class="o">=</span>
|
||||||
|
<span class="n">http</span><span class="o">-</span><span class="n">push2</span><span class="o">-</span><span class="n">h1</span><span class="o">=</span>
|
||||||
|
<span class="n">http</span><span class="o">-</span><span class="n">push2</span><span class="o">-</span><span class="n">h2</span><span class="o">=</span>
|
||||||
|
<span class="n">brewfather</span><span class="o">-</span><span class="n">push</span><span class="o">=</span>
|
||||||
|
<span class="n">influxdb2</span><span class="o">-</span><span class="n">push</span><span class="o">=</span><span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="mf">192.168.1.50</span><span class="p">:</span><span class="mi">8086</span>
|
||||||
|
<span class="n">influxdb2</span><span class="o">-</span><span class="n">org</span><span class="o">=</span>
|
||||||
|
<span class="n">influxdb2</span><span class="o">-</span><span class="n">bucket</span><span class="o">=</span>
|
||||||
|
<span class="n">influxdb2</span><span class="o">-</span><span class="n">auth</span><span class="o">=</span>
|
||||||
|
<span class="n">mqtt</span><span class="o">-</span><span class="n">push</span><span class="o">=</span><span class="mf">192.168.1.50</span>
|
||||||
|
<span class="n">mqtt</span><span class="o">-</span><span class="n">port</span><span class="o">=</span><span class="mi">1883</span>
|
||||||
|
<span class="n">mqtt</span><span class="o">-</span><span class="n">user</span><span class="o">=</span>
|
||||||
|
<span class="n">mqtt</span><span class="o">-</span><span class="k">pass</span><span class="o">=</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="post-api-config-gravity">
|
||||||
|
<h2>POST: /api/config/gravity<a class="headerlink" href="#post-api-config-gravity" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>Used to update gravity settings via an HTTP POST command. Payload is in JSON format.</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">gravity-formula</span></code> keywords <code class="docutils literal notranslate"><span class="pre">temp</span></code> and <code class="docutils literal notranslate"><span class="pre">tilt</span></code> are supported.</p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">gravity-format</span></code> can be either <code class="docutils literal notranslate"><span class="pre">G</span></code> (SG) or <code class="docutils literal notranslate"><span class="pre">P</span></code> (PLATO)</p></li>
|
||||||
|
</ul>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">gravity-temp-adjustment</span></code> 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).</p>
|
||||||
|
</div>
|
||||||
|
<p>Payload should be in standard format used for posting a form. Such as as: <cite>id=value&mdns=value</cite> etc. Key value pairs are shown below.</p>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">id</span><span class="o">=</span><span class="n">ee1bfc</span>
|
||||||
|
<span class="n">gravity</span><span class="o">-</span><span class="n">formula</span><span class="o">=</span><span class="mf">0.0</span><span class="o">*</span><span class="n">tilt</span><span class="o">^</span><span class="mi">3</span><span class="o">+</span><span class="mf">0.0</span><span class="o">*</span><span class="n">tilt</span><span class="o">^</span><span class="mi">2</span><span class="o">+</span><span class="mf">0.0017978</span><span class="o">*</span><span class="n">tilt</span><span class="o">+</span><span class="mf">0.9436</span><span class="p">,</span>
|
||||||
|
<span class="n">gravity</span><span class="o">-</span><span class="nb">format</span><span class="o">=</span><span class="n">P</span>
|
||||||
|
<span class="n">gravity</span><span class="o">-</span><span class="n">temp</span><span class="o">-</span><span class="n">adjustment</span><span class="o">=</span><span class="n">off</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="post-api-config-hardware">
|
||||||
|
<h2>POST: /api/config/hardware<a class="headerlink" href="#post-api-config-hardware" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>Used to update hardware settings via an HTTP POST command. Payload is in JSON format.</p>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">gyro-temp</span></code> 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).</p>
|
||||||
|
</div>
|
||||||
|
<p>Payload should be in standard format used for posting a form. Such as as: <cite>id=value&mdns=value</cite> etc. Key value pairs are shown below.</p>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">id</span><span class="o">=</span><span class="n">ee1bfc</span>
|
||||||
|
<span class="n">voltage</span><span class="o">-</span><span class="n">factor</span><span class="o">=</span><span class="mf">1.59</span>
|
||||||
|
<span class="n">temp</span><span class="o">-</span><span class="n">adjustment</span><span class="o">=</span><span class="mi">0</span>
|
||||||
|
<span class="n">gyro</span><span class="o">-</span><span class="n">temp</span><span class="o">=</span><span class="n">off</span>
|
||||||
|
<span class="n">ota</span><span class="o">-</span><span class="n">url</span><span class="o">=</span><span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="mf">192.168.1.50</span><span class="o">/</span><span class="n">firmware</span><span class="o">/</span><span class="n">gravmon</span><span class="o">/</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="post-api-config-formula">
|
||||||
|
<h2>POST: /api/config/formula<a class="headerlink" href="#post-api-config-formula" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>Used to update formula calculation data via an HTTP POST command. Payload is in JSON format.</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">a1</span></code>-<code class="docutils literal notranslate"><span class="pre">a4</span></code> are the angles/tilt readings (up to 5 are currently supported)</p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">g1</span></code>-<code class="docutils literal notranslate"><span class="pre">g4</span></code> are the corresponding gravity reaadings (in SG)</p></li>
|
||||||
|
</ul>
|
||||||
|
<p>Payload should be in standard format used for posting a form. Such as as: <cite>id=value&mdns=value</cite> etc. Key value pairs are shown below.</p>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="nb">id</span><span class="o">=</span><span class="n">ee1bfc</span>
|
||||||
|
<span class="n">a1</span><span class="o">=</span><span class="mf">22.4</span>
|
||||||
|
<span class="n">a2</span><span class="o">=</span><span class="mf">54.4</span>
|
||||||
|
<span class="n">a3</span><span class="o">=</span><span class="mi">58</span>
|
||||||
|
<span class="n">a4</span><span class="o">=</span><span class="mi">0</span>
|
||||||
|
<span class="n">a5</span><span class="o">=</span><span class="mi">0</span>
|
||||||
|
<span class="n">g1</span><span class="o">=</span><span class="mf">1.000</span>
|
||||||
|
<span class="n">g2</span><span class="o">=</span><span class="mf">1.053</span>
|
||||||
|
<span class="n">g3</span><span class="o">=</span><span class="mf">1.062</span>
|
||||||
|
<span class="n">g4</span><span class="o">=</span><span class="mi">1</span>
|
||||||
|
<span class="n">g5</span><span class="o">=</span><span class="mi">1</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="calling-the-api-s-from-python">
|
||||||
|
<h2>Calling the API’s from Python<a class="headerlink" href="#calling-the-api-s-from-python" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>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.</p>
|
||||||
|
<p>The requests package converts the json to standard form post format.</p>
|
||||||
|
<div class="highlight-python notranslate"><div class="highlight"><pre><span></span><span class="kn">import</span> <span class="nn">requests</span>
|
||||||
|
<span class="kn">import</span> <span class="nn">json</span>
|
||||||
|
|
||||||
|
<span class="n">host</span> <span class="o">=</span> <span class="s2">"192.168.1.1"</span> <span class="c1"># IP adress (or name) of the device to send these settings to</span>
|
||||||
|
<span class="nb">id</span> <span class="o">=</span> <span class="s2">"ee1bfc"</span> <span class="c1"># Device ID (shown in serial console during startup or in UI)</span>
|
||||||
|
|
||||||
|
<span class="k">def</span> <span class="nf">set_config</span><span class="p">(</span> <span class="n">url</span><span class="p">,</span> <span class="n">json</span> <span class="p">):</span>
|
||||||
|
<span class="n">headers</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"ContentType"</span><span class="p">:</span> <span class="s2">"application/json"</span> <span class="p">}</span>
|
||||||
|
<span class="nb">print</span><span class="p">(</span> <span class="n">url</span> <span class="p">)</span>
|
||||||
|
<span class="n">resp</span> <span class="o">=</span> <span class="n">requests</span><span class="o">.</span><span class="n">post</span><span class="p">(</span> <span class="n">url</span><span class="p">,</span> <span class="n">headers</span><span class="o">=</span><span class="n">headers</span><span class="p">,</span> <span class="n">data</span><span class="o">=</span><span class="n">json</span> <span class="p">)</span>
|
||||||
|
<span class="k">if</span> <span class="n">resp</span><span class="o">.</span><span class="n">status_code</span> <span class="o">!=</span> <span class="mi">200</span> <span class="p">:</span>
|
||||||
|
<span class="nb">print</span> <span class="p">(</span> <span class="s2">"Failed "</span> <span class="p">)</span>
|
||||||
|
<span class="k">else</span> <span class="p">:</span>
|
||||||
|
<span class="nb">print</span> <span class="p">(</span> <span class="s2">"Success "</span> <span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">url</span> <span class="o">=</span> <span class="s2">"http://"</span> <span class="o">+</span> <span class="n">host</span> <span class="o">+</span> <span class="s2">"/api/config/device"</span>
|
||||||
|
<span class="n">json</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"id"</span><span class="p">:</span> <span class="nb">id</span><span class="p">,</span>
|
||||||
|
<span class="s2">"mdns"</span><span class="p">:</span> <span class="s2">"gravmon"</span><span class="p">,</span> <span class="c1"># Name of the device</span>
|
||||||
|
<span class="s2">"temp-format"</span><span class="p">:</span> <span class="s2">"C"</span><span class="p">,</span> <span class="c1"># Temperature format C or F</span>
|
||||||
|
<span class="s2">"sleep-interval"</span><span class="p">:</span> <span class="mi">30</span> <span class="c1"># Sleep interval in seconds</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="n">set_config</span><span class="p">(</span> <span class="n">url</span><span class="p">,</span> <span class="n">json</span> <span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">url</span> <span class="o">=</span> <span class="s2">"http://"</span> <span class="o">+</span> <span class="n">host</span> <span class="o">+</span> <span class="s2">"/api/config/push"</span>
|
||||||
|
<span class="n">json</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"id"</span><span class="p">:</span> <span class="nb">id</span><span class="p">,</span>
|
||||||
|
<span class="s2">"token"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
||||||
|
<span class="s2">"http-push"</span><span class="p">:</span> <span class="s2">"http://192.168.1.1/ispindel"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"http-push2"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
||||||
|
<span class="s2">"http-push-h1"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
||||||
|
<span class="s2">"http-push-h2"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
||||||
|
<span class="s2">"http-push2-h1"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
||||||
|
<span class="s2">"http-push2-h2"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
||||||
|
<span class="s2">"brewfather-push"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
||||||
|
<span class="s2">"influxdb2-push"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
||||||
|
<span class="s2">"influxdb2-org"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
||||||
|
<span class="s2">"influxdb2-bucket"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
||||||
|
<span class="s2">"influxdb2-auth"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
||||||
|
<span class="s2">"mqtt-push"</span><span class="p">:</span> <span class="s2">"192.168.1.50"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"mqtt-port"</span><span class="p">:</span> <span class="mi">1883</span><span class="p">,</span>
|
||||||
|
<span class="s2">"mqtt-user"</span><span class="p">:</span> <span class="s2">"Qwerty"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"mqtt-pass"</span><span class="p">:</span> <span class="s2">"Qwerty"</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="n">set_config</span><span class="p">(</span> <span class="n">url</span><span class="p">,</span> <span class="n">json</span> <span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">url</span> <span class="o">=</span> <span class="s2">"http://"</span> <span class="o">+</span> <span class="n">host</span> <span class="o">+</span> <span class="s2">"/api/config/gravity"</span>
|
||||||
|
<span class="n">json</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"id"</span><span class="p">:</span> <span class="nb">id</span><span class="p">,</span>
|
||||||
|
<span class="s2">"gravity-formula"</span><span class="p">:</span> <span class="s2">""</span><span class="p">,</span>
|
||||||
|
<span class="s2">"gravity-format"</span><span class="p">:</span> <span class="s2">"P"</span><span class="p">,</span>
|
||||||
|
<span class="s2">"gravity-temp-adjustment"</span><span class="p">:</span> <span class="s2">"off"</span> <span class="c1"># Adjust gravity (on/off)</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="n">set_config</span><span class="p">(</span> <span class="n">url</span><span class="p">,</span> <span class="n">json</span> <span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">url</span> <span class="o">=</span> <span class="s2">"http://"</span> <span class="o">+</span> <span class="n">host</span> <span class="o">+</span> <span class="s2">"/api/config/hardware"</span>
|
||||||
|
<span class="n">json</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"id"</span><span class="p">:</span> <span class="nb">id</span><span class="p">,</span>
|
||||||
|
<span class="s2">"voltage-factor"</span><span class="p">:</span> <span class="mf">1.59</span><span class="p">,</span> <span class="c1"># Default value for voltage calculation</span>
|
||||||
|
<span class="s2">"temp-adjustment"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span> <span class="c1"># If temp sensor needs to be corrected</span>
|
||||||
|
<span class="s2">"gyro-temp"</span><span class="p">:</span> <span class="s2">"on"</span><span class="p">,</span> <span class="c1"># Use the temp sensor in the gyro instead (on/off)</span>
|
||||||
|
<span class="s2">"ota-url"</span><span class="p">:</span> <span class="s2">""</span> <span class="c1"># if the device should seach for a new update when active</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="n">set_config</span><span class="p">(</span> <span class="n">url</span><span class="p">,</span> <span class="n">json</span> <span class="p">)</span>
|
||||||
|
|
||||||
|
<span class="n">url</span> <span class="o">=</span> <span class="s2">"http://"</span> <span class="o">+</span> <span class="n">host</span> <span class="o">+</span> <span class="s2">"/api/formula"</span>
|
||||||
|
<span class="n">json</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"id"</span><span class="p">:</span> <span class="nb">id</span><span class="p">,</span>
|
||||||
|
<span class="s2">"a1"</span><span class="p">:</span> <span class="mf">22.4</span><span class="p">,</span>
|
||||||
|
<span class="s2">"a2"</span><span class="p">:</span> <span class="mf">54.4</span><span class="p">,</span>
|
||||||
|
<span class="s2">"a3"</span><span class="p">:</span> <span class="mi">58</span><span class="p">,</span>
|
||||||
|
<span class="s2">"a4"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
|
||||||
|
<span class="s2">"a5"</span><span class="p">:</span> <span class="mi">0</span><span class="p">,</span>
|
||||||
|
<span class="s2">"g1"</span><span class="p">:</span> <span class="mf">1.000</span><span class="p">,</span>
|
||||||
|
<span class="s2">"g2"</span><span class="p">:</span> <span class="mf">1.053</span><span class="p">,</span>
|
||||||
|
<span class="s2">"g3"</span><span class="p">:</span> <span class="mf">1.062</span><span class="p">,</span>
|
||||||
|
<span class="s2">"g4"</span><span class="p">:</span> <span class="mi">1</span><span class="p">,</span>
|
||||||
|
<span class="s2">"g5"</span><span class="p">:</span> <span class="mi">1</span>
|
||||||
|
<span class="p">}</span>
|
||||||
|
<span class="n">set_config</span><span class="p">(</span> <span class="n">url</span><span class="p">,</span> <span class="n">json</span> <span class="p">)</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="data.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Data Formats</div>
|
||||||
|
</div>
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="advanced.html">
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Advanced Configuration</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2021-2022, Magnus Persson
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
Contents
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">REST API</a><ul>
|
||||||
|
<li><a class="reference internal" href="#get-api-config">GET: /api/config</a></li>
|
||||||
|
<li><a class="reference internal" href="#get-api-device">GET: /api/device</a></li>
|
||||||
|
<li><a class="reference internal" href="#get-api-status">GET: /api/status</a></li>
|
||||||
|
<li><a class="reference internal" href="#get-api-config-formula">GET: /api/config/formula</a></li>
|
||||||
|
<li><a class="reference internal" href="#get-api-factory">GET: /api/factory</a></li>
|
||||||
|
<li><a class="reference internal" href="#post-api-config-device">POST: /api/config/device</a></li>
|
||||||
|
<li><a class="reference internal" href="#post-api-config-push">POST: /api/config/push</a></li>
|
||||||
|
<li><a class="reference internal" href="#post-api-config-gravity">POST: /api/config/gravity</a></li>
|
||||||
|
<li><a class="reference internal" href="#post-api-config-hardware">POST: /api/config/hardware</a></li>
|
||||||
|
<li><a class="reference internal" href="#post-api-config-formula">POST: /api/config/formula</a></li>
|
||||||
|
<li><a class="reference internal" href="#calling-the-api-s-from-python">Calling the API’s from Python</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
279
docs/v0.8/backlog.html
Normal file
@ -0,0 +1,279 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="prev" title="Q & A" href="q_and_a.html" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.01.02"/>
|
||||||
|
<title>Backlog of changes - GravityMon 0.7.0 documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=df49af52631e7917044a9c21a57f7b83170a6dd0" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=fade93df149f7c5fedb3ff897f799dc7d283b420" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" />
|
||||||
|
<line x1="4" y1="6" x2="20" y2="6" />
|
||||||
|
<line x1="10" y1="12" x2="20" y2="12" />
|
||||||
|
<line x1="6" y1="18" x2="20" y2="18" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">GravityMon 0.7.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.7.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Setting up device</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html#format-editor">Format editor</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html#create-formula">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html#rest-api">REST API</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html#data-formats">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a></li>
|
||||||
|
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Backlog of changes</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<div class="content-icon-container">
|
||||||
|
<div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
<div class="section" id="backlog-of-changes">
|
||||||
|
<h1>Backlog of changes<a class="headerlink" href="#backlog-of-changes" title="Permalink to this headline">¶</a></h1>
|
||||||
|
<p>This is a list of potential ideas to implemnt in the software.</p>
|
||||||
|
<div class="section" id="documentation">
|
||||||
|
<h2>Documentation<a class="headerlink" href="#documentation" title="Permalink to this headline">¶</a></h2>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>Write contribution instructions</p></li>
|
||||||
|
<li><p>Example project for creating integrations and instructions</p></li>
|
||||||
|
<li><p>Add instructions for other services</p></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="code">
|
||||||
|
<h2>Code<a class="headerlink" href="#code" title="Permalink to this headline">¶</a></h2>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>Support for plato</p></li>
|
||||||
|
<li><p>Use pre-commit for validating check-in</p></li>
|
||||||
|
<li><p>Show indicated battery life based on interval (check if its feasable)</p></li>
|
||||||
|
<li><p>Add possibility to add one certificate for proper SSL authentication.</p></li>
|
||||||
|
<li><p>Add configurable Authentication/Token header to http/https requests</p></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
|
||||||
|
<a class="prev-page" href="q_and_a.html">
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Q & A</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="related-information">
|
||||||
|
Copyright © 2021-2022, Magnus Persson |
|
||||||
|
Created using <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo theme</a>.
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
Contents
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Backlog of changes</a><ul>
|
||||||
|
<li><a class="reference internal" href="#documentation">Documentation</a></li>
|
||||||
|
<li><a class="reference internal" href="#code">Code</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
419
docs/v0.8/compiling.html
Normal file
@ -0,0 +1,419 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Contributing" href="contributing.html" /><link rel="prev" title="Data Formats" href="data.html" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.03.04"/>
|
||||||
|
<title>Compiling the software - GravityMon 0.8.0 documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=935aa2abcc5c1da4283d1dc201fb1f0add16d23a" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=25ceb02ed1c46dc30f2321ff83e92799f69dfdb9" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">GravityMon 0.8.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.8.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
<div class="section" id="compiling-the-software">
|
||||||
|
<span id="id1"></span><h1>Compiling the software<a class="headerlink" href="#compiling-the-software" title="Permalink to this headline">#</a></h1>
|
||||||
|
<div class="section" id="tools">
|
||||||
|
<h2>Tools<a class="headerlink" href="#tools" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>I use the following tools in order to build and manage the software:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>Visual Studio Code</p></li>
|
||||||
|
<li><p>PlatformIO</p></li>
|
||||||
|
<li><p>Git for Windows</p></li>
|
||||||
|
<li><p>VSCode plugin: Minify (used to minimise the html files)</p></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="code-formatting">
|
||||||
|
<h2>Code Formatting<a class="headerlink" href="#code-formatting" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>I use pre-commit and their cpp style checks to validate the code. Plugin defintions are found in <strong>.pre-commit-config.yaml</strong></p>
|
||||||
|
<p><a class="reference external" href="https://www.pre-commit.com">Pre-Commit</a></p>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>There is not yet any automatic checks since this does not work on Windows. It works if running under WSL2 with Ubuntu.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="targets">
|
||||||
|
<h2>Targets<a class="headerlink" href="#targets" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>In the platformio config there are 3 targets defined</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>gravity-debug; Maximum logging for trouble shooting, deep sleep is disabled.</p></li>
|
||||||
|
<li><p>gravity-release; Standard release</p></li>
|
||||||
|
<li><p>gravity-perf; Standard release but contains code for measuring performance</p></li>
|
||||||
|
<li><p>gravity32-perf: Experimental version for ESP32.</p></li>
|
||||||
|
</ul>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>There is an experimental ESP32 target but since platformio only supports SDK 1.0.6 and the WIFI connection is really slow compared to ESP8266,
|
||||||
|
so the recommendation is to wait for support on 2.0.x branch. With the tested version an wifi connection takes 3-8s on a ESP32 compared
|
||||||
|
to 0.5s on an ESP8266. There is also a bug in OneWire connected to ESP32 that has not been fixed in the main repository yet.</p>
|
||||||
|
</div>
|
||||||
|
<div class="admonition warning">
|
||||||
|
<p class="admonition-title">Warning</p>
|
||||||
|
<p>The debug target can be unstable and crash the device under certain circumstanses. Excessive logging to the serial port can cause corruption and crashes.
|
||||||
|
So only enable enough debugging to troubleshoot your changes.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="source-structure">
|
||||||
|
<h2>Source structure<a class="headerlink" href="#source-structure" title="Permalink to this headline">#</a></h2>
|
||||||
|
<div class="table-wrapper"><table class="colwidths-given docutils align-default" id="id2">
|
||||||
|
<caption><span class="caption-text">Directory structure</span><a class="headerlink" href="#id2" title="Permalink to this table">#</a></caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 40%"/>
|
||||||
|
<col style="width: 60%"/>
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr class="row-odd"><th class="head"><p>path</p></th>
|
||||||
|
<th class="head"><p>content</p></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr class="row-even"><td><p>/bin</p></td>
|
||||||
|
<td><p>Contains compiled binaries</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>/data</p></td>
|
||||||
|
<td><p>Directory for flashing device filesystem</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>/doc</p></td>
|
||||||
|
<td><p>Various external documents used as input</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>/html</p></td>
|
||||||
|
<td><p>Source for html files</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>/img</p></td>
|
||||||
|
<td><p>Images uses in README.md</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>/lib</p></td>
|
||||||
|
<td><p>External libraries used when compiling</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>/script</p></td>
|
||||||
|
<td><p>Scripts used in build process</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>/src</p></td>
|
||||||
|
<td><p>Source code for software</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>/src_docs</p></td>
|
||||||
|
<td><p>Source code for documentation</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>/stl</p></td>
|
||||||
|
<td><p>3d models</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>/test</p></td>
|
||||||
|
<td><p>Test data for developing html files</p></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table></div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="options">
|
||||||
|
<h2>Options<a class="headerlink" href="#options" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>This is a list of C++ defines that is used to enable/disable functions in the code.</p>
|
||||||
|
<div class="table-wrapper"><table class="colwidths-given docutils align-default" id="id3">
|
||||||
|
<caption><span class="caption-text">Defines</span><a class="headerlink" href="#id3" title="Permalink to this table">#</a></caption>
|
||||||
|
<colgroup>
|
||||||
|
<col style="width: 40%"/>
|
||||||
|
<col style="width: 60%"/>
|
||||||
|
</colgroup>
|
||||||
|
<thead>
|
||||||
|
<tr class="row-odd"><th class="head"><p>define</p></th>
|
||||||
|
<th class="head"><p>description</p></th>
|
||||||
|
</tr>
|
||||||
|
</thead>
|
||||||
|
<tbody>
|
||||||
|
<tr class="row-even"><td><p>ACTIVATE_OTA</p></td>
|
||||||
|
<td><p>Enables the OTA functionallity in the code</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>SKIP_SLEEPMODE</p></td>
|
||||||
|
<td><p>The device never goes into sleep mode, useful when developing.</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>xxx_DISABLE_LOGGING</p></td>
|
||||||
|
<td><p>Done include verbose logging in the corresponding class. Excessive logging may crash device.</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>USE_LITTLEFS</p></td>
|
||||||
|
<td><p>Use the new filesystem in Ardurino</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>EMBED_HTML</p></td>
|
||||||
|
<td><p>Html files are included in code, if not defined they are served from the file system.</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>USER_SSID</p></td>
|
||||||
|
<td><p>If defined the device will always use this SSID</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-even"><td><p>USER_SSID_PWD</p></td>
|
||||||
|
<td><p>Password to the SSID</p></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="row-odd"><td><p>CFG_APPVER</p></td>
|
||||||
|
<td><p>Defines the version of the compiled software</p></td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="contributing.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Contributing</div>
|
||||||
|
</div>
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="data.html">
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Data Formats</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2021-2022, Magnus Persson
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
Contents
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Compiling the software</a><ul>
|
||||||
|
<li><a class="reference internal" href="#tools">Tools</a></li>
|
||||||
|
<li><a class="reference internal" href="#code-formatting">Code Formatting</a></li>
|
||||||
|
<li><a class="reference internal" href="#targets">Targets</a></li>
|
||||||
|
<li><a class="reference internal" href="#source-structure">Source structure</a></li>
|
||||||
|
<li><a class="reference internal" href="#options">Options</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
552
docs/v0.8/configuration.html
Normal file
@ -0,0 +1,552 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Create formula" href="formula.html" /><link rel="prev" title="Releases" href="releases.html" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.03.04"/>
|
||||||
|
<title>Configuration - GravityMon 0.8.0 documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=935aa2abcc5c1da4283d1dc201fb1f0add16d23a" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=25ceb02ed1c46dc30f2321ff83e92799f69dfdb9" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">GravityMon 0.8.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.8.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
|
||||||
|
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
<div class="section" id="configuration">
|
||||||
|
<span id="setting-up-device"></span><h1>Configuration<a class="headerlink" href="#configuration" title="Permalink to this headline">#</a></h1>
|
||||||
|
<p>The device can operate in two modes and must be in <code class="docutils literal notranslate"><span class="pre">configuration</span> <span class="pre">mode</span></code> in order for the web server to be active.</p>
|
||||||
|
<p>One of the following conditions will place the device in <code class="docutils literal notranslate"><span class="pre">configuration</span> <span class="pre">mode</span></code>:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>Gyro has not been calibrated</p></li>
|
||||||
|
<li><p>Sleep mode has been disabled in the web interface</p></li>
|
||||||
|
<li><p>Placed in horizontal mode 85-90 degrees</p></li>
|
||||||
|
<li><p>Charger connected >4.15V</p></li>
|
||||||
|
</ul>
|
||||||
|
<div class="section" id="status">
|
||||||
|
<h2>Status<a class="headerlink" href="#status" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>URL: (<a class="reference external" href="http://gravmon.local">http://gravmon.local</a>)</p>
|
||||||
|
<a class="reference internal image-reference" href="_images/index.png"><img alt="Index page" src="_images/index.png" style="width: 800px;"/></a>
|
||||||
|
<p>Configuration is accessed by entering the URL for the device, this will be the mDNS name <em>device.local</em> or the IP adress. The following chapter assumes the device name is <em>gravmon</em>.</p>
|
||||||
|
<p>The main page shows the device readings; gravity, angle, temperature and battery charge. If the checkbox is active then the device will never go into sleep mode. This is useful if
|
||||||
|
you are collecting angle/tilt for calibration. If this is unchecked the device will change mode as explained before.</p>
|
||||||
|
<div class="admonition tip">
|
||||||
|
<p class="admonition-title">Tip</p>
|
||||||
|
<p>If you are connected to the device via a serial console (speed: 115200) you can see the connection sequence and get the Unique ID and IP adress from there.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="device">
|
||||||
|
<h2>Device<a class="headerlink" href="#device" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>URL: (<a class="reference external" href="http://gravmon.local/device">http://gravmon.local/device</a>)</p>
|
||||||
|
<a class="reference internal image-reference" href="_images/device.png"><img alt="Device Settings" src="_images/device.png" style="width: 800px;"/></a>
|
||||||
|
<div class="admonition tip">
|
||||||
|
<p class="admonition-title">Tip</p>
|
||||||
|
<p>The button <cite>view error log</cite> will show the last 15 errors on the device. This can be useful for checking errors without
|
||||||
|
the need to connect to the serial port or to check what errors has occured while in <cite>gravity mode</cite>.</p>
|
||||||
|
</div>
|
||||||
|
<ul>
|
||||||
|
<li><p><strong>Version:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Installed version of the code and html files.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Device name:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>This is unique name of the device which is set in the configuration, also known as MDNS name.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Device ID:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>This is unique identifier for the device (ESP8266 id), this is required when using the API as an API Key to safeguard
|
||||||
|
against faulty requests. This is the ESP8266 chip ID, so it should be unique.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Average runtime:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>This shows the average time a gravity measurement takes. Under optimal setting this should be
|
||||||
|
around 1.5 - 2.0 seconds. If this is higher than 2 seconds this is most likley connected to slow wifi
|
||||||
|
connection. It will show 0 if data has not been collected yet.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="id1">
|
||||||
|
<h2>Configuration<a class="headerlink" href="#id1" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>URL: (<a class="reference external" href="http://gravmon.local/config">http://gravmon.local/config</a>)</p>
|
||||||
|
<div class="section" id="device-setting">
|
||||||
|
<h3>Device Setting<a class="headerlink" href="#device-setting" title="Permalink to this headline">#</a></h3>
|
||||||
|
<a class="reference internal image-reference" href="_images/config1.png"><img alt="Device Settings" src="_images/config1.png" style="width: 800px;"/></a>
|
||||||
|
<ul>
|
||||||
|
<li><p><strong>Device name:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>This is unique name for the device. It will be used in pushing data as well as mDNS name on the network (<name>.local)</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Temperature format:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Choose between Celsius and Farenheight when displaying temperature.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Interval:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>This defines how long the device should be sleeping between the readings when in <cite>gravity monitoring</cite> mode. You will also see
|
||||||
|
the values in minutes/seconds to easier set the interval. 900s is a recommended interval. The sleep interval can
|
||||||
|
be set between 10 - 3600 seconds (60 minutes).</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>A low value such as 30s will give a lifespan of 1-2 weeks and 300s (5 min) would last for 3+ weeks. This assumes that
|
||||||
|
there is good wifi connection that takes less than 1s to reconnect. Poor wifi connection is the main reason for battery drain.</p>
|
||||||
|
</div>
|
||||||
|
<ul>
|
||||||
|
<li><p><strong>Calibration values:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>These are calibration data for the gyro. Place the device flat on a table and press the button to save the default orientation values. Without this calibration we cannot calculate the correct angle/tilt.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="admonition warning">
|
||||||
|
<p class="admonition-title">Warning</p>
|
||||||
|
<p>The device will <strong>not</strong> go into <cite>gravity monitoring</cite> mode unless calibrated</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="push-settings">
|
||||||
|
<h3>Push Settings<a class="headerlink" href="#push-settings" title="Permalink to this headline">#</a></h3>
|
||||||
|
<a class="reference internal image-reference" href="_images/config2.png"><img alt="Push Settings" src="_images/config2.png" style="width: 800px;"/></a>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>When enabling SSL this will not validate the root CA of the remote service, this is a design decision based on two aspects. Enabling CA validation will take 3-4s extra on each connection which means way less
|
||||||
|
battery life, so the decision is to prioritize battery life over security. The data transmitted is not really that sensitive anyway so I belive this is a good balance.</p>
|
||||||
|
</div>
|
||||||
|
<ul>
|
||||||
|
<li><p><strong>HTTP URL 1:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Endpoint to send data via http. Default format used Format used <a class="reference internal" href="data.html#data-formats-ispindle"><span class="std std-ref">iSpindle format</span></a>. You can customize the format using <a class="reference internal" href="advanced.html#format-editor"><span class="std std-ref">Format editor</span></a>.</p>
|
||||||
|
<p>If you add the prefix <cite>https://</cite> then the device will use SSL when sending data.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>HTTP URL 2:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Endpoint to send data via http. Default format used <a class="reference internal" href="data.html#data-formats-ispindle"><span class="std std-ref">iSpindle format</span></a>. You can customize the format using <a class="reference internal" href="advanced.html#format-editor"><span class="std std-ref">Format editor</span></a>.</p>
|
||||||
|
<p>If you add the prefix <cite>https://</cite> then the device will use SSL when sending data.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Token:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>The token is included in the iSpindle JSON format and will be used for both HTTP targets. If you
|
||||||
|
need to have 2 different tokens please use the <a class="reference internal" href="advanced.html#format-editor"><span class="std std-ref">Format editor</span></a> to customize the data format.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Brewfather URL:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Endpoint to send data via http to brewfather. Format used <a class="reference internal" href="data.html#data-formats-brewfather"><span class="std std-ref">Brewfather format</span></a></p>
|
||||||
|
<p>SSL is not supported for this target.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Influx DB v2 URL:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Endpoint to send data via http to InfluxDB. Format used <a class="reference internal" href="data.html#data-formats-influxdb2"><span class="std std-ref">Influx DB v2</span></a>. You can customize the format using <a class="reference internal" href="advanced.html#format-editor"><span class="std std-ref">Format editor</span></a>.</p>
|
||||||
|
<p>SSL is not supported for this target. Raise a issue on github if this is wanted.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Influx DB v2 Organisation:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Name of organisation in Influx.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Influx DB v2 Bucket:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Identifier for bucket.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Influx DB v2 Token:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Token with write access to bucket.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>MQTT server:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>IP or name of server to send data to. Default format used <a class="reference internal" href="data.html#data-formats-mqtt"><span class="std std-ref">MQTT</span></a>. You can customize the format using <a class="reference internal" href="advanced.html#format-editor"><span class="std std-ref">Format editor</span></a>.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>MQTT Port:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Which port should be used for communication, default is 1883 (standard port). For SSL use 8883 (any port over 8000 is treated as SSL).</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>MQTT user:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Username or blank if anonymous is accepted</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>MQTT password:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Password or blank if anonymous is accepted</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>HTTP Headers</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><a class="reference internal image-reference" href="_images/config-popup1.png"><img alt="HTTP Headers" src="_images/config-popup1.png" style="width: 300px;"/></a>
|
||||||
|
<p>You can define 2 http headers per push target. This is available via a pop-up window but dont forget
|
||||||
|
to press the save buttons on the post section to save the values. One common header is content type which is the
|
||||||
|
default setting for http targets.</p>
|
||||||
|
<p>The input must have the format <strong>‘<header>: <value>’</strong> for it to work. The UI will accept any value so errors
|
||||||
|
will not show until the device tries to push data.</p>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">Content</span><span class="o">-</span><span class="n">Type</span><span class="p">:</span> <span class="n">application</span><span class="o">/</span><span class="n">json</span>
|
||||||
|
<span class="n">X</span><span class="o">-</span><span class="n">Auth</span><span class="o">-</span><span class="n">Token</span><span class="p">:</span> <span class="o"><</span><span class="n">api</span><span class="o">-</span><span class="n">token</span><span class="o">></span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>Mozilla has a good guide on what headers are valid; <a class="reference external" href="https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers">HTTP Headers</a></p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="gravity-settings">
|
||||||
|
<h3>Gravity Settings<a class="headerlink" href="#gravity-settings" title="Permalink to this headline">#</a></h3>
|
||||||
|
<a class="reference internal image-reference" href="_images/config3.png"><img alt="Gravity Settings" src="_images/config3.png" style="width: 800px;"/></a>
|
||||||
|
<ul>
|
||||||
|
<li><p><strong>Gravity format:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Gravity format can be eihter <cite>SG</cite> or <cite>Plato</cite>. The device will use SG Internally and convert to Plato when displaying or sending data.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Gravity formula:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Gravity formula is compatible with standard iSpindle formulas so any existing calculation option can be used. You can also use
|
||||||
|
the feature to create the formula by supplying the raw data. See <a class="reference internal" href="formula.html#create-formula"><span class="std std-ref">Create formula</span></a></p>
|
||||||
|
<p>The gravity formula accepts to paramaters, <strong>tilt</strong> for the angle or <strong>temp</strong> for temperature (temperature inserted into the formula
|
||||||
|
will be in celsius). I would recommend to use the formula calculation feature instead since this is much easier.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Temperature correct gravity:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Will apply a temperature calibration formula to the gravity as a second step after gravity has been calculated. It’s also possible to
|
||||||
|
build this into the gravity formula.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="admonition warning">
|
||||||
|
<p class="admonition-title">Warning</p>
|
||||||
|
<p>This formula assumes that the calibration has been done at 20°C / 68°F.</p>
|
||||||
|
</div>
|
||||||
|
<p>Formula used in temperature correction.</p>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">gravity</span><span class="o">*</span><span class="p">((</span><span class="mf">1.00130346</span><span class="o">-</span><span class="mf">0.000134722124</span><span class="o">*</span><span class="n">temp</span><span class="o">+</span><span class="mf">0.00000204052596</span><span class="o">*</span><span class="n">temp</span><span class="o">^</span><span class="mi">2</span><span class="o">-</span><span class="mf">0.00000000232820948</span><span class="o">*</span><span class="n">temp</span><span class="o">^</span><span class="mi">3</span><span class="p">)</span><span class="o">/</span>
|
||||||
|
<span class="p">(</span><span class="mf">1.00130346</span><span class="o">-</span><span class="mf">0.000134722124</span><span class="o">*</span><span class="n">cal</span><span class="o">+</span><span class="mf">0.00000204052596</span><span class="o">*</span><span class="n">cal</span><span class="o">^</span><span class="mi">2</span><span class="o">-</span><span class="mf">0.00000000232820948</span><span class="o">*</span><span class="n">cal</span><span class="o">^</span><span class="mi">3</span><span class="p">))</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="hardware-settings">
|
||||||
|
<h3>Hardware Settings<a class="headerlink" href="#hardware-settings" title="Permalink to this headline">#</a></h3>
|
||||||
|
<a class="reference internal image-reference" href="_images/config4.png"><img alt="Hardware Settings" src="_images/config4.png" style="width: 800px;"/></a>
|
||||||
|
<ul>
|
||||||
|
<li><p><strong>Voltage factor:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Factor used to calcualate the battery voltage. If you get a too low/high voltage you can adjust this value.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Temperature correction:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>This value will be added to the temperature reading (negative value will reduce temperature reading). This is applied
|
||||||
|
when the device starts. So changing this will not take affect until the device is restarted.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Gyro Temperature:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Enable this feature will use the temp sensor i the gyro instead of the DS18B20, the benefit is shorter run time and
|
||||||
|
longer battery life (this is an experimental feature). The value used is the first temperature reading from when the
|
||||||
|
device is activated, since the gyro should be cool this is reflecting the surronding temperature. After it has
|
||||||
|
been running the value would be totally off.</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>OTA URL:</strong></p>
|
||||||
|
<blockquote>
|
||||||
|
<div><p>Should point to a URL where the firmware.bin file + version.json file are located.</p>
|
||||||
|
<p>For the OTA to work, place the following files (version.json + firmware.bin) at the location that you pointed out in OTA URL. If the version number in the json file is newer than in the
|
||||||
|
code the update will be done during startup.</p>
|
||||||
|
<p>If you have the previx <cite>https://</cite> then the device will use secure transfer without CA validation.</p>
|
||||||
|
<p>Example; OTA URL (don’t forget trailing dash), the name of the file should be firmware.bin</p>
|
||||||
|
</div></blockquote>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">http</span><span class="p">:</span><span class="o">//</span><span class="mf">192.168.1.1</span><span class="o">/</span><span class="n">firmware</span><span class="o">/</span><span class="n">gravmon</span><span class="o">/</span>
|
||||||
|
<span class="n">https</span><span class="p">:</span><span class="o">//</span><span class="mf">192.168.1.1</span><span class="o">/</span><span class="n">firmware</span><span class="o">/</span><span class="n">gravmon</span><span class="o">/</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="formula.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Create formula</div>
|
||||||
|
</div>
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="releases.html">
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Releases</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2021-2022, Magnus Persson
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
Contents
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Configuration</a><ul>
|
||||||
|
<li><a class="reference internal" href="#status">Status</a></li>
|
||||||
|
<li><a class="reference internal" href="#device">Device</a></li>
|
||||||
|
<li><a class="reference internal" href="#id1">Configuration</a><ul>
|
||||||
|
<li><a class="reference internal" href="#device-setting">Device Setting</a></li>
|
||||||
|
<li><a class="reference internal" href="#push-settings">Push Settings</a></li>
|
||||||
|
<li><a class="reference internal" href="#gravity-settings">Gravity Settings</a></li>
|
||||||
|
<li><a class="reference internal" href="#hardware-settings">Hardware Settings</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
265
docs/v0.8/contributing.html
Normal file
@ -0,0 +1,265 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Troubleshooting" href="troubleshooting.html" /><link rel="prev" title="Compiling the software" href="compiling.html" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.03.04"/>
|
||||||
|
<title>Contributing - GravityMon 0.8.0 documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=935aa2abcc5c1da4283d1dc201fb1f0add16d23a" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=25ceb02ed1c46dc30f2321ff83e92799f69dfdb9" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">GravityMon 0.8.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.8.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
<div class="section" id="contributing">
|
||||||
|
<h1>Contributing<a class="headerlink" href="#contributing" title="Permalink to this headline">#</a></h1>
|
||||||
|
<p>This section is under construction.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="troubleshooting.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Troubleshooting</div>
|
||||||
|
</div>
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="compiling.html">
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Compiling the software</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2021-2022, Magnus Persson
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer no-toc">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
408
docs/v0.8/data.html
Normal file
@ -0,0 +1,408 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Compiling the software" href="compiling.html" /><link rel="prev" title="REST API" href="api.html" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.03.04"/>
|
||||||
|
<title>Data Formats - GravityMon 0.8.0 documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=935aa2abcc5c1da4283d1dc201fb1f0add16d23a" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=25ceb02ed1c46dc30f2321ff83e92799f69dfdb9" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">GravityMon 0.8.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.8.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a></li>
|
||||||
|
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
<div class="section" id="data-formats">
|
||||||
|
<span id="id1"></span><h1>Data Formats<a class="headerlink" href="#data-formats" title="Permalink to this headline">#</a></h1>
|
||||||
|
<div class="section" id="ispindle-format">
|
||||||
|
<span id="data-formats-ispindle"></span><h2>iSpindle format<a class="headerlink" href="#ispindle-format" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>This is the format used for standard http posts.</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">corr-gravity</span></code> is an extended parameter containing a temperature corrected gravity reading.</p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">gravity-format</span></code> is an extended parameter containing the gravity format (G or P).</p></li>
|
||||||
|
<li><p><code class="docutils literal notranslate"><span class="pre">run-time</span></code> is an extended parameter containing the number of seconds the execution took.</p></li>
|
||||||
|
</ul>
|
||||||
|
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"name"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"gravmon"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"ID"</span><span class="p">:</span><span class="w"> </span><span class="s2">"2E6753"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"token"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"gravmon"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"interval"</span><span class="p">:</span><span class="w"> </span><span class="mi">900</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"temperature"</span><span class="p">:</span><span class="w"> </span><span class="mf">20.5</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"temp-units"</span><span class="p">:</span><span class="w"> </span><span class="s2">"C"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gravity"</span><span class="p">:</span><span class="w"> </span><span class="mf">1.0050</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"angle"</span><span class="p">:</span><span class="w"> </span><span class="mf">45.34</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"battery"</span><span class="p">:</span><span class="w"> </span><span class="mf">3.67</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"rssi"</span><span class="p">:</span><span class="w"> </span><span class="mi">-12</span><span class="p">,</span><span class="w"></span>
|
||||||
|
|
||||||
|
<span class="w"> </span><span class="nt">"corr-gravity"</span><span class="p">:</span><span class="w"> </span><span class="mf">1.0050</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gravity-unit"</span><span class="p">:</span><span class="w"> </span><span class="s2">"G"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"run-time"</span><span class="p">:</span><span class="w"> </span><span class="mi">6</span><span class="w"></span>
|
||||||
|
<span class="p">}</span><span class="w"></span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>This is the format template used to create the json above.</p>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>{
|
||||||
|
"name" : "${mdns}",
|
||||||
|
"ID": "${id}",
|
||||||
|
"token" : "gravmon",
|
||||||
|
"interval": ${sleep-interval},
|
||||||
|
"temperature": ${temp},
|
||||||
|
"temp-units": "${temp-unit}",
|
||||||
|
"gravity": ${gravity},
|
||||||
|
"angle": ${angle},
|
||||||
|
"battery": ${battery},
|
||||||
|
"rssi": ${rssi},
|
||||||
|
"corr-gravity": ${corr-gravity},
|
||||||
|
"gravity-unit": "${gravity-unit}",
|
||||||
|
"run-time": ${run-time}
|
||||||
|
}
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="brewfather-format">
|
||||||
|
<span id="data-formats-brewfather"></span><h2>Brewfather format<a class="headerlink" href="#brewfather-format" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>This is the format for Brewfather. See: <a class="reference external" href="https://docs.brewfather.app/integrations/custom-stream">Brewfather API docs</a></p>
|
||||||
|
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"name"</span><span class="w"> </span><span class="p">:</span><span class="w"> </span><span class="s2">"gravmon"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"temp"</span><span class="p">:</span><span class="w"> </span><span class="mf">20.5</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"temp_unit"</span><span class="p">:</span><span class="w"> </span><span class="s2">"C"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"battery"</span><span class="p">:</span><span class="w"> </span><span class="mf">3.67</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gravity"</span><span class="p">:</span><span class="w"> </span><span class="mf">1.0050</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"gravity_unit"</span><span class="p">:</span><span class="w"> </span><span class="s2">"G"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="p">}</span><span class="w"></span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="influx-db-v2">
|
||||||
|
<span id="data-formats-influxdb2"></span><h2>Influx DB v2<a class="headerlink" href="#influx-db-v2" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>This is the format for InfluxDB v2</p>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">measurement</span><span class="p">,</span><span class="n">host</span><span class="o">=<</span><span class="n">mdns</span><span class="o">></span><span class="p">,</span><span class="n">device</span><span class="o">=<</span><span class="nb">id</span><span class="o">></span><span class="p">,</span><span class="n">temp</span><span class="o">-</span><span class="nb">format</span><span class="o">=<</span><span class="n">C</span><span class="o">|</span><span class="n">F</span><span class="o">></span><span class="p">,</span><span class="n">gravity</span><span class="o">-</span><span class="nb">format</span><span class="o">=</span><span class="n">SG</span><span class="p">,</span><span class="n">gravity</span><span class="o">=</span><span class="mf">1.0004</span><span class="p">,</span><span class="n">corr</span><span class="o">-</span><span class="n">gravity</span><span class="o">=</span><span class="mf">1.0004</span><span class="p">,</span><span class="n">angle</span><span class="o">=</span><span class="mf">45.45</span><span class="p">,</span><span class="n">temp</span><span class="o">=</span><span class="mf">20.1</span><span class="p">,</span><span class="n">battery</span><span class="o">=</span><span class="mf">3.96</span><span class="p">,</span><span class="n">rssi</span><span class="o">=-</span><span class="mi">18</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>This is the format template used to create the json above.</p>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>measurement,host=${mdns},device=${id},temp-format=${temp-unit},gravity-format=${gravity-unit} gravity=${gravity},corr-gravity=${corr-gravity},angle=${angle},temp=${temp},battery=${battery},rssi=${rssi}
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="mqtt">
|
||||||
|
<span id="data-formats-mqtt"></span><h2>MQTT<a class="headerlink" href="#mqtt" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>This is the format used to send data to MQTT. Each of the lines are specific topics</p>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">ispindel</span><span class="o">/</span><span class="n">device_name</span><span class="o">/</span><span class="n">tilt</span> <span class="mf">89.96796</span>
|
||||||
|
<span class="n">ispindel</span><span class="o">/</span><span class="n">device_name</span><span class="o">/</span><span class="n">temperature</span> <span class="mf">21.375</span>
|
||||||
|
<span class="n">ispindel</span><span class="o">/</span><span class="n">device_name</span><span class="o">/</span><span class="n">temp_units</span> <span class="n">C</span>
|
||||||
|
<span class="n">ispindel</span><span class="o">/</span><span class="n">device_name</span><span class="o">/</span><span class="n">battery</span> <span class="mf">0.04171</span>
|
||||||
|
<span class="n">ispindel</span><span class="o">/</span><span class="n">device_name</span><span class="o">/</span><span class="n">gravity</span> <span class="mf">33.54894</span>
|
||||||
|
<span class="n">ispindel</span><span class="o">/</span><span class="n">device_name</span><span class="o">/</span><span class="n">interval</span> <span class="mi">1</span>
|
||||||
|
<span class="n">ispindel</span><span class="o">/</span><span class="n">device_name</span><span class="o">/</span><span class="n">RSSI</span> <span class="o">-</span><span class="mi">58</span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>This is the format template used to create the json above.</p>
|
||||||
|
<div class="admonition tip">
|
||||||
|
<p class="admonition-title">Tip</p>
|
||||||
|
<p>Each line in the format is treated as one topic. The <cite>|</cite> is used as separator between lines and the first <cite>:</cite> is used as separator between topic and value. Each line is formatted as <cite><topic>:<value></cite></p>
|
||||||
|
</div>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>ispindel/${mdns}/tilt:${angle}|
|
||||||
|
ispindel/${mdns}/temperature:${temp}|
|
||||||
|
ispindel/${mdns}/temp_units:${temp-unit}|
|
||||||
|
ispindel/${mdns}/battery:${battery}|
|
||||||
|
ispindel/${mdns}/gravity:${gravity}|
|
||||||
|
ispindel/${mdns}/interval:${sleep-interval}|
|
||||||
|
ispindel/${mdns}/RSSI:${rssi}|
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
<p>This is a format template that is compatible with v0.6. Just replace the <cite>topic</cite> with the topic you want to post data to.</p>
|
||||||
|
<div class="highlight-default notranslate"><div class="highlight"><pre><span></span>topic:{"name":"gravmon","ID":"${id}","token":"gravmon","interval": ${sleep-interval},"temperature": ${temp},"temp-units": "${temp-unit}","gravity":${gravity},"angle": ${angle},"battery":${battery},"rssi": ${rssi},"corr-gravity":${corr-gravity},"gravity-unit": "${gravity-unit}","run-time": ${run-time}}|
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="version-json">
|
||||||
|
<h2>version.json<a class="headerlink" href="#version-json" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>Contents version.json. The version is used by the device to check if the this version is newer. The html files will also be downloaded if the are present on the server. This way it’s easy to
|
||||||
|
upgrade to a version that serve the html files from the file system. If they dont exist nothing will happen, the OTA flashing will still work. If the html files are missing from the file system
|
||||||
|
they can be uploaded manually afterwards.</p>
|
||||||
|
<div class="highlight-json notranslate"><div class="highlight"><pre><span></span><span class="p">{</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"project"</span><span class="p">:</span><span class="s2">"gravmon"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"version"</span><span class="p">:</span><span class="s2">"0.7.0"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="nt">"html"</span><span class="p">:</span><span class="w"> </span><span class="p">[</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="s2">"index.min.htm"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="s2">"device.min.htm"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="s2">"config.min.htm"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="s2">"format.min.htm"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="s2">"calibration.min.htm"</span><span class="p">,</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="s2">"about.min.htm"</span><span class="w"></span>
|
||||||
|
<span class="w"> </span><span class="p">]</span><span class="w"></span>
|
||||||
|
<span class="p">}</span><span class="w"></span>
|
||||||
|
</pre></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="compiling.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Compiling the software</div>
|
||||||
|
</div>
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="api.html">
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">REST API</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2021-2022, Magnus Persson
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
Contents
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Data Formats</a><ul>
|
||||||
|
<li><a class="reference internal" href="#ispindle-format">iSpindle format</a></li>
|
||||||
|
<li><a class="reference internal" href="#brewfather-format">Brewfather format</a></li>
|
||||||
|
<li><a class="reference internal" href="#influx-db-v2">Influx DB v2</a></li>
|
||||||
|
<li><a class="reference internal" href="#mqtt">MQTT</a></li>
|
||||||
|
<li><a class="reference internal" href="#version-json">version.json</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
268
docs/v0.8/formula.html
Normal file
@ -0,0 +1,268 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Service Integration" href="services.html" /><link rel="prev" title="Configuration" href="configuration.html" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.03.04"/>
|
||||||
|
<title>Create formula - GravityMon 0.8.0 documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=935aa2abcc5c1da4283d1dc201fb1f0add16d23a" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=25ceb02ed1c46dc30f2321ff83e92799f69dfdb9" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">GravityMon 0.8.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.8.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
<div class="section" id="create-formula">
|
||||||
|
<span id="id1"></span><h1>Create formula<a class="headerlink" href="#create-formula" title="Permalink to this headline">#</a></h1>
|
||||||
|
<a class="reference internal image-reference" href="_images/formula1.png"><img alt="Formula data" src="_images/formula1.png" style="width: 800px;"/></a>
|
||||||
|
<p>Here you can enter up to 5 values (angles + gravity) that is then used to create the formula. Angles equal to zero will be regarded as empty even if there is a gravity reading.</p>
|
||||||
|
<a class="reference internal image-reference" href="_images/formula2.png"><img alt="Formula graph" src="_images/formula2.png" style="width: 800px;"/></a>
|
||||||
|
<p>Once the formula is created a graph over the entered values and a simulation of the formula will give you a nice overview on how the formula will work.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="services.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Service Integration</div>
|
||||||
|
</div>
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="configuration.html">
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Configuration</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2021-2022, Magnus Persson
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer no-toc">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
428
docs/v0.8/functionallity.html
Normal file
@ -0,0 +1,428 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Getting started" href="intro.html" /><link rel="prev" title="Licence" href="license.html" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.03.04"/>
|
||||||
|
<title>Functionallity - GravityMon 0.8.0 documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=935aa2abcc5c1da4283d1dc201fb1f0add16d23a" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=25ceb02ed1c46dc30f2321ff83e92799f69dfdb9" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">GravityMon 0.8.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.8.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
<div class="section" id="functionallity">
|
||||||
|
<span id="id1"></span><h1>Functionallity<a class="headerlink" href="#functionallity" title="Permalink to this headline">#</a></h1>
|
||||||
|
<div class="section" id="the-main-features">
|
||||||
|
<h2>The main features<a class="headerlink" href="#the-main-features" title="Permalink to this headline">#</a></h2>
|
||||||
|
<ul>
|
||||||
|
<li><p><strong>Operates in two modes gravity monitoring and configuration mode</strong></p>
|
||||||
|
<p>In <code class="docutils literal notranslate"><span class="pre">gravity</span> <span class="pre">monitoring</span></code> mode it behaves just like the iSpindle, it wakes up at regular intervals, measures
|
||||||
|
angle/tile, temperature, calculates gravity and pushes the data to defined endpoints.</p>
|
||||||
|
<p>In <code class="docutils literal notranslate"><span class="pre">configuration</span> <span class="pre">mode</span></code> the device is always active and the webserver is active. Here you can view the
|
||||||
|
angle/tilt values, change configuration, update the gravity formula. When in this mode you can also interact
|
||||||
|
with the device via an REST API so data can be pushed to the device via scripts (see API section for more information).</p>
|
||||||
|
<a class="reference internal image-reference" href="_images/index.png"><img alt="UI example" src="_images/index.png" style="width: 700px;"/></a>
|
||||||
|
<p>You can force the device into <code class="docutils literal notranslate"><span class="pre">configuration</span> <span class="pre">mode</span></code> while measuring gravity. This is useful when calibrating
|
||||||
|
the device so you don’t needs to wait for the device to wake up and push the data. The entire calibration
|
||||||
|
sequence can be handled via the web interface without need for additional software tools.</p>
|
||||||
|
<p>See the <a class="reference internal" href="configuration.html#setting-up-device"><span class="std std-ref">Configuration</span></a> section for more information on how to trigger the configuration mode.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Can send data to multiple endpoints</strong></p>
|
||||||
|
<p>The original iSpindle can only have one destination, this software will push data to all defined endpoints so
|
||||||
|
in theory you can use them all. However this will consume more battery power so use only as many as needed. Its much
|
||||||
|
more efficient to have the endpoints on your local network than on the internet.</p>
|
||||||
|
<p>Currently the device supports the following endpoints.</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>http or https</p></li>
|
||||||
|
<li><p>influxdb v2</p></li>
|
||||||
|
<li><p>Brewfather</p></li>
|
||||||
|
<li><p>MQTT</p></li>
|
||||||
|
<li><p>Home Assistant</p></li>
|
||||||
|
<li><p>Brew Spy</p></li>
|
||||||
|
<li><p>Brewers Friend</p></li>
|
||||||
|
<li><p>Fermentrack</p></li>
|
||||||
|
<li><p>Ubidots</p></li>
|
||||||
|
<li><p>Thingsspeak</p></li>
|
||||||
|
</ul>
|
||||||
|
<p>Under the <a class="reference internal" href="services.html#services"><span class="std std-ref">Service Integration</span></a> section you can find guides for how to connect GravityMon to these services. For a
|
||||||
|
description of what data is transmitted you can see <a class="reference internal" href="data.html#data-formats"><span class="std std-ref">Data Formats</span></a>.</p>
|
||||||
|
<p>The software support SSL endpoints but currently without CA validation, this means that the data is encrypted
|
||||||
|
but it does not validate if the remote endpoint is who it claims to be.</p>
|
||||||
|
<p>if you require CA validation please leave a comment on GitHub and I will make that a priority. Adding this function
|
||||||
|
will dramatically reduce the battery life of the device.</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>Using SSL on a small device such as the esp8266 can be unstable since it requires a lot of RAM to work. And running out
|
||||||
|
of RAM will cause the device to crash. So enable SSL with caution and only when you really need it. GravityMon will try
|
||||||
|
to minimize the needed RAM but the remote service might not support that feature.</p>
|
||||||
|
</div>
|
||||||
|
<ul>
|
||||||
|
<li><p><strong>Create gravity formulas on the device</strong></p>
|
||||||
|
<p>Another big difference is that this software can create the gravity formula in the device, just enter the
|
||||||
|
angle/gravity data that you have collected. You will also see a graph simulating how the formula would work.</p>
|
||||||
|
<p>Currently the device can handle 5 data points which should be enough to get a accurate formula. At least 3 data points
|
||||||
|
is needed to get an accurate formula.</p>
|
||||||
|
<p>If there is a need for more data points, raise a comment on github.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Customize the data format beeing sent to push targets</strong></p>
|
||||||
|
<p>In order to make it easier to support more targets there is a built in format editor that can be used to
|
||||||
|
customize the data that is to be sent. This way you can easily adapt the software to new targets without coding.
|
||||||
|
If you have a good template please share it on the github repository and I will add it to the documentation
|
||||||
|
for other users to enjoy. See the <a class="reference internal" href="advanced.html#format-editor"><span class="std std-ref">Format editor</span></a> for more information. See <a class="reference internal" href="services.html#services"><span class="std std-ref">Service Integration</span></a> for a list of
|
||||||
|
services currently validated.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Automatic temperature adjustment of gravity reading</strong></p>
|
||||||
|
<p>If you want to correct gravity based on beer temperature you can do this in the formula but here is a nice
|
||||||
|
feature that can correct the gravity as a second step making this independant of the formula.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>OTA support from webserver</strong></p>
|
||||||
|
<p>When starting up in configuration mode the device will check for a software update from a webserver. This is an easily
|
||||||
|
way to keep the software up to date. In the future I might add a hosted endpoint for providing updates.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>DS18B20 temperature adjustments</strong></p>
|
||||||
|
<p>You can adjust the temperature reading of the temperature sensor. In normal cases this should not be needed since
|
||||||
|
the sensors should be calibrated.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Gyro Movement</strong></p>
|
||||||
|
<p>The software will detect if the gyro is moving and if this is the case it will go back to sleep for 60seconds.
|
||||||
|
This way we should avoid faulty measurements and peaks in the graphs.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>WIFI connection issues</strong></p>
|
||||||
|
<p>The software will not wait indefiently for a wifi connection. If it takes longer than 20 seconds to connect then
|
||||||
|
the device will go into deep sleep for 60 seoncds and then retry later. This to conserve batter as much as possible.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Use gyro temperature sensor</strong></p>
|
||||||
|
<p>This works fine when the device has time to cool down between measurements and it saves up to 400 ms.
|
||||||
|
My testing shows that this is quite accurate with a deviation of less than 0.3C. This
|
||||||
|
reduces the run time by 20% (with optimal wifi connection).</p>
|
||||||
|
<p>The graph below compares from the temp from two different devices in the same bucket of water. One with
|
||||||
|
gyro temp enabled and one with the DS18B20 sensor. The blue line is the gyro temperature and this clear
|
||||||
|
that the temperature will be higher after it has been running but cools down when in sleep mode. The interval
|
||||||
|
has been set to 300s. A low delay of 30s will not allow the gyro to cool down and the temperature will
|
||||||
|
be 0.5-1.0C higher.</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<a class="reference internal image-reference" href="_images/temp1.png"><img alt="Gyro temp vs DS18B20" src="_images/temp1.png" style="width: 800px;"/></a>
|
||||||
|
<ul>
|
||||||
|
<li><p><strong>Celsius or Farenheigt</strong></p>
|
||||||
|
<p>You can switch between different temperature formats. GravityMon will always use C for it’s internal calculations and
|
||||||
|
convert to F when displayed.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>SG or Plato</strong></p>
|
||||||
|
<p>You can switch between different gravity formats. GravityMon will always use SG for it’s internal calculations and
|
||||||
|
convert to Plato when displayed.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Stable gyro data</strong></p>
|
||||||
|
<p>The device will read the gyro 50 times to get an accurate reading. If the standad deviation is to high it will not
|
||||||
|
use the data since this is inacurate and the device is probably moving, probably do to active fermentation or movement of
|
||||||
|
fermentation vessel. This sequence takes 900 ms seconds to execute and besides wifi connection this is what consumes the most
|
||||||
|
battery. With more testing this might be changes to either speed up or provide more stable readings.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Performance measurements</strong></p>
|
||||||
|
<p>I’ve also create a small library to measure execution code in some areas of the code that i know is time consuming. This
|
||||||
|
way I can find a good balance between performace and quality. This is a lot of help trying to figure out where bottlenecks
|
||||||
|
are in the code and where to put optimization efforts. Examples of real measurements:</p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>Reading the gyro: 885 ms</p></li>
|
||||||
|
<li><p>Reading DS18B20 temperature sensor: 546 ms</p></li>
|
||||||
|
<li><p>Connect to WIFI: 408 ms</p></li>
|
||||||
|
<li><p>Send data to local influxdb v2: 25 ms</p></li>
|
||||||
|
<li><p>Send data to local mqtt server: 35 ms</p></li>
|
||||||
|
<li><p>Send data to local http server: 40 ms</p></li>
|
||||||
|
<li><p>Send data to http server on internet: 0.2 - 5 seconds</p></li>
|
||||||
|
</ul>
|
||||||
|
<p>See the <a class="reference internal" href="compiling.html#compiling-the-software"><span class="std std-ref">Compiling the software</span></a> for more information.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>Power measurements</strong></p>
|
||||||
|
<p>I’ve also create a project to measure the power consumption of the device, but more on this later.</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="battery-life">
|
||||||
|
<h2>Battery life<a class="headerlink" href="#battery-life" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>The long term battery test has now been completed. Using a 2200 mA battery and sending data every 5 minutes to a local server on my network. The battery lasted 47 days which is excellet battery life.</p>
|
||||||
|
<p>In another test I had a device running with an sleep interval of only 30s with ok wifi connection. The device lasted 12 days which i think is excellent considering the short sleep interval.</p>
|
||||||
|
<p>From what I have discovered it’s the WIFI connection or latency to internet hosted that has the most impact on the battery life. The typical runtime in the tests above was around 2 seconds.</p>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="performance">
|
||||||
|
<h2>Performance<a class="headerlink" href="#performance" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>Since I have the possibility to measure the performance of different function in the code this is what I have been able to gather.</p>
|
||||||
|
<p>The typical runtime in a measurement cycle is approx 2 seconds and in some cases it can take up to 6-8 seconds but this is mainly related to establishing the WIFI connection. So stable wifi is
|
||||||
|
essential for long batterylife. Out of the 2 seconds of run-time the major time is spent on gyro readings (1.3s) and temperature measurements of (0.6s) so using the gyro sensor for measureing
|
||||||
|
temperature would reduce the total runtime with 25%. Sending data over http takes less than 100ms (on my local network) so this is not drawing much power.</p>
|
||||||
|
<p>The image below shows how the run-time varies over time. The pink line is the wifi connection time and this is why the time varies. The orange is the total runtime for the awake period.</p>
|
||||||
|
<a class="reference internal image-reference" href="_images/perf1.png"><img alt="Performance view" src="_images/perf1.png" style="width: 800px;"/></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="intro.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Getting started</div>
|
||||||
|
</div>
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="license.html">
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Licence</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2021-2022, Magnus Persson
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
Contents
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Functionallity</a><ul>
|
||||||
|
<li><a class="reference internal" href="#the-main-features">The main features</a></li>
|
||||||
|
<li><a class="reference internal" href="#battery-life">Battery life</a></li>
|
||||||
|
<li><a class="reference internal" href="#performance">Performance</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
247
docs/v0.8/genindex.html
Normal file
@ -0,0 +1,247 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="#" /><link rel="search" title="Search" href="search.html" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.03.04"/><title>Index - GravityMon 0.8.0 documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=935aa2abcc5c1da4283d1dc201fb1f0add16d23a" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=25ceb02ed1c46dc30f2321ff83e92799f69dfdb9" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">GravityMon 0.8.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.8.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
|
||||||
|
<section class="genindex-section">
|
||||||
|
<h1 id="index">Index</h1>
|
||||||
|
<div class="genindex-jumpbox"></div>
|
||||||
|
</section>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2021-2022, Magnus Persson
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer no-toc">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
474
docs/v0.8/index.html
Normal file
@ -0,0 +1,474 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Licence" href="license.html" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.03.04"/>
|
||||||
|
<title>GravityMon 0.8.0 documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=935aa2abcc5c1da4283d1dc201fb1f0add16d23a" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=25ceb02ed1c46dc30f2321ff83e92799f69dfdb9" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="#"><div class="brand">GravityMon 0.8.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="#">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.8.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
<div class="section" id="welcome-to-gravitymon-s-documentation">
|
||||||
|
<h1>Welcome to GravityMon’s documentation!<a class="headerlink" href="#welcome-to-gravitymon-s-documentation" title="Permalink to this headline">#</a></h1>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>This documentation reflects <strong>v0.8</strong>. Last updated 2022-03-05</p>
|
||||||
|
</div>
|
||||||
|
<p>GravityMon is used to measure gravity and temperature during fermentation of beer and report the progress. The graph below is
|
||||||
|
an example on how the fermentation process can be tracked. This is from my last brew that was over on a few days. The graph is rendered using
|
||||||
|
Fermentrack.</p>
|
||||||
|
<a class="reference internal image-reference" href="_images/fermentation.png"><img alt="Example fermentation" src="_images/fermentation.png" style="width: 500px;"/></a>
|
||||||
|
<p>GravityMon is a replacement firmware for the iSpindle and uses the same hardware configuration and is 100% compatible. It
|
||||||
|
implements a lot of the features that has been requested in the orginal iSpindle project but has been rejected for
|
||||||
|
various reasons. Here is a list of <a class="reference internal" href="#main-features"><span class="std std-ref">Main features:</span></a>.</p>
|
||||||
|
<p>I started GravityMon because I like to create software and wanted to do some low level programming. I had done a few
|
||||||
|
projects based on esp8266 and also started to brew beer so this combination was quite natural.</p>
|
||||||
|
<p>The hardware design comes from the fantastic iSpindle project so that is not covered in this documentation. For more
|
||||||
|
information on this topic and function please visit <a class="reference external" href="https://www.ispindel.de">iSpindel Homepage</a> .</p>
|
||||||
|
<p>My approach to this software is a little different from that the original iSpindle firmware. The github repository
|
||||||
|
can be found here; <a class="reference external" href="https://github.com/mp-se/gravitymon">GravityMon on Github</a></p>
|
||||||
|
<div class="admonition note">
|
||||||
|
<p class="admonition-title">Note</p>
|
||||||
|
<p>I dont take responsibility for any errors or issues caused by the software. The software is provided as-is. I will however
|
||||||
|
try my best to fix issues that might occur.</p>
|
||||||
|
<p>I have tested this software over the last year on 20+ brews with good results.</p>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="main-features">
|
||||||
|
<span id="id1"></span><h2>Main features:<a class="headerlink" href="#main-features" title="Permalink to this headline">#</a></h2>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>Operates in two modes gravity monitoring and configuration mode (simplify calibration). Gravity mode
|
||||||
|
is comparable to how the iSpindle works.</p></li>
|
||||||
|
<li><p>Modern web based UI when in configuration mode. No need to start the access point changing settings.</p></li>
|
||||||
|
<li><p>REST API to enable scripted configuration</p></li>
|
||||||
|
<li><p>Send data to multiple endpoints and services at once</p></li>
|
||||||
|
<li><p>Setup guides for how to send data to many popular services. Currently 8+ are documented.</p></li>
|
||||||
|
<li><p>Automatic temperature adjustment of gravity reading</p></li>
|
||||||
|
<li><p>OTA support from webserver</p></li>
|
||||||
|
<li><p>Built in function to create gravity formulas, no need for additional software, just enter tilt/gravity and
|
||||||
|
let GravityMon create the formula.</p></li>
|
||||||
|
<li><p>Visual graph showing how formula will be interpreted based on entered values</p></li>
|
||||||
|
<li><p>Using the temperature sensor in gyro instead of DS18B20 (faster)</p></li>
|
||||||
|
<li><p>SSL support in standard HTTP and MQTT connections.</p></li>
|
||||||
|
<li><p>Option to customize data posted to endpoints using template from the UI.</p></li>
|
||||||
|
<li><p>Built in performance measurements (used to optimise code)</p></li>
|
||||||
|
</ul>
|
||||||
|
<p>For a complete breakdown see the <a class="reference internal" href="functionallity.html#functionallity"><span class="std std-ref">Functionallity</span></a></p>
|
||||||
|
<p>This is a simple overview of the different components that the software contains. The green ones are only active during <cite>configuration mode</cite> in
|
||||||
|
order to save battery.</p>
|
||||||
|
<a class="reference internal image-reference" href="_images/software_design.png"><img alt="Software design" src="_images/software_design.png" style="width: 600px;"/></a>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="credits-to">
|
||||||
|
<h2>Credits to<a class="headerlink" href="#credits-to" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>Ideas to some of these functions have been picked up from disucssions in the iSpindle forums. This software uses
|
||||||
|
the following libraries and without these this would have been much more difficult to acheive:</p>
|
||||||
|
<ul>
|
||||||
|
<li><p><a class="reference external" href="https://github.com/jrowberg/i2cdevlib">https://github.com/jrowberg/i2cdevlib</a></p>
|
||||||
|
<p>This library contains the basic code to interact with the gyro + many more chips.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><a class="reference external" href="https://github.com/codeplea/tinyexpr">https://github.com/codeplea/tinyexpr</a></p>
|
||||||
|
<p>Proccess the gravity formula and calculate the gravity and various corrections.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><a class="reference external" href="https://github.com/graphitemaster/incbin">https://github.com/graphitemaster/incbin</a></p>
|
||||||
|
<p>Include binary files into the code, used to service html files.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><a class="reference external" href="https://github.com/khoih-prog/ESP_DoubleResetDetector">https://github.com/khoih-prog/ESP_DoubleResetDetector</a></p>
|
||||||
|
<p>Can detect if the reset button is pressed twice, is used to enter WIFI config mode.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><a class="reference external" href="https://github.com/khoih-prog/ESP_WiFiManager">https://github.com/khoih-prog/ESP_WiFiManager</a></p>
|
||||||
|
<p>Configure wifi settings.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><a class="reference external" href="https://github.com/thijse/Arduino-Log">https://github.com/thijse/Arduino-Log</a></p>
|
||||||
|
<p>Logging library for handling different loglevels and configure what sent over the serial.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><a class="reference external" href="https://github.com/bblanchon/ArduinoJson">https://github.com/bblanchon/ArduinoJson</a></p>
|
||||||
|
<p>Json parser/creator used in configuration files and API’s</p>
|
||||||
|
</li>
|
||||||
|
<li><p><a class="reference external" href="https://github.com/PaulStoffregen/OneWire">https://github.com/PaulStoffregen/OneWire</a></p>
|
||||||
|
<p>Communication library used for interacting with temperature sensor.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><a class="reference external" href="https://github.com/milesburton/Arduino-Temperature-Control-Library">https://github.com/milesburton/Arduino-Temperature-Control-Library</a></p>
|
||||||
|
<p>Interaction with the DS18B20 sensor</p>
|
||||||
|
</li>
|
||||||
|
<li><p><a class="reference external" href="https://github.com/Rotario/arduinoCurveFitting">https://github.com/Rotario/arduinoCurveFitting</a></p>
|
||||||
|
<p>Create the gravity formula.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><a class="reference external" href="https://github.com/256dpi/arduino-mqtt">https://github.com/256dpi/arduino-mqtt</a></p>
|
||||||
|
<p>Library for sending data to mqtt based on lightweight mqtt implemenentation.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><a class="reference external" href="https://graphjs.com/">https://graphjs.com/</a></p>
|
||||||
|
<p>Render the graphs in the UI.</p>
|
||||||
|
</li>
|
||||||
|
<li><p><a class="reference external" href="https://getbootstrap.com/">https://getbootstrap.com/</a></p>
|
||||||
|
<p>CSS templates for the web page.</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<div class="toctree-wrapper compound">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="functionallity.html#the-main-features">The main features</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="functionallity.html#battery-life">Battery life</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="functionallity.html#performance">Performance</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="intro.html#step-1-flash-the-device">Step 1 - Flash the device</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="intro.html#step-2-setup-wifi">Step 2 - Setup WIFI</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="intro.html#step-3-configuration">Step 3 - Configuration</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="intro.html#step-4-completed">Step 4 - Completed</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="installation.html#brewflasher">Brewflasher</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="installation.html#esptool">Esptool</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="installation.html#serial-monitoring">Serial Monitoring</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="installation.html#configuring-wifi">Configuring WIFI</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="releases.html#v0-8-0">v0.8.0</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="releases.html#v0-7-1">v0.7.1</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="releases.html#v0-7-0">v0.7.0</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="releases.html#v0-6-0">v0.6.0</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="releases.html#v0-5-0">v0.5.0</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="releases.html#v0-4-0">v0.4.0</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="configuration.html#status">Status</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="configuration.html#device">Device</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="configuration.html#id1">Configuration</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="services.html#brewfather">Brewfather</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="services.html#fermentrack">Fermentrack</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="services.html#ubidots">UBIdots</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="services.html#home-assistant">Home Assistant</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="services.html#brewer-s-friend">Brewer’s Friend</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="services.html#brewspy">Brewspy</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="services.html#thingspeak">Thingspeak</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="advanced.html#format-editor">Format editor</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="api.html#get-api-config">GET: /api/config</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="api.html#get-api-device">GET: /api/device</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="api.html#get-api-status">GET: /api/status</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="api.html#get-api-config-formula">GET: /api/config/formula</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="api.html#get-api-factory">GET: /api/factory</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="api.html#post-api-config-device">POST: /api/config/device</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="api.html#post-api-config-push">POST: /api/config/push</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="api.html#post-api-config-gravity">POST: /api/config/gravity</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="api.html#post-api-config-hardware">POST: /api/config/hardware</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="api.html#post-api-config-formula">POST: /api/config/formula</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="api.html#calling-the-api-s-from-python">Calling the API’s from Python</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="data.html#ispindle-format">iSpindle format</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="data.html#brewfather-format">Brewfather format</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="data.html#influx-db-v2">Influx DB v2</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="data.html#mqtt">MQTT</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="data.html#version-json">version.json</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="compiling.html#tools">Tools</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="compiling.html#code-formatting">Code Formatting</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="compiling.html#targets">Targets</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="compiling.html#source-structure">Source structure</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="compiling.html#options">Options</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="troubleshooting.html#log-errors">Log errors</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a><ul>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="q_and_a.html#my-device-is-no-going-in-to-sleep-after-fully-charged">My device is no going in to sleep after fully charged</a></li>
|
||||||
|
<li class="toctree-l2"><a class="reference internal" href="q_and_a.html#my-device-reports-a-temperature-of-273c-or-491f">My device reports a temperature of -273C or -491F</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="indices-and-tables">
|
||||||
|
<h3>Indices and tables<a class="headerlink" href="#indices-and-tables" title="Permalink to this headline">#</a></h3>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p><a class="reference internal" href="genindex.html"><span class="std std-ref">Index</span></a></p></li>
|
||||||
|
<li><p><a class="reference internal" href="py-modindex.html"><span class="std std-ref">Module Index</span></a></p></li>
|
||||||
|
<li><p><a class="reference internal" href="search.html"><span class="std std-ref">Search Page</span></a></p></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="license.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Licence</div>
|
||||||
|
</div>
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2021-2022, Magnus Persson
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
Contents
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Welcome to GravityMon’s documentation!</a><ul>
|
||||||
|
<li><a class="reference internal" href="#main-features">Main features:</a></li>
|
||||||
|
<li><a class="reference internal" href="#credits-to">Credits to</a><ul>
|
||||||
|
<li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
337
docs/v0.8/installation.html
Normal file
@ -0,0 +1,337 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Releases" href="releases.html" /><link rel="prev" title="Getting started" href="intro.html" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.03.04"/>
|
||||||
|
<title>Installation - GravityMon 0.8.0 documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=935aa2abcc5c1da4283d1dc201fb1f0add16d23a" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=25ceb02ed1c46dc30f2321ff83e92799f69dfdb9" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">GravityMon 0.8.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.8.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a></li>
|
||||||
|
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Installation</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
<div class="section" id="installation">
|
||||||
|
<span id="id1"></span><h1>Installation<a class="headerlink" href="#installation" title="Permalink to this headline">#</a></h1>
|
||||||
|
<div class="section" id="brewflasher">
|
||||||
|
<h2>Brewflasher<a class="headerlink" href="#brewflasher" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>The prefered option for flashing GravityMon is using BrewFlasher, its a tools that support many brewing related firmwares for ESP8266 and ESP32. This works
|
||||||
|
on both Windows and Mac. You can download the latest version from here: <a class="reference external" href="https://www.brewflasher.com/">Brewflasher</a></p>
|
||||||
|
<a class="reference internal image-reference" href="_images/brewflasher.png"><img alt="Serial output" src="_images/brewflasher.png" style="width: 600px;"/></a>
|
||||||
|
<div class="section" id="binaries">
|
||||||
|
<h3>Binaries<a class="headerlink" href="#binaries" title="Permalink to this headline">#</a></h3>
|
||||||
|
<p>In the /bin directory you will find 2 different firmware builds;</p>
|
||||||
|
<ul>
|
||||||
|
<li><p><strong>firmware.bin</strong></p>
|
||||||
|
<p>This is the standard release build (prefered version)</p>
|
||||||
|
</li>
|
||||||
|
<li><p><strong>firmware-perf.bin</strong></p>
|
||||||
|
<p>This version also submits performance data to an influx database with detailed execution times.</p>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
<p>In these versions all the html files are embedded in the binaries. The file system is currently only used for storing
|
||||||
|
the configuration file.</p>
|
||||||
|
<p>If the software becomes so large the html files can be moved to the file system, but this is not enabled by
|
||||||
|
default (see compiling for details). This approach makes installation much easier and ensure that html files
|
||||||
|
and code is in sync.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="esptool">
|
||||||
|
<h2>Esptool<a class="headerlink" href="#esptool" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>The other option for flashing esp8266 device is via the official esptool. Documentation can be found
|
||||||
|
here; <a class="reference external" href="https://docs.espressif.com/projects/esptool/en/latest/esp32/">esptool home page</a></p>
|
||||||
|
<p>Windows 10 should install a driver for the USB -> Serial automatically when you connect a esp8266.</p>
|
||||||
|
<p>The basic command for flashing on Windows is;</p>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">esptool.py</span> <span class="pre">--port</span> <span class="pre">COM4</span> <span class="pre">write_flash</span> <span class="pre">0x0</span> <span class="pre">firmware.bin</span></code></p>
|
||||||
|
<p>If there are issues you can try do erase the flash first using this command;</p>
|
||||||
|
<p><code class="docutils literal notranslate"><span class="pre">esptool.py</span> <span class="pre">--port</span> <span class="pre">COM4</span> <span class="pre">erase_flash</span></code></p>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="serial-monitoring">
|
||||||
|
<h2>Serial Monitoring<a class="headerlink" href="#serial-monitoring" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>To check output from the device (logs) there are several tools out there. I found this simple tool in the Windows Store called <code class="docutils literal notranslate"><span class="pre">Serial</span> <span class="pre">Port</span> <span class="pre">Monitoring</span></code>.
|
||||||
|
Just select a baud rate of 115200, 8N1.</p>
|
||||||
|
<a class="reference internal image-reference" href="_images/serial.png"><img alt="Serial output" src="_images/serial.png" style="width: 800px;"/></a>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="configuring-wifi">
|
||||||
|
<span id="setup-wifi"></span><h2>Configuring WIFI<a class="headerlink" href="#configuring-wifi" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>When the device is flashed it will need to have WIFI configuration in order to work. If you have used other software on
|
||||||
|
the device its possible that wifi settings exist.</p>
|
||||||
|
<p>If this is not configured in the device it will create an wirless access point called <cite>GravMon</cite>. The default password is <cite>password</cite>.</p>
|
||||||
|
<p>Connect to this AP and enter the SSID and password you want to use. If the web page dont open automatically you can enter the following adress
|
||||||
|
in the browser: <strong>http://192.168.4.1</strong></p>
|
||||||
|
<a class="reference internal image-reference" href="_images/wifi.png"><img alt="Wifi page" src="_images/wifi.png" style="width: 200px;"/></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="releases.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Releases</div>
|
||||||
|
</div>
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="intro.html">
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Getting started</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2021-2022, Magnus Persson
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
Contents
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Installation</a><ul>
|
||||||
|
<li><a class="reference internal" href="#brewflasher">Brewflasher</a><ul>
|
||||||
|
<li><a class="reference internal" href="#binaries">Binaries</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a class="reference internal" href="#esptool">Esptool</a></li>
|
||||||
|
<li><a class="reference internal" href="#serial-monitoring">Serial Monitoring</a></li>
|
||||||
|
<li><a class="reference internal" href="#configuring-wifi">Configuring WIFI</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
344
docs/v0.8/intro.html
Normal file
@ -0,0 +1,344 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Installation" href="installation.html" /><link rel="prev" title="Functionallity" href="functionallity.html" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.03.04"/>
|
||||||
|
<title>Getting started - GravityMon 0.8.0 documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=935aa2abcc5c1da4283d1dc201fb1f0add16d23a" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=25ceb02ed1c46dc30f2321ff83e92799f69dfdb9" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">GravityMon 0.8.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.8.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Getting started</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
<div class="section" id="getting-started">
|
||||||
|
<span id="id1"></span><h1>Getting started<a class="headerlink" href="#getting-started" title="Permalink to this headline">#</a></h1>
|
||||||
|
<p>First you need a completed iSpindle hardware, there are several resouces around that topic so it
|
||||||
|
will not be covered in this documentation. Please visit <a class="reference external" href="https://www.ispindel.de">iSpindel Homepage</a> for
|
||||||
|
more information.</p>
|
||||||
|
<div class="section" id="step-1-flash-the-device">
|
||||||
|
<h2>Step 1 - Flash the device<a class="headerlink" href="#step-1-flash-the-device" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>The first step is to flash the firmware, I recommend using Brewflasher as the easy option. Detailed
|
||||||
|
instructions can be found here <a class="reference internal" href="installation.html#installation"><span class="std std-ref">Installation</span></a></p>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="step-2-setup-wifi">
|
||||||
|
<h2>Step 2 - Setup WIFI<a class="headerlink" href="#step-2-setup-wifi" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>When the device starts up the first time it will first start an WIFI access point so that the WIFI Settings
|
||||||
|
can be configured. The instructions for that can be found here <a class="reference internal" href="installation.html#setup-wifi"><span class="std std-ref">Configuring WIFI</span></a></p>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="step-3-configuration">
|
||||||
|
<h2>Step 3 - Configuration<a class="headerlink" href="#step-3-configuration" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>Once the device can connect to WIFI it will go into <cite>configuration mode</cite> and start a web server for
|
||||||
|
doing the initial configuration. In order to access the device you will need to find its name or ip adress.</p>
|
||||||
|
<p>It will broadcast a name like gravitymonXXXXXX.local over mDNS. Where the XXXXXX is the unique device id. You can
|
||||||
|
find the name via an mDNS browser, check your router or connect the device to a serial monitor. On windows mDNS
|
||||||
|
might not work so then use the IP address instead. Once connected you will meet a web interface that looks like this.</p>
|
||||||
|
<a class="reference internal image-reference" href="_images/index.png"><img alt="Index page" src="_images/index.png" style="width: 800px;"/></a>
|
||||||
|
<p>The next step is then to configure the device, most settings should work but there are a few that should be changed.</p>
|
||||||
|
<div class="section" id="configuration-device-settings-device-name">
|
||||||
|
<h3>Configuration - Device Settings - Device Name<a class="headerlink" href="#configuration-device-settings-device-name" title="Permalink to this headline">#</a></h3>
|
||||||
|
<p>Give your device a good name.</p>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="configuration-device-settings-gyro-calibration">
|
||||||
|
<h3>Configuration - Device Settings - Gyro Calibration<a class="headerlink" href="#configuration-device-settings-gyro-calibration" title="Permalink to this headline">#</a></h3>
|
||||||
|
<p>You need to place the device on a flat surface and then press the
|
||||||
|
calibrate button. It will take a few seconds for this to complete and the angle should be close to 90 degress. Without
|
||||||
|
calibration the device will not go into gravity mode.</p>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="configuration-push-settings">
|
||||||
|
<h3>Configuration - Push Settings<a class="headerlink" href="#configuration-push-settings" title="Permalink to this headline">#</a></h3>
|
||||||
|
<p>Add the endpoints where you want data to be transmitted. All URLs that contain a valid endpoint will receive the data.</p>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="calibration">
|
||||||
|
<h3>Calibration<a class="headerlink" href="#calibration" title="Permalink to this headline">#</a></h3>
|
||||||
|
<p>I recommend to use the calibration feature to create a gravity formula. If you have values from a
|
||||||
|
previous calibration then you can add them here, if not follow the calibration guidelines on the iSpindle site.</p>
|
||||||
|
<p>There are several guides for how to calibrate the device (<a class="reference external" href="https://www.ispindel.de/docs/Calibration_en.html">iSpindle Calibration</a>)</p>
|
||||||
|
<p>This will get the data points needed to create the formula, and the datapoints will be stored on the device so you can
|
||||||
|
adjust them when needed.</p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="step-4-completed">
|
||||||
|
<h2>Step 4 - Completed<a class="headerlink" href="#step-4-completed" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>You are now done and can enjoy the GravityMon software. Check out the <a class="reference internal" href="configuration.html#setting-up-device"><span class="std std-ref">Configuration</span></a> section for other configuration options.</p>
|
||||||
|
<p>If you want to enter the configuration mode place the device flat on a surface and do a reset (or wait until it wakes up).
|
||||||
|
Its recommended to attach the device to power when you have it in <cite>configuration mode</cite> so the battery is not drained.</p>
|
||||||
|
<p><strong>If you have suggestions for more awesome features, head over to the github repository and make a request.</strong></p>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="installation.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Installation</div>
|
||||||
|
</div>
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="functionallity.html">
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Functionallity</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2021-2022, Magnus Persson
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
Contents
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Getting started</a><ul>
|
||||||
|
<li><a class="reference internal" href="#step-1-flash-the-device">Step 1 - Flash the device</a></li>
|
||||||
|
<li><a class="reference internal" href="#step-2-setup-wifi">Step 2 - Setup WIFI</a></li>
|
||||||
|
<li><a class="reference internal" href="#step-3-configuration">Step 3 - Configuration</a><ul>
|
||||||
|
<li><a class="reference internal" href="#configuration-device-settings-device-name">Configuration - Device Settings - Device Name</a></li>
|
||||||
|
<li><a class="reference internal" href="#configuration-device-settings-gyro-calibration">Configuration - Device Settings - Gyro Calibration</a></li>
|
||||||
|
<li><a class="reference internal" href="#configuration-push-settings">Configuration - Push Settings</a></li>
|
||||||
|
<li><a class="reference internal" href="#calibration">Calibration</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
<li><a class="reference internal" href="#step-4-completed">Step 4 - Completed</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
281
docs/v0.8/license.html
Normal file
@ -0,0 +1,281 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Functionallity" href="functionallity.html" /><link rel="prev" title="Welcome to GravityMon’s documentation!" href="index.html" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.03.04"/>
|
||||||
|
<title>Licence - GravityMon 0.8.0 documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=935aa2abcc5c1da4283d1dc201fb1f0add16d23a" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=25ceb02ed1c46dc30f2321ff83e92799f69dfdb9" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">GravityMon 0.8.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.8.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
<div class="section" id="licence">
|
||||||
|
<span id="id1"></span><h1>Licence<a class="headerlink" href="#licence" title="Permalink to this headline">#</a></h1>
|
||||||
|
<p>MIT License</p>
|
||||||
|
<p>Copyright (c) 2021-22 Magnus</p>
|
||||||
|
<p>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:</p>
|
||||||
|
<p>The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.</p>
|
||||||
|
<p>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.</p>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="functionallity.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Functionallity</div>
|
||||||
|
</div>
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="index.html">
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Home</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2021-2022, Magnus Persson
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer no-toc">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
6
docs/v0.8/objects.inv
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
# Sphinx inventory version 2
|
||||||
|
# Project: GravityMon
|
||||||
|
# Version:
|
||||||
|
# The remainder of this file is compressed using zlib.
|
||||||
|
xڅU<EFBFBD>n<EFBFBD>0<10><>+X<><58><EFBFBD><05>cnNRj<><6A>
|
||||||
|
<EFBFBD>h<EFBFBD>"e<13>H<EFBFBD><48><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>K<EFBFBD><4B>C"%<0B><>Ù<EFBFBD>]r<>%<25>Ld<4C>(2<>>PU"<22><03><>}?<3F>Z<EFBFBD>Ed<)Y<>c<EFBFBD><63><EFBFBD>J<16>ᙦ<EFBFBD><E199A6><EFBFBD><EFBFBD><EFBFBD>v<EFBFBD><16>UQ<55><51><EFBFBD><EFBFBD><EFBFBD>cJ<63>AO~<7E>9<EFBFBD>ĐQ<C490><51><10>)G<><47>r`b<>t<EFBFBD>u<EFBFBD>+<2B>:O%9<><39><EFBFBD><02>j~h<><68><EFBFBD><01>u=R<><52><11>p<EFBFBD>t<EFBFBD>
|
292
docs/v0.8/q_and_a.html
Normal file
@ -0,0 +1,292 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="prev" title="Troubleshooting" href="troubleshooting.html" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.03.04"/>
|
||||||
|
<title>Q & A - GravityMon 0.8.0 documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=935aa2abcc5c1da4283d1dc201fb1f0add16d23a" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=25ceb02ed1c46dc30f2321ff83e92799f69dfdb9" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">GravityMon 0.8.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.8.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Q & A</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
<div class="section" id="q-a">
|
||||||
|
<h1>Q & A<a class="headerlink" href="#q-a" title="Permalink to this headline">#</a></h1>
|
||||||
|
<div class="section" id="my-device-is-no-going-in-to-sleep-after-fully-charged">
|
||||||
|
<h2>My device is no going in to sleep after fully charged<a class="headerlink" href="#my-device-is-no-going-in-to-sleep-after-fully-charged" title="Permalink to this headline">#</a></h2>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>Calibrate the device in the web interface</p></li>
|
||||||
|
<li><p>Check the angle/tilt. If the device is reporting 90 degress then its not going into sleep. Tilt the device and check if sleep works.</p></li>
|
||||||
|
<li><p>Check in reported voltage of the battery in the web interface. If this is higher than 4.15V the device belives its beeing charged. In that case adjust the voltage factor under hardware so the voltage drops below 4.15V.</p></li>
|
||||||
|
<li><p>Check if the <cite>always on</cite> option is activated in the web interface.</p></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="my-device-reports-a-temperature-of-273c-or-491f">
|
||||||
|
<h2>My device reports a temperature of -273C or -491F<a class="headerlink" href="#my-device-reports-a-temperature-of-273c-or-491f" title="Permalink to this headline">#</a></h2>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>The DS18B20 temperature sensor cannot be found and this is the default value reported in this case.</p></li>
|
||||||
|
<li><p>Check the orienation of the sensor and soldering.</p></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
|
||||||
|
<a class="prev-page" href="troubleshooting.html">
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Troubleshooting</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2021-2022, Magnus Persson
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
Contents
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Q & A</a><ul>
|
||||||
|
<li><a class="reference internal" href="#my-device-is-no-going-in-to-sleep-after-fully-charged">My device is no going in to sleep after fully charged</a></li>
|
||||||
|
<li><a class="reference internal" href="#my-device-reports-a-temperature-of-273c-or-491f">My device reports a temperature of -273C or -491F</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
382
docs/v0.8/releases.html
Normal file
@ -0,0 +1,382 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="search.html" /><link rel="next" title="Configuration" href="configuration.html" /><link rel="prev" title="Installation" href="installation.html" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.03.04"/>
|
||||||
|
<title>Releases - GravityMon 0.8.0 documentation</title>
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=935aa2abcc5c1da4283d1dc201fb1f0add16d23a" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=25ceb02ed1c46dc30f2321ff83e92799f69dfdb9" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">GravityMon 0.8.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.8.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="search.html" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul class="current">
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||||
|
<li class="toctree-l1 current current-page"><a class="current reference internal" href="#">Releases</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
<div class="section" id="releases">
|
||||||
|
<span id="id1"></span><h1>Releases<a class="headerlink" href="#releases" title="Permalink to this headline">#</a></h1>
|
||||||
|
<div class="section" id="v0-8-0">
|
||||||
|
<h2>v0.8.0<a class="headerlink" href="#v0-8-0" title="Permalink to this headline">#</a></h2>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>Added option to set http headers (2 per http endpoint), these can be used for
|
||||||
|
other http formats than json (default) and for adding authentication headers.</p></li>
|
||||||
|
<li><p>Added possibility to view last 10 errors on device page.</p></li>
|
||||||
|
<li><p>Added possibility to define token parameter used in iSpindle format.</p></li>
|
||||||
|
<li><p>Added instructions for how to configure integration with Brewspy</p></li>
|
||||||
|
<li><p>Added instructions for how to configure integration with Thingspeak</p></li>
|
||||||
|
<li><p>Added option to do a factory reset via API.</p></li>
|
||||||
|
<li><p>Logging the runtime, how long a measurement take (last 10 are stored). This can be
|
||||||
|
used to check how good the wifi connection is and estimate the lifetime when on battery.
|
||||||
|
Check the device page in the UI for this information.</p></li>
|
||||||
|
<li><p>Refactored code to free up more RAM to make SSL more stable.</p></li>
|
||||||
|
<li><p>Before connecting to an SSL endpoint the device will try to use a new SSL feature
|
||||||
|
called MFLN (Maximum Fragment Length Negotiation) that allow us to reduce the buffers
|
||||||
|
from 16k to 2k. This can make a huge difference on a device with only 40k RAM. Not all
|
||||||
|
servers might support this feature.</p></li>
|
||||||
|
<li><p>Updated documentation pages.</p></li>
|
||||||
|
<li><p>Tested batterylife, 47 days using an update frequency of 5 min</p></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="v0-7-1">
|
||||||
|
<h2>v0.7.1<a class="headerlink" href="#v0-7-1" title="Permalink to this headline">#</a></h2>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>Added instructions for how to configure integration with Fermentrack</p></li>
|
||||||
|
<li><p>Added instructions for how to configure integration with Ubidots</p></li>
|
||||||
|
<li><p>Added instructions for how to configure integration with HomeAssistant</p></li>
|
||||||
|
<li><p>Added instructions for how to configure integration with Brewers Friend (not verified)</p></li>
|
||||||
|
<li><p>BUG: Defined mqtt port was ignored, used default values.</p></li>
|
||||||
|
<li><p>BUG: Extended length of HTTP url fields from 100 to 120 chars.</p></li>
|
||||||
|
<li><p>BUG: Fixed issue with default template so it now includes the device name correctly.</p></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="v0-7-0">
|
||||||
|
<h2>v0.7.0<a class="headerlink" href="#v0-7-0" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p>Latest stable version. <a class="reference external" href="https://github.com/mp-se/gravitymon/releases/tag/v0.7.0">Release v0.7 on Github</a></p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>SSL support for HTTP targets</p></li>
|
||||||
|
<li><p>SSL support for MQTT targets</p></li>
|
||||||
|
<li><p>SSL support for OTA</p></li>
|
||||||
|
<li><p>Added support for Plato</p></li>
|
||||||
|
<li><p>Added error handling for calibration page.</p></li>
|
||||||
|
<li><p>Added experimental target ESP32 (using an ESP32 D1 Mini which is pin compatible with ESP8266). Not
|
||||||
|
really usable since wifi connection is extreamly slow with current Arduino releases (3-8 seconds).</p></li>
|
||||||
|
<li><p>Added experimental format editor so users can customize their data format used for pushing data.
|
||||||
|
This will reduce the need for custom push targets. As long as the service is supporting http
|
||||||
|
or https then the data format can be customized.</p></li>
|
||||||
|
<li><p>Added check so that pushing data is not done if memory is low (this will avoid crashes)</p></li>
|
||||||
|
<li><p>MQTT topic has been removed from config (handled via format templates)</p></li>
|
||||||
|
<li><p>MQTT port port number added. Port over 8000 will activate SSL.</p></li>
|
||||||
|
<li><p><strong>Breaking change</strong>: To simplify the internal structure the
|
||||||
|
temp sensor adjustment is now stored in C. So if you have
|
||||||
|
enabled this function using F you will need to go into
|
||||||
|
the configuration and update the adjustment factor again (hardware config).</p></li>
|
||||||
|
<li><p><strong>Breaking change</strong>: The MQTT push option has been changed to match the iSpindle behaviour. If
|
||||||
|
the behaviour in v0.6 is wanted this can be done via the format editor.</p></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="v0-6-0">
|
||||||
|
<h2>v0.6.0<a class="headerlink" href="#v0-6-0" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p><a class="reference external" href="https://github.com/mp-se/gravitymon/releases/tag/v0.6.0">Release v0.6 on Github</a></p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>Changed the wifi manager and refactored wifi.cpp</p></li>
|
||||||
|
<li><p>LED is now turned on when Wifi Portal is open</p></li>
|
||||||
|
<li><p>Refactored main.cpp to make it easier to read</p></li>
|
||||||
|
<li><p>Tested runtime performance</p></li>
|
||||||
|
<li><p>Improved documentation</p></li>
|
||||||
|
<li><p>Added warning on config page when sleep is <300</p></li>
|
||||||
|
<li><p>Enabled selection of gyro temperature sensor under Hardware settings</p></li>
|
||||||
|
<li><p>Added warning when short sleep interval and gyro temp is enabled</p></li>
|
||||||
|
<li><p>Added support for MQTT</p></li>
|
||||||
|
<li><p>Bug: MPU init sometimes caused crash during startup.</p></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="v0-5-0">
|
||||||
|
<h2>v0.5.0<a class="headerlink" href="#v0-5-0" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p><a class="reference external" href="https://github.com/mp-se/gravitymon/releases/tag/v0.5.0">Release v0.5 on Github</a></p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>Added feature to calcuate formula on device</p></li>
|
||||||
|
<li><p>Total rewrite of documentation</p></li>
|
||||||
|
<li><p>WIFI settings are now stored in config file</p></li>
|
||||||
|
<li><p>Defined version numbers for all dependant libraries to avoid updates breaking build.</p></li>
|
||||||
|
<li><p>Cleanup of code</p></li>
|
||||||
|
<li><p>Refactor code from C to C++</p></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
<div class="section" id="v0-4-0">
|
||||||
|
<h2>v0.4.0<a class="headerlink" href="#v0-4-0" title="Permalink to this headline">#</a></h2>
|
||||||
|
<p><a class="reference external" href="https://github.com/mp-se/gravitymon/releases/tag/v0.4.0">Release v0.4 on Github</a></p>
|
||||||
|
<ul class="simple">
|
||||||
|
<li><p>First release</p></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
<a class="next-page" href="configuration.html">
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Next</span>
|
||||||
|
</div>
|
||||||
|
<div class="title">Configuration</div>
|
||||||
|
</div>
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
</a>
|
||||||
|
<a class="prev-page" href="installation.html">
|
||||||
|
<svg><use href="#svg-arrow-right"></use></svg>
|
||||||
|
<div class="page-info">
|
||||||
|
<div class="context">
|
||||||
|
<span>Previous</span>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div class="title">Installation</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</a>
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2021-2022, Magnus Persson
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer">
|
||||||
|
|
||||||
|
|
||||||
|
<div class="toc-sticky toc-scroll">
|
||||||
|
<div class="toc-title-container">
|
||||||
|
<span class="toc-title">
|
||||||
|
Contents
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<div class="toc-tree-container">
|
||||||
|
<div class="toc-tree">
|
||||||
|
<ul>
|
||||||
|
<li><a class="reference internal" href="#">Releases</a><ul>
|
||||||
|
<li><a class="reference internal" href="#v0-8-0">v0.8.0</a></li>
|
||||||
|
<li><a class="reference internal" href="#v0-7-1">v0.7.1</a></li>
|
||||||
|
<li><a class="reference internal" href="#v0-7-0">v0.7.0</a></li>
|
||||||
|
<li><a class="reference internal" href="#v0-6-0">v0.6.0</a></li>
|
||||||
|
<li><a class="reference internal" href="#v0-5-0">v0.5.0</a></li>
|
||||||
|
<li><a class="reference internal" href="#v0-4-0">v0.4.0</a></li>
|
||||||
|
</ul>
|
||||||
|
</li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
</body>
|
||||||
|
</html>
|
255
docs/v0.8/search.html
Normal file
@ -0,0 +1,255 @@
|
|||||||
|
<!doctype html>
|
||||||
|
<html class="no-js">
|
||||||
|
<head><meta charset="utf-8"/>
|
||||||
|
<meta name="viewport" content="width=device-width,initial-scale=1"/>
|
||||||
|
<meta name="color-scheme" content="light dark"><link rel="index" title="Index" href="genindex.html" /><link rel="search" title="Search" href="#" />
|
||||||
|
|
||||||
|
<meta name="generator" content="sphinx-4.4.0, furo 2022.03.04"/><title>Search - GravityMon 0.8.0 documentation</title><link rel="stylesheet" type="text/css" href="_static/pygments.css" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo.css?digest=935aa2abcc5c1da4283d1dc201fb1f0add16d23a" />
|
||||||
|
<link rel="stylesheet" type="text/css" href="_static/styles/furo-extensions.css?digest=25ceb02ed1c46dc30f2321ff83e92799f69dfdb9" />
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
body {
|
||||||
|
--color-code-background: #f8f8f8;
|
||||||
|
--color-code-foreground: black;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media not print {
|
||||||
|
body[data-theme="dark"] {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
@media (prefers-color-scheme: dark) {
|
||||||
|
body:not([data-theme="light"]) {
|
||||||
|
--color-code-background: #202020;
|
||||||
|
--color-code-foreground: #d0d0d0;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
</style></head>
|
||||||
|
<body>
|
||||||
|
<script>
|
||||||
|
document.body.dataset.theme = localStorage.getItem("theme") || "auto";
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" style="display: none;">
|
||||||
|
<symbol id="svg-toc" viewBox="0 0 24 24">
|
||||||
|
<title>Contents</title>
|
||||||
|
<svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024">
|
||||||
|
<path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-menu" viewBox="0 0 24 24">
|
||||||
|
<title>Menu</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu">
|
||||||
|
<line x1="3" y1="12" x2="21" y2="12"></line>
|
||||||
|
<line x1="3" y1="6" x2="21" y2="6"></line>
|
||||||
|
<line x1="3" y1="18" x2="21" y2="18"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-arrow-right" viewBox="0 0 24 24">
|
||||||
|
<title>Expand</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right">
|
||||||
|
<polyline points="9 18 15 12 9 6"></polyline>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun" viewBox="0 0 24 24">
|
||||||
|
<title>Light mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="feather-sun">
|
||||||
|
<circle cx="12" cy="12" r="5"></circle>
|
||||||
|
<line x1="12" y1="1" x2="12" y2="3"></line>
|
||||||
|
<line x1="12" y1="21" x2="12" y2="23"></line>
|
||||||
|
<line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line>
|
||||||
|
<line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line>
|
||||||
|
<line x1="1" y1="12" x2="3" y2="12"></line>
|
||||||
|
<line x1="21" y1="12" x2="23" y2="12"></line>
|
||||||
|
<line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line>
|
||||||
|
<line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line>
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-moon" viewBox="0 0 24 24">
|
||||||
|
<title>Dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none" />
|
||||||
|
<path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
<symbol id="svg-sun-half" viewBox="0 0 24 24">
|
||||||
|
<title>Auto light/dark mode</title>
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor"
|
||||||
|
stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-shadow">
|
||||||
|
<path stroke="none" d="M0 0h24v24H0z" fill="none"/>
|
||||||
|
<circle cx="12" cy="12" r="9" />
|
||||||
|
<path d="M13 12h5" />
|
||||||
|
<path d="M13 15h4" />
|
||||||
|
<path d="M13 18h1" />
|
||||||
|
<path d="M13 9h4" />
|
||||||
|
<path d="M13 6h1" />
|
||||||
|
</svg>
|
||||||
|
</symbol>
|
||||||
|
</svg>
|
||||||
|
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation">
|
||||||
|
<input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc">
|
||||||
|
<label class="overlay sidebar-overlay" for="__navigation">
|
||||||
|
<div class="visually-hidden">Hide navigation sidebar</div>
|
||||||
|
</label>
|
||||||
|
<label class="overlay toc-overlay" for="__toc">
|
||||||
|
<div class="visually-hidden">Hide table of contents sidebar</div>
|
||||||
|
</label>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<div class="page">
|
||||||
|
<header class="mobile-header">
|
||||||
|
<div class="header-left">
|
||||||
|
<label class="nav-overlay-icon" for="__navigation">
|
||||||
|
<div class="visually-hidden">Toggle site navigation sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-menu"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<div class="header-center">
|
||||||
|
<a href="index.html"><div class="brand">GravityMon 0.8.0 documentation</div></a>
|
||||||
|
</div>
|
||||||
|
<div class="header-right">
|
||||||
|
<div class="theme-toggle-container theme-toggle-header">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-header-icon no-toc" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
</header>
|
||||||
|
<aside class="sidebar-drawer">
|
||||||
|
<div class="sidebar-container">
|
||||||
|
|
||||||
|
<div class="sidebar-sticky"><a class="sidebar-brand" href="index.html">
|
||||||
|
|
||||||
|
|
||||||
|
<span class="sidebar-brand-text">GravityMon 0.8.0 documentation</span>
|
||||||
|
|
||||||
|
</a><form class="sidebar-search-container" method="get" action="#" role="search">
|
||||||
|
<input class="sidebar-search" placeholder=Search name="q" aria-label="Search">
|
||||||
|
<input type="hidden" name="check_keywords" value="yes">
|
||||||
|
<input type="hidden" name="area" value="default">
|
||||||
|
</form>
|
||||||
|
<div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree">
|
||||||
|
<p class="caption" role="heading"><span class="caption-text">Contents:</span></p>
|
||||||
|
<ul>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="functionallity.html">Functionallity</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="intro.html">Getting started</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="installation.html">Installation</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="releases.html">Releases</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="configuration.html">Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="formula.html">Create formula</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="services.html">Service Integration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="advanced.html">Advanced Configuration</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="api.html">REST API</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="data.html">Data Formats</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="compiling.html">Compiling the software</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="contributing.html">Contributing</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="troubleshooting.html">Troubleshooting</a></li>
|
||||||
|
<li class="toctree-l1"><a class="reference internal" href="q_and_a.html">Q & A</a></li>
|
||||||
|
</ul>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</aside>
|
||||||
|
<div class="main">
|
||||||
|
<div class="content">
|
||||||
|
<div class="article-container">
|
||||||
|
<a href="#" class="back-to-top muted-link">
|
||||||
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24">
|
||||||
|
<path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path>
|
||||||
|
</svg>
|
||||||
|
<span>Back to top</span>
|
||||||
|
</a>
|
||||||
|
<div class="content-icon-container"><div class="theme-toggle-container theme-toggle-content">
|
||||||
|
<button class="theme-toggle">
|
||||||
|
<div class="visually-hidden">Toggle Light / Dark / Auto color theme</div>
|
||||||
|
<svg class="theme-icon-when-auto"><use href="#svg-sun-half"></use></svg>
|
||||||
|
<svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg>
|
||||||
|
<svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg>
|
||||||
|
</button>
|
||||||
|
</div>
|
||||||
|
<label class="toc-overlay-icon toc-content-icon no-toc" for="__toc">
|
||||||
|
<div class="visually-hidden">Toggle table of contents sidebar</div>
|
||||||
|
<i class="icon"><svg><use href="#svg-toc"></use></svg></i>
|
||||||
|
</label>
|
||||||
|
</div>
|
||||||
|
<article role="main">
|
||||||
|
|
||||||
|
<noscript>
|
||||||
|
<div class="admonition error">
|
||||||
|
<p class="admonition-title">Error</p>
|
||||||
|
<p>
|
||||||
|
Please activate JavaScript to enable the search functionality.
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</noscript>
|
||||||
|
|
||||||
|
<div id="search-results"></div>
|
||||||
|
|
||||||
|
</article>
|
||||||
|
</div>
|
||||||
|
<footer>
|
||||||
|
|
||||||
|
<div class="related-pages">
|
||||||
|
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="bottom-of-page">
|
||||||
|
<div class="left-details">
|
||||||
|
<div class="copyright">
|
||||||
|
Copyright © 2021-2022, Magnus Persson
|
||||||
|
</div>
|
||||||
|
Made with <a href="https://www.sphinx-doc.org/">Sphinx</a> and <a class="muted-link" href="https://pradyunsg.me">@pradyunsg</a>'s
|
||||||
|
|
||||||
|
<a href="https://github.com/pradyunsg/furo">Furo</a>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
<div class="right-details">
|
||||||
|
<div class="icons">
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</footer>
|
||||||
|
</div>
|
||||||
|
<aside class="toc-drawer no-toc">
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
</aside>
|
||||||
|
</div>
|
||||||
|
</div><script data-url_root="./" id="documentation_options" src="_static/documentation_options.js"></script>
|
||||||
|
<script src="_static/jquery.js"></script>
|
||||||
|
<script src="_static/underscore.js"></script>
|
||||||
|
<script src="_static/doctools.js"></script>
|
||||||
|
<script src="_static/scripts/furo.js"></script>
|
||||||
|
|
||||||
|
<script src="_static/searchtools.js"></script>
|
||||||
|
<script src="_static/language_data.js"></script>
|
||||||
|
<script src="searchindex.js"></script></body>
|
||||||
|
</html>
|