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,"
");
} 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,
};