commit
1ce7cef126
10
README.md
10
README.md
@ -171,7 +171,7 @@ Output of sensor and peripheral data is internally switched by a bitmask registe
|
|||||||
|
|
||||||
| Bit | Sensordata | Default
|
| Bit | Sensordata | Default
|
||||||
| --- | ------------- | -------
|
| --- | ------------- | -------
|
||||||
| 0 | GPS | on*
|
| 0 | GPS* | on
|
||||||
| 1 | Beacon alarm | on
|
| 1 | Beacon alarm | on
|
||||||
| 2 | BME280/680 | on
|
| 2 | BME280/680 | on
|
||||||
| 3 | Paxcounter | on
|
| 3 | Paxcounter | on
|
||||||
@ -213,6 +213,12 @@ Hereafter described is the default *plain* format, which uses MSB bit numbering.
|
|||||||
[**packed_decoder.js**](src/TTN/packed_decoder.js) |
|
[**packed_decoder.js**](src/TTN/packed_decoder.js) |
|
||||||
[**packed_converter.js**](src/TTN/packed_converter.js)
|
[**packed_converter.js**](src/TTN/packed_converter.js)
|
||||||
|
|
||||||
|
# mobile PaxCounter via https://opensensemap.org/
|
||||||
|
This describes how to set up a mobile PaxCounter:
|
||||||
|
Follow all steps so far for preparing the device, use the packed payload format. In paxcounter.conf set PAYLOAD_OPENSENSEBOX to 1. Register a new sensbox on https://opensensemap.org/.
|
||||||
|
There in the sensor configuration select "TheThingsNetwork" and set Decoding Profil to "LoRa serialization", enter your TTN Application and Device Id. Decoding option has to be
|
||||||
|
[{"decoder":"latLng"},{"decoder":"uint16","sensor_id":"yoursensorid"}]
|
||||||
|
|
||||||
|
|
||||||
**Port #1:** Paxcount data
|
**Port #1:** Paxcount data
|
||||||
|
|
||||||
@ -308,7 +314,7 @@ Note: all settings are stored in NVRAM and will be reloaded when device starts.
|
|||||||
0x03 set GPS data on/off
|
0x03 set GPS data on/off
|
||||||
|
|
||||||
0 = GPS data off
|
0 = GPS data off
|
||||||
1 = GPS data on, sends GPS data on port 4, if GPS is present and has a fix [default]
|
1 = GPS data on, sends GPS data on port 4 (default, use port 1 for mobile pax counter), if GPS is present and has a fix
|
||||||
|
|
||||||
0x04 set display on/off
|
0x04 set display on/off
|
||||||
|
|
||||||
|
@ -7,7 +7,7 @@
|
|||||||
|
|
||||||
; ---> SELECT THE TARGET PLATFORM HERE! <---
|
; ---> SELECT THE TARGET PLATFORM HERE! <---
|
||||||
[board]
|
[board]
|
||||||
;halfile = generic.h
|
halfile = generic.h
|
||||||
;halfile = ebox.h
|
;halfile = ebox.h
|
||||||
;halfile = eboxtube.h
|
;halfile = eboxtube.h
|
||||||
;halfile = ecopower.h
|
;halfile = ecopower.h
|
||||||
@ -18,7 +18,7 @@
|
|||||||
;halfile = ttgov21old.h
|
;halfile = ttgov21old.h
|
||||||
;halfile = ttgov21new.h
|
;halfile = ttgov21new.h
|
||||||
;halfile = ttgofox.h
|
;halfile = ttgofox.h
|
||||||
halfile = ttgobeam.h
|
;halfile = ttgobeam.h
|
||||||
;halfile = ttgobeam10.h
|
;halfile = ttgobeam10.h
|
||||||
;halfile = fipy.h
|
;halfile = fipy.h
|
||||||
;halfile = lopy.h
|
;halfile = lopy.h
|
||||||
|
@ -18,6 +18,14 @@ function Decoder(bytes, port) {
|
|||||||
if (bytes.length === 4) {
|
if (bytes.length === 4) {
|
||||||
return decode(bytes, [uint16, uint16], ['wifi', 'ble']);
|
return decode(bytes, [uint16, uint16], ['wifi', 'ble']);
|
||||||
}
|
}
|
||||||
|
// combined wifi counter and gps data, used by https://opensensemap.org
|
||||||
|
if (bytes.length === 10) {
|
||||||
|
return decode(bytes, [latLng, latLng, uint16], ['latitude', 'longitude', 'wifi']);
|
||||||
|
}
|
||||||
|
// combined wifi + ble counter and gps data, used by https://opensensemap.org
|
||||||
|
if (bytes.length === 12) {
|
||||||
|
return decode(bytes, [latLng, latLng, uint16, uint16], ['latitude', 'longitude', 'wifi', 'ble']);
|
||||||
|
}
|
||||||
// combined wifi counter and gps data
|
// combined wifi counter and gps data
|
||||||
if (bytes.length === 15) {
|
if (bytes.length === 15) {
|
||||||
return decode(bytes, [uint16, latLng, latLng, uint8, hdop, altitude], ['wifi', 'latitude', 'longitude', 'sats', 'hdop', 'altitude']);
|
return decode(bytes, [uint16, latLng, latLng, uint8, hdop, altitude], ['wifi', 'latitude', 'longitude', 'sats', 'hdop', 'altitude']);
|
||||||
@ -42,7 +50,11 @@ function Decoder(bytes, port) {
|
|||||||
|
|
||||||
if (port === 4) {
|
if (port === 4) {
|
||||||
// gps data
|
// gps data
|
||||||
return decode(bytes, [latLng, latLng, uint8, hdop, altitude], ['latitude', 'longitude', 'sats', 'hdop', 'altitude']);
|
if (bytes.length === 8) {
|
||||||
|
return decode(bytes, [latLng, latLng], ['latitude', 'longitude']);
|
||||||
|
} else {
|
||||||
|
return decode(bytes, [latLng, latLng, uint8, hdop, altitude], ['latitude', 'longitude', 'sats', 'hdop', 'altitude']);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (port === 5) {
|
if (port === 5) {
|
||||||
|
@ -1,364 +1,364 @@
|
|||||||
/* configmanager persists runtime configuration using NVRAM of ESP32*/
|
/* configmanager persists runtime configuration using NVRAM of ESP32*/
|
||||||
|
|
||||||
#include "globals.h"
|
#include "globals.h"
|
||||||
|
|
||||||
// Local logging tag
|
// Local logging tag
|
||||||
static const char TAG[] = "flash";
|
static const char TAG[] = "flash";
|
||||||
|
|
||||||
nvs_handle my_handle;
|
nvs_handle my_handle;
|
||||||
esp_err_t err;
|
esp_err_t err;
|
||||||
|
|
||||||
#define PAYLOADMASK \
|
#define PAYLOADMASK \
|
||||||
(ALARM_DATA | MEMS_DATA | COUNT_DATA | GPS_DATA | SENSOR1_DATA | \
|
((GPS_DATA | ALARM_DATA | MEMS_DATA | COUNT_DATA | \
|
||||||
SENSOR2_DATA | SENSOR3_DATA) & \
|
SENSOR1_DATA | SENSOR2_DATA | SENSOR3_DATA) & \
|
||||||
(~BATT_DATA)
|
(~BATT_DATA) )
|
||||||
|
|
||||||
// populate cfg vars with factory settings
|
// populate cfg vars with factory settings
|
||||||
void defaultConfig() {
|
void defaultConfig() {
|
||||||
cfg.loradr = LORADRDEFAULT; // 0-15, lora datarate, see paxcounter.conf
|
cfg.loradr = LORADRDEFAULT; // 0-15, lora datarate, see paxcounter.conf
|
||||||
cfg.txpower = LORATXPOWDEFAULT; // 0-15, lora tx power
|
cfg.txpower = LORATXPOWDEFAULT; // 0-15, lora tx power
|
||||||
cfg.adrmode = 1; // 0=disabled, 1=enabled
|
cfg.adrmode = 1; // 0=disabled, 1=enabled
|
||||||
cfg.screensaver = 0; // 0=disabled, 1=enabled
|
cfg.screensaver = 0; // 0=disabled, 1=enabled
|
||||||
cfg.screenon = 1; // 0=disabled, 1=enabled
|
cfg.screenon = 1; // 0=disabled, 1=enabled
|
||||||
cfg.countermode = COUNTERMODE; // 0=cyclic, 1=cumulative, 2=cyclic confirmed
|
cfg.countermode = COUNTERMODE; // 0=cyclic, 1=cumulative, 2=cyclic confirmed
|
||||||
cfg.rssilimit = 0; // threshold for rssilimiter, negative value!
|
cfg.rssilimit = 0; // threshold for rssilimiter, negative value!
|
||||||
cfg.sendcycle = SENDCYCLE; // payload send cycle [seconds/2]
|
cfg.sendcycle = SENDCYCLE; // payload send cycle [seconds/2]
|
||||||
cfg.wifichancycle =
|
cfg.wifichancycle =
|
||||||
WIFI_CHANNEL_SWITCH_INTERVAL; // wifi channel switch cycle [seconds/100]
|
WIFI_CHANNEL_SWITCH_INTERVAL; // wifi channel switch cycle [seconds/100]
|
||||||
cfg.blescantime =
|
cfg.blescantime =
|
||||||
BLESCANINTERVAL /
|
BLESCANINTERVAL /
|
||||||
10; // BT channel scan cycle [seconds/100], default 1 (= 10ms)
|
10; // BT channel scan cycle [seconds/100], default 1 (= 10ms)
|
||||||
cfg.blescan = BLECOUNTER; // 0=disabled, 1=enabled
|
cfg.blescan = BLECOUNTER; // 0=disabled, 1=enabled
|
||||||
cfg.wifiscan = WIFICOUNTER; // 0=disabled, 1=enabled
|
cfg.wifiscan = WIFICOUNTER; // 0=disabled, 1=enabled
|
||||||
cfg.wifiant = 0; // 0=internal, 1=external (for LoPy/LoPy4)
|
cfg.wifiant = 0; // 0=internal, 1=external (for LoPy/LoPy4)
|
||||||
cfg.vendorfilter = VENDORFILTER; // 0=disabled, 1=enabled
|
cfg.vendorfilter = VENDORFILTER; // 0=disabled, 1=enabled
|
||||||
cfg.rgblum = RGBLUMINOSITY; // RGB Led luminosity (0..100%)
|
cfg.rgblum = RGBLUMINOSITY; // RGB Led luminosity (0..100%)
|
||||||
cfg.monitormode = 0; // 0=disabled, 1=enabled
|
cfg.monitormode = 0; // 0=disabled, 1=enabled
|
||||||
cfg.payloadmask = PAYLOADMASK; // all payload switched on
|
cfg.payloadmask = PAYLOADMASK; // all payload switched on
|
||||||
cfg.bsecstate[BSEC_MAX_STATE_BLOB_SIZE] = {
|
cfg.bsecstate[BSEC_MAX_STATE_BLOB_SIZE] = {
|
||||||
0}; // init BSEC state for BME680 sensor
|
0}; // init BSEC state for BME680 sensor
|
||||||
|
|
||||||
strncpy(cfg.version, PROGVERSION, sizeof(cfg.version) - 1);
|
strncpy(cfg.version, PROGVERSION, sizeof(cfg.version) - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
void open_storage() {
|
void open_storage() {
|
||||||
err = nvs_flash_init();
|
err = nvs_flash_init();
|
||||||
if (err == ESP_ERR_NVS_NO_FREE_PAGES) {
|
if (err == ESP_ERR_NVS_NO_FREE_PAGES) {
|
||||||
// NVS partition was truncated and needs to be erased
|
// NVS partition was truncated and needs to be erased
|
||||||
// Retry nvs_flash_init
|
// Retry nvs_flash_init
|
||||||
ESP_ERROR_CHECK(nvs_flash_erase());
|
ESP_ERROR_CHECK(nvs_flash_erase());
|
||||||
err = nvs_flash_init();
|
err = nvs_flash_init();
|
||||||
}
|
}
|
||||||
ESP_ERROR_CHECK(err);
|
ESP_ERROR_CHECK(err);
|
||||||
|
|
||||||
// Open
|
// Open
|
||||||
ESP_LOGI(TAG, "Opening NVS");
|
ESP_LOGI(TAG, "Opening NVS");
|
||||||
err = nvs_open("config", NVS_READWRITE, &my_handle);
|
err = nvs_open("config", NVS_READWRITE, &my_handle);
|
||||||
if (err != ESP_OK)
|
if (err != ESP_OK)
|
||||||
ESP_LOGI(TAG, "Error (%d) opening NVS handle", err);
|
ESP_LOGI(TAG, "Error (%d) opening NVS handle", err);
|
||||||
else
|
else
|
||||||
ESP_LOGI(TAG, "Done");
|
ESP_LOGI(TAG, "Done");
|
||||||
}
|
}
|
||||||
|
|
||||||
// erase all keys and values in NVRAM
|
// erase all keys and values in NVRAM
|
||||||
void eraseConfig() {
|
void eraseConfig() {
|
||||||
ESP_LOGI(TAG, "Clearing settings in NVS");
|
ESP_LOGI(TAG, "Clearing settings in NVS");
|
||||||
open_storage();
|
open_storage();
|
||||||
if (err == ESP_OK) {
|
if (err == ESP_OK) {
|
||||||
nvs_erase_all(my_handle);
|
nvs_erase_all(my_handle);
|
||||||
nvs_commit(my_handle);
|
nvs_commit(my_handle);
|
||||||
nvs_close(my_handle);
|
nvs_close(my_handle);
|
||||||
ESP_LOGI(TAG, "Done");
|
ESP_LOGI(TAG, "Done");
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGW(TAG, "NVS erase failed");
|
ESP_LOGW(TAG, "NVS erase failed");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// save current configuration from RAM to NVRAM
|
// save current configuration from RAM to NVRAM
|
||||||
void saveConfig() {
|
void saveConfig() {
|
||||||
ESP_LOGI(TAG, "Storing settings in NVS");
|
ESP_LOGI(TAG, "Storing settings in NVS");
|
||||||
open_storage();
|
open_storage();
|
||||||
if (err == ESP_OK) {
|
if (err == ESP_OK) {
|
||||||
int8_t flash8 = 0;
|
int8_t flash8 = 0;
|
||||||
int16_t flash16 = 0;
|
int16_t flash16 = 0;
|
||||||
size_t required_size;
|
size_t required_size;
|
||||||
uint8_t bsecstate_buffer[BSEC_MAX_STATE_BLOB_SIZE + 1];
|
uint8_t bsecstate_buffer[BSEC_MAX_STATE_BLOB_SIZE + 1];
|
||||||
char storedversion[10];
|
char storedversion[10];
|
||||||
|
|
||||||
if (nvs_get_blob(my_handle, "bsecstate", bsecstate_buffer,
|
if (nvs_get_blob(my_handle, "bsecstate", bsecstate_buffer,
|
||||||
&required_size) != ESP_OK ||
|
&required_size) != ESP_OK ||
|
||||||
memcmp(bsecstate_buffer, cfg.bsecstate, BSEC_MAX_STATE_BLOB_SIZE + 1) !=
|
memcmp(bsecstate_buffer, cfg.bsecstate, BSEC_MAX_STATE_BLOB_SIZE + 1) !=
|
||||||
0)
|
0)
|
||||||
nvs_set_blob(my_handle, "bsecstate", cfg.bsecstate,
|
nvs_set_blob(my_handle, "bsecstate", cfg.bsecstate,
|
||||||
BSEC_MAX_STATE_BLOB_SIZE + 1);
|
BSEC_MAX_STATE_BLOB_SIZE + 1);
|
||||||
|
|
||||||
if (nvs_get_str(my_handle, "version", storedversion, &required_size) !=
|
if (nvs_get_str(my_handle, "version", storedversion, &required_size) !=
|
||||||
ESP_OK ||
|
ESP_OK ||
|
||||||
strcmp(storedversion, cfg.version) != 0)
|
strcmp(storedversion, cfg.version) != 0)
|
||||||
nvs_set_str(my_handle, "version", cfg.version);
|
nvs_set_str(my_handle, "version", cfg.version);
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "loradr", &flash8) != ESP_OK ||
|
if (nvs_get_i8(my_handle, "loradr", &flash8) != ESP_OK ||
|
||||||
flash8 != cfg.loradr)
|
flash8 != cfg.loradr)
|
||||||
nvs_set_i8(my_handle, "loradr", cfg.loradr);
|
nvs_set_i8(my_handle, "loradr", cfg.loradr);
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "txpower", &flash8) != ESP_OK ||
|
if (nvs_get_i8(my_handle, "txpower", &flash8) != ESP_OK ||
|
||||||
flash8 != cfg.txpower)
|
flash8 != cfg.txpower)
|
||||||
nvs_set_i8(my_handle, "txpower", cfg.txpower);
|
nvs_set_i8(my_handle, "txpower", cfg.txpower);
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "adrmode", &flash8) != ESP_OK ||
|
if (nvs_get_i8(my_handle, "adrmode", &flash8) != ESP_OK ||
|
||||||
flash8 != cfg.adrmode)
|
flash8 != cfg.adrmode)
|
||||||
nvs_set_i8(my_handle, "adrmode", cfg.adrmode);
|
nvs_set_i8(my_handle, "adrmode", cfg.adrmode);
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "screensaver", &flash8) != ESP_OK ||
|
if (nvs_get_i8(my_handle, "screensaver", &flash8) != ESP_OK ||
|
||||||
flash8 != cfg.screensaver)
|
flash8 != cfg.screensaver)
|
||||||
nvs_set_i8(my_handle, "screensaver", cfg.screensaver);
|
nvs_set_i8(my_handle, "screensaver", cfg.screensaver);
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "screenon", &flash8) != ESP_OK ||
|
if (nvs_get_i8(my_handle, "screenon", &flash8) != ESP_OK ||
|
||||||
flash8 != cfg.screenon)
|
flash8 != cfg.screenon)
|
||||||
nvs_set_i8(my_handle, "screenon", cfg.screenon);
|
nvs_set_i8(my_handle, "screenon", cfg.screenon);
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "countermode", &flash8) != ESP_OK ||
|
if (nvs_get_i8(my_handle, "countermode", &flash8) != ESP_OK ||
|
||||||
flash8 != cfg.countermode)
|
flash8 != cfg.countermode)
|
||||||
nvs_set_i8(my_handle, "countermode", cfg.countermode);
|
nvs_set_i8(my_handle, "countermode", cfg.countermode);
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "sendcycle", &flash8) != ESP_OK ||
|
if (nvs_get_i8(my_handle, "sendcycle", &flash8) != ESP_OK ||
|
||||||
flash8 != cfg.sendcycle)
|
flash8 != cfg.sendcycle)
|
||||||
nvs_set_i8(my_handle, "sendcycle", cfg.sendcycle);
|
nvs_set_i8(my_handle, "sendcycle", cfg.sendcycle);
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "wifichancycle", &flash8) != ESP_OK ||
|
if (nvs_get_i8(my_handle, "wifichancycle", &flash8) != ESP_OK ||
|
||||||
flash8 != cfg.wifichancycle)
|
flash8 != cfg.wifichancycle)
|
||||||
nvs_set_i8(my_handle, "wifichancycle", cfg.wifichancycle);
|
nvs_set_i8(my_handle, "wifichancycle", cfg.wifichancycle);
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "blescantime", &flash8) != ESP_OK ||
|
if (nvs_get_i8(my_handle, "blescantime", &flash8) != ESP_OK ||
|
||||||
flash8 != cfg.blescantime)
|
flash8 != cfg.blescantime)
|
||||||
nvs_set_i8(my_handle, "blescantime", cfg.blescantime);
|
nvs_set_i8(my_handle, "blescantime", cfg.blescantime);
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "blescanmode", &flash8) != ESP_OK ||
|
if (nvs_get_i8(my_handle, "blescanmode", &flash8) != ESP_OK ||
|
||||||
flash8 != cfg.blescan)
|
flash8 != cfg.blescan)
|
||||||
nvs_set_i8(my_handle, "blescanmode", cfg.blescan);
|
nvs_set_i8(my_handle, "blescanmode", cfg.blescan);
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "wifiscanmode", &flash8) != ESP_OK ||
|
if (nvs_get_i8(my_handle, "wifiscanmode", &flash8) != ESP_OK ||
|
||||||
flash8 != cfg.wifiscan)
|
flash8 != cfg.wifiscan)
|
||||||
nvs_set_i8(my_handle, "wifiscanmode", cfg.wifiscan);
|
nvs_set_i8(my_handle, "wifiscanmode", cfg.wifiscan);
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "wifiant", &flash8) != ESP_OK ||
|
if (nvs_get_i8(my_handle, "wifiant", &flash8) != ESP_OK ||
|
||||||
flash8 != cfg.wifiant)
|
flash8 != cfg.wifiant)
|
||||||
nvs_set_i8(my_handle, "wifiant", cfg.wifiant);
|
nvs_set_i8(my_handle, "wifiant", cfg.wifiant);
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "vendorfilter", &flash8) != ESP_OK ||
|
if (nvs_get_i8(my_handle, "vendorfilter", &flash8) != ESP_OK ||
|
||||||
flash8 != cfg.vendorfilter)
|
flash8 != cfg.vendorfilter)
|
||||||
nvs_set_i8(my_handle, "vendorfilter", cfg.vendorfilter);
|
nvs_set_i8(my_handle, "vendorfilter", cfg.vendorfilter);
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "rgblum", &flash8) != ESP_OK ||
|
if (nvs_get_i8(my_handle, "rgblum", &flash8) != ESP_OK ||
|
||||||
flash8 != cfg.rgblum)
|
flash8 != cfg.rgblum)
|
||||||
nvs_set_i8(my_handle, "rgblum", cfg.rgblum);
|
nvs_set_i8(my_handle, "rgblum", cfg.rgblum);
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "payloadmask", &flash8) != ESP_OK ||
|
if (nvs_get_i8(my_handle, "payloadmask", &flash8) != ESP_OK ||
|
||||||
flash8 != cfg.payloadmask)
|
flash8 != cfg.payloadmask)
|
||||||
nvs_set_i8(my_handle, "payloadmask", cfg.payloadmask);
|
nvs_set_i8(my_handle, "payloadmask", cfg.payloadmask);
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "monitormode", &flash8) != ESP_OK ||
|
if (nvs_get_i8(my_handle, "monitormode", &flash8) != ESP_OK ||
|
||||||
flash8 != cfg.monitormode)
|
flash8 != cfg.monitormode)
|
||||||
nvs_set_i8(my_handle, "monitormode", cfg.monitormode);
|
nvs_set_i8(my_handle, "monitormode", cfg.monitormode);
|
||||||
|
|
||||||
if (nvs_get_i16(my_handle, "rssilimit", &flash16) != ESP_OK ||
|
if (nvs_get_i16(my_handle, "rssilimit", &flash16) != ESP_OK ||
|
||||||
flash16 != cfg.rssilimit)
|
flash16 != cfg.rssilimit)
|
||||||
nvs_set_i16(my_handle, "rssilimit", cfg.rssilimit);
|
nvs_set_i16(my_handle, "rssilimit", cfg.rssilimit);
|
||||||
|
|
||||||
err = nvs_commit(my_handle);
|
err = nvs_commit(my_handle);
|
||||||
nvs_close(my_handle);
|
nvs_close(my_handle);
|
||||||
if (err == ESP_OK) {
|
if (err == ESP_OK) {
|
||||||
ESP_LOGI(TAG, "Done");
|
ESP_LOGI(TAG, "Done");
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGW(TAG, "NVS config write failed");
|
ESP_LOGW(TAG, "NVS config write failed");
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGW(TAG, "Error (%d) opening NVS handle", err);
|
ESP_LOGW(TAG, "Error (%d) opening NVS handle", err);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// set and save cfg.version
|
// set and save cfg.version
|
||||||
void migrateVersion() {
|
void migrateVersion() {
|
||||||
snprintf(cfg.version, 10, "%s", PROGVERSION);
|
snprintf(cfg.version, 10, "%s", PROGVERSION);
|
||||||
ESP_LOGI(TAG, "version set to %s", cfg.version);
|
ESP_LOGI(TAG, "version set to %s", cfg.version);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
// load configuration from NVRAM into RAM and make it current
|
// load configuration from NVRAM into RAM and make it current
|
||||||
void loadConfig() {
|
void loadConfig() {
|
||||||
defaultConfig(); // start with factory settings
|
defaultConfig(); // start with factory settings
|
||||||
ESP_LOGI(TAG, "Reading settings from NVS");
|
ESP_LOGI(TAG, "Reading settings from NVS");
|
||||||
open_storage();
|
open_storage();
|
||||||
if (err != ESP_OK) {
|
if (err != ESP_OK) {
|
||||||
ESP_LOGW(TAG, "Error (%d) opening NVS handle, storing defaults", err);
|
ESP_LOGW(TAG, "Error (%d) opening NVS handle, storing defaults", err);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
} // saves factory settings to NVRAM
|
} // saves factory settings to NVRAM
|
||||||
else {
|
else {
|
||||||
int8_t flash8 = 0;
|
int8_t flash8 = 0;
|
||||||
int16_t flash16 = 0;
|
int16_t flash16 = 0;
|
||||||
size_t required_size;
|
size_t required_size;
|
||||||
|
|
||||||
// check if configuration stored in NVRAM matches PROGVERSION
|
// check if configuration stored in NVRAM matches PROGVERSION
|
||||||
if (nvs_get_str(my_handle, "version", NULL, &required_size) == ESP_OK) {
|
if (nvs_get_str(my_handle, "version", NULL, &required_size) == ESP_OK) {
|
||||||
nvs_get_str(my_handle, "version", cfg.version, &required_size);
|
nvs_get_str(my_handle, "version", cfg.version, &required_size);
|
||||||
ESP_LOGI(TAG, "NVRAM settings version = %s", cfg.version);
|
ESP_LOGI(TAG, "NVRAM settings version = %s", cfg.version);
|
||||||
if (strcmp(cfg.version, PROGVERSION)) {
|
if (strcmp(cfg.version, PROGVERSION)) {
|
||||||
ESP_LOGI(TAG, "migrating NVRAM settings to new version %s",
|
ESP_LOGI(TAG, "migrating NVRAM settings to new version %s",
|
||||||
PROGVERSION);
|
PROGVERSION);
|
||||||
nvs_close(my_handle);
|
nvs_close(my_handle);
|
||||||
migrateVersion();
|
migrateVersion();
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "new version %s, deleting NVRAM settings", PROGVERSION);
|
ESP_LOGI(TAG, "new version %s, deleting NVRAM settings", PROGVERSION);
|
||||||
nvs_close(my_handle);
|
nvs_close(my_handle);
|
||||||
eraseConfig();
|
eraseConfig();
|
||||||
migrateVersion();
|
migrateVersion();
|
||||||
}
|
}
|
||||||
|
|
||||||
// populate pre set defaults with current values from NVRAM
|
// populate pre set defaults with current values from NVRAM
|
||||||
|
|
||||||
if (nvs_get_blob(my_handle, "bsecstate", NULL, &required_size) == ESP_OK) {
|
if (nvs_get_blob(my_handle, "bsecstate", NULL, &required_size) == ESP_OK) {
|
||||||
nvs_get_blob(my_handle, "bsecstate", cfg.bsecstate, &required_size);
|
nvs_get_blob(my_handle, "bsecstate", cfg.bsecstate, &required_size);
|
||||||
ESP_LOGI(TAG, "bsecstate = %d", cfg.bsecstate[BSEC_MAX_STATE_BLOB_SIZE]);
|
ESP_LOGI(TAG, "bsecstate = %d", cfg.bsecstate[BSEC_MAX_STATE_BLOB_SIZE]);
|
||||||
};
|
};
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "loradr", &flash8) == ESP_OK) {
|
if (nvs_get_i8(my_handle, "loradr", &flash8) == ESP_OK) {
|
||||||
cfg.loradr = flash8;
|
cfg.loradr = flash8;
|
||||||
ESP_LOGI(TAG, "loradr = %d", flash8);
|
ESP_LOGI(TAG, "loradr = %d", flash8);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "loradr set to default %d", cfg.loradr);
|
ESP_LOGI(TAG, "loradr set to default %d", cfg.loradr);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "txpower", &flash8) == ESP_OK) {
|
if (nvs_get_i8(my_handle, "txpower", &flash8) == ESP_OK) {
|
||||||
cfg.txpower = flash8;
|
cfg.txpower = flash8;
|
||||||
ESP_LOGI(TAG, "txpower = %d", flash8);
|
ESP_LOGI(TAG, "txpower = %d", flash8);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "txpower set to default %d", cfg.txpower);
|
ESP_LOGI(TAG, "txpower set to default %d", cfg.txpower);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "adrmode", &flash8) == ESP_OK) {
|
if (nvs_get_i8(my_handle, "adrmode", &flash8) == ESP_OK) {
|
||||||
cfg.adrmode = flash8;
|
cfg.adrmode = flash8;
|
||||||
ESP_LOGI(TAG, "adrmode = %d", flash8);
|
ESP_LOGI(TAG, "adrmode = %d", flash8);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "adrmode set to default %d", cfg.adrmode);
|
ESP_LOGI(TAG, "adrmode set to default %d", cfg.adrmode);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "screensaver", &flash8) == ESP_OK) {
|
if (nvs_get_i8(my_handle, "screensaver", &flash8) == ESP_OK) {
|
||||||
cfg.screensaver = flash8;
|
cfg.screensaver = flash8;
|
||||||
ESP_LOGI(TAG, "screensaver = %d", flash8);
|
ESP_LOGI(TAG, "screensaver = %d", flash8);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "screensaver set to default %d", cfg.screensaver);
|
ESP_LOGI(TAG, "screensaver set to default %d", cfg.screensaver);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "screenon", &flash8) == ESP_OK) {
|
if (nvs_get_i8(my_handle, "screenon", &flash8) == ESP_OK) {
|
||||||
cfg.screenon = flash8;
|
cfg.screenon = flash8;
|
||||||
ESP_LOGI(TAG, "screenon = %d", flash8);
|
ESP_LOGI(TAG, "screenon = %d", flash8);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "screenon set to default %d", cfg.screenon);
|
ESP_LOGI(TAG, "screenon set to default %d", cfg.screenon);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "countermode", &flash8) == ESP_OK) {
|
if (nvs_get_i8(my_handle, "countermode", &flash8) == ESP_OK) {
|
||||||
cfg.countermode = flash8;
|
cfg.countermode = flash8;
|
||||||
ESP_LOGI(TAG, "countermode = %d", flash8);
|
ESP_LOGI(TAG, "countermode = %d", flash8);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "countermode set to default %d", cfg.countermode);
|
ESP_LOGI(TAG, "countermode set to default %d", cfg.countermode);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "sendcycle", &flash8) == ESP_OK) {
|
if (nvs_get_i8(my_handle, "sendcycle", &flash8) == ESP_OK) {
|
||||||
cfg.sendcycle = flash8;
|
cfg.sendcycle = flash8;
|
||||||
ESP_LOGI(TAG, "sendcycle = %d", flash8);
|
ESP_LOGI(TAG, "sendcycle = %d", flash8);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "Payload send cycle set to default %d", cfg.sendcycle);
|
ESP_LOGI(TAG, "Payload send cycle set to default %d", cfg.sendcycle);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "wifichancycle", &flash8) == ESP_OK) {
|
if (nvs_get_i8(my_handle, "wifichancycle", &flash8) == ESP_OK) {
|
||||||
cfg.wifichancycle = flash8;
|
cfg.wifichancycle = flash8;
|
||||||
ESP_LOGI(TAG, "wifichancycle = %d", flash8);
|
ESP_LOGI(TAG, "wifichancycle = %d", flash8);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "WIFI channel cycle set to default %d", cfg.wifichancycle);
|
ESP_LOGI(TAG, "WIFI channel cycle set to default %d", cfg.wifichancycle);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "wifiant", &flash8) == ESP_OK) {
|
if (nvs_get_i8(my_handle, "wifiant", &flash8) == ESP_OK) {
|
||||||
cfg.wifiant = flash8;
|
cfg.wifiant = flash8;
|
||||||
ESP_LOGI(TAG, "wifiantenna = %d", flash8);
|
ESP_LOGI(TAG, "wifiantenna = %d", flash8);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "WIFI antenna switch set to default %d", cfg.wifiant);
|
ESP_LOGI(TAG, "WIFI antenna switch set to default %d", cfg.wifiant);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "vendorfilter", &flash8) == ESP_OK) {
|
if (nvs_get_i8(my_handle, "vendorfilter", &flash8) == ESP_OK) {
|
||||||
cfg.vendorfilter = flash8;
|
cfg.vendorfilter = flash8;
|
||||||
ESP_LOGI(TAG, "vendorfilter = %d", flash8);
|
ESP_LOGI(TAG, "vendorfilter = %d", flash8);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "Vendorfilter mode set to default %d", cfg.vendorfilter);
|
ESP_LOGI(TAG, "Vendorfilter mode set to default %d", cfg.vendorfilter);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "rgblum", &flash8) == ESP_OK) {
|
if (nvs_get_i8(my_handle, "rgblum", &flash8) == ESP_OK) {
|
||||||
cfg.rgblum = flash8;
|
cfg.rgblum = flash8;
|
||||||
ESP_LOGI(TAG, "rgbluminosity = %d", flash8);
|
ESP_LOGI(TAG, "rgbluminosity = %d", flash8);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "RGB luminosity set to default %d", cfg.rgblum);
|
ESP_LOGI(TAG, "RGB luminosity set to default %d", cfg.rgblum);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "blescantime", &flash8) == ESP_OK) {
|
if (nvs_get_i8(my_handle, "blescantime", &flash8) == ESP_OK) {
|
||||||
cfg.blescantime = flash8;
|
cfg.blescantime = flash8;
|
||||||
ESP_LOGI(TAG, "blescantime = %d", flash8);
|
ESP_LOGI(TAG, "blescantime = %d", flash8);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "BLEscantime set to default %d", cfg.blescantime);
|
ESP_LOGI(TAG, "BLEscantime set to default %d", cfg.blescantime);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "blescanmode", &flash8) == ESP_OK) {
|
if (nvs_get_i8(my_handle, "blescanmode", &flash8) == ESP_OK) {
|
||||||
cfg.blescan = flash8;
|
cfg.blescan = flash8;
|
||||||
ESP_LOGI(TAG, "BLEscanmode = %d", flash8);
|
ESP_LOGI(TAG, "BLEscanmode = %d", flash8);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "BLEscanmode set to default %d", cfg.blescan);
|
ESP_LOGI(TAG, "BLEscanmode set to default %d", cfg.blescan);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "wifiscanmode", &flash8) == ESP_OK) {
|
if (nvs_get_i8(my_handle, "wifiscanmode", &flash8) == ESP_OK) {
|
||||||
cfg.wifiscan = flash8;
|
cfg.wifiscan = flash8;
|
||||||
ESP_LOGI(TAG, "WIFIscanmode = %d", flash8);
|
ESP_LOGI(TAG, "WIFIscanmode = %d", flash8);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "WIFIscanmode set to default %d", cfg.wifiscan);
|
ESP_LOGI(TAG, "WIFIscanmode set to default %d", cfg.wifiscan);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nvs_get_i16(my_handle, "rssilimit", &flash16) == ESP_OK) {
|
if (nvs_get_i16(my_handle, "rssilimit", &flash16) == ESP_OK) {
|
||||||
cfg.rssilimit = flash16;
|
cfg.rssilimit = flash16;
|
||||||
ESP_LOGI(TAG, "rssilimit = %d", flash16);
|
ESP_LOGI(TAG, "rssilimit = %d", flash16);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "rssilimit set to default %d", cfg.rssilimit);
|
ESP_LOGI(TAG, "rssilimit set to default %d", cfg.rssilimit);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "payloadmask", &flash8) == ESP_OK) {
|
if (nvs_get_i8(my_handle, "payloadmask", &flash8) == ESP_OK) {
|
||||||
cfg.payloadmask = flash8;
|
cfg.payloadmask = flash8;
|
||||||
ESP_LOGI(TAG, "payloadmask = %hhu", flash8);
|
ESP_LOGI(TAG, "payloadmask = %hhu", flash8);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "payloadmask set to default %hhu", cfg.payloadmask);
|
ESP_LOGI(TAG, "payloadmask set to default %hhu", cfg.payloadmask);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nvs_get_i8(my_handle, "monitormode", &flash8) == ESP_OK) {
|
if (nvs_get_i8(my_handle, "monitormode", &flash8) == ESP_OK) {
|
||||||
cfg.monitormode = flash8;
|
cfg.monitormode = flash8;
|
||||||
ESP_LOGI(TAG, "Monitor mode = %d", flash8);
|
ESP_LOGI(TAG, "Monitor mode = %d", flash8);
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGI(TAG, "Monitor mode set to default %d", cfg.monitormode);
|
ESP_LOGI(TAG, "Monitor mode set to default %d", cfg.monitormode);
|
||||||
saveConfig();
|
saveConfig();
|
||||||
}
|
}
|
||||||
|
|
||||||
nvs_close(my_handle);
|
nvs_close(my_handle);
|
||||||
ESP_LOGI(TAG, "Done");
|
ESP_LOGI(TAG, "Done");
|
||||||
}
|
}
|
||||||
} // loadConfig()
|
} // loadConfig()
|
||||||
|
@ -47,6 +47,7 @@
|
|||||||
#define MEM_LOW 2048 // [Bytes] low memory threshold triggering a send cycle
|
#define MEM_LOW 2048 // [Bytes] low memory threshold triggering a send cycle
|
||||||
#define RETRANSMIT_RCMD 5 // [seconds] wait time before retransmitting rcommand results
|
#define RETRANSMIT_RCMD 5 // [seconds] wait time before retransmitting rcommand results
|
||||||
#define PAYLOAD_BUFFER_SIZE 51 // maximum size of payload block per transmit
|
#define PAYLOAD_BUFFER_SIZE 51 // maximum size of payload block per transmit
|
||||||
|
#define PAYLOAD_OPENSENSEBOX 0 // send payload compatible to sensebox.de (swap geo position and pax data)
|
||||||
#define LORADRDEFAULT 5 // 0 .. 15, LoRaWAN datarate, according to regional LoRaWAN specs [default = 5]
|
#define LORADRDEFAULT 5 // 0 .. 15, LoRaWAN datarate, according to regional LoRaWAN specs [default = 5]
|
||||||
#define LORATXPOWDEFAULT 14 // 0 .. 255, LoRaWAN TX power in dBm [default = 14]
|
#define LORATXPOWDEFAULT 14 // 0 .. 255, LoRaWAN TX power in dBm [default = 14]
|
||||||
#define MAXLORARETRY 500 // maximum count of TX retries if LoRa busy
|
#define MAXLORARETRY 500 // maximum count of TX retries if LoRa busy
|
||||||
@ -92,7 +93,7 @@
|
|||||||
#define RCMDPORT 2 // remote commands
|
#define RCMDPORT 2 // remote commands
|
||||||
#define STATUSPORT 2 // remote command results
|
#define STATUSPORT 2 // remote command results
|
||||||
#define CONFIGPORT 3 // config query results
|
#define CONFIGPORT 3 // config query results
|
||||||
#define GPSPORT 4 // gps - set to 1 to send combined GPS+COUNT payload
|
#define GPSPORT 4 // gps - set to 1 to send combined GPS+COUNTERPORT payload
|
||||||
#define BUTTONPORT 5 // button pressed signal
|
#define BUTTONPORT 5 // button pressed signal
|
||||||
#define BEACONPORT 6 // beacon alarms
|
#define BEACONPORT 6 // beacon alarms
|
||||||
#define BMEPORT 7 // BME680 sensor
|
#define BMEPORT 7 // BME680 sensor
|
||||||
|
@ -89,12 +89,14 @@ void PayloadConvert::addGPS(gpsStatus_t value) {
|
|||||||
buffer[cursor++] = (byte)((value.longitude & 0x00FF0000) >> 16);
|
buffer[cursor++] = (byte)((value.longitude & 0x00FF0000) >> 16);
|
||||||
buffer[cursor++] = (byte)((value.longitude & 0x0000FF00) >> 8);
|
buffer[cursor++] = (byte)((value.longitude & 0x0000FF00) >> 8);
|
||||||
buffer[cursor++] = (byte)((value.longitude & 0x000000FF));
|
buffer[cursor++] = (byte)((value.longitude & 0x000000FF));
|
||||||
|
#if (!PAYLOAD_OPENSENSEBOX)
|
||||||
buffer[cursor++] = value.satellites;
|
buffer[cursor++] = value.satellites;
|
||||||
buffer[cursor++] = highByte(value.hdop);
|
buffer[cursor++] = highByte(value.hdop);
|
||||||
buffer[cursor++] = lowByte(value.hdop);
|
buffer[cursor++] = lowByte(value.hdop);
|
||||||
buffer[cursor++] = highByte(value.altitude);
|
buffer[cursor++] = highByte(value.altitude);
|
||||||
buffer[cursor++] = lowByte(value.altitude);
|
buffer[cursor++] = lowByte(value.altitude);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void PayloadConvert::addSensor(uint8_t buf[]) {
|
void PayloadConvert::addSensor(uint8_t buf[]) {
|
||||||
@ -193,10 +195,12 @@ void PayloadConvert::addStatus(uint16_t voltage, uint64_t uptime, float cputemp,
|
|||||||
void PayloadConvert::addGPS(gpsStatus_t value) {
|
void PayloadConvert::addGPS(gpsStatus_t value) {
|
||||||
#if(HAS_GPS)
|
#if(HAS_GPS)
|
||||||
writeLatLng(value.latitude, value.longitude);
|
writeLatLng(value.latitude, value.longitude);
|
||||||
|
#if (!PAYLOAD_OPENSENSEBOX)
|
||||||
writeUint8(value.satellites);
|
writeUint8(value.satellites);
|
||||||
writeUint16(value.hdop);
|
writeUint16(value.hdop);
|
||||||
writeUint16(value.altitude);
|
writeUint16(value.altitude);
|
||||||
#endif
|
#endif
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void PayloadConvert::addSensor(uint8_t buf[]) {
|
void PayloadConvert::addSensor(uint8_t buf[]) {
|
||||||
|
@ -58,6 +58,7 @@ void sendData() {
|
|||||||
|
|
||||||
uint8_t bitmask = cfg.payloadmask;
|
uint8_t bitmask = cfg.payloadmask;
|
||||||
uint8_t mask = 1;
|
uint8_t mask = 1;
|
||||||
|
gpsStatus_t gps_status;
|
||||||
|
|
||||||
while (bitmask) {
|
while (bitmask) {
|
||||||
switch (bitmask & mask) {
|
switch (bitmask & mask) {
|
||||||
@ -65,21 +66,28 @@ void sendData() {
|
|||||||
#if ((WIFICOUNTER) || (BLECOUNTER))
|
#if ((WIFICOUNTER) || (BLECOUNTER))
|
||||||
case COUNT_DATA:
|
case COUNT_DATA:
|
||||||
payload.reset();
|
payload.reset();
|
||||||
|
#if !(PAYLOAD_OPENSENSEBOX)
|
||||||
|
if (cfg.wifiscan)
|
||||||
|
payload.addCount(macs_wifi, MAC_SNIFF_WIFI);
|
||||||
|
if (cfg.blescan)
|
||||||
|
payload.addCount(macs_ble, MAC_SNIFF_BLE);
|
||||||
|
#endif
|
||||||
|
#if (HAS_GPS)
|
||||||
|
if (GPSPORT == COUNTERPORT) {
|
||||||
|
// send GPS position only if we have a fix
|
||||||
|
if (gps.location.isValid()) {
|
||||||
|
gps_storelocation(&gps_status);
|
||||||
|
payload.addGPS(gps_status);
|
||||||
|
} else
|
||||||
|
ESP_LOGD(TAG, "No valid GPS position");
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
#if (PAYLOAD_OPENSENSEBOX)
|
||||||
if (cfg.wifiscan)
|
if (cfg.wifiscan)
|
||||||
payload.addCount(macs_wifi, MAC_SNIFF_WIFI);
|
payload.addCount(macs_wifi, MAC_SNIFF_WIFI);
|
||||||
if (cfg.blescan)
|
if (cfg.blescan)
|
||||||
payload.addCount(macs_ble, MAC_SNIFF_BLE);
|
payload.addCount(macs_ble, MAC_SNIFF_BLE);
|
||||||
|
|
||||||
#if (HAS_GPS) && (GPSPORT == 1)
|
|
||||||
// send GPS position only if we have a fix
|
|
||||||
if (gps.location.isValid()) {
|
|
||||||
gpsStatus_t gps_status;
|
|
||||||
gps_storelocation(&gps_status);
|
|
||||||
payload.addGPS(gps_status);
|
|
||||||
} else
|
|
||||||
ESP_LOGD(TAG, "No valid GPS position");
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
SendPayload(COUNTERPORT, prio_normal);
|
SendPayload(COUNTERPORT, prio_normal);
|
||||||
// clear counter if not in cumulative counter mode
|
// clear counter if not in cumulative counter mode
|
||||||
if (cfg.countermode != 1) {
|
if (cfg.countermode != 1) {
|
||||||
@ -102,17 +110,18 @@ void sendData() {
|
|||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if (HAS_GPS) && (GPSPORT != 1)
|
#if (HAS_GPS)
|
||||||
case GPS_DATA:
|
case GPS_DATA:
|
||||||
// send GPS position only if we have a fix
|
if (GPSPORT != COUNTERPORT) {
|
||||||
if (gps.location.isValid()) {
|
// send GPS position only if we have a fix
|
||||||
gpsStatus_t gps_status;
|
if (gps.location.isValid()) {
|
||||||
gps_storelocation(&gps_status);
|
gps_storelocation(&gps_status);
|
||||||
payload.reset();
|
payload.reset();
|
||||||
payload.addGPS(gps_status);
|
payload.addGPS(gps_status);
|
||||||
SendPayload(GPSPORT, prio_high);
|
SendPayload(GPSPORT, prio_high);
|
||||||
} else
|
} else
|
||||||
ESP_LOGD(TAG, "No valid GPS position");
|
ESP_LOGD(TAG, "No valid GPS position");
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user