diff --git a/code/espurna/api.ino b/code/espurna/api.ino index 58dcf50a..36efbd03 100644 --- a/code/espurna/api.ino +++ b/code/espurna/api.ino @@ -102,7 +102,11 @@ ArRequestHandlerFunction _bindAPI(unsigned int apiID) { // Format response according to the Accept header if (_asJson(request)) { char buffer[64]; - snprintf_P(buffer, sizeof(buffer), PSTR("{ \"%s\": %s }"), api.key, value); + if (isNumber(value)) { + snprintf_P(buffer, sizeof(buffer), PSTR("{ \"%s\": %s }"), api.key, value); + } else { + snprintf_P(buffer, sizeof(buffer), PSTR("{ \"%s\": \"%s\" }"), api.key, value); + } request->send(200, "application/json", buffer); } else { request->send(200, "text/plain", value); diff --git a/code/espurna/utils.ino b/code/espurna/utils.ino index d50ff79d..e0252c1e 100644 --- a/code/espurna/utils.ino +++ b/code/espurna/utils.ino @@ -589,3 +589,19 @@ void nice_delay(unsigned long ms) { int __get_adc_mode() { return (int) (ADC_MODE_VALUE); } + +bool isNumber(const char * s) { + unsigned char len = strlen(s); + bool decimal = false; + for (unsigned char i=0; i0) return false; + } else if (s[i] == '.') { + if (decimal) return false; + decimal = true; + } else if (!isdigit(s[i])) { + return false; + } + } + return true; +}