Merge branch 'dev'
This commit is contained in:
commit
069585aeee
@ -76,7 +76,8 @@ http://gravmon.local/config.htm
|
|||||||
"interval": 900,
|
"interval": 900,
|
||||||
"temperature": 20.5, // C or F based on setting, adjusted value.
|
"temperature": 20.5, // C or F based on setting, adjusted value.
|
||||||
"temp-units": "C", // C or F based on setting
|
"temp-units": "C", // C or F based on setting
|
||||||
"gravity": 1.0050, //
|
"gravity": 1.0050, // Raw or temperature corrected gravity (based on setting)
|
||||||
|
"corr-gravity": 1.0050, // Temperature corrected gravity
|
||||||
"angle": 45.34,
|
"angle": 45.34,
|
||||||
"battery": 3.67,
|
"battery": 3.67,
|
||||||
"rssi": -12,
|
"rssi": -12,
|
||||||
@ -100,8 +101,9 @@ http://gravmon.local/config.htm
|
|||||||
### This is the format for InfluxDB v2
|
### This is the format for InfluxDB v2
|
||||||
|
|
||||||
```
|
```
|
||||||
measurement,host=<mdns>,device=<id>,temp-format=<C|F>,gravity-format=SG gravity=1.0004,angle=45.45,temp=20.1,battery=3.96,rssi=-18
|
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
|
||||||
```
|
```
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
* The third section contains the gravity formula and also option for doing temperature compensation. The calibration formula uses two keywords, temp and tilt. Temperature is in the selected device format.
|
* The third section contains the gravity formula and also option for doing temperature compensation. The calibration formula uses two keywords, temp and tilt. Temperature is in the selected device format.
|
||||||
|
@ -1 +1 @@
|
|||||||
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="description" content=""><title>Beer Gravity Monitor</title><link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"><script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script><script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" crossorigin="anonymous"></script></head><body class="py-4"><!-- START MENU --><nav class="navbar navbar-expand-sm navbar-dark bg-primary"><a class="navbar-brand" href="/index.htm">Beer Gravity Monitor</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbar"><ul class="navbar-nav mr-auto"><li class="nav-item"><a class="nav-link" href="/index.htm">Home <span class="sr-only">(current)</span></a></li><li class="nav-item active"><a class="nav-link" href="/device.htm">Device</a></li><li class="nav-item"><a class="nav-link" href="/config.htm">Configuration</a></li><li class="nav-item"><a class="nav-link" href="/about.htm">About</a></li></ul></div><div class="spinner-border text-light" id="spinner" role="status"></div></nav><!-- START MAIN INDEX --><div class="container"><hr class="my-4"><div class="alert alert-success alert-dismissible fade hide show d-none" role="alert" id="alert"><div id="alert-msg">...</div><button type="button" id="alert-btn" class="close" aria-label="Close"><span aria-hidden="true">×</span></button></div><script type="text/javascript">function showError(s){$(".alert").removeClass("alert-success").addClass("alert-danger").removeClass("d-none").addClass("show"),$("#alert-msg").text(s)}function showSuccess(s){$(".alert").addClass("alert-success").removeClass("alert-danger").removeClass("d-none").addClass("show"),$("#alert-msg").text(s)}$("#alert-btn").click(function(s){$(".alert").addClass("d-none").removeClass("show")})</script><div class="row mb-3"><div class="col-md-8 themed-grid-col bg-light">Current version:</div><div class="col-md-4 themed-grid-col bg-light" id="app-ver">Loading...</div></div><div class="row mb-3" id="h-app-ver-new" hidden><div class="col-md-8 themed-grid-col bg-light">New version:</div><div class="col-md-4 themed-grid-col bg-light" id="app-ver-new">Loading...</div></div><div class="row mb-3"><div class="col-md-8 themed-grid-col bg-light">Host name:</div><div class="col-md-4 themed-grid-col bg-light" id="mdns">Loading...</div></div><div class="row mb-3"><div class="col-md-8 themed-grid-col bg-light">Device ID:</div><div class="col-md-4 themed-grid-col bg-light" id="id">Loading...</div></div><hr class="my-4"></div><script type="text/javascript">function getConfig(){var n="/api/device";$("#spinner").show(),$.getJSON(n,function(n){console.log(n),$("#app-ver").text(n["app-ver"]+" (html 0.3.5)"),$("#mdns").text(n.mdns),$("#id").text(n.id)}).fail(function(){showError("Unable to get data from the device.")}).always(function(){$("#spinner").hide()})}window.onload=getConfig</script><!-- START FOOTER --><div class="container-fluid themed-container bg-primary text-light">(C) Copyright 2021 Magnus Persson</div></body></html>
|
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="description" content=""><title>Beer Gravity Monitor</title><link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"><script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script><script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" crossorigin="anonymous"></script></head><body class="py-4"><!-- START MENU --><nav class="navbar navbar-expand-sm navbar-dark bg-primary"><a class="navbar-brand" href="/index.htm">Beer Gravity Monitor</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbar"><ul class="navbar-nav mr-auto"><li class="nav-item"><a class="nav-link" href="/index.htm">Home <span class="sr-only">(current)</span></a></li><li class="nav-item active"><a class="nav-link" href="/device.htm">Device</a></li><li class="nav-item"><a class="nav-link" href="/config.htm">Configuration</a></li><li class="nav-item"><a class="nav-link" href="/about.htm">About</a></li></ul></div><div class="spinner-border text-light" id="spinner" role="status"></div></nav><!-- START MAIN INDEX --><div class="container"><hr class="my-4"><div class="alert alert-success alert-dismissible fade hide show d-none" role="alert" id="alert"><div id="alert-msg">...</div><button type="button" id="alert-btn" class="close" aria-label="Close"><span aria-hidden="true">×</span></button></div><script type="text/javascript">function showError(s){$(".alert").removeClass("alert-success").addClass("alert-danger").removeClass("d-none").addClass("show"),$("#alert-msg").text(s)}function showSuccess(s){$(".alert").addClass("alert-success").removeClass("alert-danger").removeClass("d-none").addClass("show"),$("#alert-msg").text(s)}$("#alert-btn").click(function(s){$(".alert").addClass("d-none").removeClass("show")})</script><div class="row mb-3"><div class="col-md-8 themed-grid-col bg-light">Current version:</div><div class="col-md-4 themed-grid-col bg-light" id="app-ver">Loading...</div></div><div class="row mb-3" id="h-app-ver-new" hidden><div class="col-md-8 themed-grid-col bg-light">New version:</div><div class="col-md-4 themed-grid-col bg-light" id="app-ver-new">Loading...</div></div><div class="row mb-3"><div class="col-md-8 themed-grid-col bg-light">Host name:</div><div class="col-md-4 themed-grid-col bg-light" id="mdns">Loading...</div></div><div class="row mb-3"><div class="col-md-8 themed-grid-col bg-light">Device ID:</div><div class="col-md-4 themed-grid-col bg-light" id="id">Loading...</div></div><hr class="my-4"></div><script type="text/javascript">function getConfig(){var n="/api/device";$("#spinner").show(),$.getJSON(n,function(n){console.log(n),$("#app-ver").text(n["app-ver"]+" (html 0.4.0)"),$("#mdns").text(n.mdns),$("#id").text(n.id)}).fail(function(){showError("Unable to get data from the device.")}).always(function(){$("#spinner").hide()})}window.onload=getConfig</script><!-- START FOOTER --><div class="container-fluid themed-container bg-primary text-light">(C) Copyright 2021 Magnus Persson</div></body></html>
|
@ -1 +1 @@
|
|||||||
{ "project":"gravmon", "version":"0.3.8", "html": [ "index.min.htm", "device.min.htm", "config.min.htm", "about.min.htm" ] }
|
{ "project":"gravmon", "version":"0.4.0", "html": [ "index.min.htm", "device.min.htm", "config.min.htm", "about.min.htm" ] }
|
@ -97,7 +97,7 @@
|
|||||||
$('#spinner').show();
|
$('#spinner').show();
|
||||||
$.getJSON(url, function (cfg) {
|
$.getJSON(url, function (cfg) {
|
||||||
console.log( cfg );
|
console.log( cfg );
|
||||||
$("#app-ver").text(cfg["app-ver"] + " (html 0.3.5)");
|
$("#app-ver").text(cfg["app-ver"] + " (html 0.4.0)");
|
||||||
$("#mdns").text(cfg["mdns"]);
|
$("#mdns").text(cfg["mdns"]);
|
||||||
$("#id").text(cfg["id"]);
|
$("#id").text(cfg["id"]);
|
||||||
})
|
})
|
||||||
|
@ -1 +1 @@
|
|||||||
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="description" content=""><title>Beer Gravity Monitor</title><link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"><script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script><script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" crossorigin="anonymous"></script></head><body class="py-4"><!-- START MENU --><nav class="navbar navbar-expand-sm navbar-dark bg-primary"><a class="navbar-brand" href="/index.htm">Beer Gravity Monitor</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbar"><ul class="navbar-nav mr-auto"><li class="nav-item"><a class="nav-link" href="/index.htm">Home <span class="sr-only">(current)</span></a></li><li class="nav-item active"><a class="nav-link" href="/device.htm">Device</a></li><li class="nav-item"><a class="nav-link" href="/config.htm">Configuration</a></li><li class="nav-item"><a class="nav-link" href="/about.htm">About</a></li></ul></div><div class="spinner-border text-light" id="spinner" role="status"></div></nav><!-- START MAIN INDEX --><div class="container"><hr class="my-4"><div class="alert alert-success alert-dismissible fade hide show d-none" role="alert" id="alert"><div id="alert-msg">...</div><button type="button" id="alert-btn" class="close" aria-label="Close"><span aria-hidden="true">×</span></button></div><script type="text/javascript">function showError(s){$(".alert").removeClass("alert-success").addClass("alert-danger").removeClass("d-none").addClass("show"),$("#alert-msg").text(s)}function showSuccess(s){$(".alert").addClass("alert-success").removeClass("alert-danger").removeClass("d-none").addClass("show"),$("#alert-msg").text(s)}$("#alert-btn").click(function(s){$(".alert").addClass("d-none").removeClass("show")})</script><div class="row mb-3"><div class="col-md-8 themed-grid-col bg-light">Current version:</div><div class="col-md-4 themed-grid-col bg-light" id="app-ver">Loading...</div></div><div class="row mb-3" id="h-app-ver-new" hidden><div class="col-md-8 themed-grid-col bg-light">New version:</div><div class="col-md-4 themed-grid-col bg-light" id="app-ver-new">Loading...</div></div><div class="row mb-3"><div class="col-md-8 themed-grid-col bg-light">Host name:</div><div class="col-md-4 themed-grid-col bg-light" id="mdns">Loading...</div></div><div class="row mb-3"><div class="col-md-8 themed-grid-col bg-light">Device ID:</div><div class="col-md-4 themed-grid-col bg-light" id="id">Loading...</div></div><hr class="my-4"></div><script type="text/javascript">function getConfig(){var n="/api/device";$("#spinner").show(),$.getJSON(n,function(n){console.log(n),$("#app-ver").text(n["app-ver"]+" (html 0.3.5)"),$("#mdns").text(n.mdns),$("#id").text(n.id)}).fail(function(){showError("Unable to get data from the device.")}).always(function(){$("#spinner").hide()})}window.onload=getConfig</script><!-- START FOOTER --><div class="container-fluid themed-container bg-primary text-light">(C) Copyright 2021 Magnus Persson</div></body></html>
|
<!doctype html><html lang="en"><head><meta charset="utf-8"><meta name="viewport" content="width=device-width,initial-scale=1,shrink-to-fit=no"><meta name="description" content=""><title>Beer Gravity Monitor</title><link href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/css/bootstrap.min.css" rel="stylesheet" crossorigin="anonymous"><script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj+3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script><script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.2/js/bootstrap.min.js" crossorigin="anonymous"></script></head><body class="py-4"><!-- START MENU --><nav class="navbar navbar-expand-sm navbar-dark bg-primary"><a class="navbar-brand" href="/index.htm">Beer Gravity Monitor</a> <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbar" aria-controls="navbar" aria-expanded="false" aria-label="Toggle navigation"><span class="navbar-toggler-icon"></span></button><div class="collapse navbar-collapse" id="navbar"><ul class="navbar-nav mr-auto"><li class="nav-item"><a class="nav-link" href="/index.htm">Home <span class="sr-only">(current)</span></a></li><li class="nav-item active"><a class="nav-link" href="/device.htm">Device</a></li><li class="nav-item"><a class="nav-link" href="/config.htm">Configuration</a></li><li class="nav-item"><a class="nav-link" href="/about.htm">About</a></li></ul></div><div class="spinner-border text-light" id="spinner" role="status"></div></nav><!-- START MAIN INDEX --><div class="container"><hr class="my-4"><div class="alert alert-success alert-dismissible fade hide show d-none" role="alert" id="alert"><div id="alert-msg">...</div><button type="button" id="alert-btn" class="close" aria-label="Close"><span aria-hidden="true">×</span></button></div><script type="text/javascript">function showError(s){$(".alert").removeClass("alert-success").addClass("alert-danger").removeClass("d-none").addClass("show"),$("#alert-msg").text(s)}function showSuccess(s){$(".alert").addClass("alert-success").removeClass("alert-danger").removeClass("d-none").addClass("show"),$("#alert-msg").text(s)}$("#alert-btn").click(function(s){$(".alert").addClass("d-none").removeClass("show")})</script><div class="row mb-3"><div class="col-md-8 themed-grid-col bg-light">Current version:</div><div class="col-md-4 themed-grid-col bg-light" id="app-ver">Loading...</div></div><div class="row mb-3" id="h-app-ver-new" hidden><div class="col-md-8 themed-grid-col bg-light">New version:</div><div class="col-md-4 themed-grid-col bg-light" id="app-ver-new">Loading...</div></div><div class="row mb-3"><div class="col-md-8 themed-grid-col bg-light">Host name:</div><div class="col-md-4 themed-grid-col bg-light" id="mdns">Loading...</div></div><div class="row mb-3"><div class="col-md-8 themed-grid-col bg-light">Device ID:</div><div class="col-md-4 themed-grid-col bg-light" id="id">Loading...</div></div><hr class="my-4"></div><script type="text/javascript">function getConfig(){var n="/api/device";$("#spinner").show(),$.getJSON(n,function(n){console.log(n),$("#app-ver").text(n["app-ver"]+" (html 0.4.0)"),$("#mdns").text(n.mdns),$("#id").text(n.id)}).fail(function(){showError("Unable to get data from the device.")}).always(function(){$("#spinner").hide()})}window.onload=getConfig</script><!-- START FOOTER --><div class="container-fluid themed-container bg-primary text-light">(C) Copyright 2021 Magnus Persson</div></body></html>
|
@ -32,7 +32,7 @@ build_flags = #-O0 -Wl,-Map,output.map
|
|||||||
-D EMBED_HTML # If this is not used the html files needs to be on the file system (can be uploaded)
|
-D EMBED_HTML # If this is not used the html files needs to be on the file system (can be uploaded)
|
||||||
-D USER_SSID=\""\"" # =\""myssid\""
|
-D USER_SSID=\""\"" # =\""myssid\""
|
||||||
-D USER_SSID_PWD=\""\"" # =\""mypwd\""
|
-D USER_SSID_PWD=\""\"" # =\""mypwd\""
|
||||||
-D CFG_APPVER="\"0.3.8\""
|
-D CFG_APPVER="\"0.4.0\""
|
||||||
lib_deps =
|
lib_deps =
|
||||||
# https://github.com/jrowberg/i2cdevlib.git # Using local copy of this library
|
# https://github.com/jrowberg/i2cdevlib.git # Using local copy of this library
|
||||||
https://github.com/codeplea/tinyexpr
|
https://github.com/codeplea/tinyexpr
|
||||||
@ -72,6 +72,24 @@ extra_scripts =
|
|||||||
script/copy_firmware.py
|
script/copy_firmware.py
|
||||||
script/create_versionjson.py
|
script/create_versionjson.py
|
||||||
build_unflags = ${common_env_data.build_unflags}
|
build_unflags = ${common_env_data.build_unflags}
|
||||||
|
build_flags =
|
||||||
|
${common_env_data.build_flags}
|
||||||
|
-D LOG_LEVEL=4
|
||||||
|
lib_deps =
|
||||||
|
${common_env_data.lib_deps}
|
||||||
|
board = ${common_env_data.board}
|
||||||
|
build_type = release
|
||||||
|
board_build.filesystem = littlefs
|
||||||
|
|
||||||
|
[env:gravity-perf]
|
||||||
|
upload_speed = ${common_env_data.upload_speed}
|
||||||
|
monitor_speed = ${common_env_data.monitor_speed}
|
||||||
|
framework = ${common_env_data.framework}
|
||||||
|
platform = ${common_env_data.platform}
|
||||||
|
extra_scripts =
|
||||||
|
script/copy_firmware.py
|
||||||
|
script/create_versionjson.py
|
||||||
|
build_unflags = ${common_env_data.build_unflags}
|
||||||
build_flags =
|
build_flags =
|
||||||
${common_env_data.build_flags}
|
${common_env_data.build_flags}
|
||||||
-D COLLECT_PERFDATA # This option will collect runtime data for a few defined methods to measure time, dumped to serial and/or influxdb
|
-D COLLECT_PERFDATA # This option will collect runtime data for a few defined methods to measure time, dumped to serial and/or influxdb
|
||||||
|
@ -16,6 +16,8 @@ def after_build(source, target, env):
|
|||||||
target = dir + "\\bin\\firmware-debug.bin"
|
target = dir + "\\bin\\firmware-debug.bin"
|
||||||
if name == "gravity-release" :
|
if name == "gravity-release" :
|
||||||
target = dir + "\\bin\\firmware.bin"
|
target = dir + "\\bin\\firmware.bin"
|
||||||
|
if name == "gravity-perf" :
|
||||||
|
target = dir + "\\bin\\firmware-perf.bin"
|
||||||
print( "Copy file : " + source + " -> " + target )
|
print( "Copy file : " + source + " -> " + target )
|
||||||
shutil.copyfile( source, target )
|
shutil.copyfile( source, target )
|
||||||
|
|
||||||
|
@ -40,7 +40,7 @@ Config::Config() {
|
|||||||
setTempFormat('C');
|
setTempFormat('C');
|
||||||
setGravityFormat('G');
|
setGravityFormat('G');
|
||||||
setSleepInterval(900); // 15 minutes
|
setSleepInterval(900); // 15 minutes
|
||||||
setVoltageFactor(1.59); // Conversion factor for battery
|
setVoltageFactor(1.59); // Conversion factor for battery
|
||||||
setTempSensorAdj(0.0);
|
setTempSensorAdj(0.0);
|
||||||
setGravityTempAdj(false);
|
setGravityTempAdj(false);
|
||||||
gyroCalibration = { 0, 0, 0, 0, 0 ,0 };
|
gyroCalibration = { 0, 0, 0, 0, 0 ,0 };
|
||||||
@ -185,6 +185,8 @@ bool Config::loadFile() {
|
|||||||
setVoltageFactor( doc[ CFG_PARAM_VOLTAGEFACTOR ].as<float>() );
|
setVoltageFactor( doc[ CFG_PARAM_VOLTAGEFACTOR ].as<float>() );
|
||||||
if( !doc[ CFG_PARAM_GRAVITY_FORMULA ].isNull() )
|
if( !doc[ CFG_PARAM_GRAVITY_FORMULA ].isNull() )
|
||||||
setGravityFormula( doc[ CFG_PARAM_GRAVITY_FORMULA ] );
|
setGravityFormula( doc[ CFG_PARAM_GRAVITY_FORMULA ] );
|
||||||
|
if( !doc[ CFG_PARAM_GRAVITY_TEMP_ADJ ].isNull() )
|
||||||
|
setGravityTempAdj( doc[ CFG_PARAM_GRAVITY_TEMP_ADJ ].as<bool>() );
|
||||||
if( !doc[ CFG_PARAM_GRAVITY_FORMAT ].isNull() ) {
|
if( !doc[ CFG_PARAM_GRAVITY_FORMAT ].isNull() ) {
|
||||||
String s = doc[ CFG_PARAM_GRAVITY_FORMAT ];
|
String s = doc[ CFG_PARAM_GRAVITY_FORMAT ];
|
||||||
setGravityFormat( s.charAt(0) );
|
setGravityFormat( s.charAt(0) );
|
||||||
@ -247,11 +249,12 @@ void Config::debug() {
|
|||||||
Log.verbose(F("CFG : mDNS; '%s'." CR), getMDNS() );
|
Log.verbose(F("CFG : mDNS; '%s'." CR), getMDNS() );
|
||||||
Log.verbose(F("CFG : Sleep interval; %d." CR), getSleepInterval() );
|
Log.verbose(F("CFG : Sleep interval; %d." CR), getSleepInterval() );
|
||||||
Log.verbose(F("CFG : OTA; '%s'." CR), getOtaURL() );
|
Log.verbose(F("CFG : OTA; '%s'." CR), getOtaURL() );
|
||||||
Log.verbose(F("CFG : Temp; %c." CR), getTempFormat() );
|
Log.verbose(F("CFG : Temp Format; %c." CR), getTempFormat() );
|
||||||
Log.verbose(F("CFG : Temp Adj; %F." CR), getTempSensorAdj() );
|
Log.verbose(F("CFG : Temp Adj; %F." CR), getTempSensorAdj() );
|
||||||
Log.verbose(F("CFG : VoltageFactor; %F." CR), getVoltageFactor() );
|
Log.verbose(F("CFG : VoltageFactor; %F." CR), getVoltageFactor() );
|
||||||
Log.verbose(F("CFG : Gravity formula; '%s'." CR), getGravityFormula() );
|
Log.verbose(F("CFG : Gravity formula; '%s'." CR), getGravityFormula() );
|
||||||
Log.verbose(F("CFG : Gravity format; '%c'." CR), getGravityFormat() );
|
Log.verbose(F("CFG : Gravity format; '%c'." CR), getGravityFormat() );
|
||||||
|
Log.verbose(F("CFG : Gravity temp adj; %s." CR), isGravityTempAdj()?"true":"false" );
|
||||||
Log.verbose(F("CFG : Push brewfather; '%s'." CR), getBrewfatherPushUrl() );
|
Log.verbose(F("CFG : Push brewfather; '%s'." CR), getBrewfatherPushUrl() );
|
||||||
Log.verbose(F("CFG : Push http; '%s'." CR), getHttpPushUrl() );
|
Log.verbose(F("CFG : Push http; '%s'." CR), getHttpPushUrl() );
|
||||||
Log.verbose(F("CFG : Push http2; '%s'." CR), getHttpPushUrl2() );
|
Log.verbose(F("CFG : Push http2; '%s'." CR), getHttpPushUrl2() );
|
||||||
|
@ -31,6 +31,15 @@ SOFTWARE.
|
|||||||
SerialDebug mySerial;
|
SerialDebug mySerial;
|
||||||
BatteryVoltage myBatteryVoltage;
|
BatteryVoltage myBatteryVoltage;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Print the heap information.
|
||||||
|
//
|
||||||
|
void printHeap() {
|
||||||
|
#if LOG_LEVEL==6
|
||||||
|
Log.verbose(F("HELP: Heap %d kb, HeapFrag %d %%, FreeSketch %d kb." CR), ESP.getFreeHeap()/1024, ESP.getHeapFragmentation(), ESP.getFreeSketchSpace()/1024 );
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Enter deep sleep for the defined duration (Argument is seconds)
|
// Enter deep sleep for the defined duration (Argument is seconds)
|
||||||
//
|
//
|
||||||
@ -50,9 +59,6 @@ void printBuildOptions() {
|
|||||||
#ifdef SKIP_SLEEPMODE
|
#ifdef SKIP_SLEEPMODE
|
||||||
"SKIP_SLEEP "
|
"SKIP_SLEEP "
|
||||||
#endif
|
#endif
|
||||||
#ifdef USE_GYRO_TEMP
|
|
||||||
"GYRO_TEMP "
|
|
||||||
#endif
|
|
||||||
#ifdef EMBED_HTML
|
#ifdef EMBED_HTML
|
||||||
"EMBED_HTML "
|
"EMBED_HTML "
|
||||||
#endif
|
#endif
|
||||||
@ -81,7 +87,7 @@ SerialDebug::SerialDebug(const long serialSpeed) {
|
|||||||
//
|
//
|
||||||
// Print the timestamp (ms since start of device)
|
// Print the timestamp (ms since start of device)
|
||||||
//
|
//
|
||||||
void printTimestamp(Print* _logOutput) {
|
void printTimestamp(Print* _logOutput, int _logLevel) {
|
||||||
char c[12];
|
char c[12];
|
||||||
sprintf(c, "%10lu ", millis());
|
sprintf(c, "%10lu ", millis());
|
||||||
_logOutput->print(c);
|
_logOutput->print(c);
|
||||||
|
@ -38,8 +38,9 @@ char* convertFloatToString( float f, char* buf, int dec = 2);
|
|||||||
float reduceFloatPrecision( float f, int dec = 2 );
|
float reduceFloatPrecision( float f, int dec = 2 );
|
||||||
|
|
||||||
// Logging via serial
|
// Logging via serial
|
||||||
void printTimestamp(Print* _logOutput);
|
void printTimestamp(Print* _logOutput, int _logLevel);
|
||||||
void printNewline(Print* _logOutput);
|
void printNewline(Print* _logOutput);
|
||||||
|
void printHeap();
|
||||||
|
|
||||||
// Classes
|
// Classes
|
||||||
class SerialDebug {
|
class SerialDebug {
|
||||||
|
28
src/main.cpp
28
src/main.cpp
@ -166,7 +166,7 @@ void setup() {
|
|||||||
void loop() {
|
void loop() {
|
||||||
drd->loop();
|
drd->loop();
|
||||||
|
|
||||||
if( sleepModeActive || abs(millis() - loopMillis) > interval ) {
|
if( sleepModeActive || abs( (long) (millis() - loopMillis)) > interval ) {
|
||||||
float angle = 0;
|
float angle = 0;
|
||||||
float volt = myBatteryVoltage.getVoltage();
|
float volt = myBatteryVoltage.getVoltage();
|
||||||
//float sensorTemp = 0;
|
//float sensorTemp = 0;
|
||||||
@ -179,9 +179,9 @@ void loop() {
|
|||||||
// If we dont get any readings we just skip this and try again the next interval.
|
// If we dont get any readings we just skip this and try again the next interval.
|
||||||
//
|
//
|
||||||
if( myGyro.hasValue() ) {
|
if( myGyro.hasValue() ) {
|
||||||
angle = myGyro.getAngle(); // Gyro angle
|
angle = myGyro.getAngle(); // Gyro angle
|
||||||
|
|
||||||
stableGyroMillis = millis(); // Reset timer
|
stableGyroMillis = millis(); // Reset timer
|
||||||
|
|
||||||
LOG_PERF_START("loop-temp-read");
|
LOG_PERF_START("loop-temp-read");
|
||||||
float temp = myTempSensor.getTempC();
|
float temp = myTempSensor.getTempC();
|
||||||
@ -191,25 +191,21 @@ void loop() {
|
|||||||
float gravity = calculateGravity( angle, temp );
|
float gravity = calculateGravity( angle, temp );
|
||||||
//LOG_PERF_STOP("loop-gravity-calc");
|
//LOG_PERF_STOP("loop-gravity-calc");
|
||||||
|
|
||||||
#if LOG_LEVEL==6
|
//LOG_PERF_START("loop-gravity-corr"); // Takes less than 2ms , so skip this measurment
|
||||||
Log.verbose(F("Main: Sensor values gyro angle=%F, temp=%F, gravity=%F." CR), angle, temp, gravity );
|
// Use default correction temperature of 20C
|
||||||
#endif
|
float corrGravity = gravityTemperatureCorrection( gravity, temp, myConfig.getTempFormat() );
|
||||||
if( myConfig.isGravityTempAdj() ) {
|
//LOG_PERF_STOP("loop-gravity-corr");
|
||||||
LOG_PERF_START("loop-gravity-corr");
|
|
||||||
gravity = gravityTemperatureCorrection( gravity, temp, myConfig.getTempFormat() ); // Use default correction temperature of 20C
|
|
||||||
LOG_PERF_STOP("loop-gravity-corr");
|
|
||||||
#if LOG_LEVEL==6
|
|
||||||
Log.verbose(F("Main: Temp adjusted gravity=%F." CR), gravity );
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
|
#if LOG_LEVEL==6
|
||||||
|
Log.verbose(F("Main: Sensor values gyro angle=%F, temp=%F, gravity=%F, corr=%F." CR), angle, temp, gravity, corrGravity );
|
||||||
|
#endif
|
||||||
// Limit the printout when sleep mode is not active.
|
// Limit the printout when sleep mode is not active.
|
||||||
if( loopCounter%10 == 0 || sleepModeActive ) {
|
if( loopCounter%10 == 0 || sleepModeActive ) {
|
||||||
Log.notice(F("Main: angle=%F, temp=%F, gravity=%F, batt=%F." CR), angle, temp, gravity, volt );
|
Log.notice(F("Main: angle=%F, temp=%F, gravity=%F, corrGravity=%F, batt=%F." CR), angle, temp, gravity, corrGravity ,volt );
|
||||||
}
|
}
|
||||||
|
|
||||||
LOG_PERF_START("loop-push");
|
LOG_PERF_START("loop-push");
|
||||||
myPushTarget.send( angle, gravity, temp, (millis()-runtimeMillis)/1000, sleepModeActive ); // Force the transmission if we are going to sleep
|
myPushTarget.send( angle, gravity, corrGravity, temp, (millis()-runtimeMillis)/1000, sleepModeActive ); // Force the transmission if we are going to sleep
|
||||||
LOG_PERF_STOP("loop-push");
|
LOG_PERF_STOP("loop-push");
|
||||||
|
|
||||||
// If we have completed the update lets go to sleep
|
// If we have completed the update lets go to sleep
|
||||||
|
@ -30,8 +30,8 @@ PushTarget myPushTarget;
|
|||||||
//
|
//
|
||||||
// Send the pressure value
|
// Send the pressure value
|
||||||
//
|
//
|
||||||
void PushTarget::send(float angle, float gravity, float temp, float runTime, bool force ) {
|
void PushTarget::send(float angle, float gravity, float corrGravity, float temp, float runTime, bool force ) {
|
||||||
unsigned long timePassed = abs( millis() - ms );
|
unsigned long timePassed = abs( (long) (millis() - ms) );
|
||||||
unsigned long interval = myConfig.getSleepInterval()*1000;
|
unsigned long interval = myConfig.getSleepInterval()*1000;
|
||||||
|
|
||||||
if( ( timePassed < interval ) && !force) {
|
if( ( timePassed < interval ) && !force) {
|
||||||
@ -48,25 +48,25 @@ void PushTarget::send(float angle, float gravity, float temp, float runTime, boo
|
|||||||
|
|
||||||
if( myConfig.isBrewfatherActive() ) {
|
if( myConfig.isBrewfatherActive() ) {
|
||||||
LOG_PERF_START("push-brewfather");
|
LOG_PERF_START("push-brewfather");
|
||||||
sendBrewfather( angle, gravity, temp );
|
sendBrewfather( angle, gravity, corrGravity, temp );
|
||||||
LOG_PERF_STOP("push-brewfather");
|
LOG_PERF_STOP("push-brewfather");
|
||||||
}
|
}
|
||||||
|
|
||||||
if( myConfig.isHttpActive() ) {
|
if( myConfig.isHttpActive() ) {
|
||||||
LOG_PERF_START("push-http");
|
LOG_PERF_START("push-http");
|
||||||
sendHttp( myConfig.getHttpPushUrl(), angle, gravity, temp, runTime );
|
sendHttp( myConfig.getHttpPushUrl(), angle, gravity, corrGravity, temp, runTime );
|
||||||
LOG_PERF_STOP("push-http");
|
LOG_PERF_STOP("push-http");
|
||||||
}
|
}
|
||||||
|
|
||||||
if( myConfig.isHttpActive2() ) {
|
if( myConfig.isHttpActive2() ) {
|
||||||
LOG_PERF_START("push-http2");
|
LOG_PERF_START("push-http2");
|
||||||
sendHttp( myConfig.getHttpPushUrl2(), angle, gravity, temp, runTime );
|
sendHttp( myConfig.getHttpPushUrl2(), angle, gravity, corrGravity, temp, runTime );
|
||||||
LOG_PERF_STOP("push-http2");
|
LOG_PERF_STOP("push-http2");
|
||||||
}
|
}
|
||||||
|
|
||||||
if( myConfig.isInfluxDb2Active() ) {
|
if( myConfig.isInfluxDb2Active() ) {
|
||||||
LOG_PERF_START("push-influxdb2");
|
LOG_PERF_START("push-influxdb2");
|
||||||
sendInfluxDb2( angle, gravity, temp, runTime );
|
sendInfluxDb2( angle, gravity, corrGravity, temp, runTime );
|
||||||
LOG_PERF_STOP("push-influxdb2");
|
LOG_PERF_STOP("push-influxdb2");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -74,7 +74,7 @@ void PushTarget::send(float angle, float gravity, float temp, float runTime, boo
|
|||||||
//
|
//
|
||||||
// Send to influx db v2
|
// Send to influx db v2
|
||||||
//
|
//
|
||||||
void PushTarget::sendInfluxDb2(float angle, float gravity, float temp, float runTime) {
|
void PushTarget::sendInfluxDb2(float angle, float gravity, float corrGravity, float temp, float runTime) {
|
||||||
Log.notice(F("PUSH: Sending values to influxdb2 angle=%F, gravity=%F, temp=%F." CR), angle, gravity, temp );
|
Log.notice(F("PUSH: Sending values to influxdb2 angle=%F, gravity=%F, temp=%F." CR), angle, gravity, temp );
|
||||||
|
|
||||||
WiFiClient client;
|
WiFiClient client;
|
||||||
@ -88,10 +88,11 @@ void PushTarget::sendInfluxDb2(float angle, float gravity, float temp, float run
|
|||||||
// Create body for influxdb2
|
// Create body for influxdb2
|
||||||
char buf[1024];
|
char buf[1024];
|
||||||
sprintf( &buf[0], "measurement,host=%s,device=%s,temp-format=%c,gravity-format=%s "
|
sprintf( &buf[0], "measurement,host=%s,device=%s,temp-format=%c,gravity-format=%s "
|
||||||
"gravity=%.4f,angle=%.2f,temp=%.2f,battery=%.2f,rssi=%d,temp2=%.2f\n",
|
"gravity=%.4f,corr-gravity=%.4f,angle=%.2f,temp=%.2f,battery=%.2f,rssi=%d,temp2=%.2f\n",
|
||||||
// TODO: Add support for plato format
|
// TODO: Add support for plato format
|
||||||
myConfig.getMDNS(), myConfig.getID(), myConfig.getTempFormat(), "SG",
|
myConfig.getMDNS(), myConfig.getID(), myConfig.getTempFormat(), "SG",
|
||||||
gravity, angle, temp, myBatteryVoltage.getVoltage(), WiFi.RSSI(), myGyro.getSensorTempC() ); // For comparing gyro tempsensor vs DSB1820
|
myConfig.isGravityTempAdj() ? corrGravity : gravity,
|
||||||
|
corrGravity, angle, temp, myBatteryVoltage.getVoltage(), WiFi.RSSI(), myGyro.getSensorTempC() ); // For comparing gyro tempsensor vs DSB1820
|
||||||
|
|
||||||
#if LOG_LEVEL==6
|
#if LOG_LEVEL==6
|
||||||
Log.verbose(F("PUSH: url %s." CR), serverPath.c_str());
|
Log.verbose(F("PUSH: url %s." CR), serverPath.c_str());
|
||||||
@ -115,7 +116,7 @@ void PushTarget::sendInfluxDb2(float angle, float gravity, float temp, float run
|
|||||||
//
|
//
|
||||||
// Send data to brewfather
|
// Send data to brewfather
|
||||||
//
|
//
|
||||||
void PushTarget::sendBrewfather(float angle, float gravity, float temp ) {
|
void PushTarget::sendBrewfather(float angle, float gravity, float corrGravity, float temp ) {
|
||||||
Log.notice(F("PUSH: Sending values to brewfather angle=%F, gravity=%F, temp=%F." CR), angle, gravity, temp );
|
Log.notice(F("PUSH: Sending values to brewfather angle=%F, gravity=%F, temp=%F." CR), angle, gravity, temp );
|
||||||
|
|
||||||
DynamicJsonDocument doc(300);
|
DynamicJsonDocument doc(300);
|
||||||
@ -142,7 +143,7 @@ void PushTarget::sendBrewfather(float angle, float gravity, float temp ) {
|
|||||||
doc["temp_unit"] = String( myConfig.getTempFormat() );
|
doc["temp_unit"] = String( myConfig.getTempFormat() );
|
||||||
doc["battery"] = reduceFloatPrecision( myBatteryVoltage.getVoltage(), 2 );
|
doc["battery"] = reduceFloatPrecision( myBatteryVoltage.getVoltage(), 2 );
|
||||||
// TODO: Add support for plato format
|
// TODO: Add support for plato format
|
||||||
doc["gravity"] = reduceFloatPrecision( gravity, 4 );
|
doc["gravity"] = reduceFloatPrecision( myConfig.isGravityTempAdj() ? corrGravity : gravity, 4 );
|
||||||
doc["gravity_unit"] = myConfig.isGravitySG()?"G":"P";
|
doc["gravity_unit"] = myConfig.isGravitySG()?"G":"P";
|
||||||
|
|
||||||
WiFiClient client;
|
WiFiClient client;
|
||||||
@ -174,7 +175,7 @@ void PushTarget::sendBrewfather(float angle, float gravity, float temp ) {
|
|||||||
//
|
//
|
||||||
// Send data to http target
|
// Send data to http target
|
||||||
//
|
//
|
||||||
void PushTarget::sendHttp( String serverPath, float angle, float gravity, float temp, float runTime ) {
|
void PushTarget::sendHttp( String serverPath, float angle, float gravity, float corrGravity, float temp, float runTime ) {
|
||||||
Log.notice(F("PUSH: Sending values to http angle=%F, gravity=%F, temp=%F." CR), angle, gravity, temp );
|
Log.notice(F("PUSH: Sending values to http angle=%F, gravity=%F, temp=%F." CR), angle, gravity, temp );
|
||||||
|
|
||||||
DynamicJsonDocument doc(256);
|
DynamicJsonDocument doc(256);
|
||||||
@ -187,7 +188,8 @@ void PushTarget::sendHttp( String serverPath, float angle, float gravity, float
|
|||||||
doc["temperature"] = reduceFloatPrecision( temp, 1 );
|
doc["temperature"] = reduceFloatPrecision( temp, 1 );
|
||||||
doc["temp-units"] = String( myConfig.getTempFormat() );
|
doc["temp-units"] = String( myConfig.getTempFormat() );
|
||||||
// TODO: Add support for plato format
|
// TODO: Add support for plato format
|
||||||
doc["gravity"] = reduceFloatPrecision( gravity, 4 );
|
doc["gravity"] = reduceFloatPrecision( myConfig.isGravityTempAdj() ? corrGravity : gravity, 4 );
|
||||||
|
doc["corr-gravity"] = reduceFloatPrecision( corrGravity, 4 );
|
||||||
doc["angle"] = reduceFloatPrecision( angle, 2);
|
doc["angle"] = reduceFloatPrecision( angle, 2);
|
||||||
doc["battery"] = reduceFloatPrecision( myBatteryVoltage.getVoltage(), 2 );
|
doc["battery"] = reduceFloatPrecision( myBatteryVoltage.getVoltage(), 2 );
|
||||||
doc["rssi"] = WiFi.RSSI();
|
doc["rssi"] = WiFi.RSSI();
|
||||||
|
@ -37,13 +37,13 @@ class PushTarget {
|
|||||||
private:
|
private:
|
||||||
unsigned long ms; // Used to check that we do not post to often
|
unsigned long ms; // Used to check that we do not post to often
|
||||||
|
|
||||||
void sendBrewfather(float angle, float gravity, float temp );
|
void sendBrewfather(float angle, float gravity, float corrGravity, float temp );
|
||||||
void sendHttp(String serverPath, float angle, float gravity, float temp, float runTime);
|
void sendHttp(String serverPath, float angle, float gravity, float corrGravity, float temp, float runTime);
|
||||||
void sendInfluxDb2(float angle, float gravity, float temp, float runTime);
|
void sendInfluxDb2(float angle, float gravity, float corrGravity, float temp, float runTime);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PushTarget() { ms = millis(); }
|
PushTarget() { ms = millis(); }
|
||||||
void send(float angle, float gravity, float temp, float runTime, bool force = false );
|
void send(float angle, float gravity, float corrGravity, float temp, float runTime, bool force = false );
|
||||||
};
|
};
|
||||||
|
|
||||||
extern PushTarget myPushTarget;
|
extern PushTarget myPushTarget;
|
||||||
|
@ -82,24 +82,31 @@ bool Wifi::connect( bool showPortal ) {
|
|||||||
int i = 0;
|
int i = 0;
|
||||||
|
|
||||||
Log.notice(F("WIFI: Connecting to WIFI." CR));
|
Log.notice(F("WIFI: Connecting to WIFI." CR));
|
||||||
|
WiFi.mode(WIFI_STA);
|
||||||
if( strlen(userSSID) ) {
|
if( strlen(userSSID) ) {
|
||||||
Log.notice(F("WIFI: Connecting to wifi using predefined settings %s." CR), userSSID);
|
Log.notice(F("WIFI: Connecting to wifi using predefined settings %s." CR), userSSID);
|
||||||
WiFi.begin( userSSID, userPWD );
|
WiFi.begin( userSSID, userPWD );
|
||||||
} else {
|
} else {
|
||||||
WiFi.begin();
|
WiFi.begin();
|
||||||
|
#if LOG_LEVEL==6
|
||||||
|
Log.verbose(F("WIFI: Using SSID=%s, KEY=%s." CR), WiFi.SSID().c_str(), WiFi.psk().c_str() );
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
while( WiFi.status() != WL_CONNECTED ) {
|
while( WiFi.status() != WL_CONNECTED ) {
|
||||||
delay(100);
|
delay(100);
|
||||||
Serial.print( "." );
|
Serial.print( "." );
|
||||||
|
|
||||||
if( i++ > 60 ) { // Try for 6 seconds.
|
// if( i++ > 60 ) { // Try for 6 seconds.
|
||||||
|
if( i++ > 200 ) { // Try for 20 seconds.
|
||||||
|
Log.error(F("WIFI: Failed to connect to wifi, aborting." CR));
|
||||||
return connectedFlag; // Return to main that we have failed to connect.
|
return connectedFlag; // Return to main that we have failed to connect.
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Serial.print( CR );
|
Serial.print( CR );
|
||||||
connectedFlag = true;
|
connectedFlag = true;
|
||||||
Log.notice(F("WIFI: Connected to wifi ip=%s." CR), getIPAddress().c_str() );
|
Log.notice(F("WIFI: Connected to wifi ip=%s." CR), getIPAddress().c_str() );
|
||||||
|
Log.notice(F("WIFI: Using mDNS name %s%s." CR), myConfig.getMDNS() );
|
||||||
return connectedFlag;
|
return connectedFlag;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user