config_set.ino 50 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086
  1. // sets the corresponding config variable for 'param' to new value
  2. // does not trigger saving to flash
  3. // does not distinguish between config sets as they are only split on flash and
  4. // in web interface called from commands:
  5. // serial command: set [param] [value]
  6. // MQTT cmd topic, payload "set [param] [value]"
  7. // -> must be committed by command 'save' after all desired values are set
  8. // called from web interface setConf functions, which also saves the changed
  9. // conf set to flash immediately
  10. void setConfig(char *param, char *value)
  11. {
  12. //snprintf(logBuf, LOG_BUFFER_SIZE, "setConfig: '%s' set to '%s'", param, value);
  13. snprintf_P(logBuf, LOG_BUFFER_SIZE, PGMStr_setConf, param, value);
  14. sendLog(logBuf, LOGLEVEL_DEBUG);
  15. //char param_l[15];
  16. strlwr(param);
  17. // confDevWiFi
  18. if (strcmp(param, "devname") == 0)
  19. {
  20. if (strcmp(value, confDevWiFi.deviceName) != 0)
  21. {
  22. if (strcmp(value, "0") == 0)
  23. {
  24. strlcpy(confDevWiFi.deviceName, "", sizeof(confDevWiFi.deviceName));
  25. configChangedRestartRequired = true;
  26. confDevWiFi_wasChanged = true;
  27. }
  28. else
  29. {
  30. if (strlen(value) >= 4)
  31. {
  32. strlcpy(confDevWiFi.deviceName, value, sizeof(confDevWiFi.deviceName));
  33. configChangedRestartRequired = true;
  34. confDevWiFi_wasChanged = true;
  35. }
  36. }
  37. }
  38. }
  39. else if (strcmp(param, "hostname") == 0)
  40. {
  41. if (strcmp(value, confDevWiFi.hostName) != 0)
  42. {
  43. if (strcmp(value, "0") == 0)
  44. {
  45. strlcpy(confDevWiFi.hostName, "", sizeof(confDevWiFi.hostName));
  46. configChangedRestartRequired = true;
  47. confDevWiFi_wasChanged = true;
  48. }
  49. else
  50. {
  51. if (strlen(value) >= 4)
  52. {
  53. strlcpy(confDevWiFi.hostName, value, sizeof(confDevWiFi.hostName));
  54. configChangedRestartRequired = true;
  55. confDevWiFi_wasChanged = true;
  56. }
  57. }
  58. }
  59. }
  60. else if (strcmp(param, "ssid1") == 0)
  61. {
  62. if (strcmp(value, confDevWiFi.WiFiSSID1) != 0)
  63. {
  64. if (strcmp(value, "0") == 0)
  65. {
  66. strlcpy(confDevWiFi.WiFiSSID1, "", sizeof(confDevWiFi.WiFiSSID1));
  67. configChangedRestartRequired = true;
  68. confDevWiFi_wasChanged = true;
  69. }
  70. else
  71. {
  72. strlcpy(confDevWiFi.WiFiSSID1, value, sizeof(confDevWiFi.WiFiSSID1));
  73. configChangedRestartRequired = true;
  74. confDevWiFi_wasChanged = true;
  75. }
  76. }
  77. }
  78. else if (strcmp(param, "wpw1") == 0)
  79. {
  80. if (strcmp(value, confSecrets.WiFiPW1) != 0)
  81. {
  82. if (strcmp(value, "0") == 0)
  83. {
  84. strlcpy(confSecrets.WiFiPW1, "", sizeof(confSecrets.WiFiPW1));
  85. configChangedRestartRequired = true;
  86. confSecrets_wasChanged = true;
  87. }
  88. else
  89. {
  90. if (!strcmp(value, "****") == 0)
  91. {
  92. strlcpy(confSecrets.WiFiPW1, value, sizeof(confSecrets.WiFiPW1));
  93. configChangedRestartRequired = true;
  94. confSecrets_wasChanged = true;
  95. }
  96. }
  97. }
  98. }
  99. else if (strcmp(param, "ssid2") == 0)
  100. {
  101. if (strcmp(value, confDevWiFi.WiFiSSID2) != 0)
  102. {
  103. if (strcmp(value, "0") == 0)
  104. {
  105. strlcpy(confDevWiFi.WiFiSSID2, "", sizeof(confDevWiFi.WiFiSSID2));
  106. configChangedRestartRequired = true;
  107. confDevWiFi_wasChanged = true;
  108. }
  109. else
  110. {
  111. strlcpy(confDevWiFi.WiFiSSID2, value, sizeof(confDevWiFi.WiFiSSID2));
  112. configChangedRestartRequired = true;
  113. confDevWiFi_wasChanged = true;
  114. }
  115. }
  116. }
  117. else if (strcmp(param, "wpw2") == 0)
  118. {
  119. if (strcmp(value, confSecrets.WiFiPW2) != 0)
  120. {
  121. if (strcmp(value, "0") == 0)
  122. {
  123. strlcpy(confSecrets.WiFiPW2, "", sizeof(confSecrets.WiFiPW2));
  124. configChangedRestartRequired = true;
  125. confSecrets_wasChanged = true;
  126. }
  127. else
  128. {
  129. if (!strcmp(value, "****") == 0)
  130. {
  131. strlcpy(confSecrets.WiFiPW2, value, sizeof(confSecrets.WiFiPW2));
  132. configChangedRestartRequired = true;
  133. confSecrets_wasChanged = true;
  134. }
  135. }
  136. }
  137. }
  138. else if (strcmp(param, "wpwap") == 0)
  139. {
  140. if (strcmp(value, confSecrets.WiFiAPModePassword) != 0)
  141. {
  142. if (strcmp(value, "0") == 0)
  143. {
  144. strlcpy(confSecrets.WiFiAPModePassword, "", sizeof(confSecrets.WiFiAPModePassword));
  145. confSecrets_wasChanged = true;
  146. }
  147. else
  148. {
  149. if (!strcmp(value, "****") == 0)
  150. {
  151. strlcpy(confSecrets.WiFiAPModePassword, value, sizeof(confSecrets.WiFiAPModePassword));
  152. confSecrets_wasChanged = true;
  153. }
  154. }
  155. }
  156. }
  157. else if (strcmp(param, "waptout") == 0)
  158. {
  159. int tmpval = atoi(value);
  160. if (tmpval != confDevWiFi.WiFiAPModeTimeout)
  161. {
  162. if (tmpval >= 0 && tmpval <= 120)
  163. {
  164. confDevWiFi.WiFiAPModeTimeout = tmpval;
  165. confDevWiFi_wasChanged = true;
  166. }
  167. else {
  168. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  169. sendLog(logBuf, LOGLEVEL_ERROR);
  170. }
  171. }
  172. }
  173. else if (strcmp(param, "wconncheck") == 0)
  174. {
  175. int tmpval = atoi(value);
  176. if (tmpval != confDevWiFi.WiFiConnCheckInterval)
  177. {
  178. if (tmpval == 0)
  179. {
  180. confDevWiFi.WiFiConnCheckInterval = 0;
  181. confDevWiFi_wasChanged = true;
  182. }
  183. else
  184. {
  185. if (tmpval >= 10 && tmpval <= 3600)
  186. {
  187. confDevWiFi.WiFiConnCheckInterval = tmpval;
  188. confDevWiFi_wasChanged = true;
  189. }
  190. else {
  191. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  192. sendLog(logBuf, LOGLEVEL_ERROR);
  193. }
  194. }
  195. }
  196. }
  197. else if (strcmp(param, "wretry") == 0)
  198. {
  199. int tmpval = atoi(value);
  200. if (tmpval != confDevWiFi.WiFiRetryInterval)
  201. {
  202. if (tmpval >= 0 && tmpval <= 120)
  203. {
  204. confDevWiFi.WiFiRetryInterval = tmpval;
  205. confDevWiFi_wasChanged = true;
  206. }
  207. else {
  208. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  209. sendLog(logBuf, LOGLEVEL_ERROR);
  210. }
  211. }
  212. }
  213. else if (strcmp(param, "wreboot") == 0)
  214. {
  215. int tmpval = atoi(value);
  216. if (tmpval != confDevWiFi.WiFiRebootOnNoConnect)
  217. {
  218. if (tmpval >= 0 && tmpval <= 2880)
  219. {
  220. confDevWiFi.WiFiRebootOnNoConnect = tmpval;
  221. confDevWiFi_wasChanged = true;
  222. }
  223. else {
  224. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  225. sendLog(logBuf, LOGLEVEL_ERROR);
  226. }
  227. }
  228. }
  229. else if (strcmp(param, "ardota") == 0)
  230. {
  231. bool tmpval = false;
  232. if (atoi(value) == 1) tmpval = true;
  233. if(tmpval != confDevWiFi.enableArduinoOTA) {
  234. confDevWiFi.enableArduinoOTA = tmpval;
  235. configChangedRestartRequired = true;
  236. confDevWiFi_wasChanged = true;
  237. }
  238. }
  239. // confWeb
  240. else if (strcmp(param, "apitoken") == 0)
  241. {
  242. if (strcmp(value, confSecrets.http_token) != 0)
  243. {
  244. if (strcmp(value, "0") == 0)
  245. {
  246. strlcpy(confSecrets.http_token, "", sizeof(confSecrets.http_token));
  247. confSecrets_wasChanged = true;
  248. }
  249. else
  250. {
  251. if (!strcmp(value, "****") == 0)
  252. {
  253. strlcpy(confSecrets.http_token, value, sizeof(confSecrets.http_token));
  254. confSecrets_wasChanged = true;
  255. }
  256. }
  257. }
  258. }
  259. else if (strcmp(param, "httpua") == 0)
  260. {
  261. if (strcmp(value, confSecrets.http_user) != 0)
  262. {
  263. if (strcmp(value, "0") == 0)
  264. {
  265. strlcpy(confSecrets.http_user, "", sizeof(confSecrets.http_user));
  266. confSecrets_wasChanged = true;
  267. }
  268. else
  269. {
  270. strlcpy(confSecrets.http_user, value, sizeof(confSecrets.http_user));
  271. confSecrets_wasChanged = true;
  272. }
  273. }
  274. }
  275. else if (strcmp(param, "httppa") == 0)
  276. {
  277. if (strcmp(value, confSecrets.http_pass) != 0)
  278. {
  279. if (strcmp(value, "0") == 0)
  280. {
  281. strlcpy(confSecrets.http_pass, "", sizeof(confSecrets.http_pass));
  282. confSecrets_wasChanged = true;
  283. }
  284. else
  285. {
  286. if (!strcmp(value, "****") == 0)
  287. {
  288. strlcpy(confSecrets.http_pass, value, sizeof(confSecrets.http_pass));
  289. confSecrets_wasChanged = true;
  290. }
  291. }
  292. }
  293. }
  294. else if (strcmp(param, "httpauth") == 0)
  295. {
  296. bool tmpval;
  297. if (atoi(value) == 1)
  298. tmpval = true;
  299. else
  300. tmpval = false;
  301. if (confWeb.http_user_auth != tmpval)
  302. {
  303. confWeb.http_user_auth = tmpval;
  304. confWeb_wasChanged = true;
  305. }
  306. }
  307. else if (strcmp(param, "httpu1") == 0)
  308. {
  309. if (strcmp(value, confSecrets.http_user1) != 0)
  310. {
  311. if (strcmp(value, "0") == 0)
  312. {
  313. strlcpy(confSecrets.http_user1, "", sizeof(confSecrets.http_user1));
  314. confSecrets_wasChanged = true;
  315. }
  316. else
  317. {
  318. strlcpy(confSecrets.http_user1, value, sizeof(confSecrets.http_user1));
  319. confSecrets_wasChanged = true;
  320. }
  321. }
  322. }
  323. else if (strcmp(param, "httpp1") == 0)
  324. {
  325. if (strcmp(value, confSecrets.http_pass1) != 0)
  326. {
  327. if (strcmp(value, "0") == 0)
  328. {
  329. strlcpy(confSecrets.http_pass1, "", sizeof(confSecrets.http_pass1));
  330. confSecrets_wasChanged = true;
  331. }
  332. else
  333. {
  334. if (!strcmp(value, "****") == 0)
  335. {
  336. strlcpy(confSecrets.http_pass1, value, sizeof(confSecrets.http_pass1));
  337. confSecrets_wasChanged = true;
  338. }
  339. }
  340. }
  341. }
  342. else if (strcmp(param, "httpu2") == 0)
  343. {
  344. if (strcmp(value, confSecrets.http_user2) != 0)
  345. {
  346. if (strcmp(value, "0") == 0)
  347. {
  348. strlcpy(confSecrets.http_user2, "", sizeof(confSecrets.http_user2));
  349. confSecrets_wasChanged = true;
  350. }
  351. else
  352. {
  353. strlcpy(confSecrets.http_user2, value, sizeof(confSecrets.http_user2));
  354. confSecrets_wasChanged = true;
  355. }
  356. }
  357. }
  358. else if (strcmp(param, "httpp2") == 0)
  359. {
  360. if (strcmp(value, confSecrets.http_pass2) != 0)
  361. {
  362. if (strcmp(value, "0") == 0)
  363. {
  364. strlcpy(confSecrets.http_pass2, "", sizeof(confSecrets.http_pass2));
  365. confSecrets_wasChanged = true;
  366. }
  367. else
  368. {
  369. if (!strcmp(value, "****") == 0)
  370. {
  371. strlcpy(confSecrets.http_pass2, value, sizeof(confSecrets.http_pass2));
  372. confSecrets_wasChanged = true;
  373. }
  374. }
  375. }
  376. }
  377. else if (strcmp(param, "wconsole") == 0)
  378. {
  379. bool tmpval;
  380. if (atoi(value) == 1)
  381. tmpval = true;
  382. else
  383. tmpval = false;
  384. if (confWeb.wConsole != tmpval)
  385. {
  386. confWeb.wConsole = tmpval;
  387. configChangedRestartRequired = true;
  388. confWeb_wasChanged = true;
  389. }
  390. }
  391. else if (strcmp(param, "wsconsole") == 0)
  392. {
  393. bool tmpval;
  394. if (atoi(value) == 1)
  395. tmpval = true;
  396. else
  397. tmpval = false;
  398. if (confWeb.wsConsole != tmpval)
  399. {
  400. confWeb.wsConsole = tmpval;
  401. configChangedRestartRequired = true;
  402. confWeb_wasChanged = true;
  403. }
  404. }
  405. #ifdef ENABLE_FEATURE_HTTP_UPDATER
  406. else if (strcmp(param, "enableota") == 0)
  407. {
  408. bool tmpval;
  409. if (atoi(value) == 1) tmpval = true;
  410. else tmpval = false;
  411. if (confWeb.enableOTA != tmpval) {
  412. confWeb.enableOTA = tmpval;
  413. confWeb_wasChanged = true;
  414. }
  415. }
  416. #endif
  417. #ifdef ENABLE_FEATURE_FILESYSTEM_BROWSER
  418. else if (strcmp(param, "fsbrowser") == 0)
  419. {
  420. bool tmpval;
  421. if (atoi(value) == 1) tmpval = true;
  422. else tmpval = false;
  423. if (confWeb.FSbrowser != tmpval) {
  424. confWeb.FSbrowser = tmpval;
  425. confWeb_wasChanged = true;
  426. }
  427. }
  428. #endif
  429. // confMqtt
  430. else if (strcmp(param, "mqttenable") == 0)
  431. {
  432. bool tmpval;
  433. if (atoi(value) == 1)
  434. tmpval = true;
  435. else
  436. tmpval = false;
  437. if (confMqtt.mqtt_enable != tmpval)
  438. {
  439. confMqtt.mqtt_enable = tmpval;
  440. configChangedMqttConnResetRequired = true;
  441. confMqtt_wasChanged = true;
  442. }
  443. }
  444. else if (strcmp(param, "mqtthost") == 0)
  445. {
  446. if (strcmp(value, confMqtt.mqtt_server) != 0)
  447. {
  448. if (strcmp(value, "0") == 0)
  449. {
  450. strlcpy(confMqtt.mqtt_server, "", sizeof(confMqtt.mqtt_server));
  451. configChangedMqttConnResetRequired = true;
  452. confMqtt_wasChanged = true;
  453. }
  454. else
  455. {
  456. strlcpy(confMqtt.mqtt_server, value, sizeof(confMqtt.mqtt_server));
  457. configChangedMqttConnResetRequired = true;
  458. confMqtt_wasChanged = true;
  459. }
  460. }
  461. }
  462. else if (strcmp(param, "mqttport") == 0)
  463. {
  464. if (atoi(value) != confMqtt.mqtt_port)
  465. {
  466. confMqtt.mqtt_port = atoi(value);
  467. configChangedMqttConnResetRequired = true;
  468. confMqtt_wasChanged = true;
  469. }
  470. }
  471. else if (strcmp(param, "mqttuser") == 0)
  472. {
  473. if (strcmp(value, confSecrets.mqtt_user) != 0)
  474. {
  475. if (strcmp(value, "0") == 0)
  476. {
  477. strlcpy(confSecrets.mqtt_user, "", sizeof(confSecrets.mqtt_user));
  478. configChangedMqttConnResetRequired = true;
  479. confSecrets_wasChanged = true;
  480. }
  481. else
  482. {
  483. strlcpy(confSecrets.mqtt_user, value, sizeof(confSecrets.mqtt_user));
  484. configChangedMqttConnResetRequired = true;
  485. confSecrets_wasChanged = true;
  486. }
  487. }
  488. }
  489. else if (strcmp(param, "mqttpass") == 0)
  490. {
  491. if (strcmp(value, confSecrets.mqtt_pass) != 0)
  492. {
  493. if (strcmp(value, "0") == 0)
  494. {
  495. strlcpy(confSecrets.mqtt_pass, "", sizeof(confSecrets.mqtt_pass));
  496. configChangedMqttConnResetRequired = true;
  497. confSecrets_wasChanged = true;
  498. }
  499. else
  500. {
  501. if (!strcmp(value, "****") == 0)
  502. {
  503. strlcpy(confSecrets.mqtt_pass, value, sizeof(confSecrets.mqtt_pass));
  504. configChangedMqttConnResetRequired = true;
  505. confSecrets_wasChanged = true;
  506. }
  507. }
  508. }
  509. }
  510. else if (strcmp(param, "intop") == 0)
  511. {
  512. if (strcmp(value, confMqtt.mqtt_topic_in) != 0)
  513. {
  514. if (strcmp(value, "0") == 0)
  515. {
  516. strlcpy(confMqtt.mqtt_topic_in, "", sizeof(confMqtt.mqtt_topic_in));
  517. configChangedMqttConnResetRequired = true;
  518. confMqtt_wasChanged = true;
  519. }
  520. else
  521. {
  522. strlcpy(confMqtt.mqtt_topic_in, value, sizeof(confMqtt.mqtt_topic_in));
  523. configChangedMqttConnResetRequired = true;
  524. confMqtt_wasChanged = true;
  525. }
  526. }
  527. }
  528. else if (strcmp(param, "outtop") == 0)
  529. {
  530. if (strcmp(value, confMqtt.mqtt_topic_out) != 0)
  531. {
  532. if (strcmp(value, "0") == 0)
  533. {
  534. strlcpy(confMqtt.mqtt_topic_out, "", sizeof(confMqtt.mqtt_topic_out));
  535. confMqtt_wasChanged = true;
  536. }
  537. else
  538. {
  539. strlcpy(confMqtt.mqtt_topic_out, value, sizeof(confMqtt.mqtt_topic_out));
  540. confMqtt_wasChanged = true;
  541. }
  542. }
  543. }
  544. else if (strcmp(param, "outret") == 0)
  545. {
  546. bool tmpval;
  547. if (atoi(value) == 1)
  548. tmpval = true;
  549. else
  550. tmpval = false;
  551. if (confMqtt.mqtt_outRetain != tmpval)
  552. {
  553. confMqtt.mqtt_outRetain = tmpval;
  554. confMqtt_wasChanged = true;
  555. if (tmpval == false)
  556. {
  557. publishDeleteRetainedOutMessages();
  558. }
  559. }
  560. }
  561. else if (strcmp(param, "outretsens") == 0)
  562. {
  563. bool tmpval;
  564. if (atoi(value) == 1)
  565. tmpval = true;
  566. else
  567. tmpval = false;
  568. if (confMqtt.mqtt_outRetain_sensors != tmpval)
  569. {
  570. confMqtt.mqtt_outRetain_sensors = tmpval;
  571. confMqtt_wasChanged = true;
  572. if (tmpval == false)
  573. {
  574. publishDeleteRetainedOutMessages_sensors();
  575. }
  576. }
  577. }
  578. else if (strcmp(param, "outpubint") == 0)
  579. {
  580. if (atoi(value) != confMqtt.mqtt_outPubInterval)
  581. {
  582. confMqtt.mqtt_outPubInterval = atoi(value);
  583. confMqtt_wasChanged = true;
  584. }
  585. }
  586. else if (strcmp(param, "outpubintsens") == 0)
  587. {
  588. if (atoi(value) != confMqtt.mqtt_outPubInterval_sensors)
  589. {
  590. confMqtt.mqtt_outPubInterval_sensors = atoi(value);
  591. confMqtt_wasChanged = true;
  592. }
  593. }
  594. else if (strcmp(param, "willtop") == 0)
  595. {
  596. if (strcmp(value, confMqtt.mqtt_willTopic) != 0)
  597. {
  598. if (strcmp(value, "0") == 0)
  599. {
  600. strlcpy(confMqtt.mqtt_willTopic, "", sizeof(confMqtt.mqtt_willTopic));
  601. configChangedMqttConnResetRequired = true;
  602. confMqtt_wasChanged = true;
  603. }
  604. else
  605. {
  606. strlcpy(confMqtt.mqtt_willTopic, value, sizeof(confMqtt.mqtt_willTopic));
  607. configChangedMqttConnResetRequired = true;
  608. confMqtt_wasChanged = true;
  609. }
  610. }
  611. }
  612. else if (strcmp(param, "willqos") == 0)
  613. {
  614. int tmpval = atoi(value);
  615. if (tmpval != confMqtt.mqtt_willQos)
  616. {
  617. if (tmpval >= 0 && tmpval <= 2)
  618. {
  619. confMqtt.mqtt_willQos = tmpval;
  620. configChangedMqttConnResetRequired = true;
  621. confMqtt_wasChanged = true;
  622. }
  623. }
  624. }
  625. else if (strcmp(param, "willret") == 0)
  626. {
  627. bool tmpval;
  628. if (atoi(value) == 1)
  629. tmpval = true;
  630. else
  631. tmpval = false;
  632. if (confMqtt.mqtt_willRetain != tmpval)
  633. {
  634. confMqtt.mqtt_willRetain = tmpval;
  635. configChangedMqttConnResetRequired = true;
  636. confMqtt_wasChanged = true;
  637. }
  638. }
  639. else if (strcmp(param, "willmsg") == 0)
  640. {
  641. if (strcmp(value, confMqtt.mqtt_willMsg) != 0)
  642. {
  643. if (strcmp(value, "0") == 0)
  644. {
  645. strlcpy(confMqtt.mqtt_willMsg, "", sizeof(confMqtt.mqtt_willMsg));
  646. configChangedMqttConnResetRequired = true;
  647. confMqtt_wasChanged = true;
  648. }
  649. else
  650. {
  651. strlcpy(confMqtt.mqtt_willMsg, value, sizeof(confMqtt.mqtt_willMsg));
  652. configChangedMqttConnResetRequired = true;
  653. confMqtt_wasChanged = true;
  654. }
  655. }
  656. }
  657. else if (strcmp(param, "connmsg") == 0)
  658. {
  659. if (strcmp(value, confMqtt.mqtt_connMsg) != 0)
  660. {
  661. if (strcmp(value, "0") == 0)
  662. {
  663. strlcpy(confMqtt.mqtt_connMsg, "", sizeof(confMqtt.mqtt_connMsg));
  664. configChangedMqttConnResetRequired = true;
  665. confMqtt_wasChanged = true;
  666. }
  667. else
  668. {
  669. strlcpy(confMqtt.mqtt_connMsg, value, sizeof(confMqtt.mqtt_connMsg));
  670. configChangedMqttConnResetRequired = true;
  671. confMqtt_wasChanged = true;
  672. }
  673. }
  674. }
  675. else if (strcmp(param, "hbenable") == 0)
  676. {
  677. bool tmpval;
  678. if (atoi(value) == 1)
  679. tmpval = true;
  680. else
  681. tmpval = false;
  682. if (confMqtt.mqtt_enable_heartbeat != tmpval)
  683. {
  684. confMqtt.mqtt_enable_heartbeat = tmpval;
  685. confMqtt_wasChanged = true;
  686. }
  687. }
  688. else if (strcmp(param, "hbreconn") == 0)
  689. {
  690. unsigned int _tmpval = atoi(value);
  691. if (_tmpval != confMqtt.mqtt_heartbeat_maxage_reconnect)
  692. {
  693. if (_tmpval == 0)
  694. {
  695. confMqtt.mqtt_heartbeat_maxage_reconnect = 0;
  696. confMqtt_wasChanged = true;
  697. }
  698. else if (_tmpval >= 1 && _tmpval <= 60)
  699. {
  700. confMqtt.mqtt_heartbeat_maxage_reconnect = _tmpval;
  701. confMqtt_wasChanged = true;
  702. }
  703. else {
  704. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  705. sendLog(logBuf, LOGLEVEL_ERROR);
  706. }
  707. }
  708. }
  709. else if (strcmp(param, "hbreboot") == 0)
  710. {
  711. unsigned int _tmpval = atoi(value);
  712. if (_tmpval != confMqtt.mqtt_heartbeat_maxage_reboot)
  713. {
  714. if (_tmpval == 0)
  715. {
  716. confMqtt.mqtt_heartbeat_maxage_reboot = 0;
  717. confMqtt_wasChanged = true;
  718. }
  719. else if (_tmpval >= 5 && _tmpval <= 3600)
  720. {
  721. confMqtt.mqtt_heartbeat_maxage_reboot = _tmpval;
  722. confMqtt_wasChanged = true;
  723. }
  724. else {
  725. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  726. sendLog(logBuf, LOGLEVEL_ERROR);
  727. }
  728. }
  729. }
  730. else if (strcmp(param, "reconsilent") == 0)
  731. {
  732. bool tmpval;
  733. if (atoi(value) == 1)
  734. tmpval = true;
  735. else
  736. tmpval = false;
  737. if (confMqtt.mqtt_reconnect_silent != tmpval)
  738. {
  739. confMqtt.mqtt_reconnect_silent = tmpval;
  740. confMqtt_wasChanged = true;
  741. }
  742. }
  743. // confAdd
  744. else if (strcmp(param, "outtemptop") == 0)
  745. {
  746. if (strcmp(value, confAdd.outTemp_topic_in) != 0)
  747. {
  748. if (strcmp(value, "0") == 0)
  749. {
  750. strlcpy(confAdd.outTemp_topic_in, "", sizeof(confAdd.outTemp_topic_in));
  751. configChangedMqttConnResetRequired = true;
  752. confAdd_wasChanged = true;
  753. }
  754. else
  755. {
  756. strlcpy(confAdd.outTemp_topic_in, value, sizeof(confAdd.outTemp_topic_in));
  757. configChangedMqttConnResetRequired = true;
  758. confAdd_wasChanged = true;
  759. }
  760. }
  761. }
  762. else if (strcmp(param, "outhumtop") == 0)
  763. {
  764. if (strcmp(value, confAdd.outHum_topic_in) != 0)
  765. {
  766. if (strcmp(value, "0") == 0)
  767. {
  768. strlcpy(confAdd.outHum_topic_in, "", sizeof(confAdd.outHum_topic_in));
  769. configChangedMqttConnResetRequired = true;
  770. confAdd_wasChanged = true;
  771. }
  772. else
  773. {
  774. strlcpy(confAdd.outHum_topic_in, value, sizeof(confAdd.outHum_topic_in));
  775. configChangedMqttConnResetRequired = true;
  776. confAdd_wasChanged = true;
  777. }
  778. }
  779. }
  780. else if (strcmp(param, "pirtop") == 0)
  781. {
  782. if (strcmp(value, confAdd.mqtt_topic_pir) != 0)
  783. {
  784. if (strcmp(value, "0") == 0)
  785. {
  786. strlcpy(confAdd.mqtt_topic_pir, "", sizeof(confAdd.mqtt_topic_pir));
  787. confAdd_wasChanged = true;
  788. }
  789. else
  790. {
  791. strlcpy(confAdd.mqtt_topic_pir, value, sizeof(confAdd.mqtt_topic_pir));
  792. confAdd_wasChanged = true;
  793. }
  794. }
  795. }
  796. else if (strcmp(param, "pironpld") == 0)
  797. {
  798. if (strcmp(value, confAdd.mqtt_payload_pir_on) != 0)
  799. {
  800. if (strcmp(value, "0") == 0)
  801. {
  802. strlcpy(confAdd.mqtt_payload_pir_on, "", sizeof(confAdd.mqtt_payload_pir_on));
  803. confAdd_wasChanged = true;
  804. }
  805. else
  806. {
  807. strlcpy(confAdd.mqtt_payload_pir_on, value, sizeof(confAdd.mqtt_payload_pir_on));
  808. confAdd_wasChanged = true;
  809. }
  810. }
  811. }
  812. else if (strcmp(param, "piroffpld") == 0)
  813. {
  814. if (strcmp(value, confAdd.mqtt_payload_pir_off) != 0)
  815. {
  816. if (strcmp(value, "0") == 0)
  817. {
  818. strlcpy(confAdd.mqtt_payload_pir_off, "", sizeof(confAdd.mqtt_payload_pir_off));
  819. confAdd_wasChanged = true;
  820. }
  821. else
  822. {
  823. strlcpy(confAdd.mqtt_payload_pir_off, value, sizeof(confAdd.mqtt_payload_pir_off));
  824. confAdd_wasChanged = true;
  825. }
  826. }
  827. }
  828. #ifdef ENABLE_FEATURE_NTP_TIME
  829. // confTime
  830. else if (strcmp(param, "tzstr") == 0)
  831. {
  832. if (strcmp(value, confTime.timeZoneStr) != 0)
  833. {
  834. if (strcmp(value, "0") == 0)
  835. {
  836. strlcpy(confTime.timeZoneStr, "", sizeof(confTime.timeZoneStr));
  837. configChangedRestartRequired = true;
  838. confTime_wasChanged = true;
  839. }
  840. else
  841. {
  842. strlcpy(confTime.timeZoneStr, value, sizeof(confTime.timeZoneStr));
  843. configChangedRestartRequired = true;
  844. confTime_wasChanged = true;
  845. }
  846. }
  847. }
  848. else if (strcmp(param, "ntpenable") == 0)
  849. {
  850. bool tmpval;
  851. if (atoi(value) == 1)
  852. tmpval = true;
  853. else
  854. tmpval = false;
  855. if (confTime.ntpEnable != tmpval)
  856. {
  857. confTime.ntpEnable = tmpval;
  858. configChangedRestartRequired = true;
  859. confTime_wasChanged = true;
  860. }
  861. }
  862. else if (strcmp(param, "ntpserver1") == 0)
  863. {
  864. if (strcmp(value, confTime.ntpServer1) != 0)
  865. {
  866. if (strcmp(value, "0") == 0)
  867. {
  868. strlcpy(confTime.ntpServer1, "", sizeof(confTime.ntpServer1));
  869. configChangedRestartRequired = true;
  870. confTime_wasChanged = true;
  871. }
  872. else
  873. {
  874. strlcpy(confTime.ntpServer1, value, sizeof(confTime.ntpServer1));
  875. configChangedRestartRequired = true;
  876. confTime_wasChanged = true;
  877. }
  878. }
  879. }
  880. else if (strcmp(param, "ntpserver2") == 0)
  881. {
  882. if (strcmp(value, confTime.ntpServer2) != 0)
  883. {
  884. if (strcmp(value, "0") == 0)
  885. {
  886. strlcpy(confTime.ntpServer2, "", sizeof(confTime.ntpServer2));
  887. configChangedRestartRequired = true;
  888. confTime_wasChanged = true;
  889. }
  890. else
  891. {
  892. strlcpy(confTime.ntpServer2, value, sizeof(confTime.ntpServer2));
  893. configChangedRestartRequired = true;
  894. confTime_wasChanged = true;
  895. }
  896. }
  897. }
  898. else if (strcmp(param, "ntpsyncint") == 0)
  899. {
  900. unsigned int valueInt = atoi(value) * 60;
  901. if (confTime.ntpSyncInterval != valueInt)
  902. {
  903. confTime.ntpSyncInterval = valueInt;
  904. configChangedRestartRequired = true;
  905. confTime_wasChanged = true;
  906. }
  907. }
  908. #endif // NTP
  909. // confLog
  910. else if (strcmp(param, "loglevser") == 0)
  911. {
  912. int valueInt = atoi(value);
  913. if (confLog.logLevelSerial != valueInt)
  914. {
  915. if (valueInt >= 0 && valueInt <= 5)
  916. {
  917. confLog.logLevelSerial = valueInt;
  918. confLog_wasChanged = true;
  919. }
  920. else {
  921. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  922. sendLog(logBuf, LOGLEVEL_ERROR);
  923. }
  924. }
  925. }
  926. else if (strcmp(param, "loglevweb") == 0)
  927. {
  928. int valueInt = atoi(value);
  929. if (confLog.logLevelWeb != valueInt)
  930. {
  931. if (valueInt >= 0 && valueInt <= 5)
  932. {
  933. confLog.logLevelWeb = valueInt;
  934. confLog_wasChanged = true;
  935. }
  936. else {
  937. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  938. sendLog(logBuf, LOGLEVEL_ERROR);
  939. }
  940. }
  941. }
  942. else if (strcmp(param, "loglevmqtt") == 0)
  943. {
  944. int valueInt = atoi(value);
  945. if (confLog.logLevelMqtt != valueInt)
  946. {
  947. if (valueInt >= 0 && valueInt <= 5)
  948. {
  949. confLog.logLevelMqtt = valueInt;
  950. confLog_wasChanged = true;
  951. }
  952. else {
  953. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  954. sendLog(logBuf, LOGLEVEL_ERROR);
  955. }
  956. }
  957. }
  958. else if (strcmp(param, "logwebrequests") == 0)
  959. {
  960. bool tmpval;
  961. if (atoi(value) == 1)
  962. tmpval = true;
  963. else
  964. tmpval = false;
  965. if (confLog.logWebRequests != tmpval)
  966. {
  967. confLog.logWebRequests = tmpval;
  968. confLog_wasChanged = true;
  969. }
  970. }
  971. // DISPLAY
  972. else if (strcmp(param, "dispint") == 0)
  973. {
  974. int valueInt = atoi(value);
  975. if (valueInt != confDisplay.displayInterval)
  976. {
  977. if (valueInt >= 1 && valueInt <= 60)
  978. {
  979. confDisplay.displayInterval = valueInt;
  980. confDisplay_wasChanged = true;
  981. }
  982. else {
  983. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  984. sendLog(logBuf, LOGLEVEL_ERROR);
  985. }
  986. }
  987. }
  988. else if (strcmp(param, "disptout") == 0)
  989. {
  990. int valueInt = atoi(value);
  991. if (valueInt != confDisplay.displayTimeout)
  992. {
  993. if (valueInt >= 2 && valueInt <= 3600)
  994. {
  995. confDisplay.displayTimeout = valueInt;
  996. confDisplay_wasChanged = true;
  997. }
  998. else {
  999. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1000. sendLog(logBuf, LOGLEVEL_ERROR);
  1001. }
  1002. }
  1003. }
  1004. else if (strcmp(param, "pirendisp") == 0)
  1005. {
  1006. bool tmpval;
  1007. if (atoi(value) == 1)
  1008. tmpval = true;
  1009. else
  1010. tmpval = false;
  1011. if (tmpval != confDisplay.PIRenablesDisplay)
  1012. {
  1013. confDisplay.PIRenablesDisplay = tmpval;
  1014. confDisplay_wasChanged = true;
  1015. }
  1016. }
  1017. // /DISPLAY
  1018. // SENSORS
  1019. else if (strcmp(param, "measint") == 0)
  1020. {
  1021. int valueInt = atoi(value);
  1022. if (valueInt != confSens.measureInterval)
  1023. {
  1024. if (valueInt >= 5 && valueInt <= 60)
  1025. {
  1026. confSens.measureInterval = valueInt;
  1027. confSens_wasChanged = true;
  1028. }
  1029. else {
  1030. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1031. sendLog(logBuf, LOGLEVEL_ERROR);
  1032. }
  1033. }
  1034. }
  1035. #ifdef ENABLE_SENSOR_DHT22
  1036. else if (strcmp(param, "dht_tempcorr") == 0)
  1037. {
  1038. float valueFloat = atof(value);
  1039. if (valueFloat != confSens.DHT_tempCorrVal)
  1040. {
  1041. if (valueFloat >= -5.0 && valueFloat <= 5.0)
  1042. {
  1043. confSens.DHT_tempCorrVal = valueFloat;
  1044. confSens_wasChanged = true;
  1045. }
  1046. }
  1047. }
  1048. else if (strcmp(param, "dht_humcorr") == 0)
  1049. {
  1050. int valueInt = atoi(value);
  1051. if (valueInt != confSens.DHT_humCorrVal)
  1052. {
  1053. if (valueInt >= -40 && valueInt <= 40)
  1054. {
  1055. confSens.DHT_humCorrVal = valueInt;
  1056. confSens_wasChanged = true;
  1057. }
  1058. }
  1059. }
  1060. #endif //ENABLE_SENSOR_DHT22
  1061. #ifdef ENABLE_SENSORS_ONEWIRE
  1062. // assign sensors - console commands
  1063. else if (strcmp(param, "sens_feed") == 0)
  1064. {
  1065. int val = atoi(value);
  1066. if (val >= 0 && val <= ONEWIRE_SENSORS_COUNT)
  1067. {
  1068. oneWireSensor_assign(val, ONEWIRE_SENSOR_INDEX_FEED);
  1069. confSens_wasChanged = true;
  1070. }
  1071. else {
  1072. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1073. sendLog(logBuf, LOGLEVEL_ERROR);
  1074. }
  1075. }
  1076. else if (strcmp(param, "sens_return") == 0)
  1077. {
  1078. int val = atoi(value);
  1079. if (val >= 0 && val <= ONEWIRE_SENSORS_COUNT)
  1080. {
  1081. oneWireSensor_assign(val, ONEWIRE_SENSOR_INDEX_RETURN);
  1082. confSens_wasChanged = true;
  1083. }
  1084. else {
  1085. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1086. sendLog(logBuf, LOGLEVEL_ERROR);
  1087. }
  1088. }
  1089. else if (strcmp(param, "sens_out") == 0)
  1090. {
  1091. int val = atoi(value);
  1092. if (val >= 0 && val <= ONEWIRE_SENSORS_COUNT)
  1093. {
  1094. oneWireSensor_assign(val, ONEWIRE_SENSOR_INDEX_OUT);
  1095. confSens_wasChanged = true;
  1096. }
  1097. else {
  1098. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1099. sendLog(logBuf, LOGLEVEL_ERROR);
  1100. }
  1101. }
  1102. // assign sensors - from web interface
  1103. else if (strcmp(param, "assignsens_0") == 0)
  1104. { // value is index of confSens.oneWireDevAddress/oneWireSensor_assignedDevToIndex
  1105. int val = atoi(value);
  1106. if (val >= 0 && val <= ONEWIRE_SENSORS_COUNT)
  1107. {
  1108. oneWireSensor_assign(0, val);
  1109. confSens_wasChanged = true;
  1110. }
  1111. else {
  1112. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1113. sendLog(logBuf, LOGLEVEL_ERROR);
  1114. }
  1115. }
  1116. // assign sensors - from web interface
  1117. else if (strcmp(param, "assignsens_1") == 0)
  1118. { // value is index of confSens.oneWireDevAddress/oneWireSensor_assignedDevToIndex
  1119. int val = atoi(value);
  1120. if (val >= 0 && val <= ONEWIRE_SENSORS_COUNT)
  1121. {
  1122. oneWireSensor_assign(1, val);
  1123. confSens_wasChanged = true;
  1124. }
  1125. else {
  1126. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1127. sendLog(logBuf, LOGLEVEL_ERROR);
  1128. }
  1129. }
  1130. // assign sensors - from web interface
  1131. else if (strcmp(param, "assignsens_2") == 0)
  1132. { // value is index of confSens.oneWireDevAddress/oneWireSensor_assignedDevToIndex
  1133. int val = atoi(value);
  1134. if (val >= 0 && val <= ONEWIRE_SENSORS_COUNT)
  1135. {
  1136. oneWireSensor_assign(2, val);
  1137. confSens_wasChanged = true;
  1138. }
  1139. else {
  1140. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1141. sendLog(logBuf, LOGLEVEL_ERROR);
  1142. }
  1143. }
  1144. #endif // ENABLE_SENSORS_ONEWIRE
  1145. // /SENSORS - confSens
  1146. // THERMOSTAT - confTherm
  1147. #ifdef FIRMWARE_VARIANT_THERMOSTAT
  1148. else if (strcmp(param, "autosavetemp") == 0)
  1149. {
  1150. bool tmpval;
  1151. if (atoi(value) == 1)
  1152. tmpval = true;
  1153. else
  1154. tmpval = false;
  1155. if (confTherm.autoSaveSetTemp != tmpval)
  1156. {
  1157. confTherm.autoSaveSetTemp = tmpval;
  1158. confTherm_wasChanged = true;
  1159. }
  1160. }
  1161. else if (strcmp(param, "autosavemode") == 0)
  1162. {
  1163. bool tmpval;
  1164. if (atoi(value) == 1)
  1165. tmpval = true;
  1166. else
  1167. tmpval = false;
  1168. if (confTherm.autoSaveHeatingMode != tmpval)
  1169. {
  1170. confTherm.autoSaveHeatingMode = tmpval;
  1171. confTherm_wasChanged = true;
  1172. }
  1173. }
  1174. else if (strcmp(param, "savetomqttret") == 0)
  1175. {
  1176. bool tmpval;
  1177. if (atoi(value) == 1)
  1178. tmpval = true;
  1179. else
  1180. tmpval = false;
  1181. if (confTherm.saveToMqttRetained != tmpval)
  1182. {
  1183. confTherm.saveToMqttRetained = tmpval;
  1184. confTherm_wasChanged = true;
  1185. if (tmpval == false)
  1186. {
  1187. publishDeleteRetainedSavedStates();
  1188. }
  1189. }
  1190. }
  1191. else if (strcmp(param, "tempmin") == 0)
  1192. {
  1193. float valueFloat = round(atof(value) * 2.0) / 2.0;
  1194. if (valueFloat != confTherm.setTempMin)
  1195. {
  1196. if (valueFloat >= 10 && valueFloat <= 16)
  1197. {
  1198. confTherm.setTempMin = valueFloat;
  1199. confTherm_wasChanged = true;
  1200. }
  1201. else {
  1202. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1203. sendLog(logBuf, LOGLEVEL_ERROR);
  1204. }
  1205. }
  1206. }
  1207. else if (strcmp(param, "tempmax") == 0)
  1208. {
  1209. float valueFloat = round(atof(value) * 2.0) / 2.0;
  1210. if (valueFloat != confTherm.setTempMax)
  1211. {
  1212. if (valueFloat >= 18 && valueFloat <= 30)
  1213. {
  1214. confTherm.setTempMax = valueFloat;
  1215. confTherm_wasChanged = true;
  1216. }
  1217. else {
  1218. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1219. sendLog(logBuf, LOGLEVEL_ERROR);
  1220. }
  1221. }
  1222. }
  1223. else if (strcmp(param, "pirendispps0") == 0)
  1224. {
  1225. bool tmpval;
  1226. if (atoi(value) == 1)
  1227. tmpval = true;
  1228. else
  1229. tmpval = false;
  1230. if (tmpval != confTherm.PIRenablesDisplay_preset0only)
  1231. {
  1232. confTherm.PIRenablesDisplay_preset0only = tmpval;
  1233. confTherm_wasChanged = true;
  1234. }
  1235. }
  1236. else if (strcmp(param, "togthdisp") == 0)
  1237. {
  1238. bool tmpval;
  1239. if (atoi(value) == 1)
  1240. tmpval = true;
  1241. else
  1242. tmpval = false;
  1243. if (tmpval != confTherm.togglingTempHumAIDisplay)
  1244. {
  1245. confTherm.togglingTempHumAIDisplay = tmpval;
  1246. confTherm_wasChanged = true;
  1247. }
  1248. }
  1249. // confThermAdv
  1250. else if (strcmp(param, "minofftime") == 0)
  1251. {
  1252. int valueInt = atoi(value);
  1253. if (valueInt != confTherm.heatingMinOffTime)
  1254. {
  1255. confTherm.heatingMinOffTime = valueInt;
  1256. confTherm_wasChanged = true;
  1257. }
  1258. }
  1259. else if (strcmp(param, "tempdec") == 0)
  1260. {
  1261. float valueFloat = atof(value);
  1262. if (valueFloat != confTherm.setTempDecreaseVal)
  1263. {
  1264. if (valueFloat >= 0.0 && valueFloat <= 1.5)
  1265. {
  1266. confTherm.setTempDecreaseVal = valueFloat;
  1267. confTherm_wasChanged = true;
  1268. }
  1269. else {
  1270. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1271. sendLog(logBuf, LOGLEVEL_ERROR);
  1272. }
  1273. }
  1274. }
  1275. else if (strcmp(param, "hyst") == 0)
  1276. {
  1277. float valueFloat = atof(value);
  1278. if (valueFloat != confTherm.hysteresis)
  1279. {
  1280. if (valueFloat >= 0.1 && valueFloat <= 4.0)
  1281. {
  1282. confTherm.hysteresis = valueFloat;
  1283. confTherm_wasChanged = true;
  1284. }
  1285. else {
  1286. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1287. sendLog(logBuf, LOGLEVEL_ERROR);
  1288. }
  1289. }
  1290. }
  1291. else if (strcmp(param, "offmsg") == 0)
  1292. {
  1293. if (strcmp(value, confTherm.offMessage) != 0)
  1294. {
  1295. if (strcmp(value, "0") == 0)
  1296. {
  1297. strlcpy(confTherm.offMessage, "", sizeof(confTherm.offMessage));
  1298. confTherm_wasChanged = true;
  1299. }
  1300. else
  1301. {
  1302. strlcpy(confTherm.offMessage, value, sizeof(confTherm.offMessage));
  1303. confTherm_wasChanged = true;
  1304. }
  1305. }
  1306. }
  1307. else if (strcmp(param, "modename0") == 0)
  1308. {
  1309. if (strcmp(value, confTherm.modeName0) != 0)
  1310. {
  1311. if (strcmp(value, "0") == 0)
  1312. {
  1313. strlcpy(confTherm.modeName0, "", sizeof(confTherm.modeName0));
  1314. confTherm_wasChanged = true;
  1315. }
  1316. else
  1317. {
  1318. strlcpy(confTherm.modeName0, value, sizeof(confTherm.modeName0));
  1319. confTherm_wasChanged = true;
  1320. }
  1321. }
  1322. }
  1323. else if (strcmp(param, "modename1") == 0)
  1324. {
  1325. if (strcmp(value, confTherm.modeName1) != 0)
  1326. {
  1327. if (strcmp(value, "0") == 0)
  1328. {
  1329. strlcpy(confTherm.modeName1, "", sizeof(confTherm.modeName1));
  1330. confTherm_wasChanged = true;
  1331. }
  1332. else
  1333. {
  1334. strlcpy(confTherm.modeName1, value, sizeof(confTherm.modeName1));
  1335. confTherm_wasChanged = true;
  1336. }
  1337. }
  1338. }
  1339. else if (strcmp(param, "psetname0") == 0)
  1340. {
  1341. if (strcmp(value, confTherm.psetName0) != 0)
  1342. {
  1343. if (strcmp(value, "0") == 0)
  1344. {
  1345. strlcpy(confTherm.psetName0, "", sizeof(confTherm.psetName0));
  1346. confTherm_wasChanged = true;
  1347. }
  1348. else
  1349. {
  1350. strlcpy(confTherm.psetName0, value, sizeof(confTherm.psetName0));
  1351. confTherm_wasChanged = true;
  1352. }
  1353. }
  1354. }
  1355. else if (strcmp(param, "psetname1") == 0)
  1356. {
  1357. if (strcmp(value, confTherm.psetName1) != 0)
  1358. {
  1359. if (strcmp(value, "0") == 0)
  1360. {
  1361. strlcpy(confTherm.psetName1, "", sizeof(confTherm.psetName1));
  1362. confTherm_wasChanged = true;
  1363. }
  1364. else
  1365. {
  1366. strlcpy(confTherm.psetName1, value, sizeof(confTherm.psetName1));
  1367. confTherm_wasChanged = true;
  1368. }
  1369. }
  1370. }
  1371. else if (strcmp(param, "psetname2") == 0)
  1372. {
  1373. if (strcmp(value, confTherm.psetName2) != 0)
  1374. {
  1375. if (strcmp(value, "0") == 0)
  1376. {
  1377. strlcpy(confTherm.psetName2, "", sizeof(confTherm.psetName2));
  1378. confTherm_wasChanged = true;
  1379. }
  1380. else
  1381. {
  1382. strlcpy(confTherm.psetName2, value, sizeof(confTherm.psetName2));
  1383. confTherm_wasChanged = true;
  1384. }
  1385. }
  1386. }
  1387. else if (strcmp(param, "itemplab") == 0)
  1388. {
  1389. if (strcmp(value, confTherm.iTempLabel) != 0)
  1390. {
  1391. if (strcmp(value, "0") == 0)
  1392. {
  1393. strlcpy(confTherm.iTempLabel, "I", sizeof(confTherm.iTempLabel));
  1394. confTherm_wasChanged = true;
  1395. }
  1396. else
  1397. {
  1398. strlcpy(confTherm.iTempLabel, value, sizeof(confTherm.iTempLabel));
  1399. confTherm_wasChanged = true;
  1400. }
  1401. }
  1402. }
  1403. else if (strcmp(param, "otemplab") == 0)
  1404. {
  1405. if (strcmp(value, confTherm.oTempLabel) != 0)
  1406. {
  1407. if (strcmp(value, "0") == 0)
  1408. {
  1409. strlcpy(confTherm.oTempLabel, "O", sizeof(confTherm.oTempLabel));
  1410. confTherm_wasChanged = true;
  1411. }
  1412. else
  1413. {
  1414. strlcpy(confTherm.oTempLabel, value, sizeof(confTherm.oTempLabel));
  1415. confTherm_wasChanged = true;
  1416. }
  1417. }
  1418. }
  1419. else if (strcmp(param, "pausetout") == 0)
  1420. {
  1421. int valueInt = atoi(value);
  1422. if (valueInt != confTherm.pauseTout)
  1423. {
  1424. if (valueInt >= 0 && valueInt <= 3600)
  1425. {
  1426. confTherm.pauseTout = valueInt;
  1427. confTherm_wasChanged = true;
  1428. }
  1429. else {
  1430. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1431. sendLog(logBuf, LOGLEVEL_ERROR);
  1432. }
  1433. }
  1434. }
  1435. // Thermostat values
  1436. else if (strcmp(param, "temp") == 0)
  1437. {
  1438. float valueFloat = round(atof(value) * 2.0) / 2.0;
  1439. thermostat_setTempTo(valueFloat);
  1440. }
  1441. else if (strcmp(param, "templow") == 0)
  1442. {
  1443. float valueFloat = round(atof(value) * 2.0) / 2.0;
  1444. thermostat_setTempLowTo(valueFloat);
  1445. }
  1446. else if (strcmp(param, "templow2") == 0)
  1447. {
  1448. float valueFloat = round(atof(value) * 2.0) / 2.0;
  1449. thermostat_setTempLow2To(valueFloat);
  1450. }
  1451. else if (strcmp(param, "mode") == 0)
  1452. {
  1453. int val = atoi(value);
  1454. if (val >= 0 && val <= 1)
  1455. {
  1456. thermostat_setHeatingmodeTo(val);
  1457. }
  1458. else {
  1459. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1460. sendLog(logBuf, LOGLEVEL_ERROR);
  1461. }
  1462. }
  1463. else if (strcmp(param, "preset") == 0)
  1464. {
  1465. int val = atoi(value);
  1466. if (val >= 0 && val <= 2)
  1467. {
  1468. thermostat_setPresetTo(val);
  1469. }
  1470. else {
  1471. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1472. sendLog(logBuf, LOGLEVEL_ERROR);
  1473. }
  1474. }
  1475. #endif // FIRMWARE_VARIANT_THERMOSTAT
  1476. // /THERMOSTAT
  1477. // HEAT CONTROL - confHeatc
  1478. #ifdef FIRMWARE_VARIANT_HEATCONTROL
  1479. else if (strcmp(param, "heatcm20") == 0)
  1480. {
  1481. int val = atoi(value);
  1482. if (val >= 0 && val <= 90)
  1483. {
  1484. confHeatc.heatCurve[0] = val;
  1485. confHeatc_wasChanged = true;
  1486. }
  1487. else {
  1488. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1489. sendLog(logBuf, LOGLEVEL_ERROR);
  1490. }
  1491. }
  1492. else if (strcmp(param, "heatcm15") == 0)
  1493. {
  1494. int val = atoi(value);
  1495. if (val >= 0 && val <= 90)
  1496. {
  1497. confHeatc.heatCurve[1] = val;
  1498. confHeatc_wasChanged = true;
  1499. }
  1500. else {
  1501. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1502. sendLog(logBuf, LOGLEVEL_ERROR);
  1503. }
  1504. }
  1505. else if (strcmp(param, "heatcm10") == 0)
  1506. {
  1507. int val = atoi(value);
  1508. if (val >= 0 && val <= 90)
  1509. {
  1510. confHeatc.heatCurve[2] = val;
  1511. confHeatc_wasChanged = true;
  1512. }
  1513. else {
  1514. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1515. sendLog(logBuf, LOGLEVEL_ERROR);
  1516. }
  1517. }
  1518. else if (strcmp(param, "heatcm5") == 0)
  1519. {
  1520. int val = atoi(value);
  1521. if (val >= 0 && val <= 90)
  1522. {
  1523. confHeatc.heatCurve[3] = val;
  1524. confHeatc_wasChanged = true;
  1525. }
  1526. else {
  1527. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1528. sendLog(logBuf, LOGLEVEL_ERROR);
  1529. }
  1530. }
  1531. else if (strcmp(param, "heatc0") == 0)
  1532. {
  1533. int val = atoi(value);
  1534. if (val >= 0 && val <= 90)
  1535. {
  1536. confHeatc.heatCurve[4] = val;
  1537. confHeatc_wasChanged = true;
  1538. }
  1539. else {
  1540. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1541. sendLog(logBuf, LOGLEVEL_ERROR);
  1542. }
  1543. }
  1544. else if (strcmp(param, "heatc5") == 0)
  1545. {
  1546. int val = atoi(value);
  1547. if (val >= 0 && val <= 90)
  1548. {
  1549. confHeatc.heatCurve[5] = val;
  1550. confHeatc_wasChanged = true;
  1551. }
  1552. else {
  1553. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1554. sendLog(logBuf, LOGLEVEL_ERROR);
  1555. }
  1556. }
  1557. else if (strcmp(param, "heatc10") == 0)
  1558. {
  1559. int val = atoi(value);
  1560. if (val >= 0 && val <= 90)
  1561. {
  1562. confHeatc.heatCurve[6] = val;
  1563. confHeatc_wasChanged = true;
  1564. }
  1565. else {
  1566. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1567. sendLog(logBuf, LOGLEVEL_ERROR);
  1568. }
  1569. }
  1570. else if (strcmp(param, "heatc15") == 0)
  1571. {
  1572. int val = atoi(value);
  1573. if (val >= 0 && val <= 90)
  1574. {
  1575. confHeatc.heatCurve[7] = val;
  1576. confHeatc_wasChanged = true;
  1577. }
  1578. else {
  1579. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1580. sendLog(logBuf, LOGLEVEL_ERROR);
  1581. }
  1582. }
  1583. else if (strcmp(param, "heatc20") == 0)
  1584. {
  1585. int val = atoi(value);
  1586. if (val >= 0 && val <= 90)
  1587. {
  1588. confHeatc.heatCurve[8] = val;
  1589. confHeatc_wasChanged = true;
  1590. }
  1591. else {
  1592. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1593. sendLog(logBuf, LOGLEVEL_ERROR);
  1594. }
  1595. }
  1596. else if (strcmp(param, "heatlm20") == 0)
  1597. {
  1598. int val = atoi(value);
  1599. if (val >= 0 && val <= 90)
  1600. {
  1601. confHeatc.heatLocktime[0] = val;
  1602. confHeatc_wasChanged = true;
  1603. }
  1604. else {
  1605. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1606. sendLog(logBuf, LOGLEVEL_ERROR);
  1607. }
  1608. }
  1609. else if (strcmp(param, "heatlm15") == 0)
  1610. {
  1611. int val = atoi(value);
  1612. if (val >= 0 && val <= 90)
  1613. {
  1614. confHeatc.heatLocktime[1] = val;
  1615. confHeatc_wasChanged = true;
  1616. }
  1617. else {
  1618. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1619. sendLog(logBuf, LOGLEVEL_ERROR);
  1620. }
  1621. }
  1622. else if (strcmp(param, "heatlm10") == 0)
  1623. {
  1624. int val = atoi(value);
  1625. if (val >= 0 && val <= 90)
  1626. {
  1627. confHeatc.heatLocktime[2] = val;
  1628. confHeatc_wasChanged = true;
  1629. }
  1630. else {
  1631. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1632. sendLog(logBuf, LOGLEVEL_ERROR);
  1633. }
  1634. }
  1635. else if (strcmp(param, "heatlm5") == 0)
  1636. {
  1637. int val = atoi(value);
  1638. if (val >= 0 && val <= 90)
  1639. {
  1640. confHeatc.heatLocktime[3] = val;
  1641. confHeatc_wasChanged = true;
  1642. }
  1643. else {
  1644. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1645. sendLog(logBuf, LOGLEVEL_ERROR);
  1646. }
  1647. }
  1648. else if (strcmp(param, "heatl0") == 0)
  1649. {
  1650. int val = atoi(value);
  1651. if (val >= 0 && val <= 90)
  1652. {
  1653. confHeatc.heatLocktime[4] = val;
  1654. confHeatc_wasChanged = true;
  1655. }
  1656. else {
  1657. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1658. sendLog(logBuf, LOGLEVEL_ERROR);
  1659. }
  1660. }
  1661. else if (strcmp(param, "heatl5") == 0)
  1662. {
  1663. int val = atoi(value);
  1664. if (val >= 0 && val <= 90)
  1665. {
  1666. confHeatc.heatLocktime[5] = val;
  1667. confHeatc_wasChanged = true;
  1668. }
  1669. else {
  1670. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1671. sendLog(logBuf, LOGLEVEL_ERROR);
  1672. }
  1673. }
  1674. else if (strcmp(param, "heatl10") == 0)
  1675. {
  1676. int val = atoi(value);
  1677. if (val >= 0 && val <= 90)
  1678. {
  1679. confHeatc.heatLocktime[6] = val;
  1680. confHeatc_wasChanged = true;
  1681. }
  1682. else {
  1683. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1684. sendLog(logBuf, LOGLEVEL_ERROR);
  1685. }
  1686. }
  1687. else if (strcmp(param, "heatl15") == 0)
  1688. {
  1689. int val = atoi(value);
  1690. if (val >= 0 && val <= 90)
  1691. {
  1692. confHeatc.heatLocktime[7] = val;
  1693. confHeatc_wasChanged = true;
  1694. }
  1695. else {
  1696. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1697. sendLog(logBuf, LOGLEVEL_ERROR);
  1698. }
  1699. }
  1700. else if (strcmp(param, "heatl20") == 0)
  1701. {
  1702. int val = atoi(value);
  1703. if (val >= 0 && val <= 90)
  1704. {
  1705. confHeatc.heatLocktime[8] = val;
  1706. confHeatc_wasChanged = true;
  1707. }
  1708. else {
  1709. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1710. sendLog(logBuf, LOGLEVEL_ERROR);
  1711. }
  1712. }
  1713. else if (strcmp(param, "heatusehc") == 0)
  1714. {
  1715. int val = atoi(value);
  1716. if (val >= 0 && val <= 1)
  1717. {
  1718. if (val == 1) confHeatc.useHeatCurve = true;
  1719. else confHeatc.useHeatCurve = false;
  1720. confHeatc_wasChanged = true;
  1721. }
  1722. else {
  1723. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1724. sendLog(logBuf, LOGLEVEL_ERROR);
  1725. }
  1726. }
  1727. else if (strcmp(param, "heatforcehc") == 0)
  1728. {
  1729. int val = atoi(value);
  1730. if (val >= 0 && val <= 1)
  1731. {
  1732. if (val == 1) confHeatc.forceHeatCurve = true;
  1733. else confHeatc.forceHeatCurve = false;
  1734. confHeatc_wasChanged = true;
  1735. }
  1736. else {
  1737. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1738. sendLog(logBuf, LOGLEVEL_ERROR);
  1739. }
  1740. }
  1741. else if (strcmp(param, "heatcvhy1") == 0)
  1742. {
  1743. int val = atoi(value);
  1744. if (val >= 0 && val <= 10)
  1745. {
  1746. confHeatc.hystereseOn = val;
  1747. confHeatc_wasChanged = true;
  1748. }
  1749. else {
  1750. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1751. sendLog(logBuf, LOGLEVEL_ERROR);
  1752. }
  1753. }
  1754. else if (strcmp(param, "heatcvhy0") == 0)
  1755. {
  1756. int val = atoi(value);
  1757. if (val >= 0 && val <= 16)
  1758. {
  1759. confHeatc.hystereseOff = val;
  1760. confHeatc_wasChanged = true;
  1761. }
  1762. else {
  1763. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1764. sendLog(logBuf, LOGLEVEL_ERROR);
  1765. }
  1766. }
  1767. else if (strcmp(param, "pumpnl") == 0)
  1768. {
  1769. int val = atoi(value);
  1770. if (val >= 0 && val <= 90)
  1771. {
  1772. confHeatc.pumpBacklash = val;
  1773. confHeatc_wasChanged = true;
  1774. }
  1775. else {
  1776. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1777. sendLog(logBuf, LOGLEVEL_ERROR);
  1778. }
  1779. }
  1780. else if (strcmp(param, "heattempfeedlimit") == 0)
  1781. {
  1782. int val = atoi(value);
  1783. if (val >= 50 && val <= 90)
  1784. {
  1785. confHeatc.tempFeedLimit = val;
  1786. confHeatc_wasChanged = true;
  1787. }
  1788. else {
  1789. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1790. sendLog(logBuf, LOGLEVEL_ERROR);
  1791. }
  1792. }
  1793. else if (strcmp(param, "heatouttdis") == 0)
  1794. {
  1795. int val = atoi(value);
  1796. if (val >= 16 && val <= 26)
  1797. {
  1798. confHeatc.disableAboveTOut = val;
  1799. confHeatc_wasChanged = true;
  1800. }
  1801. else {
  1802. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1803. sendLog(logBuf, LOGLEVEL_ERROR);
  1804. }
  1805. }
  1806. else if (strcmp(param, "heatforcehcalsoon") == 0)
  1807. {
  1808. int val = atoi(value);
  1809. if (val >= 0 && val <= 1)
  1810. {
  1811. if (val == 1) confHeatc.forceHeatCurveAlsoForSwitchOn = true;
  1812. else confHeatc.forceHeatCurveAlsoForSwitchOn = false;
  1813. confHeatc_wasChanged = true;
  1814. }
  1815. else {
  1816. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1817. sendLog(logBuf, LOGLEVEL_ERROR);
  1818. }
  1819. }
  1820. else if (strcmp(param, "pumpforceint") == 0)
  1821. {
  1822. int val = atoi(value);
  1823. if (val >= 0 && val <= 255)
  1824. {
  1825. confHeatc.pump_forceRunInterval = val;
  1826. confHeatc_wasChanged = true;
  1827. }
  1828. else {
  1829. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1830. sendLog(logBuf, LOGLEVEL_ERROR);
  1831. }
  1832. }
  1833. else if (strcmp(param, "pumpforcetime") == 0)
  1834. {
  1835. int val = atoi(value);
  1836. if (val >= 1 && val <= 15)
  1837. {
  1838. confHeatc.pumpTime_forceRun = val;
  1839. confHeatc_wasChanged = true;
  1840. }
  1841. else {
  1842. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1843. sendLog(logBuf, LOGLEVEL_ERROR);
  1844. }
  1845. }
  1846. else if (strcmp(param, "pumpforcebegin") == 0)
  1847. {
  1848. int val = atoi(value);
  1849. if (val >= 0 && val <= 23)
  1850. {
  1851. confHeatc.pump_forceRunTimeBegin = val;
  1852. confHeatc_wasChanged = true;
  1853. }
  1854. else {
  1855. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1856. sendLog(logBuf, LOGLEVEL_ERROR);
  1857. }
  1858. }
  1859. else if (strcmp(param, "pumpforceend") == 0)
  1860. {
  1861. int val = atoi(value);
  1862. if (val >= 0 && val <= 24)
  1863. {
  1864. confHeatc.pump_forceRunTimeEnd = val;
  1865. confHeatc_wasChanged = true;
  1866. }
  1867. else {
  1868. sprintf_P(logBuf, PGMStr_conf_invalidValue, param);
  1869. sendLog(logBuf, LOGLEVEL_ERROR);
  1870. }
  1871. }
  1872. #endif //FIRMWARE_VARIANT_HEATCONTROL
  1873. else {
  1874. snprintf_P(logBuf, LOG_BUFFER_SIZE, PGMStr_conf_setConf_unknownParamName, param);
  1875. sendLog(logBuf);
  1876. }
  1877. //getConfig(param);
  1878. if (confCheckUnsaved())
  1879. {
  1880. lastConfigChange = millis();
  1881. lastConfigChangeNoteAlreadyDone = false;
  1882. }
  1883. } // setConfig()