Can you please try replacing the "componentSetSpeed" function in your current Parent Driver with the following one? I have added fan_on and fan_off commands in addition to the set_percentage call to Home Assistant to see if this help with your LocalTuya devices. If this works, then I'll add it to the GitHub repo.
def componentSetSpeed(ch, speed) {
if (logEnable) log.info("received setSpeed request from ${ch.label}, with speed = ${speed}")
int percentage = 0
switch (speed) {
case "off":
percentage = 0
break
case "low":
case "medium-low":
percentage = 25
break
case "on":
case "auto":
case "medium":
percentage = 50
break
case "medium-high":
percentage = 75
break
case "high":
percentage = 100
break
default:
if (logEnable) log.info "No case defined for Fan setSpeed(${speed})"
}
state.id = state.id + 1
entity = ch.name
domain = entity.tokenize(".")[0]
messPCT = JsonOutput.toJson([id: state.id, type: "call_service", domain: "${domain}", service: "set_percentage", service_data: [entity_id: "${entity}", percentage: "${percentage}"]])
if (logEnable) log.debug("messOn = ${messPCT}")
interfaces.webSocket.sendMessage("${messPCT}")
//added per user request to help will fan devices on Hass that do not turn on/off properly when set_percentage is called.
if (percentage != 0) {
messOn = JsonOutput.toJson([id: state.id, type: "call_service", domain: "${domain}", service: "turn_on", service_data: [entity_id: "${entity}"]])
interfaces.webSocket.sendMessage("${messOn}")
} else {
messOff = JsonOutput.toJson([id: state.id, type: "call_service", domain: "${domain}", service: "turn_off", service_data: [entity_id: "${entity}"]])
interfaces.webSocket.sendMessage("${messOff}")
}
}