diff --git a/src/driver/drv_tuyaMCU.c b/src/driver/drv_tuyaMCU.c index 3314e6cf4..42cb3e640 100644 --- a/src/driver/drv_tuyaMCU.c +++ b/src/driver/drv_tuyaMCU.c @@ -469,7 +469,12 @@ int TuyaMCU_LinkTuyaMCUOutputToChannel(const void *context, const char *cmd, con } else if(!stricmp(dpTypeString,"raw")) { dpType = DP_TYPE_RAW; } else { - dpType = atoi(dpTypeString); + if(strIsInteger(dpTypeString)) { + dpType = atoi(dpTypeString); + } else { + addLogAdv(LOG_INFO, LOG_FEATURE_TUYAMCU,"TuyaMCU_LinkTuyaMCUOutputToChannel: %s is not a valid var type\n",dpTypeString); + return -1; + } } channelID = Tokenizer_GetArgInteger(2); diff --git a/src/httpserver/http_fns.c b/src/httpserver/http_fns.c index 407295195..05438529b 100644 --- a/src/httpserver/http_fns.c +++ b/src/httpserver/http_fns.c @@ -148,6 +148,13 @@ int http_fn_index(http_request_t *request) { hprintf128(request,"

Changed dimmer %i to %i!

",j,newDimmerValue); CHANNEL_Set(j,newDimmerValue,1); } + if(http_getArg(request->url,"set",tmpA,sizeof(tmpA))) { + int newSetValue = atoi(tmpA); + http_getArg(request->url,"setIndex",tmpA,sizeof(tmpA)); + j = atoi(tmpA); + hprintf128(request,"

Changed channel %i to %i!

",j,newSetValue); + CHANNEL_Set(j,newSetValue,1); + } for(i = 0; i < CHANNEL_MAX; i++) { @@ -186,6 +193,23 @@ int http_fn_index(http_request_t *request) { fValue = iValue * 0.1f; hprintf128(request,"Humidity Channel %i value %f Percent
",i, fValue); + } else if(channelType == ChType_LowMidHigh) { + const char *types[]={"Low","Mid","High"}; + int iValue; + iValue = CHANNEL_Get(i); + + hprintf128(request,"

Select speed:

"); + hprintf128(request,"",i); + for(j = 0; j < 3; j++) { + const char *check; + if(j == iValue) + check = "checked"; + else + check = ""; + hprintf128(request,"%s",j,check,types[j]); + } + hprintf128(request,"
"); + hprintf128(request,"
"); } else if(h_isChannelRelay(i) || channelType == ChType_Toggle) { const char *c; diff --git a/src/new_common.c b/src/new_common.c index ce3f16898..9f6722612 100644 --- a/src/new_common.c +++ b/src/new_common.c @@ -19,7 +19,18 @@ char *test_strdup(const char *s) return res; } - +int strIsInteger(const char *s) { + if(s==0) + return 0; + if(*s == 0) + return 0; + while(*s) { + if(isdigit(*s)==false) + return 0; + s++; + } + return 1; +} // returns amount of space left in buffer (0=overflow happened) int strcat_safe(char *tg, const char *src, int tgMaxLen) { // keep space for 1 more char diff --git a/src/new_common.h b/src/new_common.h index 8b6f4f9a9..e5a284542 100644 --- a/src/new_common.h +++ b/src/new_common.h @@ -197,7 +197,8 @@ int wal_strnicmp(const char *a, const char *b, int count); int strcat_safe(char *tg, const char *src, int tgMaxLen); int strcpy_safe(char *tg, const char *src, int tgMaxLen); int strcpy_safe_checkForChanges(char *tg, const char *src, int tgMaxLen); -void urldecode2_safe(char *dst, const char *srcin, int maxDstLen); +void urldecode2_safe(char *dst, const char *srcin, int maxDstLen); +int strIsInteger(const char *s); // user_main.c int Time_getUpTimeSeconds(); diff --git a/src/new_pins.c b/src/new_pins.c index 856c725c7..354f93064 100644 --- a/src/new_pins.c +++ b/src/new_pins.c @@ -802,6 +802,7 @@ void PIN_ticks(void *param) } } } +// setChannelType 3 LowMidHigh int CHANNEL_ParseChannelType(const char *s) { if(!stricmp(s,"temperature")) return ChType_Temperature; @@ -815,6 +816,8 @@ int CHANNEL_ParseChannelType(const char *s) { return ChType_Toggle; if(!stricmp(s,"dimmer") ) return ChType_Dimmer; + if(!stricmp(s,"LowMidHigh") ) + return ChType_LowMidHigh; if(!stricmp(s,"default") ) return ChType_Default; return ChType_Error; diff --git a/src/new_pins.h b/src/new_pins.h index 5fecdd257..5b735cab0 100644 --- a/src/new_pins.h +++ b/src/new_pins.h @@ -44,6 +44,7 @@ enum ChannelType { ChType_Temperature_div10, ChType_Toggle, ChType_Dimmer, + ChType_LowMidHigh, };