diff --git a/README.md b/README.md index 001822c5..6f7edf21 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,12 @@ A 3d-printable housing can be found here: https://www.thingiverse.com/thing:4571 -##### Rolling - (2020-11-26) +##### Rolling - (2020-11-29) + +* New html interface for modification of configuration parameters (access to direct edit of `config.ini` moved to new expert mode) +* Preparation for feature implementation + +2020-11-26 * Bug fixing: CheckDigitConsistency not always working (case zero crossing & no increase) diff --git a/code/src/version.cpp b/code/src/version.cpp index 9b59d969..d8d8b6aa 100644 --- a/code/src/version.cpp +++ b/code/src/version.cpp @@ -1,4 +1,4 @@ -const char* GIT_REV="190e7e7"; +const char* GIT_REV="891adf3"; const char* GIT_TAG=""; const char* GIT_BRANCH="rolling"; -const char* BUILD_TIME="2020-11-27 16:57"; \ No newline at end of file +const char* BUILD_TIME="2020-11-29 15:14"; \ No newline at end of file diff --git a/code/version.cpp b/code/version.cpp index 9b59d969..d8d8b6aa 100644 --- a/code/version.cpp +++ b/code/version.cpp @@ -1,4 +1,4 @@ -const char* GIT_REV="190e7e7"; +const char* GIT_REV="891adf3"; const char* GIT_TAG=""; const char* GIT_BRANCH="rolling"; -const char* BUILD_TIME="2020-11-27 16:57"; \ No newline at end of file +const char* BUILD_TIME="2020-11-29 15:14"; \ No newline at end of file diff --git a/firmware/bootloader.bin b/firmware/bootloader.bin index 65baf2d0..0b2913ea 100644 Binary files a/firmware/bootloader.bin and b/firmware/bootloader.bin differ diff --git a/firmware/firmware.bin b/firmware/firmware.bin index c312e63b..e04e2071 100644 Binary files a/firmware/firmware.bin and b/firmware/firmware.bin differ diff --git a/firmware/html.zip b/firmware/html.zip index d8637d3b..126ae829 100644 Binary files a/firmware/html.zip and b/firmware/html.zip differ diff --git a/sd-card/html/edit_config_param.html b/sd-card/html/edit_config_param.html new file mode 100644 index 00000000..fa90c8f5 --- /dev/null +++ b/sd-card/html/edit_config_param.html @@ -0,0 +1,848 @@ + + + +Edit Config + + + + + + + + + + + + + +
+

Config.ini:

+
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Enable + + Parameter + + Value + + Information +

MakeImage

+ + + LogImageLocation + + + + Location to store raw images for logging +
+ + LogfileRetentionInDays + + + + Time to keep the raw image (in days -"0" = forever) +
+ + WaitBeforeTakingPicture + + + + Wait time between illumination switch on and take the picture (in seconds) +
+ + ImageQuality + + + + Quality index for picture (default = "5" - "0" high ... "63" low) +
+ + ImageSize + + + + Picture size camera (default = "VGA") +

Alignment

+ + SearchFieldX + + + + x size (width) in which the reference is searched (default = "20") +
+ + SearchFieldY + + + + y size (height) in which the reference is searched (default = "20") +

Digits

+ + Model + + + + path to CNN model file for image recognition (in seconds) +
+ + + LogImageLocation + + + + Location to store separated digits for logging +
+ + LogfileRetentionInDays + + + + Time to keep the separated digit images (in days -"0" = forever) +
+ + ModelInputSize + + x: + y: + + Size of the input image for the CNN model +

Analog

+ + Model + + + + path to CNN model file for image recognition (in seconds) +
+ + + LogImageLocation + + + + Location to store separated digits for logging +
+ + LogfileRetentionInDays + + + + Time to keep the separated digit images (in days -"0" = forever) +
+ + ModelInputSize + + x: + y: + + Size of the input image for the CNN model +

PostProcessing

+ + + DecimalShift + + + + shift the digit separator within the digital digits (positiv and negativ) +
+ + + PreValueUse + + + + Enable to use the previous read value for consistency checks - also on reboots +
+ + + PreValueAgeStartup + + + + Time (in minutes), how long a previous read value is valid after reboot (default = 720 min) +
+ + + AllowNegativeRates + + + + Set on "False" to ensure, that only positive changes are accepted (typically for counter) +
+ + + MaxRateValue + + + + Maximum change of reading from one to the next readout +
+ + + ErrorMessage + + + + Do not show error message in return value - in error case, the last valid number will be send out +
+ + + CheckDigitIncreaseConsistency + + + + Activate to enalbe additional consistency check - especially zero crossing check between digits +

MQTT

+ + + Uri + + + + URI to the MQTT broker including port: http:\\IP-ADRESS:port +
+ + + Topic + + + + MQTT topic, in which the value is registered +
+ + + TopicError + + + + MQTT topic, in which the error status is reported (empty = no error) +
+ + + ClientID + + + + ClientID to connect to the MQTT broker +
+ + + user + + + + user for MQTT authenficiation +
+ + + password + + + + password for MQTT authenficiation +

AutoTimer

+ + + AutoStart + + + + Start the image recognition immediatly after power up. False is basically for debugging. +
+ + + Intervall + + + + Intervall in which the counter is read (in minutes). Number must be greater than 3 minutes. +

Debug

+ + + Logfile + + + + Turn on/off the extended logging +
+ + LogfileRetentionInDays + + + + Time to keep the log files (in days - "0" = forever) +

System

+ + TimeZone + + + + Adjustment of time zone relative to UTC (in hours) +
+ + + AutoAdjustSummertime + + + + Autoadjust the summertime +
+ + + TimeUpdateIntervall + + + + Intervall for synchronizing the time with the time server (in hours) +
+ +

+ +

+

+ +

+

+ +

+ + + + + + + + \ No newline at end of file diff --git a/sd-card/html/gethost.js b/sd-card/html/gethost.js index c61614e8..79750188 100644 --- a/sd-card/html/gethost.js +++ b/sd-card/html/gethost.js @@ -5,10 +5,10 @@ function gethost_Version(){ function getbasepath(){ var host = window.location.hostname; - if (host == "127.0.0.1") + if ((host == "127.0.0.1") || (host == "localhost")) { - host = "http://192.168.178.26"; // jomjol interner test -// host = "http://192.168.178.22"; // jomjol interner Real +// host = "http://192.168.178.26"; // jomjol interner test + host = "http://192.168.178.22"; // jomjol interner Real // host = "."; // jomjol interner localhost } else diff --git a/sd-card/html/index_configure.html b/sd-card/html/index_configure.html index cda18685..f55e9a05 100644 --- a/sd-card/html/index_configure.html +++ b/sd-card/html/index_configure.html @@ -76,7 +76,7 @@ li.dropdown {

- +
\ No newline at end of file diff --git a/sd-card/html/readconfigparam.js b/sd-card/html/readconfigparam.js index 8ed63055..6092b9c8 100644 --- a/sd-card/html/readconfigparam.js +++ b/sd-card/html/readconfigparam.js @@ -4,216 +4,382 @@ function readconfig_Version(){ var config_gesamt; var config_split; +var param; var ref = new Array(2); -var digit = new Array(0); -var analog = new Array(0); -var initalrotate = new Object(); - -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"]; - var xhttp = new XMLHttpRequest(); - try { - xhttp.open("GET", url, false); - xhttp.send(); } - catch (error) - { -// alert("Deleting Config.ini failed"); - } - FileCopyOnServer("/img_tmp/ref_zw_org.jpg", "/img_tmp/ref_zw.jpg", _basepath); -} - -function GetCoordinates(index, _basepath){ - FileCopyOnServer(ref[index]["name"], "/img_tmp/ref_zw.jpg", _basepath); - - FileDeleteOnServer("/img_tmp/ref_zw_org.jpg", _basepath); - var namezw = ref[index]["name"].replace(".jpg", "_org.jpg"); - FileCopyOnServer(namezw, "/img_tmp/ref_zw_org.jpg", _basepath); - - return ref[index]; -} - -function ParseConfigAlignment(_aktline){ - var akt_ref = 0; - ++_aktline; - - while ((akt_ref < 2) && (_aktline < config_split.length) && (config_split[_aktline][0] != "[")) { - var linesplit = ZerlegeZeile(config_split[_aktline]); - if ((linesplit[0].toUpperCase() == "INITIALMIRROR") && (linesplit.length > 1)) - { - initalrotate["mirror"] = linesplit[1].toUpperCase().localeCompare("TRUE") == 0; - initalrotate["pos_config_mirror"] = _aktline; - } - - if (((linesplit[0].toUpperCase() == "INITALROTATE") || (linesplit[0].toUpperCase() == "INITIALROTATE")) && (linesplit.length > 1)) - { - initalrotate["angle"] = parseInt(linesplit[1]); - initalrotate["pos_config"] = _aktline; - } - if (linesplit.length == 3) - { - ref[akt_ref] = new Object(); - ref[akt_ref]["pos_ref"] = _aktline; - ref[akt_ref]["name"] = linesplit[0]; - ref[akt_ref]["x"] = linesplit[1]; - ref[akt_ref]["y"] = linesplit[2]; - akt_ref++; - } - ++_aktline; - } - return _aktline; -} - -function ParseConfigDigit(_aktline){ - ++_aktline; - digit.length = 0; - - while ((_aktline < config_split.length) && (config_split[_aktline][0] != "[")) { - var linesplit = ZerlegeZeile(config_split[_aktline]); - if (linesplit.length >= 5) - { - zw = new Object(); - zw["pos_ref"] = _aktline; - zw["name"] = linesplit[0]; - zw["x"] = linesplit[1]; - zw["y"] = linesplit[2]; - zw["dx"] = linesplit[3]; - zw["dy"] = linesplit[4]; - zw["ar"] = parseFloat(linesplit[3]) / parseFloat(linesplit[4]); - digit.push(zw); - } - ++_aktline; - } - return _aktline; -} - - -function ParseConfigAnalog(_aktline){ - ++_aktline; - analog.length = 0; - - while ((_aktline < config_split.length) && (config_split[_aktline][0] != "[")) { - var linesplit = ZerlegeZeile(config_split[_aktline]); - if (linesplit.length >= 5) - { - zw = new Object(); - zw["pos_ref"] = _aktline; - zw["name"] = linesplit[0]; - zw["x"] = linesplit[1]; - zw["y"] = linesplit[2]; - zw["dx"] = linesplit[3]; - zw["dy"] = linesplit[4]; - zw["ar"] = parseFloat(linesplit[3]) / parseFloat(linesplit[4]); - analog.push(zw); - } - ++_aktline; - } - return _aktline; -} - - -function getROIInfo(_typeROI){ - if (_typeROI == "[Digits]"){ - targetROI = digit; - } - if (_typeROI == "[Analog]"){ - targetROI = analog; - } - return targetROI.slice(); // Kopie senden, nicht orginal!!! -} - -function SaveROIToConfig(_ROIInfo, _typeROI, _basepath){ - if (_typeROI == "[Digits]"){ - targetROI = digit; - } - if (_typeROI == "[Analog]"){ - targetROI = analog; - } - - // Abstimmen Anzahl ROIs: - var _pos = targetROI[targetROI.length-1]["pos_ref"]; - - for (var i = targetROI.length; i < _ROIInfo.length; ++i){ - var zw = config_split[config_split.length-1]; - config_split.push(zw); - for (var j = config_split.length-2; j > _pos + 1; --j){ - config_split[j] = config_split[j-1]; - } - } - - for (i = targetROI.length-1; i > _ROIInfo.length-1; --i){ - var _zwpos = targetROI[i]["pos_ref"]; - config_split.splice(_zwpos, 1); - } - - var linewrite = 0; - for (i = 0; i < _ROIInfo.length; ++i){ - if (i < targetROI.length){ - linewrite = targetROI[i]["pos_ref"]; - } - else { - linewrite++; - } - config_split[linewrite] = _ROIInfo[i]["name"] + ", " + _ROIInfo[i]["x"] + ", " + _ROIInfo[i]["y"] + ", " + _ROIInfo[i]["dx"] + ", " + _ROIInfo[i]["dy"]; - } - - SaveConfigToServer(_basepath); -} - function ParseConfig() { config_split = config_gesamt.split("\n"); var aktline = 0; + param = new Object(); + + var catname = "MakeImage"; + param[catname] = new Object(); + ParamAddValue(param, catname, "LogImageLocation"); + ParamAddValue(param, catname, "WaitBeforeTakingPicture"); + ParamAddValue(param, catname, "LogfileRetentionInDays"); + ParamAddValue(param, catname, "ImageQuality"); + ParamAddValue(param, catname, "ImageSize"); + + var catname = "Alignment"; + param[catname] = new Object(); + ParamAddValue(param, catname, "SearchFieldX"); + ParamAddValue(param, catname, "SearchFieldY"); + + var catname = "Digits"; + param[catname] = new Object(); + ParamAddValue(param, catname, "Model"); + ParamAddValue(param, catname, "LogImageLocation"); + ParamAddValue(param, catname, "LogfileRetentionInDays"); + ParamAddValue(param, catname, "ModelInputSize"); + + var catname = "Analog"; + param[catname] = new Object(); + ParamAddValue(param, catname, "Model"); + ParamAddValue(param, catname, "LogImageLocation"); + ParamAddValue(param, catname, "LogfileRetentionInDays"); + ParamAddValue(param, catname, "ModelInputSize"); + + var catname = "PostProcessing"; + param[catname] = new Object(); + ParamAddValue(param, catname, "DecimalShift"); + ParamAddValue(param, catname, "PreValueUse"); + ParamAddValue(param, catname, "PreValueAgeStartup"); + ParamAddValue(param, catname, "AllowNegativeRates"); + ParamAddValue(param, catname, "MaxRateValue"); + ParamAddValue(param, catname, "ErrorMessage"); + ParamAddValue(param, catname, "CheckDigitIncreaseConsistency"); + + var catname = "MQTT"; + param[catname] = new Object(); + ParamAddValue(param, catname, "Uri"); + ParamAddValue(param, catname, "Topic"); + ParamAddValue(param, catname, "TopicError"); + ParamAddValue(param, catname, "ClientID"); + ParamAddValue(param, catname, "user"); + ParamAddValue(param, catname, "password"); + + var catname = "AutoTimer"; + param[catname] = new Object(); + ParamAddValue(param, catname, "AutoStart"); + ParamAddValue(param, catname, "Intervall"); + + var catname = "Debug"; + param[catname] = new Object(); + ParamAddValue(param, catname, "Logfile"); + ParamAddValue(param, catname, "LogfileRetentionInDays"); + + var catname = "System"; + param[catname] = new Object(); + ParamAddValue(param, catname, "TimeZone"); + ParamAddValue(param, catname, "AutoAdjustSummertime"); + ParamAddValue(param, catname, "TimeUpdateIntervall"); + while (aktline < config_split.length){ - if (config_split[aktline].trim().toUpperCase() == "[ALIGNMENT]") { - aktline = ParseConfigAlignment(aktline); + if (config_split[aktline].trim().toUpperCase() == "[MAKEIMAGE]") { + aktline = ParseConfigParamMakeImage(aktline); continue; } + + if (config_split[aktline].trim().toUpperCase() == "[ALIGNMENT]") { + aktline = ParseConfigParamAlignment(aktline); + continue; + } + if (config_split[aktline].trim().toUpperCase() == "[DIGITS]") { - aktline = ParseConfigDigit(aktline); + aktline = ParseConfigParamDigit(aktline); continue; } if (config_split[aktline].trim().toUpperCase() == "[ANALOG]") { - aktline = ParseConfigAnalog(aktline); + 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++; } } -function getPreRotate(){ - return initalrotate["angle"]; +function ParamAddValue(param, _cat, _param){ + param[_cat][_param] = new Object(); + param[_cat][_param]["found"] = false; + param[_cat][_param]["enabled"] = false; + param[_cat][_param]["line"] = -1; +}; + + +function ParseConfigParamSystem(_aktline){ + var akt_ref = 0; + ++_aktline; + + var catname = "System"; + 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, "TimeZone", _aktline, isCom); + ParamExtractValue(param, linesplit, catname, "AutoAdjustSummertime", _aktline, isCom); + ParamExtractValue(param, linesplit, catname, "TimeUpdateIntervall", _aktline, isCom); + + ++_aktline; + } + return _aktline; } -function setPreRotate(_prerotate){ - initalrotate["angle"] = _prerotate; +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]; + let [isCom, input] = isCommented(_input); + var linesplit = ZerlegeZeile(input); + + ParamExtractValue(param, linesplit, catname, "Logfile", _aktline, isCom); + ParamExtractValue(param, linesplit, catname, "LogfileRetentionInDays", _aktline, isCom); + + ++_aktline; + } + return _aktline; } -function getMirror(){ - if (initalrotate.hasOwnProperty("mirror")) { - return initalrotate["mirror"]; +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){ + if ((_linesplit[0].toUpperCase() == _paramname.toUpperCase()) && (_linesplit.length > _anzvalue)) + { + _param[_catname][_paramname]["found"] = true; + _param[_catname][_paramname]["enabled"] = !_iscom; + _param[_catname][_paramname]["line"] = _aktline; + _param[_catname][_paramname]["anzpara"] = _anzvalue; + for (var j = 1; j <= _anzvalue; ++j) { + _param[_catname][_paramname]["value"+j] = _linesplit[j]; + } } - return false; } -function setMirror(_mirror){ - initalrotate["mirror"] = _mirror; + +function ParseConfigParamAlignment(_aktline){ + var akt_ref = 0; + ++_aktline; + + var catname = "Alignment"; + 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, "SearchFieldX", _aktline, isCom); + ParamExtractValue(param, linesplit, catname, "SearchFieldY", _aktline, isCom); + + ++_aktline; + } + return _aktline; } -function SaveCanvasToImage(_canvas, _filename, _delete = true, _basepath = ""){ - var JPEG_QUALITY=0.8; - var dataUrl = _canvas.toDataURL('image/jpeg', JPEG_QUALITY); - var rtn = dataURLtoBlob(dataUrl); +function ParseConfigParamMakeImage(_aktline){ + var akt_ref = 0; + ++_aktline; - if (_delete) { - FileDeleteOnServer(_filename, _basepath); + 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() { + return param; +} + +function setConfigParameters(_param) { + for (var cat in _param) { + for (var name in _param[cat]) { + param[cat][name]["found"] = _param[cat][name]["found"]; + param[cat][name]["enabled"] = _param[cat][name]["enabled"]; + param[cat][name]["line"] = _param[cat][name]["line"]; + + param[cat][name]["anzpara"] = _param[cat][name]["anzpara"]; + for (var j = 1; j <= _param[cat][name]["anzpara"]; ++j) { + param[cat][name]["value"+j] = _param[cat][name]["value"+j]; + } + + if (param[cat][name]["found"]) { + var text = name + " =" + + for (var j = 1; j <= _param[cat][name]["anzpara"]; ++j) { + text = text + " " + param[cat][name]["value"+j]; + } + if (!param[cat][name]["enabled"]) { + text = ";" + text; + } + config_split[param[cat][name]["line"]] = text; + } + } } - - FileSendContent(rtn, _filename, _basepath); + + config_gesamt = config_split[0]; + for (var i = 1; i < config_split.length; ++i){ + config_gesamt = config_gesamt + "\n" + config_split[i]; + } + + return config_gesamt; } + +function isCommented(input) + { + let isComment = false; + if (input.charAt(0) == ';') { + isComment = true; + input = input.substr(1, input.length-1); + }; + return [isComment, input]; + } + function SaveConfigToServer(_basepath){ // leere Zeilen am Ende löschen var zw = config_split.length - 1; @@ -232,87 +398,6 @@ function SaveConfigToServer(_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 MakeContrastImageZW(zw, _enhance, _basepath){ - url = _basepath + "/editflow.html?task=cutref&in=/config/reference.jpg&out=/img_tmp/ref_zw.jpg" + "&x=" + zw["x"] + "&y=" + zw["y"] + "&dx=" + zw["dx"] + "&dy=" + zw["dy"]; - if (_enhance == true){ - url = url + "&enhance=true"; - } - - var xhttp = new XMLHttpRequest(); - try { - xhttp.open("GET", url, false); - xhttp.send(); } - catch (error) - { -// alert("Deleting Config.ini failed"); - } -} - function createReader(file) { var image = new Image(); reader.onload = function(evt) { @@ -327,26 +412,6 @@ function createReader(file) { reader.readAsDataURL(file); } -function GetReferenceSize(name){ - img = new Image(); - var xhttp = new XMLHttpRequest(); - - url = "http://192.168.178.22/fileserver" + name; - xhttp.open("GET", url, false); - xhttp.send(); - - var response = xhttp.responseText; - var binary = "" - - for (var responseText = xhttp.responseText, responseTextLen = responseText.length, binary = "", i = 0; i < responseTextLen; ++i) { - binary += String.fromCharCode(responseText.charCodeAt(i) & 255) - } - img.src = 'data:image/jpeg;base64,'+ window.btoa(binary); - - return [img.width, img.height]; -} - - function ZerlegeZeile(input) { var Output = Array(0); @@ -392,9 +457,7 @@ function findDelimiterPos(input, delimiter) } return pos; } - - - + function trim(istring, adddelimiter) { while ((istring.length > 0) && (adddelimiter.indexOf(istring[0]) >= 0)){ @@ -408,8 +471,6 @@ function trim(istring, adddelimiter) return istring; } - - function loadConfig(_basepath) { var xhttp = new XMLHttpRequest(); try { @@ -428,16 +489,6 @@ function getConfig() { return config_gesamt; } - - -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; @@ -508,18 +559,3 @@ function FileSendContent(_content, _filename, _basepath = ""){ } return okay; } - -function SaveReferenceImage(_id_canvas, _filename, _doDelete, _basepath = ""){ - if (_doDelete){ - FileDeleteOnServer(_filename, _basepath); - } - - var canvas = document.getElementById(_id_canvas); - var JPEG_QUALITY=0.8; - var dataUrl = canvas.toDataURL('image/jpeg', JPEG_QUALITY); - var rtn = dataURLtoBlob(dataUrl); - if (!FileSendContent(rtn, _filename, _basepath)){ - alert("Error on saving reference image (" + _filename + ")!\nPlease retry."); - location.reload(); - }; -} diff --git a/sd-card/html/version.txt b/sd-card/html/version.txt index 26aaba0e..227cea21 100644 --- a/sd-card/html/version.txt +++ b/sd-card/html/version.txt @@ -1 +1 @@ -1.2.0 +2.0.0