Rolling 20220215

This commit is contained in:
jomjol
2022-02-15 21:26:38 +01:00
parent 1371be6f2c
commit 1f5486e8cc
16 changed files with 106 additions and 97 deletions

View File

@@ -11,6 +11,19 @@
____ ____
#### #24 Show Mqtt state directly in Webserver
* Show MQTT log in Web page. E.g. connection established or failed to connect...
#### #23 CPU Temp and Mqtt values
* Show the CPU Temp directly in Webpage. Also add the value to MQTT sending
#### #22 Direct hint to the different neural network files in the other repositories #### #22 Direct hint to the different neural network files in the other repositories
* https://github.com/jomjol/AI-on-the-edge-device/issues/644 * https://github.com/jomjol/AI-on-the-edge-device/issues/644

View File

@@ -54,6 +54,16 @@ In other cases you can contact the developer via email: <img src="https://raw.gi
##### Rolling (2022-02-15)
- Refactoring of check postprocessing consistency (e.g. max rate, negative rate, ...)
Rolling (2022-02-13)
- HTML: check select able values for consistency
##### 10.4.0 - Stability Increase (2022-02-12) ##### 10.4.0 - Stability Increase (2022-02-12)
- Graphical configuration: select available neural network files (*.tfl, *.tflite) from drop down menu - Graphical configuration: select available neural network files (*.tfl, *.tflite) from drop down menu

View File

@@ -327,7 +327,7 @@ string ClassFlowControll::getReadoutAll(int _type)
out = out + (*numbers)[i]->name + "\t"; out = out + (*numbers)[i]->name + "\t";
switch (_type) { switch (_type) {
case READOUT_TYPE_VALUE: case READOUT_TYPE_VALUE:
out = out + (*numbers)[i]->ReturnValueNoError; out = out + (*numbers)[i]->ReturnValue;
break; break;
case READOUT_TYPE_PREVALUE: case READOUT_TYPE_PREVALUE:
if (flowpostprocessing->PreValueUse) if (flowpostprocessing->PreValueUse)
@@ -643,8 +643,8 @@ string ClassFlowControll::getJSON()
{ {
json += "\"" + (*NUMBERS)[i]->name + "\":\n"; json += "\"" + (*NUMBERS)[i]->name + "\":\n";
json += " {\n"; json += " {\n";
if ((*NUMBERS)[i]->ReturnValueNoError.length() > 0) if ((*NUMBERS)[i]->ReturnValue.length() > 0)
json += " \"value\": " + (*NUMBERS)[i]->ReturnValueNoError + ",\n"; json += " \"value\": " + (*NUMBERS)[i]->ReturnValue + ",\n";
else else
json += " \"value\": \"\",\n"; json += " \"value\": \"\",\n";
json += " \"raw\": \"" + (*NUMBERS)[i]->ReturnRawValue + "\",\n"; json += " \"raw\": \"" + (*NUMBERS)[i]->ReturnRawValue + "\",\n";

View File

@@ -39,7 +39,7 @@ struct NumberPost {
string ReturnRawValue; // Rohwert (mit N & führenden 0) string ReturnRawValue; // Rohwert (mit N & führenden 0)
string ReturnValue; // korrigierter Rückgabewert, ggf. mit Fehlermeldung string ReturnValue; // korrigierter Rückgabewert, ggf. mit Fehlermeldung
string ReturnPreValue; // korrigierter Rückgabewert ohne Fehlermeldung string ReturnPreValue; // korrigierter Rückgabewert ohne Fehlermeldung
string ReturnValueNoError; // string ReturnValueNoError;
string ErrorMessageText; // Fehlermeldung bei Consistency Check string ErrorMessageText; // Fehlermeldung bei Consistency Check
int AnzahlAnalog; int AnzahlAnalog;
int AnzahlDigital; int AnzahlDigital;

View File

@@ -157,7 +157,7 @@ bool ClassFlowMQTT::doFlow(string zwtime)
sprintf(freeheapmem, "%zu", esp_get_free_heap_size()); sprintf(freeheapmem, "%zu", esp_get_free_heap_size());
MQTTPublish(zw, freeheapmem); MQTTPublish(zw, freeheapmem);
zw = maintopic + "/" + "Wifi RSSI"; zw = maintopic + "/" + "wifiRSSI";
char rssi[11]; char rssi[11];
sprintf(rssi, "%d", get_WIFI_RSSI()); sprintf(rssi, "%d", get_WIFI_RSSI());
MQTTPublish(zw, rssi); MQTTPublish(zw, rssi);
@@ -169,7 +169,7 @@ bool ClassFlowMQTT::doFlow(string zwtime)
for (int i = 0; i < (*NUMBERS).size(); ++i) for (int i = 0; i < (*NUMBERS).size(); ++i)
{ {
result = (*NUMBERS)[i]->ReturnValueNoError; result = (*NUMBERS)[i]->ReturnValue;
resultraw = (*NUMBERS)[i]->ReturnRawValue; resultraw = (*NUMBERS)[i]->ReturnRawValue;
resulterror = (*NUMBERS)[i]->ErrorMessageText; resulterror = (*NUMBERS)[i]->ErrorMessageText;
resultrate = (*NUMBERS)[i]->ReturnRateValue; resultrate = (*NUMBERS)[i]->ReturnRateValue;

View File

@@ -167,12 +167,10 @@ bool ClassFlowPostProcessing::LoadPreValue(void)
NUMBERS[0]->Value = NUMBERS[0]->PreValue; NUMBERS[0]->Value = NUMBERS[0]->PreValue;
NUMBERS[0]->ReturnValue = to_string(NUMBERS[0]->Value); NUMBERS[0]->ReturnValue = to_string(NUMBERS[0]->Value);
NUMBERS[0]->ReturnValueNoError = NUMBERS[0]->ReturnValue;
if (NUMBERS[0]->digit_roi || NUMBERS[0]->analog_roi) if (NUMBERS[0]->digit_roi || NUMBERS[0]->analog_roi)
{ {
NUMBERS[0]->ReturnValue = RundeOutput(NUMBERS[0]->Value, NUMBERS[0]->Nachkomma); NUMBERS[0]->ReturnValue = RundeOutput(NUMBERS[0]->Value, NUMBERS[0]->Nachkomma);
NUMBERS[0]->ReturnValueNoError = NUMBERS[0]->ReturnValue;
} }
UpdatePreValueINI = true; // Konvertierung ins neue Format UpdatePreValueINI = true; // Konvertierung ins neue Format
@@ -507,7 +505,7 @@ void ClassFlowPostProcessing::InitNUMBERS()
_number->ReturnRawValue = ""; // Rohwert (mit N & führenden 0) _number->ReturnRawValue = ""; // Rohwert (mit N & führenden 0)
_number->ReturnValue = ""; // korrigierter Rückgabewert, ggf. mit Fehlermeldung _number->ReturnValue = ""; // korrigierter Rückgabewert, ggf. mit Fehlermeldung
_number->ReturnValueNoError = ""; // korrigierter Rückgabewert ohne Fehlermeldung // _number->ReturnValueNoError = ""; // korrigierter Rückgabewert ohne Fehlermeldung
_number->ErrorMessageText = ""; // Fehlermeldung bei Consistency Check _number->ErrorMessageText = ""; // Fehlermeldung bei Consistency Check
_number->ReturnPreValue = ""; _number->ReturnPreValue = "";
_number->PreValueOkay = false; _number->PreValueOkay = false;
@@ -526,7 +524,7 @@ void ClassFlowPostProcessing::InitNUMBERS()
_number->Value = 0; // letzer ausgelesener Wert, inkl. Korrekturen _number->Value = 0; // letzer ausgelesener Wert, inkl. Korrekturen
_number->ReturnRawValue = ""; // Rohwert (mit N & führenden 0) _number->ReturnRawValue = ""; // Rohwert (mit N & führenden 0)
_number->ReturnValue = ""; // korrigierter Rückgabewert, ggf. mit Fehlermeldung _number->ReturnValue = ""; // korrigierter Rückgabewert, ggf. mit Fehlermeldung
_number->ReturnValueNoError = ""; // korrigierter Rückgabewert ohne Fehlermeldung // _number->ReturnValueNoError = ""; // korrigierter Rückgabewert ohne Fehlermeldung
_number->ErrorMessageText = ""; // Fehlermeldung bei Consistency Check _number->ErrorMessageText = ""; // Fehlermeldung bei Consistency Check
_number->Nachkomma = _number->AnzahlAnalog; _number->Nachkomma = _number->AnzahlAnalog;
@@ -607,7 +605,9 @@ bool ClassFlowPostProcessing::doFlow(string zwtime)
for (int j = 0; j < NUMBERS.size(); ++j) for (int j = 0; j < NUMBERS.size(); ++j)
{ {
NUMBERS[j]->ReturnRawValue = ""; NUMBERS[j]->ReturnRawValue = "";
NUMBERS[j]->ReturnValue = "";
NUMBERS[j]->ErrorMessageText = ""; NUMBERS[j]->ErrorMessageText = "";
NUMBERS[j]->Value = -1;
UpdateNachkommaDecimalShift(); UpdateNachkommaDecimalShift();
@@ -626,107 +626,72 @@ bool ClassFlowPostProcessing::doFlow(string zwtime)
NUMBERS[j]->ReturnRawValue = ShiftDecimal(NUMBERS[j]->ReturnRawValue, NUMBERS[j]->DecimalShift); NUMBERS[j]->ReturnRawValue = ShiftDecimal(NUMBERS[j]->ReturnRawValue, NUMBERS[j]->DecimalShift);
printf("RetunrRawValue %s", NUMBERS[j]->ReturnRawValue.c_str());
if (IgnoreLeadingNaN) if (IgnoreLeadingNaN)
{
while ((NUMBERS[j]->ReturnRawValue.length() > 1) && (NUMBERS[j]->ReturnRawValue[0] == 'N')) while ((NUMBERS[j]->ReturnRawValue.length() > 1) && (NUMBERS[j]->ReturnRawValue[0] == 'N'))
{
NUMBERS[j]->ReturnRawValue.erase(0, 1); NUMBERS[j]->ReturnRawValue.erase(0, 1);
}
}
rohwert = NUMBERS[j]->ReturnRawValue; NUMBERS[j]->ReturnValue = NUMBERS[j]->ReturnRawValue;
if (!PreValueUse || !NUMBERS[j]->PreValueOkay) if (findDelimiterPos(NUMBERS[j]->ReturnValue, "N") != std::string::npos)
{ {
NUMBERS[j]->ReturnValue = NUMBERS[j]->ReturnRawValue; if (PreValueUse && NUMBERS[j]->PreValueOkay)
NUMBERS[j]->ReturnValueNoError = NUMBERS[j]->ReturnRawValue; NUMBERS[j]->ReturnValue = ErsetzteN(NUMBERS[j]->ReturnValue, NUMBERS[j]->PreValue);
if ((findDelimiterPos(NUMBERS[j]->ReturnValue, "N") == std::string::npos) && (NUMBERS[j]->ReturnValue.length() > 0))
{
while ((NUMBERS[j]->ReturnValue.length() > 1) && (NUMBERS[j]->ReturnValue[0] == '0'))
{
NUMBERS[j]->ReturnValue.erase(0, 1);
}
NUMBERS[j]->Value = std::stof(NUMBERS[j]->ReturnValue);
NUMBERS[j]->ReturnValueNoError = NUMBERS[j]->ReturnValue;
NUMBERS[j]->PreValueOkay = true;
NUMBERS[j]->PreValue = NUMBERS[j]->Value;
NUMBERS[j]->ReturnPreValue = RundeOutput(NUMBERS[j]->PreValue, NUMBERS[j]->Nachkomma);
NUMBERS[j]->lastvalue = flowMakeImage->getTimeImageTaken();
zwtime = ConvertTimeToString(NUMBERS[j]->lastvalue, PREVALUE_TIME_FORMAT_OUTPUT);
UpdatePreValueINI = true;
SavePreValue();
}
else else
{ continue; // es gibt keinen Zahl, da noch ein N vorhanden ist.
NUMBERS[j]->ReturnValue = "";
NUMBERS[j]->ReturnValueNoError = "";
}
} }
else
// Lösche führende Nullen (außer es ist nur noch einen 0)
while ((NUMBERS[j]->ReturnValue.length() > 1) && (NUMBERS[j]->ReturnValue[0] == '0'))
NUMBERS[j]->ReturnValue.erase(0, 1);
NUMBERS[j]->Value = std::stof(NUMBERS[j]->ReturnValue);
if (NUMBERS[j]->checkDigitIncreaseConsistency)
NUMBERS[j]->Value = checkDigitConsistency(NUMBERS[j]->Value, NUMBERS[j]->DecimalShift, NUMBERS[j]->analog_roi != NULL, NUMBERS[j]->PreValue);
if (!NUMBERS[j]->AllowNegativeRates)
{ {
zw = ErsetzteN(NUMBERS[j]->ReturnRawValue, NUMBERS[j]->PreValue); if (NUMBERS[j]->Value < NUMBERS[j]->PreValue)
NUMBERS[j]->Value = std::stof(zw);
if (NUMBERS[j]->checkDigitIncreaseConsistency)
{
NUMBERS[j]->Value = checkDigitConsistency(NUMBERS[j]->Value, NUMBERS[j]->DecimalShift, NUMBERS[j]->analog_roi != NULL, NUMBERS[j]->PreValue);
}
zwvalue = RundeOutput(NUMBERS[j]->Value, NUMBERS[j]->Nachkomma);
if ((!NUMBERS[j]->AllowNegativeRates) && (NUMBERS[j]->Value < NUMBERS[j]->PreValue))
{ {
NUMBERS[j]->ErrorMessageText = NUMBERS[j]->ErrorMessageText + "Neg. Rate - Read: " + zwvalue + " - Raw: " + NUMBERS[j]->ReturnRawValue + " - Pre: " + RundeOutput(NUMBERS[j]->PreValue, NUMBERS[j]->Nachkomma) + " "; NUMBERS[j]->ErrorMessageText = NUMBERS[j]->ErrorMessageText + "Neg. Rate - Read: " + zwvalue + " - Raw: " + NUMBERS[j]->ReturnRawValue + " - Pre: " + RundeOutput(NUMBERS[j]->PreValue, NUMBERS[j]->Nachkomma) + " ";
NUMBERS[j]->Value = NUMBERS[j]->PreValue; NUMBERS[j]->Value = NUMBERS[j]->PreValue;
zwvalue = RundeOutput(NUMBERS[j]->Value, NUMBERS[j]->Nachkomma); NUMBERS[j]->ReturnValue = "";
continue;
} }
}
double difference = difftime(imagetime, NUMBERS[j]->lastvalue); // in Sekunden double difference = difftime(imagetime, NUMBERS[j]->lastvalue); // in Sekunden
difference /= 60; difference /= 60;
NUMBERS[j]->FlowRateAct = (NUMBERS[j]->Value - NUMBERS[j]->PreValue) / difference; NUMBERS[j]->FlowRateAct = (NUMBERS[j]->Value - NUMBERS[j]->PreValue) / difference;
NUMBERS[j]->ReturnRateValue = std::to_string(NUMBERS[j]->FlowRateAct);
if (NUMBERS[j]->useMaxRateValue)
{
float _ratedifference; float _ratedifference;
if (NUMBERS[j]->RateType == RateChange) if (NUMBERS[j]->RateType == RateChange)
_ratedifference = (NUMBERS[j]->Value - NUMBERS[j]->PreValue) / difference; _ratedifference = NUMBERS[j]->FlowRateAct;
else else
_ratedifference = (NUMBERS[j]->Value - NUMBERS[j]->PreValue); _ratedifference = (NUMBERS[j]->Value - NUMBERS[j]->PreValue);
if (NUMBERS[j]->useMaxRateValue && (abs(_ratedifference) > NUMBERS[j]->MaxRateValue)) if (abs(_ratedifference) > NUMBERS[j]->MaxRateValue)
{ {
NUMBERS[j]->ErrorMessageText = NUMBERS[j]->ErrorMessageText + "Rate too high - Read: " + RundeOutput(NUMBERS[j]->Value, NUMBERS[j]->Nachkomma) + " - Pre: " + RundeOutput(NUMBERS[j]->PreValue, NUMBERS[j]->Nachkomma); NUMBERS[j]->ErrorMessageText = NUMBERS[j]->ErrorMessageText + "Rate too high - Read: " + RundeOutput(NUMBERS[j]->Value, NUMBERS[j]->Nachkomma) + " - Pre: " + RundeOutput(NUMBERS[j]->PreValue, NUMBERS[j]->Nachkomma);
NUMBERS[j]->Value = NUMBERS[j]->PreValue; NUMBERS[j]->Value = NUMBERS[j]->PreValue;
zwvalue = RundeOutput(NUMBERS[j]->Value, NUMBERS[j]->Nachkomma);
}
NUMBERS[j]->ReturnValueNoError = zwvalue;
NUMBERS[j]->ReturnValue = zwvalue;
if (NUMBERS[j]->ErrorMessage && (NUMBERS[j]->ErrorMessageText.length() > 0))
NUMBERS[j]->ReturnValue = NUMBERS[j]->ReturnValue + "\t" + NUMBERS[j]->ErrorMessageText;
if (NUMBERS[j]->ErrorMessageText.length() == 0)
{
NUMBERS[j]->lastvalue = imagetime;
NUMBERS[j]->PreValue = NUMBERS[j]->Value;
NUMBERS[j]->ReturnValueNoError = NUMBERS[j]->ReturnValue;
NUMBERS[j]->ReturnPreValue = RundeOutput(NUMBERS[j]->PreValue, NUMBERS[j]->Nachkomma);
NUMBERS[j]->ErrorMessageText = "no error";
UpdatePreValueINI = true;
}
else
{
NUMBERS[j]->ReturnRateValue = "";
NUMBERS[j]->ReturnValue = ""; NUMBERS[j]->ReturnValue = "";
NUMBERS[j]->ReturnValueNoError = ""; continue;
NUMBERS[j]->timeStamp = "";
} }
} }
NUMBERS[j]->lastvalue = imagetime;
NUMBERS[j]->PreValue = NUMBERS[j]->Value;
NUMBERS[j]->ReturnPreValue = RundeOutput(NUMBERS[j]->PreValue, NUMBERS[j]->Nachkomma);
NUMBERS[j]->ErrorMessageText = "no error";
UpdatePreValueINI = true;
string _zw = "PostProcessing - Raw: " + NUMBERS[j]->ReturnRawValue + " Value: " + NUMBERS[j]->ReturnValue + " Error: " + NUMBERS[j]->ErrorMessageText; string _zw = "PostProcessing - Raw: " + NUMBERS[j]->ReturnRawValue + " Value: " + NUMBERS[j]->ReturnValue + " Error: " + NUMBERS[j]->ErrorMessageText;
LogFile.WriteToFile(_zw); LogFile.WriteToFile(_zw);
} }
@@ -788,7 +753,7 @@ string ClassFlowPostProcessing::getReadoutParam(bool _rawValue, bool _noerror, i
if (_rawValue) if (_rawValue)
return NUMBERS[_number]->ReturnRawValue; return NUMBERS[_number]->ReturnRawValue;
if (_noerror) if (_noerror)
return NUMBERS[_number]->ReturnValueNoError; return NUMBERS[_number]->ReturnValue;
return NUMBERS[_number]->ReturnValue; return NUMBERS[_number]->ReturnValue;
} }

View File

@@ -1,4 +1,4 @@
const char* GIT_REV="b0d8ed6"; const char* GIT_REV="1371be6";
const char* GIT_TAG=""; const char* GIT_TAG="v10.4.0";
const char* GIT_BRANCH="master"; const char* GIT_BRANCH="rolling";
const char* BUILD_TIME="2022-02-12 09:04"; const char* BUILD_TIME="2022-02-15 21:17";

View File

@@ -1224,8 +1224,10 @@ CONFIG_OV5640_SUPPORT=y
CONFIG_GC2145_SUPPORT=y CONFIG_GC2145_SUPPORT=y
CONFIG_GC032A_SUPPORT=y CONFIG_GC032A_SUPPORT=y
CONFIG_GC0308_SUPPORT=y CONFIG_GC0308_SUPPORT=y
CONFIG_BF3005_SUPPORT=y
# CONFIG_SCCB_HARDWARE_I2C_PORT0 is not set # CONFIG_SCCB_HARDWARE_I2C_PORT0 is not set
CONFIG_SCCB_HARDWARE_I2C_PORT1=y CONFIG_SCCB_HARDWARE_I2C_PORT1=y
CONFIG_SCCB_CLK_FREQ=100000
# CONFIG_GC_SENSOR_WINDOWING_MODE is not set # CONFIG_GC_SENSOR_WINDOWING_MODE is not set
CONFIG_GC_SENSOR_SUBSAMPLE_MODE=y CONFIG_GC_SENSOR_SUBSAMPLE_MODE=y
CONFIG_CAMERA_CORE0=y CONFIG_CAMERA_CORE0=y

View File

@@ -1,4 +1,4 @@
const char* GIT_REV="b0d8ed6"; const char* GIT_REV="1371be6";
const char* GIT_TAG=""; const char* GIT_TAG="v10.4.0";
const char* GIT_BRANCH="master"; const char* GIT_BRANCH="rolling";
const char* BUILD_TIME="2022-02-12 09:04"; const char* BUILD_TIME="2022-02-15 21:17";

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -1480,12 +1480,21 @@ function WriteParameter(_param, _category, _cat, _name, _optional, _number = -1)
if (textToFind == undefined) if (textToFind == undefined)
continue; continue;
_isFound = false;
element.selectedIndex = -1;
for (var i = 0; i < element.options.length; i++) { for (var i = 0; i < element.options.length; i++) {
if (element.options[i].value.toLowerCase() === textToFind.toLowerCase()) { if (element.options[i].value.toLowerCase() === textToFind.toLowerCase()) {
element.selectedIndex = i; element.selectedIndex = i;
_isFound = true;
break; break;
} }
} }
if (!_isFound)
{
_zw_txt = "In the selectd field the value '" + textToFind + "' in the parameter '";
_zw_txt = _zw_txt + _cat + "' in the field '" + _name + "' is invalid.\nPLEASE CHECK BEFORE SAVING!";
alert(_zw_txt);
}
} }
else if ((element.getAttribute("type") != null) && (element.getAttribute("type").toLowerCase() == "checkbox")) { else if ((element.getAttribute("type") != null) && (element.getAttribute("type").toLowerCase() == "checkbox")) {
element.checked = NUMBERS[_number][_cat][_name]["value"+j] == "true"; element.checked = NUMBERS[_number][_cat][_name]["value"+j] == "true";
@@ -1512,12 +1521,22 @@ function WriteParameter(_param, _category, _cat, _name, _optional, _number = -1)
if (textToFind == undefined) if (textToFind == undefined)
continue; continue;
_isFound = false;
element.selectedIndex = -1;
for (var i = 0; i < element.options.length; i++) { for (var i = 0; i < element.options.length; i++) {
if (element.options[i].value.toLowerCase() === textToFind.toLowerCase()) { if (element.options[i].value.toLowerCase() === textToFind.toLowerCase()) {
element.selectedIndex = i; element.selectedIndex = i;
_isFound = true;
break; break;
} }
} }
if (!_isFound)
{
_zw_txt = "In the selectd field the value '" + textToFind + "' in the section '";
_zw_txt = _zw_txt + _cat + "' in the field '" + _name + "' is invalid.\nPLEASE CHECK BEFORE SAVING!";
alert(_zw_txt);
}
} }
else if ((element.getAttribute("type") != null) && (element.getAttribute("type").toLowerCase() == "checkbox")) { else if ((element.getAttribute("type") != null) && (element.getAttribute("type").toLowerCase() == "checkbox")) {
element.checked = _param[_cat][_name]["value"+j] == "true"; element.checked = _param[_cat][_name]["value"+j] == "true";

View File

@@ -13,7 +13,7 @@ function getbasepath(){
{ {
// host = "http://192.168.2.219"; // jomjol interner test // host = "http://192.168.2.219"; // jomjol interner test
// host = "http://192.168.178.46"; // jomjol interner test // host = "http://192.168.178.46"; // jomjol interner test
host = "http://192.168.178.62"; // jomjol interner Real host = "http://192.168.178.34"; // jomjol interner Real
// host = "http://192.168.43.191"; // host = "http://192.168.43.191";
// host = "."; // jomjol interner localhost // host = "."; // jomjol interner localhost

View File

@@ -1 +1 @@
13.1.0 13.1.1