Files
AI-on-the-edge-device/sd-card/html/edit_config_param.html
2021-05-06 21:50:14 +02:00

1089 lines
38 KiB
HTML

<!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>
<div id = "divall" style="display:none">
<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 = 'InvertEnableItem("MakeImage", "LogImageLocation")' 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 = 'InvertEnableItem("MakeImage", "LogfileRetentionInDays")' 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" >QVGA</option>
</select>
</td>
<td style="font-size: 80%;">
Picture size camera (default = "VGA")
</td>
</tr>
<tr class="expert" id="Brightness_ex3">
<td width="20px" style="padding-left: 40px;">
</td>
<td>
<class id="MakeImage_Brightness_text" style="color:black;">Brightness</class>
</td>
<td>
<input type="number" id="MakeImage_Brightness_value1" size="13" min="-2" max="2">
</td>
<td style="font-size: 80%;">
Image Brightness (-2 .. 2 - default = "0")
</td>
</tr>
<tr class="expert" id="MakeImage_FixedExposure_ex10">
<td width="20px" style="padding-left: 40px;">
</td>
<td width="200px">
<class id="MakeImage_FixedExposure_text" style="color:black;">FixedExposure</class>
</td>
<td>
<select id="MakeImage_FixedExposure_value1">
<option value="0" selected>true</option>
<option value="1" >false</option>
</select>
</td>
<td style="font-size: 80%;">
Fixes the illumination setting of camera at the startup and uses this later --> individual round is faster
</td>
</tr>
<!--
<tr class="expert" id="Contrast_ex3">
<td width="20px" style="padding-left: 40px;">
</td>
<td>
<class id="MakeImage_Contrast_text" style="color:black;">Contrast</class>
</td>
<td>
<input type="number" id="MakeImage_Contrast_value1" size="13" min="-2" max="2">
</td>
<td style="font-size: 80%;">
Image Contrast (-2 .. 2 - default = "0")
</td>
</tr>
<tr class="expert" id="Saturation_ex3">
<td width="20px" style="padding-left: 40px;">
</td>
<td>
<class id="MakeImage_Saturation_text" style="color:black;">Saturation</class>
</td>
<td>
<input type="number" id="MakeImage_Saturation_value1" size="13" min="-2" max="2">
</td>
<td style="font-size: 80%;">
Image Saturation (-2 .. 2 - default = "0")
</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="AlignmentAlgo_ex8">
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="Alignment_AlignmentAlgo_enabled" value="1" onclick = 'InvertEnableItem("Alignment", "AlignmentAlgo")' unchecked >
</td>
<td>
<class id="Alignment_AlignmentAlgo_text" style="color:black;">AlignmentAlgo</class>
</td>
<td>
<select id="Alignment_AlignmentAlgo_value1">
<option value="0" selected>Default</option>
<option value="1" >HighAccurity</option>
<option value="2" >Fast</option>
</select>
</td>
<td style="font-size: 80%;">
"Default" = use only R-Channel, "HighAccurity" = use all Channels (RGB, 3x slower), <br> "Fast" (First time RGB, then only check if image is shifted)
</td>
</tr>
<tr id="Category_Digits_ex4">
<td colspan="4" style="padding-left: 20px;">
<h4><input type="checkbox" id="Category_Digits_enabled" value="1" onclick = 'UpdateAfterCategoryCheck()' unchecked >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
</td>
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="Digits_LogImageLocation_enabled" value="1" onclick = 'InvertEnableItem("Digits", "LogImageLocation")' 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 = 'InvertEnableItem("Digits", "LogfileRetentionInDays")' 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><input type="checkbox" id="Category_Analog_enabled" value="1" onclick = 'UpdateAfterCategoryCheck()' unchecked > 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</td>
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="Analog_LogImageLocation_enabled" value="1" onclick = 'InvertEnableItem("Analog", "LogImageLocation")' 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 = 'InvertEnableItem("Analog", "LogfileRetentionInDays")' 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="Analog_ExtendedResolution_ex10">
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="Analog_ExtendedResolution_enabled" value="1" onclick = 'InvertEnableItem("Analog", "ExtendedResolution")' unchecked >
</td>
<td width="200px">
<class id="Analog_ExtendedResolution_text" style="color:black;">ExtendedResolution</class>
</td>
<td>
<select id="Analog_ExtendedResolution_value1">
<option value="0" selected>true</option>
<option value="1" >false</option>
</select>
</td>
<td style="font-size: 80%;">
Enable to use the after point resolution for the last analog counter
</td>
</tr>
ExtendedResolution
<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 = 'InvertEnableItem("PostProcessing", "DecimalShift")' 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 = 'InvertEnableItem("PostProcessing", "PreValueUse")' 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 = 'InvertEnableItem("PostProcessing", "PreValueAgeStartup")' 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 = 'InvertEnableItem("PostProcessing", "AllowNegativeRates")' 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 = 'InvertEnableItem("PostProcessing", "MaxRateValue")' 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 = 'InvertEnableItem("PostProcessing", "ErrorMessage")' 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 = 'InvertEnableItem("PostProcessing", "CheckDigitIncreaseConsistency")' 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><input type="checkbox" id="Category_MQTT_enabled" value="1" onclick = 'UpdateAfterCategoryCheck()' unchecked > MQTT</h4></td>
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="MQTT_Uri_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "Uri")' 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 e.g.: mqtt://IP-Address:Port
</td>
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="MQTT_Topic_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "Topic")' 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 = 'InvertEnableItem("MQTT", "TopicError")' 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_TopicRate_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "TopicRate")' unchecked >
</td>
<td width="200px">
<class id="MQTT_TopicRate_text" style="color:black;">TopicRate</class>
</td>
<td>
<input type="text" id="MQTT_TopicRate_value1">
</td>
<td style="font-size: 80%;">
MQTT topic, in which the flow rate [units / minute] is reported
</td>
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="MQTT_TopicTimeStamp_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "TopicTimeStamp")' unchecked >
</td>
<td width="200px">
<class id="MQTT_TopicTimeStamp_text" style="color:black;">TopicTimeStamp</class>
</td>
<td>
<input type="text" id="MQTT_TopicTimeStamp_value1">
</td>
<td style="font-size: 80%;">
MQTT topic, reporting the last correct readout
</td>
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="MQTT_ClientID_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "ClientID")' 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 = 'InvertEnableItem("MQTT", "user")' 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 authentication
</td>
</tr>
<tr>
<td width="20px" style="padding-left: 40px;">
<input type="checkbox" id="MQTT_password_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "password")' unchecked >
</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 authentication
</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;">
</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;">
</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 = 'InvertEnableItem("Debug", "Logfile")' 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 = 'InvertEnableItem("Debug", "LogfileRetentionInDays")' 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 = 'InvertEnableItem("System", "TimeZone")' unchecked ></td>
</td>
<td>
<class id="System_TimeZone_text" style="color:black;">TimeZone</class>
</td>
<td>
<input type="text" id="System_TimeZone_value1">
</td>
<td style="font-size: 80%;">
Time zone in POSIX syntax (Europe/Berlin = "CET-1CEST,M3.5.0,M10.5.0/3" - incl. daylight saving)
</td>
</tr>
<tr class="expert" id="ex16">
<td width="20px" style="padding-left: 40px;">
<td"><input type="checkbox" id="System_TimeServer_enabled" value="1" onclick = 'InvertEnableItem("System", "TimeServer")' unchecked ></td>
</td>
<td>
<class id="System_TimeServer_text" style="color:black;">TimeServer</class>
</td>
<td>
<input type="text" id="System_TimeServer_value1">
</td>
<td style="font-size: 80%;">
Time server to synchronize system time (default: "pool.ntp.org" - used if nothing is specified)
</td>
</tr>
<tr class="expert" id="System_Hostname">
<td width="20px" style="padding-left: 40px;">
<td"><input type="checkbox" id="System_Hostname_enabled" value="1" onclick = 'InvertEnableItem("System", "Hostname")' unchecked ></td>
</td>
<td>
<class id="System_Hostname_text" style="color:black;">Hostname</class>
</td>
<td>
<input type="text" id="System_Hostname_value1">
</td>
<td style="font-size: 80%;">
Hostname for server - will be transfered to wlan.ini at next startup)
</td>
</tr>
</table>
<p>
<button class="button" onclick="saveTextAsFile()">Update Config.ini</button>
</p>
<p>
</p>
<div id="doreboot">
<p>
<button class="button" id="Edit_Config_Direct" onclick="editConfigDirect()" style="display:none">Edit Config.ini direct</button>
<button class="button" id="reboot" type="button" onclick="doReboot()">Reboot to activate updates</button>
</p>
</div>
</div>
<script type="text/javascript" src="./gethost.js"></script>
<script type="text/javascript" src="./readconfigcommon.js"></script>
<script type="text/javascript" src="./readconfigparam.js"></script>
<script type="text/javascript">
var canvas = document.getElementById('canvas'),
basepath = "http://192.168.178.22";
param;
category;
function LoadConfigNeu() {
var isInitialSetup = getParameterByName('InitialSetup');
if (isInitialSetup === 'true')
{
document.getElementById("reboot").style.display = "none";
}
basepath = getbasepath();
if (!loadConfig(basepath)) {
alert("Config.ini could not be loaded!\nPlease reload the page.");
return;
}
loadConfig(basepath);
ParseConfig();
param = getConfigParameters();
category = getConfigCategory();
UpdateInput();
UpdateExpertModus();
document.getElementById("divall").style.display = '';
}
function getParameterByName(name, url = window.location.href) {
name = name.replace(/[\[\]]/g, '\\$&');
var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
results = regex.exec(url);
if (!results) return null;
if (!results[2]) return '';
return decodeURIComponent(results[2].replace(/\+/g, ' '));
}
function WriteParameter(_param, _category, _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.toLowerCase() === textToFind.toLowerCase()) {
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;"
}
///////////////// am Ende, falls Kategorie als gesamtes nicht ausgewählt --> deaktivieren
if (_category[_cat]["enabled"] == false)
{
if (_optional) {
document.getElementById(_cat+"_"+_name+"_enabled").disabled = true;
for (var j = 1; j <= _anzpara; ++j) {
document.getElementById(_cat+"_"+_name+"_value"+j).disabled = true;
}
}
document.getElementById(_cat+"_"+_name+"_text").style="color:lightgrey;"
}
EnDisableItem(_category[_cat]["enabled"], _param, _category, _cat, _name, _optional);
}
function InvertEnableItem(_cat, _param)
{
_zw = _cat + "_" + _param + "_enabled";
_isOn = document.getElementById(_zw).checked;
_color = "color:lightgrey;";
if (_isOn) {
_color = "color:black;";
}
_zw = _cat + "_" + _param + "_text";
document.getElementById(_zw).disabled = !_isOn;
document.getElementById(_zw).style = _color;
if (param[_cat][_param]["anzParam"] == 2) {
_color = "width: 30px;" + _color;
}
for (var j = 1; j <= param[_cat][_param]["anzParam"]; ++j) {
document.getElementById(_cat+"_"+_param+"_value"+j).disabled = !_isOn;
document.getElementById(_cat+"_"+_param+"_value"+j).style=_color;
}
}
function EnDisableItem(_status, _param, _category, _cat, _name, _optional)
{
_status = _param[_cat][_name]["found"] && _category[_cat]["enabled"];
_color = "color:lightgrey;";
if (_status) {
_color = "color:black;";
}
if (_optional) {
document.getElementById(_cat+"_"+_name+"_enabled").disabled = !_status;
document.getElementById(_cat+"_"+_name+"_enabled").style=_color;
}
if (!_param[_cat][_name]["enabled"]) {
_status = false;
_color = "color:lightgrey;";
}
document.getElementById(_cat+"_"+_name+"_text").disabled = !_status;
document.getElementById(_cat+"_"+_name+"_text").style = _color;
if (_param[_cat][_name]["anzParam"] == 2) {
_color = "width: 30px;" + _color;
}
for (var j = 1; j <= _param[_cat][_name]["anzParam"]; ++j) {
document.getElementById(_cat+"_"+_name+"_value"+j).disabled = !_status;
document.getElementById(_cat+"_"+_name+"_value"+j).style=_color;
}
}
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]["anzParam"]; ++j) {
_param[_cat][_name]["value"+j] = document.getElementById(_cat+"_"+_name+"_value"+j).value;
}
}
}
}
function UpdateInput() {
document.getElementById("Category_Analog_enabled").checked = category["Analog"]["enabled"];
document.getElementById("Category_Digits_enabled").checked = category["Digits"]["enabled"];
document.getElementById("Category_MQTT_enabled").checked = category["MQTT"]["enabled"];
WriteParameter(param, category, "MakeImage", "LogImageLocation", true);
WriteParameter(param, category, "MakeImage", "LogfileRetentionInDays", true);
WriteParameter(param, category, "MakeImage", "WaitBeforeTakingPicture", false);
WriteParameter(param, category, "MakeImage", "ImageQuality", false);
WriteParameter(param, category, "MakeImage", "Brightness", false);
// WriteParameter(param, category, "MakeImage", "Contrast", false);
// WriteParameter(param, category, "MakeImage", "Saturation", false);
WriteParameter(param, category, "MakeImage", "ImageSize", false, true, true);
WriteParameter(param, category, "MakeImage", "FixedExposure", false, true, true);
WriteParameter(param, category, "Alignment", "SearchFieldX", false);
WriteParameter(param, category, "Alignment", "SearchFieldY", false);
WriteParameter(param, category, "Alignment", "AlignmentAlgo", true, true, true);
WriteParameter(param, category, "Digits", "Model", false);
WriteParameter(param, category, "Digits", "LogImageLocation", true);
WriteParameter(param, category, "Digits", "LogfileRetentionInDays", true);
WriteParameter(param, category, "Digits", "ModelInputSize", false, false, 2);
WriteParameter(param, category, "Analog", "Model", false);
WriteParameter(param, category, "Analog", "LogImageLocation", true);
WriteParameter(param, category, "Analog", "LogfileRetentionInDays", true);
WriteParameter(param, category, "Analog", "ExtendedResolution", true, true);
WriteParameter(param, category, "Analog", "ModelInputSize", false, false, 2);
WriteParameter(param, category, "PostProcessing", "DecimalShift", true);
WriteParameter(param, category, "PostProcessing", "PreValueUse", true, true);
WriteParameter(param, category, "PostProcessing", "PreValueAgeStartup", true);
WriteParameter(param, category, "PostProcessing", "AllowNegativeRates", true, true);
WriteParameter(param, category, "PostProcessing", "MaxRateValue", true);
WriteParameter(param, category, "PostProcessing", "ErrorMessage", true, true);
WriteParameter(param, category, "PostProcessing", "CheckDigitIncreaseConsistency", true, true);
WriteParameter(param, category, "MQTT", "Uri", true);
WriteParameter(param, category, "MQTT", "Topic", true);
WriteParameter(param, category, "MQTT", "TopicError", true);
WriteParameter(param, category, "MQTT", "TopicRate", true);
WriteParameter(param, category, "MQTT", "TopicTimeStamp", true);
WriteParameter(param, category, "MQTT", "ClientID", true);
WriteParameter(param, category, "MQTT", "user", true);
WriteParameter(param, category, "MQTT", "password", true);
WriteParameter(param, category, "AutoTimer", "AutoStart", false, true);
WriteParameter(param, category, "AutoTimer", "Intervall", false);
WriteParameter(param, category, "Debug", "Logfile", true, true);
WriteParameter(param, category, "Debug", "LogfileRetentionInDays", true);
WriteParameter(param, category, "System", "TimeZone", true);
WriteParameter(param, category, "System", "Hostname", true);
WriteParameter(param, category, "System", "TimeServer", true);
}
function ReadParameterAll()
{
category["Analog"]["enabled"] = document.getElementById("Category_Analog_enabled").checked;
category["Digits"]["enabled"] = document.getElementById("Category_Digits_enabled").checked;
category["MQTT"]["enabled"] = document.getElementById("Category_MQTT_enabled").checked;
ReadParameter(param, "MakeImage", "LogImageLocation", true);
ReadParameter(param, "MakeImage", "LogfileRetentionInDays", true);
ReadParameter(param, "MakeImage", "WaitBeforeTakingPicture", false);
ReadParameter(param, "MakeImage", "ImageQuality", false);
ReadParameter(param, "MakeImage", "Brightness", false);
// ReadParameter(param, "MakeImage", "Contrast", false);
// ReadParameter(param, "MakeImage", "Saturation", false);
ReadParameter(param, "MakeImage", "ImageSize", false, true);
ReadParameter(param, "MakeImage", "FixedExposure", false, true);
ReadParameter(param, "Alignment", "SearchFieldX", false);
ReadParameter(param, "Alignment", "SearchFieldY", false);
ReadParameter(param, "Alignment", "AlignmentAlgo", true, true);
ReadParameter(param, "Digits", "Model", false);
ReadParameter(param, "Digits", "LogImageLocation", true);
ReadParameter(param, "Digits", "LogfileRetentionInDays", true);
ReadParameter(param, "Digits", "ModelInputSize", false, false, 2);
ReadParameter(param, "Analog", "Model", false);
ReadParameter(param, "Analog", "LogImageLocation", true);
ReadParameter(param, "Analog", "LogfileRetentionInDays", true);
ReadParameter(param, "Analog", "ExtendedResolution", true, true);
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", "TopicRate", true);
ReadParameter(param, "MQTT", "TopicTimeStamp", true);
ReadParameter(param, "MQTT", "ClientID", true);
ReadParameter(param, "MQTT", "user", true);
ReadParameter(param, "MQTT", "password", true);
ReadParameter(param, "AutoTimer", "AutoStart", false, true);
ReadParameter(param, "AutoTimer", "Intervall", false);
ReadParameter(param, "Debug", "Logfile", true, true);
ReadParameter(param, "Debug", "LogfileRetentionInDays", true);
ReadParameter(param, "System", "TimeZone", true);
ReadParameter(param, "System", "Hostname", true);
ReadParameter(param, "System", "TimeServer", true);
FormatDecimalValue(param, "PostProcessing", "MaxRateValue");
}
function WriteConfig(){
ReadParameterAll();
return setConfigParameters(param, category);
}
function FormatDecimalValue(_param, _cat, _name) {
for (var j = 1; j <= _param[_cat][_name]["anzParam"]; ++j) {
var _val = _param[_cat][_name]["value"+j];
_val = _val.replace(",", ".");
_param[_cat][_name]["value"+j] = _val;
}
}
function UpdateAfterCategoryCheck() {
ReadParameterAll();
category["Analog"]["enabled"] = document.getElementById("Category_Analog_enabled").checked;
category["Digits"]["enabled"] = document.getElementById("Category_Digits_enabled").checked;
UpdateInput();
}
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>