mirror of
https://github.com/jomjol/AI-on-the-edge-device.git
synced 2025-12-06 19:46:54 +03:00
1935 lines
65 KiB
HTML
1935 lines
65 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<link rel="icon" href="data:,">
|
|
<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;
|
|
}
|
|
|
|
.description {
|
|
color: black;
|
|
font-size: 80%;
|
|
}
|
|
|
|
.disabled {
|
|
color:lightgrey;
|
|
}
|
|
|
|
.smallSelect {
|
|
width: 30px;
|
|
}
|
|
|
|
.invalid-input {
|
|
background-color: #FFAA00;
|
|
}
|
|
|
|
.hidden {
|
|
display: none;
|
|
}
|
|
</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"> Expert Mode </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 class="description">
|
|
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 class="description">
|
|
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 class="description">
|
|
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 class="description">
|
|
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="VGA" selected>VGA</option>
|
|
<option value="QVGA" >QVGA</option>
|
|
</select>
|
|
</td>
|
|
<td class="description">
|
|
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="true" selected>true</option>
|
|
<option value="false" >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="default" selected>Default</option>
|
|
<option value="highAccurity" >HighAccurity</option>
|
|
<option value="fast" >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" class="smallSelect" min="1" step="1">
|
|
y: <input type="number" id="Digits_ModelInputSize_value2" class="smallSelect" 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="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" class="smallSelect" min="1" step="1">
|
|
y: <input type="number" id="Analog_ModelInputSize_value2" class="smallSelect" 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_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="true" selected>true</option>
|
|
<option value="false" >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="true" selected>true</option>
|
|
<option value="false" >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 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="true" selected>true</option>
|
|
<option value="false" >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="true" selected>true</option>
|
|
<option value="false" >false</option>
|
|
</select>
|
|
</td>
|
|
<td style="font-size: 80%;">
|
|
Enable additional consistency check - especially zero crossing check between digits
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td style="padding-left: 40px;" colspan="4">
|
|
<br>
|
|
<b>Postprocessing Individual Paramters:
|
|
<select id="Numbers_value1" onchange="numberChanged()">
|
|
<option value="0" selected>default</option>
|
|
<option value="1" >NT</option>
|
|
<option value="2" >HT</option>
|
|
</select></b>
|
|
</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_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>
|
|
<td width="20px" style="padding-left: 40px;">
|
|
<input type="checkbox" id="PostProcessing_ExtendedResolution_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "ExtendedResolution")' unchecked >
|
|
</td>
|
|
<td width="200px">
|
|
<class id="PostProcessing_ExtendedResolution_text" style="color:black;">ExtendedResolution</class>
|
|
</td>
|
|
<td>
|
|
<select id="PostProcessing_ExtendedResolution_value1">
|
|
<option value="true" >true</option>
|
|
<option value="false" selected>false</option>
|
|
</select>
|
|
</td>
|
|
<td style="font-size: 80%;">
|
|
Enable to use the after point resolution for the last analog counter
|
|
</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td id="ex121" width="20px" style="padding-left: 40px;">
|
|
<input type="checkbox" id="PostProcessing_IgnoreLeadingNaN_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "IgnoreLeadingNaN")' unchecked >
|
|
</td>
|
|
<td width="200px">
|
|
<class id="PostProcessing_IgnoreLeadingNaN_text" style="color:black;">IgnoreLeadingNaN</class>
|
|
</td>
|
|
<td>
|
|
<select id="PostProcessing_IgnoreLeadingNaN_value1">
|
|
<option value="true" >true</option>
|
|
<option value="false" selected>false</option>
|
|
</select>
|
|
</td>
|
|
<td style="font-size: 80%;">
|
|
Leading "N"'s will be deleted before further processing
|
|
</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_MainTopic_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "MainTopic")' unchecked >
|
|
</td>
|
|
<td width="200px">
|
|
<class id="MQTT_MainTopic_text" style="color:black;">MainTopic</class>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="MQTT_MainTopic_value1">
|
|
</td>
|
|
<td style="font-size: 80%;">
|
|
MQTT main topic, under which the counters are published. The single value will be published with the following key: MAINTOPIC/VALUE_NAME/PARAMETER <br>
|
|
where parameters are: value, rate, timestamp, error<br>
|
|
The general connection status can be found in MAINTOPIC/CONNECTION
|
|
</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="true" selected>true</option>
|
|
<option value="false" >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><input type="checkbox" id="Category_GPIO_enabled" value="1" onclick='UpdateAfterCategoryCheck()' unchecked >
|
|
GPIO Settings
|
|
<span class="GPIO_item" > - Enabling GPIO handler, disable by default integrated flash light. Please enable it with GPIO4 (internal flash LED) settings or GPIO12 (external LED).</span>
|
|
</h4>
|
|
</td>
|
|
</tr>
|
|
|
|
<!------------- GPIO0 begin ------------------>
|
|
<tr class="expert" class="GPIO_IO0 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;">
|
|
<input type="checkbox" id="GPIO_IO0_enabled" value="1" onclick = 'InvertEnableItem("GPIO", "IO0")' unchecked>
|
|
</td>
|
|
<td>
|
|
<span id="GPIO_IO0_text">GPIO 0 state</span>
|
|
</td>
|
|
<td>
|
|
<td">
|
|
<select id="GPIO_IO0_value1">
|
|
<option value="input">input</option>
|
|
<option value="input-pullup">input pullup</option>
|
|
<option value="input-pulldown">input pulldown</option>
|
|
<option value="output">output</option>
|
|
</select>
|
|
</td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 0 Usable with restrictions.<br>
|
|
<span style="color: red">Must be disabled when camera is used.</span><br>
|
|
<span style="color: red">Pin is used to activate flash mode and must therefore be HIGH when booting.</span>
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO0 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span id="GPIO_IO0_text" class="GPIO_IO0 GPIO_item">GPIO 0 use interrupt</span>
|
|
</td>
|
|
<td>
|
|
<td">
|
|
<select id="GPIO_IO0_value2">
|
|
<option value="disabled">disabled</option>
|
|
<option value="rising-edge">rising edge</option>
|
|
<option value="falling-edge">falling edge</option>
|
|
<option value="rising-and-falling">rising and falling</option>
|
|
<option value="low-level-trigger">low level trigger</option>
|
|
<option value="high-level-trigger">high level trigger</option>
|
|
</select>
|
|
</td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 0 enable interrupt trigger
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO0 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO0 GPIO_item">GPIO 0 PWM duty resolution</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="number" id="GPIO_IO0_value3" min="1" max="20"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 0 LEDC PWM duty resolution in bit
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO0 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO0 GPIO_item">GPIO 0 enable MQTT</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="checkbox" id="GPIO_IO0_value4"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 0 enable MQTT publishing/subscribing
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO0 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO0 GPIO_item">GPIO 0 enable HTTP</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="checkbox" id="GPIO_IO0_value5"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 0 enable HTTP write/read
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO0 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO0 GPIO_item">GPIO 0 name</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="text" id="GPIO_IO0_value6"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 0 MQTT topic name (empty = GPIO0). Allowed characters (a-z, A-Z, 0-9, _, -)
|
|
</td>
|
|
</tr>
|
|
<!------------- GPIO0 end ------------------>
|
|
|
|
<!------------- GPIO1 begin ------------------>
|
|
<tr class="expert" class="GPIO_IO1 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;">
|
|
<input type="checkbox" id="GPIO_IO1_enabled" value="1" onclick = 'InvertEnableItem("GPIO", "IO1")' unchecked>
|
|
</td>
|
|
<td>
|
|
<span id="GPIO_IO1_text" class="GPIO_IO1 GPIO_item">GPIO 1 state</span>
|
|
</td>
|
|
<td>
|
|
<td">
|
|
<select id="GPIO_IO1_value1">
|
|
<option value="input">input</option>
|
|
<option value="input-pullup">input pullup</option>
|
|
<option value="input-pulldown">input pulldown</option>
|
|
<option value="output">output</option>
|
|
</select>
|
|
</td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 1 <br><span style="color: blue">Used by default for serial communication as TX pin.<br>Required for seriales monitor.</span>
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO1 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO1 GPIO_item" class="expert">GPIO 1 use interrupt</span>
|
|
</td>
|
|
<td>
|
|
<td">
|
|
<select id="GPIO_IO1_value2">
|
|
<option value="disabled">disabled</option>
|
|
<option value="rising-edge" disabled>rising edge</option>
|
|
<option value="falling-edge" disabled>falling edge</option>
|
|
<option value="rising-and-falling">rising and falling</option>
|
|
<option value="low-level-trigger">low level trigger</option>
|
|
<option value="high-level-trigger">high level trigger</option>
|
|
</select>
|
|
</td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 1 enable interrupt trigger
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO1 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO1 GPIO_item">GPIO 1 PWM duty resolution</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="number" id="GPIO_IO1_value3" min="1" max="20"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 1 LEDC PWM duty resolution in bit
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO1 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO1 GPIO_item">GPIO 1 enable MQTT</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="checkbox" id="GPIO_IO1_value4"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 1 enable MQTT publishing/subscribing
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO1 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO1 GPIO_item">GPIO 1 enable HTTP</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="checkbox" id="GPIO_IO1_value5"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 1 enable HTTP write/read
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO1 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO1 GPIO_item" class="expert">GPIO 1 name</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="text" id="GPIO_IO1_value6"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 1 MQTT topic name (empty = GPIO1). Allowed characters (a-z, A-Z, 0-9, _, -)
|
|
</td>
|
|
</tr>
|
|
<!------------- GPIO1 end ------------------>
|
|
|
|
<!------------- GPIO3 begin ------------------>
|
|
<tr class="expert" class="GPIO_IO3 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;">
|
|
<input type="checkbox" id="GPIO_IO3_enabled" value="1" onclick = 'InvertEnableItem("GPIO", "IO3")' unchecked>
|
|
</td>
|
|
<td>
|
|
<span id="GPIO_IO3_text" class="GPIO_IO3 GPIO_item">GPIO 3 state</span>
|
|
</td>
|
|
<td>
|
|
<td">
|
|
<select id="GPIO_IO3_value1">
|
|
<option value="input">input</option>
|
|
<option value="input-pullup">input pullup</option>
|
|
<option value="input-pulldown">input pulldown</option>
|
|
<option value="output">output</option>
|
|
</select>
|
|
</td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 3 <span style="color: blue">Used by default for serial communication as RX pin.</span>
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO3 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO3 GPIO_item">GPIO 3 use interrupt</span>
|
|
</td>
|
|
<td>
|
|
<td">
|
|
<select id="GPIO_IO3_value2">
|
|
<option value="disabled">disabled</option>
|
|
<option value="rising-edge" disabled>rising edge</option>
|
|
<option value="falling-edge" disabled>falling edge</option>
|
|
<option value="rising-and-falling">rising and falling</option>
|
|
<option value="low-level-trigger">low level trigger</option>
|
|
<option value="high-level-trigger">high level trigger</option>
|
|
</select>
|
|
</td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 3 Used by default for serial communication as RX pin.
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO3 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO3 GPIO_item">GPIO 3 PWM duty resolution</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="number" id="GPIO_IO3_value3" min="1" max="20"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 3 LEDC PWM duty resolution in bit
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO3 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO3 GPIO_item">GPIO 3 enable MQTT</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="checkbox" id="GPIO_IO3_value4"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 3 enable MQTT publishing/subscribing
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO3 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO3 GPIO_item">GPIO 3 enable HTTP</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="checkbox" id="GPIO_IO3_value5"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 3 enable HTTP write/read
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO3 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO3 GPIO_item">GPIO 3 name</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="text" id="GPIO_IO3_value6"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 3 MQTT topic name (empty = GPIO3). Allowed characters (a-z, A-Z, 0-9, _, -)
|
|
</td>
|
|
</tr>
|
|
<!------------- GPIO3 end ------------------>
|
|
|
|
<!------------- GPIO4 begin ------------------>
|
|
<tr class="GPIO_IO4 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;">
|
|
<input type="checkbox" id="GPIO_IO4_enabled" value="1" onclick = 'InvertEnableItem("GPIO", "IO4")' unchecked>
|
|
</td>
|
|
<td>
|
|
<span id="GPIO_IO4_text" class="GPIO_IO4 GPIO_item">GPIO 4 state</span>
|
|
</td>
|
|
<td>
|
|
<td">
|
|
<select id="GPIO_IO4_value1">
|
|
<option value="input">input</option>
|
|
<option value="input-pullup">input pullup</option>
|
|
<option value="input-pulldown">input pulldown</option>
|
|
<option value="output">output</option>
|
|
<option value="built-in-led">built-in led flash light</option>
|
|
</select>
|
|
</td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 4 Usable with restrictions.<br>
|
|
<span style="color: red">Pin is used for build-in flash light.</span>
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO4 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO4 GPIO_item">GPIO 4 use interrupt</span>
|
|
</td>
|
|
<td>
|
|
<td">
|
|
<select id="GPIO_IO4_value2">
|
|
<option value="disabled">disabled</option>
|
|
<option value="rising-edge">rising edge</option>
|
|
<option value="falling-edge">falling edge</option>
|
|
<option value="rising-and-falling">rising and falling</option>
|
|
<option value="low-level-trigger">low level trigger</option>
|
|
<option value="high-level-trigger">high level trigger</option>
|
|
</select>
|
|
</td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 4 enable interrupt trigger
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO4 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO4 GPIO_item">GPIO 4 PWM duty resolution</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="number" id="GPIO_IO4_value3" min="1" max="20"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 4 LEDC PWM duty resolution in bit
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO4 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO4 GPIO_item">GPIO 4 enable MQTT</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="checkbox" id="GPIO_IO4_value4"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 4 enable MQTT publishing/subscribing
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO4 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO4 GPIO_item">GPIO 4 enable HTTP</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="checkbox" id="GPIO_IO4_value5"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 4 enable HTTP write/read
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO4 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO4 GPIO_item">GPIO 4 name</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="text" id="GPIO_IO4_value6"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 4 MQTT topic name (empty = GPIO4). Allowed characters (a-z, A-Z, 0-9, _, -)
|
|
</td>
|
|
</tr>
|
|
<!------------- GPIO4 end ------------------>
|
|
|
|
<!------------- GPIO12 begin ------------------>
|
|
<tr class="GPIO_IO12 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;">
|
|
<input type="checkbox" id="GPIO_IO12_enabled" value="1" onclick = 'InvertEnableItem("GPIO", "IO12")' unchecked>
|
|
</td>
|
|
<td>
|
|
<span class="GPIO_IO12 GPIO_item" id="GPIO_IO12_text">GPIO 12 state</span>
|
|
</td>
|
|
<td>
|
|
<td">
|
|
<select id="GPIO_IO12_value1">
|
|
<option value="input">input</option>
|
|
<option value="input-pullup">input pullup</option>
|
|
<option value="input-pulldown">input pulldown</option>
|
|
<option value="output">output</option>
|
|
<option value="external-flash-ws281x">external flash light ws281x controlled</option>
|
|
</select>
|
|
</td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 12 is usable without restrictions
|
|
</td>
|
|
</tr>
|
|
<tr class=expert class="GPIO_IO12 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO12 GPIO_item">GPIO 12 use interrupt</span>
|
|
</td>
|
|
<td>
|
|
<td>
|
|
<select class="GPIO_IO12 GPIO_item" id="GPIO_IO12_value2">
|
|
<option value="disabled">disabled</option>
|
|
<option value="rising-edge">rising edge</option>
|
|
<option value="falling-edge">falling edge</option>
|
|
<option value="rising-and-falling">rising and falling</option>
|
|
<option value="low-level-trigger">low level trigger</option>
|
|
<option value="high-level-trigger">high level trigger</option>
|
|
</select>
|
|
</td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 12 enable interrupt trigger
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO12 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO12 GPIO_item">GPIO 12 PWM duty resolution</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="number" id="GPIO_IO12_value3" min="1" max="20"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 12 LEDC PWM duty resolution in bit
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO12 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO12 GPIO_item">GPIO 12 enable MQTT</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="checkbox" id="GPIO_IO12_value4"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 12 enable MQTT publishing/subscribing
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO12 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO12 GPIO_item">GPIO 12 enable HTTP</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="checkbox" id="GPIO_IO12_value5"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 12 enable HTTP write/read
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO12 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO12 GPIO_item">GPIO 12 name</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="text" id="GPIO_IO12_value6"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 12 MQTT topic name (empty = GPIO12). Allowed characters (a-z, A-Z, 0-9, _, -)
|
|
</td>
|
|
</tr>
|
|
|
|
<tr class="GPIO_IO12 GPIO_item" id="wstypeex3">
|
|
<td width="20px" style="padding-left: 40px;">
|
|
</td>
|
|
<td>
|
|
<span class="GPIO_IO12 GPIO_item" id="GPIO_LEDType_text">LED-Type</span>
|
|
</td>
|
|
<td class="GPIO_IO12 GPIO_item">
|
|
<select class="GPIO_IO12 GPIO_item" id="GPIO_LEDType_value1">
|
|
<option value="WS2812" selected>WS2812</option>
|
|
<option value="WS2812B">WS2812B</option>
|
|
<option value="SK6812">SK6812 (not tested)</option>
|
|
<option value="WS2813">WS2813 (not tested)</option>
|
|
</select>
|
|
</td>
|
|
<td class="description">
|
|
Type of WS2812x, that is connected to GPIO12
|
|
</td>
|
|
</tr>
|
|
|
|
<tr class="GPIO_IO12 GPIO_item" id="LEDANZex8" >
|
|
<td width="20px" style="padding-left: 40px;">
|
|
</td>
|
|
<td>
|
|
<span class="GPIO_IO12 GPIO_item" id="GPIO_LEDNumbers_text">Numbers of LEDs</span>
|
|
</td>
|
|
<td>
|
|
<input type="number" name="name" id="GPIO_LEDNumbers_value1" size="13" min="1">
|
|
</td>
|
|
<td style="font-size: 80%;">
|
|
Number of LEDs on the external LED-stripe
|
|
</td>
|
|
</tr>
|
|
<tr class="GPIO_IO12 GPIO_item" id="LEDRGBex9">
|
|
<td width="20px" style="padding-left: 40px;">
|
|
</td>
|
|
<td>
|
|
<span class="GPIO_IO12 GPIO_item" id="GPIO_LEDColor_text">LED Color</span>
|
|
</td>
|
|
<td class="GPIO_IO12 GPIO_item">
|
|
R <input class="smallSelect" class="GPIO_IO12 GPIO_item" id="GPIO_LEDColor_value1" size="12">
|
|
G <input class="smallSelect" class="GPIO_IO12 GPIO_item" id="GPIO_LEDColor_value2" size="12">
|
|
B <input class="smallSelect" class="GPIO_IO12 GPIO_item" id="GPIO_LEDColor_value3" size="12">
|
|
</td>
|
|
<td style="font-size: 80%;">
|
|
Color of LEDs in (R)ed, (G)reen (B)lue from 0...255
|
|
</td>
|
|
</tr>
|
|
|
|
|
|
<!------------- GPIO12 end ------------------>
|
|
|
|
<!------------- GPIO13 begin ------------------>
|
|
<tr class="expert" class="GPIO_IO13 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;">
|
|
<input type="checkbox" id="GPIO_IO13_enabled" value="1" onclick = 'InvertEnableItem("GPIO", "IO13")' unchecked>
|
|
</td>
|
|
<td>
|
|
<span id="GPIO_IO13_text">GPIO 13 state</span>
|
|
</td>
|
|
<td>
|
|
<td">
|
|
<select id="GPIO_IO13_value1">
|
|
<option value="input">input</option>
|
|
<option value="input-pullup">input pullup</option>
|
|
<option value="input-pulldown">input pulldown</option>
|
|
<option value="output">output</option>
|
|
</select>
|
|
</td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 13 is usable without restrictions
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO13 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO13 GPIO_item">GPIO 13 use interrupt</span>
|
|
</td>
|
|
<td>
|
|
<td">
|
|
<select id="GPIO_IO13_value2">
|
|
<option value="disabled">disabled</option>
|
|
<option value="rising-edge" disabled>rising edge</option>
|
|
<option value="falling-edge" disabled>falling edge</option>
|
|
<option value="rising-and-falling">rising and falling</option>
|
|
<option value="low-level-trigger">low level trigger</option>
|
|
<option value="high-level-trigger">high level trigger</option>
|
|
</select>
|
|
</td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 13 enable interrupt trigger
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO13 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO13 GPIO_item">GPIO 13 PWM duty resolution</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="number" id="GPIO_IO13_value3" min="1" max="20"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 13 LEDC PWM duty resolution in bit
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO13 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO13 GPIO_item">GPIO 13 enable MQTT</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="checkbox" id="GPIO_IO13_value4"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 13 enable MQTT publishing/subscribing
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO13 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO13 GPIO_item">GPIO 13 enable HTTP</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="checkbox" id="GPIO_IO13_value5"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 13 enable HTTP write/read
|
|
</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO13 GPIO_item">
|
|
<td width="20px" style="padding-left: 40px;"></td>
|
|
<td>
|
|
<span class="GPIO_IO13 GPIO_item">GPIO 13 name</span>
|
|
</td>
|
|
<td>
|
|
<td"><input type="text" id="GPIO_IO13_value6"></td>
|
|
</td>
|
|
<td class="description">
|
|
GPIO 13 MQTT topic name (empty = GPIO13). Allowed characters (a-z, A-Z, 0-9, _, -)
|
|
</td>
|
|
</tr>
|
|
<!------------- GPIO13 end ------------------>
|
|
|
|
<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="true" selected>true</option>
|
|
<option value="false" >false</option>
|
|
</select>
|
|
</td>
|
|
<td class="description">
|
|
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 class="description">
|
|
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 class="description">
|
|
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 class="description">
|
|
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 class="description">
|
|
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;
|
|
NUNBERSAkt = -1;
|
|
NUMBERS;
|
|
|
|
|
|
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;
|
|
}
|
|
ParseConfig();
|
|
param = getConfigParameters();
|
|
category = getConfigCategory();
|
|
InitIndivParameter();
|
|
|
|
UpdateInput();
|
|
UpdateInputIndividual();
|
|
UpdateExpertModus();
|
|
document.getElementById("divall").style.display = '';
|
|
}
|
|
|
|
function InitIndivParameter()
|
|
{
|
|
NUMBERS = getNUMBERInfo();
|
|
|
|
var _index = document.getElementById("Numbers_value1");
|
|
while (_index.length)
|
|
_index.remove(0);
|
|
|
|
for (var i = 0; i < NUMBERS.length; ++i){
|
|
var option = document.createElement("option");
|
|
option.text = NUMBERS[i]["name"];
|
|
option.value = i;
|
|
_index.add(option);
|
|
}
|
|
_index.selectedIndex = 0;
|
|
}
|
|
|
|
|
|
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, _number = -1){
|
|
|
|
let anzpara = _param[_cat][_name].anzParam;
|
|
|
|
if (_number > -1) {
|
|
if ((NUMBERS[_number] == undefined) || (NUMBERS[_number][_cat] == undefined) || (NUMBERS[_number][_cat][_name] == undefined))
|
|
return;
|
|
|
|
if (_optional) {
|
|
document.getElementById(_cat+"_"+_name+"_enabled").checked = NUMBERS[_number][_cat][_name]["enabled"];
|
|
for (var j = 1; j <= anzpara; ++j) {
|
|
document.getElementById(_cat+"_"+_name+"_value"+j).disabled = !NUMBERS[_number][_cat][_name]["enabled"];
|
|
}
|
|
}
|
|
document.getElementById(_cat+"_"+_name+"_text").style="color:black;"
|
|
setEnabled(_cat+"_"+_name, true);
|
|
|
|
for (var j = 1; j <= anzpara; ++j) {
|
|
let element = document.getElementById(_cat+"_"+_name+"_value"+j);
|
|
if (element.tagName.toLowerCase() == "select") {
|
|
var textToFind = NUMBERS[_number][_cat][_name]["value"+j];
|
|
if (textToFind == undefined)
|
|
continue;
|
|
|
|
for (var i = 0; i < element.options.length; i++) {
|
|
if (element.options[i].value.toLowerCase() === textToFind.toLowerCase()) {
|
|
element.selectedIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if ((element.getAttribute("type") != null) && (element.getAttribute("type").toLowerCase() == "checkbox")) {
|
|
element.checked = NUMBERS[_number][_cat][_name]["value"+j] == "true";
|
|
}
|
|
else {
|
|
element.value = NUMBERS[_number][_cat][_name]["value"+j];
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
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;"
|
|
setEnabled(_cat+"_"+_name, true);
|
|
|
|
for (var j = 1; j <= anzpara; ++j) {
|
|
let element = document.getElementById(_cat+"_"+_name+"_value"+j);
|
|
if (element.tagName.toLowerCase() == "select") {
|
|
var textToFind = _param[_cat][_name]["value"+j];
|
|
if (textToFind == undefined)
|
|
continue;
|
|
|
|
for (var i = 0; i < element.options.length; i++) {
|
|
if (element.options[i].value.toLowerCase() === textToFind.toLowerCase()) {
|
|
element.selectedIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
else if ((element.getAttribute("type") != null) && (element.getAttribute("type").toLowerCase() == "checkbox")) {
|
|
element.checked = _param[_cat][_name]["value"+j] == "true";
|
|
}
|
|
else {
|
|
element.value = _param[_cat][_name]["value"+j];
|
|
}
|
|
}
|
|
}
|
|
|
|
///////////////// 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;"
|
|
setEnabled(_cat+"_"+_name, false);
|
|
}
|
|
|
|
EnDisableItem(_category[_cat]["enabled"], _param, _category, _cat, _name, _optional, _number);
|
|
}
|
|
|
|
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;
|
|
|
|
setEnabled(_cat + "_" + _param, _isOn);
|
|
|
|
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 setEnabled(className, enabled) {
|
|
_color = "color:lightgrey;";
|
|
if (enabled) {
|
|
_color = "color:black;";
|
|
}
|
|
|
|
let elements = document.getElementsByClassName(className);
|
|
for (i = 0; i < elements.length; i++) {
|
|
if (enabled) {
|
|
elements[i].classList.remove("disabled");
|
|
} else {
|
|
elements[i].classList.add("disabled");
|
|
}
|
|
|
|
let inputs = elements[i].getElementsByTagName("input");
|
|
for (j = 0; j < inputs.length; j++) {
|
|
if (inputs[j].id.endsWith("_enabled"))
|
|
continue;
|
|
|
|
inputs[j].style = _color
|
|
if (enabled) {
|
|
inputs[j].removeAttribute("disabled");
|
|
} else {
|
|
inputs[j].setAttribute("disabled", "disabled");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function setVisible(className, visible) {
|
|
let elements = document.getElementsByClassName(className);
|
|
for (i = 0; i < elements.length; i++) {
|
|
if (visible) {
|
|
elements[i].classList.remove("hidden");
|
|
} else {
|
|
elements[i].classList.add("hidden");
|
|
}
|
|
}
|
|
}
|
|
|
|
function EnDisableItem(_status, _param, _category, _cat, _name, _optional, _number = -1)
|
|
{
|
|
_status = _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 (_number == -1){
|
|
if (!_param[_cat][_name]["enabled"]) {
|
|
_status = false;
|
|
_color = "color:lightgrey;";
|
|
}
|
|
}
|
|
else
|
|
if (!NUMBERS[_number][_cat][_name]["enabled"]) {
|
|
_status = false;
|
|
_color = "color:lightgrey;";
|
|
}
|
|
|
|
|
|
document.getElementById(_cat+"_"+_name+"_text").disabled = !_status;
|
|
document.getElementById(_cat+"_"+_name+"_text").style = _color;
|
|
|
|
setEnabled(_cat+"_"+_name, _status);
|
|
|
|
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, _number = -1){
|
|
if (_number > -1) {
|
|
if (_cat == "Digits")
|
|
_cat = "digit";
|
|
if (_cat == "Analog")
|
|
_cat = "analog";
|
|
|
|
if ((NUMBERS[_number] == undefined) || (NUMBERS[_number][_cat] == undefined) || (NUMBERS[_number][_cat][_name] == undefined))
|
|
return;
|
|
|
|
|
|
if (_optional) {
|
|
NUMBERS[_number][_cat][_name]["enabled"] = document.getElementById(_cat+"_"+_name+"_enabled").checked;
|
|
}
|
|
|
|
for (var j = 1; j <= _param[_cat][_name]["anzParam"]; ++j) {
|
|
let element = document.getElementById(_cat+"_"+_name+"_value"+j);
|
|
if (element.tagName.toLowerCase() == "select") {
|
|
NUMBERS[_number][_cat][_name]["value"+j] = element.selectedIndex > -1 ? element.options[element.selectedIndex].value : "";
|
|
}
|
|
else if ((element.getAttribute("type") != null) && (element.getAttribute("type").toLowerCase() == "checkbox")) {
|
|
NUMBERS[_number][_cat][_name]["value"+j] = element.checked;
|
|
}
|
|
else {
|
|
if ((NUMBERS[_number][_cat][_name].checkRegExList != null) && (NUMBERS[_number][_cat][_name].checkRegExList[j-1] != null)) {
|
|
if (!element.value.match(NUMBERS[_cat][_name].checkRegExList[j-1])) {
|
|
element.classList.add("invalid-input");
|
|
} else {
|
|
element.classList.remove("invalid-input");
|
|
}
|
|
}
|
|
NUMBERS[_number][_cat][_name]["value"+j] = element.value;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (_optional) {
|
|
_param[_cat][_name]["enabled"] = document.getElementById(_cat+"_"+_name+"_enabled").checked;
|
|
}
|
|
|
|
for (var j = 1; j <= _param[_cat][_name]["anzParam"]; ++j) {
|
|
let element = document.getElementById(_cat+"_"+_name+"_value"+j);
|
|
if (element.tagName.toLowerCase() == "select") {
|
|
_param[_cat][_name]["value"+j] = element.selectedIndex > -1 ? element.options[element.selectedIndex].value : "";
|
|
}
|
|
else if ((element.getAttribute("type") != null) && (element.getAttribute("type").toLowerCase() == "checkbox")) {
|
|
_param[_cat][_name]["value"+j] = element.checked;
|
|
}
|
|
else {
|
|
if ((_param[_cat][_name].checkRegExList != null) && (_param[_cat][_name].checkRegExList[j-1] != null)) {
|
|
if (!element.value.match(_param[_cat][_name].checkRegExList[j-1])) {
|
|
element.classList.add("invalid-input");
|
|
} else {
|
|
element.classList.remove("invalid-input");
|
|
}
|
|
}
|
|
_param[_cat][_name]["value"+j] = element.value;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function UpdateInputIndividual()
|
|
{
|
|
if (NUNBERSAkt != -1)
|
|
{
|
|
ReadParameter(param, "PostProcessing", "DecimalShift", true, NUNBERSAkt)
|
|
ReadParameter(param, "PostProcessing", "MaxRateValue", true, NUNBERSAkt)
|
|
ReadParameter(param, "PostProcessing", "ExtendedResolution", true, NUNBERSAkt)
|
|
ReadParameter(param, "PostProcessing", "IgnoreLeadingNaN", true, NUNBERSAkt)
|
|
}
|
|
|
|
var sel = document.getElementById("Numbers_value1");
|
|
NUNBERSAkt = sel.selectedIndex;
|
|
WriteParameter(param, category, "PostProcessing", "DecimalShift", true, NUNBERSAkt);
|
|
WriteParameter(param, category, "PostProcessing", "MaxRateValue", true, NUNBERSAkt);
|
|
WriteParameter(param, category, "PostProcessing", "ExtendedResolution", true, NUNBERSAkt);
|
|
WriteParameter(param, category, "PostProcessing", "IgnoreLeadingNaN", true, NUNBERSAkt);
|
|
}
|
|
|
|
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"];
|
|
document.getElementById("Category_GPIO_enabled").checked = category["GPIO"]["enabled"];
|
|
setVisible("GPIO_item", category["GPIO"]["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);
|
|
WriteParameter(param, category, "MakeImage", "FixedExposure", false);
|
|
|
|
WriteParameter(param, category, "Alignment", "SearchFieldX", false);
|
|
WriteParameter(param, category, "Alignment", "SearchFieldY", false);
|
|
WriteParameter(param, category, "Alignment", "AlignmentAlgo", 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);
|
|
|
|
WriteParameter(param, category, "Analog", "Model", false);
|
|
WriteParameter(param, category, "Analog", "LogImageLocation", true);
|
|
WriteParameter(param, category, "Analog", "LogfileRetentionInDays", true);
|
|
// WriteParameter(param, category, "Analog", "ExtendedResolution", true);
|
|
WriteParameter(param, category, "Analog", "ModelInputSize", false);
|
|
|
|
WriteParameter(param, category, "PostProcessing", "PreValueUse", true);
|
|
WriteParameter(param, category, "PostProcessing", "PreValueAgeStartup", true);
|
|
WriteParameter(param, category, "PostProcessing", "AllowNegativeRates", true);
|
|
// WriteParameter(param, category, "PostProcessing", "MaxRateValue", true);
|
|
WriteParameter(param, category, "PostProcessing", "ErrorMessage", true);
|
|
WriteParameter(param, category, "PostProcessing", "CheckDigitIncreaseConsistency", true);
|
|
|
|
WriteParameter(param, category, "MQTT", "Uri", true);
|
|
WriteParameter(param, category, "MQTT", "MainTopic", true);
|
|
WriteParameter(param, category, "MQTT", "ClientID", true);
|
|
WriteParameter(param, category, "MQTT", "user", true);
|
|
WriteParameter(param, category, "MQTT", "password", true);
|
|
|
|
WriteParameter(param, category, "GPIO", "IO0", true);
|
|
WriteParameter(param, category, "GPIO", "IO1", true);
|
|
WriteParameter(param, category, "GPIO", "IO3", true);
|
|
WriteParameter(param, category, "GPIO", "IO4", true);
|
|
WriteParameter(param, category, "GPIO", "IO12", true);
|
|
WriteParameter(param, category, "GPIO", "IO13", true);
|
|
WriteParameter(param, category, "GPIO", "LEDType", false);
|
|
WriteParameter(param, category, "GPIO", "LEDNumbers", false);
|
|
WriteParameter(param, category, "GPIO", "LEDColor", false);
|
|
|
|
WriteParameter(param, category, "AutoTimer", "AutoStart", false);
|
|
WriteParameter(param, category, "AutoTimer", "Intervall", false);
|
|
|
|
WriteParameter(param, category, "Debug", "Logfile", 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;
|
|
category["GPIO"]["enabled"] = document.getElementById("Category_GPIO_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);
|
|
ReadParameter(param, "MakeImage", "FixedExposure", false);
|
|
|
|
ReadParameter(param, "Alignment", "SearchFieldX", false);
|
|
ReadParameter(param, "Alignment", "SearchFieldY", false);
|
|
ReadParameter(param, "Alignment", "AlignmentAlgo", true);
|
|
|
|
ReadParameter(param, "Digits", "Model", false);
|
|
ReadParameter(param, "Digits", "LogImageLocation", true);
|
|
ReadParameter(param, "Digits", "LogfileRetentionInDays", true);
|
|
ReadParameter(param, "Digits", "ModelInputSize", false);
|
|
|
|
ReadParameter(param, "Analog", "Model", false);
|
|
ReadParameter(param, "Analog", "LogImageLocation", true);
|
|
ReadParameter(param, "Analog", "LogfileRetentionInDays", true);
|
|
// ReadParameter(param, "Analog", "ExtendedResolution", true);
|
|
ReadParameter(param, "Analog", "ModelInputSize", false);
|
|
|
|
ReadParameter(param, "PostProcessing", "PreValueUse", true);
|
|
ReadParameter(param, "PostProcessing", "PreValueAgeStartup", true);
|
|
ReadParameter(param, "PostProcessing", "AllowNegativeRates", true);
|
|
// ReadParameter(param, "PostProcessing", "MaxRateValue", true);
|
|
ReadParameter(param, "PostProcessing", "ErrorMessage", true);
|
|
ReadParameter(param, "PostProcessing", "CheckDigitIncreaseConsistency", true);
|
|
|
|
ReadParameter(param, "MQTT", "Uri", true);
|
|
ReadParameter(param, "MQTT", "MainTopic", true);
|
|
ReadParameter(param, "MQTT", "ClientID", true);
|
|
ReadParameter(param, "MQTT", "user", true);
|
|
ReadParameter(param, "MQTT", "password", true);
|
|
|
|
ReadParameter(param, "GPIO", "IO0", true);
|
|
ReadParameter(param, "GPIO", "IO1", true);
|
|
ReadParameter(param, "GPIO", "IO3", true);
|
|
ReadParameter(param, "GPIO", "IO4", true);
|
|
ReadParameter(param, "GPIO", "IO12", true);
|
|
ReadParameter(param, "GPIO", "IO13", true);
|
|
ReadParameter(param, "GPIO", "LEDType", false);
|
|
ReadParameter(param, "GPIO", "LEDNumbers", false);
|
|
ReadParameter(param, "GPIO", "LEDColor", false);
|
|
// Folgende Zeilen sind für Abwärtskompatibität < v9.0.0 notwendig (manchmal parameter auskommentiert)
|
|
param["GPIO"]["LEDType"]["enabled"] = true;
|
|
param["GPIO"]["LEDNumbers"]["enabled"] = true;
|
|
param["GPIO"]["LEDColor"]["enabled"] = true;
|
|
param["GPIO"]["LEDType"]["found"] = true;
|
|
param["GPIO"]["LEDNumbers"]["found"] = true;
|
|
param["GPIO"]["LEDColor"]["found"] = true;
|
|
|
|
ReadParameter(param, "AutoTimer", "AutoStart", false);
|
|
ReadParameter(param, "AutoTimer", "Intervall", false);
|
|
|
|
ReadParameter(param, "Debug", "Logfile", true);
|
|
ReadParameter(param, "Debug", "LogfileRetentionInDays", true);
|
|
|
|
ReadParameter(param, "System", "TimeZone", true);
|
|
ReadParameter(param, "System", "Hostname", true);
|
|
ReadParameter(param, "System", "TimeServer", true);
|
|
|
|
UpdateInputIndividual();
|
|
|
|
// FormatDecimalValue(param, "PostProcessing", "MaxRateValue");
|
|
}
|
|
|
|
|
|
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;
|
|
category["MQTT"]["enabled"] = document.getElementById("Category_MQTT_enabled").checked;
|
|
UpdateInput();
|
|
UpdateInputIndividual();
|
|
}
|
|
|
|
function UpdateExpertModus()
|
|
{
|
|
// var _style = 'display:none;';
|
|
var _style_pur = 'none';
|
|
var _hidden = true;
|
|
if (document.getElementById("ExpertModus_enabled").checked) {
|
|
// _style = '';
|
|
_style_pur = '';
|
|
_hidden = false;
|
|
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++) {
|
|
expert[i].style.display = _style_pur;
|
|
// document.getElementById(expert[i].id).style = _style;
|
|
}
|
|
|
|
|
|
// Enable / Disable die Optionen in den Menues für die Auswahl. Falls kein Expertenmodus soll nur ein Wert (built-in-led oder externan-flash-ws281x) möglich sein
|
|
Array.from(document.querySelector("#GPIO_IO4_value1").options).forEach(function(option_element) {
|
|
if (option_element.value != "built-in-led")
|
|
option_element.hidden = _hidden;
|
|
});
|
|
|
|
Array.from(document.querySelector("#GPIO_IO12_value1").options).forEach(function(option_element) {
|
|
if (option_element.value != "external-flash-ws281x")
|
|
option_element.hidden = _hidden;
|
|
});
|
|
|
|
}
|
|
|
|
function saveTextAsFile()
|
|
{
|
|
ReadParameterAll();
|
|
if (document.getElementsByClassName("invalid-input").length > 0) {
|
|
alert("Settings cannot be saved. Please check your entries.");
|
|
return;
|
|
}
|
|
|
|
if (confirm("Are you sure you want to update \"config.ini\"?")) {
|
|
ReadParameterAll();
|
|
WriteConfigININew();
|
|
SaveConfigToServer(basepath);
|
|
alert("Config.ini is updated!")
|
|
}
|
|
}
|
|
|
|
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);
|
|
}
|
|
}
|
|
|
|
function numberChanged()
|
|
{
|
|
UpdateInputIndividual();
|
|
}
|
|
|
|
LoadConfigNeu();
|
|
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|