Merge branch 'master' into rolling

This commit is contained in:
CaCO3
2022-11-25 16:49:34 +01:00
committed by GitHub
11 changed files with 204 additions and 135 deletions

View File

@@ -62,7 +62,6 @@ xxx @jomjol, TODO: are those URLS correct? The `update.zip` does not contain a `
- n.a. - n.a.
## [12.0.1](https://github.com/jomjol/AI-on-the-edge-device/releases/tag/v12.0.1), 2022-09-29 ## [12.0.1](https://github.com/jomjol/AI-on-the-edge-device/releases/tag/v12.0.1), 2022-09-29
Improve **u**ser e**x**perience Improve **u**ser e**x**perience

View File

@@ -11,8 +11,6 @@
____ ____
#### #33 Implement MATTER protocoll #### #33 Implement MATTER protocoll
* see [#1404](https://github.com/jomjol/AI-on-the-edge-device/issues/1404) * see [#1404](https://github.com/jomjol/AI-on-the-edge-device/issues/1404)
@@ -35,6 +33,9 @@ ____
accept the new value and calculate correctly the difference. accept the new value and calculate correctly the difference.
(see line 739 onwards in ClassFlowPostProcessing.cpp) (see line 739 onwards in ClassFlowPostProcessing.cpp)
#### ~~#29 Add favicon and use the hostname for the website~~- implemented v11.3.1
~~* https://github.com/jomjol/AI-on-the-edge-device/issues/927~~
#### #28 Improved error handling for ROIs #### #28 Improved error handling for ROIs
@@ -70,28 +71,53 @@ ____
#### ~~#22 Direct hint to the different neural network files in the other repositories~~- implemented >v11.3.1
~~* https://github.com/jomjol/AI-on-the-edge-device/issues/644~~
#### #21 Extended "CheckDigitalConsistency" Logik #### #21 Extended "CheckDigitalConsistency" Logik
* https://github.com/jomjol/AI-on-the-edge-device/issues/590 * https://github.com/jomjol/AI-on-the-edge-device/issues/590
#### #20 Deep sleep and push mode
* Let the device be normally in deep sleep state, and wake it up periodically to collect data and push it via MQTT or HTTP post.
* Support ESP-NOW to reduce the overhead of connecting to wifi and mqtt
* the above should enable battery powered applications
* An other way to set deep sleep would be to enable it in a specific period (at night).
#### #19 Extended log informations
* https://github.com/jomjol/AI-on-the-edge-device/issues/580
#### ~~#18 Document WLAN-strength in web page~~
* ~~https://github.com/jomjol/AI-on-the-edge-device/issues/563~~
#### ~~#17 Direct InfluxDB connection~~
* ~~Done in v10.6.0~~
#### #16 Serial Communication #### #16 Serial Communication
* https://github.com/jomjol/AI-on-the-edge-device/issues/512 * https://github.com/jomjol/AI-on-the-edge-device/issues/512
* Send the readout value via RX/TX interface with a dedicated TAG * Send the readout value via RX/TX interface with a dedicated TAG
* Make dedicated communication FlowModule * Make dedicated communication FlowModule
* Modification of RX/TX communication * Modification of RX/TX communication
* Configuration interfache * Configuration interfache
#### #15 Calibration for FishEye image #### #15 Calibration for FishEye image
* https://github.com/jomjol/AI-on-the-edge-device/issues/507 * https://github.com/jomjol/AI-on-the-edge-device/issues/507
@@ -104,6 +130,16 @@ ____
#### ~~#14 Backup and restore option for configuration~~- implemented v11.3.1
* ~~https://github.com/jomjol/AI-on-the-edge-device/issues/459~~
* ~~Implement a zip file compression for store and restore~~
* ~~Update the html to handle it~~
#### #13 Manage non linear gauge without CNN re-training #### #13 Manage non linear gauge without CNN re-training
* https://github.com/jomjol/AI-on-the-edge-device/issues/443 * https://github.com/jomjol/AI-on-the-edge-device/issues/443
@@ -112,6 +148,12 @@ ____
#### ~~#12 Less reboots due to memory leakage~~
* ~~Issue: #414 & #425 #430~~
#### #11 MQTT - configurable payload #### #11 MQTT - configurable payload
* https://github.com/jomjol/AI-on-the-edge-device/issues/344 * https://github.com/jomjol/AI-on-the-edge-device/issues/344
@@ -124,14 +166,18 @@ ____
#### #9 Basic auth for the UI
* https://github.com/jomjol/AI-on-the-edge-device/issues/283
* Implementation of an authentication mechanism.
#### #8 MQTT configurable readout intervall #### #8 MQTT configurable readout intervall
Make the readout intervall configurable via MQTT. Make the readout intervall configurable via MQTT.
* Change the mqtt part to receive and process input and not only sending * Change the mqtt part to receive and process input and not only sending
#### #7 Extended Error Handling #### #7 Extended Error Handling
Check different types of error (e.g. tflite not availabe) and generate an error on the html page. Check different types of error (e.g. tflite not availabe) and generate an error on the html page.
@@ -142,6 +188,14 @@ To do:
* Implement a checking algo * Implement a checking algo
* Extend the firmware and html page for the error handling * Extend the firmware and html page for the error handling
#### ~~#6 Check for double ROI names~~ - implemented v8.0.0
~~Check during configuration, that ROI names are unique.~~
~~To do:~~
* ~~Implementation of ROI name checking in html code before saving analog or digital ROIs~~
#### #5 Configurable decimal separator (point or comma) #### #5 Configurable decimal separator (point or comma)
@@ -156,112 +210,6 @@ To do:
#### #2 MQTT-controll with callback
* https://github.com/jomjol/AI-on-the-edge-device/issues/105
Extend the MQTT client to also enable callbacks for configuration setting
To do:
* implement callback for receiving information and override `config.ini` settings
* change configuration management to handle online updates (currently changes need a restart)
* think about the startup, as there the default config is loaded
____
# Refused
#### #9 Basic auth for the UI
* https://github.com/jomjol/AI-on-the-edge-device/issues/283
* Implementation of an authentication mechanism.
This will not be part of the free version
#### #20 Deep sleep and push mode
* Let the device be normally in deep sleep state, and wake it up periodically to collect data and push it via MQTT or HTTP post.
* Support ESP-NOW to reduce the overhead of connecting to wifi and mqtt
* the above should enable battery powered applications
* An other way to set deep sleep would be to enable it in a specific period (at night).
Technically not possible, as the limiting factor for the power consumption is not the esp32, but the electrical curcuit on the ESP32CAM board, which consumes a lot already in deep sleep mode.
# Closed
#### ~~#29 Add favicon and use the hostname for the website~~- implemented v11.3.1
#### ~~#19 Extended log informations~~
~~* https://github.com/jomjol/AI-on-the-edge-device/issues/580~~
#### ~~#29 Add favicon and use the hostname for the website~~- implemented v11.3.1
~~* https://github.com/jomjol/AI-on-the-edge-device/issues/927~~
#### ~~#22 Direct hint to the different neural network files in the other repositories~~- implemented >v11.3.1
~~* https://github.com/jomjol/AI-on-the-edge-device/issues/644~~
#### ~~#18 Document WLAN-strength in web page~~
* ~~https://github.com/jomjol/AI-on-the-edge-device/issues/563~~
#### ~~#17 Direct InfluxDB connection~~
* ~~Done in v10.6.0~~
#### ~~#14 Backup and restore option for configuration~~- implemented v11.3.1
* ~~https://github.com/jomjol/AI-on-the-edge-device/issues/459~~
* ~~Implement a zip file compression for store and restore~~
* ~~Update the html to handle it~~
#### ~~#12 Less reboots due to memory leakage~~
* ~~Issue: #414 & #425 #430~~
#### ~~#6 Check for double ROI names~~ - implemented v8.0.0
~~Check during configuration, that ROI names are unique.~~
~~To do:~~
* ~~Implementation of ROI name checking in html code before saving analog or digital ROIs~~
#### ~~#4 Initial Shifting and Rotation~~ - implemented v7.0.0 #### ~~#4 Initial Shifting and Rotation~~ - implemented v7.0.0
* ~~https://github.com/jomjol/AI-on-the-edge-device/issues/123~~ * ~~https://github.com/jomjol/AI-on-the-edge-device/issues/123~~
@@ -288,6 +236,27 @@ Technically not possible, as the limiting factor for the power consumption is no
____
#### #2 MQTT-controll with callback
* https://github.com/jomjol/AI-on-the-edge-device/issues/105
Extend the MQTT client to also enable callbacks for configuration setting
To do:
* implement callback for receiving information and override `config.ini` settings
* change configuration management to handle online updates (currently changes need a restart)
* think about the startup, as there the default config is loaded
____
#### ~~#1 Optional GPIO for external flash/lighting~~ - implemented (v8.0.0) #### ~~#1 Optional GPIO for external flash/lighting~~ - implemented (v8.0.0)
* ~~https://github.com/jomjol/AI-on-the-edge-device/issues/133~~ * ~~https://github.com/jomjol/AI-on-the-edge-device/issues/133~~
@@ -301,6 +270,3 @@ Technically not possible, as the limiting factor for the power consumption is no
* ~~Implementation of a software module for external light source (e.g. WS8132 LED controller, ...)~~ * ~~Implementation of a software module for external light source (e.g. WS8132 LED controller, ...)~~
* ~~Update of the camera module to use the external light instead of the internal flash light~~ * ~~Update of the camera module to use the external light instead of the internal flash light~~
* ~~Adopt the configuration algorithm with a configurable light source~~ * ~~Adopt the configuration algorithm with a configurable light source~~

View File

@@ -269,8 +269,7 @@ private:
std::unique_ptr< Rgb[] > _secondBuffer; std::unique_ptr< Rgb[] > _secondBuffer;
Rgb *_buffer; Rgb *_buffer;
SemaphoreHandle_t _finishedFlag; xSemaphoreHandle _finishedFlag;
// xSemaphoreHandle _finishedFlag;
int _pixelPosition; int _pixelPosition;
int _componentPosition; int _componentPosition;

View File

@@ -955,7 +955,7 @@ std::string unzip_new(std::string _in_zip_file, std::string _target_zip, std::st
zw = std::string(archive_filename); zw = std::string(archive_filename);
ESP_LOGD(TAG, "Rohfilename: %s", zw.c_str()); ESP_LOGD(TAG, "Rohfilename: %s", zw.c_str());
if (getFileType(zw) == "BIN") if (toUpper(zw) == "FIRMWARE.BIN")
{ {
zw = _target_bin + zw; zw = _target_bin + zw;
ret = zw; ret = zw;

View File

@@ -415,7 +415,7 @@ string ClassFlowControll::GetPrevalue(std::string _number)
std::string ClassFlowControll::UpdatePrevalue(std::string _newvalue, std::string _numbers, bool _extern) std::string ClassFlowControll::UpdatePrevalue(std::string _newvalue, std::string _numbers, bool _extern)
{ {
double zw; float zw;
char* p; char* p;
_newvalue = trim(_newvalue); _newvalue = trim(_newvalue);
@@ -427,7 +427,7 @@ std::string ClassFlowControll::UpdatePrevalue(std::string _newvalue, std::string
} }
else else
{ {
zw = strtod(_newvalue.c_str(), &p); zw = strtof(_newvalue.c_str(), &p);
if (zw == 0) if (zw == 0)
return "- Error in String to Value Conversion!!! Must be of format value=123.456"; return "- Error in String to Value Conversion!!! Must be of format value=123.456";
} }

View File

@@ -56,7 +56,6 @@ std::string ClassFlowPostProcessing::GetJSON(std::string _id, std::string _mac,
else else
json += " \"value\": \"\"," + _lineend; json += " \"value\": \"\"," + _lineend;
json += " \"raw\": \"" + NUMBERS[i]->ReturnRawValue + "\"," + _lineend; json += " \"raw\": \"" + NUMBERS[i]->ReturnRawValue + "\"," + _lineend;
json += " \"pre\": \"" + NUMBERS[i]->ReturnPreValue + "\"," + _lineend;
json += " \"error\": \"" + NUMBERS[i]->ErrorMessageText + "\"," + _lineend; json += " \"error\": \"" + NUMBERS[i]->ErrorMessageText + "\"," + _lineend;
if (NUMBERS[i]->ReturnRateValue.length() > 0) if (NUMBERS[i]->ReturnRateValue.length() > 0)
json += " \"rate\": " + NUMBERS[i]->ReturnRateValue + "," + _lineend; json += " \"rate\": " + NUMBERS[i]->ReturnRateValue + "," + _lineend;
@@ -103,7 +102,7 @@ void ClassFlowPostProcessing::SetPreValue(double zw, string _numbers, bool _exte
if (NUMBERS[j]->name == _numbers) if (NUMBERS[j]->name == _numbers)
{ {
NUMBERS[j]->PreValue = zw; NUMBERS[j]->PreValue = zw;
NUMBERS[j]->ReturnPreValue = RundeOutput(zw, NUMBERS[j]->Nachkomma); NUMBERS[j]->ReturnPreValue = std::to_string(zw);
NUMBERS[j]->PreValueOkay = true; NUMBERS[j]->PreValueOkay = true;
if (_extern) if (_extern)
{ {

View File

@@ -1,3 +1,2 @@
manifest_hash: 4e37bb0f9273c4de05f38688720fe32aa6e5b892452694a4f7a2ca1659f02cf6 manifest_hash: 45994dbfed009907994c31f6d279c5861a1eacbf219ce8b58e74e39b3393816a
target: esp32
version: 1.0.0 version: 1.0.0

View File

@@ -121,8 +121,6 @@ bool Init_NVS_SDCard()
void task_NoSDBlink(void *pvParameter) void task_NoSDBlink(void *pvParameter)
{ {
// esp_rom_gpio_pad_select_gpio(BLINK_GPIO);
gpio_pad_select_gpio(BLINK_GPIO); gpio_pad_select_gpio(BLINK_GPIO);
gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT); gpio_set_direction(BLINK_GPIO, GPIO_MODE_OUTPUT);

View File

@@ -13,12 +13,14 @@
src_dir = main src_dir = main
[env:esp32cam] [env:esp32cam]
;platform = espressif32@4.4.0 platform = espressif32@4.4.0
platform = espressif32@5.2.0 ;platform = espressif32@5.1.0
;platform = espressif32
board = esp32cam board = esp32cam
;board = m5stack-core-esp32 ;board = m5stack-core-esp32
framework = espidf framework = espidf
;board_build.partitions = partitions_singleapp.csv
board_build.partitions = partitions.csv board_build.partitions = partitions.csv
lib_deps = lib_deps =

View File

@@ -0,0 +1,107 @@
#include <unity.h>
#include <ClassFlowCNNGeneral.h>
class UnderTestCNN : public ClassFlowCNNGeneral {
public:
using ClassFlowCNNGeneral::ZeigerEvalAnalogNeu;
using ClassFlowCNNGeneral::ZeigerEvalHybridNeu;
using ClassFlowCNNGeneral::ClassFlowCNNGeneral;
};
/**
* @brief test if all combinations of digit
* evaluation are running correctly
*/
void test_ZeigerEval()
{
UnderTestCNN undertest = UnderTestCNN(nullptr, Digital100);
// the 5.2 is already above 5.0 and the previous digit too (3)
printf("Test 5.2, 3\n");
int result = undertest.ZeigerEvalAnalogNeu(5.2, 3);
TEST_ASSERT_EQUAL(5, result);
// the 5.2 is already above 5.0 and the previous digit not (9)
// so the current digit shoult be reduced (4.9)
printf("Test 5.2, 9\n");
TEST_ASSERT_EQUAL(4, undertest.ZeigerEvalAnalogNeu(5.2, 9));
printf("Test 4.4, 9\n");
// the 4.4 (digital100) is not above 5 and the previous digit (analog) too (9.3)
TEST_ASSERT_EQUAL(4, undertest.ZeigerEvalAnalogNeu(4.4, 9));
printf("Test 4.5, 0\n");
// the 4.5 (digital100) is not above 5 and the previous digit (analog) too (9.6)
TEST_ASSERT_EQUAL(4, undertest.ZeigerEvalAnalogNeu(4.5, 0));
}
/**
* @brief test if all combinations of digit
* evaluation are running correctly
*/
void test_ZeigerEvalHybrid() {
UnderTestCNN undertest = UnderTestCNN(nullptr, Digital100);
// the 5.2 and no previous should round down
printf("ZeigerEvalHybridNeu(5.2, 0, -1)\n");
TEST_ASSERT_EQUAL(5, undertest.ZeigerEvalHybridNeu(5.2, 0, -1));
// the 5.3 and no previous should trunc to 5
printf("ZeigerEvalHybridNeu(5.3, 0, -1)\n");
TEST_ASSERT_EQUAL(5, undertest.ZeigerEvalHybridNeu(5.3, 0, -1));
printf("ZeigerEvalHybridNeu(5.7, 0, -1)\n");
// the 5.7 and no previous should trunc to 5
TEST_ASSERT_EQUAL(6, undertest.ZeigerEvalHybridNeu(5.7, 0, -1));
// the 5.8 and no previous should round up to 6
printf("ZeigerEvalHybridNeu(5.8, 0, -1)\n");
TEST_ASSERT_EQUAL(6, undertest.ZeigerEvalHybridNeu(5.8, 0, -1));
// the 5.7 with previous and the previous between 0.3-0.5 should round up to 6
TEST_ASSERT_EQUAL(6, undertest.ZeigerEvalHybridNeu(5.7, 0.4, 1));
// the 5.3 with previous and the previous between 0.3-0.7 should round down to 5
TEST_ASSERT_EQUAL(5, undertest.ZeigerEvalHybridNeu(5.3, 0.7, 1));
// the 5.3 with previous and the previous <=0.5 should trunc to 5
TEST_ASSERT_EQUAL(5, undertest.ZeigerEvalHybridNeu(5.3, 0.1, 1));
// the 5.3 with previous and the previous >=9.5 should reduce to 4
TEST_ASSERT_EQUAL(4, undertest.ZeigerEvalHybridNeu(5.3, 9.6, 9));
// the 5.7 with previous and the previous >=9.5 should trunc to 5
TEST_ASSERT_EQUAL(5, undertest.ZeigerEvalHybridNeu(5.7, 9.6, 9));
// the 4.5 (digital100) is not above 5 and the previous digit (analog) not over Zero (9.6)
TEST_ASSERT_EQUAL(4, undertest.ZeigerEvalHybridNeu(4.5, 9.6, 0));
// the 4.5 (digital100) is not above 5 and the previous digit (analog) not over Zero (9.6)
TEST_ASSERT_EQUAL(4, undertest.ZeigerEvalHybridNeu(4.5, 9.6, 9));
// the 4.5 (digital100) is not above 5 and the previous digit (analog) not over Zero (9.5)
TEST_ASSERT_EQUAL(4, undertest.ZeigerEvalHybridNeu(4.5, 9.5, 9));
// 59.96889 - Pre: 58.94888
// 8.6 : 9.8 : 6.7
// the 4.4 (digital100) is not above 5 and the previous digit (analog) not over Zero (9.5)
TEST_ASSERT_EQUAL(8, undertest.ZeigerEvalHybridNeu(8.6, 9.8, 9));
// pre = 9.9 (0.0 raw)
// zahl = 1.8
TEST_ASSERT_EQUAL(2, undertest.ZeigerEvalHybridNeu(1.8, 9.0, 9));
// if a digit have an early transition and the pointer is < 9.0
// prev (pointer) = 6.2, but on digital readout = 6.0 (prev is int parameter)
// zahl = 4.6
TEST_ASSERT_EQUAL(4, undertest.ZeigerEvalHybridNeu(4.6, 6.0, 6));
// issue #879 vorgaenger is -1, zahl = 6.7
//TEST_ASSERT_EQUAL(7, undertest.ZeigerEvalHybrid(6.7, -1.0, -1));
}