mirror of
https://github.com/jomjol/AI-on-the-edge-device.git
synced 2025-12-07 20:16:55 +03:00
Almost done
This commit is contained in:
@@ -219,10 +219,76 @@ void initialise_wifi_fixed_ip(std::string _ip, std::string _gw, std::string _net
|
|||||||
|
|
||||||
vEventGroupDelete(wifi_event_group);
|
vEventGroupDelete(wifi_event_group);
|
||||||
}
|
}
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
///////////////////////////////////////////////////////////
|
|
||||||
|
|
||||||
//void LoadWlanFromFile(std::string fn, std::string &_ssid, std::string &_passphrase, std::string &_hostname, std::string &_ip, std::string &_gw, std::string &_netmask, std::string &_dns)
|
|
||||||
|
bool ChangeHostName(std::string fn, std::string _newhostname)
|
||||||
|
{
|
||||||
|
if (_newhostname == hostname)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
string line = "";
|
||||||
|
std::vector<string> zerlegt;
|
||||||
|
|
||||||
|
bool found = false;
|
||||||
|
|
||||||
|
std::vector<string> neuesfile;
|
||||||
|
|
||||||
|
FILE* pFile;
|
||||||
|
fn = FormatFileName(fn);
|
||||||
|
pFile = OpenFileAndWait(fn.c_str(), "r");
|
||||||
|
|
||||||
|
printf("file loaded\n");
|
||||||
|
|
||||||
|
if (pFile == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
char zw[1024];
|
||||||
|
fgets(zw, 1024, pFile);
|
||||||
|
line = std::string(zw);
|
||||||
|
|
||||||
|
while ((line.size() > 0) || !(feof(pFile)))
|
||||||
|
{
|
||||||
|
printf("%s", line.c_str());
|
||||||
|
zerlegt = ZerlegeZeile(line, "=");
|
||||||
|
zerlegt[0] = trim(zerlegt[0], " ");
|
||||||
|
|
||||||
|
if ((zerlegt.size() > 1) && (toUpper(zerlegt[0]) == "HOSTNAME")){
|
||||||
|
line = "hostname = \"" + _newhostname + "\"\n";
|
||||||
|
found = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
neuesfile.push_back(line);
|
||||||
|
|
||||||
|
if (fgets(zw, 1024, pFile) == NULL)
|
||||||
|
{
|
||||||
|
line = "";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
line = std::string(zw);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!found)
|
||||||
|
{
|
||||||
|
line = "hostname = \"" + _newhostname + "\"\n";
|
||||||
|
neuesfile.push_back(line);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(pFile);
|
||||||
|
|
||||||
|
pFile = OpenFileAndWait(fn.c_str(), "w+");
|
||||||
|
|
||||||
|
for (int i = 0; i < neuesfile.size(); ++i)
|
||||||
|
{
|
||||||
|
fputs(neuesfile[i].c_str(), pFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
fclose(pFile);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void LoadWlanFromFile(std::string fn, std::string &_ssid, std::string &_passphrase, std::string &_hostname)
|
void LoadWlanFromFile(std::string fn, std::string &_ssid, std::string &_passphrase, std::string &_hostname)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -13,6 +13,8 @@ void initialise_wifi_fixed_ip(std::string _ip, std::string _gw, std::string _net
|
|||||||
void LoadWlanFromFile(std::string fn, std::string &_ssid, std::string &_passphrase, std::string &_hostname);
|
void LoadWlanFromFile(std::string fn, std::string &_ssid, std::string &_passphrase, std::string &_hostname);
|
||||||
void LoadNetConfigFromFile(std::string fn, std::string &_ip, std::string &_gw, std::string &_netmask, std::string &_dns);
|
void LoadNetConfigFromFile(std::string fn, std::string &_ip, std::string &_gw, std::string &_netmask, std::string &_dns);
|
||||||
|
|
||||||
|
bool ChangeHostName(std::string fn, std::string _newhostname);
|
||||||
|
|
||||||
std::string getHostname();
|
std::string getHostname();
|
||||||
std::string getIPAddress();
|
std::string getIPAddress();
|
||||||
std::string getSSID();
|
std::string getSSID();
|
||||||
|
|||||||
@@ -61,53 +61,52 @@ esp_err_t handler_switch_GPIO(httpd_req_t *req)
|
|||||||
|
|
||||||
gpionum = stoi(gpio);
|
gpionum = stoi(gpio);
|
||||||
|
|
||||||
// frei: 16; 12-15; 2; 4
|
// frei: 16; 12-15; 2; 4 // nur 12 und 13 funktionieren 2: reboot, 4: BlitzLED, 14/15: DMA für SDKarte ???
|
||||||
|
|
||||||
switch (gpionum) {
|
switch (gpionum) {
|
||||||
case 2:
|
|
||||||
gpio_num = GPIO_NUM_2;
|
|
||||||
break;
|
|
||||||
case 4:
|
|
||||||
gpio_num = GPIO_NUM_4;
|
|
||||||
break;
|
|
||||||
case 12:
|
case 12:
|
||||||
gpio_num = GPIO_NUM_12;
|
gpio_num = GPIO_NUM_12;
|
||||||
break;
|
break;
|
||||||
case 13:
|
case 13:
|
||||||
gpio_num = GPIO_NUM_13;
|
gpio_num = GPIO_NUM_13;
|
||||||
break;
|
break;
|
||||||
case 14:
|
|
||||||
gpio_num = GPIO_NUM_14;
|
|
||||||
break;
|
|
||||||
case 15:
|
|
||||||
gpio_num = GPIO_NUM_15;
|
|
||||||
break;
|
|
||||||
case 16:
|
|
||||||
gpio_num = (gpio_num_t) 16;
|
|
||||||
break;
|
|
||||||
default:
|
default:
|
||||||
zw = "GPIO" + std::to_string(gpionum) + " not support - only 2, 4, 12-16 free";
|
zw = "GPIO" + std::to_string(gpionum) + " not support - only 12 & 13 free";
|
||||||
httpd_resp_sendstr_chunk(req, zw.c_str());
|
httpd_resp_sendstr_chunk(req, zw.c_str());
|
||||||
httpd_resp_sendstr_chunk(req, NULL);
|
httpd_resp_sendstr_chunk(req, NULL);
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Init the GPIO
|
|
||||||
gpio_pad_select_gpio(gpio_num);
|
|
||||||
/* Set the GPIO as a push/pull output */
|
|
||||||
gpio_set_direction(gpio_num, GPIO_MODE_OUTPUT);
|
|
||||||
|
|
||||||
if (status == "HIGH")
|
if (status == "HIGH")
|
||||||
gpio_set_level(gpio_num, 1);
|
gpio_set_level(gpio_num, 1);
|
||||||
else
|
else
|
||||||
gpio_set_level(gpio_num, 0);
|
gpio_set_level(gpio_num, 0);
|
||||||
|
|
||||||
|
|
||||||
zw = "GPIO" + std::to_string(gpionum) + " switched to " + status;
|
zw = "GPIO" + std::to_string(gpionum) + " switched to " + status;
|
||||||
httpd_resp_sendstr_chunk(req, zw.c_str());
|
httpd_resp_sendstr_chunk(req, zw.c_str());
|
||||||
httpd_resp_sendstr_chunk(req, NULL);
|
httpd_resp_sendstr_chunk(req, NULL);
|
||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
void initGPIO()
|
||||||
|
{
|
||||||
|
gpio_config_t io_conf;
|
||||||
|
//disable interrupt
|
||||||
|
io_conf.intr_type = GPIO_INTR_DISABLE;
|
||||||
|
//set as output mode
|
||||||
|
io_conf.mode = GPIO_MODE_OUTPUT;
|
||||||
|
//bit mask of the pins that you want to set,e.g.GPIO18/19
|
||||||
|
// io_conf.pin_bit_mask = ((1ULL<<GPIO_OUTPUT_IO_0) | (1ULL<<GPIO_OUTPUT_IO_1));
|
||||||
|
// io_conf.pin_bit_mask = ((1ULL << GPIO_NUM_12) | (1ULL << GPIO_NUM_2) | (1ULL << GPIO_NUM_4) | (1ULL << GPIO_NUM_12) | (1ULL << GPIO_NUM_13) | (1ULL << GPIO_NUM_14) | (1ULL << GPIO_NUM_15));
|
||||||
|
io_conf.pin_bit_mask = ((1ULL << GPIO_NUM_12) | (1ULL << GPIO_NUM_13));
|
||||||
|
//disable pull-down mode
|
||||||
|
io_conf.pull_down_en = (gpio_pulldown_t) 0;
|
||||||
|
//disable pull-up mode
|
||||||
|
io_conf.pull_up_en = (gpio_pullup_t) 0;
|
||||||
|
//configure GPIO with the given settings
|
||||||
|
gpio_config(&io_conf);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void register_server_GPIO_uri(httpd_handle_t server)
|
void register_server_GPIO_uri(httpd_handle_t server)
|
||||||
@@ -120,4 +119,6 @@ void register_server_GPIO_uri(httpd_handle_t server)
|
|||||||
camuri.handler = handler_switch_GPIO;
|
camuri.handler = handler_switch_GPIO;
|
||||||
camuri.user_ctx = (void*) "switch GPIO";
|
camuri.user_ctx = (void*) "switch GPIO";
|
||||||
httpd_register_uri_handler(server, &camuri);
|
httpd_register_uri_handler(server, &camuri);
|
||||||
|
|
||||||
|
initGPIO();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,23 +65,6 @@ static esp_err_t index_html_get_handler(httpd_req_t *req)
|
|||||||
return ESP_OK;
|
return ESP_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Handler to respond with an icon file embedded in flash.
|
|
||||||
* Browsers expect to GET website icon at URI /favicon.ico.
|
|
||||||
* This can be overridden by uploading file with same name */
|
|
||||||
|
|
||||||
/*
|
|
||||||
static esp_err_t favicon_get_handler(httpd_req_t *req)
|
|
||||||
{
|
|
||||||
extern const unsigned char favicon_ico_start[] asm("_binary_favicon_ico_start");
|
|
||||||
extern const unsigned char favicon_ico_end[] asm("_binary_favicon_ico_end");
|
|
||||||
const size_t favicon_ico_size = (favicon_ico_end - favicon_ico_start);
|
|
||||||
httpd_resp_set_type(req, "image/x-icon");
|
|
||||||
httpd_resp_send(req, (const char *)favicon_ico_start, favicon_ico_size);
|
|
||||||
httpd_resp_send_chunk(req, NULL, 0);
|
|
||||||
return ESP_OK;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Send HTTP response with a run-time generated html consisting of
|
/* Send HTTP response with a run-time generated html consisting of
|
||||||
* a list of all files and folders under the requested path.
|
* a list of all files and folders under the requested path.
|
||||||
* In case of SPIFFS this returns empty list when path is any
|
* In case of SPIFFS this returns empty list when path is any
|
||||||
|
|||||||
@@ -2,6 +2,6 @@ FILE(GLOB_RECURSE app_sources ${CMAKE_CURRENT_SOURCE_DIR}/*.*)
|
|||||||
|
|
||||||
idf_component_register(SRCS ${app_sources}
|
idf_component_register(SRCS ${app_sources}
|
||||||
INCLUDE_DIRS "."
|
INCLUDE_DIRS "."
|
||||||
REQUIRES jomjol_tfliteclass jomjol_helper jomjol_controlcamera jomjol_mqtt jomjol_fileserver_ota jomjol_image_proc)
|
REQUIRES jomjol_tfliteclass jomjol_helper jomjol_controlcamera jomjol_mqtt jomjol_fileserver_ota jomjol_image_proc connect_wlan)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ void ClassFlow::SetInitialParameter(void)
|
|||||||
{
|
{
|
||||||
ListFlowControll = NULL;
|
ListFlowControll = NULL;
|
||||||
previousElement = NULL;
|
previousElement = NULL;
|
||||||
|
disabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -39,16 +40,18 @@ std::vector<string> ClassFlow::ZerlegeZeile(std::string input, std::string delim
|
|||||||
|
|
||||||
bool ClassFlow::isNewParagraph(string input)
|
bool ClassFlow::isNewParagraph(string input)
|
||||||
{
|
{
|
||||||
if (input[0] == '[')
|
if ((input[0] == '[') || ((input[0] == ';') && (input[1] == '[')))
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ClassFlow::GetNextParagraph(FILE* pfile, string& aktparamgraph)
|
bool ClassFlow::GetNextParagraph(FILE* pfile, string& aktparamgraph)
|
||||||
{
|
{
|
||||||
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph));
|
while (getNextLine(pfile, &aktparamgraph) && !isNewParagraph(aktparamgraph));
|
||||||
|
|
||||||
if (this->isNewParagraph(aktparamgraph))
|
if (isNewParagraph(aktparamgraph))
|
||||||
return true;
|
return true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -108,7 +111,7 @@ bool ClassFlow::getNextLine(FILE* pfile, string *rt)
|
|||||||
}
|
}
|
||||||
*rt = zw;
|
*rt = zw;
|
||||||
*rt = trim(*rt);
|
*rt = trim(*rt);
|
||||||
while (zw[0] == ';' || zw[0] == '#' || (rt->size() == 0)) // Kommentarzeilen (; oder #) und Leerzeilen überspringen
|
while ((zw[0] == ';' || zw[0] == '#' || (rt->size() == 0)) && !(zw[1] == '[')) // Kommentarzeilen (; oder #) und Leerzeilen überspringen, es sei denn es ist ein neuer auskommentierter Paragraph
|
||||||
{
|
{
|
||||||
fgets(zw, 1024, pfile);
|
fgets(zw, 1024, pfile);
|
||||||
printf("%s", zw);
|
printf("%s", zw);
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ class ClassFlow
|
|||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
// std::vector<string> ZerlegeZeile(string input);
|
// std::vector<string> ZerlegeZeile(string input);
|
||||||
std::vector<string> ZerlegeZeile(string input, string delimiter = " =, ");
|
std::vector<string> ZerlegeZeile(string input, string delimiter = " =, \t");
|
||||||
bool isNewParagraph(string input);
|
bool isNewParagraph(string input);
|
||||||
bool GetNextParagraph(FILE* pfile, string& aktparamgraph);
|
bool GetNextParagraph(FILE* pfile, string& aktparamgraph);
|
||||||
bool getNextLine(FILE* pfile, string* rt);
|
bool getNextLine(FILE* pfile, string* rt);
|
||||||
@@ -37,6 +37,8 @@ protected:
|
|||||||
|
|
||||||
virtual void SetInitialParameter(void);
|
virtual void SetInitialParameter(void);
|
||||||
|
|
||||||
|
bool disabled;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ClassFlow(void);
|
ClassFlow(void);
|
||||||
ClassFlow(std::vector<ClassFlow*> * lfc);
|
ClassFlow(std::vector<ClassFlow*> * lfc);
|
||||||
|
|||||||
@@ -4,29 +4,31 @@
|
|||||||
|
|
||||||
#include "CRotateImage.h"
|
#include "CRotateImage.h"
|
||||||
|
|
||||||
|
|
||||||
#include "ClassLogFile.h"
|
#include "ClassLogFile.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool AlignmentExtendedDebugging = true;
|
bool AlignmentExtendedDebugging = true;
|
||||||
|
|
||||||
|
#define DEBUG_DETAIL_ON
|
||||||
|
|
||||||
|
|
||||||
void ClassFlowAlignment::SetInitialParameter(void)
|
void ClassFlowAlignment::SetInitialParameter(void)
|
||||||
{
|
{
|
||||||
initalrotate = 0;
|
initalrotate = 0;
|
||||||
anz_ref = 0;
|
anz_ref = 0;
|
||||||
suchex = 40;
|
|
||||||
suchey = 40;
|
|
||||||
initialmirror = false;
|
initialmirror = false;
|
||||||
SaveAllFiles = false;
|
SaveAllFiles = false;
|
||||||
namerawimage = "/sdcard/img_tmp/raw.jpg";
|
namerawimage = "/sdcard/img_tmp/raw.jpg";
|
||||||
|
FileStoreRefAlignment = "/sdcard/config/align.txt";
|
||||||
ListFlowControll = NULL;
|
ListFlowControll = NULL;
|
||||||
AlignAndCutImage = NULL;
|
AlignAndCutImage = NULL;
|
||||||
ImageBasis = NULL;
|
ImageBasis = NULL;
|
||||||
ImageTMP = NULL;
|
ImageTMP = NULL;
|
||||||
previousElement = NULL;
|
previousElement = NULL;
|
||||||
ref_dx[0] = 0; ref_dx[1] = 0;
|
disabled = false;
|
||||||
ref_dy[0] = 0; ref_dy[1] = 0;
|
SAD_criteria = 0.05;
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassFlowAlignment::ClassFlowAlignment(std::vector<ClassFlow*>* lfc)
|
ClassFlowAlignment::ClassFlowAlignment(std::vector<ClassFlow*>* lfc)
|
||||||
@@ -53,6 +55,10 @@ ClassFlowAlignment::ClassFlowAlignment(std::vector<ClassFlow*>* lfc)
|
|||||||
bool ClassFlowAlignment::ReadParameter(FILE* pfile, string& aktparamgraph)
|
bool ClassFlowAlignment::ReadParameter(FILE* pfile, string& aktparamgraph)
|
||||||
{
|
{
|
||||||
std::vector<string> zerlegt;
|
std::vector<string> zerlegt;
|
||||||
|
int suchex = 40;
|
||||||
|
int suchey = 40;
|
||||||
|
int alg_algo = 0;
|
||||||
|
|
||||||
|
|
||||||
aktparamgraph = trim(aktparamgraph);
|
aktparamgraph = trim(aktparamgraph);
|
||||||
|
|
||||||
@@ -65,29 +71,29 @@ bool ClassFlowAlignment::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
|
|
||||||
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
||||||
{
|
{
|
||||||
zerlegt = this->ZerlegeZeile(aktparamgraph);
|
zerlegt = ZerlegeZeile(aktparamgraph);
|
||||||
if ((zerlegt[0] == "InitialMirror") && (zerlegt.size() > 1))
|
if ((toUpper(zerlegt[0]) == "INITIALMIRROR") && (zerlegt.size() > 1))
|
||||||
{
|
{
|
||||||
if (toUpper(zerlegt[1]) == "TRUE")
|
if (toUpper(zerlegt[1]) == "TRUE")
|
||||||
initialmirror = true;
|
initialmirror = true;
|
||||||
}
|
}
|
||||||
if (((zerlegt[0] == "InitalRotate") || (zerlegt[0] == "InitialRotate")) && (zerlegt.size() > 1))
|
if (((toUpper(zerlegt[0]) == "INITALROTATE") || (toUpper(zerlegt[0]) == "INITIALROTATE")) && (zerlegt.size() > 1))
|
||||||
{
|
{
|
||||||
this->initalrotate = std::stod(zerlegt[1]);
|
this->initalrotate = std::stod(zerlegt[1]);
|
||||||
}
|
}
|
||||||
if ((zerlegt[0] == "SearchFieldX") && (zerlegt.size() > 1))
|
if ((toUpper(zerlegt[0]) == "SEARCHFIELDX") && (zerlegt.size() > 1))
|
||||||
{
|
{
|
||||||
this->suchex = std::stod(zerlegt[1]);
|
suchex = std::stod(zerlegt[1]);
|
||||||
}
|
}
|
||||||
if ((zerlegt[0] == "SearchFieldY") && (zerlegt.size() > 1))
|
if ((toUpper(zerlegt[0]) == "SEARCHFIELDY") && (zerlegt.size() > 1))
|
||||||
{
|
{
|
||||||
this->suchey = std::stod(zerlegt[1]);
|
suchey = std::stod(zerlegt[1]);
|
||||||
}
|
}
|
||||||
if ((zerlegt.size() == 3) && (anz_ref < 2))
|
if ((zerlegt.size() == 3) && (anz_ref < 2))
|
||||||
{
|
{
|
||||||
reffilename[anz_ref] = FormatFileName("/sdcard" + zerlegt[0]);
|
References[anz_ref].image_file = FormatFileName("/sdcard" + zerlegt[0]);
|
||||||
ref_x[anz_ref] = std::stod(zerlegt[1]);
|
References[anz_ref].target_x = std::stod(zerlegt[1]);
|
||||||
ref_y[anz_ref] = std::stod(zerlegt[2]);
|
References[anz_ref].target_y = std::stod(zerlegt[2]);
|
||||||
anz_ref++;
|
anz_ref++;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -96,8 +102,33 @@ bool ClassFlowAlignment::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
if (toUpper(zerlegt[1]) == "TRUE")
|
if (toUpper(zerlegt[1]) == "TRUE")
|
||||||
SaveAllFiles = true;
|
SaveAllFiles = true;
|
||||||
}
|
}
|
||||||
|
if ((toUpper(zerlegt[0]) == "ALIGNMENTALGO") && (zerlegt.size() > 1))
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_DETAIL_ON
|
||||||
|
std::string zw2 = "Alignmentmodus gewählt: " + zerlegt[1];
|
||||||
|
LogFile.WriteToFile(zw2);
|
||||||
|
#endif
|
||||||
|
if (toUpper(zerlegt[1]) == "HIGHACCURACY")
|
||||||
|
alg_algo = 1;
|
||||||
|
if (toUpper(zerlegt[1]) == "FAST")
|
||||||
|
alg_algo = 2;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < anz_ref; ++i)
|
||||||
|
{
|
||||||
|
References[i].search_x = suchex;
|
||||||
|
References[i].search_y = suchey;
|
||||||
|
References[i].fastalg_SAD_criteria = SAD_criteria;
|
||||||
|
References[i].alignment_algo = alg_algo;
|
||||||
|
#ifdef DEBUG_DETAIL_ON
|
||||||
|
std::string zw2 = "Alignmentmodus geschrieben: " + std::to_string(alg_algo);
|
||||||
|
LogFile.WriteToFile(zw2);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
LoadReferenceAlignmentValues();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
|
||||||
}
|
}
|
||||||
@@ -136,8 +167,11 @@ bool ClassFlowAlignment::doFlow(string time)
|
|||||||
if (SaveAllFiles) AlignAndCutImage->SaveToFile(FormatFileName("/sdcard/img_tmp/rot.jpg"));
|
if (SaveAllFiles) AlignAndCutImage->SaveToFile(FormatFileName("/sdcard/img_tmp/rot.jpg"));
|
||||||
}
|
}
|
||||||
|
|
||||||
AlignAndCutImage->Align(reffilename[0], ref_x[0], ref_y[0], reffilename[1], ref_x[1], ref_y[1], suchex, suchey, "");
|
if (!AlignAndCutImage->Align(&References[0], &References[1]))
|
||||||
AlignAndCutImage->GetRefSize(ref_dx, ref_dy);
|
{
|
||||||
|
SaveReferenceAlignmentValues();
|
||||||
|
}
|
||||||
|
|
||||||
if (SaveAllFiles) AlignAndCutImage->SaveToFile(FormatFileName("/sdcard/img_tmp/alg.jpg"));
|
if (SaveAllFiles) AlignAndCutImage->SaveToFile(FormatFileName("/sdcard/img_tmp/alg.jpg"));
|
||||||
|
|
||||||
if (SaveAllFiles)
|
if (SaveAllFiles)
|
||||||
@@ -152,13 +186,138 @@ bool ClassFlowAlignment::doFlow(string time)
|
|||||||
ImageTMP = NULL;
|
ImageTMP = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LoadReferenceAlignmentValues();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void ClassFlowAlignment::DrawRef(CImageBasis *_zw)
|
|
||||||
|
void ClassFlowAlignment::SaveReferenceAlignmentValues()
|
||||||
{
|
{
|
||||||
_zw->drawRect(ref_x[0], ref_y[0], ref_dx[0], ref_dy[0], 255, 0, 0, 2);
|
FILE* pFile;
|
||||||
_zw->drawRect(ref_x[1], ref_y[1], ref_dx[1], ref_dy[1], 255, 0, 0, 2);
|
std::string zwtime, zwvalue;
|
||||||
|
|
||||||
|
pFile = fopen(FileStoreRefAlignment.c_str(), "w");
|
||||||
|
|
||||||
|
if (strlen(zwtime.c_str()) == 0)
|
||||||
|
{
|
||||||
|
time_t rawtime;
|
||||||
|
struct tm* timeinfo;
|
||||||
|
char buffer[80];
|
||||||
|
|
||||||
|
time(&rawtime);
|
||||||
|
timeinfo = localtime(&rawtime);
|
||||||
|
|
||||||
|
strftime(buffer, 80, "%Y-%m-%d_%H-%M-%S", timeinfo);
|
||||||
|
zwtime = std::string(buffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
fputs(zwtime.c_str(), pFile);
|
||||||
|
fputs("\n", pFile);
|
||||||
|
|
||||||
|
zwvalue = std::to_string(References[0].fastalg_x) + "\t" + std::to_string(References[0].fastalg_y);
|
||||||
|
zwvalue = zwvalue + "\t" +std::to_string(References[0].fastalg_SAD)+ "\t" +std::to_string(References[0].fastalg_min);
|
||||||
|
zwvalue = zwvalue + "\t" +std::to_string(References[0].fastalg_max)+ "\t" +std::to_string(References[0].fastalg_avg);
|
||||||
|
fputs(zwvalue.c_str(), pFile);
|
||||||
|
fputs("\n", pFile);
|
||||||
|
|
||||||
|
zwvalue = std::to_string(References[1].fastalg_x) + "\t" + std::to_string(References[1].fastalg_y);
|
||||||
|
zwvalue = zwvalue + "\t" +std::to_string(References[1].fastalg_SAD)+ "\t" +std::to_string(References[1].fastalg_min);
|
||||||
|
zwvalue = zwvalue + "\t" +std::to_string(References[1].fastalg_max)+ "\t" +std::to_string(References[1].fastalg_avg);
|
||||||
|
fputs(zwvalue.c_str(), pFile);
|
||||||
|
fputs("\n", pFile);
|
||||||
|
|
||||||
|
fclose(pFile);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool ClassFlowAlignment::LoadReferenceAlignmentValues(void)
|
||||||
|
{
|
||||||
|
FILE* pFile;
|
||||||
|
char zw[1024];
|
||||||
|
string zwvalue;
|
||||||
|
std::vector<string> zerlegt;
|
||||||
|
|
||||||
|
|
||||||
|
// LogFile.WriteToDedicatedFile("/sdcard/alignment.txt", "LoadReferenceAlignmentValues01");
|
||||||
|
|
||||||
|
pFile = fopen(FileStoreRefAlignment.c_str(), "r");
|
||||||
|
if (pFile == NULL)
|
||||||
|
return false;
|
||||||
|
|
||||||
|
// LogFile.WriteToDedicatedFile("/sdcard/alignment.txt", "LoadReferenceAlignmentValues01");
|
||||||
|
|
||||||
|
fgets(zw, 1024, pFile);
|
||||||
|
printf("%s", zw);
|
||||||
|
|
||||||
|
// zwvalue = "LoadReferenceAlignmentValues Time: " + std::string(zw);
|
||||||
|
|
||||||
|
// LogFile.WriteToDedicatedFile("/sdcard/alignment.txt", zwvalue);
|
||||||
|
|
||||||
|
// LogFile.WriteToDedicatedFile("/sdcard/alignment.txt", "LoadReferenceAlignmentValues02");
|
||||||
|
|
||||||
|
fgets(zw, 1024, pFile);
|
||||||
|
zerlegt = ZerlegeZeile(std::string(zw), " \t");
|
||||||
|
if (zerlegt.size() < 6)
|
||||||
|
{
|
||||||
|
// LogFile.WriteToDedicatedFile("/sdcard/alignment.txt", "Exit 01");
|
||||||
|
fclose(pFile);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// LogFile.WriteToDedicatedFile("/sdcard/alignment.txt", "LoadReferenceAlignmentValues03");
|
||||||
|
|
||||||
|
References[0].fastalg_x = stoi(zerlegt[0]);
|
||||||
|
References[0].fastalg_y = stoi(zerlegt[1]);
|
||||||
|
References[0].fastalg_SAD = stof(zerlegt[2]);
|
||||||
|
References[0].fastalg_min = stoi(zerlegt[3]);
|
||||||
|
References[0].fastalg_max = stoi(zerlegt[4]);
|
||||||
|
References[0].fastalg_avg = stof(zerlegt[5]);
|
||||||
|
|
||||||
|
fgets(zw, 1024, pFile);
|
||||||
|
zerlegt = ZerlegeZeile(std::string(zw));
|
||||||
|
if (zerlegt.size() < 6)
|
||||||
|
{
|
||||||
|
// LogFile.WriteToDedicatedFile("/sdcard/alignment.txt", "Exit 02");
|
||||||
|
fclose(pFile);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
// LogFile.WriteToDedicatedFile("/sdcard/alignment.txt", "LoadReferenceAlignmentValues03");
|
||||||
|
|
||||||
|
References[1].fastalg_x = stoi(zerlegt[0]);
|
||||||
|
References[1].fastalg_y = stoi(zerlegt[1]);
|
||||||
|
References[1].fastalg_SAD = stof(zerlegt[2]);
|
||||||
|
References[1].fastalg_min = stoi(zerlegt[3]);
|
||||||
|
References[1].fastalg_max = stoi(zerlegt[4]);
|
||||||
|
References[1].fastalg_avg = stof(zerlegt[5]);
|
||||||
|
|
||||||
|
fclose(pFile);
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef DEBUG_DETAIL_ON
|
||||||
|
std::string _zw = "\tLoadReferences[0]\tx,y:\t" + std::to_string(References[0].fastalg_x) + "\t" + std::to_string(References[0].fastalg_x);
|
||||||
|
_zw = _zw + "\tSAD, min, max, avg:\t" + std::to_string(References[0].fastalg_SAD) + "\t" + std::to_string(References[0].fastalg_min);
|
||||||
|
_zw = _zw + "\t" + std::to_string(References[0].fastalg_max) + "\t" + std::to_string(References[0].fastalg_avg);
|
||||||
|
LogFile.WriteToDedicatedFile("/sdcard/alignment.txt", _zw);
|
||||||
|
_zw = "\tLoadReferences[1]\tx,y:\t" + std::to_string(References[1].fastalg_x) + "\t" + std::to_string(References[1].fastalg_x);
|
||||||
|
_zw = _zw + "\tSAD, min, max, avg:\t" + std::to_string(References[1].fastalg_SAD) + "\t" + std::to_string(References[1].fastalg_min);
|
||||||
|
_zw = _zw + "\t" + std::to_string(References[1].fastalg_max) + "\t" + std::to_string(References[1].fastalg_avg);
|
||||||
|
LogFile.WriteToDedicatedFile("/sdcard/alignment.txt", _zw);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void ClassFlowAlignment::DrawRef(CImageBasis *_zw)
|
||||||
|
{
|
||||||
|
_zw->drawRect(References[0].target_x, References[0].target_y, References[0].width, References[0].height, 255, 0, 0, 2);
|
||||||
|
_zw->drawRect(References[1].target_x, References[1].target_y, References[1].width, References[1].height, 255, 0, 0, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -3,6 +3,7 @@
|
|||||||
#include "ClassFlow.h"
|
#include "ClassFlow.h"
|
||||||
#include "Helper.h"
|
#include "Helper.h"
|
||||||
#include "CAlignAndCutImage.h"
|
#include "CAlignAndCutImage.h"
|
||||||
|
#include "CFindTemplate.h"
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
@@ -14,16 +15,17 @@ class ClassFlowAlignment :
|
|||||||
protected:
|
protected:
|
||||||
float initalrotate;
|
float initalrotate;
|
||||||
bool initialmirror;
|
bool initialmirror;
|
||||||
string reffilename[2];
|
RefInfo References[2];
|
||||||
int ref_x[2], ref_y[2];
|
|
||||||
int ref_dx[2], ref_dy[2];
|
|
||||||
int anz_ref;
|
int anz_ref;
|
||||||
int suchex, suchey;
|
|
||||||
string namerawimage;
|
string namerawimage;
|
||||||
bool SaveAllFiles;
|
bool SaveAllFiles;
|
||||||
CAlignAndCutImage *AlignAndCutImage;
|
CAlignAndCutImage *AlignAndCutImage;
|
||||||
|
std::string FileStoreRefAlignment;
|
||||||
|
float SAD_criteria;
|
||||||
|
|
||||||
void SetInitialParameter(void);
|
void SetInitialParameter(void);
|
||||||
|
bool LoadReferenceAlignmentValues(void);
|
||||||
|
void SaveReferenceAlignmentValues();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CImageBasis *ImageBasis, *ImageTMP;
|
CImageBasis *ImageBasis, *ImageTMP;
|
||||||
|
|||||||
@@ -24,6 +24,8 @@ void ClassFlowAnalog::SetInitialParameter(void)
|
|||||||
ListFlowControll = NULL;
|
ListFlowControll = NULL;
|
||||||
previousElement = NULL;
|
previousElement = NULL;
|
||||||
SaveAllFiles = false;
|
SaveAllFiles = false;
|
||||||
|
disabled = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassFlowAnalog::ClassFlowAnalog(std::vector<ClassFlow*>* lfc) : ClassFlowImage(lfc, TAG)
|
ClassFlowAnalog::ClassFlowAnalog(std::vector<ClassFlow*>* lfc) : ClassFlowImage(lfc, TAG)
|
||||||
@@ -89,9 +91,18 @@ bool ClassFlowAnalog::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
||||||
if (aktparamgraph.compare("[Analog]") != 0) // Paragraph passt nich zu MakeImage
|
if ((aktparamgraph.compare("[Analog]") != 0) && (aktparamgraph.compare(";[Analog]") != 0)) // Paragraph passt nich zu MakeImage
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
if (aktparamgraph[0] == ';')
|
||||||
|
{
|
||||||
|
disabled = true;
|
||||||
|
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph));
|
||||||
|
printf("[Analog] is disabled !!!\n");
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
||||||
{
|
{
|
||||||
zerlegt = this->ZerlegeZeile(aktparamgraph);
|
zerlegt = this->ZerlegeZeile(aktparamgraph);
|
||||||
@@ -171,6 +182,9 @@ string ClassFlowAnalog::getHTMLSingleStep(string host)
|
|||||||
|
|
||||||
bool ClassFlowAnalog::doFlow(string time)
|
bool ClassFlowAnalog::doFlow(string time)
|
||||||
{
|
{
|
||||||
|
if (disabled)
|
||||||
|
return true;
|
||||||
|
|
||||||
if (!doAlignAndCut(time)){
|
if (!doAlignAndCut(time)){
|
||||||
return false;
|
return false;
|
||||||
};
|
};
|
||||||
@@ -186,6 +200,9 @@ bool ClassFlowAnalog::doFlow(string time)
|
|||||||
|
|
||||||
bool ClassFlowAnalog::doAlignAndCut(string time)
|
bool ClassFlowAnalog::doAlignAndCut(string time)
|
||||||
{
|
{
|
||||||
|
if (disabled)
|
||||||
|
return true;
|
||||||
|
|
||||||
CAlignAndCutImage *caic = flowpostalignment->GetAlignAndCutImage();
|
CAlignAndCutImage *caic = flowpostalignment->GetAlignAndCutImage();
|
||||||
|
|
||||||
for (int i = 0; i < ROI.size(); ++i)
|
for (int i = 0; i < ROI.size(); ++i)
|
||||||
@@ -219,6 +236,9 @@ void ClassFlowAnalog::DrawROI(CImageBasis *_zw)
|
|||||||
|
|
||||||
bool ClassFlowAnalog::doNeuralNetwork(string time)
|
bool ClassFlowAnalog::doNeuralNetwork(string time)
|
||||||
{
|
{
|
||||||
|
if (disabled)
|
||||||
|
return true;
|
||||||
|
|
||||||
string logPath = CreateLogFolder(time);
|
string logPath = CreateLogFolder(time);
|
||||||
|
|
||||||
string input = "/sdcard/img_tmp/alg.jpg";
|
string input = "/sdcard/img_tmp/alg.jpg";
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
#include "ClassFlowControll.h"
|
#include "ClassFlowControll.h"
|
||||||
|
|
||||||
|
#include "connect_wlan.h"
|
||||||
|
|
||||||
#include "freertos/task.h"
|
#include "freertos/task.h"
|
||||||
|
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
@@ -19,28 +21,25 @@ static const char* TAG = "flow_controll";
|
|||||||
std::string ClassFlowControll::doSingleStep(std::string _stepname, std::string _host){
|
std::string ClassFlowControll::doSingleStep(std::string _stepname, std::string _host){
|
||||||
std::string _classname = "";
|
std::string _classname = "";
|
||||||
std::string result = "";
|
std::string result = "";
|
||||||
if (_stepname.compare("[MakeImage]") == 0){
|
if ((_stepname.compare("[MakeImage]") == 0) || (_stepname.compare(";[MakeImage]") == 0)){
|
||||||
_classname = "ClassFlowMakeImage";
|
_classname = "ClassFlowMakeImage";
|
||||||
}
|
}
|
||||||
if (_stepname.compare("[Alignment]") == 0){
|
if ((_stepname.compare("[Alignment]") == 0) || (_stepname.compare(";[Alignment]") == 0)){
|
||||||
_classname = "ClassFlowAlignment";
|
_classname = "ClassFlowAlignment";
|
||||||
}
|
}
|
||||||
if (_stepname.compare("[Digits]") == 0){
|
if ((_stepname.compare("[Digits]") == 0) || (_stepname.compare(";[Digits]") == 0)){
|
||||||
_classname = "ClassFlowDigit";
|
_classname = "ClassFlowDigit";
|
||||||
}
|
}
|
||||||
if (_stepname.compare("[Analog]") == 0){
|
if ((_stepname.compare("[Analog]") == 0) || (_stepname.compare(";[Analog]") == 0)){
|
||||||
_classname = "ClassFlowAnalog";
|
_classname = "ClassFlowAnalog";
|
||||||
}
|
}
|
||||||
if (_stepname.compare("[MQTT]") == 0){
|
if ((_stepname.compare("[MQTT]") == 0) || (_stepname.compare(";[MQTT]") == 0)){
|
||||||
_classname = "ClassFlowMQTT";
|
_classname = "ClassFlowMQTT";
|
||||||
}
|
}
|
||||||
// std::string zw = "Classname: " + _classname + "\n";
|
|
||||||
// printf(zw.c_str());
|
|
||||||
|
|
||||||
for (int i = 0; i < FlowControll.size(); ++i)
|
for (int i = 0; i < FlowControll.size(); ++i)
|
||||||
if (FlowControll[i]->name().compare(_classname) == 0){
|
if (FlowControll[i]->name().compare(_classname) == 0){
|
||||||
// printf(FlowControll[i]->name().c_str()); printf("\n");
|
FlowControll[i]->doFlow("");
|
||||||
FlowControll[i]->doFlow("");
|
|
||||||
result = FlowControll[i]->getHTMLSingleStep(_host);
|
result = FlowControll[i]->getHTMLSingleStep(_host);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -76,6 +75,8 @@ void ClassFlowControll::SetInitialParameter(void)
|
|||||||
flowdigit = NULL;
|
flowdigit = NULL;
|
||||||
flowanalog = NULL;
|
flowanalog = NULL;
|
||||||
flowpostprocessing = NULL;
|
flowpostprocessing = NULL;
|
||||||
|
disabled = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ClassFlowControll::isAutoStart(long &_intervall)
|
bool ClassFlowControll::isAutoStart(long &_intervall)
|
||||||
@@ -356,9 +357,17 @@ bool ClassFlowControll::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
{
|
{
|
||||||
string zw = "Set TimeZone: " + zerlegt[1];
|
string zw = "Set TimeZone: " + zerlegt[1];
|
||||||
reset_servername(zerlegt[1]);
|
reset_servername(zerlegt[1]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
if ((toUpper(zerlegt[0]) == "HOSTNAME") && (zerlegt.size() > 1))
|
||||||
|
{
|
||||||
|
if (ChangeHostName("/sdcard/wlan.ini", zerlegt[1]))
|
||||||
|
{
|
||||||
|
// reboot notwendig damit die neue wlan.ini auch benutzt wird !!!
|
||||||
|
fclose(pfile);
|
||||||
|
doReboot();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if ((toUpper(zerlegt[0]) == "SETUPMODE") && (zerlegt.size() > 1))
|
if ((toUpper(zerlegt[0]) == "SETUPMODE") && (zerlegt.size() > 1))
|
||||||
{
|
{
|
||||||
@@ -367,9 +376,6 @@ bool ClassFlowControll::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
SetupModeActive = true;
|
SetupModeActive = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ void ClassFlowDigit::SetInitialParameter(void)
|
|||||||
ListFlowControll = NULL;
|
ListFlowControll = NULL;
|
||||||
previousElement = NULL;
|
previousElement = NULL;
|
||||||
SaveAllFiles = false;
|
SaveAllFiles = false;
|
||||||
|
disabled = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassFlowDigit::ClassFlowDigit() : ClassFlowImage(TAG)
|
ClassFlowDigit::ClassFlowDigit() : ClassFlowImage(TAG)
|
||||||
@@ -87,10 +89,10 @@ bool ClassFlowDigit::ReadParameter(FILE* pfile, string& aktparamgraph)
|
|||||||
return false;
|
return false;
|
||||||
|
|
||||||
|
|
||||||
if (aktparamgraph.compare("[Digits]") != 0) // Paragraph passt nich zu MakeImage
|
if (aktparamgraph.compare("[Digits]") != 0) // Paragraph passt nicht
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
while (this->getNextLine(pfile, &aktparamgraph) && !this->isNewParagraph(aktparamgraph))
|
while (getNextLine(pfile, &aktparamgraph) && !isNewParagraph(aktparamgraph))
|
||||||
{
|
{
|
||||||
zerlegt = this->ZerlegeZeile(aktparamgraph);
|
zerlegt = this->ZerlegeZeile(aktparamgraph);
|
||||||
if ((zerlegt[0] == "LogImageLocation") && (zerlegt.size() > 1))
|
if ((zerlegt[0] == "LogImageLocation") && (zerlegt.size() > 1))
|
||||||
|
|||||||
@@ -11,18 +11,22 @@ ClassFlowImage::ClassFlowImage(const char* logTag)
|
|||||||
{
|
{
|
||||||
this->logTag = logTag;
|
this->logTag = logTag;
|
||||||
isLogImage = false;
|
isLogImage = false;
|
||||||
|
disabled = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassFlowImage::ClassFlowImage(std::vector<ClassFlow*> * lfc, const char* logTag) : ClassFlow(lfc)
|
ClassFlowImage::ClassFlowImage(std::vector<ClassFlow*> * lfc, const char* logTag) : ClassFlow(lfc)
|
||||||
{
|
{
|
||||||
this->logTag = logTag;
|
this->logTag = logTag;
|
||||||
isLogImage = false;
|
isLogImage = false;
|
||||||
|
disabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassFlowImage::ClassFlowImage(std::vector<ClassFlow*> * lfc, ClassFlow *_prev, const char* logTag) : ClassFlow(lfc, _prev)
|
ClassFlowImage::ClassFlowImage(std::vector<ClassFlow*> * lfc, ClassFlow *_prev, const char* logTag) : ClassFlow(lfc, _prev)
|
||||||
{
|
{
|
||||||
this->logTag = logTag;
|
this->logTag = logTag;
|
||||||
isLogImage = false;
|
isLogImage = false;
|
||||||
|
disabled = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,9 @@ void ClassFlowMQTT::SetInitialParameter(void)
|
|||||||
user = "";
|
user = "";
|
||||||
password = "";
|
password = "";
|
||||||
previousElement = NULL;
|
previousElement = NULL;
|
||||||
ListFlowControll = NULL;
|
ListFlowControll = NULL;
|
||||||
|
disabled = false;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ClassFlowMQTT::ClassFlowMQTT()
|
ClassFlowMQTT::ClassFlowMQTT()
|
||||||
|
|||||||
@@ -33,6 +33,7 @@ void ClassFlowMakeImage::SetInitialParameter(void)
|
|||||||
rawImage = NULL;
|
rawImage = NULL;
|
||||||
ImageSize = FRAMESIZE_VGA;
|
ImageSize = FRAMESIZE_VGA;
|
||||||
SaveAllFiles = false;
|
SaveAllFiles = false;
|
||||||
|
disabled = false;
|
||||||
namerawimage = "/sdcard/img_tmp/raw.jpg";
|
namerawimage = "/sdcard/img_tmp/raw.jpg";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -119,7 +119,7 @@ void ClassFlowPostProcessing::SavePreValue(float value, string zwtime)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*
|
||||||
ClassFlowPostProcessing::ClassFlowPostProcessing()
|
ClassFlowPostProcessing::ClassFlowPostProcessing()
|
||||||
{
|
{
|
||||||
PreValueUse = false;
|
PreValueUse = false;
|
||||||
@@ -133,8 +133,13 @@ ClassFlowPostProcessing::ClassFlowPostProcessing()
|
|||||||
checkDigitIncreaseConsistency = false;
|
checkDigitIncreaseConsistency = false;
|
||||||
DecimalShift = 0;
|
DecimalShift = 0;
|
||||||
ErrorMessageText = "";
|
ErrorMessageText = "";
|
||||||
|
disabled = false;
|
||||||
|
disabled = false;
|
||||||
|
|
||||||
|
|
||||||
FilePreValue = FormatFileName("/sdcard/config/prevalue.ini");
|
FilePreValue = FormatFileName("/sdcard/config/prevalue.ini");
|
||||||
}
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
ClassFlowPostProcessing::ClassFlowPostProcessing(std::vector<ClassFlow*>* lfc)
|
ClassFlowPostProcessing::ClassFlowPostProcessing(std::vector<ClassFlow*>* lfc)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ protected:
|
|||||||
string RundeOutput(float _in, int _anzNachkomma);
|
string RundeOutput(float _in, int _anzNachkomma);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
ClassFlowPostProcessing();
|
// ClassFlowPostProcessing();
|
||||||
ClassFlowPostProcessing(std::vector<ClassFlow*>* lfc);
|
ClassFlowPostProcessing(std::vector<ClassFlow*>* lfc);
|
||||||
bool ReadParameter(FILE* pfile, string& aktparamgraph);
|
bool ReadParameter(FILE* pfile, string& aktparamgraph);
|
||||||
bool doFlow(string time);
|
bool doFlow(string time);
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
#include "CAlignAndCutImage.h"
|
#include "CAlignAndCutImage.h"
|
||||||
#include "CRotateImage.h"
|
#include "CRotateImage.h"
|
||||||
#include "CFindTemplate.h"
|
#include "ClassLogFile.h"
|
||||||
|
|
||||||
#define _USE_MATH_DEFINES
|
#define _USE_MATH_DEFINES
|
||||||
#include <math.h>
|
#include <math.h>
|
||||||
@@ -33,31 +33,33 @@ void CAlignAndCutImage::GetRefSize(int *ref_dx, int *ref_dy)
|
|||||||
ref_dy[1] = t1_dy;
|
ref_dy[1] = t1_dy;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CAlignAndCutImage::Align(std::string _template0, int ref0_x, int ref0_y, std::string _template1, int ref1_x, int ref1_y, int deltax, int deltay, std::string imageROI)
|
bool CAlignAndCutImage::Align(RefInfo *_temp1, RefInfo *_temp2)
|
||||||
{
|
{
|
||||||
int dx, dy;
|
int dx, dy;
|
||||||
int r0_x, r0_y, r1_x, r1_y;
|
int r0_x, r0_y, r1_x, r1_y;
|
||||||
|
bool isSimilar1, isSimilar2;
|
||||||
|
|
||||||
// CFindTemplate* ft = new CFindTemplate(filename);
|
|
||||||
CFindTemplate* ft = new CFindTemplate(rgb_image, channels, width, height, bpp);
|
CFindTemplate* ft = new CFindTemplate(rgb_image, channels, width, height, bpp);
|
||||||
|
|
||||||
r0_x = ref0_x;
|
r0_x = _temp1->target_x;
|
||||||
r0_y = ref0_y;
|
r0_y = _temp1->target_y;
|
||||||
ft->FindTemplate(_template0, &r0_x, &r0_y, deltax, deltay);
|
printf("Vor ft->FindTemplate(_temp1); %s\n", _temp1->image_file.c_str());
|
||||||
t0_dx = ft->tpl_width;
|
isSimilar1 = ft->FindTemplate(_temp1);
|
||||||
t0_dy = ft->tpl_height;
|
_temp1->width = ft->tpl_width;
|
||||||
|
_temp1->height = ft->tpl_height;
|
||||||
|
|
||||||
r1_x = ref1_x;
|
r1_x = _temp2->target_x;
|
||||||
r1_y = ref1_y;
|
r1_y = _temp2->target_y;
|
||||||
ft->FindTemplate(_template1, &r1_x, &r1_y, deltax, deltay);
|
printf("Vor ft->FindTemplate(_temp2); %s\n", _temp2->image_file.c_str());
|
||||||
t1_dx = ft->tpl_width;
|
isSimilar2 = ft->FindTemplate(_temp2);
|
||||||
t1_dy = ft->tpl_height;
|
_temp2->width = ft->tpl_width;
|
||||||
|
_temp2->height = ft->tpl_height;
|
||||||
|
|
||||||
delete ft;
|
delete ft;
|
||||||
|
|
||||||
|
|
||||||
dx = ref0_x - r0_x;
|
dx = _temp1->target_x - _temp1->found_x;
|
||||||
dy = ref0_y - r0_y;
|
dy = _temp1->target_y - _temp1->found_y;
|
||||||
|
|
||||||
r0_x += dx;
|
r0_x += dx;
|
||||||
r0_y += dy;
|
r0_y += dy;
|
||||||
@@ -67,32 +69,32 @@ void CAlignAndCutImage::Align(std::string _template0, int ref0_x, int ref0_y, st
|
|||||||
|
|
||||||
float w_org, w_ist, d_winkel;
|
float w_org, w_ist, d_winkel;
|
||||||
|
|
||||||
w_org = atan2(ref1_y - ref0_y, ref1_x - ref0_x);
|
w_org = atan2(_temp2->found_y - _temp1->found_y, _temp2->found_x - _temp1->found_x);
|
||||||
w_ist = atan2(r1_y - r0_y, r1_x - r0_x);
|
w_ist = atan2(r1_y - r0_y, r1_x - r0_x);
|
||||||
|
|
||||||
d_winkel = (w_org - w_ist) * 180 / M_PI;
|
d_winkel = (w_ist - w_org) * 180 / M_PI;
|
||||||
|
|
||||||
if (imageROI.length() > 0)
|
|
||||||
{
|
|
||||||
CImageBasis* imgzw = new CImageBasis(this);
|
|
||||||
imgzw->drawRect(r0_x, r0_y, t0_dx, t0_dy, 255, 0, 0, 2);
|
|
||||||
imgzw->drawRect(r1_x, r1_y, t1_dx, t1_dy, 255, 0, 0, 2);
|
|
||||||
imgzw->SaveToFile(imageROI);
|
|
||||||
printf("Alignment: alignment ROI created: %s\n", imageROI.c_str());
|
|
||||||
delete imgzw;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
#ifdef DEBUG_DETAIL_ON
|
||||||
std::string zw = "\tdx:\t" + std::to_string(dx) + "\tdy:\t" + std::to_string(dy) + "\td_winkel:\t" + std::to_string(d_winkel);
|
std::string zw = "\tdx:\t" + std::to_string(dx) + "\tdy:\t" + std::to_string(dy) + "\td_winkel:\t" + std::to_string(d_winkel);
|
||||||
// LogFile.WriteToDedicatedFile("/sdcard/alignment.txt", zw);
|
zw = zw + "\tt1_x_y:\t" + std::to_string(_temp1->found_x) + "\t" + std::to_string(_temp1->found_y);
|
||||||
|
zw = zw + "\tpara1_found_min_avg_max_SAD:\t" + std::to_string(_temp1->fastalg_min) + "\t" + std::to_string(_temp1->fastalg_avg) + "\t" + std::to_string(_temp1->fastalg_max) + "\t"+ std::to_string(_temp1->fastalg_SAD);
|
||||||
|
zw = zw + "\tt2_x_y:\t" + std::to_string(_temp2->found_x) + "\t" + std::to_string(_temp2->found_y);
|
||||||
|
zw = zw + "\tpara2_found_min_avg_max:\t" + std::to_string(_temp2->fastalg_min) + "\t" + std::to_string(_temp2->fastalg_avg) + "\t" + std::to_string(_temp2->fastalg_max) + "\t"+ std::to_string(_temp2->fastalg_SAD);
|
||||||
|
LogFile.WriteToDedicatedFile("/sdcard/alignment.txt", zw);
|
||||||
|
#endif
|
||||||
|
|
||||||
CRotateImage rt(this, ImageTMP);
|
CRotateImage rt(this, ImageTMP);
|
||||||
rt.Translate(dx, dy);
|
rt.Translate(dx, dy);
|
||||||
rt.Rotate(d_winkel, ref0_x, ref0_y);
|
rt.Rotate(d_winkel, _temp1->target_x, _temp1->target_y);
|
||||||
printf("Alignment: dx %d - dy %d - rot %f\n", dx, dy, d_winkel);
|
printf("Alignment: dx %d - dy %d - rot %f\n", dx, dy, d_winkel);
|
||||||
|
|
||||||
|
return (isSimilar1 && isSimilar2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void CAlignAndCutImage::CutAndSave(std::string _template1, int x1, int y1, int dx, int dy)
|
void CAlignAndCutImage::CutAndSave(std::string _template1, int x1, int y1, int dx, int dy)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
#include "CImageBasis.h"
|
#include "CImageBasis.h"
|
||||||
|
#include "CFindTemplate.h"
|
||||||
|
|
||||||
|
|
||||||
class CAlignAndCutImage : public CImageBasis
|
class CAlignAndCutImage : public CImageBasis
|
||||||
{
|
{
|
||||||
@@ -9,7 +11,8 @@ class CAlignAndCutImage : public CImageBasis
|
|||||||
CAlignAndCutImage(uint8_t* _rgb_image, int _channels, int _width, int _height, int _bpp) : CImageBasis(_rgb_image, _channels, _width, _height, _bpp) {ImageTMP = NULL;};
|
CAlignAndCutImage(uint8_t* _rgb_image, int _channels, int _width, int _height, int _bpp) : CImageBasis(_rgb_image, _channels, _width, _height, _bpp) {ImageTMP = NULL;};
|
||||||
CAlignAndCutImage(CImageBasis *_org, CImageBasis *_temp);
|
CAlignAndCutImage(CImageBasis *_org, CImageBasis *_temp);
|
||||||
|
|
||||||
void Align(std::string _template1, int x1, int y1, std::string _template2, int x2, int y2, int deltax = 40, int deltay = 40, std::string imageROI = "");
|
bool Align(RefInfo *_temp1, RefInfo *_temp2);
|
||||||
|
// void Align(std::string _template1, int x1, int y1, std::string _template2, int x2, int y2, int deltax = 40, int deltay = 40, std::string imageROI = "");
|
||||||
void CutAndSave(std::string _template1, int x1, int y1, int dx, int dy);
|
void CutAndSave(std::string _template1, int x1, int y1, int dx, int dy);
|
||||||
CImageBasis* CutAndSave(int x1, int y1, int dx, int dy);
|
CImageBasis* CutAndSave(int x1, int y1, int dx, int dy);
|
||||||
void CutAndSave(int x1, int y1, int dx, int dy, CImageBasis *_target);
|
void CutAndSave(int x1, int y1, int dx, int dy, CImageBasis *_target);
|
||||||
|
|||||||
@@ -1,91 +1,185 @@
|
|||||||
#include "CFindTemplate.h"
|
#include "CFindTemplate.h"
|
||||||
|
|
||||||
void CFindTemplate::FindTemplate(std::string _template, int* found_x, int* found_y)
|
#include "ClassLogFile.h"
|
||||||
{
|
|
||||||
FindTemplate(_template, found_x, found_y, 0, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void CFindTemplate::FindTemplate(std::string _template, int* found_x, int* found_y, int _dx, int _dy)
|
#define DEBUG_DETAIL_ON
|
||||||
|
|
||||||
|
|
||||||
|
bool CFindTemplate::FindTemplate(RefInfo *_ref)
|
||||||
{
|
{
|
||||||
uint8_t* rgb_template = stbi_load(_template.c_str(), &tpl_width, &tpl_height, &tpl_bpp, channels);
|
uint8_t* rgb_template = stbi_load(_ref->image_file.c_str(), &tpl_width, &tpl_height, &tpl_bpp, channels);
|
||||||
|
|
||||||
|
// printf("FindTemplate 01\n");
|
||||||
|
|
||||||
int ow, ow_start, ow_stop;
|
int ow, ow_start, ow_stop;
|
||||||
int oh, oh_start, oh_stop;
|
int oh, oh_start, oh_stop;
|
||||||
|
|
||||||
if (_dx == 0)
|
if (_ref->search_x == 0)
|
||||||
{
|
{
|
||||||
_dx = width;
|
_ref->search_x = width;
|
||||||
*found_x = 0;
|
_ref->found_x = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_dy == 0)
|
if (_ref->search_y == 0)
|
||||||
{
|
{
|
||||||
_dy = height;
|
_ref->search_y = height;
|
||||||
*found_y = 0;
|
_ref->found_y = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ow_start = *found_x - _dx;
|
ow_start = _ref->target_x - _ref->search_x;
|
||||||
ow_start = std::max(ow_start, 0);
|
ow_start = std::max(ow_start, 0);
|
||||||
ow_stop = *found_x + _dx;
|
ow_stop = _ref->target_x + _ref->search_x;
|
||||||
if ((ow_stop + tpl_width) > width)
|
if ((ow_stop + tpl_width) > width)
|
||||||
ow_stop = width - tpl_width;
|
ow_stop = width - tpl_width;
|
||||||
ow = ow_stop - ow_start + 1;
|
ow = ow_stop - ow_start + 1;
|
||||||
|
|
||||||
oh_start = *found_y - _dy;
|
oh_start = _ref->target_y - _ref->search_y;
|
||||||
oh_start = std::max(oh_start, 0);
|
oh_start = std::max(oh_start, 0);
|
||||||
oh_stop = *found_y + _dy;
|
oh_stop = _ref->target_y + _ref->search_y;
|
||||||
if ((oh_stop + tpl_height) > height)
|
if ((oh_stop + tpl_height) > height)
|
||||||
oh_stop = height - tpl_height;
|
oh_stop = height - tpl_height;
|
||||||
oh = oh_stop - oh_start + 1;
|
oh = oh_stop - oh_start + 1;
|
||||||
|
|
||||||
uint8_t* odata = (unsigned char*)GET_MEMORY(ow * oh * channels);
|
float avg, SAD;
|
||||||
|
int min, max;
|
||||||
|
bool isSimilar = false;
|
||||||
|
|
||||||
|
// printf("FindTemplate 02\n");
|
||||||
|
|
||||||
|
if ((_ref->alignment_algo == 2) && (_ref->fastalg_x > -1) && (_ref->fastalg_y > -1)) // für Testzwecke immer Berechnen
|
||||||
|
{
|
||||||
|
isSimilar = CalculateSimularities(rgb_template, _ref->fastalg_x, _ref->fastalg_y, ow, oh, min, avg, max, SAD, _ref->fastalg_SAD, _ref->fastalg_SAD_criteria);
|
||||||
|
#ifdef DEBUG_DETAIL_ON
|
||||||
|
std::string zw = "\t" + _ref->image_file + "\tt1_x_y:\t" + std::to_string(_ref->fastalg_x) + "\t" + std::to_string(_ref->fastalg_y);
|
||||||
|
zw = zw + "\tpara1_found_min_avg_max_SAD:\t" + std::to_string(min) + "\t" + std::to_string(avg) + "\t" + std::to_string(max) + "\t"+ std::to_string(SAD);
|
||||||
|
LogFile.WriteToDedicatedFile("/sdcard/alignment.txt", zw);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
// printf("FindTemplate 03\n");
|
||||||
|
|
||||||
|
|
||||||
|
if (isSimilar)
|
||||||
|
{
|
||||||
|
#ifdef DEBUG_DETAIL_ON
|
||||||
|
LogFile.WriteToFile("Use FastAlignment sucessfull");
|
||||||
|
#endif
|
||||||
|
_ref->found_x = _ref->fastalg_x;
|
||||||
|
_ref->found_y = _ref->fastalg_y;
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// printf("FindTemplate 04\n");
|
||||||
|
|
||||||
|
|
||||||
double aktSAD;
|
double aktSAD;
|
||||||
double minSAD = pow(tpl_width * tpl_height * 255, 2);
|
double minSAD = pow(tpl_width * tpl_height * 255, 2);
|
||||||
|
|
||||||
RGBImageLock();
|
RGBImageLock();
|
||||||
|
|
||||||
for (int xouter = ow_start; xouter <= ow_stop; xouter++)
|
// printf("FindTemplate 05\n");
|
||||||
for (int youter = oh_start; youter <= oh_stop; ++youter)
|
int xouter, youter, tpl_x, tpl_y, _ch;
|
||||||
|
int _anzchannels = channels;
|
||||||
|
if (_ref->alignment_algo == 0) // 0 = "Default" (nur R-Kanal)
|
||||||
|
_anzchannels = 1;
|
||||||
|
|
||||||
|
for (xouter = ow_start; xouter <= ow_stop; xouter++)
|
||||||
|
for (youter = oh_start; youter <= oh_stop; ++youter)
|
||||||
{
|
{
|
||||||
aktSAD = 0;
|
aktSAD = 0;
|
||||||
for (int tpl_x = 0; tpl_x < tpl_width; tpl_x++)
|
for (tpl_x = 0; tpl_x < tpl_width; tpl_x++)
|
||||||
for (int tpl_y = 0; tpl_y < tpl_height; tpl_y++)
|
for (tpl_y = 0; tpl_y < tpl_height; tpl_y++)
|
||||||
{
|
{
|
||||||
stbi_uc* p_org = rgb_image + (channels * ((youter + tpl_y) * width + (xouter + tpl_x)));
|
stbi_uc* p_org = rgb_image + (channels * ((youter + tpl_y) * width + (xouter + tpl_x)));
|
||||||
stbi_uc* p_tpl = rgb_template + (channels * (tpl_y * tpl_width + tpl_x));
|
stbi_uc* p_tpl = rgb_template + (channels * (tpl_y * tpl_width + tpl_x));
|
||||||
aktSAD += pow(p_tpl[0] - p_org[0], 2);
|
for (_ch = 0; _ch < _anzchannels; ++_ch)
|
||||||
|
{
|
||||||
|
aktSAD += pow(p_tpl[_ch] - p_org[_ch], 2);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
stbi_uc* p_out = odata + (channels * ((youter - oh_start) * ow + (xouter - ow_start)));
|
|
||||||
|
|
||||||
p_out[0] = int(sqrt(aktSAD / (tpl_width * tpl_height)));
|
|
||||||
if (aktSAD < minSAD)
|
if (aktSAD < minSAD)
|
||||||
{
|
{
|
||||||
minSAD = aktSAD;
|
minSAD = aktSAD;
|
||||||
*found_x = xouter;
|
_ref->found_x = xouter;
|
||||||
*found_y = youter;
|
_ref->found_y = youter;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// printf("FindTemplate 06\n");
|
||||||
|
|
||||||
|
|
||||||
|
if (_ref->alignment_algo == 2)
|
||||||
|
CalculateSimularities(rgb_template, _ref->found_x, _ref->found_y, ow, oh, min, avg, max, SAD, _ref->fastalg_SAD, _ref->fastalg_SAD_criteria);
|
||||||
|
|
||||||
|
|
||||||
|
// printf("FindTemplate 07\n");
|
||||||
|
|
||||||
|
_ref->fastalg_x = _ref->found_x;
|
||||||
|
_ref->fastalg_y = _ref->found_y;
|
||||||
|
_ref->fastalg_min = min;
|
||||||
|
_ref->fastalg_avg = avg;
|
||||||
|
_ref->fastalg_max = max;
|
||||||
|
_ref->fastalg_SAD = SAD;
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef DEBUG_DETAIL_ON
|
||||||
|
std::string zw = "\t" + _ref->image_file + "\tt1_x_y:\t" + std::to_string(_ref->fastalg_x) + "\t" + std::to_string(_ref->fastalg_y);
|
||||||
|
zw = zw + "\tpara1_found_min_avg_max_SAD:\t" + std::to_string(min) + "\t" + std::to_string(avg) + "\t" + std::to_string(max) + "\t"+ std::to_string(SAD);
|
||||||
|
LogFile.WriteToDedicatedFile("/sdcard/alignment.txt", zw);
|
||||||
|
#endif
|
||||||
|
|
||||||
RGBImageRelease();
|
RGBImageRelease();
|
||||||
|
|
||||||
stbi_write_bmp("sdcard\\find.bmp", ow, oh, channels, odata);
|
|
||||||
|
|
||||||
stbi_image_free(odata);
|
|
||||||
stbi_image_free(rgb_template);
|
stbi_image_free(rgb_template);
|
||||||
|
|
||||||
|
// printf("FindTemplate 08\n");
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void CFindTemplate::FindTemplate(std::string _template, int* found_x, int* found_y, std::string _imageout)
|
|
||||||
|
|
||||||
|
bool CFindTemplate::CalculateSimularities(uint8_t* _rgb_tmpl, int _startx, int _starty, int _sizex, int _sizey, int &min, float &avg, int &max, float &SAD, float _SADold, float _SADcrit)
|
||||||
{
|
{
|
||||||
FindTemplate(_template, found_x, found_y);
|
int dif;
|
||||||
SaveToFile(_imageout);
|
int minDif = 255;
|
||||||
}
|
int maxDif = -255;
|
||||||
|
double avgDifSum = 0;
|
||||||
|
long int anz = 0;
|
||||||
|
double aktSAD = 0;
|
||||||
|
|
||||||
void CFindTemplate::FindTemplate(std::string _template, int* found_x, int* found_y, int _dx, int _dy, std::string _imageout)
|
int xouter, youter, _ch;
|
||||||
{
|
|
||||||
FindTemplate(_template, found_x, found_y, _dx, _dy);
|
for (xouter = 0; xouter <= _sizex; xouter++)
|
||||||
SaveToFile(_imageout);
|
for (youter = 0; youter <= _sizey; ++youter)
|
||||||
|
{
|
||||||
|
stbi_uc* p_org = rgb_image + (channels * ((youter + _starty) * width + (xouter + _startx)));
|
||||||
|
stbi_uc* p_tpl = _rgb_tmpl + (channels * (youter * tpl_width + xouter));
|
||||||
|
for (_ch = 0; _ch < channels; ++_ch)
|
||||||
|
{
|
||||||
|
dif = p_tpl[_ch] - p_org[_ch];
|
||||||
|
aktSAD += pow(p_tpl[_ch] - p_org[_ch], 2);
|
||||||
|
if (dif < minDif) minDif = dif;
|
||||||
|
if (dif > maxDif) maxDif = dif;
|
||||||
|
avgDifSum += dif;
|
||||||
|
anz++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
avg = avgDifSum / anz;
|
||||||
|
min = minDif;
|
||||||
|
max = maxDif;
|
||||||
|
SAD = sqrt(aktSAD) / anz;
|
||||||
|
|
||||||
|
float _SADdif = abs(SAD - _SADold);
|
||||||
|
|
||||||
|
printf("Anzahl %ld, avgDifSum %fd, avg %f, SAD_neu: %fd, _SAD_old: %f, _SAD_crit:%f\n", anz, avgDifSum, avg, SAD, _SADold, _SADdif);
|
||||||
|
|
||||||
|
if (_SADdif <= _SADcrit)
|
||||||
|
return true;
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -1,16 +1,40 @@
|
|||||||
|
#ifndef __CFINDTEMPLATE_CLASS
|
||||||
|
#define __CFINDTEMPLATE_CLASS
|
||||||
|
|
||||||
#include "CImageBasis.h"
|
#include "CImageBasis.h"
|
||||||
|
|
||||||
|
struct RefInfo {
|
||||||
|
std::string image_file;
|
||||||
|
int target_x = 0;
|
||||||
|
int target_y = 0;
|
||||||
|
int width = 0;
|
||||||
|
int height = 0;
|
||||||
|
int found_x;
|
||||||
|
int found_y;
|
||||||
|
int search_x;
|
||||||
|
int search_y;
|
||||||
|
int fastalg_x = -1;
|
||||||
|
int fastalg_y = -1;
|
||||||
|
int fastalg_min = -256;
|
||||||
|
float fastalg_avg = -1;
|
||||||
|
int fastalg_max = -1;
|
||||||
|
float fastalg_SAD = -1;
|
||||||
|
float fastalg_SAD_criteria = -1;
|
||||||
|
int alignment_algo = 0; // 0 = "Default" (nur R-Kanal), 1 = "HighAccurity" (RGB-Kanal), 2 = "Fast" (1.x RGB, dann isSimilar)
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
class CFindTemplate : public CImageBasis
|
class CFindTemplate : public CImageBasis
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
int tpl_width, tpl_height, tpl_bpp;
|
int tpl_width, tpl_height, tpl_bpp;
|
||||||
// CFindTemplate(std::string _image);
|
|
||||||
CFindTemplate(uint8_t* _rgb_image, int _channels, int _width, int _height, int _bpp) : CImageBasis(_rgb_image, _channels, _width, _height, _bpp) {};
|
CFindTemplate(uint8_t* _rgb_image, int _channels, int _width, int _height, int _bpp) : CImageBasis(_rgb_image, _channels, _width, _height, _bpp) {};
|
||||||
|
|
||||||
|
bool FindTemplate(RefInfo *_ref);
|
||||||
|
|
||||||
void FindTemplate(std::string _template, int* found_x, int* found_y, std::string _imageout);
|
bool CalculateSimularities(uint8_t* _rgb_tmpl, int _startx, int _starty, int _sizex, int _sizey, int &min, float &avg, int &max, float &SAD, float _SADold, float _SADcrit);
|
||||||
void FindTemplate(std::string _template, int* found_x, int* found_y, int _dx, int _dy, std::string _imageout);
|
};
|
||||||
void FindTemplate(std::string _template, int* found_x, int* found_y);
|
|
||||||
void FindTemplate(std::string _template, int* found_x, int* found_y, int _dx, int _dy);
|
#endif
|
||||||
};
|
|
||||||
@@ -140,6 +140,7 @@ extern "C" void app_main(void)
|
|||||||
register_server_tflite_uri(server);
|
register_server_tflite_uri(server);
|
||||||
register_server_file_uri(server, "/sdcard");
|
register_server_file_uri(server, "/sdcard");
|
||||||
register_server_ota_sdcard_uri(server);
|
register_server_ota_sdcard_uri(server);
|
||||||
|
register_server_GPIO_uri(server);
|
||||||
register_server_main_uri(server, "/sdcard");
|
register_server_main_uri(server, "/sdcard");
|
||||||
|
|
||||||
TFliteDoAutoStart();
|
TFliteDoAutoStart();
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const char* GIT_REV="8a06825";
|
const char* GIT_REV="0e36010";
|
||||||
const char* GIT_TAG="";
|
const char* GIT_TAG="";
|
||||||
const char* GIT_BRANCH="rolling";
|
const char* GIT_BRANCH="rolling-speed-up-alignment";
|
||||||
const char* BUILD_TIME="2021-01-01 13:40";
|
const char* BUILD_TIME="2021-01-04 12:13";
|
||||||
@@ -18,10 +18,6 @@ platform = espressif32
|
|||||||
board = esp32cam
|
board = esp32cam
|
||||||
framework = espidf
|
framework = espidf
|
||||||
|
|
||||||
board_build.embed_files =
|
|
||||||
main/favicon.ico
|
|
||||||
|
|
||||||
|
|
||||||
;board_build.partitions = partitions_singleapp.csv
|
;board_build.partitions = partitions_singleapp.csv
|
||||||
board_build.partitions = partitions.csv
|
board_build.partitions = partitions.csv
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const char* GIT_REV="8a06825";
|
const char* GIT_REV="0e36010";
|
||||||
const char* GIT_TAG="";
|
const char* GIT_TAG="";
|
||||||
const char* GIT_BRANCH="rolling";
|
const char* GIT_BRANCH="rolling-speed-up-alignment";
|
||||||
const char* BUILD_TIME="2021-01-01 13:40";
|
const char* BUILD_TIME="2021-01-02 09:02";
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
@@ -11,6 +11,7 @@ InitalRotate=180
|
|||||||
/config/ref1.jpg 456 138
|
/config/ref1.jpg 456 138
|
||||||
SearchFieldX = 20
|
SearchFieldX = 20
|
||||||
SearchFieldY = 20
|
SearchFieldY = 20
|
||||||
|
AlignmentAlgo = Default
|
||||||
|
|
||||||
|
|
||||||
[Digits]
|
[Digits]
|
||||||
@@ -60,6 +61,7 @@ LogfileRetentionInDays = 3
|
|||||||
[System]
|
[System]
|
||||||
TimeZone = CET-1CEST,M3.5.0,M10.5.0/3
|
TimeZone = CET-1CEST,M3.5.0,M10.5.0/3
|
||||||
;TimeServer = fritz.box
|
;TimeServer = fritz.box
|
||||||
|
;hostname = watermeter
|
||||||
SetupMode = true
|
SetupMode = true
|
||||||
|
|
||||||
[Ende]
|
[Ende]
|
||||||
@@ -1 +1,2 @@
|
|||||||
[1204/185120.033:ERROR:directory_reader_win.cc(43)] FindFirstFile: Das System kann den angegebenen Pfad nicht finden. (0x3)
|
[1204/185120.033:ERROR:directory_reader_win.cc(43)] FindFirstFile: Das System kann den angegebenen Pfad nicht finden. (0x3)
|
||||||
|
[0102/122131.430:ERROR:directory_reader_win.cc(43)] FindFirstFile: Das System kann den angegebenen Pfad nicht finden. (0x3)
|
||||||
|
|||||||
@@ -90,7 +90,8 @@ select {
|
|||||||
</table>
|
</table>
|
||||||
|
|
||||||
<script type="text/javascript" src="./gethost.js"></script>
|
<script type="text/javascript" src="./gethost.js"></script>
|
||||||
<script type="text/javascript" src="./readconfig.js"></script>
|
<script type="text/javascript" src="./readconfig.js"></script>
|
||||||
|
<script type="text/javascript" src="./readconfigcommon.js"></script>
|
||||||
|
|
||||||
<script language="JavaScript">
|
<script language="JavaScript">
|
||||||
var canvas = document.getElementById('canvas'),
|
var canvas = document.getElementById('canvas'),
|
||||||
|
|||||||
@@ -49,13 +49,26 @@ select {
|
|||||||
th, td {
|
th, td {
|
||||||
padding: 5px 5px 5px 0px;
|
padding: 5px 5px 5px 0px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#div2{
|
||||||
|
background-color:#777;
|
||||||
|
margin-bottom:20px;
|
||||||
|
}
|
||||||
|
.disabledDiv {
|
||||||
|
pointer-events: none;
|
||||||
|
opacity: 0.4;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
</head>
|
</head>
|
||||||
|
|
||||||
<body style="font-family: arial; padding: 0px 10px;">
|
<body style="font-family: arial; padding: 0px 10px;">
|
||||||
|
|
||||||
<h2>Edit Analog</h2>
|
<h2><input type="checkbox" id="Category_Analog_enabled" value="1" onclick = 'EnDisableAnalog()' checked >
|
||||||
|
Edit Analog</h2>
|
||||||
|
|
||||||
|
|
||||||
|
<div id="div1">
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -78,8 +91,8 @@ th, td {
|
|||||||
</td>
|
</td>
|
||||||
<td>Name: <input type="text" name="name" id="name" onchange="onNameChange()" size="13"></td>
|
<td>Name: <input type="text" name="name" id="name" onchange="onNameChange()" size="13"></td>
|
||||||
<td>
|
<td>
|
||||||
<input class="move" type="submit" id="moveNext" onclick="moveNext()" value="move Next">
|
<input class="button" type="submit" id="moveNext" onclick="moveNext()" value="move Next">
|
||||||
<input class="move" type="submit" id="movePrevious" onclick="movePrevious()" value="move Previous">
|
<input class="button" type="submit" id="movePrevious" onclick="movePrevious()" value="move Previous">
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -92,15 +105,19 @@ th, td {
|
|||||||
<td>dy: <input type="number" name="refdy" id="refdy" step=1 onchange="valuemanualchanged()"></td>
|
<td>dy: <input type="number" name="refdy" id="refdy" step=1 onchange="valuemanualchanged()"></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
</div>
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
<tr>
|
<tr>
|
||||||
<td><input class="button" type="submit" id="saveroi" name="saveroi" onclick="SaveToConfig()" value="Save all to Config.ini"></td>
|
<td><input class="button" type="submit" id="saveroi" name="saveroi" onclick="SaveToConfig()" value="Save all to Config.ini"></td>
|
||||||
</tr>
|
</tr>
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
|
|
||||||
<script type="text/javascript" src="./gethost.js"></script>
|
<script type="text/javascript" src="./gethost.js"></script>
|
||||||
|
<script type="text/javascript" src="./readconfigcommon.js"></script>
|
||||||
<script type="text/javascript" src="./readconfig.js"></script>
|
<script type="text/javascript" src="./readconfig.js"></script>
|
||||||
|
<script type="text/javascript" src="./jquery-3.5.1.min.js"></script>
|
||||||
|
|
||||||
<script language="JavaScript">
|
<script language="JavaScript">
|
||||||
var canvas = document.getElementById('canvas'),
|
var canvas = document.getElementById('canvas'),
|
||||||
@@ -114,6 +131,36 @@ th, td {
|
|||||||
lockAR = true;
|
lockAR = true;
|
||||||
basepath = "http://192.168.178.26";
|
basepath = "http://192.168.178.26";
|
||||||
|
|
||||||
|
|
||||||
|
function EnDisableAnalog() {
|
||||||
|
isEnabled = document.getElementById("Category_Analog_enabled").checked;
|
||||||
|
|
||||||
|
$("#div2").attr("disabled", "disabled").off('click');
|
||||||
|
var x1=$("#div2").hasClass("disabledDiv");
|
||||||
|
|
||||||
|
if (isEnabled)
|
||||||
|
{
|
||||||
|
$("#div2").removeClass("disabledDiv");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
$("#div2").addClass("disabledDiv");
|
||||||
|
}
|
||||||
|
|
||||||
|
sah1(document.getElementById("div1"));
|
||||||
|
}
|
||||||
|
|
||||||
|
function sah1(el) {
|
||||||
|
try {
|
||||||
|
el.disabled = el.disabled ? false : true;
|
||||||
|
} catch (E) {}
|
||||||
|
if (el.childNodes && el.childNodes.length > 0) {
|
||||||
|
for (var x = 0; x < el.childNodes.length; x++) {
|
||||||
|
sah1(el.childNodes[x]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
function onNameChange(){
|
function onNameChange(){
|
||||||
ROIInfo[aktindex]["name"] = document.getElementById("name").value;
|
ROIInfo[aktindex]["name"] = document.getElementById("name").value;
|
||||||
UpdateROIs();
|
UpdateROIs();
|
||||||
@@ -172,7 +219,8 @@ function ChangeSelection(){
|
|||||||
}
|
}
|
||||||
|
|
||||||
function SaveToConfig(){
|
function SaveToConfig(){
|
||||||
SaveROIToConfig(ROIInfo, "[Analog]", basepath);
|
_enabled = document.getElementById("index").checked;
|
||||||
|
SaveROIToConfig(ROIInfo, "[Analog]", basepath, _enabled);
|
||||||
UpdatePage();
|
UpdatePage();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -230,8 +278,18 @@ function UpdateROIs(){
|
|||||||
function ParseIni(_basepath) {
|
function ParseIni(_basepath) {
|
||||||
loadConfig(_basepath);
|
loadConfig(_basepath);
|
||||||
ParseConfig();
|
ParseConfig();
|
||||||
|
|
||||||
|
document.getElementById("Category_Analog_enabled").checked = true;
|
||||||
ROIInfo = getROIInfo("[Analog]");
|
ROIInfo = getROIInfo("[Analog]");
|
||||||
|
|
||||||
|
if (!GetAnalogEnabled())
|
||||||
|
{
|
||||||
|
document.getElementById("Category_Analog_enabled").checked = false;
|
||||||
|
EnDisableAnalog();
|
||||||
|
alert("Analog ROIs are disabled - please enable (Check box top left).\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
UpdateROIs();
|
UpdateROIs();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,6 +42,7 @@ textarea {
|
|||||||
|
|
||||||
<script type="text/javascript" src="./gethost.js"></script>
|
<script type="text/javascript" src="./gethost.js"></script>
|
||||||
<script type="text/javascript" src="./readconfig.js"></script>
|
<script type="text/javascript" src="./readconfig.js"></script>
|
||||||
|
<script type="text/javascript" src="./readconfigcommon.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var canvas = document.getElementById('canvas'),
|
var canvas = document.getElementById('canvas'),
|
||||||
|
|||||||
@@ -61,7 +61,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="MakeImage_LogImageLocation_enabled" value="1" onclick = 'document.getElementById("MakeImage_LogImageLocation_value").disabled = !document.getElementById("MakeImage_LogImageLocation_value1").disabled' unchecked >
|
<input type="checkbox" id="MakeImage_LogImageLocation_enabled" value="1" onclick = 'document.getElementById("MakeImage_LogImageLocation_value1").disabled = !document.getElementById("MakeImage_LogImageLocation_value1").disabled' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="MakeImage_LogImageLocation_text" style="color:black;">LogImageLocation</class>
|
<class id="MakeImage_LogImageLocation_text" style="color:black;">LogImageLocation</class>
|
||||||
@@ -75,7 +75,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<td"><input type="checkbox" id="MakeImage_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("MakeImage_LogfileRetentionInDays_value").disabled = !document.getElementById("MakeImage_LogfileRetentionInDays_value1").disabled' unchecked ></td>
|
<td"><input type="checkbox" id="MakeImage_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("MakeImage_LogfileRetentionInDays_value1").disabled = !document.getElementById("MakeImage_LogfileRetentionInDays_value1").disabled' unchecked ></td>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<class id="MakeImage_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
|
<class id="MakeImage_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
|
||||||
@@ -160,6 +160,24 @@ textarea {
|
|||||||
y size (height) in which the reference is searched (default = "20")
|
y size (height) in which the reference is searched (default = "20")
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr class="expert" id="AlignmentAlgo_ex8">
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="Alignment_AlignmentAlgo_enabled" value="1" onclick = 'document.getElementById("Alignment_AlignmentAlgo_value1").disabled = !document.getElementById("Alignment_AlignmentAlgo_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<class id="Alignment_AlignmentAlgo_text" style="color:black;">AlignmentAlgo</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="Alignment_AlignmentAlgo_value1">
|
||||||
|
<option value="0" selected>Default</option>
|
||||||
|
<option value="1" >HighAccurity</option>
|
||||||
|
<option value="2" >Fast</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
"Default" = use only R-Channel, "HighAccurity" = use all Channels (RGB, 3x slower), <br> "Fast" (First time RGB, then only check if image is shifted)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
<tr class="expert" id="ex4">
|
<tr class="expert" id="ex4">
|
||||||
<td colspan="4" style="padding-left: 20px;"><h4>Digits</h4></td>
|
<td colspan="4" style="padding-left: 20px;"><h4>Digits</h4></td>
|
||||||
@@ -221,62 +239,39 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr class="expert" id="ex4">
|
<tr class="expert" id="ex4">
|
||||||
<td colspan="4" style="padding-left: 20px;"><h4>Analog</h4></td>
|
<td colspan="4" style="padding-left: 20px;">
|
||||||
|
<h4><input type="checkbox" id="Category_Analog_enabled" value="1" onclick = 'UpdateAfterCategoryCheck()' unchecked > Analog</h4></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;"> </td>
|
||||||
</td>
|
<td width="200px"> <class id="Analog_Model_text" style="color:black;">Model</class> </td>
|
||||||
<td width="200px">
|
<td> <input type="text" id="Analog_Model_value1"> </td>
|
||||||
<class id="Analog_Model_text" style="color:black;">Model</class>
|
<td style="font-size: 80%;"> path to CNN model file for image recognition (in seconds) </td>
|
||||||
</td>
|
|
||||||
<td>
|
|
||||||
<input type="text" id="Analog_Model_value1">
|
|
||||||
</td>
|
|
||||||
<td style="font-size: 80%;">
|
|
||||||
path to CNN model file for image recognition (in seconds)
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="Analog_LogImageLocation_enabled" value="1" onclick = 'document.getElementById("Analog_LogImageLocation_value1").disabled = !document.getElementById("Analog_LogImageLocation_value1").disabled' unchecked >
|
<input type="checkbox" id="Analog_LogImageLocation_enabled" value="1" onclick = 'document.getElementById("Analog_LogImageLocation_value1").disabled = !document.getElementById("Analog_LogImageLocation_value1").disabled' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td> <class id="Analog_LogImageLocation_text" style="color:black;">LogImageLocation</class> </td>
|
||||||
<class id="Analog_LogImageLocation_text" style="color:black;">LogImageLocation</class>
|
<td> <input type="text" name="name" id="Analog_LogImageLocation_value1"> </td>
|
||||||
</td>
|
<td style="font-size: 80%;"> Location to store separated digits for logging </td>
|
||||||
<td>
|
|
||||||
<input type="text" name="name" id="Analog_LogImageLocation_value1">
|
|
||||||
</td>
|
|
||||||
<td style="font-size: 80%;">
|
|
||||||
Location to store separated digits for logging
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<td"><input type="checkbox" id="Analog_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("Analog_LogfileRetentionInDays_value1").disabled = !document.getElementById("Analog_LogfileRetentionInDays_value1").disabled' unchecked ></td>
|
<td"><input type="checkbox" id="Analog_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("Analog_LogfileRetentionInDays_value1").disabled = !document.getElementById("Analog_LogfileRetentionInDays_value1").disabled' unchecked ></td>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td> <class id="Analog_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class> </td>
|
||||||
<class id="Analog_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
|
<td> <input type="number" id="Analog_LogfileRetentionInDays_value1" min="0" step="1"> </td>
|
||||||
</td>
|
<td style="font-size: 80%;"> Time to keep the separated digit images (in days -"0" = forever) </td>
|
||||||
<td>
|
|
||||||
<input type="number" id="Analog_LogfileRetentionInDays_value1" min="0" step="1">
|
|
||||||
</td>
|
|
||||||
<td style="font-size: 80%;">
|
|
||||||
Time to keep the separated digit images (in days -"0" = forever)
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
<tr class="expert" id="ex10">
|
<tr class="expert" id="ex10">
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;"> </td>
|
||||||
</td>
|
<td> <class id="Analog_ModelInputSize_text" style="color:black;">ModelInputSize</class> </td>
|
||||||
<td>
|
|
||||||
<class id="Analog_ModelInputSize_text" style="color:black;">ModelInputSize</class>
|
|
||||||
</td>
|
|
||||||
<td>
|
<td>
|
||||||
x: <input type="number" id="Analog_ModelInputSize_value1" style="width: 30px;" min="1" step="1">
|
x: <input type="number" id="Analog_ModelInputSize_value1" style="width: 30px;" min="1" step="1">
|
||||||
y: <input type="number" id="Analog_ModelInputSize_value2" style="width: 30px;" min="1" step="1">
|
y: <input type="number" id="Analog_ModelInputSize_value2" style="width: 30px;" min="1" step="1">
|
||||||
</td>
|
</td>
|
||||||
<td style="font-size: 80%;">
|
<td style="font-size: 80%;"> Size of the input image for the CNN model </td>
|
||||||
Size of the input image for the CNN model
|
|
||||||
</td>
|
|
||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
@@ -394,7 +389,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
|
|
||||||
<tr>
|
<tr>
|
||||||
<td colspan="4" style="padding-left: 20px;"><h4>MQTT</h4></td>
|
<td colspan="4" style="padding-left: 20px;"><h4><input type="checkbox" id="Category_MQTT_enabled" value="1" onclick = 'UpdateAfterCategoryCheck()' unchecked > MQTT</h4></td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
@@ -468,7 +463,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<input type="checkbox" id="MQTT_password_enabled" value="1" onclick = 'document.getElementById("MQTT_password_value1").disabled = !document.getElementById("MQTT_password_value1").disabled' checked >
|
<input type="checkbox" id="MQTT_password_enabled" value="1" onclick = 'document.getElementById("MQTT_password_value1").disabled = !document.getElementById("MQTT_password_value1").disabled' unchecked >
|
||||||
</td>
|
</td>
|
||||||
<td width="200px">
|
<td width="200px">
|
||||||
<class id="MQTT_password_text" style="color:black;">password</class>
|
<class id="MQTT_password_text" style="color:black;">password</class>
|
||||||
@@ -538,7 +533,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<td"><input type="checkbox" id="Debug_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("Debug_LogfileRetentionInDays_value").disabled = !document.getElementById("Debug_LogfileRetentionInDays_value1").disabled' unchecked ></td>
|
<td"><input type="checkbox" id="Debug_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("Debug_LogfileRetentionInDays_value1").disabled = !document.getElementById("Debug_LogfileRetentionInDays_value1").disabled' unchecked ></td>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<class id="Debug_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
|
<class id="Debug_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
|
||||||
@@ -556,7 +551,7 @@ textarea {
|
|||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
<td width="20px" style="padding-left: 40px;">
|
<td width="20px" style="padding-left: 40px;">
|
||||||
<td"><input type="checkbox" id="System_TimeZone_enabled" value="1" onclick = 'document.getElementById("System_TimeZone_value").disabled = !document.getElementById("System_TimeZone_value1").disabled' unchecked ></td>
|
<td"><input type="checkbox" id="System_TimeZone_enabled" value="1" onclick = 'document.getElementById("System_TimeZone_value1").disabled = !document.getElementById("System_TimeZone_value1").disabled' unchecked ></td>
|
||||||
</td>
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<class id="System_TimeZone_text" style="color:black;">TimeZone</class>
|
<class id="System_TimeZone_text" style="color:black;">TimeZone</class>
|
||||||
@@ -582,6 +577,21 @@ textarea {
|
|||||||
Time server to synchronize system time (default: "pool.ntp.org" - used if nothing is specified)
|
Time server to synchronize system time (default: "pool.ntp.org" - used if nothing is specified)
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
<tr class="expert" id="System_Hostname">
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<td"><input type="checkbox" id="System_Hostname_enabled" value="1" onclick = 'document.getElementById("System_Hostname_value1").disabled = !document.getElementById("System_Hostname_value1").disabled' unchecked ></td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<class id="System_Hostname_text" style="color:black;">Hostname</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" id="System_Hostname_value1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Hostname for server - will be transfered to wlan.ini at next startup)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
</table>
|
</table>
|
||||||
|
|
||||||
<p>
|
<p>
|
||||||
@@ -597,12 +607,14 @@ textarea {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
<script type="text/javascript" src="./gethost.js"></script>
|
<script type="text/javascript" src="./gethost.js"></script>
|
||||||
|
<script type="text/javascript" src="./readconfigcommon.js"></script>
|
||||||
<script type="text/javascript" src="./readconfigparam.js"></script>
|
<script type="text/javascript" src="./readconfigparam.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var canvas = document.getElementById('canvas'),
|
var canvas = document.getElementById('canvas'),
|
||||||
basepath = "http://192.168.178.22";
|
basepath = "http://192.168.178.22";
|
||||||
param;
|
param;
|
||||||
|
category;
|
||||||
|
|
||||||
|
|
||||||
function LoadConfigNeu() {
|
function LoadConfigNeu() {
|
||||||
@@ -613,12 +625,14 @@ function LoadConfigNeu() {
|
|||||||
}
|
}
|
||||||
loadConfig(basepath);
|
loadConfig(basepath);
|
||||||
ParseConfig();
|
ParseConfig();
|
||||||
|
param = getConfigParameters();
|
||||||
|
category = getConfigCategory();
|
||||||
UpdateInput();
|
UpdateInput();
|
||||||
UpdateExpertModus();
|
UpdateExpertModus();
|
||||||
document.getElementById("divall").style.display = '';
|
document.getElementById("divall").style.display = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
function WriteParameter(_param, _cat, _name, _optional, _select = false, _anzpara = 1){
|
function WriteParameter(_param, _category, _cat, _name, _optional, _select = false, _anzpara = 1){
|
||||||
if (_param[_cat][_name]["found"]){
|
if (_param[_cat][_name]["found"]){
|
||||||
if (_optional) {
|
if (_optional) {
|
||||||
document.getElementById(_cat+"_"+_name+"_enabled").checked = _param[_cat][_name]["enabled"];
|
document.getElementById(_cat+"_"+_name+"_enabled").checked = _param[_cat][_name]["enabled"];
|
||||||
@@ -654,6 +668,52 @@ function WriteParameter(_param, _cat, _name, _optional, _select = false, _anzpar
|
|||||||
document.getElementById(_cat+"_"+_name+"_text").style="color:lightgrey;"
|
document.getElementById(_cat+"_"+_name+"_text").style="color:lightgrey;"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
///////////////// am Ende, falls Kategorie als gesamtes nicht ausgewählt --> deaktivieren
|
||||||
|
if (_category[_cat]["enabled"] == false)
|
||||||
|
{
|
||||||
|
if (_optional) {
|
||||||
|
document.getElementById(_cat+"_"+_name+"_enabled").disabled = true;
|
||||||
|
for (var j = 1; j <= _anzpara; ++j) {
|
||||||
|
document.getElementById(_cat+"_"+_name+"_value"+j).disabled = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
document.getElementById(_cat+"_"+_name+"_text").style="color:lightgrey;"
|
||||||
|
}
|
||||||
|
EnDisableItem(_category[_cat]["enabled"], _param, _category, _cat, _name, _optional);
|
||||||
|
}
|
||||||
|
|
||||||
|
function EnDisableItem(_status, _param, _category, _cat, _name, _optional)
|
||||||
|
{
|
||||||
|
_status = _param[_cat][_name]["found"] && _category[_cat]["enabled"];
|
||||||
|
|
||||||
|
_color = "color:lightgrey;";
|
||||||
|
if (_status) {
|
||||||
|
_color = "color:black;";
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_optional) {
|
||||||
|
document.getElementById(_cat+"_"+_name+"_enabled").disabled = !_status;
|
||||||
|
document.getElementById(_cat+"_"+_name+"_enabled").style=_color;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!_param[_cat][_name]["enabled"]) {
|
||||||
|
_status = false;
|
||||||
|
_color = "color:lightgrey;";
|
||||||
|
}
|
||||||
|
|
||||||
|
document.getElementById(_cat+"_"+_name+"_text").disabled = !_status;
|
||||||
|
document.getElementById(_cat+"_"+_name+"_text").style = _color;
|
||||||
|
|
||||||
|
if (_param[_cat][_name]["anzParam"] == 2) {
|
||||||
|
_color = "width: 30px;" + _color;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (var j = 1; j <= _param[_cat][_name]["anzParam"]; ++j) {
|
||||||
|
document.getElementById(_cat+"_"+_name+"_value"+j).disabled = !_status;
|
||||||
|
document.getElementById(_cat+"_"+_name+"_value"+j).style=_color;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -667,7 +727,7 @@ function ReadParameter(_param, _cat, _name, _optional, _select = false){
|
|||||||
_param[_cat][_name]["value1"] = sel.options[sel.selectedIndex].text;
|
_param[_cat][_name]["value1"] = sel.options[sel.selectedIndex].text;
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
for (var j = 1; j <= _param[_cat][_name]["anzpara"]; ++j) {
|
for (var j = 1; j <= _param[_cat][_name]["anzParam"]; ++j) {
|
||||||
_param[_cat][_name]["value"+j] = document.getElementById(_cat+"_"+_name+"_value"+j).value;
|
_param[_cat][_name]["value"+j] = document.getElementById(_cat+"_"+_name+"_value"+j).value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -675,52 +735,60 @@ function ReadParameter(_param, _cat, _name, _optional, _select = false){
|
|||||||
}
|
}
|
||||||
|
|
||||||
function UpdateInput() {
|
function UpdateInput() {
|
||||||
param = getConfigParameters();
|
document.getElementById("Category_Analog_enabled").checked = category["Analog"]["enabled"];
|
||||||
WriteParameter(param, "MakeImage", "LogImageLocation", true);
|
document.getElementById("Category_MQTT_enabled").checked = category["MQTT"]["enabled"];
|
||||||
WriteParameter(param, "MakeImage", "LogfileRetentionInDays", true);
|
|
||||||
WriteParameter(param, "MakeImage", "WaitBeforeTakingPicture", false);
|
|
||||||
WriteParameter(param, "MakeImage", "ImageQuality", false);
|
|
||||||
WriteParameter(param, "MakeImage", "ImageSize", false, true, true);
|
|
||||||
|
|
||||||
WriteParameter(param, "Alignment", "SearchFieldX", false);
|
WriteParameter(param, category, "MakeImage", "LogImageLocation", true);
|
||||||
WriteParameter(param, "Alignment", "SearchFieldY", false);
|
WriteParameter(param, category, "MakeImage", "LogfileRetentionInDays", true);
|
||||||
|
WriteParameter(param, category, "MakeImage", "WaitBeforeTakingPicture", false);
|
||||||
|
WriteParameter(param, category, "MakeImage", "ImageQuality", false);
|
||||||
|
WriteParameter(param, category, "MakeImage", "ImageSize", false, true, true);
|
||||||
|
|
||||||
WriteParameter(param, "Digits", "Model", false);
|
WriteParameter(param, category, "Alignment", "SearchFieldX", false);
|
||||||
WriteParameter(param, "Digits", "LogImageLocation", false);
|
WriteParameter(param, category, "Alignment", "SearchFieldY", false);
|
||||||
WriteParameter(param, "Digits", "LogfileRetentionInDays", false);
|
WriteParameter(param, category, "Alignment", "AlignmentAlgo", true, true, true);
|
||||||
WriteParameter(param, "Digits", "ModelInputSize", false, false, 2);
|
|
||||||
|
WriteParameter(param, category, "Digits", "Model", false);
|
||||||
|
WriteParameter(param, category, "Digits", "LogImageLocation", true);
|
||||||
|
WriteParameter(param, category, "Digits", "LogfileRetentionInDays", true);
|
||||||
|
WriteParameter(param, category, "Digits", "ModelInputSize", false, false, 2);
|
||||||
|
|
||||||
WriteParameter(param, "Analog", "Model", false);
|
WriteParameter(param, category, "Analog", "Model", false);
|
||||||
WriteParameter(param, "Analog", "LogImageLocation", false);
|
WriteParameter(param, category, "Analog", "LogImageLocation", true);
|
||||||
WriteParameter(param, "Analog", "LogfileRetentionInDays", false);
|
WriteParameter(param, category, "Analog", "LogfileRetentionInDays", true);
|
||||||
WriteParameter(param, "Analog", "ModelInputSize", false, false, 2);
|
WriteParameter(param, category, "Analog", "ModelInputSize", false, false, 2);
|
||||||
|
|
||||||
WriteParameter(param, "PostProcessing", "DecimalShift", true);
|
WriteParameter(param, category, "PostProcessing", "DecimalShift", true);
|
||||||
WriteParameter(param, "PostProcessing", "PreValueUse", true, true);
|
WriteParameter(param, category, "PostProcessing", "PreValueUse", true, true);
|
||||||
WriteParameter(param, "PostProcessing", "PreValueAgeStartup", true);
|
WriteParameter(param, category, "PostProcessing", "PreValueAgeStartup", true);
|
||||||
WriteParameter(param, "PostProcessing", "AllowNegativeRates", true, true);
|
WriteParameter(param, category, "PostProcessing", "AllowNegativeRates", true, true);
|
||||||
WriteParameter(param, "PostProcessing", "MaxRateValue", true);
|
WriteParameter(param, category, "PostProcessing", "MaxRateValue", true);
|
||||||
WriteParameter(param, "PostProcessing", "ErrorMessage", true, true);
|
WriteParameter(param, category, "PostProcessing", "ErrorMessage", true, true);
|
||||||
WriteParameter(param, "PostProcessing", "CheckDigitIncreaseConsistency", true, true);
|
WriteParameter(param, category, "PostProcessing", "CheckDigitIncreaseConsistency", true, true);
|
||||||
|
|
||||||
WriteParameter(param, "MQTT", "Uri", true);
|
WriteParameter(param, category, "MQTT", "Uri", true);
|
||||||
WriteParameter(param, "MQTT", "Topic", true);
|
WriteParameter(param, category, "MQTT", "Topic", true);
|
||||||
WriteParameter(param, "MQTT", "TopicError", true);
|
WriteParameter(param, category, "MQTT", "TopicError", true);
|
||||||
WriteParameter(param, "MQTT", "ClientID", true);
|
WriteParameter(param, category, "MQTT", "ClientID", true);
|
||||||
WriteParameter(param, "MQTT", "user", true);
|
WriteParameter(param, category, "MQTT", "user", true);
|
||||||
WriteParameter(param, "MQTT", "password", true);
|
WriteParameter(param, category, "MQTT", "password", true);
|
||||||
|
|
||||||
WriteParameter(param, "AutoTimer", "AutoStart", true, true);
|
WriteParameter(param, category, "AutoTimer", "AutoStart", true, true);
|
||||||
WriteParameter(param, "AutoTimer", "Intervall", true);
|
WriteParameter(param, category, "AutoTimer", "Intervall", true);
|
||||||
|
|
||||||
WriteParameter(param, "Debug", "Logfile", true, true);
|
WriteParameter(param, category, "Debug", "Logfile", true, true);
|
||||||
WriteParameter(param, "Debug", "LogfileRetentionInDays", true);
|
WriteParameter(param, category, "Debug", "LogfileRetentionInDays", true);
|
||||||
|
|
||||||
WriteParameter(param, "System", "TimeZone", true);
|
WriteParameter(param, category, "System", "TimeZone", true);
|
||||||
WriteParameter(param, "System", "TimeServer", true);
|
WriteParameter(param, category, "System", "Hostname", true);
|
||||||
|
WriteParameter(param, category, "System", "TimeServer", true);
|
||||||
}
|
}
|
||||||
|
|
||||||
function WriteConfig(){
|
function ReadParameterAll()
|
||||||
|
{
|
||||||
|
category["Analog"]["enabled"] = document.getElementById("Category_Analog_enabled").checked;
|
||||||
|
category["MQTT"]["enabled"] = document.getElementById("Category_MQTT_enabled").checked;
|
||||||
|
|
||||||
ReadParameter(param, "MakeImage", "LogImageLocation", true);
|
ReadParameter(param, "MakeImage", "LogImageLocation", true);
|
||||||
ReadParameter(param, "MakeImage", "LogfileRetentionInDays", true);
|
ReadParameter(param, "MakeImage", "LogfileRetentionInDays", true);
|
||||||
ReadParameter(param, "MakeImage", "WaitBeforeTakingPicture", false);
|
ReadParameter(param, "MakeImage", "WaitBeforeTakingPicture", false);
|
||||||
@@ -728,7 +796,8 @@ function WriteConfig(){
|
|||||||
ReadParameter(param, "MakeImage", "ImageSize", false, true);
|
ReadParameter(param, "MakeImage", "ImageSize", false, true);
|
||||||
|
|
||||||
ReadParameter(param, "Alignment", "SearchFieldX", false);
|
ReadParameter(param, "Alignment", "SearchFieldX", false);
|
||||||
ReadParameter(param, "Alignment", "SearchFieldY", false);
|
ReadParameter(param, "Alignment", "SearchFieldY", false);
|
||||||
|
ReadParameter(param, "Alignment", "AlignmentAlgo", true, true);
|
||||||
|
|
||||||
ReadParameter(param, "Digits", "Model", false);
|
ReadParameter(param, "Digits", "Model", false);
|
||||||
ReadParameter(param, "Digits", "LogImageLocation", true);
|
ReadParameter(param, "Digits", "LogImageLocation", true);
|
||||||
@@ -762,21 +831,31 @@ function WriteConfig(){
|
|||||||
ReadParameter(param, "Debug", "LogfileRetentionInDays", true);
|
ReadParameter(param, "Debug", "LogfileRetentionInDays", true);
|
||||||
|
|
||||||
ReadParameter(param, "System", "TimeZone", true);
|
ReadParameter(param, "System", "TimeZone", true);
|
||||||
|
ReadParameter(param, "System", "Hostname", true);
|
||||||
ReadParameter(param, "System", "TimeServer", true);
|
ReadParameter(param, "System", "TimeServer", true);
|
||||||
|
|
||||||
FormatDecimalValue(param, "PostProcessing", "MaxRateValue");
|
FormatDecimalValue(param, "PostProcessing", "MaxRateValue");
|
||||||
|
}
|
||||||
|
|
||||||
return setConfigParameters(param);
|
function WriteConfig(){
|
||||||
|
ReadParameterAll();
|
||||||
|
return setConfigParameters(param, category);
|
||||||
}
|
}
|
||||||
|
|
||||||
function FormatDecimalValue(_param, _cat, _name) {
|
function FormatDecimalValue(_param, _cat, _name) {
|
||||||
for (var j = 1; j <= _param[_cat][_name]["anzpara"]; ++j) {
|
for (var j = 1; j <= _param[_cat][_name]["anzParam"]; ++j) {
|
||||||
var _val = _param[_cat][_name]["value"+j];
|
var _val = _param[_cat][_name]["value"+j];
|
||||||
_val = _val.replace(",", ".");
|
_val = _val.replace(",", ".");
|
||||||
_param[_cat][_name]["value"+j] = _val;
|
_param[_cat][_name]["value"+j] = _val;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function UpdateAfterCategoryCheck() {
|
||||||
|
ReadParameterAll();
|
||||||
|
category["Analog"]["enabled"] = document.getElementById("Category_Analog_enabled").checked;
|
||||||
|
UpdateInput();
|
||||||
|
}
|
||||||
|
|
||||||
function UpdateExpertModus()
|
function UpdateExpertModus()
|
||||||
{
|
{
|
||||||
var _style = 'display:none;';
|
var _style = 'display:none;';
|
||||||
|
|||||||
@@ -101,6 +101,7 @@ th, td {
|
|||||||
|
|
||||||
<script type="text/javascript" src="./gethost.js"></script>
|
<script type="text/javascript" src="./gethost.js"></script>
|
||||||
<script type="text/javascript" src="./readconfig.js"></script>
|
<script type="text/javascript" src="./readconfig.js"></script>
|
||||||
|
<script type="text/javascript" src="./readconfigcommon.js"></script>
|
||||||
|
|
||||||
<script language="JavaScript">
|
<script language="JavaScript">
|
||||||
var canvas = document.getElementById('canvas'),
|
var canvas = document.getElementById('canvas'),
|
||||||
|
|||||||
@@ -45,6 +45,7 @@ p {font-size: 1em;}
|
|||||||
|
|
||||||
<script type="text/javascript" src="./gethost.js"></script>
|
<script type="text/javascript" src="./gethost.js"></script>
|
||||||
<script type="text/javascript" src="./readconfigparam.js"></script>
|
<script type="text/javascript" src="./readconfigparam.js"></script>
|
||||||
|
<script type="text/javascript" src="./readconfigcommon.js"></script>
|
||||||
|
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
var canvas = document.getElementById('canvas'),
|
var canvas = document.getElementById('canvas'),
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ table {
|
|||||||
|
|
||||||
<script type="text/javascript" src="./gethost.js"></script>
|
<script type="text/javascript" src="./gethost.js"></script>
|
||||||
<script type="text/javascript" src="./readconfig.js"></script>
|
<script type="text/javascript" src="./readconfig.js"></script>
|
||||||
|
<script type="text/javascript" src="./readconfigcommon.js"></script>
|
||||||
|
|
||||||
<script language="JavaScript">
|
<script language="JavaScript">
|
||||||
var canvas = document.getElementById('canvas'),
|
var canvas = document.getElementById('canvas'),
|
||||||
|
|||||||
@@ -7,8 +7,8 @@ function getbasepath(){
|
|||||||
var host = window.location.hostname;
|
var host = window.location.hostname;
|
||||||
if ((host == "127.0.0.1") || (host == "localhost"))
|
if ((host == "127.0.0.1") || (host == "localhost"))
|
||||||
{
|
{
|
||||||
host = "http://192.168.2.118"; // jomjol interner test
|
// host = "http://192.168.2.118"; // jomjol interner test
|
||||||
// host = "http://192.168.178.26"; // jomjol interner test
|
host = "http://192.168.178.26"; // jomjol interner test
|
||||||
// host = "http://192.168.178.22"; // jomjol interner Real
|
// host = "http://192.168.178.22"; // jomjol interner Real
|
||||||
// host = "."; // jomjol interner localhost
|
// host = "."; // jomjol interner localhost
|
||||||
|
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ var ref = new Array(2);
|
|||||||
var digit = new Array(0);
|
var digit = new Array(0);
|
||||||
var analog = new Array(0);
|
var analog = new Array(0);
|
||||||
var initalrotate = new Object();
|
var initalrotate = new Object();
|
||||||
|
var analogEnabled = false;
|
||||||
|
var posAnalogHeader;
|
||||||
|
|
||||||
function MakeRefZW(zw, _basepath){
|
function MakeRefZW(zw, _basepath){
|
||||||
url = _basepath + "/editflow.html?task=cutref&in=/config/reference.jpg&out=/img_tmp/ref_zw_org.jpg&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"];
|
url = _basepath + "/editflow.html?task=cutref&in=/config/reference.jpg&out=/img_tmp/ref_zw_org.jpg&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"];
|
||||||
@@ -36,7 +38,9 @@ function ParseConfigAlignment(_aktline){
|
|||||||
var akt_ref = 0;
|
var akt_ref = 0;
|
||||||
++_aktline;
|
++_aktline;
|
||||||
|
|
||||||
while ((akt_ref < 2) && (_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
|
while ((_aktline < config_split.length)
|
||||||
|
&& !(config_split[_aktline][0] == "[")
|
||||||
|
&& !((config_split[_aktline][0] == ";") && (config_split[_aktline][1] == "["))) {
|
||||||
var linesplit = ZerlegeZeile(config_split[_aktline]);
|
var linesplit = ZerlegeZeile(config_split[_aktline]);
|
||||||
if ((linesplit[0].toUpperCase() == "INITIALMIRROR") && (linesplit.length > 1))
|
if ((linesplit[0].toUpperCase() == "INITIALMIRROR") && (linesplit.length > 1))
|
||||||
{
|
{
|
||||||
@@ -67,7 +71,9 @@ function ParseConfigDigit(_aktline){
|
|||||||
++_aktline;
|
++_aktline;
|
||||||
digit.length = 0;
|
digit.length = 0;
|
||||||
|
|
||||||
while ((_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
|
while ((_aktline < config_split.length)
|
||||||
|
&& !(config_split[_aktline][0] == "[")
|
||||||
|
&& !((config_split[_aktline][0] == ";") && (config_split[_aktline][1] == "["))) {
|
||||||
var linesplit = ZerlegeZeile(config_split[_aktline]);
|
var linesplit = ZerlegeZeile(config_split[_aktline]);
|
||||||
if (linesplit.length >= 5)
|
if (linesplit.length >= 5)
|
||||||
{
|
{
|
||||||
@@ -86,12 +92,17 @@ function ParseConfigDigit(_aktline){
|
|||||||
return _aktline;
|
return _aktline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function GetAnalogEnabled() {
|
||||||
|
return analogEnabled;
|
||||||
|
}
|
||||||
|
|
||||||
function ParseConfigAnalog(_aktline){
|
function ParseConfigAnalog(_aktline){
|
||||||
++_aktline;
|
++_aktline;
|
||||||
analog.length = 0;
|
analog.length = 0;
|
||||||
|
|
||||||
while ((_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
|
while ((_aktline < config_split.length)
|
||||||
|
&& !(config_split[_aktline][0] == "[")
|
||||||
|
&& !((config_split[_aktline][0] == ";") && (config_split[_aktline][1] == "["))) {
|
||||||
var linesplit = ZerlegeZeile(config_split[_aktline]);
|
var linesplit = ZerlegeZeile(config_split[_aktline]);
|
||||||
if (linesplit.length >= 5)
|
if (linesplit.length >= 5)
|
||||||
{
|
{
|
||||||
@@ -121,11 +132,18 @@ function getROIInfo(_typeROI){
|
|||||||
return targetROI.slice(); // Kopie senden, nicht orginal!!!
|
return targetROI.slice(); // Kopie senden, nicht orginal!!!
|
||||||
}
|
}
|
||||||
|
|
||||||
function SaveROIToConfig(_ROIInfo, _typeROI, _basepath){
|
function SaveROIToConfig(_ROIInfo, _typeROI, _basepath, _enabled){
|
||||||
if (_typeROI == "[Digits]"){
|
if (_typeROI == "[Digits]"){
|
||||||
targetROI = digit;
|
targetROI = digit;
|
||||||
}
|
}
|
||||||
if (_typeROI == "[Analog]"){
|
if (_typeROI == "[Analog]"){
|
||||||
|
if (_enabled) {
|
||||||
|
text = _typeROI;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
text = ";" + _typeROI;
|
||||||
|
}
|
||||||
|
config_split[posAnalogHeader] = text;
|
||||||
targetROI = analog;
|
targetROI = analog;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -165,16 +183,20 @@ function ParseConfig() {
|
|||||||
var aktline = 0;
|
var aktline = 0;
|
||||||
|
|
||||||
while (aktline < config_split.length){
|
while (aktline < config_split.length){
|
||||||
if (config_split[aktline].trim().toUpperCase() == "[ALIGNMENT]") {
|
if ((config_split[aktline].trim().toUpperCase() == "[ALIGNMENT]") || (config_split[aktline].trim().toUpperCase() == ";[ALIGNMENT]")){
|
||||||
aktline = ParseConfigAlignment(aktline);
|
aktline = ParseConfigAlignment(aktline);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if (config_split[aktline].trim().toUpperCase() == "[DIGITS]") {
|
if ((config_split[aktline].trim().toUpperCase() == "[DIGITS]") || (config_split[aktline].trim().toUpperCase() == ";[DIGITS]")){
|
||||||
aktline = ParseConfigDigit(aktline);
|
aktline = ParseConfigDigit(aktline);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config_split[aktline].trim().toUpperCase() == "[ANALOG]") {
|
if ((config_split[aktline].trim().toUpperCase() == "[ANALOG]") || (config_split[aktline].trim().toUpperCase() == ";[ANALOG]")) {
|
||||||
|
if (config_split[aktline][0] == "[") {
|
||||||
|
analogEnabled = true;
|
||||||
|
posAnalogHeader = aktline;
|
||||||
|
}
|
||||||
aktline = ParseConfigAnalog(aktline);
|
aktline = ParseConfigAnalog(aktline);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
@@ -313,19 +335,6 @@ function MakeContrastImageZW(zw, _enhance, _basepath){
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function createReader(file) {
|
|
||||||
var image = new Image();
|
|
||||||
reader.onload = function(evt) {
|
|
||||||
var image = new Image();
|
|
||||||
image.onload = function(evt) {
|
|
||||||
var width = this.width;
|
|
||||||
var height = this.height;
|
|
||||||
alert (width); // will produce something like 198
|
|
||||||
};
|
|
||||||
image.src = evt.target.result;
|
|
||||||
};
|
|
||||||
reader.readAsDataURL(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
function GetReferenceSize(name){
|
function GetReferenceSize(name){
|
||||||
img = new Image();
|
img = new Image();
|
||||||
@@ -346,83 +355,6 @@ function GetReferenceSize(name){
|
|||||||
return [img.width, img.height];
|
return [img.width, img.height];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
function ZerlegeZeile(input)
|
|
||||||
{
|
|
||||||
var Output = Array(0);
|
|
||||||
delimiter = " =,\r";
|
|
||||||
|
|
||||||
input = trim(input, delimiter);
|
|
||||||
var pos = findDelimiterPos(input, delimiter);
|
|
||||||
var token;
|
|
||||||
while (pos > -1) {
|
|
||||||
token = input.substr(0, pos);
|
|
||||||
token = trim(token, delimiter);
|
|
||||||
Output.push(token);
|
|
||||||
input = input.substr(pos+1, input.length);
|
|
||||||
input = trim(input, delimiter);
|
|
||||||
pos = findDelimiterPos(input, delimiter);
|
|
||||||
}
|
|
||||||
Output.push(input);
|
|
||||||
|
|
||||||
return Output;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function findDelimiterPos(input, delimiter)
|
|
||||||
{
|
|
||||||
var pos = -1;
|
|
||||||
var zw;
|
|
||||||
var akt_del;
|
|
||||||
|
|
||||||
for (var anz = 0; anz < delimiter.length; ++anz)
|
|
||||||
{
|
|
||||||
akt_del = delimiter[anz];
|
|
||||||
zw = input.indexOf(akt_del);
|
|
||||||
if (zw > -1)
|
|
||||||
{
|
|
||||||
if (pos > -1)
|
|
||||||
{
|
|
||||||
if (zw < pos)
|
|
||||||
pos = zw;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
pos = zw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function trim(istring, adddelimiter)
|
|
||||||
{
|
|
||||||
while ((istring.length > 0) && (adddelimiter.indexOf(istring[0]) >= 0)){
|
|
||||||
istring = istring.substr(1, istring.length-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
while ((istring.length > 0) && (adddelimiter.indexOf(istring[istring.length-1]) >= 0)){
|
|
||||||
istring = istring.substr(0, istring.length-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return istring;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function loadConfig(_basepath) {
|
|
||||||
var xhttp = new XMLHttpRequest();
|
|
||||||
try {
|
|
||||||
url = _basepath + '/fileserver/config/config.ini';
|
|
||||||
xhttp.open("GET", url, false);
|
|
||||||
xhttp.send();
|
|
||||||
config_gesamt = xhttp.responseText;
|
|
||||||
}
|
|
||||||
catch (error)
|
|
||||||
{
|
|
||||||
// alert("Deleting Config.ini failed");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function getConfig() {
|
function getConfig() {
|
||||||
return config_gesamt;
|
return config_gesamt;
|
||||||
@@ -438,76 +370,7 @@ function dataURLtoBlob(dataurl) {
|
|||||||
}
|
}
|
||||||
return new Blob([u8arr], {type:mime});
|
return new Blob([u8arr], {type:mime});
|
||||||
}
|
}
|
||||||
|
|
||||||
function FileCopyOnServer(_source, _target, _basepath = ""){
|
|
||||||
url = _basepath + "/editflow.html?task=copy&in=" + _source + "&out=" + _target;
|
|
||||||
var xhttp = new XMLHttpRequest();
|
|
||||||
try {
|
|
||||||
xhttp.open("GET", url, false);
|
|
||||||
xhttp.send(); }
|
|
||||||
catch (error)
|
|
||||||
{
|
|
||||||
// alert("Deleting Config.ini failed");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function FileDeleteOnServer(_filename, _basepath = ""){
|
|
||||||
var xhttp = new XMLHttpRequest();
|
|
||||||
var okay = false;
|
|
||||||
|
|
||||||
xhttp.onreadystatechange = function() {
|
|
||||||
if (xhttp.readyState == 4) {
|
|
||||||
if (xhttp.status == 200) {
|
|
||||||
okay = true;
|
|
||||||
} else if (xhttp.status == 0) {
|
|
||||||
// alert("Server closed the connection on delete abruptly!");
|
|
||||||
// location.reload()
|
|
||||||
} else {
|
|
||||||
// alert(xhttp.status + " Error!\n" + xhttp.responseText);
|
|
||||||
// location.reload()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
try {
|
|
||||||
var url = _basepath + "/delete" + _filename;
|
|
||||||
xhttp.open("POST", url, false);
|
|
||||||
xhttp.send();
|
|
||||||
}
|
|
||||||
catch (error)
|
|
||||||
{
|
|
||||||
// alert("Deleting Config.ini failed");
|
|
||||||
}
|
|
||||||
|
|
||||||
return okay;
|
|
||||||
}
|
|
||||||
|
|
||||||
function FileSendContent(_content, _filename, _basepath = ""){
|
|
||||||
var xhttp = new XMLHttpRequest();
|
|
||||||
var okay = false;
|
|
||||||
|
|
||||||
xhttp.onreadystatechange = function() {
|
|
||||||
if (xhttp.readyState == 4) {
|
|
||||||
if (xhttp.status == 200) {
|
|
||||||
okay = true;
|
|
||||||
} else if (xhttp.status == 0) {
|
|
||||||
alert("Server closed the connection abruptly!");
|
|
||||||
} else {
|
|
||||||
alert(xhttp.status + " Error!\n" + xhttp.responseText);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
|
||||||
upload_path = _basepath + "/upload" + _filename;
|
|
||||||
xhttp.open("POST", upload_path, false);
|
|
||||||
xhttp.send(_content);
|
|
||||||
}
|
|
||||||
catch (error)
|
|
||||||
{
|
|
||||||
// alert("Deleting Config.ini failed");
|
|
||||||
}
|
|
||||||
return okay;
|
|
||||||
}
|
|
||||||
|
|
||||||
function SaveReferenceImage(_id_canvas, _filename, _doDelete, _basepath = ""){
|
function SaveReferenceImage(_id_canvas, _filename, _doDelete, _basepath = ""){
|
||||||
if (_doDelete){
|
if (_doDelete){
|
||||||
|
|||||||
263
sd-card/html/readconfigcommon.js
Normal file
263
sd-card/html/readconfigcommon.js
Normal file
@@ -0,0 +1,263 @@
|
|||||||
|
function readconfig_Version(){
|
||||||
|
return "1.0.0 - 20200910";
|
||||||
|
}
|
||||||
|
|
||||||
|
function SaveConfigToServer(_basepath){
|
||||||
|
// leere Zeilen am Ende löschen
|
||||||
|
var zw = config_split.length - 1;
|
||||||
|
while (config_split[zw] == "") {
|
||||||
|
config_split.pop();
|
||||||
|
}
|
||||||
|
|
||||||
|
var config_gesamt = "";
|
||||||
|
for (var i = 0; i < config_split.length; ++i)
|
||||||
|
{
|
||||||
|
config_gesamt = config_gesamt + config_split[i] + "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
FileDeleteOnServer("/config/config.ini", _basepath);
|
||||||
|
|
||||||
|
FileSendContent(config_gesamt, "/config/config.ini", _basepath);
|
||||||
|
}
|
||||||
|
|
||||||
|
function UpdateConfigFileReferenceChange(_basepath){
|
||||||
|
for (var _index = 0; _index < ref.length; ++_index){
|
||||||
|
var zeile = ref[_index]["name"] + " " + ref[_index]["x"] + " " + ref[_index]["y"];
|
||||||
|
var _pos = ref[_index]["pos_ref"];
|
||||||
|
config_split[_pos] = zeile;
|
||||||
|
}
|
||||||
|
|
||||||
|
zeile = "InitialRotate = " + initalrotate["angle"];
|
||||||
|
var _pos = initalrotate["pos_config"];
|
||||||
|
config_split[_pos] = zeile;
|
||||||
|
|
||||||
|
var mirror = false;
|
||||||
|
if (initalrotate.hasOwnProperty("mirror")) {
|
||||||
|
mirror = initalrotate["mirror"];
|
||||||
|
}
|
||||||
|
var mirror_pos = -1;
|
||||||
|
if (initalrotate.hasOwnProperty("pos_config_mirror")) {
|
||||||
|
mirror_pos = initalrotate["pos_config_mirror"];
|
||||||
|
}
|
||||||
|
if (mirror_pos > -1) {
|
||||||
|
if (mirror) {
|
||||||
|
config_split[mirror_pos] = "InitialMirror = true";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
config_split[mirror_pos] = "InitialMirror = false";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (mirror) { // neue Zeile muss an der richtigen Stelle eingefügt werden - hier direct nach [Alignment]
|
||||||
|
var aktline = 0;
|
||||||
|
|
||||||
|
while (aktline < config_split.length){
|
||||||
|
if (config_split[aktline].trim() == "[Alignment]") {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
aktline++
|
||||||
|
}
|
||||||
|
|
||||||
|
// fuege neue Zeile in config_split ein
|
||||||
|
var zw = config_split[config_split.length-1];
|
||||||
|
config_split.push(zw);
|
||||||
|
for (var j = config_split.length-2; j > aktline + 1; --j){
|
||||||
|
config_split[j] = config_split[j-1];
|
||||||
|
}
|
||||||
|
|
||||||
|
config_split[aktline + 1] = "InitialMirror = True"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
SaveConfigToServer(_basepath);
|
||||||
|
}
|
||||||
|
|
||||||
|
function UpdateConfig(zw, _index, _enhance, _basepath){
|
||||||
|
var zeile = zw["name"] + " " + zw["x"] + " " + zw["y"];
|
||||||
|
var _pos = ref[_index]["pos_ref"];
|
||||||
|
config_split[_pos] = zeile;
|
||||||
|
|
||||||
|
SaveConfigToServer(_basepath);
|
||||||
|
|
||||||
|
var namezw = zw["name"];
|
||||||
|
FileCopyOnServer("/img_tmp/ref_zw.jpg", namezw, _basepath);
|
||||||
|
var namezw = zw["name"].replace(".jpg", "_org.jpg");
|
||||||
|
FileCopyOnServer("/img_tmp/ref_zw_org.jpg", namezw, _basepath);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function createReader(file) {
|
||||||
|
var image = new Image();
|
||||||
|
reader.onload = function(evt) {
|
||||||
|
var image = new Image();
|
||||||
|
image.onload = function(evt) {
|
||||||
|
var width = this.width;
|
||||||
|
var height = this.height;
|
||||||
|
alert (width); // will produce something like 198
|
||||||
|
};
|
||||||
|
image.src = evt.target.result;
|
||||||
|
};
|
||||||
|
reader.readAsDataURL(file);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function ZerlegeZeile(input)
|
||||||
|
{
|
||||||
|
var Output = Array(0);
|
||||||
|
delimiter = " =,\r";
|
||||||
|
|
||||||
|
input = trim(input, delimiter);
|
||||||
|
var pos = findDelimiterPos(input, delimiter);
|
||||||
|
var token;
|
||||||
|
while (pos > -1) {
|
||||||
|
token = input.substr(0, pos);
|
||||||
|
token = trim(token, delimiter);
|
||||||
|
Output.push(token);
|
||||||
|
input = input.substr(pos+1, input.length);
|
||||||
|
input = trim(input, delimiter);
|
||||||
|
pos = findDelimiterPos(input, delimiter);
|
||||||
|
}
|
||||||
|
Output.push(input);
|
||||||
|
|
||||||
|
return Output;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function findDelimiterPos(input, delimiter)
|
||||||
|
{
|
||||||
|
var pos = -1;
|
||||||
|
var zw;
|
||||||
|
var akt_del;
|
||||||
|
|
||||||
|
for (var anz = 0; anz < delimiter.length; ++anz)
|
||||||
|
{
|
||||||
|
akt_del = delimiter[anz];
|
||||||
|
zw = input.indexOf(akt_del);
|
||||||
|
if (zw > -1)
|
||||||
|
{
|
||||||
|
if (pos > -1)
|
||||||
|
{
|
||||||
|
if (zw < pos)
|
||||||
|
pos = zw;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
pos = zw;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return pos;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function trim(istring, adddelimiter)
|
||||||
|
{
|
||||||
|
while ((istring.length > 0) && (adddelimiter.indexOf(istring[0]) >= 0)){
|
||||||
|
istring = istring.substr(1, istring.length-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
while ((istring.length > 0) && (adddelimiter.indexOf(istring[istring.length-1]) >= 0)){
|
||||||
|
istring = istring.substr(0, istring.length-1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return istring;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function loadConfig(_basepath) {
|
||||||
|
var xhttp = new XMLHttpRequest();
|
||||||
|
try {
|
||||||
|
url = _basepath + '/fileserver/config/config.ini';
|
||||||
|
xhttp.open("GET", url, false);
|
||||||
|
xhttp.send();
|
||||||
|
config_gesamt = xhttp.responseText;
|
||||||
|
}
|
||||||
|
catch (error)
|
||||||
|
{
|
||||||
|
// alert("Deleting Config.ini failed");
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function dataURLtoBlob(dataurl) {
|
||||||
|
var arr = dataurl.split(','), mime = arr[0].match(/:(.*?);/)[1],
|
||||||
|
bstr = atob(arr[1]), n = bstr.length, u8arr = new Uint8Array(n);
|
||||||
|
while(n--){
|
||||||
|
u8arr[n] = bstr.charCodeAt(n);
|
||||||
|
}
|
||||||
|
return new Blob([u8arr], {type:mime});
|
||||||
|
}
|
||||||
|
|
||||||
|
function FileCopyOnServer(_source, _target, _basepath = ""){
|
||||||
|
url = _basepath + "/editflow.html?task=copy&in=" + _source + "&out=" + _target;
|
||||||
|
var xhttp = new XMLHttpRequest();
|
||||||
|
try {
|
||||||
|
xhttp.open("GET", url, false);
|
||||||
|
xhttp.send(); }
|
||||||
|
catch (error)
|
||||||
|
{
|
||||||
|
// alert("Deleting Config.ini failed");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function FileDeleteOnServer(_filename, _basepath = ""){
|
||||||
|
var xhttp = new XMLHttpRequest();
|
||||||
|
var okay = false;
|
||||||
|
|
||||||
|
xhttp.onreadystatechange = function() {
|
||||||
|
if (xhttp.readyState == 4) {
|
||||||
|
if (xhttp.status == 200) {
|
||||||
|
okay = true;
|
||||||
|
} else if (xhttp.status == 0) {
|
||||||
|
// alert("Server closed the connection on delete abruptly!");
|
||||||
|
// location.reload()
|
||||||
|
} else {
|
||||||
|
// alert(xhttp.status + " Error!\n" + xhttp.responseText);
|
||||||
|
// location.reload()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
try {
|
||||||
|
var url = _basepath + "/delete" + _filename;
|
||||||
|
xhttp.open("POST", url, false);
|
||||||
|
xhttp.send();
|
||||||
|
}
|
||||||
|
catch (error)
|
||||||
|
{
|
||||||
|
// alert("Deleting Config.ini failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
return okay;
|
||||||
|
}
|
||||||
|
|
||||||
|
function FileSendContent(_content, _filename, _basepath = ""){
|
||||||
|
var xhttp = new XMLHttpRequest();
|
||||||
|
var okay = false;
|
||||||
|
|
||||||
|
xhttp.onreadystatechange = function() {
|
||||||
|
if (xhttp.readyState == 4) {
|
||||||
|
if (xhttp.status == 200) {
|
||||||
|
okay = true;
|
||||||
|
} else if (xhttp.status == 0) {
|
||||||
|
alert("Server closed the connection abruptly!");
|
||||||
|
} else {
|
||||||
|
alert(xhttp.status + " Error!\n" + xhttp.responseText);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
upload_path = _basepath + "/upload" + _filename;
|
||||||
|
xhttp.open("POST", upload_path, false);
|
||||||
|
xhttp.send(_content);
|
||||||
|
}
|
||||||
|
catch (error)
|
||||||
|
{
|
||||||
|
// alert("Deleting Config.ini failed");
|
||||||
|
}
|
||||||
|
return okay;
|
||||||
|
}
|
||||||
@@ -5,6 +5,7 @@ function readconfig_Version(){
|
|||||||
var config_gesamt;
|
var config_gesamt;
|
||||||
var config_split;
|
var config_split;
|
||||||
var param;
|
var param;
|
||||||
|
var category;
|
||||||
var ref = new Array(2);
|
var ref = new Array(2);
|
||||||
|
|
||||||
function ParseConfig() {
|
function ParseConfig() {
|
||||||
@@ -12,8 +13,12 @@ function ParseConfig() {
|
|||||||
var aktline = 0;
|
var aktline = 0;
|
||||||
|
|
||||||
param = new Object();
|
param = new Object();
|
||||||
|
category = new Object();
|
||||||
|
|
||||||
var catname = "MakeImage";
|
var catname = "MakeImage";
|
||||||
|
category[catname] = new Object();
|
||||||
|
category[catname]["enabled"] = false;
|
||||||
|
category[catname]["found"] = false;
|
||||||
param[catname] = new Object();
|
param[catname] = new Object();
|
||||||
ParamAddValue(param, catname, "LogImageLocation");
|
ParamAddValue(param, catname, "LogImageLocation");
|
||||||
ParamAddValue(param, catname, "WaitBeforeTakingPicture");
|
ParamAddValue(param, catname, "WaitBeforeTakingPicture");
|
||||||
@@ -22,25 +27,38 @@ function ParseConfig() {
|
|||||||
ParamAddValue(param, catname, "ImageSize");
|
ParamAddValue(param, catname, "ImageSize");
|
||||||
|
|
||||||
var catname = "Alignment";
|
var catname = "Alignment";
|
||||||
|
category[catname] = new Object();
|
||||||
|
category[catname]["enabled"] = false;
|
||||||
|
category[catname]["found"] = false;
|
||||||
param[catname] = new Object();
|
param[catname] = new Object();
|
||||||
ParamAddValue(param, catname, "SearchFieldX");
|
ParamAddValue(param, catname, "SearchFieldX");
|
||||||
ParamAddValue(param, catname, "SearchFieldY");
|
ParamAddValue(param, catname, "SearchFieldY");
|
||||||
|
ParamAddValue(param, catname, "AlignmentAlgo");
|
||||||
|
|
||||||
var catname = "Digits";
|
var catname = "Digits";
|
||||||
|
category[catname] = new Object();
|
||||||
|
category[catname]["enabled"] = false;
|
||||||
|
category[catname]["found"] = false;
|
||||||
param[catname] = new Object();
|
param[catname] = new Object();
|
||||||
ParamAddValue(param, catname, "Model");
|
ParamAddValue(param, catname, "Model");
|
||||||
ParamAddValue(param, catname, "LogImageLocation");
|
ParamAddValue(param, catname, "LogImageLocation");
|
||||||
ParamAddValue(param, catname, "LogfileRetentionInDays");
|
ParamAddValue(param, catname, "LogfileRetentionInDays");
|
||||||
ParamAddValue(param, catname, "ModelInputSize");
|
ParamAddValue(param, catname, "ModelInputSize", 2);
|
||||||
|
|
||||||
var catname = "Analog";
|
var catname = "Analog";
|
||||||
|
category[catname] = new Object();
|
||||||
|
category[catname]["enabled"] = false;
|
||||||
|
category[catname]["found"] = false;
|
||||||
param[catname] = new Object();
|
param[catname] = new Object();
|
||||||
ParamAddValue(param, catname, "Model");
|
ParamAddValue(param, catname, "Model");
|
||||||
ParamAddValue(param, catname, "LogImageLocation");
|
ParamAddValue(param, catname, "LogImageLocation");
|
||||||
ParamAddValue(param, catname, "LogfileRetentionInDays");
|
ParamAddValue(param, catname, "LogfileRetentionInDays");
|
||||||
ParamAddValue(param, catname, "ModelInputSize");
|
ParamAddValue(param, catname, "ModelInputSize", 2);
|
||||||
|
|
||||||
var catname = "PostProcessing";
|
var catname = "PostProcessing";
|
||||||
|
category[catname] = new Object();
|
||||||
|
category[catname]["enabled"] = false;
|
||||||
|
category[catname]["found"] = false;
|
||||||
param[catname] = new Object();
|
param[catname] = new Object();
|
||||||
ParamAddValue(param, catname, "DecimalShift");
|
ParamAddValue(param, catname, "DecimalShift");
|
||||||
ParamAddValue(param, catname, "PreValueUse");
|
ParamAddValue(param, catname, "PreValueUse");
|
||||||
@@ -51,6 +69,9 @@ function ParseConfig() {
|
|||||||
ParamAddValue(param, catname, "CheckDigitIncreaseConsistency");
|
ParamAddValue(param, catname, "CheckDigitIncreaseConsistency");
|
||||||
|
|
||||||
var catname = "MQTT";
|
var catname = "MQTT";
|
||||||
|
category[catname] = new Object();
|
||||||
|
category[catname]["enabled"] = false;
|
||||||
|
category[catname]["found"] = false;
|
||||||
param[catname] = new Object();
|
param[catname] = new Object();
|
||||||
ParamAddValue(param, catname, "Uri");
|
ParamAddValue(param, catname, "Uri");
|
||||||
ParamAddValue(param, catname, "Topic");
|
ParamAddValue(param, catname, "Topic");
|
||||||
@@ -60,227 +81,77 @@ function ParseConfig() {
|
|||||||
ParamAddValue(param, catname, "password");
|
ParamAddValue(param, catname, "password");
|
||||||
|
|
||||||
var catname = "AutoTimer";
|
var catname = "AutoTimer";
|
||||||
|
category[catname] = new Object();
|
||||||
|
category[catname]["enabled"] = false;
|
||||||
|
category[catname]["found"] = false;
|
||||||
param[catname] = new Object();
|
param[catname] = new Object();
|
||||||
ParamAddValue(param, catname, "AutoStart");
|
ParamAddValue(param, catname, "AutoStart");
|
||||||
ParamAddValue(param, catname, "Intervall");
|
ParamAddValue(param, catname, "Intervall");
|
||||||
|
|
||||||
var catname = "Debug";
|
var catname = "Debug";
|
||||||
|
category[catname] = new Object();
|
||||||
|
category[catname]["enabled"] = false;
|
||||||
|
category[catname]["found"] = false;
|
||||||
param[catname] = new Object();
|
param[catname] = new Object();
|
||||||
ParamAddValue(param, catname, "Logfile");
|
ParamAddValue(param, catname, "Logfile");
|
||||||
ParamAddValue(param, catname, "LogfileRetentionInDays");
|
ParamAddValue(param, catname, "LogfileRetentionInDays");
|
||||||
|
|
||||||
var catname = "System";
|
var catname = "System";
|
||||||
|
category[catname] = new Object();
|
||||||
|
category[catname]["enabled"] = false;
|
||||||
|
category[catname]["found"] = false;
|
||||||
param[catname] = new Object();
|
param[catname] = new Object();
|
||||||
ParamAddValue(param, catname, "TimeZone");
|
ParamAddValue(param, catname, "TimeZone");
|
||||||
ParamAddValue(param, catname, "TimeServer");
|
ParamAddValue(param, catname, "TimeServer");
|
||||||
ParamAddValue(param, catname, "AutoAdjustSummertime");
|
ParamAddValue(param, catname, "AutoAdjustSummertime");
|
||||||
|
ParamAddValue(param, catname, "Hostname");
|
||||||
ParamAddValue(param, catname, "SetupMode");
|
ParamAddValue(param, catname, "SetupMode");
|
||||||
|
|
||||||
while (aktline < config_split.length){
|
while (aktline < config_split.length){
|
||||||
if (config_split[aktline].trim().toUpperCase() == "[MAKEIMAGE]") {
|
for (var cat in category) {
|
||||||
aktline = ParseConfigParamMakeImage(aktline);
|
zw = cat.toUpperCase();
|
||||||
continue;
|
zw1 = "[" + zw + "]";
|
||||||
|
zw2 = ";[" + zw + "]";
|
||||||
|
if ((config_split[aktline].trim().toUpperCase() == zw1) || (config_split[aktline].trim().toUpperCase() == zw2)) {
|
||||||
|
if (config_split[aktline].trim().toUpperCase() == zw1) {
|
||||||
|
category[cat]["enabled"] = true;
|
||||||
|
}
|
||||||
|
category[cat]["found"] = true;
|
||||||
|
category[cat]["line"] = aktline;
|
||||||
|
aktline = ParseConfigParamAll(aktline, cat);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config_split[aktline].trim().toUpperCase() == "[ALIGNMENT]") {
|
|
||||||
aktline = ParseConfigParamAlignment(aktline);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config_split[aktline].trim().toUpperCase() == "[DIGITS]") {
|
|
||||||
aktline = ParseConfigParamDigit(aktline);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config_split[aktline].trim().toUpperCase() == "[ANALOG]") {
|
|
||||||
aktline = ParseConfigParamAnalog(aktline);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config_split[aktline].trim().toUpperCase() == "[POSTPROCESSING]") {
|
|
||||||
aktline = ParseConfigParamPostProcessing(aktline);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config_split[aktline].trim().toUpperCase() == "[MQTT]") {
|
|
||||||
aktline = ParseConfigParamMQTT(aktline);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config_split[aktline].trim().toUpperCase() == "[AUTOTIMER]") {
|
|
||||||
aktline = ParseConfigParamAutoTimer(aktline);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config_split[aktline].trim().toUpperCase() == "[DEBUG]") {
|
|
||||||
aktline = ParseConfigParamDebug(aktline);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (config_split[aktline].trim().toUpperCase() == "[SYSTEM]") {
|
|
||||||
aktline = ParseConfigParamSystem(aktline);
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
aktline++;
|
aktline++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function ParamAddValue(param, _cat, _param){
|
function ParamAddValue(param, _cat, _param, _anzParam = 1){
|
||||||
param[_cat][_param] = new Object();
|
param[_cat][_param] = new Object();
|
||||||
param[_cat][_param]["found"] = false;
|
param[_cat][_param]["found"] = false;
|
||||||
param[_cat][_param]["enabled"] = false;
|
param[_cat][_param]["enabled"] = false;
|
||||||
param[_cat][_param]["line"] = -1;
|
param[_cat][_param]["line"] = -1;
|
||||||
|
param[_cat][_param]["anzParam"] = _anzParam;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
function ParseConfigParamSystem(_aktline){
|
|
||||||
var akt_ref = 0;
|
function ParseConfigParamAll(_aktline, _catname){
|
||||||
++_aktline;
|
++_aktline;
|
||||||
|
|
||||||
var catname = "System";
|
while ((_aktline < config_split.length)
|
||||||
while ((akt_ref < 2) && (_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
|
&& !(config_split[_aktline][0] == "[")
|
||||||
var _input = config_split[_aktline];
|
&& !((config_split[_aktline][0] == ";") && (config_split[_aktline][1] == "["))) {
|
||||||
let [isCom, input] = isCommented(_input);
|
|
||||||
var linesplit = ZerlegeZeile(input, " =");
|
|
||||||
|
|
||||||
ParamExtractValue(param, linesplit, catname, "TimeZone", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "TimeServer", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "AutoAdjustSummertime", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "TimeUpdateIntervall", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "SetupMode", _aktline, isCom);
|
|
||||||
|
|
||||||
++_aktline;
|
|
||||||
}
|
|
||||||
return _aktline;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ParseConfigParamDebug(_aktline){
|
|
||||||
var akt_ref = 0;
|
|
||||||
++_aktline;
|
|
||||||
|
|
||||||
var catname = "Debug";
|
|
||||||
while ((akt_ref < 2) && (_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
|
|
||||||
var _input = config_split[_aktline];
|
var _input = config_split[_aktline];
|
||||||
let [isCom, input] = isCommented(_input);
|
let [isCom, input] = isCommented(_input);
|
||||||
var linesplit = ZerlegeZeile(input);
|
var linesplit = ZerlegeZeile(input);
|
||||||
|
ParamExtractValueAll(param, linesplit, _catname, _aktline, isCom);
|
||||||
ParamExtractValue(param, linesplit, catname, "Logfile", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "LogfileRetentionInDays", _aktline, isCom);
|
|
||||||
|
|
||||||
++_aktline;
|
++_aktline;
|
||||||
}
|
}
|
||||||
return _aktline;
|
return _aktline;
|
||||||
}
|
}
|
||||||
|
|
||||||
function ParseConfigParamAutoTimer(_aktline){
|
|
||||||
var akt_ref = 0;
|
|
||||||
++_aktline;
|
|
||||||
|
|
||||||
var catname = "AutoTimer";
|
|
||||||
while ((akt_ref < 2) && (_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
|
|
||||||
var _input = config_split[_aktline];
|
|
||||||
let [isCom, input] = isCommented(_input);
|
|
||||||
var linesplit = ZerlegeZeile(input);
|
|
||||||
|
|
||||||
ParamExtractValue(param, linesplit, catname, "AutoStart", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "Intervall", _aktline, isCom);
|
|
||||||
|
|
||||||
++_aktline;
|
|
||||||
}
|
|
||||||
return _aktline;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ParseConfigParamMQTT(_aktline){
|
|
||||||
var akt_ref = 0;
|
|
||||||
++_aktline;
|
|
||||||
|
|
||||||
var catname = "MQTT";
|
|
||||||
while ((akt_ref < 2) && (_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
|
|
||||||
var _input = config_split[_aktline];
|
|
||||||
let [isCom, input] = isCommented(_input);
|
|
||||||
var linesplit = ZerlegeZeile(input);
|
|
||||||
|
|
||||||
ParamExtractValue(param, linesplit, catname, "Uri", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "Topic", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "TopicError", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "ClientID", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "user", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "password", _aktline, isCom);
|
|
||||||
|
|
||||||
++_aktline;
|
|
||||||
}
|
|
||||||
return _aktline;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ParseConfigParamPostProcessing(_aktline){
|
|
||||||
var akt_ref = 0;
|
|
||||||
++_aktline;
|
|
||||||
|
|
||||||
var catname = "PostProcessing";
|
|
||||||
while ((akt_ref < 2) && (_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
|
|
||||||
var _input = config_split[_aktline];
|
|
||||||
let [isCom, input] = isCommented(_input);
|
|
||||||
var linesplit = ZerlegeZeile(input);
|
|
||||||
|
|
||||||
ParamExtractValue(param, linesplit, catname, "DecimalShift", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "PreValueUse", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "PreValueAgeStartup", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "AllowNegativeRates", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "MaxRateValue", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "ErrorMessage", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "CheckDigitIncreaseConsistency", _aktline, isCom);
|
|
||||||
|
|
||||||
++_aktline;
|
|
||||||
}
|
|
||||||
return _aktline;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ParseConfigParamAnalog(_aktline){
|
|
||||||
var akt_ref = 0;
|
|
||||||
++_aktline;
|
|
||||||
|
|
||||||
var catname = "Analog";
|
|
||||||
while ((akt_ref < 2) && (_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
|
|
||||||
var _input = config_split[_aktline];
|
|
||||||
let [isCom, input] = isCommented(_input);
|
|
||||||
var linesplit = ZerlegeZeile(input);
|
|
||||||
|
|
||||||
ParamExtractValue(param, linesplit, catname, "Model", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "LogImageLocation", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "LogfileRetentionInDays", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "ModelInputSize", _aktline, isCom, 2);
|
|
||||||
|
|
||||||
++_aktline;
|
|
||||||
}
|
|
||||||
return _aktline;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ParseConfigParamDigit(_aktline){
|
|
||||||
var akt_ref = 0;
|
|
||||||
++_aktline;
|
|
||||||
|
|
||||||
var catname = "Digits";
|
|
||||||
while ((akt_ref < 2) && (_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
|
|
||||||
var _input = config_split[_aktline];
|
|
||||||
let [isCom, input] = isCommented(_input);
|
|
||||||
var linesplit = ZerlegeZeile(input);
|
|
||||||
|
|
||||||
ParamExtractValue(param, linesplit, catname, "Model", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "LogImageLocation", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "LogfileRetentionInDays", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "ModelInputSize", _aktline, isCom, 2);
|
|
||||||
|
|
||||||
++_aktline;
|
|
||||||
}
|
|
||||||
return _aktline;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
function ParamExtractValue(_param, _linesplit, _catname, _paramname, _aktline, _iscom, _anzvalue = 1){
|
function ParamExtractValue(_param, _linesplit, _catname, _paramname, _aktline, _iscom, _anzvalue = 1){
|
||||||
if ((_linesplit[0].toUpperCase() == _paramname.toUpperCase()) && (_linesplit.length > _anzvalue))
|
if ((_linesplit[0].toUpperCase() == _paramname.toUpperCase()) && (_linesplit.length > _anzvalue))
|
||||||
{
|
{
|
||||||
@@ -294,66 +165,40 @@ function ParamExtractValue(_param, _linesplit, _catname, _paramname, _aktline, _
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function ParamExtractValueAll(_param, _linesplit, _catname, _aktline, _iscom){
|
||||||
function ParseConfigParamAlignment(_aktline){
|
for (var paramname in _param[_catname]) {
|
||||||
var akt_ref = 0;
|
if ((_linesplit[0].toUpperCase() == paramname.toUpperCase()) && (_linesplit.length > _param[_catname][paramname]["anzParam"]))
|
||||||
++_aktline;
|
{
|
||||||
|
_param[_catname][paramname]["found"] = true;
|
||||||
var catname = "Alignment";
|
_param[_catname][paramname]["enabled"] = !_iscom;
|
||||||
while ((akt_ref < 2) && (_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
|
_param[_catname][paramname]["line"] = _aktline;
|
||||||
var _input = config_split[_aktline];
|
for (var j = 1; j <= _param[_catname][paramname]["anzParam"]; ++j) {
|
||||||
let [isCom, input] = isCommented(_input);
|
_param[_catname][paramname]["value"+j] = _linesplit[j];
|
||||||
var linesplit = ZerlegeZeile(input);
|
}
|
||||||
|
}
|
||||||
ParamExtractValue(param, linesplit, catname, "SearchFieldX", _aktline, isCom);
|
}
|
||||||
ParamExtractValue(param, linesplit, catname, "SearchFieldY", _aktline, isCom);
|
|
||||||
|
|
||||||
++_aktline;
|
|
||||||
}
|
|
||||||
return _aktline;
|
|
||||||
}
|
|
||||||
|
|
||||||
function ParseConfigParamMakeImage(_aktline){
|
|
||||||
var akt_ref = 0;
|
|
||||||
++_aktline;
|
|
||||||
|
|
||||||
var catname = "MakeImage";
|
|
||||||
while ((akt_ref < 2) && (_aktline < config_split.length) && (config_split[_aktline][0] != "[")) {
|
|
||||||
var _input = config_split[_aktline];
|
|
||||||
let [isCom, input] = isCommented(_input);
|
|
||||||
var linesplit = ZerlegeZeile(input);
|
|
||||||
|
|
||||||
ParamExtractValue(param, linesplit, catname, "LogImageLocation", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "WaitBeforeTakingPicture", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "LogfileRetentionInDays", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "ImageQuality", _aktline, isCom);
|
|
||||||
ParamExtractValue(param, linesplit, catname, "ImageSize", _aktline, isCom);
|
|
||||||
|
|
||||||
++_aktline;
|
|
||||||
}
|
|
||||||
return _aktline;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function getConfigParameters() {
|
function getConfigParameters() {
|
||||||
return param;
|
return param;
|
||||||
}
|
}
|
||||||
|
|
||||||
function setConfigParameters(_param) {
|
function setConfigParameters(_param, _category) {
|
||||||
for (var cat in _param) {
|
for (var cat in _param) {
|
||||||
for (var name in _param[cat]) {
|
for (var name in _param[cat]) {
|
||||||
param[cat][name]["found"] = _param[cat][name]["found"];
|
param[cat][name]["found"] = _param[cat][name]["found"];
|
||||||
param[cat][name]["enabled"] = _param[cat][name]["enabled"];
|
param[cat][name]["enabled"] = _param[cat][name]["enabled"];
|
||||||
param[cat][name]["line"] = _param[cat][name]["line"];
|
param[cat][name]["line"] = _param[cat][name]["line"];
|
||||||
|
|
||||||
param[cat][name]["anzpara"] = _param[cat][name]["anzpara"];
|
param[cat][name]["anzParam"] = _param[cat][name]["anzParam"];
|
||||||
for (var j = 1; j <= _param[cat][name]["anzpara"]; ++j) {
|
for (var j = 1; j <= _param[cat][name]["anzParam"]; ++j) {
|
||||||
param[cat][name]["value"+j] = _param[cat][name]["value"+j];
|
param[cat][name]["value"+j] = _param[cat][name]["value"+j];
|
||||||
}
|
}
|
||||||
|
|
||||||
if (param[cat][name]["found"]) {
|
if (param[cat][name]["found"]) {
|
||||||
var text = name + " ="
|
var text = name + " ="
|
||||||
|
|
||||||
for (var j = 1; j <= _param[cat][name]["anzpara"]; ++j) {
|
for (var j = 1; j <= _param[cat][name]["anzParam"]; ++j) {
|
||||||
text = text + " " + param[cat][name]["value"+j];
|
text = text + " " + param[cat][name]["value"+j];
|
||||||
}
|
}
|
||||||
if (!param[cat][name]["enabled"]) {
|
if (!param[cat][name]["enabled"]) {
|
||||||
@@ -364,6 +209,19 @@ function setConfigParameters(_param) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (var cat in _category) {
|
||||||
|
if (category[cat]["found"])
|
||||||
|
{
|
||||||
|
category[cat]["enabled"] = _category[cat]["enabled"];
|
||||||
|
text = "[" + cat + "]";
|
||||||
|
if (!category[cat]["enabled"]) {
|
||||||
|
text = ";" + text;
|
||||||
|
}
|
||||||
|
config_split[category[cat]["line"]] = text;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
config_gesamt = config_split[0];
|
config_gesamt = config_split[0];
|
||||||
for (var i = 1; i < config_split.length; ++i){
|
for (var i = 1; i < config_split.length; ++i){
|
||||||
config_gesamt = config_gesamt + "\n" + config_split[i];
|
config_gesamt = config_gesamt + "\n" + config_split[i];
|
||||||
@@ -397,171 +255,16 @@ function SaveConfigToServer(_basepath){
|
|||||||
}
|
}
|
||||||
|
|
||||||
FileDeleteOnServer("/config/config.ini", _basepath);
|
FileDeleteOnServer("/config/config.ini", _basepath);
|
||||||
|
|
||||||
FileSendContent(config_gesamt, "/config/config.ini", _basepath);
|
FileSendContent(config_gesamt, "/config/config.ini", _basepath);
|
||||||
}
|
}
|
||||||
|
|
||||||
function createReader(file) {
|
|
||||||
var image = new Image();
|
|
||||||
reader.onload = function(evt) {
|
|
||||||
var image = new Image();
|
|
||||||
image.onload = function(evt) {
|
|
||||||
var width = this.width;
|
|
||||||
var height = this.height;
|
|
||||||
alert (width); // will produce something like 198
|
|
||||||
};
|
|
||||||
image.src = evt.target.result;
|
|
||||||
};
|
|
||||||
reader.readAsDataURL(file);
|
|
||||||
}
|
|
||||||
|
|
||||||
function ZerlegeZeile(input, delimiter = " =,")
|
|
||||||
{
|
|
||||||
var Output = Array(0);
|
|
||||||
// delimiter = " =,";
|
|
||||||
|
|
||||||
input = trim(input, delimiter);
|
|
||||||
var pos = findDelimiterPos(input, delimiter);
|
|
||||||
var token;
|
|
||||||
while (pos > -1) {
|
|
||||||
token = input.substr(0, pos);
|
|
||||||
token = trim(token, delimiter);
|
|
||||||
Output.push(token);
|
|
||||||
input = input.substr(pos+1, input.length);
|
|
||||||
input = trim(input, delimiter);
|
|
||||||
pos = findDelimiterPos(input, delimiter);
|
|
||||||
}
|
|
||||||
Output.push(input);
|
|
||||||
|
|
||||||
return Output;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
function findDelimiterPos(input, delimiter)
|
|
||||||
{
|
|
||||||
var pos = -1;
|
|
||||||
var zw;
|
|
||||||
var akt_del;
|
|
||||||
|
|
||||||
for (var anz = 0; anz < delimiter.length; ++anz)
|
|
||||||
{
|
|
||||||
akt_del = delimiter[anz];
|
|
||||||
zw = input.indexOf(akt_del);
|
|
||||||
if (zw > -1)
|
|
||||||
{
|
|
||||||
if (pos > -1)
|
|
||||||
{
|
|
||||||
if (zw < pos)
|
|
||||||
pos = zw;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
pos = zw;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return pos;
|
|
||||||
}
|
|
||||||
|
|
||||||
function trim(istring, adddelimiter)
|
|
||||||
{
|
|
||||||
while ((istring.length > 0) && (adddelimiter.indexOf(istring[0]) >= 0)){
|
|
||||||
istring = istring.substr(1, istring.length-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
while ((istring.length > 0) && (adddelimiter.indexOf(istring[istring.length-1]) >= 0)){
|
|
||||||
istring = istring.substr(0, istring.length-1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return istring;
|
|
||||||
}
|
|
||||||
|
|
||||||
function loadConfig(_basepath) {
|
|
||||||
var xhttp = new XMLHttpRequest();
|
|
||||||
config_gesamt = "";
|
|
||||||
try {
|
|
||||||
url = _basepath + '/fileserver/config/config.ini';
|
|
||||||
xhttp.open("GET", url, false);
|
|
||||||
xhttp.send();
|
|
||||||
config_gesamt = xhttp.responseText;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
catch (error)
|
|
||||||
{
|
|
||||||
// alert("Deleting Config.ini failed");
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
function getConfig() {
|
function getConfig() {
|
||||||
return config_gesamt;
|
return config_gesamt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function getConfigCategory() {
|
||||||
|
return category;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
function FileCopyOnServer(_source, _target, _basepath = ""){
|
|
||||||
url = _basepath + "/editflow.html?task=copy&in=" + _source + "&out=" + _target;
|
|
||||||
var xhttp = new XMLHttpRequest();
|
|
||||||
try {
|
|
||||||
xhttp.open("GET", url, false);
|
|
||||||
xhttp.send(); }
|
|
||||||
catch (error)
|
|
||||||
{
|
|
||||||
// alert("Deleting Config.ini failed");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
function FileDeleteOnServer(_filename, _basepath = ""){
|
|
||||||
var xhttp = new XMLHttpRequest();
|
|
||||||
var okay = false;
|
|
||||||
|
|
||||||
xhttp.onreadystatechange = function() {
|
|
||||||
if (xhttp.readyState == 4) {
|
|
||||||
if (xhttp.status == 200) {
|
|
||||||
okay = true;
|
|
||||||
} else if (xhttp.status == 0) {
|
|
||||||
// alert("Server closed the connection on delete abruptly!");
|
|
||||||
// location.reload()
|
|
||||||
} else {
|
|
||||||
// alert(xhttp.status + " Error!\n" + xhttp.responseText);
|
|
||||||
// location.reload()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
try {
|
|
||||||
var url = _basepath + "/delete" + _filename;
|
|
||||||
xhttp.open("POST", url, false);
|
|
||||||
xhttp.send();
|
|
||||||
}
|
|
||||||
catch (error)
|
|
||||||
{
|
|
||||||
// alert("Deleting Config.ini failed");
|
|
||||||
}
|
|
||||||
|
|
||||||
return okay;
|
|
||||||
}
|
|
||||||
|
|
||||||
function FileSendContent(_content, _filename, _basepath = ""){
|
|
||||||
var xhttp = new XMLHttpRequest();
|
|
||||||
var okay = false;
|
|
||||||
|
|
||||||
xhttp.onreadystatechange = function() {
|
|
||||||
if (xhttp.readyState == 4) {
|
|
||||||
if (xhttp.status == 200) {
|
|
||||||
okay = true;
|
|
||||||
} else if (xhttp.status == 0) {
|
|
||||||
alert("Server closed the connection abruptly!");
|
|
||||||
} else {
|
|
||||||
alert(xhttp.status + " Error!\n" + xhttp.responseText);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
try {
|
|
||||||
upload_path = _basepath + "/upload" + _filename;
|
|
||||||
xhttp.open("POST", upload_path, false);
|
|
||||||
xhttp.send(_content);
|
|
||||||
}
|
|
||||||
catch (error)
|
|
||||||
{
|
|
||||||
// alert("Deleting Config.ini failed");
|
|
||||||
}
|
|
||||||
return okay;
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
4.0.1
|
5.0.0
|
||||||
|
|||||||
Reference in New Issue
Block a user