Update documentation

This commit is contained in:
GitHub Action 2022-08-10 06:02:06 +00:00
parent 6ae67190fc
commit fd891b10c5
18 changed files with 247 additions and 113 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 37 KiB

After

Width:  |  Height:  |  Size: 20 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 110 KiB

After

Width:  |  Height:  |  Size: 36 KiB

BIN
docs/_images/reed.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

BIN
docs/_images/reed_build.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 574 KiB

View File

@ -65,6 +65,8 @@ Other parameters are the same as in the configuration guide.
"angle": 90.93,
"gravity": 1.105,
"battery": 0.04,
"app-ver": "0.1.0",
"app-build": "build",
"platform": "esp8266",
"runtime-average": 3.12
}
@ -83,6 +85,8 @@ Retrive the current device status via an HTTP GET command. Payload is in JSON fo
* ``temp-format`` can be either ``C`` or ``F``
* ``platform`` can be either ``esp8266`` or ``esp32``
* ``temp-c`` will be set to -273 C if there is no temp sensor
* ``angle`` will be set to 0 if no valid angle is found and -1 if there is no gyro
Other parameters are the same as in the configuration guide.
@ -102,6 +106,7 @@ Other parameters are the same as in the configuration guide.
"token2": "token2",
"rssi": -56,
"app-ver": "0.0.0",
"app-build": "gitrev",
"mdns": "gravmon",
"sleep-interval": 30,
"platform": "esp8266",
@ -156,18 +161,19 @@ Used for adjusting some internal constants and other advanced settings. Should b
{
"gyro-read-count": 50,
"tempsensor-resolution": 9,
"gyro-moving-threashold": 500,
"formula-max-deviation": 1.6,
"formula-max-deviation": 3.0,
"wifi-portal-timeout": 120,
"wifi-connect-timeout": 20,
"push-timeout": 10,
"formula-calibration-temp": 20,
"ignore-low-angles": false,
"int-http1": 0,
"int-http2": 0,
"int-http3": 0,
"int-influx": 0,
"int-mqtt": 0
"int-mqtt": 0,
"tempsensor-resolution": 9,
"ignore-low-angles": false
}
POST: /api/config/advanced
@ -354,7 +360,7 @@ 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.
present or the API call will fail. You only need to include the parameters you want to change.
The requests package converts the json to standard form post format.

View File

@ -37,8 +37,9 @@ connection. It will show 0 if data has not been collected yet.
.. 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`.
The button `view error log` will show the last error messages 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`. From v1.1 it will also detect
any abnormal restarts or crashes and record these in the logfile.
Configuration
@ -215,7 +216,7 @@ build this into the gravity formula.
This formula assumes that the calibration has been done at 20°C / 68°F.
Formula used in temperature correction.
Formula used in temperature correction. The calibration temperature can be changed under advanced settings.
::
@ -237,7 +238,8 @@ Factor used to calcualate the battery voltage. If you get a too low/high voltage
* **Config voltage:**
Defines the level of voltage when the device should enter config mode due to charging. This might vary between different battery manufacturers.
If you dont what the device to go into configuration mode when charging, set this to 6V.
If you dont what the device to go into configuration mode when charging, set this to 6V. This was added since differnt batteries have different
voltages when fully charged.
* **Temperature correction:**
@ -253,9 +255,10 @@ been running the value would be totally off.
* **Enable storage mode when placed on cap**
When place on the cap (<5 degres tilt) the device will go into max sleep. In order to wake it up you need to do a reset (or wait for the device
to wake up). One option is to attach a magnetic reed switch (default open) to the reset pin and use a magnet to force a reset without opening
the tube. The reed switch is typically an electronic component of 14 mm long incapsulated in a small glass tube.
When place on the cap (<5 degres tilt) the device will go into deep sleep forever (until reset). In order to wake it
up you need to do a reset. One option is to attach a magnetic reed switch (default open) to the reset pin and use a
magnet to force a reset without opening the tube. The reed switch is typically an electronic component of 14 mm
long incapsulated in a small glass tube. See hardware section for more information, :ref:`hardware`.
* **Bluetooth: (Only ESP32)**
@ -317,6 +320,10 @@ data and of the deviation on any point is bigger the formula will be rejected.
If this option is checked any angles below that of SG 1 will be discarded as invalid and never sent to any server. Default = off.
* **Gravity calibration temp**
This option allows you to set the correction temperature used in the automatic temperature gravity adjustment formula. Standard is 20C.
* **DS18B20 Resolution:**
Define the resolution used on the temp sensor. 9 bits is default and will give an accuracy of 0.5C, 12 bits will give an accuracy of 0.0625C but will also

View File

@ -43,3 +43,24 @@ Schema for esp32 build
.. image:: images/schema_esp32.png
:width: 700
:alt: Schema esp32
Modifying with reed switch
--------------------------
A reed switch is a switch that reacts to magnetic fields. The ones I have tested are normally open and close in proximity to
a magnet.
.. image:: images/reed.jpg
:width: 400
:alt: Reed switch
If this is connected to the reset button a magnet can be used to trigger a reset of the device. The image below shows how
I mounted the iSPINDLE PCB v4.0 just under the cap. The lower red circle shows the reset connection point for the reed switch.
The reed switch is the glass tube visible under the esp8266.
.. image:: images/reed_build.jpg
:width: 400
:alt: Reed build

View File

@ -7,66 +7,90 @@ Welcome to GravityMon's documentation!
######################################
.. note::
This documentation reflects **v1.1 BETA 2**. Last updated 2022-07-23
This documentation reflects **v1.1 BETA 4**. Last updated 2022-08-06
* Docs for: `v1.0 <https://mp-se.github.io/gravitymon/v1.0/index.html>`_
* Docs for: `v0.9 <https://mp-se.github.io/gravitymon/v0.9/index.html>`_
User interface overview
-----------------------
This animation shows how the user interface is structured, it reflects an older version but the structure is the same.
.. image:: images/gravitymon.gif
:width: 800
:alt: User Inteface Walkthrough
.. _main_features:
Main features
-------------
* Operates in two modes gravity monitoring and configuration mode
* Gravity mode is comparable to how the iSpindle works when collectintg data
* Configuration mode has a modern HTML5 based web UI. No need to start the access point to change settings
* Offloading some of the functionallity to run in the web browser, this allows for more advanced features.
* REST API to enable scripted configuration
* Send data to multiple endpoints and services at once (2xHTTP POST, HTTP GET, MQTT, INFLUXDB2)
* Directly test all endpoints from user interface with feedback to simplify troubleshooting
* Complete format customization for all endpoints using templates (dont really need to change the software to support new services)
* Setup guides for how to send data to many popular services. Currently 10+ are documented
* Automatic temperature adjustment of gravity (just tick a checkbox)
* OTA support from webserver
* Firmware update via web interface
* Built in function to create gravity formulas, no need for additional software, just enter tilt/gravity and let GravityMon creates a 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 all endpoints (no certificate validation due to limitations on esp8266).
* Built in performance measurements (used to optimise code)
* Storage mode when placed on cap (indefinite sleep)
* Customize various hardware parameters to opimize device functionallity.
For a complete breakdown see the :ref:`functionallity`
.. note::
If you are missing some feature, please reach out on `Github <https://github.com/mp-se/gravitymon/discussions>`_ or `homebrewtalk.com <https://www.homebrewtalk.com/threads/replacement-firmware-for-ispindel-gravitymon.698058/>`_
What is GravityMon?
--------------------
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.
an example on how the fermentation process can be tracked. The graph has been 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
implements a lot of the features that has been requested in the orginal iSpindle project but never implemented for
various reasons. Here is a list of :ref:`main_features`.
From v0.9 the firmware now supports a iSpindle build based on an ESP32 d1 mini (pin compatible with esp8266). See :ref:`hardware`.
From v0.9 the firmware also supports a iSpindle built using an ESP32 d1 mini (pin compatible with esp8266). Currently this is an experimental
version but since it has more memory and processing capacity it could support more functions. See :ref:`hardware`.
I started GravityMon because I like to create software and wanted to do some low level programming. I had done a few
I started GravityMon because I like to create software and wanted to do some microcontroller 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>`_
My approach to this software is a little different from that the original iSpindle firmware as can be seen in the list of features.
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.
I have tested this software on 40+ brews with good results.
.. _main_features:
Main features:
--------------
Documentation for older versions
--------------------------------
* 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)
* Docs for: `v1.0 <https://mp-se.github.io/gravitymon/v1.0/index.html>`_
* Docs for: `v0.9 <https://mp-se.github.io/gravitymon/v0.9/index.html>`_
For a complete breakdown see the :ref:`functionallity`
Software architecture
---------------------
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.

View File

@ -3,35 +3,43 @@
Releases
########
v1.1.0 - beta 2
v1.1.0 - beta 4
===============
Documentation
+++++++++++++
* (beta2) Updated docs for HA integration since method was depricated
* Fixed errors in data format section
* Added q&a on formula creation and value deviation
* Added documentation for Brewpiless as target
* Updated docs for ubidots service integration.
* Added brewblox as new service
* (beta2) Updated docs for HA integration since method was depricated
User interface
++++++++++++++
* (beta4) Updated format template with information on size and warning message if the template is too large
* (beta3) Added error message to user message if gyro connection fails.
* (beta3) Added message to user message if no temp sensor can be found.
* (beta3) Added drop down menus in user interface to simplify navigation to sub pages
* (beta3) Changed behavior for Home Assistant Device registration, this is only done when format template is saved, during normal operation only data values are posted on MQTT.
* (beta2) Calibration temperature (for temp adjustment) can now be set under advanced settings.
* (beta2) Changes length of device name from 12 to 63 chars. 63 is the max limit according to mdns.
* Under format options its now possible to select brewfather ispindle format to avoid mixing endpoints.
* Added brewblox as format under format options.
* User can now edit the voltage level that forces the device into config mode (charging)
* (beta2) Calibration temperature (for temp adjustment) can now be set under advanced settings.
* (beta2) Changes length of device name from 12 to 63 chars. 63 is the max limit according to mdns.
Features
++++++++
* Added storage mode which is activated under hardware setting. When place on the cap (<5 degres tilt) the device will go into storage mode and sleep for the max allowed time.
* Added ${app-ver} and ${app-build} to format template as new variables.
* Added format templates for HA auto registration
* (beta4) Added information to error log about abnormal resets (for instance crashes) to detect and fix those.
* (beta4) Changed storage mode so that the device will go into deep sleep until reset.
* (beta3) Updated sensor types in home assistant (auto registration)
* (beta2) Added ${app-ver} and ${app-build} to format template as new variables.
* (beta2) Improved error messages when creating formula so the meaasurement points can be identified.
* (beta2) Changed defaule validation threashold from 1.6 SG to 3.0 SG, this should allow for some more variance when creating formula.
* (beta2) Updated format template for Home Assistant for using manual configuration (Aligned with new mqtt configuration format)
* (beta2) Added format template for Home Assistant with automatic device registration
* Added storage mode which is activated under hardware setting. When place on the cap (<5 degres tilt) the device will go into storage mode and deep sleep.
* Added format templates for HA auto registration
Other
+++++
@ -42,11 +50,16 @@ Other
Issues adressed
++++++++++++++++
* BUG: Copy format templates used an old format for iSpindle and Gravmon where the token was not used.
* BUG: Gravity correction formula not calculating correctly.
* (beta4) Refactored error logging function to reduce memory usage and crashes
* (beta4) Refactored format template engine to reduce memory usage and crashes, can how handle slightly larger payloads than before. Increase from around 1100 chars to 1600 chars.
* (beta3) BUG: Refactored format api to handle larger payloads.
* (beta3) BUG: After manual firmware upload the device would crash and go into wifi setup mode.
* (beta3) BUG: After manual firmware upload the device will in some cases not be able to connect with the gyro, the symptom is that it will say, "Gyro moving" in the web UI. In this case the device needs to be reset (or powered on/off). I havent found a way to fix this from the code. The message after firmware update has been updated with this information.
* (beta2) BUG: Temp corrected gravity was not used when pushing data to removed
* (beta2) BUG: Low memory in format api which resulted in mqtt template to be set to null
* (beta2) BUG: Large format templates could be saved but when loading it's only blank. Increased total memory from 3kb to 5kb
* (beta2) BUG: Large format templates could be saved but when loading it's only blank.
* BUG: Copy format templates used an old format for iSpindle and Gravmon where the token was not used.
* BUG: Gravity correction formula not calculating correctly.
v1.0.0
======

View File

@ -182,7 +182,7 @@ template will create two sensors and update the values for them.
homeassistant/sensor/gravmon_${id}/gravity/config:{"dev":{"name":"${mdns}","mdl":"gravmon","sw":"${app-ver}","ids":"${id}"},"uniq_id":"${id}_grav","name":"gravity","dev_cla":"temperature","unit_of_meas":" ${gravity-unit}","stat_t":"gravmon/${mdns}/gravity"}|
homeassistant/sensor/gravmon_${id}/rssi/config:{"dev":{"name":"${mdns}","mdl":"gravmon","sw":"${app-ver}","ids":"${id}"},"uniq_id":"${id}_rssi","name":"rssi","dev_cla":"temperature","unit_of_meas":"dBm","stat_t":"gravmon/${mdns}/rssi"}|
homeassistant/sensor/gravmon_${id}/tilt/config:{"dev":{"name":"${mdns}","mdl":"gravmon","sw":"${app-ver}","ids":"${id}"},"uniq_id":"${id}_tilt","name":"tilt","dev_cla":"temperature","stat_t":"gravmon/${mdns}/tilt"}|
homeassistant/sensor/gravmon_${id}/battery/config:{"dev":{"name":"${mdns}","mdl":"gravmon","sw":"${app-ver}","ids":"${id}"},"uniq_id":"${id}_batt","name":"battery","dev_cla":"temperature","unit_of_meas":"V","stat_t":"gravmon/${mdns}/battery"}|
homeassistant/sensor/gravmon_${id}/battery/config:{"dev":{"name":"${mdns}","mdl":"gravmon","sw":"${app-ver}","ids":"${id}"},"uniq_id":"${id}_batt","name":"battery","dev_cla":"voltage","unit_of_meas":"V","stat_t":"gravmon/${mdns}/battery"}|
Brewer's Friend

View File

@ -256,6 +256,8 @@
<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">"app-ver"</span><span class="p">:</span><span class="w"> </span><span class="s2">"0.1.0"</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">"app-build"</span><span class="p">:</span><span class="w"> </span><span class="s2">"build"</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">"platform"</span><span class="p">:</span><span class="w"> </span><span class="s2">"esp8266"</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>
@ -272,6 +274,8 @@
<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">platform</span></code> can be either <code class="docutils literal notranslate"><span class="pre">esp8266</span></code> or <code class="docutils literal notranslate"><span class="pre">esp32</span></code></p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">temp-c</span></code> will be set to -273 C if there is no temp sensor</p></li>
<li><p><code class="docutils literal notranslate"><span class="pre">angle</span></code> will be set to 0 if no valid angle is found and -1 if there is no gyro</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>
@ -288,6 +292,7 @@
<span class="w"> </span><span class="nt">"token2"</span><span class="p">:</span><span class="w"> </span><span class="s2">"token2"</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="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">"app-build"</span><span class="p">:</span><span class="w"> </span><span class="s2">"gitrev"</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">"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">"platform"</span><span class="p">:</span><span class="w"> </span><span class="s2">"esp8266"</span><span class="p">,</span><span class="w"></span>
@ -337,18 +342,19 @@
<p>Used for adjusting some internal constants and other advanced settings. Should be used with caution.</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">"gyro-read-count"</span><span class="p">:</span><span class="w"> </span><span class="mi">50</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">"tempsensor-resolution"</span><span class="p">:</span><span class="w"> </span><span class="mi">9</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">"gyro-moving-threashold"</span><span class="p">:</span><span class="w"> </span><span class="mi">500</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">"formula-max-deviation"</span><span class="p">:</span><span class="w"> </span><span class="mf">1.6</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">"formula-max-deviation"</span><span class="p">:</span><span class="w"> </span><span class="mf">3.0</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">"wifi-portal-timeout"</span><span class="p">:</span><span class="w"> </span><span class="mi">120</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">"wifi-connect-timeout"</span><span class="p">:</span><span class="w"> </span><span class="mi">20</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">"push-timeout"</span><span class="p">:</span><span class="w"> </span><span class="mi">10</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">"formula-calibration-temp"</span><span class="p">:</span><span class="w"> </span><span class="mi">20</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">"ignore-low-angles"</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">"int-http1"</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">"int-http2"</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">"int-http3"</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">"int-influx"</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">"int-mqtt"</span><span class="p">:</span><span class="w"> </span><span class="mi">0</span><span class="w"></span>
<span class="w"> </span><span class="nt">"int-mqtt"</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">"tempsensor-resolution"</span><span class="p">:</span><span class="w"> </span><span class="mi">9</span><span class="p">,</span><span class="w"></span>
<span class="w"> </span><span class="nt">"ignore-low-angles"</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span><span class="w"></span>
<span class="p">}</span><span class="w"></span>
</pre></div>
</div>
@ -510,7 +516,7 @@ reading data its sent as boolean (true,false).</p>
<div class="section" id="calling-the-api-s-from-python">
<h2>Calling the APIs 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 APIs from a python script. Keys should always be
present or the API call will fail.</p>
present or the API call will fail. You only need to include the parameters you want to change.</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>

View File

@ -222,8 +222,9 @@ connection. It will show 0 if data has not been collected yet.</p>
</div>
<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>
<p>The button <cite>view error log</cite> will show the last error messages 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>. From v1.1 it will also detect
any abnormal restarts or crashes and record these in the logfile.</p>
</div>
</div>
<div class="section" id="id1">
@ -368,7 +369,7 @@ build this into the gravity formula.</p>
<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>
<p>Formula used in temperature correction.</p>
<p>Formula used in temperature correction. The calibration temperature can be changed under advanced settings.</p>
</div>
<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>
@ -386,7 +387,8 @@ build this into the gravity formula.</p>
<li><p><strong>Config voltage:</strong></p></li>
</ul>
<p>Defines the level of voltage when the device should enter config mode due to charging. This might vary between different battery manufacturers.
If you dont what the device to go into configuration mode when charging, set this to 6V.</p>
If you dont what the device to go into configuration mode when charging, set this to 6V. This was added since differnt batteries have different
voltages when fully charged.</p>
<ul class="simple">
<li><p><strong>Temperature correction:</strong></p></li>
</ul>
@ -402,9 +404,10 @@ been running the value would be totally off.</p>
<ul class="simple">
<li><p><strong>Enable storage mode when placed on cap</strong></p></li>
</ul>
<p>When place on the cap (&lt;5 degres tilt) the device will go into max sleep. In order to wake it up you need to do a reset (or wait for the device
to wake up). One option is to attach a magnetic reed switch (default open) to the reset pin and use a magnet to force a reset without opening
the tube. The reed switch is typically an electronic component of 14 mm long incapsulated in a small glass tube.</p>
<p>When place on the cap (&lt;5 degres tilt) the device will go into deep sleep forever (until reset). In order to wake it
up you need to do a reset. One option is to attach a magnetic reed switch (default open) to the reset pin and use a
magnet to force a reset without opening the tube. The reed switch is typically an electronic component of 14 mm
long incapsulated in a small glass tube. See hardware section for more information, <a class="reference internal" href="hardware.html#hardware"><span class="std std-ref">Hardware</span></a>.</p>
<ul class="simple">
<li><p><strong>Bluetooth: (Only ESP32)</strong></p></li>
</ul>
@ -453,6 +456,10 @@ data and of the deviation on any point is bigger the formula will be rejected.</
</ul>
<p>If this option is checked any angles below that of SG 1 will be discarded as invalid and never sent to any server. Default = off.</p>
<ul class="simple">
<li><p><strong>Gravity calibration temp</strong></p></li>
</ul>
<p>This option allows you to set the correction temperature used in the automatic temperature gravity adjustment formula. Standard is 20C.</p>
<ul class="simple">
<li><p><strong>DS18B20 Resolution:</strong></p></li>
</ul>
<p>Define the resolution used on the temp sensor. 9 bits is default and will give an accuracy of 0.5C, 12 bits will give an accuracy of 0.0625C but will also

View File

@ -223,6 +223,16 @@ get a voltage divider for measuring battery. The ESP8266 has a built in resistor
</div>
<a class="reference internal image-reference" href="_images/schema_esp32.png"><img alt="Schema esp32" src="_images/schema_esp32.png" style="width: 700px;"/></a>
</div>
<div class="section" id="modifying-with-reed-switch">
<h2>Modifying with reed switch<a class="headerlink" href="#modifying-with-reed-switch" title="Permalink to this headline"></a></h2>
<p>A reed switch is a switch that reacts to magnetic fields. The ones I have tested are normally open and close in proximity to
a magnet.</p>
<a class="reference internal image-reference" href="_images/reed.jpg"><img alt="Reed switch" src="_images/reed.jpg" style="width: 400px;"/></a>
<p>If this is connected to the reset button a magnet can be used to trigger a reset of the device. The image below shows how
I mounted the iSPINDLE PCB v4.0 just under the cap. The lower red circle shows the reset connection point for the reed switch.</p>
<p>The reed switch is the glass tube visible under the esp8266.</p>
<a class="reference internal image-reference" href="_images/reed_build.jpg"><img alt="Reed build" src="_images/reed_build.jpg" style="width: 400px;"/></a>
</div>
</div>
</article>
@ -275,6 +285,7 @@ get a voltage divider for measuring battery. The ESP8266 has a built in resistor
<li><a class="reference internal" href="#">Hardware</a><ul>
<li><a class="reference internal" href="#schema-for-esp8266-build">Schema for esp8266 build</a></li>
<li><a class="reference internal" href="#schema-for-esp32-build">Schema for esp32 build</a></li>
<li><a class="reference internal" href="#modifying-with-reed-switch">Modifying with reed switch</a></li>
</ul>
</li>
</ul>

View File

@ -201,53 +201,74 @@
<h1>Welcome to GravityMons 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>v1.1 BETA 2</strong>. Last updated 2022-07-23</p>
<p>This documentation reflects <strong>v1.1 BETA 4</strong>. Last updated 2022-08-06</p>
</div>
<ul class="simple">
<li><p>Docs for: <a class="reference external" href="https://mp-se.github.io/gravitymon/v1.0/index.html">v1.0</a></p></li>
<li><p>Docs for: <a class="reference external" href="https://mp-se.github.io/gravitymon/v0.9/index.html">v0.9</a></p></li>
</ul>
<div class="section" id="user-interface-overview">
<h2>User interface overview<a class="headerlink" href="#user-interface-overview" title="Permalink to this headline"></a></h2>
<p>This animation shows how the user interface is structured, it reflects an older version but the structure is the same.</p>
<a class="reference internal image-reference" href="_images/gravitymon.gif"><img alt="User Inteface Walkthrough" src="_images/gravitymon.gif" style="width: 800px;"/></a>
</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</p></li>
<li><p>Gravity mode is comparable to how the iSpindle works when collectintg data</p></li>
<li><p>Configuration mode has a modern HTML5 based web UI. No need to start the access point to change settings</p></li>
<li><p>Offloading some of the functionallity to run in the web browser, this allows for more advanced features.</p></li>
<li><p>REST API to enable scripted configuration</p></li>
<li><p>Send data to multiple endpoints and services at once (2xHTTP POST, HTTP GET, MQTT, INFLUXDB2)</p></li>
<li><p>Directly test all endpoints from user interface with feedback to simplify troubleshooting</p></li>
<li><p>Complete format customization for all endpoints using templates (dont really need to change the software to support new services)</p></li>
<li><p>Setup guides for how to send data to many popular services. Currently 10+ are documented</p></li>
<li><p>Automatic temperature adjustment of gravity (just tick a checkbox)</p></li>
<li><p>OTA support from webserver</p></li>
<li><p>Firmware update via web interface</p></li>
<li><p>Built in function to create gravity formulas, no need for additional software, just enter tilt/gravity and let GravityMon creates a 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 all endpoints (no certificate validation due to limitations on esp8266).</p></li>
<li><p>Built in performance measurements (used to optimise code)</p></li>
<li><p>Storage mode when placed on cap (indefinite sleep)</p></li>
<li><p>Customize various hardware parameters to opimize device functionallity.</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>
<div class="admonition note">
<p class="admonition-title">Note</p>
<p>If you are missing some feature, please reach out on <a class="reference external" href="https://github.com/mp-se/gravitymon/discussions">Github</a> or <a class="reference external" href="https://www.homebrewtalk.com/threads/replacement-firmware-for-ispindel-gravitymon.698058/">homebrewtalk.com</a></p>
</div>
</div>
<div class="section" id="what-is-gravitymon">
<h2>What is GravityMon?<a class="headerlink" href="#what-is-gravitymon" title="Permalink to this headline"></a></h2>
<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>
an example on how the fermentation process can be tracked. The graph has been 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>From v0.9 the firmware now supports a iSpindle build based on an ESP32 d1 mini (pin compatible with esp8266). See <a class="reference internal" href="hardware.html#hardware"><span class="std std-ref">Hardware</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
implements a lot of the features that has been requested in the orginal iSpindle project but never implemented 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>From v0.9 the firmware also supports a iSpindle built using an ESP32 d1 mini (pin compatible with esp8266). Currently this is an experimental
version but since it has more memory and processing capacity it could support more functions. See <a class="reference internal" href="hardware.html#hardware"><span class="std std-ref">Hardware</span></a>.</p>
<p>I started GravityMon because I like to create software and wanted to do some microcontroller 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>
<p>My approach to this software is a little different from that the original iSpindle firmware as can be seen in the list of features.</p>
<p>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>
<p>I have tested this software on 40+ 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>
</div>
<div class="section" id="documentation-for-older-versions">
<h2>Documentation for older versions<a class="headerlink" href="#documentation-for-older-versions" 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>
<li><p>Docs for: <a class="reference external" href="https://mp-se.github.io/gravitymon/v1.0/index.html">v1.0</a></p></li>
<li><p>Docs for: <a class="reference external" href="https://mp-se.github.io/gravitymon/v0.9/index.html">v0.9</a></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>
</div>
<div class="section" id="software-architecture">
<h2>Software architecture<a class="headerlink" href="#software-architecture" title="Permalink to this headline"></a></h2>
<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>
@ -317,7 +338,7 @@ the following libraries and without these this would have been much more difficu
</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#v1-1-0-beta-2">v1.1.0 - beta 2</a></li>
<li class="toctree-l2"><a class="reference internal" href="releases.html#v1-1-0-beta-4">v1.1.0 - beta 4</a></li>
<li class="toctree-l2"><a class="reference internal" href="releases.html#v1-0-0">v1.0.0</a></li>
<li class="toctree-l2"><a class="reference internal" href="releases.html#v0-9-0">v0.9.0</a></li>
<li class="toctree-l2"><a class="reference internal" href="releases.html#v0-8-0">v0.8.0</a></li>
@ -420,6 +441,7 @@ the following libraries and without these this would have been much more difficu
<li class="toctree-l1"><a class="reference internal" href="hardware.html">Hardware</a><ul>
<li class="toctree-l2"><a class="reference internal" href="hardware.html#schema-for-esp8266-build">Schema for esp8266 build</a></li>
<li class="toctree-l2"><a class="reference internal" href="hardware.html#schema-for-esp32-build">Schema for esp32 build</a></li>
<li class="toctree-l2"><a class="reference internal" href="hardware.html#modifying-with-reed-switch">Modifying with reed switch</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="license.html">Licence</a></li>
@ -474,7 +496,11 @@ the following libraries and without these this would have been much more difficu
<div class="toc-tree">
<ul>
<li><a class="reference internal" href="#">Welcome to GravityMons documentation!</a><ul>
<li><a class="reference internal" href="#main-features">Main features:</a></li>
<li><a class="reference internal" href="#user-interface-overview">User interface overview</a></li>
<li><a class="reference internal" href="#main-features">Main features</a></li>
<li><a class="reference internal" href="#what-is-gravitymon">What is GravityMon?</a></li>
<li><a class="reference internal" href="#documentation-for-older-versions">Documentation for older versions</a></li>
<li><a class="reference internal" href="#software-architecture">Software architecture</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>

Binary file not shown.

View File

@ -199,39 +199,47 @@
<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="v1-1-0-beta-2">
<h2>v1.1.0 - beta 2<a class="headerlink" href="#v1-1-0-beta-2" title="Permalink to this headline"></a></h2>
<div class="section" id="v1-1-0-beta-4">
<h2>v1.1.0 - beta 4<a class="headerlink" href="#v1-1-0-beta-4" title="Permalink to this headline"></a></h2>
<div class="section" id="documentation">
<h3>Documentation<a class="headerlink" href="#documentation" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>(beta2) Updated docs for HA integration since method was depricated</p></li>
<li><p>Fixed errors in data format section</p></li>
<li><p>Added q&amp;a on formula creation and value deviation</p></li>
<li><p>Added documentation for Brewpiless as target</p></li>
<li><p>Updated docs for ubidots service integration.</p></li>
<li><p>Added brewblox as new service</p></li>
<li><p>(beta2) Updated docs for HA integration since method was depricated</p></li>
</ul>
</div>
<div class="section" id="user-interface">
<h3>User interface<a class="headerlink" href="#user-interface" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>(beta4) Updated format template with information on size and warning message if the template is too large</p></li>
<li><p>(beta3) Added error message to user message if gyro connection fails.</p></li>
<li><p>(beta3) Added message to user message if no temp sensor can be found.</p></li>
<li><p>(beta3) Added drop down menus in user interface to simplify navigation to sub pages</p></li>
<li><p>(beta3) Changed behavior for Home Assistant Device registration, this is only done when format template is saved, during normal operation only data values are posted on MQTT.</p></li>
<li><p>(beta2) Calibration temperature (for temp adjustment) can now be set under advanced settings.</p></li>
<li><p>(beta2) Changes length of device name from 12 to 63 chars. 63 is the max limit according to mdns.</p></li>
<li><p>Under format options its now possible to select brewfather ispindle format to avoid mixing endpoints.</p></li>
<li><p>Added brewblox as format under format options.</p></li>
<li><p>User can now edit the voltage level that forces the device into config mode (charging)</p></li>
<li><p>(beta2) Calibration temperature (for temp adjustment) can now be set under advanced settings.</p></li>
<li><p>(beta2) Changes length of device name from 12 to 63 chars. 63 is the max limit according to mdns.</p></li>
</ul>
</div>
<div class="section" id="features">
<h3>Features<a class="headerlink" href="#features" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>Added storage mode which is activated under hardware setting. When place on the cap (&lt;5 degres tilt) the device will go into storage mode and sleep for the max allowed time.</p></li>
<li><p>Added ${app-ver} and ${app-build} to format template as new variables.</p></li>
<li><p>Added format templates for HA auto registration</p></li>
<li><p>(beta4) Added information to error log about abnormal resets (for instance crashes) to detect and fix those.</p></li>
<li><p>(beta4) Changed storage mode so that the device will go into deep sleep until reset.</p></li>
<li><p>(beta3) Updated sensor types in home assistant (auto registration)</p></li>
<li><p>(beta2) Added ${app-ver} and ${app-build} to format template as new variables.</p></li>
<li><p>(beta2) Improved error messages when creating formula so the meaasurement points can be identified.</p></li>
<li><p>(beta2) Changed defaule validation threashold from 1.6 SG to 3.0 SG, this should allow for some more variance when creating formula.</p></li>
<li><p>(beta2) Updated format template for Home Assistant for using manual configuration (Aligned with new mqtt configuration format)</p></li>
<li><p>(beta2) Added format template for Home Assistant with automatic device registration</p></li>
<li><p>Added storage mode which is activated under hardware setting. When place on the cap (&lt;5 degres tilt) the device will go into storage mode and deep sleep.</p></li>
<li><p>Added format templates for HA auto registration</p></li>
</ul>
</div>
<div class="section" id="other">
@ -246,11 +254,16 @@
<div class="section" id="issues-adressed">
<h3>Issues adressed<a class="headerlink" href="#issues-adressed" title="Permalink to this headline"></a></h3>
<ul class="simple">
<li><p>BUG: Copy format templates used an old format for iSpindle and Gravmon where the token was not used.</p></li>
<li><p>BUG: Gravity correction formula not calculating correctly.</p></li>
<li><p>(beta4) Refactored error logging function to reduce memory usage and crashes</p></li>
<li><p>(beta4) Refactored format template engine to reduce memory usage and crashes, can how handle slightly larger payloads than before. Increase from around 1100 chars to 1600 chars.</p></li>
<li><p>(beta3) BUG: Refactored format api to handle larger payloads.</p></li>
<li><p>(beta3) BUG: After manual firmware upload the device would crash and go into wifi setup mode.</p></li>
<li><p>(beta3) BUG: After manual firmware upload the device will in some cases not be able to connect with the gyro, the symptom is that it will say, “Gyro moving” in the web UI. In this case the device needs to be reset (or powered on/off). I havent found a way to fix this from the code. The message after firmware update has been updated with this information.</p></li>
<li><p>(beta2) BUG: Temp corrected gravity was not used when pushing data to removed</p></li>
<li><p>(beta2) BUG: Low memory in format api which resulted in mqtt template to be set to null</p></li>
<li><p>(beta2) BUG: Large format templates could be saved but when loading its only blank. Increased total memory from 3kb to 5kb</p></li>
<li><p>(beta2) BUG: Large format templates could be saved but when loading its only blank.</p></li>
<li><p>BUG: Copy format templates used an old format for iSpindle and Gravmon where the token was not used.</p></li>
<li><p>BUG: Gravity correction formula not calculating correctly.</p></li>
</ul>
</div>
</div>
@ -474,7 +487,7 @@ the behaviour in v0.6 is wanted this can be done via the format editor.</p></li>
<div class="toc-tree">
<ul>
<li><a class="reference internal" href="#">Releases</a><ul>
<li><a class="reference internal" href="#v1-1-0-beta-2">v1.1.0 - beta 2</a><ul>
<li><a class="reference internal" href="#v1-1-0-beta-4">v1.1.0 - beta 4</a><ul>
<li><a class="reference internal" href="#documentation">Documentation</a></li>
<li><a class="reference internal" href="#user-interface">User interface</a></li>
<li><a class="reference internal" href="#features">Features</a></li>

File diff suppressed because one or more lines are too long

View File

@ -327,7 +327,7 @@ homeassistant/sensor/gravmon_${id}/temperature/config:{"dev":{"name":"${mdns}","
homeassistant/sensor/gravmon_${id}/gravity/config:{"dev":{"name":"${mdns}","mdl":"gravmon","sw":"${app-ver}","ids":"${id}"},"uniq_id":"${id}_grav","name":"gravity","dev_cla":"temperature","unit_of_meas":" ${gravity-unit}","stat_t":"gravmon/${mdns}/gravity"}|
homeassistant/sensor/gravmon_${id}/rssi/config:{"dev":{"name":"${mdns}","mdl":"gravmon","sw":"${app-ver}","ids":"${id}"},"uniq_id":"${id}_rssi","name":"rssi","dev_cla":"temperature","unit_of_meas":"dBm","stat_t":"gravmon/${mdns}/rssi"}|
homeassistant/sensor/gravmon_${id}/tilt/config:{"dev":{"name":"${mdns}","mdl":"gravmon","sw":"${app-ver}","ids":"${id}"},"uniq_id":"${id}_tilt","name":"tilt","dev_cla":"temperature","stat_t":"gravmon/${mdns}/tilt"}|
homeassistant/sensor/gravmon_${id}/battery/config:{"dev":{"name":"${mdns}","mdl":"gravmon","sw":"${app-ver}","ids":"${id}"},"uniq_id":"${id}_batt","name":"battery","dev_cla":"temperature","unit_of_meas":"V","stat_t":"gravmon/${mdns}/battery"}|
homeassistant/sensor/gravmon_${id}/battery/config:{"dev":{"name":"${mdns}","mdl":"gravmon","sw":"${app-ver}","ids":"${id}"},"uniq_id":"${id}_batt","name":"battery","dev_cla":"voltage","unit_of_meas":"V","stat_t":"gravmon/${mdns}/battery"}|
</pre></div>
</div>
</div>