edit_config_param.html 34 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Edit Config</title>
  5. <meta charset="utf-8">
  6. <style>
  7. h1 {font-size: 2em;}
  8. h2 {font-size: 1.5em; margin-block-start: 0.0em; margin-block-end: 0.2em;}
  9. h3 {font-size: 1.2em;}
  10. p {font-size: 1em;}
  11. .button {
  12. padding: 5px 20px;
  13. width: 211px;
  14. font-size: 16px;
  15. }
  16. textarea {
  17. font-size: 14px;
  18. }
  19. </style>
  20. </head>
  21. <body style="font-family: arial; padding: 0px 10px;">
  22. <table style="width:100%">
  23. <tr>
  24. <td>
  25. <h2>Config.ini:</h2>
  26. </td>
  27. <td>
  28. <button class="button" id="Edit_Config_Direct" onclick="editConfigDirect()" style="display:none">Edit Config.ini direct</button>
  29. <input type="checkbox" id="ExpertModus_enabled" value="1" onclick = 'UpdateExpertModus()' unchecked><label for="ExpertModus_enabled"> Expertenmodus </label>
  30. </td>
  31. </tr>
  32. </table>
  33. <br>
  34. <div id = "divall" style="display:none">
  35. <table>
  36. <tr>
  37. <th width="20px" style="text-align: left;">
  38. Enable
  39. </th>
  40. <th width="200px" style="text-align: left;">
  41. Parameter
  42. </th>
  43. <th style="text-align: left;">
  44. Value
  45. </th>
  46. <th style="text-align: left;">
  47. Information
  48. </th>
  49. </tr>
  50. <tr>
  51. <td colspan="4" style="padding-left: 20px;"><h4>MakeImage</h4></td>
  52. </tr>
  53. <tr>
  54. <td width="20px" style="padding-left: 40px;">
  55. <input type="checkbox" id="MakeImage_LogImageLocation_enabled" value="1" onclick = 'document.getElementById("MakeImage_LogImageLocation_value1").disabled = !document.getElementById("MakeImage_LogImageLocation_value1").disabled' unchecked >
  56. </td>
  57. <td width="200px">
  58. <class id="MakeImage_LogImageLocation_text" style="color:black;">LogImageLocation</class>
  59. </td>
  60. <td>
  61. <input type="text" name="name" id="MakeImage_LogImageLocation_value1">
  62. </td>
  63. <td style="font-size: 80%;">
  64. Location to store raw images for logging
  65. </td>
  66. </tr>
  67. <tr>
  68. <td width="20px" style="padding-left: 40px;">
  69. <td"><input type="checkbox" id="MakeImage_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("MakeImage_LogfileRetentionInDays_value1").disabled = !document.getElementById("MakeImage_LogfileRetentionInDays_value1").disabled' unchecked ></td>
  70. </td>
  71. <td>
  72. <class id="MakeImage_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
  73. </td>
  74. <td>
  75. <input type="number" id="MakeImage_LogfileRetentionInDays_value1" size="13" min="0" step="1">
  76. </td>
  77. <td style="font-size: 80%;">
  78. Time to keep the raw image (in days -"0" = forever)
  79. </td>
  80. </tr>
  81. <tr class="expert" id="ex1">
  82. <td width="20px" style="padding-left: 40px;">
  83. </td>
  84. <td>
  85. <class id="MakeImage_WaitBeforeTakingPicture_text" style="color:black;">WaitBeforeTakingPicture</class>
  86. </td>
  87. <td>
  88. <input type="number" id="MakeImage_WaitBeforeTakingPicture_value1" size="13" min="0" step="any">
  89. </td>
  90. <td style="font-size: 80%;">
  91. Wait time between illumination switch on and take the picture (in seconds)
  92. </td>
  93. </tr>
  94. <tr class="expert" id="ex2">
  95. <td width="20px" style="padding-left: 40px;">
  96. </td>
  97. <td>
  98. <class id="MakeImage_ImageQuality_text" style="color:black;">ImageQuality</class>
  99. </td>
  100. <td>
  101. <input type="number" id="MakeImage_ImageQuality_value1" size="13" min="0" max="63">
  102. </td>
  103. <td style="font-size: 80%;">
  104. Quality index for picture (default = "5" - "0" high ... "63" low)
  105. </td>
  106. </tr>
  107. <tr class="expert" id="ex3">
  108. <td width="20px" style="padding-left: 40px;">
  109. </td>
  110. <td>
  111. <class id="MakeImage_ImageSize_text" style="color:black;">ImageSize</class>
  112. </td>
  113. <td>
  114. <select id="MakeImage_ImageSize_value1">
  115. <option value="0" selected>VGA</option>
  116. <option value="1" >QVGA</option>
  117. </select>
  118. </td>
  119. <td style="font-size: 80%;">
  120. Picture size camera (default = "VGA")
  121. </td>
  122. </tr>
  123. <tr class="expert" id="ex4">
  124. <td colspan="4" style="padding-left: 20px;"><h4>Alignment</h4></td>
  125. </tr>
  126. <tr class="expert" id="ex6">
  127. <td width="20px" style="padding-left: 40px;">
  128. </td>
  129. <td width="200px">
  130. <class id="Alignment_SearchFieldX_text" style="color:black;">SearchFieldX</class>
  131. </td>
  132. <td>
  133. <input type="number" name="name" id="Alignment_SearchFieldX_value1" size="13" min="1" step="1">
  134. </td>
  135. <td style="font-size: 80%;">
  136. x size (width) in which the reference is searched (default = "20")
  137. </td>
  138. </tr>
  139. <tr class="expert" id="ex8">
  140. <td width="20px" style="padding-left: 40px;">
  141. </td>
  142. <td>
  143. <class id="Alignment_SearchFieldY_text" style="color:black;">SearchFieldY</class>
  144. </td>
  145. <td>
  146. <input type="number" name="name" id="Alignment_SearchFieldY_value1" size="13" min="1">
  147. </td>
  148. <td style="font-size: 80%;">
  149. y size (height) in which the reference is searched (default = "20")
  150. </td>
  151. </tr>
  152. <tr class="expert" id="AlignmentAlgo_ex8">
  153. <td width="20px" style="padding-left: 40px;">
  154. <input type="checkbox" id="Alignment_AlignmentAlgo_enabled" value="1" onclick = 'document.getElementById("Alignment_AlignmentAlgo_value1").disabled = !document.getElementById("Alignment_AlignmentAlgo_value1").disabled' unchecked >
  155. </td>
  156. <td>
  157. <class id="Alignment_AlignmentAlgo_text" style="color:black;">AlignmentAlgo</class>
  158. </td>
  159. <td>
  160. <select id="Alignment_AlignmentAlgo_value1">
  161. <option value="0" selected>Default</option>
  162. <option value="1" >HighAccurity</option>
  163. <option value="2" >Fast</option>
  164. </select>
  165. </td>
  166. <td style="font-size: 80%;">
  167. "Default" = use only R-Channel, "HighAccurity" = use all Channels (RGB, 3x slower), <br> "Fast" (First time RGB, then only check if image is shifted)
  168. </td>
  169. </tr>
  170. <tr class="expert" id="ex4">
  171. <td colspan="4" style="padding-left: 20px;"><h4>Digits</h4></td>
  172. </tr>
  173. <tr>
  174. <td width="20px" style="padding-left: 40px;">
  175. </td>
  176. <td width="200px">
  177. <class id="Digits_Model_text" style="color:black;">Model</class>
  178. </td>
  179. <td>
  180. <input type="text" id="Digits_Model_value1">
  181. </td>
  182. <td style="font-size: 80%;">
  183. path to CNN model file for image recognition (in seconds)
  184. </td>
  185. </tr>
  186. <tr>
  187. <td width="20px" style="padding-left: 40px;">
  188. <input type="checkbox" id="Digits_LogImageLocation_enabled" value="1" onclick = 'document.getElementById("Digits_LogImageLocation_value1").disabled = !document.getElementById("Digits_LogImageLocation_value1").disabled' unchecked >
  189. </td>
  190. <td>
  191. <class id="Digits_LogImageLocation_text" style="color:black;">LogImageLocation</class>
  192. </td>
  193. <td>
  194. <input type="text" name="name" id="Digits_LogImageLocation_value1">
  195. </td>
  196. <td style="font-size: 80%;">
  197. Location to store separated digits for logging
  198. </td>
  199. </tr>
  200. <tr>
  201. <td width="20px" style="padding-left: 40px;">
  202. <td"><input type="checkbox" id="Digits_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("Digits_LogfileRetentionInDays_value1").disabled = !document.getElementById("Digits_LogfileRetentionInDays_value1").disabled' unchecked ></td>
  203. </td>
  204. <td>
  205. <class id="Digits_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
  206. </td>
  207. <td>
  208. <input type="number" id="Digits_LogfileRetentionInDays_value1" min="0" step="1">
  209. </td>
  210. <td style="font-size: 80%;">
  211. Time to keep the separated digit images (in days -"0" = forever)
  212. </td>
  213. </tr>
  214. <tr class="expert" id="ex9">
  215. <td width="20px" style="padding-left: 40px;">
  216. </td>
  217. <td>
  218. <class id="Digits_ModelInputSize_text" style="color:black;">ModelInputSize</class>
  219. </td>
  220. <td>
  221. x: <input type="number" id="Digits_ModelInputSize_value1" style="width: 30px;" min="1" step="1">
  222. y: <input type="number" id="Digits_ModelInputSize_value2" style="width: 30px;" min="1" step="1">
  223. </td>
  224. <td style="font-size: 80%;">
  225. Size of the input image for the CNN model
  226. </td>
  227. </tr>
  228. <tr class="expert" id="ex4">
  229. <td colspan="4" style="padding-left: 20px;">
  230. <h4><input type="checkbox" id="Category_Analog_enabled" value="1" onclick = 'UpdateAfterCategoryCheck()' unchecked > Analog</h4></td>
  231. </tr>
  232. <tr>
  233. <td width="20px" style="padding-left: 40px;"> </td>
  234. <td width="200px"> <class id="Analog_Model_text" style="color:black;">Model</class> </td>
  235. <td> <input type="text" id="Analog_Model_value1"> </td>
  236. <td style="font-size: 80%;"> path to CNN model file for image recognition (in seconds) </td>
  237. </tr>
  238. <tr>
  239. <td width="20px" style="padding-left: 40px;">
  240. <input type="checkbox" id="Analog_LogImageLocation_enabled" value="1" onclick = 'document.getElementById("Analog_LogImageLocation_value1").disabled = !document.getElementById("Analog_LogImageLocation_value1").disabled' unchecked >
  241. </td>
  242. <td> <class id="Analog_LogImageLocation_text" style="color:black;">LogImageLocation</class> </td>
  243. <td> <input type="text" name="name" id="Analog_LogImageLocation_value1"> </td>
  244. <td style="font-size: 80%;"> Location to store separated digits for logging </td>
  245. </tr>
  246. <tr>
  247. <td width="20px" style="padding-left: 40px;">
  248. <td"><input type="checkbox" id="Analog_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("Analog_LogfileRetentionInDays_value1").disabled = !document.getElementById("Analog_LogfileRetentionInDays_value1").disabled' unchecked ></td>
  249. </td>
  250. <td> <class id="Analog_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class> </td>
  251. <td> <input type="number" id="Analog_LogfileRetentionInDays_value1" min="0" step="1"> </td>
  252. <td style="font-size: 80%;"> Time to keep the separated digit images (in days -"0" = forever) </td>
  253. </tr>
  254. <tr class="expert" id="ex10">
  255. <td width="20px" style="padding-left: 40px;"> </td>
  256. <td> <class id="Analog_ModelInputSize_text" style="color:black;">ModelInputSize</class> </td>
  257. <td>
  258. x: <input type="number" id="Analog_ModelInputSize_value1" style="width: 30px;" min="1" step="1">
  259. y: <input type="number" id="Analog_ModelInputSize_value2" style="width: 30px;" min="1" step="1">
  260. </td>
  261. <td style="font-size: 80%;"> Size of the input image for the CNN model </td>
  262. </tr>
  263. <tr>
  264. <td colspan="4" style="padding-left: 20px;"><h4>PostProcessing</h4></td>
  265. </tr>
  266. <tr>
  267. <td width="20px" style="padding-left: 40px;">
  268. <input type="checkbox" id="PostProcessing_DecimalShift_enabled" value="1" onclick = 'document.getElementById("PostProcessing_DecimalShift_value1").disabled = !document.getElementById("PostProcessing_DecimalShift_value1").disabled' unchecked >
  269. </td>
  270. <td width="200px">
  271. <class id="PostProcessing_DecimalShift_text" style="color:black;">DecimalShift</class>
  272. </td>
  273. <td>
  274. <input type="number" id="PostProcessing_DecimalShift_value1" step="1">
  275. </td>
  276. <td style="font-size: 80%;">
  277. shift the digit separator within the digital digits (positiv and negativ)
  278. </td>
  279. </tr>
  280. <tr>
  281. <td width="20px" style="padding-left: 40px;">
  282. <input type="checkbox" id="PostProcessing_PreValueUse_enabled" value="1" onclick = 'document.getElementById("PostProcessing_PreValueUse_value1").disabled = !document.getElementById("PostProcessing_PreValueUse_value1").disabled' unchecked >
  283. </td>
  284. <td width="200px">
  285. <class id="PostProcessing_PreValueUse_text" style="color:black;">PreValueUse</class>
  286. </td>
  287. <td>
  288. <select id="PostProcessing_PreValueUse_value1">
  289. <option value="0" selected>true</option>
  290. <option value="1" >false</option>
  291. </select>
  292. </td>
  293. <td style="font-size: 80%;">
  294. Enable to use the previous read value for consistency checks - also on reboots
  295. </td>
  296. </tr>
  297. <tr class="expert" id="ex11">
  298. <td width="20px" style="padding-left: 40px;">
  299. <input type="checkbox" id="PostProcessing_PreValueAgeStartup_enabled" value="1" onclick = 'document.getElementById("PostProcessing_PreValueAgeStartup_value1").disabled = !document.getElementById("PostProcessing_PreValueAgeStartup_value1").disabled' unchecked >
  300. </td>
  301. <td width="200px">
  302. <class id="PostProcessing_PreValueAgeStartup_text" style="color:black;">PreValueAgeStartup</class>
  303. </td>
  304. <td>
  305. <input type="number" id="PostProcessing_PreValueAgeStartup_value1" size="13" min="0">
  306. </td>
  307. <td style="font-size: 80%;">
  308. Time (in minutes), how long a previous read value is valid after reboot (default = 720 min)
  309. </td>
  310. </tr>
  311. <tr>
  312. <td width="20px" style="padding-left: 40px;">
  313. <input type="checkbox" id="PostProcessing_AllowNegativeRates_enabled" value="1" onclick = 'document.getElementById("PostProcessing_AllowNegativeRates_value1").disabled = !document.getElementById("PostProcessing_AllowNegativeRates_value1").disabled' unchecked >
  314. </td>
  315. <td width="200px">
  316. <class id="PostProcessing_AllowNegativeRates_text" style="color:black;">AllowNegativeRates</class>
  317. </td>
  318. <td>
  319. <select id="PostProcessing_AllowNegativeRates_value1">
  320. <option value="0" selected>true</option>
  321. <option value="1" >false</option>
  322. </select>
  323. </td>
  324. <td style="font-size: 80%;">
  325. Set on "false" to ensure, that only positive changes are accepted (typically for counter)
  326. </td>
  327. </tr>
  328. <tr>
  329. <td width="20px" style="padding-left: 40px;">
  330. <input type="checkbox" id="PostProcessing_MaxRateValue_enabled" value="1" onclick = 'document.getElementById("PostProcessing_MaxRateValue_value1").disabled = !document.getElementById("PostProcessing_MaxRateValue_value1").disabled' unchecked >
  331. </td>
  332. <td width="200px">
  333. <class id="PostProcessing_MaxRateValue_text" style="color:black;">MaxRateValue</class>
  334. </td>
  335. <td>
  336. <input type="number" id="PostProcessing_MaxRateValue_value1" size="13" min="0" step="any">
  337. </td>
  338. <td style="font-size: 80%;">
  339. Maximum change of reading from one to the next readout
  340. </td>
  341. </tr>
  342. <tr class="expert" id="ex12">
  343. <td width="20px" style="padding-left: 40px;">
  344. <input type="checkbox" id="PostProcessing_ErrorMessage_enabled" value="1" onclick = 'document.getElementById("PostProcessing_ErrorMessage_value1").disabled = !document.getElementById("PostProcessing_ErrorMessage_value1").disabled' unchecked >
  345. </td>
  346. <td width="200px">
  347. <class id="PostProcessing_ErrorMessage_text" style="color:black;">ErrorMessage</class>
  348. </td>
  349. <td>
  350. <select id="PostProcessing_ErrorMessage_value1">
  351. <option value="0" selected>true</option>
  352. <option value="1" >false</option>
  353. </select>
  354. </td>
  355. <td style="font-size: 80%;">
  356. Do not show error message in return value - in error case, the last valid number will be send out
  357. </td>
  358. </tr>
  359. <tr>
  360. <td width="20px" style="padding-left: 40px;">
  361. <input type="checkbox" id="PostProcessing_CheckDigitIncreaseConsistency_enabled" value="1" onclick = 'document.getElementById("PostProcessing_CheckDigitIncreaseConsistency_value1").disabled = !document.getElementById("PostProcessing_CheckDigitIncreaseConsistency_value1").disabled' unchecked >
  362. </td>
  363. <td width="200px">
  364. <class id="PostProcessing_CheckDigitIncreaseConsistency_text" style="color:black;">CheckDigitIncreaseConsistency</class>
  365. </td>
  366. <td>
  367. <select id="PostProcessing_CheckDigitIncreaseConsistency_value1">
  368. <option value="0" selected>true</option>
  369. <option value="1" >false</option>
  370. </select>
  371. </td>
  372. <td style="font-size: 80%;">
  373. Activate to enalbe additional consistency check - especially zero crossing check between digits
  374. </td>
  375. </tr>
  376. <tr>
  377. <td colspan="4" style="padding-left: 20px;"><h4><input type="checkbox" id="Category_MQTT_enabled" value="1" onclick = 'UpdateAfterCategoryCheck()' unchecked > MQTT</h4></td>
  378. </tr>
  379. <tr>
  380. <td width="20px" style="padding-left: 40px;">
  381. <input type="checkbox" id="MQTT_Uri_enabled" value="1" onclick = 'document.getElementById("MQTT_Uri_value1").disabled = !document.getElementById("MQTT_Uri_value1").disabled' unchecked >
  382. </td>
  383. <td width="200px">
  384. <class id="MQTT_Uri_text" style="color:black;">Uri</class>
  385. </td>
  386. <td>
  387. <input type="text" id="MQTT_Uri_value1">
  388. </td>
  389. <td style="font-size: 80%;">
  390. URI to the MQTT broker including port: http:\\IP-ADRESS:port
  391. </td>
  392. </tr>
  393. <tr>
  394. <td width="20px" style="padding-left: 40px;">
  395. <input type="checkbox" id="MQTT_Topic_enabled" value="1" onclick = 'document.getElementById("MQTT_Topic_value1").disabled = !document.getElementById("MQTT_Topic_value1").disabled' unchecked >
  396. </td>
  397. <td width="200px">
  398. <class id="MQTT_Topic_text" style="color:black;">Topic</class>
  399. </td>
  400. <td>
  401. <input type="text" id="MQTT_Topic_value1">
  402. </td>
  403. <td style="font-size: 80%;">
  404. MQTT topic, in which the value is registered
  405. </td>
  406. </tr>
  407. <tr>
  408. <td width="20px" style="padding-left: 40px;">
  409. <input type="checkbox" id="MQTT_TopicError_enabled" value="1" onclick = 'document.getElementById("MQTT_TopicError_value1").disabled = !document.getElementById("MQTT_TopicError_value1").disabled' unchecked >
  410. </td>
  411. <td width="200px">
  412. <class id="MQTT_TopicError_text" style="color:black;">TopicError</class>
  413. </td>
  414. <td>
  415. <input type="text" id="MQTT_TopicError_value1">
  416. </td>
  417. <td style="font-size: 80%;">
  418. MQTT topic, in which the error status is reported (empty = no error)
  419. </td>
  420. </tr>
  421. <tr>
  422. <td width="20px" style="padding-left: 40px;">
  423. <input type="checkbox" id="MQTT_ClientID_enabled" value="1" onclick = 'document.getElementById("MQTT_ClientID_value1").disabled = !document.getElementById("MQTT_ClientID_value1").disabled' unchecked >
  424. </td>
  425. <td width="200px">
  426. <class id="MQTT_ClientID_text" style="color:black;">ClientID</class>
  427. </td>
  428. <td>
  429. <input type="text" id="MQTT_ClientID_value1">
  430. </td>
  431. <td style="font-size: 80%;">
  432. ClientID to connect to the MQTT broker
  433. </td>
  434. </tr>
  435. <tr>
  436. <td width="20px" style="padding-left: 40px;">
  437. <input type="checkbox" id="MQTT_user_enabled" value="1" onclick = 'document.getElementById("MQTT_user_value1").disabled = !document.getElementById("MQTT_user_value1").disabled' unchecked >
  438. </td>
  439. <td width="200px">
  440. <class id="MQTT_user_text" style="color:black;">user</class>
  441. </td>
  442. <td>
  443. <input type="text" id="MQTT_user_value1">
  444. </td>
  445. <td style="font-size: 80%;">
  446. user for MQTT authenficiation
  447. </td>
  448. </tr>
  449. <tr>
  450. <td width="20px" style="padding-left: 40px;">
  451. <input type="checkbox" id="MQTT_password_enabled" value="1" onclick = 'document.getElementById("MQTT_password_value1").disabled = !document.getElementById("MQTT_password_value1").disabled' unchecked >
  452. </td>
  453. <td width="200px">
  454. <class id="MQTT_password_text" style="color:black;">password</class>
  455. </td>
  456. <td>
  457. <input type="text" id="MQTT_password_value1">
  458. </td>
  459. <td style="font-size: 80%;">
  460. password for MQTT authenficiation
  461. </td>
  462. </tr>
  463. <tr>
  464. <td colspan="4" style="padding-left: 20px;"><h4>AutoTimer</h4></td>
  465. </tr>
  466. <tr class="expert" id="ex13">
  467. <td width="20px" style="padding-left: 40px;">
  468. <input type="checkbox" id="AutoTimer_AutoStart_enabled" value="1" onclick = 'document.getElementById("AutoTimer_AutoStart_value1").disabled = !document.getElementById("AutoTimer_AutoStart_value1").disabled' unchecked >
  469. </td>
  470. <td width="200px">
  471. <class id="AutoTimer_AutoStart_text" style="color:black;">AutoStart</class>
  472. </td>
  473. <td>
  474. <select id="AutoTimer_AutoStart_value1">
  475. <option value="0" selected>true</option>
  476. <option value="1" >false</option>
  477. </select>
  478. </td>
  479. <td style="font-size: 80%;">
  480. Start the image recognition immediatly after power up. false is basically for debugging.
  481. </td>
  482. </tr>
  483. <tr>
  484. <td width="20px" style="padding-left: 40px;">
  485. <input type="checkbox" id="AutoTimer_Intervall_enabled" value="1" onclick = 'document.getElementById("AutoTimer_Intervall_value1").disabled = !document.getElementById("AutoTimerg_Intervall_value1").disabled' unchecked >
  486. </td>
  487. <td width="200px">
  488. <class id="AutoTimer_Intervall_text" style="color:black;">Intervall</class>
  489. </td>
  490. <td>
  491. <input type="number" id="AutoTimer_Intervall_value1" size="13" min="3" step="any">
  492. </td>
  493. <td style="font-size: 80%;">
  494. Intervall in which the counter is read (in minutes). Number must be greater than 3 minutes.
  495. </td>
  496. </tr>
  497. <tr>
  498. <td colspan="4" style="padding-left: 20px;"><h4>Debug</h4></td>
  499. </tr>
  500. <tr>
  501. <td width="20px" style="padding-left: 40px;">
  502. <input type="checkbox" id="Debug_Logfile_enabled" value="1" onclick = 'document.getElementById("Debug_Logfile_value1").disabled = !document.getElementById("Debug_Logfile_value1").disabled' unchecked >
  503. </td>
  504. <td width="200px">
  505. <class id="Debug_Logfile_text" style="color:black;">Logfile</class>
  506. </td>
  507. <td>
  508. <select id="Debug_Logfile_value1">
  509. <option value="0" selected>true</option>
  510. <option value="1" >false</option>
  511. </select>
  512. </td>
  513. <td style="font-size: 80%;">
  514. Turn on/off the extended logging
  515. </td>
  516. </tr>
  517. <tr>
  518. <td width="20px" style="padding-left: 40px;">
  519. <td"><input type="checkbox" id="Debug_LogfileRetentionInDays_enabled" value="1" onclick = 'document.getElementById("Debug_LogfileRetentionInDays_value1").disabled = !document.getElementById("Debug_LogfileRetentionInDays_value1").disabled' unchecked ></td>
  520. </td>
  521. <td>
  522. <class id="Debug_LogfileRetentionInDays_text" style="color:black;">LogfileRetentionInDays</class>
  523. </td>
  524. <td>
  525. <input type="number" id="Debug_LogfileRetentionInDays_value1" size="13" min="0" step="1">
  526. </td>
  527. <td style="font-size: 80%;">
  528. Time to keep the log files (in days - "0" = forever)
  529. </td>
  530. </tr>
  531. <tr>
  532. <td colspan="4" style="padding-left: 20px;"><h4>System</h4></td>
  533. </tr>
  534. <tr>
  535. <td width="20px" style="padding-left: 40px;">
  536. <td"><input type="checkbox" id="System_TimeZone_enabled" value="1" onclick = 'document.getElementById("System_TimeZone_value1").disabled = !document.getElementById("System_TimeZone_value1").disabled' unchecked ></td>
  537. </td>
  538. <td>
  539. <class id="System_TimeZone_text" style="color:black;">TimeZone</class>
  540. </td>
  541. <td>
  542. <input type="text" id="System_TimeZone_value1">
  543. </td>
  544. <td style="font-size: 80%;">
  545. Time zone in POSIX syntax (Europe/Berlin = "CET-1CEST,M3.5.0,M10.5.0/3" - incl. daylight saving)
  546. </td>
  547. </tr>
  548. <tr class="expert" id="ex16">
  549. <td width="20px" style="padding-left: 40px;">
  550. <td"><input type="checkbox" id="System_TimeServer_enabled" value="1" onclick = 'document.getElementById("System_TimeServer_value1").disabled = !document.getElementById("System_TimeServer_value1").disabled' unchecked ></td>
  551. </td>
  552. <td>
  553. <class id="System_TimeServer_text" style="color:black;">TimeServer</class>
  554. </td>
  555. <td>
  556. <input type="text" id="System_TimeServer_value1">
  557. </td>
  558. <td style="font-size: 80%;">
  559. Time server to synchronize system time (default: "pool.ntp.org" - used if nothing is specified)
  560. </td>
  561. </tr>
  562. <tr class="expert" id="System_Hostname">
  563. <td width="20px" style="padding-left: 40px;">
  564. <td"><input type="checkbox" id="System_Hostname_enabled" value="1" onclick = 'document.getElementById("System_Hostname_value1").disabled = !document.getElementById("System_Hostname_value1").disabled' unchecked ></td>
  565. </td>
  566. <td>
  567. <class id="System_Hostname_text" style="color:black;">Hostname</class>
  568. </td>
  569. <td>
  570. <input type="text" id="System_Hostname_value1">
  571. </td>
  572. <td style="font-size: 80%;">
  573. Hostname for server - will be transfered to wlan.ini at next startup)
  574. </td>
  575. </tr>
  576. </table>
  577. <p>
  578. <button class="button" onclick="saveTextAsFile()">Update Config.ini</button>
  579. </p>
  580. <p>
  581. </p>
  582. <p>
  583. <button class="button" id="reboot" type="button" onclick="doReboot()">Reboot to activate updates</button>
  584. </p>
  585. </div>
  586. <script type="text/javascript" src="./gethost.js"></script>
  587. <script type="text/javascript" src="./readconfigcommon.js"></script>
  588. <script type="text/javascript" src="./readconfigparam.js"></script>
  589. <script type="text/javascript">
  590. var canvas = document.getElementById('canvas'),
  591. basepath = "http://192.168.178.22";
  592. param;
  593. category;
  594. function LoadConfigNeu() {
  595. basepath = getbasepath();
  596. if (!loadConfig(basepath)) {
  597. alert("Config.ini could not be loaded!\nPlease reload the page.");
  598. return;
  599. }
  600. loadConfig(basepath);
  601. ParseConfig();
  602. param = getConfigParameters();
  603. category = getConfigCategory();
  604. UpdateInput();
  605. UpdateExpertModus();
  606. document.getElementById("divall").style.display = '';
  607. }
  608. function WriteParameter(_param, _category, _cat, _name, _optional, _select = false, _anzpara = 1){
  609. if (_param[_cat][_name]["found"]){
  610. if (_optional) {
  611. document.getElementById(_cat+"_"+_name+"_enabled").checked = _param[_cat][_name]["enabled"];
  612. for (var j = 1; j <= _anzpara; ++j) {
  613. document.getElementById(_cat+"_"+_name+"_value"+j).disabled = !_param[_cat][_name]["enabled"];
  614. }
  615. }
  616. document.getElementById(_cat+"_"+_name+"_text").style="color:black;"
  617. if (_select) {
  618. var textToFind = _param[_cat][_name]["value1"];
  619. var dd = document.getElementById(_cat+"_"+_name+"_value1");
  620. for (var i = 0; i < dd.options.length; i++) {
  621. if (dd.options[i].text.toLowerCase() === textToFind.toLowerCase()) {
  622. dd.selectedIndex = i;
  623. break;
  624. }
  625. }
  626. }
  627. else {
  628. for (var j = 1; j <= _anzpara; ++j) {
  629. document.getElementById(_cat+"_"+_name+"_value"+j).value = _param[_cat][_name]["value"+j];
  630. }
  631. }
  632. }
  633. else {
  634. if (_optional) {
  635. document.getElementById(_cat+"_"+_name+"_enabled").disabled = true;
  636. for (var j = 1; j <= _anzpara; ++j) {
  637. document.getElementById(_cat+"_"+_name+"_value"+j).disabled = true;
  638. }
  639. }
  640. document.getElementById(_cat+"_"+_name+"_text").style="color:lightgrey;"
  641. }
  642. ///////////////// am Ende, falls Kategorie als gesamtes nicht ausgewählt --> deaktivieren
  643. if (_category[_cat]["enabled"] == false)
  644. {
  645. if (_optional) {
  646. document.getElementById(_cat+"_"+_name+"_enabled").disabled = true;
  647. for (var j = 1; j <= _anzpara; ++j) {
  648. document.getElementById(_cat+"_"+_name+"_value"+j).disabled = true;
  649. }
  650. }
  651. document.getElementById(_cat+"_"+_name+"_text").style="color:lightgrey;"
  652. }
  653. EnDisableItem(_category[_cat]["enabled"], _param, _category, _cat, _name, _optional);
  654. }
  655. function EnDisableItem(_status, _param, _category, _cat, _name, _optional)
  656. {
  657. _status = _param[_cat][_name]["found"] && _category[_cat]["enabled"];
  658. _color = "color:lightgrey;";
  659. if (_status) {
  660. _color = "color:black;";
  661. }
  662. if (_optional) {
  663. document.getElementById(_cat+"_"+_name+"_enabled").disabled = !_status;
  664. document.getElementById(_cat+"_"+_name+"_enabled").style=_color;
  665. }
  666. if (!_param[_cat][_name]["enabled"]) {
  667. _status = false;
  668. _color = "color:lightgrey;";
  669. }
  670. document.getElementById(_cat+"_"+_name+"_text").disabled = !_status;
  671. document.getElementById(_cat+"_"+_name+"_text").style = _color;
  672. if (_param[_cat][_name]["anzParam"] == 2) {
  673. _color = "width: 30px;" + _color;
  674. }
  675. for (var j = 1; j <= _param[_cat][_name]["anzParam"]; ++j) {
  676. document.getElementById(_cat+"_"+_name+"_value"+j).disabled = !_status;
  677. document.getElementById(_cat+"_"+_name+"_value"+j).style=_color;
  678. }
  679. }
  680. function ReadParameter(_param, _cat, _name, _optional, _select = false){
  681. if (_param[_cat][_name]["found"]){
  682. if (_optional) {
  683. _param[_cat][_name]["enabled"] = document.getElementById(_cat+"_"+_name+"_enabled").checked;
  684. }
  685. if (_select) {
  686. var sel = document.getElementById(_cat+"_"+_name+"_value1");
  687. _param[_cat][_name]["value1"] = sel.options[sel.selectedIndex].text;
  688. }
  689. else {
  690. for (var j = 1; j <= _param[_cat][_name]["anzParam"]; ++j) {
  691. _param[_cat][_name]["value"+j] = document.getElementById(_cat+"_"+_name+"_value"+j).value;
  692. }
  693. }
  694. }
  695. }
  696. function UpdateInput() {
  697. document.getElementById("Category_Analog_enabled").checked = category["Analog"]["enabled"];
  698. document.getElementById("Category_MQTT_enabled").checked = category["MQTT"]["enabled"];
  699. WriteParameter(param, category, "MakeImage", "LogImageLocation", true);
  700. WriteParameter(param, category, "MakeImage", "LogfileRetentionInDays", true);
  701. WriteParameter(param, category, "MakeImage", "WaitBeforeTakingPicture", false);
  702. WriteParameter(param, category, "MakeImage", "ImageQuality", false);
  703. WriteParameter(param, category, "MakeImage", "ImageSize", false, true, true);
  704. WriteParameter(param, category, "Alignment", "SearchFieldX", false);
  705. WriteParameter(param, category, "Alignment", "SearchFieldY", false);
  706. WriteParameter(param, category, "Alignment", "AlignmentAlgo", true, true, true);
  707. WriteParameter(param, category, "Digits", "Model", false);
  708. WriteParameter(param, category, "Digits", "LogImageLocation", true);
  709. WriteParameter(param, category, "Digits", "LogfileRetentionInDays", true);
  710. WriteParameter(param, category, "Digits", "ModelInputSize", false, false, 2);
  711. WriteParameter(param, category, "Analog", "Model", false);
  712. WriteParameter(param, category, "Analog", "LogImageLocation", true);
  713. WriteParameter(param, category, "Analog", "LogfileRetentionInDays", true);
  714. WriteParameter(param, category, "Analog", "ModelInputSize", false, false, 2);
  715. WriteParameter(param, category, "PostProcessing", "DecimalShift", true);
  716. WriteParameter(param, category, "PostProcessing", "PreValueUse", true, true);
  717. WriteParameter(param, category, "PostProcessing", "PreValueAgeStartup", true);
  718. WriteParameter(param, category, "PostProcessing", "AllowNegativeRates", true, true);
  719. WriteParameter(param, category, "PostProcessing", "MaxRateValue", true);
  720. WriteParameter(param, category, "PostProcessing", "ErrorMessage", true, true);
  721. WriteParameter(param, category, "PostProcessing", "CheckDigitIncreaseConsistency", true, true);
  722. WriteParameter(param, category, "MQTT", "Uri", true);
  723. WriteParameter(param, category, "MQTT", "Topic", true);
  724. WriteParameter(param, category, "MQTT", "TopicError", true);
  725. WriteParameter(param, category, "MQTT", "ClientID", true);
  726. WriteParameter(param, category, "MQTT", "user", true);
  727. WriteParameter(param, category, "MQTT", "password", true);
  728. WriteParameter(param, category, "AutoTimer", "AutoStart", true, true);
  729. WriteParameter(param, category, "AutoTimer", "Intervall", true);
  730. WriteParameter(param, category, "Debug", "Logfile", true, true);
  731. WriteParameter(param, category, "Debug", "LogfileRetentionInDays", true);
  732. WriteParameter(param, category, "System", "TimeZone", true);
  733. WriteParameter(param, category, "System", "Hostname", true);
  734. WriteParameter(param, category, "System", "TimeServer", true);
  735. }
  736. function ReadParameterAll()
  737. {
  738. category["Analog"]["enabled"] = document.getElementById("Category_Analog_enabled").checked;
  739. category["MQTT"]["enabled"] = document.getElementById("Category_MQTT_enabled").checked;
  740. ReadParameter(param, "MakeImage", "LogImageLocation", true);
  741. ReadParameter(param, "MakeImage", "LogfileRetentionInDays", true);
  742. ReadParameter(param, "MakeImage", "WaitBeforeTakingPicture", false);
  743. ReadParameter(param, "MakeImage", "ImageQuality", false);
  744. ReadParameter(param, "MakeImage", "ImageSize", false, true);
  745. ReadParameter(param, "Alignment", "SearchFieldX", false);
  746. ReadParameter(param, "Alignment", "SearchFieldY", false);
  747. ReadParameter(param, "Alignment", "AlignmentAlgo", true, true);
  748. ReadParameter(param, "Digits", "Model", false);
  749. ReadParameter(param, "Digits", "LogImageLocation", true);
  750. ReadParameter(param, "Digits", "LogfileRetentionInDays", true);
  751. ReadParameter(param, "Digits", "ModelInputSize", false, false, 2);
  752. ReadParameter(param, "Analog", "Model", false);
  753. ReadParameter(param, "Analog", "LogImageLocation", true);
  754. ReadParameter(param, "Analog", "LogfileRetentionInDays", true);
  755. ReadParameter(param, "Analog", "ModelInputSize", false, false, 2);
  756. ReadParameter(param, "PostProcessing", "DecimalShift", true);
  757. ReadParameter(param, "PostProcessing", "PreValueUse", true, true);
  758. ReadParameter(param, "PostProcessing", "PreValueAgeStartup", true);
  759. ReadParameter(param, "PostProcessing", "AllowNegativeRates", true, true);
  760. ReadParameter(param, "PostProcessing", "MaxRateValue", true);
  761. ReadParameter(param, "PostProcessing", "ErrorMessage", true, true);
  762. ReadParameter(param, "PostProcessing", "CheckDigitIncreaseConsistency", true, true);
  763. ReadParameter(param, "MQTT", "Uri", true);
  764. ReadParameter(param, "MQTT", "Topic", true);
  765. ReadParameter(param, "MQTT", "TopicError", true);
  766. ReadParameter(param, "MQTT", "ClientID", true);
  767. ReadParameter(param, "MQTT", "user", true);
  768. ReadParameter(param, "MQTT", "password", true);
  769. ReadParameter(param, "AutoTimer", "AutoStart", true, true);
  770. ReadParameter(param, "AutoTimer", "Intervall", true);
  771. ReadParameter(param, "Debug", "Logfile", true, true);
  772. ReadParameter(param, "Debug", "LogfileRetentionInDays", true);
  773. ReadParameter(param, "System", "TimeZone", true);
  774. ReadParameter(param, "System", "Hostname", true);
  775. ReadParameter(param, "System", "TimeServer", true);
  776. FormatDecimalValue(param, "PostProcessing", "MaxRateValue");
  777. }
  778. function WriteConfig(){
  779. ReadParameterAll();
  780. return setConfigParameters(param, category);
  781. }
  782. function FormatDecimalValue(_param, _cat, _name) {
  783. for (var j = 1; j <= _param[_cat][_name]["anzParam"]; ++j) {
  784. var _val = _param[_cat][_name]["value"+j];
  785. _val = _val.replace(",", ".");
  786. _param[_cat][_name]["value"+j] = _val;
  787. }
  788. }
  789. function UpdateAfterCategoryCheck() {
  790. ReadParameterAll();
  791. category["Analog"]["enabled"] = document.getElementById("Category_Analog_enabled").checked;
  792. UpdateInput();
  793. }
  794. function UpdateExpertModus()
  795. {
  796. var _style = 'display:none;';
  797. if (document.getElementById("ExpertModus_enabled").checked) {
  798. _style = '';
  799. document.getElementById("Edit_Config_Direct").style.display = "";
  800. }
  801. else
  802. {
  803. document.getElementById("Edit_Config_Direct").style.display = "none";
  804. }
  805. const expert = document.querySelectorAll(".expert");
  806. for (var i = 0; i < expert.length; i++) {
  807. document.getElementById(expert[i].id).style = _style;
  808. }
  809. }
  810. function saveTextAsFile()
  811. {
  812. if (confirm("Are you sure you want to update \"config.ini\"?")) {
  813. var textToSave = WriteConfig();
  814. FileDeleteOnServer("/config/config.ini", basepath);
  815. FileSendContent(textToSave, "/config/config.ini", basepath);
  816. }
  817. }
  818. function doReboot() {
  819. if (confirm("Are you sure you want to reboot the ESP32?")) {
  820. var stringota = "/reboot";
  821. window.location = stringota;
  822. window.location.href = stringota;
  823. window.location.assign(stringota);
  824. window.location.replace(stringota);
  825. }
  826. }
  827. function editConfigDirect() {
  828. if (confirm("Did you save your changes?")) {
  829. var stringota = "/edit_config.html";
  830. window.location = stringota;
  831. window.location.href = stringota;
  832. window.location.assign(stringota);
  833. window.location.replace(stringota);
  834. }
  835. }
  836. LoadConfigNeu();
  837. </script>
  838. </body>
  839. </html>