mirror of
https://github.com/jomjol/AI-on-the-edge-device.git
synced 2025-12-08 12:36:52 +03:00
Update configuration management
This commit is contained in:
@@ -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)
|
* Bug fixing: CheckDigitConsistency not always working (case zero crossing & no increase)
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
const char* GIT_REV="190e7e7";
|
const char* GIT_REV="891adf3";
|
||||||
const char* GIT_TAG="";
|
const char* GIT_TAG="";
|
||||||
const char* GIT_BRANCH="rolling";
|
const char* GIT_BRANCH="rolling";
|
||||||
const char* BUILD_TIME="2020-11-27 16:57";
|
const char* BUILD_TIME="2020-11-29 15:14";
|
||||||
@@ -1,4 +1,4 @@
|
|||||||
const char* GIT_REV="190e7e7";
|
const char* GIT_REV="891adf3";
|
||||||
const char* GIT_TAG="";
|
const char* GIT_TAG="";
|
||||||
const char* GIT_BRANCH="rolling";
|
const char* GIT_BRANCH="rolling";
|
||||||
const char* BUILD_TIME="2020-11-27 16:57";
|
const char* BUILD_TIME="2020-11-29 15:14";
|
||||||
Binary file not shown.
Binary file not shown.
Binary file not shown.
848
sd-card/html/edit_config_param.html
Normal file
848
sd-card/html/edit_config_param.html
Normal file
@@ -0,0 +1,848 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Edit Config</title>
|
||||||
|
<meta charset="utf-8">
|
||||||
|
|
||||||
|
<style>
|
||||||
|
h1 {font-size: 2em;}
|
||||||
|
h2 {font-size: 1.5em; margin-block-start: 0.0em; margin-block-end: 0.2em;}
|
||||||
|
h3 {font-size: 1.2em;}
|
||||||
|
p {font-size: 1em;}
|
||||||
|
|
||||||
|
.button {
|
||||||
|
padding: 5px 20px;
|
||||||
|
width: 211px;
|
||||||
|
font-size: 16px;
|
||||||
|
}
|
||||||
|
|
||||||
|
textarea {
|
||||||
|
font-size: 14px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body style="font-family: arial; padding: 0px 10px;">
|
||||||
|
|
||||||
|
<table style="width:100%">
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<h2>Config.ini:</h2>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<button class="button" id="Edit_Config_Direct" onclick="editConfigDirect()" style="display:none">Edit Config.ini direct</button>
|
||||||
|
<input type="checkbox" id="ExpertModus_enabled" value="1" onclick = 'UpdateExpertModus()' unchecked><label for="ExpertModus_enabled"> Expertenmodus </label>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<br>
|
||||||
|
|
||||||
|
<table>
|
||||||
|
<tr>
|
||||||
|
<th width="20px" style="text-align: left;">
|
||||||
|
Enable
|
||||||
|
</th>
|
||||||
|
<th width="200px" style="text-align: left;">
|
||||||
|
Parameter
|
||||||
|
</th>
|
||||||
|
<th style="text-align: left;">
|
||||||
|
Value
|
||||||
|
</th>
|
||||||
|
<th style="text-align: left;">
|
||||||
|
Information
|
||||||
|
</th>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="4" style="padding-left: 20px;"><h4>MakeImage</h4></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<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 >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="MakeImage_LogImageLocation_text" style="color:black;">LogImageLocation</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="name" id="MakeImage_LogImageLocation_value1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Location to store raw images for logging
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<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>
|
||||||
|
<td>
|
||||||
|
<class id="MakeImage_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="number" id="MakeImage_LogfileRetentionInDays_value1" size="13" min="0" step="1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Time to keep the raw image (in days -"0" = forever)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="expert" id="ex1">
|
||||||
|
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<class id="MakeImage_WaitBeforeTakingPicture_text" style="color:black;">WaitBeforeTakingPicture</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="number" id="MakeImage_WaitBeforeTakingPicture_value1" size="13" min="0" step="any">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Wait time between illumination switch on and take the picture (in seconds)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="expert" id="ex2">
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<class id="MakeImage_ImageQuality_text" style="color:black;">ImageQuality</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="number" id="MakeImage_ImageQuality_value1" size="13" min="0" max="63">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Quality index for picture (default = "5" - "0" high ... "63" low)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="expert" id="ex3">
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<class id="MakeImage_ImageSize_text" style="color:black;">ImageSize</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="MakeImage_ImageSize_value1">
|
||||||
|
<option value="0" selected>VGA</option>
|
||||||
|
<option value="1" >SVGA</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Picture size camera (default = "VGA")
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr class="expert" id="ex4">
|
||||||
|
<td colspan="4" style="padding-left: 20px;"><h4>Alignment</h4></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="expert" id="ex6">
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="Alignment_SearchFieldX_text" style="color:black;">SearchFieldX</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="number" name="name" id="Alignment_SearchFieldX_value1" size="13" min="1" step="1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
x size (width) in which the reference is searched (default = "20")
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="expert" id="ex8">
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<class id="Alignment_SearchFieldY_text" style="color:black;">SearchFieldY</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="number" name="name" id="Alignment_SearchFieldY_value1" size="13" min="1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
y size (height) in which the reference is searched (default = "20")
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr class="expert" id="ex4">
|
||||||
|
<td colspan="4" style="padding-left: 20px;"><h4>Digits</h4></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="Digits_Model_text" style="color:black;">Model</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" id="Digits_Model_value1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
path to CNN model file for image recognition (in seconds)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="Digits_LogImageLocation_enabled" value="1" onclick = 'document.getElementById("Digits_LogImageLocation_value1").disabled = !document.getElementById("Digits_LogImageLocation_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<class id="Digits_LogImageLocation_text" style="color:black;">LogImageLocation</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" name="name" id="Digits_LogImageLocation_value1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Location to store separated digits for logging
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<td"><input type="checkbox" id="Digits_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("Digits_LogfileRetentionInDays_value1").disabled = !document.getElementById("Digits_LogfileRetentionInDays_value1").disabled' unchecked ></td>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<class id="Digits_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="number" id="Digits_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 class="expert" id="ex9">
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<class id="Digits_ModelInputSize_text" style="color:black;">ModelInputSize</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
x: <input type="number" id="Digits_ModelInputSize_value1" style="width: 30px;" min="1" step="1">
|
||||||
|
y: <input type="number" id="Digits_ModelInputSize_value2" style="width: 30px;" min="1" step="1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Size of the input image for the CNN model
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr class="expert" id="ex4">
|
||||||
|
<td colspan="4" style="padding-left: 20px;"><h4>Analog</h4></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="Analog_Model_text" style="color:black;">Model</class>
|
||||||
|
</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>
|
||||||
|
<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 >
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<class id="Analog_LogImageLocation_text" style="color:black;">LogImageLocation</class>
|
||||||
|
</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>
|
||||||
|
<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>
|
||||||
|
<td>
|
||||||
|
<class id="Analog_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
|
||||||
|
</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 class="expert" id="ex10">
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<class id="Analog_ModelInputSize_text" style="color:black;">ModelInputSize</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
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">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Size of the input image for the CNN model
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="4" style="padding-left: 20px;"><h4>PostProcessing</h4></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="PostProcessing_DecimalShift_enabled" value="1" onclick = 'document.getElementById("PostProcessing_DecimalShift_value1").disabled = !document.getElementById("PostProcessing_DecimalShift_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="PostProcessing_DecimalShift_text" style="color:black;">DecimalShift</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="number" id="PostProcessing_DecimalShift_value1" step="1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
shift the digit separator within the digital digits (positiv and negativ)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="PostProcessing_PreValueUse_enabled" value="1" onclick = 'document.getElementById("PostProcessing_PreValueUse_value1").disabled = !document.getElementById("PostProcessing_PreValueUse_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="PostProcessing_PreValueUse_text" style="color:black;">PreValueUse</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="PostProcessing_PreValueUse_value1">
|
||||||
|
<option value="0" selected>True</option>
|
||||||
|
<option value="1" >False</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Enable to use the previous read value for consistency checks - also on reboots
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="expert" id="ex11">
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="PostProcessing_PreValueAgeStartup_enabled" value="1" onclick = 'document.getElementById("PostProcessing_PreValueAgeStartup_value1").disabled = !document.getElementById("PostProcessing_PreValueAgeStartup_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="PostProcessing_PreValueAgeStartup_text" style="color:black;">PreValueAgeStartup</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="number" id="PostProcessing_PreValueAgeStartup_value1" size="13" min="0">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Time (in minutes), how long a previous read value is valid after reboot (default = 720 min)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="PostProcessing_AllowNegativeRates_enabled" value="1" onclick = 'document.getElementById("PostProcessing_AllowNegativeRates_value1").disabled = !document.getElementById("PostProcessing_AllowNegativeRates_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="PostProcessing_AllowNegativeRates_text" style="color:black;">AllowNegativeRates</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="PostProcessing_AllowNegativeRates_value1">
|
||||||
|
<option value="0" selected>True</option>
|
||||||
|
<option value="1" >False</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Set on "False" to ensure, that only positive changes are accepted (typically for counter)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="PostProcessing_MaxRateValue_enabled" value="1" onclick = 'document.getElementById("PostProcessing_MaxRateValue_value1").disabled = !document.getElementById("PostProcessing_MaxRateValue_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="PostProcessing_MaxRateValue_text" style="color:black;">MaxRateValue</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="number" id="PostProcessing_MaxRateValue_value1" size="13" min="0" step="any">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Maximum change of reading from one to the next readout
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="expert" id="ex12">
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="PostProcessing_ErrorMessage_enabled" value="1" onclick = 'document.getElementById("PostProcessing_ErrorMessage_value1").disabled = !document.getElementById("PostProcessing_ErrorMessage_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="PostProcessing_ErrorMessage_text" style="color:black;">ErrorMessage</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="PostProcessing_ErrorMessage_value1">
|
||||||
|
<option value="0" selected>True</option>
|
||||||
|
<option value="1" >False</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Do not show error message in return value - in error case, the last valid number will be send out
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="PostProcessing_CheckDigitIncreaseConsistency_enabled" value="1" onclick = 'document.getElementById("PostProcessing_CheckDigitIncreaseConsistency_value1").disabled = !document.getElementById("PostProcessing_CheckDigitIncreaseConsistency_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="PostProcessing_CheckDigitIncreaseConsistency_text" style="color:black;">CheckDigitIncreaseConsistency</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="PostProcessing_CheckDigitIncreaseConsistency_value1">
|
||||||
|
<option value="0" selected>True</option>
|
||||||
|
<option value="1" >False</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Activate to enalbe additional consistency check - especially zero crossing check between digits
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="4" style="padding-left: 20px;"><h4>MQTT</h4></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="MQTT_Uri_enabled" value="1" onclick = 'document.getElementById("MQTT_Uri_value1").disabled = !document.getElementById("MQTT_Uri_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="MQTT_Uri_text" style="color:black;">Uri</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" id="MQTT_Uri_value1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
URI to the MQTT broker including port: http:\\IP-ADRESS:port
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="MQTT_Topic_enabled" value="1" onclick = 'document.getElementById("MQTT_Topic_value1").disabled = !document.getElementById("MQTT_Topic_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="MQTT_Topic_text" style="color:black;">Topic</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" id="MQTT_Topic_value1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
MQTT topic, in which the value is registered
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="MQTT_TopicError_enabled" value="1" onclick = 'document.getElementById("MQTT_TopicError_value1").disabled = !document.getElementById("MQTT_TopicError_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="MQTT_TopicError_text" style="color:black;">TopicError</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" id="MQTT_TopicError_value1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
MQTT topic, in which the error status is reported (empty = no error)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="MQTT_ClientID_enabled" value="1" onclick = 'document.getElementById("MQTT_ClientID_value1").disabled = !document.getElementById("MQTT_ClientID_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="MQTT_ClientID_text" style="color:black;">ClientID</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" id="MQTT_ClientID_value1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
ClientID to connect to the MQTT broker
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="MQTT_user_enabled" value="1" onclick = 'document.getElementById("MQTT_user_value1").disabled = !document.getElementById("MQTT_user_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="MQTT_user_text" style="color:black;">user</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" id="MQTT_user_value1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
user for MQTT authenficiation
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<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 >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="MQTT_password_text" style="color:black;">password</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="text" id="MQTT_password_value1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
password for MQTT authenficiation
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="4" style="padding-left: 20px;"><h4>AutoTimer</h4></td>
|
||||||
|
</tr>
|
||||||
|
<tr class="expert" id="ex13">
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="AutoTimer_AutoStart_enabled" value="1" onclick = 'document.getElementById("AutoTimer_AutoStart_value1").disabled = !document.getElementById("AutoTimer_AutoStart_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="AutoTimer_AutoStart_text" style="color:black;">AutoStart</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="AutoTimer_AutoStart_value1">
|
||||||
|
<option value="0" selected>True</option>
|
||||||
|
<option value="1" >False</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Start the image recognition immediatly after power up. False is basically for debugging.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="AutoTimer_Intervall_enabled" value="1" onclick = 'document.getElementById("AutoTimer_Intervall_value1").disabled = !document.getElementById("AutoTimerg_Intervall_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="AutoTimer_Intervall_text" style="color:black;">Intervall</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="number" id="AutoTimer_Intervall_value1" size="13" min="3" step="any">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Intervall in which the counter is read (in minutes). Number must be greater than 3 minutes.
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="4" style="padding-left: 20px;"><h4>Debug</h4></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="Debug_Logfile_enabled" value="1" onclick = 'document.getElementById("Debug_Logfile_value1").disabled = !document.getElementById("Debug_Logfile_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="Debug_Logfile_text" style="color:black;">Logfile</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="Debug_Logfile_value1">
|
||||||
|
<option value="0" selected>True</option>
|
||||||
|
<option value="1" >False</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Turn on/off the extended logging
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<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>
|
||||||
|
<td>
|
||||||
|
<class id="Debug_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="number" id="Debug_LogfileRetentionInDays_value1" size="13" min="0" step="1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Time to keep the log files (in days - "0" = forever)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td colspan="4" style="padding-left: 20px;"><h4>System</h4></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<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>
|
||||||
|
<td>
|
||||||
|
<class id="System_TimeZone_text" style="color:black;">TimeZone</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="number" id="System_TimeZone_value1" size="13" min="-12" max="12" step="1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Adjustment of time zone relative to UTC (in hours)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="System_AutoAdjustSummertime_enabled" value="1" onclick = 'document.getElementById("System_AutoAdjustSummertime_value1").disabled = !document.getElementById("System_AutoAdjustSummertime_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="System_AutoAdjustSummertime_text" style="color:black;">AutoAdjustSummertime</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<select id="System_AutoAdjustSummertime_value1">
|
||||||
|
<option value="0" selected>True</option>
|
||||||
|
<option value="1" >False</option>
|
||||||
|
</select>
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Autoadjust the summertime
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr class="expert" id="ex16">
|
||||||
|
<td width="20px" style="padding-left: 40px;">
|
||||||
|
<input type="checkbox" id="System_TimeUpdateIntervall_enabled" value="1" onclick = 'document.getElementById("System_TimeUpdateIntervall_value1").disabled = !document.getElementById("System_TimeUpdateIntervall_value1").disabled' unchecked >
|
||||||
|
</td>
|
||||||
|
<td width="200px">
|
||||||
|
<class id="System_TimeUpdateIntervall_text" style="color:black;">TimeUpdateIntervall</class>
|
||||||
|
</td>
|
||||||
|
<td>
|
||||||
|
<input type="number" id="System_TimeUpdateIntervall_value1" size="13" min="0" step="1">
|
||||||
|
</td>
|
||||||
|
<td style="font-size: 80%;">
|
||||||
|
Intervall for synchronizing the time with the time server (in hours)
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</table>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<button class="button" onclick="saveTextAsFile()">Update Config.ini</button>
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
|
||||||
|
</p>
|
||||||
|
<p>
|
||||||
|
<button class="button" id="reboot" type="button" onclick="doReboot()">Reboot to activate updates</button>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<script type="text/javascript" src="./gethost.js"></script>
|
||||||
|
<script type="text/javascript" src="./readconfigparam.js"></script>
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var canvas = document.getElementById('canvas'),
|
||||||
|
basepath = "http://192.168.178.22";
|
||||||
|
param;
|
||||||
|
|
||||||
|
|
||||||
|
function LoadConfigNeu() {
|
||||||
|
basepath = getbasepath();
|
||||||
|
loadConfig(basepath);
|
||||||
|
ParseConfig();
|
||||||
|
UpdateInput();
|
||||||
|
UpdateExpertModus();
|
||||||
|
}
|
||||||
|
|
||||||
|
function WriteParameter(_param, _cat, _name, _optional, _select = false, _anzpara = 1){
|
||||||
|
if (_param[_cat][_name]["found"]){
|
||||||
|
if (_optional) {
|
||||||
|
document.getElementById(_cat+"_"+_name+"_enabled").checked = _param[_cat][_name]["enabled"];
|
||||||
|
for (var j = 1; j <= _anzpara; ++j) {
|
||||||
|
document.getElementById(_cat+"_"+_name+"_value"+j).disabled = !_param[_cat][_name]["enabled"];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
document.getElementById(_cat+"_"+_name+"_text").style="color:black;"
|
||||||
|
if (_select) {
|
||||||
|
var textToFind = _param[_cat][_name]["value1"];
|
||||||
|
var dd = document.getElementById(_cat+"_"+_name+"_value1");
|
||||||
|
for (var i = 0; i < dd.options.length; i++) {
|
||||||
|
if (dd.options[i].text === textToFind) {
|
||||||
|
dd.selectedIndex = i;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (var j = 1; j <= _anzpara; ++j) {
|
||||||
|
document.getElementById(_cat+"_"+_name+"_value"+j).value = _param[_cat][_name]["value"+j];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
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;"
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
function ReadParameter(_param, _cat, _name, _optional, _select = false){
|
||||||
|
if (_param[_cat][_name]["found"]){
|
||||||
|
if (_optional) {
|
||||||
|
_param[_cat][_name]["enabled"] = document.getElementById(_cat+"_"+_name+"_enabled").checked;
|
||||||
|
}
|
||||||
|
if (_select) {
|
||||||
|
var sel = document.getElementById(_cat+"_"+_name+"_value1");
|
||||||
|
_param[_cat][_name]["value1"] = sel.options[sel.selectedIndex].text;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
for (var j = 1; j <= _param[_cat][_name]["anzpara"]; ++j) {
|
||||||
|
_param[_cat][_name]["value"+j] = document.getElementById(_cat+"_"+_name+"_value"+j).value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function UpdateInput() {
|
||||||
|
param = getConfigParameters();
|
||||||
|
WriteParameter(param, "MakeImage", "LogImageLocation", true);
|
||||||
|
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, "Alignment", "SearchFieldY", false);
|
||||||
|
|
||||||
|
WriteParameter(param, "Digits", "Model", false);
|
||||||
|
WriteParameter(param, "Digits", "LogImageLocation", false);
|
||||||
|
WriteParameter(param, "Digits", "LogfileRetentionInDays", false);
|
||||||
|
WriteParameter(param, "Digits", "ModelInputSize", false, false, 2);
|
||||||
|
|
||||||
|
WriteParameter(param, "Analog", "Model", false);
|
||||||
|
WriteParameter(param, "Analog", "LogImageLocation", false);
|
||||||
|
WriteParameter(param, "Analog", "LogfileRetentionInDays", false);
|
||||||
|
WriteParameter(param, "Analog", "ModelInputSize", false, false, 2);
|
||||||
|
|
||||||
|
WriteParameter(param, "PostProcessing", "DecimalShift", true);
|
||||||
|
WriteParameter(param, "PostProcessing", "PreValueUse", true, true);
|
||||||
|
WriteParameter(param, "PostProcessing", "PreValueAgeStartup", true);
|
||||||
|
WriteParameter(param, "PostProcessing", "AllowNegativeRates", true, true);
|
||||||
|
WriteParameter(param, "PostProcessing", "MaxRateValue", true);
|
||||||
|
WriteParameter(param, "PostProcessing", "ErrorMessage", true, true);
|
||||||
|
WriteParameter(param, "PostProcessing", "CheckDigitIncreaseConsistency", true, true);
|
||||||
|
|
||||||
|
WriteParameter(param, "MQTT", "Uri", true);
|
||||||
|
WriteParameter(param, "MQTT", "Topic", true);
|
||||||
|
WriteParameter(param, "MQTT", "TopicError", true);
|
||||||
|
WriteParameter(param, "MQTT", "ClientID", true);
|
||||||
|
WriteParameter(param, "MQTT", "user", true);
|
||||||
|
WriteParameter(param, "MQTT", "password", true);
|
||||||
|
|
||||||
|
WriteParameter(param, "AutoTimer", "AutoStart", true, true);
|
||||||
|
WriteParameter(param, "AutoTimer", "Intervall", true);
|
||||||
|
|
||||||
|
WriteParameter(param, "Debug", "Logfile", true, true);
|
||||||
|
WriteParameter(param, "Debug", "LogfileRetentionInDays", true);
|
||||||
|
|
||||||
|
WriteParameter(param, "System", "TimeZone", true);
|
||||||
|
WriteParameter(param, "System", "AutoAdjustSummertime", true, true);
|
||||||
|
WriteParameter(param, "System", "TimeUpdateIntervall", true);
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function WriteConfig(){
|
||||||
|
ReadParameter(param, "MakeImage", "LogImageLocation", true);
|
||||||
|
ReadParameter(param, "MakeImage", "LogfileRetentionInDays", true);
|
||||||
|
ReadParameter(param, "MakeImage", "WaitBeforeTakingPicture", false);
|
||||||
|
ReadParameter(param, "MakeImage", "ImageQuality", false);
|
||||||
|
ReadParameter(param, "MakeImage", "ImageSize", false, true);
|
||||||
|
|
||||||
|
ReadParameter(param, "Alignment", "SearchFieldX", false);
|
||||||
|
ReadParameter(param, "Alignment", "SearchFieldY", false);
|
||||||
|
|
||||||
|
ReadParameter(param, "Digits", "Model", false);
|
||||||
|
ReadParameter(param, "Digits", "LogImageLocation", false);
|
||||||
|
ReadParameter(param, "Digits", "LogfileRetentionInDays", false);
|
||||||
|
ReadParameter(param, "Digits", "ModelInputSize", false, false, 2);
|
||||||
|
|
||||||
|
ReadParameter(param, "Analog", "Model", false);
|
||||||
|
ReadParameter(param, "Analog", "LogImageLocation", false);
|
||||||
|
ReadParameter(param, "Analog", "LogfileRetentionInDays", false);
|
||||||
|
ReadParameter(param, "Analog", "ModelInputSize", false, false, 2);
|
||||||
|
|
||||||
|
ReadParameter(param, "PostProcessing", "DecimalShift", true);
|
||||||
|
ReadParameter(param, "PostProcessing", "PreValueUse", true, true);
|
||||||
|
ReadParameter(param, "PostProcessing", "PreValueAgeStartup", true);
|
||||||
|
ReadParameter(param, "PostProcessing", "AllowNegativeRates", true, true);
|
||||||
|
ReadParameter(param, "PostProcessing", "MaxRateValue", true);
|
||||||
|
ReadParameter(param, "PostProcessing", "ErrorMessage", true, true);
|
||||||
|
ReadParameter(param, "PostProcessing", "CheckDigitIncreaseConsistency", true, true);
|
||||||
|
|
||||||
|
ReadParameter(param, "MQTT", "Uri", true);
|
||||||
|
ReadParameter(param, "MQTT", "Topic", true);
|
||||||
|
ReadParameter(param, "MQTT", "TopicError", true);
|
||||||
|
ReadParameter(param, "MQTT", "ClientID", true);
|
||||||
|
ReadParameter(param, "MQTT", "user", true);
|
||||||
|
ReadParameter(param, "MQTT", "password", true);
|
||||||
|
|
||||||
|
ReadParameter(param, "AutoTimer", "AutoStart", true, true);
|
||||||
|
ReadParameter(param, "AutoTimer", "Intervall", true);
|
||||||
|
|
||||||
|
ReadParameter(param, "Debug", "Logfile", true, true);
|
||||||
|
ReadParameter(param, "Debug", "LogfileRetentionInDays", true);
|
||||||
|
|
||||||
|
ReadParameter(param, "System", "TimeZone", true);
|
||||||
|
ReadParameter(param, "System", "AutoAdjustSummertime", true, true);
|
||||||
|
ReadParameter(param, "System", "TimeUpdateIntervall", true);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
FormatDecimalValue(param, "PostProcessing", "MaxRateValue");
|
||||||
|
|
||||||
|
return setConfigParameters(param);
|
||||||
|
}
|
||||||
|
|
||||||
|
function FormatDecimalValue(_param, _cat, _name) {
|
||||||
|
for (var j = 1; j <= _param[_cat][_name]["anzpara"]; ++j) {
|
||||||
|
var _val = _param[_cat][_name]["value"+j];
|
||||||
|
_val = _val.replace(",", ".");
|
||||||
|
_param[_cat][_name]["value"+j] = _val;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function UpdateExpertModus()
|
||||||
|
{
|
||||||
|
var _style = 'display:none;';
|
||||||
|
if (document.getElementById("ExpertModus_enabled").checked) {
|
||||||
|
_style = '';
|
||||||
|
document.getElementById("Edit_Config_Direct").style.display = "";
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
document.getElementById("Edit_Config_Direct").style.display = "none";
|
||||||
|
}
|
||||||
|
|
||||||
|
const expert = document.querySelectorAll(".expert");
|
||||||
|
for (var i = 0; i < expert.length; i++) {
|
||||||
|
document.getElementById(expert[i].id).style = _style;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
function saveTextAsFile()
|
||||||
|
{
|
||||||
|
if (confirm("Are you sure you want to update \"config.ini\"?")) {
|
||||||
|
var textToSave = WriteConfig();
|
||||||
|
FileDeleteOnServer("/config/config.ini", basepath);
|
||||||
|
FileSendContent(textToSave, "/config/config.ini", basepath);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function doReboot() {
|
||||||
|
if (confirm("Are you sure you want to reboot the ESP32?")) {
|
||||||
|
var stringota = "/reboot";
|
||||||
|
window.location = stringota;
|
||||||
|
window.location.href = stringota;
|
||||||
|
window.location.assign(stringota);
|
||||||
|
window.location.replace(stringota);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function editConfigDirect() {
|
||||||
|
if (confirm("Did you save your changes?")) {
|
||||||
|
var stringota = "/edit_config.html";
|
||||||
|
window.location = stringota;
|
||||||
|
window.location.href = stringota;
|
||||||
|
window.location.assign(stringota);
|
||||||
|
window.location.replace(stringota);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
LoadConfigNeu();
|
||||||
|
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
@@ -5,10 +5,10 @@ function gethost_Version(){
|
|||||||
|
|
||||||
function getbasepath(){
|
function getbasepath(){
|
||||||
var host = window.location.hostname;
|
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.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
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|||||||
@@ -76,7 +76,7 @@ li.dropdown {
|
|||||||
|
|
||||||
<ul>
|
<ul>
|
||||||
<li aria-current="page"><a href="index.html">Main Page</a>
|
<li aria-current="page"><a href="index.html">Main Page</a>
|
||||||
<li><a href="#"onclick="document.getElementById('maincontent').src = 'edit_config.html';">CONFIG.INI direct</a></li>
|
<li><a href="#"onclick="document.getElementById('maincontent').src = 'edit_config_param.html';">Configuration</a></li>
|
||||||
<li class="dropdown">
|
<li class="dropdown">
|
||||||
<a href="javascript:void(0)" class="dropbtn">Alignment</a>
|
<a href="javascript:void(0)" class="dropbtn">Alignment</a>
|
||||||
<div class="dropdown-content">
|
<div class="dropdown-content">
|
||||||
@@ -95,7 +95,7 @@ li.dropdown {
|
|||||||
</ul>
|
</ul>
|
||||||
<p>
|
<p>
|
||||||
<div class="h_iframe">
|
<div class="h_iframe">
|
||||||
<iframe width="1020px" height="650px" name="maincontent" id ="maincontent" src="edit_config.html" title="fileserver"></iframe>
|
<iframe width="1020px" height="650px" name="maincontent" id ="maincontent" src="edit_config_param.html" title="fileserver"></iframe>
|
||||||
</div>
|
</div>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
@@ -4,216 +4,382 @@ function readconfig_Version(){
|
|||||||
|
|
||||||
var config_gesamt;
|
var config_gesamt;
|
||||||
var config_split;
|
var config_split;
|
||||||
|
var param;
|
||||||
var ref = new Array(2);
|
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() {
|
function ParseConfig() {
|
||||||
config_split = config_gesamt.split("\n");
|
config_split = config_gesamt.split("\n");
|
||||||
var aktline = 0;
|
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){
|
while (aktline < config_split.length){
|
||||||
if (config_split[aktline].trim().toUpperCase() == "[ALIGNMENT]") {
|
if (config_split[aktline].trim().toUpperCase() == "[MAKEIMAGE]") {
|
||||||
aktline = ParseConfigAlignment(aktline);
|
aktline = ParseConfigParamMakeImage(aktline);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (config_split[aktline].trim().toUpperCase() == "[ALIGNMENT]") {
|
||||||
|
aktline = ParseConfigParamAlignment(aktline);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
if (config_split[aktline].trim().toUpperCase() == "[DIGITS]") {
|
if (config_split[aktline].trim().toUpperCase() == "[DIGITS]") {
|
||||||
aktline = ParseConfigDigit(aktline);
|
aktline = ParseConfigParamDigit(aktline);
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (config_split[aktline].trim().toUpperCase() == "[ANALOG]") {
|
if (config_split[aktline].trim().toUpperCase() == "[ANALOG]") {
|
||||||
aktline = ParseConfigAnalog(aktline);
|
aktline = ParseConfigParamAnalog(aktline);
|
||||||
continue;
|
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 getPreRotate(){
|
function ParamAddValue(param, _cat, _param){
|
||||||
return initalrotate["angle"];
|
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){
|
function ParseConfigParamDebug(_aktline){
|
||||||
initalrotate["angle"] = _prerotate;
|
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(){
|
function ParseConfigParamAutoTimer(_aktline){
|
||||||
if (initalrotate.hasOwnProperty("mirror")) {
|
var akt_ref = 0;
|
||||||
return initalrotate["mirror"];
|
++_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 = ""){
|
function ParseConfigParamMakeImage(_aktline){
|
||||||
var JPEG_QUALITY=0.8;
|
var akt_ref = 0;
|
||||||
var dataUrl = _canvas.toDataURL('image/jpeg', JPEG_QUALITY);
|
++_aktline;
|
||||||
var rtn = dataURLtoBlob(dataUrl);
|
|
||||||
|
|
||||||
if (_delete) {
|
var catname = "MakeImage";
|
||||||
FileDeleteOnServer(_filename, _basepath);
|
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){
|
function SaveConfigToServer(_basepath){
|
||||||
// leere Zeilen am Ende löschen
|
// leere Zeilen am Ende löschen
|
||||||
var zw = config_split.length - 1;
|
var zw = config_split.length - 1;
|
||||||
@@ -232,87 +398,6 @@ function SaveConfigToServer(_basepath){
|
|||||||
FileSendContent(config_gesamt, "/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 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) {
|
function createReader(file) {
|
||||||
var image = new Image();
|
var image = new Image();
|
||||||
reader.onload = function(evt) {
|
reader.onload = function(evt) {
|
||||||
@@ -327,26 +412,6 @@ function createReader(file) {
|
|||||||
reader.readAsDataURL(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)
|
function ZerlegeZeile(input)
|
||||||
{
|
{
|
||||||
var Output = Array(0);
|
var Output = Array(0);
|
||||||
@@ -392,9 +457,7 @@ function findDelimiterPos(input, delimiter)
|
|||||||
}
|
}
|
||||||
return pos;
|
return pos;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function trim(istring, adddelimiter)
|
function trim(istring, adddelimiter)
|
||||||
{
|
{
|
||||||
while ((istring.length > 0) && (adddelimiter.indexOf(istring[0]) >= 0)){
|
while ((istring.length > 0) && (adddelimiter.indexOf(istring[0]) >= 0)){
|
||||||
@@ -408,8 +471,6 @@ function trim(istring, adddelimiter)
|
|||||||
return istring;
|
return istring;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
function loadConfig(_basepath) {
|
function loadConfig(_basepath) {
|
||||||
var xhttp = new XMLHttpRequest();
|
var xhttp = new XMLHttpRequest();
|
||||||
try {
|
try {
|
||||||
@@ -428,16 +489,6 @@ function getConfig() {
|
|||||||
return config_gesamt;
|
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 = ""){
|
function FileCopyOnServer(_source, _target, _basepath = ""){
|
||||||
url = _basepath + "/editflow.html?task=copy&in=" + _source + "&out=" + _target;
|
url = _basepath + "/editflow.html?task=copy&in=" + _source + "&out=" + _target;
|
||||||
@@ -508,18 +559,3 @@ function FileSendContent(_content, _filename, _basepath = ""){
|
|||||||
}
|
}
|
||||||
return okay;
|
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();
|
|
||||||
};
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -1 +1 @@
|
|||||||
1.2.0
|
2.0.0
|
||||||
|
|||||||
Reference in New Issue
Block a user