discovery.ino 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. //Inject zeroconf attr into the MDNS respond (For scanning by ArozOS)
  2. void MDNSDynamicServiceTxtCallback(const MDNSResponder::hMDNSService p_hService) {
  3. //Define the domain of the HDSv2 devices
  4. MDNS.addDynamicServiceTxt(p_hService, "domain", "fl1010-rgb.hds.imuslab.com");
  5. MDNS.addDynamicServiceTxt(p_hService, "protocol", "hdsv3");
  6. //Define the OEM written values
  7. MDNS.addDynamicServiceTxt(p_hService, "uuid", deviceUUID.c_str());
  8. MDNS.addDynamicServiceTxt(p_hService, "name", (String(MDNS_NAME) + "_" + deviceUUID).c_str());
  9. MDNS.addDynamicServiceTxt(p_hService, "model", DEVICE_NAME);
  10. MDNS.addDynamicServiceTxt(p_hService, "vendor", "imuslab");
  11. MDNS.addDynamicServiceTxt(p_hService, "version", "1.00");
  12. }
  13. void hostProbeResult(String p_pcDomainName, bool p_bProbeResult) {
  14. MDNS.setDynamicServiceTxtCallback(MDNSDynamicServiceTxtCallback);
  15. }
  16. //Handlers for Web Server
  17. void handle_index() {
  18. server.send(200, "text/html", "[OK] RGB Fill Light - WiFi Mode API Server");
  19. }
  20. void handle_status() {
  21. DynamicJsonDocument doc(256);
  22. doc["r"] = values[0];
  23. doc["g"] = values[1];
  24. doc["b"] = values[2];
  25. String json;
  26. serializeJson(doc, json);
  27. server.send(200, "application/json", json.c_str());
  28. }
  29. void handle_uuid() {
  30. server.send(200, "application/json", "\"" + deviceUUID + "\"");
  31. }
  32. void handle_setRGB() {
  33. String r = server.arg("r");
  34. String g = server.arg("g");
  35. String b = server.arg("b");
  36. if (r.length() > 0) {
  37. int intR = r.toInt();
  38. if (intR < 0 || intR > 255) {
  39. server.send(200, "application/json", "{\"error\":\"invalid r (red) value given\"}");
  40. return;
  41. }
  42. values[0] = intR;
  43. }
  44. if (g.length() > 0) {
  45. int intG = g.toInt();
  46. if (intG < 0 || intG > 255) {
  47. server.send(200, "application/json", "{\"error\":\"invalid g (green) value given\"}");
  48. return;
  49. }
  50. values[1] = intG;
  51. }
  52. if (b.length() > 0) {
  53. int intB = b.toInt();
  54. if (intB < 0 || intB > 255) {
  55. server.send(200, "application/json", "{\"error\":\"invalid b (blue) value given\"}");
  56. return;
  57. }
  58. values[2] = intB;
  59. }
  60. //Update light color
  61. setLightColor(values[0], values[1], values[2]);
  62. //Return ok
  63. server.send(200, "application/json", "\"ok\"");
  64. }
  65. void handle_setColorTemp() {
  66. String k = server.arg("k");
  67. String b = server.arg("b");
  68. int intK = 5000;
  69. if (k.length() > 0) {
  70. intK = k.toInt();
  71. if (intK < WHITE_MIN_TEMP) {
  72. server.send(200, "application/json", "{\"error\":\"color temperature too low\"}");
  73. return;
  74. } else if (intK > WHITE_MAX_TEMP) {
  75. server.send(200, "application/json", "{\"error\":\"color temperature too high\"}");
  76. return;
  77. }
  78. } else {
  79. server.send(200, "application/json", "{\"error\":\"k (color temperature) is not set\"}");
  80. return;
  81. }
  82. int brightness = 128; //50%
  83. if (b.length() > 0) {
  84. int intB = b.toInt();
  85. if (intB < 0 || intB > 255) {
  86. server.send(200, "application/json", "{\"error\":\"invalid b (brightness) value given\"}");
  87. return;
  88. }
  89. brightness = intB;
  90. }
  91. //Set color temperature
  92. setColorTemperature(intK, brightness);
  93. //Return ok
  94. server.send(200, "application/json", "\"ok\"");
  95. }
  96. void handle_off() {
  97. //Set RGB to 0
  98. //Update light color
  99. values[0] = 0;
  100. values[1] = 0;
  101. values[2] = 0;
  102. setLightColor(values[0], values[1], values[2]);
  103. //Return ok
  104. server.send(200, "application/json", "\"ok\"");
  105. }
  106. void registerAPI() {
  107. // Connect to Wi-Fi
  108. Serial.print("Connected to ");
  109. Serial.println(WiFi.SSID());
  110. Serial.print("IP address:\t");
  111. Serial.println(WiFi.localIP());
  112. //Startup MDNS Responder
  113. MDNS.setHostProbeResultCallback(hostProbeResult);
  114. if (!MDNS.begin((String(MDNS_NAME) + "_" + deviceUUID).c_str())) {
  115. Serial.println("Error setting up MDNS responder!");
  116. }
  117. //Advertise the port that you are using
  118. MDNS.addService("http", "tcp", LISTENING_PORT);
  119. Serial.println("mDNS responder started");
  120. //Restful API
  121. server.on("/", handle_index);
  122. server.on("/status", handle_status);
  123. server.on("/uuid", handle_uuid);
  124. server.on("/api/rgb", handle_setRGB);
  125. server.on("/api/temp", handle_setColorTemp);
  126. server.on("/api/off", handle_off);
  127. delay(100);
  128. server.begin();
  129. Serial.println("Restful API server started");
  130. Serial.print("Listening on port: ");
  131. Serial.println(LISTENING_PORT);
  132. }