Skip to content

Commit

Permalink
Show alternative images for states "Initialization" and "Take Image" (#…
Browse files Browse the repository at this point in the history
…1858)

* Show image for flow not started + take image

* Update

* Adding new images

* .

* Avoid multiple Access-Control-Allow-Origin * (#1859)

* Avoid multiple Access-Control-Allow-Origin *

* Adapt loglevel to debug

* Update build.yaml

* .

* New state "initialization (delayed)", renaming

* Overview: Renamed "Status" + switched position

* Improve data logging on errors (#1839)

* use error level for log if "Rate to High" or "Negative Rate"

* remove redundant data logging

* .

* .

* update time also in case of an error

* move calculation of difference to the top as discussed in PR 1839

Co-authored-by: CaCO3 <caco@ruinelli.ch>

* Heap tracing (#1861)

* Update sdkconfig.esp32cam-dev-task-analysis.defaults

* Update defines.h

* Update platformio.ini

* Update main.cpp

* Update defines.h

* Update ClassFlowCNNGeneral.cpp

* Update platformio.ini

* disable HIMEM (external > 4mb ram) not used (#1864)

#force disable HIMEM as not used in default config, can be enabled with [env:esp32cam-dev-himem]
#free 256kb of internal memory :
#I (2112) esp_himem: Initialized. Using last 8 32KB address blocks for bank switching on 4352 KB of physical memory.
CONFIG_SPIRAM_BANKSWITCH_ENABLE=n
#CONFIG_SPIRAM_BANKSWITCH_RESERVE is not set

* Update ota_page.html (#1866)

Fixed the firework to match the actual button text.
Fixed other random typos.

* add AlignmentAlgo=off option (#1867)

* Replace outdated wiki links, wording (#1871)

* Revert "add AlignmentAlgo=off option (#1867)" (#1876)

This reverts commit 3de4cc7.

* fixed typo (#1881)

Co-authored-by: CaCO3 <caco@ruinelli.ch>

* Show WIFI signal text labels / Log RSSI value to logfile (#1877)

* Overview: WIFI RSSI strength text labels

* Log RSSI value (debug level)

* Typo

* Update config.ini (#1880)

* Update Changelog.md for  release (#1892)

Co-authored-by: github-actions <github-actions@github.com>

* Update Changelog.md

* Remove newline in version (#1891)

* remove newline in version

* .

* .

Co-authored-by: CaCO3 <caco@ruinelli.ch>

Co-authored-by: CaCO3 <caco@ruinelli.ch>
Co-authored-by: CaCO3 <caco3@ruinelli.ch>
Co-authored-by: Nicolas Liaudat <nliaudat@users.noreply.github.com>
Co-authored-by: AngryApostrophe <89547888+AngryApostrophe@users.noreply.github.com>
Co-authored-by: github-actions <github-actions@github.com>
  • Loading branch information
6 people committed Jan 22, 2023
1 parent 457a526 commit 5dc7bb9
Show file tree
Hide file tree
Showing 12 changed files with 135 additions and 53 deletions.
8 changes: 0 additions & 8 deletions code/components/jomjol_controlcamera/ClassControllCamera.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -242,10 +242,6 @@ esp_err_t CCamera::CaptureToBasisImage(CImageBasis *_Image, int delay)

_Image->EmptyImage(); //Delete previous stored raw image -> black image

#ifdef ALGROI_LOAD_FROM_MEM_AS_JPG__SHOW_TAKE_IMAGE_PROCESS
tfliteflow.SetNewAlgROI(false);
#endif

LEDOnOff(true);

if (delay > 0)
Expand Down Expand Up @@ -321,10 +317,6 @@ esp_err_t CCamera::CaptureToBasisImage(CImageBasis *_Image, int delay)
p_target[2] = p_source[2];
}

#ifdef DEBUG_DETAIL_ON
LogFile.WriteHeapInfo("CCamera::CaptureToBasisImage - After Copy To Target");
#endif

delete _zwImage;

#ifdef DEBUG_DETAIL_ON
Expand Down
2 changes: 0 additions & 2 deletions code/components/jomjol_flowcontroll/ClassFlowAlignment.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -173,14 +173,12 @@ bool ClassFlowAlignment::doFlow(string time)
{
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "Can't allocate AlgROI");
LogFile.WriteHeapInfo("ClassFlowAlignment-doFlow");
tfliteflow.SetNewAlgROI(false); // continue flow only with alg.jpg (no ROIs available)
}
}

if (AlgROI)
{
ImageBasis->writeToMemoryAsJPG((ImageData*)AlgROI, 90);
tfliteflow.SetNewAlgROI(true);
}
#endif

Expand Down
133 changes: 112 additions & 21 deletions code/components/jomjol_flowcontroll/ClassFlowControll.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -154,12 +154,6 @@ void ClassFlowControll::AnalogDrawROI(CImageBasis *_zw)
if (flowanalog)
flowanalog->DrawROI(_zw);
}


void ClassFlowControll::SetNewAlgROI(bool _value)
{
bNewAlgROI = _value;
}
#endif


Expand Down Expand Up @@ -195,7 +189,7 @@ void ClassFlowControll::SetInitialParameter(void)
flowpostprocessing = NULL;
disabled = false;
aktRunNr = 0;
aktstatus = "Booting ...";
aktstatus = "Flow task not yet created";
}


Expand Down Expand Up @@ -270,8 +264,12 @@ ClassFlow* ClassFlowControll::CreateClassFlow(std::string _type)

void ClassFlowControll::InitFlow(std::string config)
{
aktstatus = "Initialization";
//#ifdef ENABLE_MQTT
//MQTTPublish(mqttServer_getMainTopic() + "/" + "status", "Initialization", false); // Right now, not possible -> MQTT Service is going to be started later
//#endif //ENABLE_MQTT

string line;

flowpostprocessing = NULL;

ClassFlow* cfc;
Expand Down Expand Up @@ -318,6 +316,12 @@ std::string* ClassFlowControll::getActStatus()
}


void ClassFlowControll::setActStatus(std::string _aktstatus)
{
aktstatus = _aktstatus;
}


void ClassFlowControll::doFlowMakeImageOnly(string time)
{
std::string zw_time;
Expand Down Expand Up @@ -672,12 +676,6 @@ esp_err_t ClassFlowControll::GetJPGStream(std::string _fn, httpd_req_t *req)
esp_err_t result = ESP_FAIL;
bool _sendDelete = false;

if (flowalignment == NULL)
{
ESP_LOGD(TAG, "ClassFloDControll::GetJPGStream: FloDalignment is not (yet) initialized. Interrupt serving!");
return ESP_OK;
}

if (_fn == "alg.jpg") {
if (flowalignment && flowalignment->ImageBasis->ImageOkay()) {
_send = flowalignment->ImageBasis;
Expand All @@ -689,26 +687,119 @@ esp_err_t ClassFlowControll::GetJPGStream(std::string _fn, httpd_req_t *req)
}
else if (_fn == "alg_roi.jpg") {
#ifdef ALGROI_LOAD_FROM_MEM_AS_JPG // no CImageBasis needed to create alg_roi.jpg (ca. 790kB less RAM)
if (bNewAlgROI) {
if (aktstatus.find("Initialization (delayed)") != -1) {
FILE* file = fopen("/sdcard/html/Flowstate_initialization_delayed.jpg", "rb");

if (!file) {
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "File /sdcard/html/Flowstate_initialization_delayed.jpg not found");
return ESP_FAIL;
}

fseek(file, 0, SEEK_END);
long fileSize = ftell(file); /* how long is the file ? */
fseek(file, 0, SEEK_SET); /* reset */

unsigned char* fileBuffer = (unsigned char*) malloc(fileSize);

if (!fileBuffer) {
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "ClassFlowControll::GetJPGStream: Not enough memory to create fileBuffer: " + std::to_string(fileSize));
fclose(file);
return ESP_FAIL;
}

fread(fileBuffer, fileSize, 1, file);
fclose(file);

httpd_resp_set_type(req, "image/jpeg");
result = httpd_resp_send(req, (const char *)fileBuffer, fileSize);
delete fileBuffer;
}
else if (aktstatus.find("Initialization") != -1) {
FILE* file = fopen("/sdcard/html/Flowstate_initialization.jpg", "rb");

if (!file) {
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "File /sdcard/html/Flowstate_initialization.jpg not found");
return ESP_FAIL;
}

fseek(file, 0, SEEK_END);
long fileSize = ftell(file); /* how long is the file ? */
fseek(file, 0, SEEK_SET); /* reset */

unsigned char* fileBuffer = (unsigned char*) malloc(fileSize);

if (!fileBuffer) {
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "ClassFlowControll::GetJPGStream: Not enough memory to create fileBuffer: " + std::to_string(fileSize));
fclose(file);
return ESP_FAIL;
}

fread(fileBuffer, fileSize, 1, file);
fclose(file);

httpd_resp_set_type(req, "image/jpeg");
result = httpd_resp_send(req, (const char *)fileBuffer, fileSize);
delete fileBuffer;
}
else if (aktstatus.find("Take Image") != -1) {
if (flowalignment && flowalignment->AlgROI) {
FILE* file = fopen("/sdcard/html/Flowstate_take_image.jpg", "rb");

if (!file) {
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "File /sdcard/html/Flowstate_take_image.jpg not found");
return ESP_FAIL;
}

fseek(file, 0, SEEK_END);
flowalignment->AlgROI->size = ftell(file); /* how long is the file ? */
fseek(file, 0, SEEK_SET); /* reset */

if (flowalignment->AlgROI->size > MAX_JPG_SIZE) {
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "File /sdcard/html/Flowstate_take_image.jpg too large: " + std::to_string(flowalignment->AlgROI->size));
fclose(file);
return ESP_FAIL;
}

fread(flowalignment->AlgROI->data, flowalignment->AlgROI->size, 1, file);
fclose(file);

httpd_resp_set_type(req, "image/jpeg");
result = httpd_resp_send(req, (const char *)flowalignment->AlgROI->data, flowalignment->AlgROI->size);
}
else {
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "ClassFlowControll::GetJPGStream: alg_roi.jpg cannot be served");
return ESP_FAIL;
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "ClassFlowControll::GetJPGStream: alg_roi.jpg cannot be served -> alg.jpg is going to be served!");
if (flowalignment && flowalignment->ImageBasis->ImageOkay()) {
_send = flowalignment->ImageBasis;
}
else {
httpd_resp_send(req, NULL, 0);
return ESP_OK;
}
}
}
else {
if (flowalignment && flowalignment->ImageBasis->ImageOkay()) {
_send = flowalignment->ImageBasis;
if (flowalignment && flowalignment->AlgROI) {
httpd_resp_set_type(req, "image/jpeg");
result = httpd_resp_send(req, (const char *)flowalignment->AlgROI->data, flowalignment->AlgROI->size);
}
else {
httpd_resp_send(req, NULL, 0);
return ESP_OK;
LogFile.WriteToFile(ESP_LOG_ERROR, TAG, "ClassFlowControll::GetJPGStream: alg_roi.jpg cannot be served -> alg.jpg is going to be served!");
if (flowalignment && flowalignment->ImageBasis->ImageOkay()) {
_send = flowalignment->ImageBasis;
}
else {
httpd_resp_send(req, NULL, 0);
return ESP_OK;
}
}
}
#else
if (!flowalignment) {
ESP_LOGD(TAG, "ClassFloDControll::GetJPGStream: FlowAlignment is not (yet) initialized. Interrupt serving!");
httpd_resp_send(req, NULL, 0);
return ESP_FAIL;
}

_send = new CImageBasis(flowalignment->ImageBasis);

if (_send->ImageOkay()) {
Expand Down
7 changes: 1 addition & 6 deletions code/components/jomjol_flowcontroll/ClassFlowControll.h
Original file line number Diff line number Diff line change
Expand Up @@ -38,9 +38,6 @@ class ClassFlowControll :
void SetInitialParameter(void);
std::string aktstatus;
int aktRunNr;
#ifdef ALGROI_LOAD_FROM_MEM_AS_JPG
bool bNewAlgROI = false;
#endif

public:
void InitFlow(std::string config);
Expand All @@ -54,9 +51,6 @@ class ClassFlowControll :
bool ReadParameter(FILE* pfile, string& aktparamgraph);
string getJSON();
string getNumbersName();
#ifdef ALGROI_LOAD_FROM_MEM_AS_JPG
void SetNewAlgROI(bool _value);
#endif

string TranslateAktstatus(std::string _input);

Expand All @@ -77,6 +71,7 @@ class ClassFlowControll :
bool isAutoStart(long &_intervall);

std::string* getActStatus();
void setActStatus(std::string _aktstatus);

std::vector<HTMLInfo*> GetAllDigital();
std::vector<HTMLInfo*> GetAllAnalog();
Expand Down
34 changes: 20 additions & 14 deletions code/components/jomjol_tfliteclass/server_tflite.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ ClassFlowControll tfliteflow;

TaskHandle_t xHandletask_autodoFlow = NULL;

bool FlowInitDone = false;
bool bTaskAutoFlowCreated = false;
bool flowisrunning = false;

long auto_intervall = 0;
Expand Down Expand Up @@ -104,7 +104,6 @@ void doInit(void)
ESP_LOGD(TAG, "Start tfliteflow.InitFlow(config);");
#endif
tfliteflow.InitFlow(CONFIG_FILE);
FlowInitDone = true;
#ifdef DEBUG_DETAIL_ON
ESP_LOGD(TAG, "Finished tfliteflow.InitFlow(config);");
#endif
Expand Down Expand Up @@ -265,7 +264,7 @@ esp_err_t handler_json(httpd_req_t *req)

ESP_LOGD(TAG, "handler_JSON uri: %s", req->uri);

if (FlowInitDone)
if (bTaskAutoFlowCreated)
{
httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
httpd_resp_set_type(req, "application/json");
Expand Down Expand Up @@ -300,7 +299,7 @@ esp_err_t handler_wasserzaehler(httpd_req_t *req)
LogFile.WriteHeapInfo("handler water counter - Start");
#endif

if (FlowInitDone)
if (bTaskAutoFlowCreated)
{
bool _rawValue = false;
bool _noerror = false;
Expand Down Expand Up @@ -656,25 +655,25 @@ esp_err_t handler_statusflow(httpd_req_t *req)
LogFile.WriteHeapInfo("handler_prevalue - Start");
#endif

if (FlowInitDone)
{
const char* resp_str;
const char* resp_str;
httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");

if (bTaskAutoFlowCreated)
{
#ifdef DEBUG_DETAIL_ON
ESP_LOGD(TAG, "handler_prevalue: %s", req->uri);
#endif

string* zw = tfliteflow.getActStatus();
resp_str = zw->c_str();

httpd_resp_set_hdr(req, "Access-Control-Allow-Origin", "*");
httpd_resp_send(req, resp_str, HTTPD_RESP_USE_STRLEN);
}
else
{
httpd_resp_send_err(req, HTTPD_403_FORBIDDEN, "Flow not (yet) started: REST API /flowstatus not available!");
return ESP_ERR_NOT_FOUND;
}
resp_str = "Flow task not yet created";
httpd_resp_send(req, resp_str, HTTPD_RESP_USE_STRLEN);
}

#ifdef DEBUG_DETAIL_ON
LogFile.WriteHeapInfo("handler_prevalue - Done");
Expand Down Expand Up @@ -820,13 +819,18 @@ void task_autodoFlow(void *pvParameter)
{
int64_t fr_start, fr_delta_ms;

bTaskAutoFlowCreated = true;

if (!isPlannedReboot)
{
if (esp_reset_reason() == ESP_RST_PANIC) {
LogFile.WriteToFile(ESP_LOG_WARN, TAG, "Restarted due to an Exception/panic! Postponing first round start by 5 minutes to allow for an OTA Update or to fetch the log!");
LogFile.WriteToFile(ESP_LOG_WARN, TAG, "Setting logfile level to DEBUG until the next reboot!");
LogFile.setLogLevel(ESP_LOG_DEBUG);
//MQTTPublish(GetMQTTMainTopic() + "/" + "status", "Postponing first round", false);
tfliteflow.setActStatus("Initialization (delayed)");
//#ifdef ENABLE_MQTT
//MQTTPublish(mqttServer_getMainTopic() + "/" + "status", "Initialization (delayed)", false); // Right now, not possible -> MQTT Service is going to be started later
//#endif //ENABLE_MQTT
vTaskDelay(60*5000 / portTICK_RATE_MS); // Wait 5 minutes to give time to do an OTA Update or fetch the log
}
}
Expand All @@ -836,12 +840,14 @@ void task_autodoFlow(void *pvParameter)
doInit();

auto_isrunning = tfliteflow.isAutoStart(auto_intervall);
if (isSetupModusActive()) {

if (isSetupModusActive())
{
auto_isrunning = false;
std::string zw_time = getCurrentTimeString(LOGFILE_TIME_FORMAT);
tfliteflow.doFlowMakeImageOnly(zw_time);

}

while (auto_isrunning)
{
LogFile.WriteToFile(ESP_LOG_DEBUG, TAG, "----------------------------------------------------------------"); // Clear separation between runs
Expand Down
Binary file added images/Flowstate_initialization.xcf
Binary file not shown.
Binary file added images/Flowstate_initialization_delayed.xcf
Binary file not shown.
Binary file added images/Flowstate_take_image.xcf
Binary file not shown.
Binary file added sd-card/html/Flowstate_initialization.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added sd-card/html/Flowstate_initialization_delayed.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added sd-card/html/Flowstate_take_image.jpg
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
4 changes: 2 additions & 2 deletions sd-card/html/overview.html
Original file line number Diff line number Diff line change
Expand Up @@ -55,8 +55,8 @@
</tr>
<tr>
<td class="tg-3">
<div id="timestamp" ></div>
<div id="statusflow" ></div>
<div id="timestamp" ></div>
<div id="cputemp" ></div>
<div id="rssi" ></div>
<div>
Expand Down Expand Up @@ -126,7 +126,7 @@
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var _rsp = xhttp.responseText;
$('#statusflow').html("Status: " + _rsp);
$('#statusflow').html("State: " + _rsp);
}
}
xhttp.open("GET", url, true);
Expand Down

0 comments on commit 5dc7bb9

Please sign in to comment.