html_confHeatcontrol_DE.h 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. /* clang-format off */
  2. //static const char html_confbas_script[] PROGMEM = R"=====(
  3. //<script>
  4. // function g(i) { return document.getElementById(i) };
  5. // function sp(i){g(i).type=(g(i).type==='text'?'password':'text');}
  6. // var xhttp, reqTime, reqFin;
  7. // function setCbx(el, da) {
  8. // if(da == '1') {
  9. // el.checked = true;
  10. // el.style.visibility = 'visible';
  11. // }
  12. // else {
  13. // el.checked = false;
  14. // el.style.visibility = 'visible';
  15. // }
  16. // }
  17. // function updCbxVal(el) {
  18. // if (el.checked) el.value = '1';
  19. // else {
  20. // el.checked = true;
  21. // el.value = '0';
  22. // el.style.visibility = 'hidden';
  23. // }
  24. // }
  25. static const char html_confHeatc_script[] PROGMEM = R"=====(
  26. function transmit(f) {
  27. if (!xhttp) {
  28. reqTime = 0;
  29. reqFin = false;
  30. updCbxVal(g('heatUseHC'));
  31. updCbxVal(g('heatForceHC'));
  32. updCbxVal(g('heatForceHCAlsoOn'));
  33. //updCbxVal(g('saveToMqttRet'));
  34. //updCbxVal(g('PIRenDispPs0'));
  35. //updCbxVal(g('togTHdisp'));
  36. xhttp = new XMLHttpRequest();
  37. xhttp.timeout = 1000;
  38. xhttp.overrideMimeType('application/json');
  39. xhttp.open('POST', 'confDataHeatc');
  40. xhttp.send(f ? (new FormData(f)) : '');
  41. xhttp.onreadystatechange = function () {
  42. if (xhttp.readyState === XMLHttpRequest.DONE && xhttp.status === 200) {
  43. var data = JSON.parse(xhttp.responseText);
  44. g('heatOutTDis').value = data.heatOutTDis;
  45. g('heatcm20').value = data.heatcm20;
  46. g('heatcm15').value = data.heatcm15;
  47. g('heatcm10').value = data.heatcm10;
  48. g('heatcm5').value = data.heatcm5;
  49. g('heatc0').value = data.heatc0;
  50. g('heatc5').value = data.heatc5;
  51. g('heatc10').value = data.heatc10;
  52. g('heatc15').value = data.heatc15;
  53. g('heatc20').value = data.heatc20;
  54. g('heatlm20').value = data.heatlm20;
  55. g('heatlm15').value = data.heatlm15;
  56. g('heatlm10').value = data.heatlm10;
  57. g('heatlm5').value = data.heatlm5;
  58. g('heatl0').value = data.heatl0;
  59. g('heatl5').value = data.heatl5;
  60. g('heatl10').value = data.heatl10;
  61. g('heatl15').value = data.heatl15;
  62. g('heatl20').value = data.heatl20;
  63. setCbx(g('heatUseHC'), data.heatUseHC);
  64. setCbx(g('heatForceHC'), data.heatForceHC);
  65. setCbx(g('heatForceHCAlsoOn'), data.heatForceHCAlsoOn);
  66. g('heatCvHy1').value = data.heatCvHy1;
  67. g('heatCvHy0').value = data.heatCvHy0;
  68. g('pumpnl').value = data.pumpnl;
  69. g('heatTempFeedLimit').value = data.heatTempFeedLimit;
  70. g('pumpForceInt').value = data.pumpForceInt;
  71. g('pumpForceTime').value = data.pumpForceTime;
  72. g('pumpForceBegin').value = data.pumpForceBegin;
  73. g('pumpForceEnd').value = data.pumpForceEnd;
  74. //setCbx(g('autoSaveTemp'), data.autoSaveTemp);
  75. //setCbx(g('autoSaveMode'), data.autoSaveMode);
  76. //setCbx(g('saveToMqttRet'), data.saveToMqttRet);
  77. //setCbx(g('PIRenDispPs0'), data.PIRenDispPs0);
  78. //setCbx(g('togTHdisp'), data.togTHdisp);
  79. //g('tempDec').value = data.tempDec;
  80. //g('hyst').value = data.hyst;
  81. //g('minOffTime').value = data.minOffTime;
  82. //g('offMsg').value = data.offMsg;
  83. //g('iTempLab').value = data.iTempLab;
  84. //g('oTempLab').value = data.oTempLab;
  85. //g('modeName1').value = data.modeName1;
  86. //g('modeName0').value = data.modeName0;
  87. //g('psetName0').value = data.psetName0;
  88. //g('psetName1').value = data.psetName1;
  89. //g('psetName2').value = data.psetName2;
  90. //g('pauseTout').value = data.pauseTout;
  91. xhttp = null;
  92. reqFin = true;
  93. }
  94. else {
  95. if(!reqFin && reqTime > 10) {
  96. xhttp = null;
  97. reqFin = true;
  98. }
  99. }
  100. }
  101. }
  102. return false;
  103. }
  104. //transmit();
  105. function saveConf() {
  106. updCbxVal(g('heatUseHC'));
  107. updCbxVal(g('heatForceHC'));
  108. updCbxVal(g('heatForceHCAlsoOn'));
  109. //updCbxVal(g('saveToMqttRet'));
  110. //updCbxVal(g('PIRenDispPs0'));
  111. //updCbxVal(g('togTHdisp'));
  112. g('frmConf').submit();
  113. }
  114. function init() {
  115. transmit();
  116. }
  117. )====="; // html_confTherm_script
  118. // setInterval(function () { ++reqTime; }, 1000);
  119. //</script>
  120. //)====="; // html_confTherm_script
  121. static const char html_confHeatc_body[] PROGMEM = R"=====(
  122. <b>Konfiguration - Heizungssteuerung</b>
  123. <div class='config'>
  124. <form id='frmConf' action='setConfHeatc' method='POST'>
  125. <br>
  126. <fieldset>
  127. <legend>Heizung</legend>
  128. <p><b>Limit Vorlauftemperatur</b><br>
  129. <input class='smallnum' type='number' min='0' max='10' name='heatTempFeedLimit' id='heatTempFeedLimit'>
  130. <p class='n'>Das Erreichen dieser Vorlauftemperatur f&uuml;hrt<br>
  131. immer zur sofortigen Abschaltung. </p>
  132. </p>
  133. <br>
  134. <p>
  135. <b>Heizung deaktivieren</b><br>
  136. <p class='n'>wenn A-Temp >= <input class='smallnum' type='number' min='16' max='26' name='heatOutTDis' id='heatOutTDis'></p>
  137. <br>
  138. </fieldset>
  139. <div></div><br>
  140. <fieldset>
  141. <legend>Heizkurve</legend>
  142. <p><b>Heizkurve verwenden</b>&nbsp;<input type='checkbox' name='heatUseHC' id='heatUseHC'/></p>
  143. <p class='n'>Wenn <b>deaktiviert</b> folgt die Ansteuerung <br>
  144. der Heizung ausschließlich der Anforderung <br>
  145. des Raumthermostats.</p>
  146. <br>
  147. <table>
  148. <tr><th>Au&szlig;en</th><th> - </th><th>Vorlauf [°C]</th></tr>
  149. <tr><td><b>< -20°C</b></td><td> - </td><td><input class='smallnum' type='number' min='10' max='90' name='heatcm20' id='heatcm20'></td></tr>
  150. <tr><td><b>< -15°C</b></td><td> - </td><td><input class='smallnum' type='number' min='10' max='90' name='heatcm15' id='heatcm15'></td></tr>
  151. <tr><td><b>< -10°C</b></td><td> - </td><td><input class='smallnum' type='number' min='10' max='90' name='heatcm10' id='heatcm10'></td></tr>
  152. <tr><td><b>< -5°C</b></td><td> - </td><td><input class='smallnum' type='number' min='10' max='90' name='heatcm5' id='heatcm5'></td></tr>
  153. <tr><td><b>< 0°C</b></td><td> - </td><td><input class='smallnum' type='number' min='10' max='90' name='heatc0' id='heatc0'></td></tr>
  154. <tr><td><b>< 5°C</b></td><td> - </td><td><input class='smallnum' type='number' min='10' max='90' name='heatc5' id='heatc5'></td></tr>
  155. <tr><td><b>< 10°C</b></td><td> - </td><td><input class='smallnum' type='number' min='10' max='90' name='heatc10' id='heatc10'></td></tr>
  156. <tr><td><b>< 15°C</b></td><td> - </td><td><input class='smallnum' type='number' min='10' max='90' name='heatc15' id='heatc15'></td></tr>
  157. <tr><td><b>> 15°C</b></td><td> - </td><td><input class='smallnum' type='number' min='10' max='90' name='heatc20' id='heatc20'></td></tr>
  158. </table>
  159. <br>
  160. <p><b>Abschaltpunkt [Heizkurve + °C]</b><br>
  161. <input class='smallnum' type='number' min='0' max='10' name='heatCvHy0' id='heatCvHy0'>
  162. </p>
  163. <br>
  164. <p><b>Einschaltpunkt [Heizkurve - °C]</b><br>
  165. <input class='smallnum' type='number' min='0' max='16' name='heatCvHy1' id='heatCvHy1'>
  166. </p>
  167. <br>
  168. <p><b>Heizkurve forcieren <br>
  169. bei Abschaltung</b>&nbsp;
  170. <input type='checkbox' name='heatForceHC' id='heatForceHC'/></p>
  171. <p class='n'>Wenn <b>aktiviert</b> wird nach einer <br>
  172. Heizanforderung weiter geheizt, bis die <br>
  173. Soll-Vorlauftemperatur erreicht ist, <br>
  174. auch wenn die Anforderung in der <br>
  175. Zwischenzeit weggefallen ist. <br>
  176. <i>Dies kann in Verbindung mit der Brenner-<br>
  177. Sperrzeit bei Raumthermostaten mit zu <br>
  178. geringer Hysterese sinnvoll sein.</i></p>
  179. <br>
  180. <p><b>Heizkurve forcieren auch <br>
  181. bei Einschaltung</b>&nbsp;
  182. <input type='checkbox' name='heatForceHCAlsoOn' id='heatForceHCAlsoOn'/></p>
  183. <p class='n'><b>ACHTUNG!!!</b><br>
  184. Wenn <b>aktiviert</b> wird die Heizanforderung <br>
  185. des Raumthermostats <b>komplett ignoriert</b>! <br>
  186. Die Heizung wird dann <b>ausschlie&szlig;lich</b> <br>
  187. durch die Heizkurve gesteuert.<br>
  188. Damit dies verwendet wird m&uuml;ssen auch die <br>
  189. Optionen <b>'Heizkurve verwenden'</b> und <br>
  190. <b>'Heizkurve forcieren bei Abschaltung'</b> aktiviert sein.
  191. </p>
  192. <br>
  193. </fieldset>
  194. <div></div><br>
  195. <fieldset>
  196. <legend>Heizung - Brenner-Sperrzeit</legend>
  197. <table>
  198. <tr><th>Au&szlig;en</th><th> - </th><th>Sperrzeit [min]</th></tr>
  199. <tr><td><b>< -20°C</b></td><td> - </td><td><input class='smallnum' type='number' min='0' max='60' name='heatlm20' id='heatlm20'></td></tr>
  200. <tr><td><b>< -15°C</b></td><td> - </td><td><input class='smallnum' type='number' min='0' max='60' name='heatlm15' id='heatlm15'></td></tr>
  201. <tr><td><b>< -10°C</b></td><td> - </td><td><input class='smallnum' type='number' min='0' max='60' name='heatlm10' id='heatlm10'></td></tr>
  202. <tr><td><b>< -5°C</b></td><td> - </td><td><input class='smallnum' type='number' min='0' max='60' name='heatlm5' id='heatlm5'></td></tr>
  203. <tr><td><b>< 0°C</b></td><td> - </td><td><input class='smallnum' type='number' min='0' max='60' name='heatl0' id='heatl0'></td></tr>
  204. <tr><td><b>< 5°C</b></td><td> - </td><td><input class='smallnum' type='number' min='0' max='60' name='heatl5' id='heatl5'></td></tr>
  205. <tr><td><b>< 10°C</b></td><td> - </td><td><input class='smallnum' type='number' min='0' max='60' name='heatl10' id='heatl10'></td></tr>
  206. <tr><td><b>< 15°C</b></td><td> - </td><td><input class='smallnum' type='number' min='0' max='60' name='heatl15' id='heatl15'></td></tr>
  207. <tr><td><b>> 15°C</b></td><td> - </td><td><input class='smallnum' type='number' min='0' max='60' name='heatl20' id='heatl20'></td></tr>
  208. </table>
  209. </fieldset>
  210. <div></div><br>
  211. <fieldset>
  212. <legend>Pumpe</legend>
  213. <p><b>Nachlaufzeit [min]</b><br><input class='smallnum' type='number' min='0' max='90' name='pumpnl' id='pumpnl'></p><br>
  214. <p>&nbsp;</p>
  215. <p>Pumpenstillstand verhindern</p>
  216. <br>
  217. <p><b>Alle <input class='smallnum' type='number' min='0' max='255' name='pumpForceInt' id='pumpForceInt'> Stunden</b><br>
  218. f&uuml;r <input class='smallnum' type='number' min='1' max='255' name='pumpForceTime' id='pumpForceTime'> Minuten einschalten.</b></p><br>
  219. <p><b>Nur im Zeitfenster: <br>
  220. <input class='smallnum' type='number' min='0' max='23' name='pumpForceBegin' id='pumpForceBegin' style='width:100'> - <input class='smallnum' type='number' min='0' max='24' name='pumpForceEnd' id='pumpForceEnd'> Uhr</b><br></p>
  221. <p class='n'><i>NTP muss aktiviert sein.<br>
  222. Es ist eine Internetverbindung zum <br>
  223. Zeitserver erforderlich.<br>
  224. Ist dies nicht der Fall wird <br>
  225. die Uhrzeit nicht beachtet.<br>
  226. Beide Werte auf 0 setzen um die <br>
  227. Uhrzeiten zu deaktivieren.</i></p>
  228. </p><br>
  229. </fieldset>
  230. <div></div><br>
  231. </form>
  232. <div></div>
  233. <table style='width:100%'>
  234. <td style='width:50%'><button onclick='location="conf";' class='bgrey'>Abbrechen</button></td>
  235. <td style='width:50%'><button onclick='return saveConf()' class='bred'>Speichern</button></td>
  236. </tr></table>
  237. </div>
  238. )====="; // html_confHeatc_body