config.ino 7.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232
  1. //const char* deviceName = DEVICE_NAME;
  2. //const char* mqtt_server = MQTT_SERVER;
  3. //const int mqtt_port = MQTT_PORT;
  4. //const char* mqtt_topic_in = MQTT_TOPIC_IN;
  5. //const char* mqtt_topic_out = MQTT_TOPIC_OUT;
  6. //const char* mqtt_topic_out_hold[3] = { BUTTON1_HOLD_TOPIC_OUT, BUTTON2_HOLD_TOPIC_OUT, BUTTON3_HOLD_TOPIC_OUT };
  7. //const char* mqtt_payload_out_hold[3] = { BUTTON1_HOLD_PAYLOAD_OUT, BUTTON2_HOLD_PAYLOAD_OUT, BUTTON3_HOLD_PAYLOAD_OUT };
  8. //const int domoticzIdx[3] = {DOMOTICZ_IDX_1, DOMOTICZ_IDX_2, DOMOTICZ_IDX_3}; // initially set to 0, must be defined in config
  9. bool loadConfig() {
  10. File configFile = SPIFFS.open("/config.json", "r");
  11. if (!configFile) {
  12. Serial.println("Failed to open config file");
  13. return false;
  14. }
  15. size_t size = configFile.size();
  16. if (size > 1024) {
  17. Serial.println("Config file size is too large");
  18. return false;
  19. }
  20. // Allocate a buffer to store contents of the file.
  21. std::unique_ptr<char[]> buf(new char[size]);
  22. // We don't use String here because ArduinoJson library requires the input
  23. // buffer to be mutable. If you don't use ArduinoJson, you may as well
  24. // use configFile.readString instead.
  25. configFile.readBytes(buf.get(), size);
  26. StaticJsonBuffer<1000> jsonBuffer;
  27. JsonObject& json = jsonBuffer.parseObject(buf.get());
  28. if (!json.success()) {
  29. Serial.println("Failed to parse config file");
  30. return false;
  31. }
  32. strcpy(deviceName, json["devName"]);
  33. strcpy(mqtt_server, json["mqttHost"]);
  34. mqtt_port = atoi(json["mqttPort"]);
  35. strcpy(mqtt_topic_in, json["inTop"]);
  36. strcpy(mqtt_topic_out, json["outTop"]);
  37. strcpy(mqtt_topic_out_hold_1, json["outTop_hold1"]);
  38. strcpy(mqtt_topic_out_hold_2, json["outTop_hold2"]);
  39. strcpy(mqtt_topic_out_hold_3, json["outTop_hold3"]);
  40. strcpy(mqtt_payload_out_hold_1, json["outPld_hold1"]);
  41. strcpy(mqtt_payload_out_hold_2, json["outPld_hold2"]);
  42. strcpy(mqtt_payload_out_hold_3, json["outPld_hold3"]);
  43. domoticzIdx[0] = atoi(json["domoIdx1"]);
  44. domoticzIdx[1] = atoi(json["domoIdx2"]);
  45. domoticzIdx[2] = atoi(json["domoIdx3"]);
  46. strcpy(domoticz_out_topic, json["domoOutTop"]);
  47. relais_impulse[0] = atoi(json["impuls1"]);
  48. relais_impulse[1] = atoi(json["impuls2"]);
  49. relais_impulse[2] = atoi(json["impuls3"]);
  50. // deviceName = json["devName"];
  51. // mqtt_server = json["mqttHost"];
  52. // mqtt_port = atoi(json["mqttPort"]);
  53. // mqtt_topic_in = json["inTop"];
  54. // mqtt_topic_out = json["outTop"];
  55. // mqtt_topic_out_hold[0] = json["outTop_hold1"];
  56. // mqtt_topic_out_hold[1] = json["outTop_hold2"];
  57. // mqtt_topic_out_hold[2] = json["outTop_hold3"];
  58. // mqtt_payload_out_hold[0] = json["outPld_hold1"];
  59. // mqtt_payload_out_hold[1] = json["outPld_hold2"];
  60. // mqtt_payload_out_hold[2] = json["outPld_hold3"];
  61. // domoticzIdx[0] = atoi(json["domoIdx1"]);
  62. // domoticzIdx[1] = atoi(json["domoIdx2"]);
  63. // domoticzIdx[2] = atoi(json["domoIdx3"]);
  64. // domoticz_out_topic = json["domoOutTop"];
  65. // relais_impulse[0] = json["impuls1"];
  66. // relais_impulse[1] = json["impuls2"];
  67. // relais_impulse[2] = json["impuls3"];
  68. Serial.println("Loaded config values:");
  69. getConfig();
  70. return true;
  71. }
  72. void getConfig() {
  73. Serial.print("devName: ");
  74. Serial.println(deviceName);
  75. Serial.print("mqttHost: ");
  76. Serial.println(mqtt_server);
  77. Serial.print("mqttPort: ");
  78. Serial.println(mqtt_port);
  79. Serial.print("inTop: ");
  80. Serial.println(mqtt_topic_in);
  81. Serial.print("outTop: ");
  82. Serial.println(mqtt_topic_out);
  83. Serial.print("outTop_hold1: ");
  84. Serial.println(mqtt_topic_out_hold_1);
  85. Serial.print("outTop_hold2: ");
  86. Serial.println(mqtt_topic_out_hold_2);
  87. Serial.print("outTop_hold3: ");
  88. Serial.println(mqtt_topic_out_hold_3);
  89. Serial.print("outPld_hold1: ");
  90. Serial.println(mqtt_payload_out_hold_1);
  91. Serial.print("outPld_hold2: ");
  92. Serial.println(mqtt_payload_out_hold_2);
  93. Serial.print("outPld_hold3: ");
  94. Serial.println(mqtt_payload_out_hold_3);
  95. Serial.print("domoIdx1: ");
  96. Serial.println(domoticzIdx[0]);
  97. Serial.print("domoIdx2: ");
  98. Serial.println(domoticzIdx[1]);
  99. Serial.print("domoIdx3: ");
  100. Serial.println(domoticzIdx[2]);
  101. Serial.print("domoOutTop: ");
  102. Serial.println(domoticz_out_topic);
  103. Serial.print("impuls1: ");
  104. Serial.println(relais_impulse[0]);
  105. Serial.print("impuls2: ");
  106. Serial.println(relais_impulse[1]);
  107. Serial.print("impuls3: ");
  108. Serial.println(relais_impulse[2]);
  109. }
  110. bool setConfig(char* param, char* value) {
  111. // char buf[80];
  112. // int len = strlen(value);
  113. // for (int i = 0; i < len; i++) {
  114. // buf[i] = value[i];
  115. // }
  116. // buf[len] = '\0';
  117. Serial.print("param: ");
  118. Serial.print(param);
  119. Serial.print(", value: ");
  120. Serial.println(value);
  121. if ( strcmp(param, "devName") == 0 ) {
  122. strcpy(deviceName, value);
  123. }
  124. else if ( strcmp(param, "mqttHost") == 0 ) {
  125. strcpy(mqtt_server, value);
  126. }
  127. else if ( strcmp(param, "mqttPort") == 0 ) {
  128. mqtt_port = atoi(value);
  129. }
  130. else if ( strcmp(param, "inTop") == 0 ) {
  131. strcpy(mqtt_topic_in, value);
  132. }
  133. else if ( strcmp(param, "outTop") == 0 ) {
  134. strcpy(mqtt_topic_out, value);
  135. }
  136. else if ( strcmp(param, "outTop_hold1") == 0 ) {
  137. strcpy(mqtt_topic_out_hold_1, value);
  138. }
  139. else if ( strcmp(param, "outTop_hold2") == 0 ) {
  140. strcpy(mqtt_topic_out_hold_2, value);
  141. }
  142. else if ( strcmp(param, "outTop_hold3") == 0 ) {
  143. strcpy(mqtt_topic_out_hold_3, value);
  144. }
  145. else if ( strcmp(param, "outPld_hold1") == 0 ) {
  146. Serial.print("set outPld_hold1");
  147. strcpy(mqtt_payload_out_hold_1, value);
  148. }
  149. else if ( strcmp(param, "outPld_hold2") == 0 ) {
  150. Serial.print("set outPld_hold2");
  151. strcpy(mqtt_payload_out_hold_2, value);
  152. }
  153. else if ( strcmp(param, "outPld_hold3") == 0 ) {
  154. Serial.print("set outPld_hold3");
  155. strcpy(mqtt_payload_out_hold_3, value);
  156. }
  157. else if ( strcmp(param, "domoIdx1") == 0 ) {
  158. domoticzIdx[0] = atoi(value);
  159. }
  160. else if ( strcmp(param, "domoIdx2") == 0 ) {
  161. domoticzIdx[1] = atoi(value);
  162. }
  163. else if ( strcmp(param, "domoIdx3") == 0 ) {
  164. domoticzIdx[2] = atoi(value);
  165. }
  166. else if ( strcmp(param, "domoOutTop") == 0 ) {
  167. strcpy(domoticz_out_topic, value);
  168. }
  169. else if ( strcmp(param, "impuls1") == 0 ) {
  170. relais_impulse[0] = atoi(value);
  171. }
  172. else if ( strcmp(param, "impuls2") == 0 ) {
  173. relais_impulse[1] = atoi(value);
  174. }
  175. else if ( strcmp(param, "impuls3") == 0 ) {
  176. relais_impulse[2] = atoi(value);
  177. }
  178. }
  179. bool saveConfig() {
  180. StaticJsonBuffer<1000> jsonBuffer;
  181. JsonObject& json = jsonBuffer.createObject();
  182. json["devName"] = deviceName;
  183. json["mqttHost"] = mqtt_server;
  184. json["mqttPort"] = mqtt_port;
  185. json["inTop"] = mqtt_topic_in;
  186. json["outTop"] = mqtt_topic_out;
  187. json["outTop_hold1"] = mqtt_topic_out_hold_1;
  188. json["outTop_hold2"] = mqtt_topic_out_hold_2;
  189. json["outTop_hold3"] = mqtt_topic_out_hold_3;
  190. json["outPld_hold1"] = mqtt_payload_out_hold_1;
  191. json["outPld_hold2"] = mqtt_payload_out_hold_2;
  192. json["outPld_hold3"] = mqtt_payload_out_hold_3;
  193. json["domoIdx1"] = domoticzIdx[0];
  194. json["domoIdx2"] = domoticzIdx[1];
  195. json["domoIdx3"] = domoticzIdx[2];
  196. json["domoOutTop"] = domoticz_out_topic;
  197. json["impuls1"] = relais_impulse[0];
  198. json["impuls2"] = relais_impulse[1];
  199. json["impuls3"] = relais_impulse[2];
  200. File configFile = SPIFFS.open("/config.json", "w");
  201. if (!configFile) {
  202. Serial.println("Failed to open config file for writing");
  203. return false;
  204. }
  205. json.printTo(configFile);
  206. return true;
  207. }