mirror of
https://github.com/jomjol/AI-on-the-edge-device.git
synced 2025-12-10 21:46:55 +03:00
Some district heating meters are displaying their values in GJ and Home Assistant is also capable of accepting heating values in this format.
2094 lines
74 KiB
HTML
2094 lines
74 KiB
HTML
<!DOCTYPE html>
|
|
<html>
|
|
<head>
|
|
<link rel="icon" href="favicon.ico?v=$COMMIT_HASH" type="image/x-icon">
|
|
<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;}
|
|
h4 {font-size: 1em; margin-bottom: 0;}
|
|
h5 {font-size: 0.83em; margin-top: 0.2em; margin-bottom: 0;}
|
|
|
|
p {font-size: 1em;}
|
|
|
|
table {
|
|
border: 0pt;
|
|
border-collapse: collapse;
|
|
}
|
|
|
|
|
|
tr {
|
|
border-bottom: 1px solid lightgray;
|
|
}
|
|
|
|
td {
|
|
padding: 10px;
|
|
}
|
|
|
|
.button {
|
|
padding: 5px 20px;
|
|
width: 211px;
|
|
font-size: 16px;
|
|
}
|
|
|
|
textarea {
|
|
font-size: 14px;
|
|
}
|
|
|
|
.description {
|
|
color: black;
|
|
font-size: 80%;
|
|
}
|
|
|
|
.disabled {
|
|
color:rgb(122, 122, 122);
|
|
}
|
|
|
|
.smallSelect {
|
|
width: 30px;
|
|
}
|
|
|
|
.invalid-input {
|
|
background-color: #FFAA00;
|
|
}
|
|
|
|
.hidden {
|
|
display: none;
|
|
}
|
|
|
|
.expert {
|
|
background-color: #ffc5c5;
|
|
}
|
|
|
|
.indent1 {
|
|
padding-left: 40px;
|
|
}
|
|
|
|
.indent2 {
|
|
padding-left: 69px;
|
|
}
|
|
|
|
.tooltip {
|
|
position: relative;
|
|
display: inline-block;
|
|
}
|
|
|
|
.tooltip .tooltiptext {
|
|
visibility: hidden;
|
|
width: 600px;
|
|
background-color: #fcfcfc;
|
|
|
|
padding: 5px;
|
|
padding-bottom: 0;
|
|
|
|
border: solid black 2px;
|
|
|
|
/* Position the tooltip */
|
|
position: absolute;
|
|
z-index: 1;
|
|
top: 100%;
|
|
left: 100%;
|
|
margin-left: -600px;
|
|
}
|
|
|
|
.tooltip:hover .tooltiptext {
|
|
visibility: visible;
|
|
}
|
|
|
|
.tooltip-content {
|
|
width: calc(100% - 2px);
|
|
height: calc(100% - 2px);
|
|
padding: 1px;
|
|
}
|
|
</style>
|
|
|
|
<link rel="stylesheet" href="mkdocs_theme.css?v=$COMMIT_HASH" />
|
|
<link rel="stylesheet" href="mkdocs_theme_extra.css?v=$COMMIT_HASH" />
|
|
<link rel="stylesheet" href="github.min.css?v=$COMMIT_HASH" />
|
|
|
|
<link href="firework.css?v=$COMMIT_HASH" rel="stylesheet">
|
|
<script type="text/javascript" src="jquery-3.6.0.min.js?v=$COMMIT_HASH"></script>
|
|
<script type="text/javascript" src="firework.js?v=$COMMIT_HASH"></script>
|
|
</head>
|
|
|
|
<body style="font-family: arial; padding: 0px 10px;">
|
|
<h2>Configuration</h2>
|
|
<p>The documentation of each parameter can be shown with hovering over the <img src="help.png" width="16px"> icon.<br>
|
|
The latest version of the documentation is available on <a href="https://jomjol.github.io/AI-on-the-edge-device-docs/Parameters?v=$COMMIT_HASH" target="_blank">jomjol.github.io/AI-on-the-edge-device-docs/Parameters</a>.</p>
|
|
|
|
<input type="checkbox" id="ExpertModus_enabled" value="1" onclick = 'UpdateExpertModus()' unchecked><label for="ExpertModus_enabled"> Expert Mode </label>
|
|
<button class="button" id="Edit_Config_Direct" onclick="editConfigDirect()" style="display:none">Edit Config.ini direct</button>
|
|
<p></p>
|
|
<div id = "divall" style="display:none">
|
|
|
|
<table>
|
|
<tr>
|
|
<th width="400px" style="text-align: left;">
|
|
Parameter
|
|
</th>
|
|
<th style="text-align: left;">
|
|
Value
|
|
</th>
|
|
<th style="text-align: left;">
|
|
Documentation
|
|
</th>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td colspan="3" style="padding-left: 20px;"><h4>TakeImage</h4></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="TakeImage_RawImagesLocation_enabled" value="1" onclick = 'InvertEnableItem("TakeImage", "RawImagesLocation")' unchecked >
|
|
<label for=TakeImage_RawImagesLocation_enabled><class id="TakeImage_RawImagesLocation_text" style="color:black;">Raw Images Location</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" name="name" id="TakeImage_RawImagesLocation_value1">
|
|
</td>
|
|
<td>$TOOLTIP_TakeImage_RawImagesLocation</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="TakeImage_RawImagesRetention_enabled" value="1" onclick = 'InvertEnableItem("TakeImage", "RawImagesRetention")' unchecked >
|
|
<label for=TakeImage_RawImagesRetention_enabled><class id="TakeImage_RawImagesRetention_text" style="color:black;">Raw Images Retention</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="number" id="TakeImage_RawImagesRetention_value1" size="13" min="0" step="1"> Days
|
|
</td>
|
|
<td>$TOOLTIP_TakeImage_RawImagesRetention</td>
|
|
</tr>
|
|
<tr class="expert" id="ex1">
|
|
<td class="indent1">
|
|
<label><class id="TakeImage_Demo_text" style="color:black;">Demo Mode</class></label>
|
|
</td>
|
|
<td>
|
|
<select id="TakeImage_Demo_value1">
|
|
<option value="true">true</option>
|
|
<option value="false" selected>false</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_TakeImage_Demo</td>
|
|
</tr>
|
|
<tr class="expert" id="ex1">
|
|
|
|
<td class="indent1">
|
|
<class id="TakeImage_WaitBeforeTakingPicture_text" style="color:black;">Wait Before Taking Picture</class>
|
|
</td>
|
|
<td>
|
|
<input type="number" id="TakeImage_WaitBeforeTakingPicture_value1" size="13" min="0" step="any"> Seconds
|
|
</td>
|
|
<td>$TOOLTIP_TakeImage_WaitBeforeTakingPicture</td>
|
|
</tr>
|
|
<tr class="expert" id="ex2">
|
|
<td class="indent1">
|
|
<class id="TakeImage_ImageQuality_text" style="color:black;">Image Quality</class>
|
|
</td>
|
|
<td>
|
|
<input type="number" id="TakeImage_ImageQuality_value1" size="13" min="8" max="63">
|
|
</td>
|
|
<td>$TOOLTIP_TakeImage_ImageQuality</td>
|
|
</tr>
|
|
<tr class="expert" id="ex3">
|
|
<td class="indent1">
|
|
<class id="TakeImage_ImageSize_text" style="color:black;">Image Size</class>
|
|
</td>
|
|
<td>
|
|
<select id="TakeImage_ImageSize_value1">
|
|
<option value="VGA" selected>VGA</option>
|
|
<option value="QVGA" >QVGA</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_TakeImage_ImageSize</td>
|
|
</tr>
|
|
|
|
<tr class="expert" id="LEDIntensity_ex3">
|
|
<td class="indent1">
|
|
<class id="TakeImage_LEDIntensity_text" style="color:black;">LED Intensity</class>
|
|
</td>
|
|
<td>
|
|
<input type="number" id="TakeImage_LEDIntensity_value1" size="13" min="0" max="100">
|
|
</td>
|
|
<td>$TOOLTIP_TakeImage_LEDIntensity</td>
|
|
</tr>
|
|
|
|
<tr class="expert" id="Brightness_ex3">
|
|
<td class="indent1">
|
|
<class id="TakeImage_Brightness_text" style="color:black;">Brightness</class>
|
|
</td>
|
|
<td>
|
|
<input type="number" id="TakeImage_Brightness_value1" size="13" min="-2" max="2">
|
|
</td>
|
|
<td>$TOOLTIP_TakeImage_Brightness</td>
|
|
</tr>
|
|
|
|
<tr class="expert" id="Contrast_ex3">
|
|
<td class="indent1">
|
|
<class id="TakeImage_Contrast_text" style="color:black;">Contrast</class>
|
|
</td>
|
|
<td>
|
|
<input type="number" id="TakeImage_Contrast_value1" size="13" min="-2" max="2">
|
|
</td>
|
|
<td>$TOOLTIP_TakeImage_Contrast</td>
|
|
</tr>
|
|
|
|
<tr class="expert" id="Saturation_ex3">
|
|
<td class="indent1">
|
|
<class id="TakeImage_Saturation_text" style="color:black;">Saturation</class>
|
|
</td>
|
|
<td>
|
|
<input type="number" id="TakeImage_Saturation_value1" size="13" min="-2" max="2">
|
|
</td>
|
|
<td>$TOOLTIP_TakeImage_Saturation</td>
|
|
</tr>
|
|
|
|
<tr class="expert" id="TakeImage_FixedExposure_ex10">
|
|
<td class="indent1">
|
|
<class id="TakeImage_FixedExposure_text" style="color:black;">Fixed Exposure</class>
|
|
</td>
|
|
<td>
|
|
<select id="TakeImage_FixedExposure_value1">
|
|
<option value="true" selected>true</option>
|
|
<option value="false" >false</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_TakeImage_FixedExposure</td>
|
|
</tr>
|
|
|
|
|
|
<tr class="expert" id="ex4">
|
|
<td colspan="3" style="padding-left: 20px;"><h4>Alignment</h4></td>
|
|
</tr>
|
|
<tr class="expert" id="ex6">
|
|
<td class="indent1">
|
|
<class id="Alignment_SearchFieldX_text" style="color:black;">Search Field X</class>
|
|
</td>
|
|
<td>
|
|
<input type="number" name="name" id="Alignment_SearchFieldX_value1" size="13" min="1" step="1"> Pixel
|
|
</td>
|
|
<td>$TOOLTIP_Alignment_SearchFieldX</td>
|
|
</tr>
|
|
<tr class="expert" id="ex8">
|
|
<td class="indent1">
|
|
<class id="Alignment_SearchFieldY_text" style="color:black;">Search Field Y</class>
|
|
</td>
|
|
<td>
|
|
<input type="number" name="name" id="Alignment_SearchFieldY_value1" size="13" min="1"> Pixel
|
|
</td>
|
|
<td>$TOOLTIP_Alignment_SearchFieldY</td>
|
|
</tr>
|
|
<tr class="expert" id="AlignmentAlgo_ex8">
|
|
<td class="indent1">
|
|
<input type="checkbox" id="Alignment_AlignmentAlgo_enabled" value="1" onclick = 'InvertEnableItem("Alignment", "AlignmentAlgo")' unchecked >
|
|
<label for=Alignment_AlignmentAlgo_enabled><class id="Alignment_AlignmentAlgo_text" style="color:black;">Alignment Algorithm</class></label>
|
|
</td>
|
|
<td>
|
|
<select id="Alignment_AlignmentAlgo_value1">
|
|
<option value="default" selected>Default</option>
|
|
<option value="highAccuracy" >HighAccuracy</option>
|
|
<option value="fast" >Fast</option>
|
|
<option value="off" >Off</option><!-- add disable aligment algo |01.2023 -->
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_Alignment_AlignmentAlgo</td>
|
|
</tr>
|
|
|
|
<tr class="expert" id="ex13">
|
|
<td class="indent1">
|
|
<class id="Alignment_FlipImageSize_text" style="color:black;">Flip Image Size</class>
|
|
</td>
|
|
<td>
|
|
<select id="Alignment_FlipImageSize_value1">
|
|
<option value="true">true</option>
|
|
<option value="false" selected>false</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_Alignment_FlipImageSize</td>
|
|
</tr>
|
|
|
|
<tr class="expert" id="ex13">
|
|
<td class="indent1">
|
|
<class id="Alignment_InitialMirror_text" style="color:black;">Initial Mirror</class>
|
|
</td>
|
|
<td>
|
|
<select id="Alignment_InitialMirror_value1">
|
|
<option value="true">true</option>
|
|
<option value="false" selected>false</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_Alignment_InitialMirror</td>
|
|
</tr>
|
|
|
|
|
|
|
|
<tr id="Category_Digits_ex4">
|
|
<td colspan="3" style="padding-left: 20px;">
|
|
<h4><input type="checkbox" id="Category_Digits_enabled" value="1" onclick = 'UpdateAfterCategoryCheck()' unchecked >
|
|
<label for=Category_Digits_enabled>Digits</label></h4>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<class id="Digits_Model_text" style="color:black;">Model</class>
|
|
</td>
|
|
<td>
|
|
<select id="Digits_Model_value1">
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_Digits_Model</td>
|
|
</tr>
|
|
|
|
<tr class="expert" id="ex91">
|
|
<td class="indent1">
|
|
<input type="checkbox" id="Digits_CNNGoodThreshold_enabled" value="1" onclick = 'InvertEnableItem("Digits", "CNNGoodThreshold")' unchecked >
|
|
<label for=Digits_CNNGoodThreshold_enabled><class id="Digits_CNNGoodThreshold_text" style="color:black;">CNN Good Threshold</class></label>
|
|
</td>
|
|
<td>
|
|
<input width="40px" type="number" id="Digits_CNNGoodThreshold_value1" min="0" max="1" step="0.1">
|
|
</td>
|
|
<td>$TOOLTIP_Digits_CNNGoodThreshold</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="Digits_ROIImagesLocation_enabled" value="1" onclick = 'InvertEnableItem("Digits", "ROIImagesLocation")' unchecked >
|
|
<label for=Digits_ROIImagesLocation_enabled><class id="Digits_ROIImagesLocation_text" style="color:black;">ROI Images Location</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" name="name" id="Digits_ROIImagesLocation_value1">
|
|
</td>
|
|
<td>$TOOLTIP_Digits_ROIImagesLocation</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="Digits_ROIImagesRetention_enabled" value="1" onclick = 'InvertEnableItem("Digits", "ROIImagesRetention")' unchecked >
|
|
<label for=Digits_ROIImagesRetention_enabled><class id="Digits_ROIImagesRetention_text" style="color:black;">ROI Images Retention</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="number" id="Digits_ROIImagesRetention_value1" min="0" step="1"> Days
|
|
</td>
|
|
<td>$TOOLTIP_Digits_ROIImagesRetention</td>
|
|
</tr>
|
|
|
|
<tr id="Category_Analog_ex4">
|
|
<td colspan="3" style="padding-left: 20px;">
|
|
<h4><input type="checkbox" id="Category_Analog_enabled" value="1" onclick = 'UpdateAfterCategoryCheck()' unchecked >
|
|
<label for=Category_Analog_enabled>Analog</label></h4>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<class id="Analog_Model_text" style="color:black;">Model</class>
|
|
</td>
|
|
<td>
|
|
<select id="Analog_Model_value1">
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_Analog_Model</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="Analog_ROIImagesLocation_enabled" value="1" onclick = 'InvertEnableItem("Analog", "ROIImagesLocation")' unchecked >
|
|
<label for=Analog_ROIImagesLocation_enabled><class id="Analog_ROIImagesLocation_text" style="color:black;">ROI Images Location</class>
|
|
</label>
|
|
</td>
|
|
<td> <input type="text" name="name" id="Analog_ROIImagesLocation_value1"> </td>
|
|
<td>$TOOLTIP_Analog_ROIImagesLocation</td>
|
|
</tr>
|
|
|
|
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="Analog_ROIImagesRetention_enabled" value="1" onclick = 'InvertEnableItem("Analog", "ROIImagesRetention")' unchecked >
|
|
<label for=Analog_ROIImagesRetention_enabled><class id="Analog_ROIImagesRetention_text" style="color:black;">ROI Images Retention</class></label></td>
|
|
<td> <input type="number" id="Analog_ROIImagesRetention_value1" min="0" step="1"> Days</td>
|
|
<td>$TOOLTIP_Analog_ROIImagesRetention</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td colspan="3" style="padding-left: 20px;"><h4>PostProcessing</h4></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<label><class id="PostProcessing_PreValueUse_text" style="color:black;">Previous Value</class></label>
|
|
</td>
|
|
<td>
|
|
<select id="PostProcessing_PreValueUse_value1">
|
|
<option value="true" selected>true</option>
|
|
<option value="false" >false</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_PostProcessing_PreValueUse</td>
|
|
</tr>
|
|
<tr class="expert" id="ex11">
|
|
<td class="indent1">
|
|
<input type="checkbox" id="PostProcessing_PreValueAgeStartup_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "PreValueAgeStartup")' unchecked >
|
|
<label for=PostProcessing_PreValueAgeStartup_enabled><class id="PostProcessing_PreValueAgeStartup_text" style="color:black;">Maximum Age of Previous Value after Startup</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="number" id="PostProcessing_PreValueAgeStartup_value1" size="13" min="0"> Seconds
|
|
</td>
|
|
<td>$TOOLTIP_PostProcessing_PreValueAgeStartup</td>
|
|
</tr>
|
|
<tr class="expert" id="ex12">
|
|
<td class="indent1">
|
|
<label><class id="PostProcessing_ErrorMessage_text" style="color:black;">Skip Messages on Error</class></label>
|
|
</td>
|
|
<td>
|
|
<select id="PostProcessing_ErrorMessage_value1">
|
|
<option value="true" selected>true</option>
|
|
<option value="false" >false</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_PostProcessing_ErrorMessage</td>
|
|
</tr>
|
|
<tr class="expert" id="ex1dddd">
|
|
<td class="indent1">
|
|
<label><class id="PostProcessing_CheckDigitIncreaseConsistency_text" style="color:black;">Check Digit Increase Consistency</class></label>
|
|
</td>
|
|
<td>
|
|
<select id="PostProcessing_CheckDigitIncreaseConsistency_value1">
|
|
<option value="true" selected>true</option>
|
|
<option value="false" >false</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_PostProcessing_CheckDigitIncreaseConsistency</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="indent1" colspan="3">
|
|
<br>
|
|
<b>Postprocessing Individual Parameters:
|
|
<select id="Numbers_value1" onchange="numberChanged()">
|
|
</select></b>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1" style="padding-left: 75px;">
|
|
<label><class id="PostProcessing_AllowNegativeRates_text" style="color:black;">Allow Negative Rates</class></label>
|
|
</td>
|
|
<td>
|
|
<select id="PostProcessing_AllowNegativeRates_value1">
|
|
<option value="true" selected>true</option>
|
|
<option value="false" >false</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_PostProcessing_NUMBER.AllowNegativeRates</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1" style="padding-left: 75px;">
|
|
<input type="checkbox" id="PostProcessing_DecimalShift_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "DecimalShift")' unchecked >
|
|
<label for=PostProcessing_DecimalShift_enabled><class id="PostProcessing_DecimalShift_text" style="color:black;">Decimal Shift</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="number" id="PostProcessing_DecimalShift_value1" step="1">
|
|
</td>
|
|
<td>$TOOLTIP_PostProcessing_NUMBER.DecimalShift</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1" style="padding-left: 75px;">
|
|
<input type="checkbox" id="PostProcessing_AnalogDigitalTransitionStart_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "AnalogDigitalTransitionStart")' unchecked >
|
|
<label for=PostProcessing_AnalogDigitalTransitionStart_enabled><class id="PostProcessing_AnalogDigitalTransitionStart_text" style="color:black;">Analog/Digital Transition Start</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="number" id="PostProcessing_AnalogDigitalTransitionStart_value1" step="0.1" min="6.0" max="9.9" value="9.2">
|
|
</td>
|
|
<td>$TOOLTIP_PostProcessing_NUMBER.AnalogDigitalTransitionStart</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="indent1" style="padding-left: 75px;">
|
|
<input type="checkbox" id="PostProcessing_MaxRateValue_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "MaxRateValue")' unchecked >
|
|
<label for=PostProcessing_MaxRateValue_enabled><class id="PostProcessing_MaxRateValue_text" style="color:black;">Maximum Rate Value</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="number" id="PostProcessing_MaxRateValue_value1" size="13" min="0" step="any">
|
|
</td>
|
|
<td>$TOOLTIP_PostProcessing_NUMBER.MaxRateValue</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1" style="padding-left: 75px;">
|
|
<input type="checkbox" id="PostProcessing_MaxRateType_enabled" value="1" onclick = 'InvertEnableItem("PostProcessing", "MaxRateType")' unchecked >
|
|
<label for=PostProcessing_MaxRateType_enabled><class id="PostProcessing_MaxRateType_text" style="color:black;">Maximum Rate Type</class></label>
|
|
</td>
|
|
<td>
|
|
<select id="PostProcessing_MaxRateType_value1">
|
|
<option value="AbsoluteChange" >AbsoluteChange</option>
|
|
<option value="RateChange" selected>RateChange</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_PostProcessing_NUMBER.MaxRateType</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1" style="padding-left: 75px;">
|
|
<label><class id="PostProcessing_ExtendedResolution_text" style="color:black;">Extended Resolution</class></label>
|
|
</td>
|
|
<td>
|
|
<select id="PostProcessing_ExtendedResolution_value1">
|
|
<option value="true" >true</option>
|
|
<option value="false" selected>false</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_PostProcessing_NUMBER.ExtendedResolution</td>
|
|
</tr>
|
|
<tr>
|
|
<td id="ex121" class="indent1" style="padding-left: 75px;">
|
|
<label><class id="PostProcessing_IgnoreLeadingNaN_text" style="color:black;">Ignore Leading NaNs</class></label>
|
|
</td>
|
|
<td>
|
|
<select id="PostProcessing_IgnoreLeadingNaN_value1">
|
|
<option value="true" >true</option>
|
|
<option value="false" selected>false</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_PostProcessing_NUMBER.IgnoreLeadingNaN</td>
|
|
</tr>
|
|
|
|
|
|
|
|
<tr>
|
|
<td colspan="3" style="padding-left: 20px;">
|
|
<h4>
|
|
<input type="checkbox" id="Category_MQTT_enabled" value="1" onclick = 'UpdateAfterCategoryCheck()' unchecked >
|
|
<label for=Category_MQTT_enabled>MQTT</label>
|
|
</h4>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="MQTT_Uri_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "Uri")' unchecked >
|
|
<label for=MQTT_Uri_enabled><class id="MQTT_Uri_text" style="color:black;">URI</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="MQTT_Uri_value1">
|
|
</td>
|
|
<td>$TOOLTIP_MQTT_Uri</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="MQTT_MainTopic_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "MainTopic")' unchecked >
|
|
<label for=MQTT_MainTopic_enabled><class id="MQTT_MainTopic_text" style="color:black;">Main Topic</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="MQTT_MainTopic_value1">
|
|
</td>
|
|
<td>$TOOLTIP_MQTT_MainTopic</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="MQTT_ClientID_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "ClientID")' unchecked >
|
|
<label for=MQTT_ClientID_enabled><class id="MQTT_ClientID_text" style="color:black;">Client ID</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="MQTT_ClientID_value1">
|
|
</td>
|
|
<td>$TOOLTIP_MQTT_ClientID</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="MQTT_user_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "user")' unchecked >
|
|
<label for=MQTT_user_enabled><class id="MQTT_user_text" style="color:black;">Username</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="MQTT_user_value1">
|
|
</td>
|
|
<td>$TOOLTIP_MQTT_user</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="MQTT_password_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "password")' unchecked >
|
|
<label for=MQTT_password_enabled><class id="MQTT_password_text" style="color:black;">Password</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="MQTT_password_value1">
|
|
</td>
|
|
<td>$TOOLTIP_MQTT_password</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<label><class id="MQTT_RetainMessages_text" style="color:black;">MQTT Retain Flag</class></label>
|
|
</td>
|
|
<td>
|
|
<select id="MQTT_RetainMessages_value1">
|
|
<option value="true" selected>true</option>
|
|
<option value="false" >false</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_MQTT_RetainMessages</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1" colspan="3">
|
|
<h4>Homeassistant Discovery (using MQTT)</h4>
|
|
<h5>The discovery topics and the static topics (IP, MAC, Hostname, Interval, ...) only get sent on startup.
|
|
To send them again, you can call the following URL: <a href=mqtt_publish_discovery target="_blank">http://<IP>/mqtt_publish_discovery</a></h5>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<label><class id="MQTT_HomeassistantDiscovery_text" style="color:black;">Homeassistant Discovery</class></label>
|
|
</td>
|
|
<td>
|
|
<select id="MQTT_HomeassistantDiscovery_value1">
|
|
<option value="true" selected>true</option>
|
|
<option value="false" >false</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_MQTT_HomeassistantDiscovery</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="MQTT_MeterType_enabled" value="1" onclick = 'InvertEnableItem("MQTT", "MeterType")' unchecked >
|
|
<label for=MQTT_MeterType_enabled><class id="MQTT_MeterType_text" style="color:black;">Meter Type</class></label>
|
|
</td>
|
|
<td>
|
|
<select id="MQTT_MeterType_value1"> <!-- See https://developers.home-assistant.io/docs/core/entity/sensor/#available-device-classes -->
|
|
<option value="other" selected>Other (no Units)</option>
|
|
<option value="water_m3">Watermeter (Value: m³, Rate: m³/h)</option>
|
|
<option value="water_l">Watermeter (Value: l, Rate: l/h)</option>
|
|
<option value="water_gal">Watermeter (Value: gal, Rate: gal/h)</option>
|
|
<option value="water_ft3">Watermeter (Value: ft³, Rate: ft³/m)</option>
|
|
<option value="gas_m3">Gasmeter (Value: m³, Rate: m³/h)</option>
|
|
<option value="gas_ft3">Gasmeter (Value: ft³, Rate: ft³/m)</option>
|
|
<option value="energy_wh">Energymeter (Value: Wh, Rate: W)</option>
|
|
<option value="energy_kwh">Energymeter (Value: kWh, Rate: kW)</option>
|
|
<option value="energy_mwh">Energymeter (Value: MWh, Rate: MW)</option>
|
|
<option value="energy_gj">Energymeter (Value: GJ, Rate: GJ/h)</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_MQTT_MeterType</td>
|
|
</tr>
|
|
|
|
|
|
<tr>
|
|
<td colspan="3" style="padding-left: 20px;">
|
|
<h4>
|
|
<input type="checkbox" id="Category_InfluxDB_enabled" value="1" onclick = 'UpdateAfterCategoryCheck()' unchecked >
|
|
<label for=Category_InfluxDB_enabled>InfluxDBv1</label></h4><h5>For InfluxDB v2.x see below [InfluxDBv2]</h5>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="InfluxDB_Uri_enabled" value="1" onclick = 'InvertEnableItem("InfluxDB", "Uri")' unchecked >
|
|
<label for=InfluxDB_Uri_enabled><class id="InfluxDB_Uri_text" style="color:black;">URI</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="InfluxDB_Uri_value1">
|
|
</td>
|
|
<td>$TOOLTIP_InfluxDB_Uri</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="InfluxDB_Database_enabled" value="1" onclick = 'InvertEnableItem("InfluxDB", "Database")' unchecked >
|
|
<label for=InfluxDB_Database_enabled><class id="InfluxDB_Database_text" style="color:black;">Database</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="InfluxDB_Database_value1">
|
|
</td>
|
|
<td>$TOOLTIP_InfluxDB_Database</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="InfluxDB_Measurement_enabled" value="1" onclick = 'InvertEnableItem("InfluxDB", "Measurement")' unchecked >
|
|
<label for=InfluxDB_Measurement_enabled><class id="InfluxDB_Measurement_text" style="color:black;">Measurement</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="InfluxDB_Measurement_value1">
|
|
</td>
|
|
<td>$TOOLTIP_InfluxDB_Measurement</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="InfluxDB_user_enabled" value="1" onclick = 'InvertEnableItem("InfluxDB", "user")' unchecked >
|
|
<label for=InfluxDB_user_enabled><class id="InfluxDB_user_text" style="color:black;">Username</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="InfluxDB_user_value1">
|
|
</td>
|
|
<td>$TOOLTIP_InfluxDB_user</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="InfluxDB_password_enabled" value="1" onclick = 'InvertEnableItem("InfluxDB", "password")' unchecked >
|
|
<label for=InfluxDB_password_enabled><class id="InfluxDB_password_text" style="color:black;">Password</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="InfluxDB_password_value1">
|
|
</td>
|
|
<td>$TOOLTIP_InfluxDB_password</td>
|
|
</tr>
|
|
|
|
|
|
|
|
|
|
<tr>
|
|
<td colspan="3" style="padding-left: 20px;">
|
|
<h4>
|
|
<input type="checkbox" id="Category_InfluxDBv2_enabled" value="1" onclick = 'UpdateAfterCategoryCheck()' unchecked >
|
|
<label for=Category_InfluxDBv2_enabled>InfluxDBv2</label></h4><h5>For InfluxDB v1.x see above [InfluxDBv1]</h5>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="InfluxDBv2_Uri_enabled" value="1" onclick = 'InvertEnableItem("InfluxDBv2", "Uri")' unchecked >
|
|
<label for=InfluxDBv2_Uri_enabled><class id="InfluxDBv2_Uri_text" style="color:black;">URI</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="InfluxDBv2_Uri_value1">
|
|
</td>
|
|
<td>$TOOLTIP_InfluxDBv2_Uri</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="InfluxDBv2_Database_enabled" value="1" onclick = 'InvertEnableItem("InfluxDBv2", "Database")' unchecked >
|
|
<label for=InfluxDBv2_Database_enabled><class id="InfluxDBv2_Database_text" style="color:black;">Database</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="InfluxDBv2_Database_value1">
|
|
</td>
|
|
<td>$TOOLTIP_InfluxDBv2_Database</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="InfluxDBv2_Measurement_enabled" value="1" onclick = 'InvertEnableItem("InfluxDBv2", "Measurement")' unchecked >
|
|
<label for=InfluxDBv2_Measurement_enabled><class id="InfluxDBv2_Measurement_text" style="color:black;">Measurement</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="InfluxDBv2_Measurement_value1">
|
|
</td>
|
|
<td>$TOOLTIP_InfluxDBv2_Measurement</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="InfluxDBv2_Org_enabled" value="1" onclick = 'InvertEnableItem("InfluxDBv2", "Org")' unchecked >
|
|
<label for=InfluxDBv2_Org_enabled><class id="InfluxDBv2_Org_text" style="color:black;">Organization (Org)</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="InfluxDBv2_Org_value1">
|
|
</td>
|
|
<td>$TOOLTIP_InfluxDBv2_Org</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="InfluxDBv2_Token_enabled" value="1" onclick = 'InvertEnableItem("InfluxDBv2", "Token")' unchecked >
|
|
<label for=InfluxDBv2_Token_enabled><class id="InfluxDBv2_Token_text" style="color:black;">Token</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="InfluxDBv2_Token_value1">
|
|
</td>
|
|
<td>$TOOLTIP_InfluxDBv2_Token</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1" colspan="3">
|
|
<br>
|
|
<b>Postprocessing Individual Parameters:
|
|
<select id="NumbersInfluxDB_value1" onchange="numberInfluxDBChanged()">
|
|
</select></b>
|
|
</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1" style="padding-left: 75px;">
|
|
<input type="checkbox" id="InfluxDBv2_Fieldname_enabled" value="1" onclick = 'InvertEnableItem("InfluxDBv2", "Fieldname")' unchecked >
|
|
<label for=InfluxDBv2_Fieldname_enabled><class id="InfluxDBv2_Fieldname_text" style="color:black;">Fieldname</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="InfluxDBv2_Fieldname_value1">
|
|
</td>
|
|
<td>$TOOLTIP_InfluxDBv2_NUMBER.Fieldname</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td colspan="3" style="padding-left: 20px;">
|
|
<h4><input type="checkbox" id="Category_GPIO_enabled" value="1" onclick='UpdateAfterCategoryCheck()' unchecked >
|
|
<label for=Category_GPIO_enabled>GPIO Settings</label></h4>
|
|
<span class="GPIO_Item">
|
|
<h5>By default GPIO4 is used for the built-in flash LED! If you enable the GPIO Settings,
|
|
you have to explicitely enable it again on GPIO4 or on GPIO12 with an external LED!</h5>
|
|
</span>
|
|
</td>
|
|
</tr>
|
|
|
|
<!------------- GPIO0 begin ------------------>
|
|
<tr class="expert" class="GPIO_IO0 GPIO_item">
|
|
<td class="indent1">
|
|
<input type="checkbox" id="GPIO_IO0_enabled" value="1" onclick = 'InvertEnableItem("GPIO", "IO0")' unchecked>
|
|
<label for=GPIO_IO0_enabled><span id="GPIO_IO0_text">GPIO 0 State</span></label>
|
|
</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>$TOOLTIP_GPIO_IO0</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO0 GPIO_item">
|
|
<td class="indent2">
|
|
<span id="GPIO_IO0_text" class="GPIO_IO0 GPIO_item">GPIO 0 Use Interrupt</span>
|
|
</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>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO0 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO0 GPIO_item">GPIO 0 PWM Duty Cycle Resolution</span>
|
|
</td>
|
|
<td><input type="number" id="GPIO_IO0_value3" min="1" max="20"> <span class="GPIO_IO0 GPIO_item">Bits</span></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO0 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO0 GPIO_item">GPIO 0 Enable MQTT</span>
|
|
</td>
|
|
<td><input type="checkbox" id="GPIO_IO0_value4"></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO0 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO0 GPIO_item">GPIO 0 Enable HTTP</span>
|
|
</td>
|
|
<td><input type="checkbox" id="GPIO_IO0_value5"></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO0 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO0 GPIO_item">GPIO 0 Name</span>
|
|
</td>
|
|
<td><input type="text" id="GPIO_IO0_value6"></td>
|
|
<td></td>
|
|
</tr>
|
|
<!------------- GPIO0 end ------------------>
|
|
|
|
<!------------- GPIO1 begin ------------------>
|
|
<tr class="expert" class="GPIO_IO1 GPIO_item">
|
|
<td class="indent1">
|
|
<input type="checkbox" id="GPIO_IO1_enabled" value="1" onclick = 'InvertEnableItem("GPIO", "IO1")' unchecked>
|
|
<label for=GPIO_IO1_enabled><span id="GPIO_IO1_text">GPIO 1 State</span></label>
|
|
</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>$TOOLTIP_GPIO_IO1</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO1 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO1 GPIO_item" class="expert">GPIO 1 Use Interrupt</span>
|
|
</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>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO1 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO1 GPIO_item">GPIO 1 PWM Duty Cycle Resolution</span>
|
|
</td>
|
|
<td><input type="number" id="GPIO_IO1_value3" min="1" max="20"> <span class="GPIO_IO1 GPIO_item">Bits</span></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO1 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO1 GPIO_item">GPIO 1 Enable MQTT</span>
|
|
</td>
|
|
<td><input type="checkbox" id="GPIO_IO1_value4"></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO1 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO1 GPIO_item">GPIO 1 Enable HTTP</span>
|
|
</td>
|
|
<td><input type="checkbox" id="GPIO_IO1_value5"></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO1 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO1 GPIO_item" class="expert">GPIO 1 Name</span>
|
|
</td>
|
|
<td><input type="text" id="GPIO_IO1_value6"></td>
|
|
<td></td>
|
|
</tr>
|
|
<!------------- GPIO1 end ------------------>
|
|
|
|
<!------------- GPIO3 begin ------------------>
|
|
<tr class="expert" class="GPIO_IO3 GPIO_item">
|
|
<td class="indent1">
|
|
<input type="checkbox" id="GPIO_IO3_enabled" value="1" onclick = 'InvertEnableItem("GPIO", "IO3")' unchecked>
|
|
<label for=GPIO_IO3_enabled><span id="GPIO_IO3_text">GPIO 3 State</span></label>
|
|
</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>$TOOLTIP_GPIO_IO3</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO3 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO3 GPIO_item">GPIO 3 Use Interrupt</span>
|
|
</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>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO3 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO3 GPIO_item">GPIO 3 PWM Duty Cycle Resolution</span>
|
|
</td>
|
|
<td><input type="number" id="GPIO_IO3_value3" min="1" max="20"> <span class="GPIO_IO3 GPIO_item">Bits</span></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO3 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO3 GPIO_item">GPIO 3 Enable MQTT</span>
|
|
</td>
|
|
<td><input type="checkbox" id="GPIO_IO3_value4"></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO3 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO3 GPIO_item">GPIO 3 Enable HTTP</span>
|
|
</td>
|
|
<td><input type="checkbox" id="GPIO_IO3_value5"></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO3 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO3 GPIO_item">GPIO 3 Name</span>
|
|
</td>
|
|
<td><input type="text" id="GPIO_IO3_value6"></td>
|
|
<td></td>
|
|
</tr>
|
|
<!------------- GPIO3 end ------------------>
|
|
|
|
<!------------- GPIO4 begin ------------------>
|
|
<tr class="GPIO_item">
|
|
<td class="indent1">
|
|
<input type="checkbox" id="GPIO_IO4_enabled" value="1" onclick = 'InvertEnableItem("GPIO", "IO4")' unchecked>
|
|
<label for=GPIO_IO4_enabled><span id="GPIO_IO4_text">GPIO 4 State</span></label>
|
|
</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>$TOOLTIP_GPIO_IO4</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO4 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO4 GPIO_item">GPIO 4 Use Interrupt</span>
|
|
</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>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO4 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO4 GPIO_item">GPIO 4 PWM Duty Cycle Resolution</span>
|
|
</td>
|
|
<td><input type="number" id="GPIO_IO4_value3" min="1" max="20"> <span class="GPIO_IO4 GPIO_item">Bits</span></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO4 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO4 GPIO_item">GPIO 4 Enable MQTT</span>
|
|
</td>
|
|
<td><input type="checkbox" id="GPIO_IO4_value4"></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO4 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO4 GPIO_item">GPIO 4 Enable HTTP</span>
|
|
</td>
|
|
<td><input type="checkbox" id="GPIO_IO4_value5"></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO4 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO4 GPIO_item">GPIO 4 Name</span>
|
|
</td>
|
|
<td><input type="text" id="GPIO_IO4_value6"></td>
|
|
<td></td>
|
|
</tr>
|
|
<!------------- GPIO4 end ------------------>
|
|
|
|
<!------------- GPIO12 begin ------------------>
|
|
<tr class="GPIO_item">
|
|
<td class="indent1">
|
|
<input type="checkbox" id="GPIO_IO12_enabled" value="1" onclick = 'InvertEnableItem("GPIO", "IO12")' unchecked>
|
|
<label for=GPIO_IO12_enabled><span id="GPIO_IO12_text">GPIO 12 State</span></label>
|
|
</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>$TOOLTIP_GPIO_IO12</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO12 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO12 GPIO_item">GPIO 12 Use Interrupt</span>
|
|
</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>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO12 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO12 GPIO_item">GPIO 12 PWM Duty Cycle Resolution</span>
|
|
</td>
|
|
<td><input type="number" id="GPIO_IO12_value3" min="1" max="20"> <span class="GPIO_IO12 GPIO_item">Bits</span></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO12 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO12 GPIO_item">GPIO 12 Enable MQTT</span>
|
|
</td>
|
|
<td><input type="checkbox" id="GPIO_IO12_value4"></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO12 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO12 GPIO_item">GPIO 12 Enable HTTP</span>
|
|
</td>
|
|
<td><input type="checkbox" id="GPIO_IO12_value5"></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO12 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO12 GPIO_item">GPIO 12 Name</span>
|
|
</td>
|
|
<td><input type="text" id="GPIO_IO12_value6"></td>
|
|
<td></td>
|
|
</tr>
|
|
|
|
<tr class="GPIO_item" id="wstypeex3">
|
|
<td class="indent1">
|
|
<span class="GPIO_IO12 GPIO_item" id="GPIO_LEDType_text">LED Type (NeoPixel)</span>
|
|
</td>
|
|
<td class="GPIO_item">
|
|
<select class="GPIO_item" id="GPIO_LEDType_value1">
|
|
<option value="WS2812" selected>WS2812</option>
|
|
<option value="WS2812B">WS2812B</option>
|
|
<option value="SK6812">SK6812</option>
|
|
<option value="WS2813">WS2813 (not tested)</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_GPIO_LEDType</td>
|
|
</tr>
|
|
|
|
<tr class="GPIO_item" id="LEDANZex8" >
|
|
<td class="indent1">
|
|
<span class="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>$TOOLTIP_GPIO_LEDNumbers</td>
|
|
</tr>
|
|
<tr class="GPIO_item" id="LEDRGBex9">
|
|
<td class="indent1">
|
|
<span class="GPIO_item" id="GPIO_LEDColor_text">LED Color</span>
|
|
</td>
|
|
<td class="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>$TOOLTIP_GPIO_LEDColor</td>
|
|
</tr>
|
|
|
|
|
|
<!------------- GPIO12 end ------------------>
|
|
|
|
<!------------- GPIO13 begin ------------------>
|
|
<tr class="expert" class="GPIO_IO13 GPIO_item">
|
|
<td class="indent1">
|
|
<input type="checkbox" id="GPIO_IO13_enabled" value="1" onclick = 'InvertEnableItem("GPIO", "IO13")' unchecked>
|
|
<label for=GPIO_IO13_enabled><span id="GPIO_IO13_text">GPIO 13 State</span></label>
|
|
</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>$TOOLTIP_GPIO_IO13</td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO13 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO13 GPIO_item">GPIO 13 Use Interrupt</span>
|
|
</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>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO13 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO13 GPIO_item">GPIO 13 PWM Duty Cycle Resolution</span>
|
|
</td>
|
|
<td><input type="number" id="GPIO_IO13_value3" min="1" max="20"> <span class="GPIO_IO13 GPIO_item">Bits</span></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO13 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO13 GPIO_item">GPIO 13 Enable MQTT</span>
|
|
</td>
|
|
<td><input type="checkbox" id="GPIO_IO13_value4"></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO13 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO13 GPIO_item">GPIO 13 Enable HTTP</span>
|
|
</td>
|
|
<td><input type="checkbox" id="GPIO_IO13_value5"></td>
|
|
<td></td>
|
|
</tr>
|
|
<tr class="expert" class="GPIO_IO13 GPIO_item">
|
|
<td class="indent2">
|
|
<span class="GPIO_IO13 GPIO_item">GPIO 13 Name</span>
|
|
</td>
|
|
<td><input type="text" id="GPIO_IO13_value6"></td>
|
|
<td></td>
|
|
</tr>
|
|
<!------------- GPIO13 end ------------------>
|
|
|
|
<tr>
|
|
<td colspan="3" style="padding-left: 20px;"><h4>AutoTimer</h4></td>
|
|
</tr>
|
|
<tr class="expert" id="ex13">
|
|
<td class="indent1">
|
|
<class id="AutoTimer_AutoStart_text" style="color:black;">Automatically Round Start</class>
|
|
</td>
|
|
<td>
|
|
<select id="AutoTimer_AutoStart_value1">
|
|
<option value="true" selected>true</option>
|
|
<option value="false" >false</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_AutoTimer_AutoStart</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<class id="AutoTimer_Interval_text" style="color:black;">Round Interval</class>
|
|
</td>
|
|
<td>
|
|
<input type="number" id="AutoTimer_Interval_value1" size="13" min="3" step="any"> Minutes
|
|
</td>
|
|
<td>$TOOLTIP_AutoTimer_Interval</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td colspan="3" style="padding-left: 20px;"><h4>Data Logging</h4></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<class id="DataLogging_DataLogActive_text" style="color:black;">Data Logging</class>
|
|
</td>
|
|
<td>
|
|
<select id="DataLogging_DataLogActive_value1">
|
|
<option value="true" selected>true</option>
|
|
<option value="false" >false</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_DataLogging_DataLogActive</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td class="indent1">
|
|
<class id="DataLogging_DataFilesRetention_text" style="color:black;">Data Files Retention</class>
|
|
</td>
|
|
<td>
|
|
<input type="number" id="DataLogging_DataFilesRetention_value1" size="13" min="0" step="1"> Days
|
|
</td>
|
|
<td>$TOOLTIP_DataLogging_DataFilesRetention</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td colspan="3" style="padding-left: 20px;"><h4>Debug</h4></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<class id="Debug_LogLevel_text" style="color:black;">Logfile Log Level</class>
|
|
</td>
|
|
<td>
|
|
<select id="Debug_LogLevel_value1">
|
|
<option value="1" selected>ERROR</option> <!-- matches esp_log_level_t -->
|
|
<option value="2">WARNING</option>
|
|
<option value="3">INFO</option>
|
|
<option value="4">DEBUG</option>
|
|
</select>
|
|
</td>
|
|
<td>$TOOLTIP_Debug_LogLevel</td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<class id="Debug_LogfilesRetention_text" style="color:black;">LogfilesRetention</class>
|
|
</td>
|
|
<td>
|
|
<input type="number" id="Debug_LogfilesRetention_value1" size="13" min="0" step="1"> Days
|
|
</td>
|
|
<td>$TOOLTIP_Debug_LogfilesRetention</td>
|
|
</tr>
|
|
|
|
<tr>
|
|
<td colspan="3" style="padding-left: 20px;"><h4>System</h4></td>
|
|
</tr>
|
|
<tr>
|
|
<td class="indent1">
|
|
<input type="checkbox" id="System_TimeZone_enabled" value="1" onclick = 'InvertEnableItem("System", "TimeZone")' unchecked >
|
|
<label for=System_TimeZone_enabled><class id="System_TimeZone_text" style="color:black;">Time Zone</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="System_TimeZone_value1">
|
|
</td>
|
|
<td>$TOOLTIP_System_TimeZone</td>
|
|
</tr>
|
|
<tr class="expert" id="ex16">
|
|
<td class="indent1">
|
|
<input type="checkbox" id="System_TimeServer_enabled" value="1" onclick = 'InvertEnableItem("System", "TimeServer")' unchecked >
|
|
<label for=System_TimeServer_enabled><class id="System_TimeServer_text" style="color:black;">Time Server (NTP)</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="System_TimeServer_value1">
|
|
</td>
|
|
<td>$TOOLTIP_System_TimeServer</td>
|
|
</tr>
|
|
<tr class="expert" id="System_Hostname">
|
|
<td class="indent1">
|
|
<input type="checkbox" id="System_Hostname_enabled" value="1" onclick = 'InvertEnableItem("System", "Hostname")' unchecked >
|
|
<label for=System_Hostname_enabled><class id="System_Hostname_text" style="color:black;">Hostname</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="text" id="System_Hostname_value1">
|
|
</td>
|
|
<td>$TOOLTIP_System_Hostname</td>
|
|
</tr>
|
|
|
|
|
|
<tr class="expert" id="System_RSSIThreshold">
|
|
<td class="indent1">
|
|
<input type="checkbox" id="System_RSSIThreshold_enabled" value="1" onclick = 'InvertEnableItem("System", "RSSIThreshold")' unchecked >
|
|
<label for=System_RSSIThreshold_enabled><class id="System_RSSIThreshold_text" style="color:black;">RSSI Threshold</class></label>
|
|
</td>
|
|
<td>
|
|
<input type="number" name="name" id="System_RSSIThreshold_value1" min="-100" max="0" step="1"> dBm
|
|
</td>
|
|
<td>$TOOLTIP_System_RSSIThreshold</td>
|
|
</tr>
|
|
|
|
</table>
|
|
|
|
<p>
|
|
<button class="button" onclick="saveTextAsFile()">Save</button>
|
|
</p>
|
|
<p>
|
|
|
|
</p>
|
|
<div id="doreboot">
|
|
<p>
|
|
<button class="button" id="Edit_Config_Direct" onclick="editConfigDirect()" style="display:none">Edit Config file directly</button>
|
|
|
|
<button class="button" id="reboot" type="button" onclick="doReboot()">Reboot to activate changes</button>
|
|
</p>
|
|
</div>
|
|
|
|
</div>
|
|
|
|
<script type="text/javascript" src="common.js?v=$COMMIT_HASH"></script>
|
|
<script type="text/javascript" src="readconfigcommon.js?v=$COMMIT_HASH"></script>
|
|
<script type="text/javascript" src="readconfigparam.js?v=$COMMIT_HASH"></script>
|
|
|
|
<script type="text/javascript">
|
|
var canvas = document.getElementById('canvas'),
|
|
domainname = getDomainname();
|
|
param;
|
|
category;
|
|
NUNBERSAkt = -1;
|
|
NUMBERS;
|
|
|
|
|
|
function LoadConfigNeu() {
|
|
var isInitialSetup = getParameterByName('InitialSetup');
|
|
if (isInitialSetup === 'true')
|
|
{
|
|
document.getElementById("reboot").style.display = "none";
|
|
}
|
|
|
|
|
|
domainname = getDomainname();
|
|
if (!loadConfig(domainname)) {
|
|
firework.launch('Configuration could not be loaded! Please reload the page!', 'danger', 30000);
|
|
return;
|
|
}
|
|
ParseConfig();
|
|
param = getConfigParameters();
|
|
category = getConfigCategory();
|
|
InitIndivParameter();
|
|
|
|
UpdateInput();
|
|
var sel = document.getElementById("Numbers_value1");
|
|
UpdateInputIndividual(sel);
|
|
UpdateExpertModus();
|
|
document.getElementById("divall").style.display = '';
|
|
}
|
|
|
|
function InitIndivParameter()
|
|
{
|
|
NUMBERS = getNUMBERInfo();
|
|
|
|
var _index = document.getElementById("Numbers_value1");
|
|
while (_index.length)
|
|
_index.remove(0);
|
|
var _indexInflux = document.getElementById("NumbersInfluxDB_value1");
|
|
while (_indexInflux.length)
|
|
_indexInflux.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);
|
|
|
|
var optionInflux = document.createElement("option");
|
|
optionInflux.text = NUMBERS[i]["name"];
|
|
optionInflux.value = i;
|
|
_indexInflux.add(optionInflux);
|
|
}
|
|
_index.selectedIndex = 0;
|
|
_indexInflux.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;
|
|
try {
|
|
anzpara = _param[_cat][_name].anzParam;
|
|
}
|
|
catch (error) {
|
|
firework.launch("Parameter '" + _name + "' in category '" + _cat + "' is unknown!", 'danger', 30000);
|
|
return;
|
|
}
|
|
|
|
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;
|
|
|
|
_isFound = false;
|
|
element.selectedIndex = -1;
|
|
for (var i = 0; i < element.options.length; i++) {
|
|
if (element.options[i].value.toLowerCase() === textToFind.toLowerCase()) {
|
|
element.selectedIndex = i;
|
|
_isFound = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!_isFound)
|
|
{
|
|
_zw_txt = "In the selected field the value '" + textToFind + "' in the parameter '";
|
|
_zw_txt = _zw_txt + _cat + "' in the field '" + _name + "' is invalid. PLEASE CHECK BEFORE SAVING!";
|
|
firework.launch(_zw_txt, 'warning', 10000);
|
|
}
|
|
}
|
|
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;
|
|
|
|
_isFound = false;
|
|
element.selectedIndex = -1;
|
|
for (var i = 0; i < element.options.length; i++) {
|
|
if (element.options[i].value.toLowerCase() === textToFind.toLowerCase()) {
|
|
element.selectedIndex = i;
|
|
_isFound = true;
|
|
break;
|
|
}
|
|
}
|
|
if (!_isFound)
|
|
{
|
|
_zw_txt = "In the selected field the value '" + textToFind + "' in the section '";
|
|
_zw_txt = _zw_txt + _cat + "' in the field '" + _name + "' is invalid. PLEASE CHECK BEFORE SAVING!";
|
|
firework.launch(_zw_txt, 'warning', 10000);
|
|
}
|
|
|
|
}
|
|
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: gray;"
|
|
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: rgb(122, 122, 122);";
|
|
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: rgb(122, 122, 122);";
|
|
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: rgb(122, 122, 122);";
|
|
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: rgb(122, 122, 122);";
|
|
}
|
|
}
|
|
else
|
|
if (!NUMBERS[_number][_cat][_name]["enabled"]) {
|
|
_status = false;
|
|
_color = "color: rgb(122, 122, 122);";
|
|
}
|
|
|
|
|
|
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(sel)
|
|
{
|
|
if (NUNBERSAkt != -1)
|
|
{
|
|
ReadParameter(param, "PostProcessing", "DecimalShift", true, NUNBERSAkt)
|
|
ReadParameter(param, "PostProcessing", "AnalogDigitalTransitionStart", true, NUNBERSAkt)
|
|
ReadParameter(param, "PostProcessing", "MaxRateValue", true, NUNBERSAkt)
|
|
ReadParameter(param, "PostProcessing", "MaxRateType", true, NUNBERSAkt)
|
|
ReadParameter(param, "PostProcessing", "ExtendedResolution", false, NUNBERSAkt)
|
|
ReadParameter(param, "PostProcessing", "IgnoreLeadingNaN", false, NUNBERSAkt)
|
|
ReadParameter(param, "PostProcessing", "AllowNegativeRates", false, NUNBERSAkt)
|
|
ReadParameter(param, "InfluxDBv2", "Fieldname", true, NUNBERSAkt)
|
|
}
|
|
|
|
// var sel = document.getElementById("Numbers_value1");
|
|
NUNBERSAkt = sel.selectedIndex;
|
|
WriteParameter(param, category, "PostProcessing", "DecimalShift", true, NUNBERSAkt);
|
|
WriteParameter(param, category, "PostProcessing", "AnalogDigitalTransitionStart", true, NUNBERSAkt);
|
|
WriteParameter(param, category, "PostProcessing", "MaxRateValue", true, NUNBERSAkt);
|
|
WriteParameter(param, category, "PostProcessing", "MaxRateType", true, NUNBERSAkt);
|
|
WriteParameter(param, category, "PostProcessing", "ExtendedResolution", false, NUNBERSAkt);
|
|
WriteParameter(param, category, "PostProcessing", "IgnoreLeadingNaN", false, NUNBERSAkt);
|
|
WriteParameter(param, category, "PostProcessing", "AllowNegativeRates", false, NUNBERSAkt);
|
|
WriteParameter(param, category, "InfluxDBv2", "Fieldname", 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"];
|
|
document.getElementById("Category_InfluxDB_enabled").checked = category["InfluxDB"]["enabled"];
|
|
document.getElementById("Category_InfluxDBv2_enabled").checked = category["InfluxDBv2"]["enabled"];
|
|
setVisible("GPIO_item", category["GPIO"]["enabled"]);
|
|
|
|
WriteParameter(param, category, "TakeImage", "RawImagesLocation", true);
|
|
WriteParameter(param, category, "TakeImage", "RawImagesRetention", true);
|
|
WriteParameter(param, category, "TakeImage", "Demo", false);
|
|
WriteParameter(param, category, "TakeImage", "WaitBeforeTakingPicture", false);
|
|
WriteParameter(param, category, "TakeImage", "ImageQuality", false);
|
|
WriteParameter(param, category, "TakeImage", "Brightness", false);
|
|
WriteParameter(param, category, "TakeImage", "Contrast", false);
|
|
WriteParameter(param, category, "TakeImage", "Saturation", false);
|
|
WriteParameter(param, category, "TakeImage", "LEDIntensity", false);
|
|
WriteParameter(param, category, "TakeImage", "ImageSize", false);
|
|
WriteParameter(param, category, "TakeImage", "FixedExposure", false);
|
|
|
|
WriteParameter(param, category, "Alignment", "SearchFieldX", false);
|
|
WriteParameter(param, category, "Alignment", "SearchFieldY", false);
|
|
WriteParameter(param, category, "Alignment", "AlignmentAlgo", true);
|
|
|
|
WriteParameter(param, category, "Digits", "CNNGoodThreshold", true);
|
|
WriteParameter(param, category, "Digits", "ROIImagesLocation", true);
|
|
WriteParameter(param, category, "Digits", "ROIImagesRetention", true);
|
|
|
|
WriteParameter(param, category, "Analog", "ROIImagesLocation", true);
|
|
WriteParameter(param, category, "Analog", "ROIImagesRetention", true);
|
|
|
|
WriteParameter(param, category, "PostProcessing", "PreValueUse", false);
|
|
WriteParameter(param, category, "PostProcessing", "PreValueAgeStartup", true);
|
|
// WriteParameter(param, category, "PostProcessing", "AllowNegativeRates", true);
|
|
WriteParameter(param, category, "PostProcessing", "ErrorMessage", false);
|
|
WriteParameter(param, category, "PostProcessing", "CheckDigitIncreaseConsistency", false);
|
|
|
|
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, "MQTT", "RetainMessages", false);
|
|
WriteParameter(param, category, "MQTT", "HomeassistantDiscovery", false);
|
|
WriteParameter(param, category, "MQTT", "MeterType", true);
|
|
|
|
WriteParameter(param, category, "InfluxDB", "Uri", true);
|
|
WriteParameter(param, category, "InfluxDB", "Database", true);
|
|
WriteParameter(param, category, "InfluxDB", "Measurement", true);
|
|
WriteParameter(param, category, "InfluxDB", "user", true);
|
|
WriteParameter(param, category, "InfluxDB", "password", true);
|
|
|
|
WriteParameter(param, category, "InfluxDBv2", "Uri", true);
|
|
WriteParameter(param, category, "InfluxDBv2", "Database", true);
|
|
WriteParameter(param, category, "InfluxDBv2", "Measurement", true);
|
|
WriteParameter(param, category, "InfluxDBv2", "Org", true);
|
|
WriteParameter(param, category, "InfluxDBv2", "Token", true);
|
|
WriteParameter(param, category, "InfluxDBv2", "Fieldname", 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", "Interval", false);
|
|
|
|
WriteParameter(param, category, "DataLogging", "DataLogActive", false);
|
|
WriteParameter(param, category, "DataLogging", "DataFilesRetention", false);
|
|
|
|
WriteParameter(param, category, "Debug", "LogLevel", false);
|
|
WriteParameter(param, category, "Debug", "LogfilesRetention", false);
|
|
|
|
WriteParameter(param, category, "System", "TimeZone", true);
|
|
WriteParameter(param, category, "System", "Hostname", true);
|
|
WriteParameter(param, category, "System", "TimeServer", true);
|
|
WriteParameter(param, category, "System", "RSSIThreshold", true);
|
|
|
|
WriteModelFiles();
|
|
}
|
|
|
|
function WriteModelFiles()
|
|
{
|
|
list_tflite = getTFLITEList();
|
|
|
|
var _indexDig = document.getElementById("Digits_Model_value1");
|
|
var _indexAna = document.getElementById("Analog_Model_value1");
|
|
while (_indexDig.length)
|
|
_indexDig.remove(0);
|
|
while (_indexAna.length)
|
|
_indexAna.remove(0);
|
|
|
|
for (var i = 0; i < list_tflite.length; ++i){
|
|
var optionDig = document.createElement("option");
|
|
var optionAna = document.createElement("option");
|
|
|
|
var text = list_tflite[i].replace("/config/", "");
|
|
|
|
if (list_tflite[i].includes("/dig")) { // Its a digital file, only show in the digital list box
|
|
optionDig.text = text;
|
|
optionDig.value = list_tflite[i];
|
|
_indexDig.add(optionDig);
|
|
}
|
|
else if (list_tflite[i].includes("/ana")) { // Its a digital file, only show in the analog list box
|
|
optionAna.text = text;
|
|
optionAna.value = list_tflite[i];
|
|
_indexAna.add(optionAna);
|
|
}
|
|
else { // all other files, show in both list boxes
|
|
optionDig.text = text;
|
|
optionDig.value = list_tflite[i];
|
|
_indexDig.add(optionDig);
|
|
|
|
optionAna.text = text;
|
|
optionAna.value = list_tflite[i];
|
|
_indexAna.add(optionAna);
|
|
}
|
|
}
|
|
|
|
WriteParameter(param, category, "Analog", "Model", false);
|
|
WriteParameter(param, category, "Digits", "Model", false);
|
|
}
|
|
|
|
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["InfluxDB"]["enabled"] = document.getElementById("Category_InfluxDB_enabled").checked;
|
|
category["InfluxDBv2"]["enabled"] = document.getElementById("Category_InfluxDBv2_enabled").checked;
|
|
category["GPIO"]["enabled"] = document.getElementById("Category_GPIO_enabled").checked;
|
|
|
|
ReadParameter(param, "TakeImage", "RawImagesLocation", true);
|
|
ReadParameter(param, "TakeImage", "RawImagesRetention", true);
|
|
ReadParameter(param, "TakeImage", "Demo", false);
|
|
ReadParameter(param, "TakeImage", "WaitBeforeTakingPicture", false);
|
|
ReadParameter(param, "TakeImage", "ImageQuality", false);
|
|
ReadParameter(param, "TakeImage", "Brightness", false);
|
|
ReadParameter(param, "TakeImage", "Contrast", false);
|
|
ReadParameter(param, "TakeImage", "Saturation", false);
|
|
ReadParameter(param, "TakeImage", "LEDIntensity", false);
|
|
ReadParameter(param, "TakeImage", "ImageSize", false);
|
|
ReadParameter(param, "TakeImage", "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", "CNNGoodThreshold", true);
|
|
ReadParameter(param, "Digits", "ROIImagesLocation", true);
|
|
ReadParameter(param, "Digits", "ROIImagesRetention", true);
|
|
|
|
ReadParameter(param, "Analog", "Model", false);
|
|
ReadParameter(param, "Analog", "ROIImagesLocation", true);
|
|
ReadParameter(param, "Analog", "ROIImagesRetention", true);
|
|
|
|
ReadParameter(param, "PostProcessing", "PreValueUse", false);
|
|
ReadParameter(param, "PostProcessing", "PreValueAgeStartup", true);
|
|
ReadParameter(param, "PostProcessing", "ErrorMessage", false);
|
|
ReadParameter(param, "PostProcessing", "CheckDigitIncreaseConsistency", false);
|
|
|
|
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, "MQTT", "RetainMessages", false);
|
|
ReadParameter(param, "MQTT", "HomeassistantDiscovery", false);
|
|
ReadParameter(param, "MQTT", "MeterType", true);
|
|
|
|
ReadParameter(param, "InfluxDB", "Uri", true);
|
|
ReadParameter(param, "InfluxDB", "Database", true);
|
|
ReadParameter(param, "InfluxDB", "Measurement", true);
|
|
ReadParameter(param, "InfluxDB", "user", true);
|
|
ReadParameter(param, "InfluxDB", "password", true);
|
|
|
|
ReadParameter(param, "InfluxDBv2", "Uri", true);
|
|
ReadParameter(param, "InfluxDBv2", "Database", true);
|
|
ReadParameter(param, "InfluxDBv2", "Measurement", true);
|
|
ReadParameter(param, "InfluxDBv2", "Org", true);
|
|
ReadParameter(param, "InfluxDBv2", "Token", true);
|
|
// ReadParameter(param, "InfluxDB", "Fieldname", 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", "Interval", false);
|
|
|
|
ReadParameter(param, "DataLogging", "DataLogActive", false);
|
|
ReadParameter(param, "DataLogging", "DataFilesRetention", false);
|
|
|
|
ReadParameter(param, "Debug", "LogLevel", false);
|
|
ReadParameter(param, "Debug", "LogfilesRetention", false);
|
|
|
|
ReadParameter(param, "System", "TimeZone", true);
|
|
ReadParameter(param, "System", "Hostname", true);
|
|
ReadParameter(param, "System", "TimeServer", true);
|
|
ReadParameter(param, "System", "RSSIThreshold", true);
|
|
|
|
var sel = document.getElementById("Numbers_value1");
|
|
UpdateInputIndividual(sel);
|
|
|
|
// 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;
|
|
category["InfluxDB"]["enabled"] = document.getElementById("Category_InfluxDB_enabled").checked;
|
|
category["InfluxDBv2"]["enabled"] = document.getElementById("Category_InfluxDBv2_enabled").checked;
|
|
category["GPIO"]["enabled"] = document.getElementById("Category_GPIO_enabled").checked;
|
|
|
|
UpdateInput();
|
|
var sel = document.getElementById("Numbers_value1");
|
|
UpdateInputIndividual(sel);
|
|
}
|
|
|
|
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) {
|
|
firework.launch("Settings cannot be saved. Please check your entries!", 'danger', 30000);
|
|
return;
|
|
}
|
|
|
|
if (confirm("Are you sure you want to update \"config.ini\"?")) {
|
|
ReadParameterAll();
|
|
WriteConfigININew();
|
|
SaveConfigToServer(domainname);
|
|
firework.launch('Configuration got updated. It will get applied after the next reboot!', 'success', 5000);
|
|
}
|
|
}
|
|
|
|
function doReboot() {
|
|
if (confirm("Are you sure you want to reboot the ESP32?")) {
|
|
var stringota = getDomainname() + "/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 = getDomainname() + "/edit_config.html?v=$COMMIT_HASH";
|
|
window.location = stringota;
|
|
window.location.href = stringota;
|
|
window.location.assign(stringota);
|
|
window.location.replace(stringota);
|
|
}
|
|
}
|
|
|
|
function numberChanged()
|
|
{
|
|
var sel = document.getElementById("Numbers_value1");
|
|
_neu = sel.selectedIndex;
|
|
UpdateInputIndividual(sel);
|
|
|
|
var _selInflux = document.getElementById("NumbersInfluxDB_value1");
|
|
if (_selInflux.selectedIndex != _neu)
|
|
_selInflux.selectedIndex = _neu
|
|
}
|
|
|
|
function numberInfluxDBChanged()
|
|
{
|
|
var sel = document.getElementById("NumbersInfluxDB_value1");
|
|
_neu = sel.selectedIndex;
|
|
UpdateInputIndividual(sel);
|
|
|
|
var _sel2 = document.getElementById("Numbers_value1");
|
|
if (_sel2.selectedIndex != _neu)
|
|
_sel2.selectedIndex = _neu
|
|
}
|
|
|
|
LoadConfigNeu();
|
|
|
|
</script>
|
|
|
|
</body>
|
|
</html>
|