Commit 01fec03f authored by 何金镒's avatar 何金镒

窗帘、空调、新风、地暖的设备同步与mcp控制

parent 86cc6c62
......@@ -37,80 +37,84 @@ public class DeviceTools {
return sycDeviceService.synchronousDevice(CcuUtils.getCcuName(ccuName));
}
@Tool(description = "根据主机号和设备ID控制打开设备")
//==============================设备控制=============================================
@Tool(description = "根据主机号和设备ID控制:打开设备")
public String optDeviceOpen(@ToolParam(description = "主机号")String ccuName,
@ToolParam(description = "设备ID")String devId,
@ToolParam(description = "设备类型")String type){
log.info("mcp调用--->根据主机号和设备ID控制打开设备....ccuName:{},devId:{},type:{}",ccuName,devId,type);
return konkeIotServer.optDeviceOpen(CcuUtils.getCcuName(ccuName), devId, type);
@ToolParam(description = "设备类型ID")String typeId){
log.info("mcp调用--->根据主机号和设备ID控制打开设备....ccuName:{},devId:{},type:{}",ccuName,devId,typeId);
return konkeIotServer.optDeviceOpen(CcuUtils.getCcuName(ccuName), devId, typeId);
}
@Tool(description = "根据主机号和设备ID控制关闭设备")
@Tool(description = "根据主机号和设备ID控制:关闭设备")
public String optDeviceClosed(@ToolParam(description = "主机号")String ccuName,
@ToolParam(description = "设备ID")String devId,
@ToolParam(description = "设备类型")String type){
log.info("mcp调用--->根据主机号和设备ID控制关闭设备....ccuName:{},devId:{},type:{}",ccuName,devId,type);
return konkeIotServer.optDeviceClosed(CcuUtils.getCcuName(ccuName), devId, type);
@ToolParam(description = "设备类型ID")String typeId){
log.info("mcp调用--->根据主机号和设备ID控制关闭设备....ccuName:{},devId:{},type:{}",ccuName,devId,typeId);
return konkeIotServer.optDeviceClosed(CcuUtils.getCcuName(ccuName), devId, typeId);
}
@Tool(description = "根据主机号和设备ID控制暂停设备")
@Tool(description = "根据主机号和设备ID控制:暂停设备.只支持窗帘类型")
public String setPause(@ToolParam(description = "主机号")String ccuName,
@ToolParam(description = "设备ID")String devId,
@ToolParam(description = "设备类型")String type){
log.info("mcp调用--->根据主机号和设备ID控制暂停设备....ccuName:{},devId:{},type:{}",ccuName,devId,type);
return konkeIotServer.setPause(CcuUtils.getCcuName(ccuName), devId, type);
@ToolParam(description = "设备类型ID")String typeId){
log.info("mcp调用--->根据主机号和设备ID控制暂停设备....ccuName:{},devId:{},type:{}",ccuName,devId,typeId);
return konkeIotServer.setPause(CcuUtils.getCcuName(ccuName), devId, typeId);
}
@Tool(description = "根据主机号和设备ID控制设备移动位置")
@Tool(description = "根据主机号和设备ID控制设备:移动位置.只支持窗帘电机(CURTAIN_MOTOR)类型")
public String setMove(@ToolParam(description = "主机号")String ccuName,
@ToolParam(description = "设备ID")String devId,
@ToolParam(description = "设备类型")String type,
@ToolParam(description = "设备类型ID")String typeId,
@ToolParam(description = "移动的距离,范围是0-100")int progress){
log.info("mcp调用--->根据主机号和设备ID控制其移动位置....ccuName:{},devId:{},type:{},progress:{}",ccuName,devId,type,progress);
return konkeIotServer.setMove(CcuUtils.getCcuName(ccuName), devId, type,progress);
log.info("mcp调用--->根据主机号和设备ID控制其移动位置....ccuName:{},devId:{},type:{},progress:{}",ccuName,devId,typeId,progress);
return konkeIotServer.setMove(CcuUtils.getCcuName(ccuName), devId, typeId,progress);
}
@Tool(description = "根据主机号和设备ID控制设备延时关机")
@Tool(description = "根据主机号和设备ID控制设备:延时关机.只支持新风、地暖、空调")
public String setDelayedShutdown(@ToolParam(description = "主机号")String ccuName,
@ToolParam(description = "设备ID")String devId,
@ToolParam(description = "设备类型")String type,
@ToolParam(description = "设备类型ID")String typeId,
@ToolParam(description = "多少分钟后关机,范围1-1440")int delayTime){
log.info("mcp调用--->根据主机号和设备ID控制设备延时关机....ccuName:{},devId:{},type:{},delayTime:{}",ccuName,devId,type,delayTime);
return konkeIotServer.setDelayedShutdown(CcuUtils.getCcuName(ccuName), devId, type,delayTime);
log.info("mcp调用--->根据主机号和设备ID控制设备延时关机....ccuName:{},devId:{},type:{},delayTime:{}",ccuName,devId,typeId,delayTime);
return konkeIotServer.setDelayedShutdown(CcuUtils.getCcuName(ccuName), devId, typeId,delayTime);
}
@Tool(description = "根据主机号和设备ID设置设备的工作温度")
@Tool(description = "根据主机号和设备ID设置设备的工作温度.只支持空调、地暖")
public String setTemperature(@ToolParam(description = "主机号")String ccuName,
@ToolParam(description = "设备ID")String devId,
@ToolParam(description = "设备类型")String type,
@ToolParam(description = "设备类型ID")String typeId,
@ToolParam(description = "设置的温度大小,范围是5-35")double temperature){
log.info("mcp调用--->根据主机号和设备ID设置设备的工作温度....ccuName:{},devId:{},type:{},temperature:{}",ccuName,devId,type,temperature);
return konkeIotServer.setTemperature(CcuUtils.getCcuName(ccuName), devId, type,temperature);
log.info("mcp调用--->根据主机号和设备ID设置设备的工作温度....ccuName:{},devId:{},type:{},temperature:{}",ccuName,devId,typeId,temperature);
return konkeIotServer.setTemperature(CcuUtils.getCcuName(ccuName), devId, typeId,temperature);
}
@Tool(description = "根据主机号和设备ID设置设备的工作模式")
@Tool(description = "根据主机号和设备ID设置设备的工作模式.只支持地暖、空调、新风")
public String setModel(@ToolParam(description = "主机号")String ccuName,
@ToolParam(description = "设备ID")String devId,
@ToolParam(description = "设备类型")String type,
@ToolParam(description = "设备类型ID")String typeId,
@ToolParam(description = "设置的工作模式,枚举值:WIND、HOT、COLD、DEHUMIDIFICATION、AUTO、MANUAL")String mode){
log.info("mcp调用--->根据主机号和设备ID设置设备的工作模式....ccuName:{},devId:{},type:{},mode:{}",ccuName,devId,type,mode);
return konkeIotServer.setModel(CcuUtils.getCcuName(ccuName), devId, type,mode);
log.info("mcp调用--->根据主机号和设备ID设置设备的工作模式....ccuName:{},devId:{},type:{},mode:{}",ccuName,devId,typeId,mode);
return konkeIotServer.setModel(CcuUtils.getCcuName(ccuName), devId, typeId,mode);
}
@Tool(description = "根据主机号和设备ID设置设备的工作风速")
@Tool(description = "根据主机号和设备ID设置设备的工作风速.只支持空调、新风")
public String setSpeed(@ToolParam(description = "主机号")String ccuName,
@ToolParam(description = "设备ID")String devId,
@ToolParam(description = "设备类型")String type,
@ToolParam(description = "设备类型ID")String typeId,
@ToolParam(description = "设置的工作风速,枚举值:LOW、MID、HIGH、AUTO、STOP")String speed){
log.info("mcp调用--->根据主机号和设备ID设置设备的工作风速....ccuName:{},devId:{},type:{},mode:{}",ccuName,devId,type,speed);
return konkeIotServer.setSpeed(CcuUtils.getCcuName(ccuName), devId, type,speed);
log.info("mcp调用--->根据主机号和设备ID设置设备的工作风速....ccuName:{},devId:{},type:{},mode:{}",ccuName,devId,typeId,speed);
return konkeIotServer.setSpeed(CcuUtils.getCcuName(ccuName), devId, typeId,speed);
}
@Tool(description = "根据主机号和场景ID控制触发场景")
@Tool(description = "根据主机号和场景ID:触发场景")
public String triggerScene(@ToolParam(description = "主机号")String ccuName,
@ToolParam(description = "场景ID")String devId,
@ToolParam(description = "场景类型,type等于scene")String type){
log.info("mcp调用--->根据主机号和场景ID触发场景....ccuName:{},devId:{},type:{}",ccuName,devId,type);
@ToolParam(description = "场景类型ID,type等于scene")String typeId){
log.info("mcp调用--->根据主机号和场景ID触发场景....ccuName:{},devId:{},type:{}",ccuName,devId,typeId);
return konkeIotServer.optScene(CcuUtils.getCcuName(ccuName), devId);
}
//===================================================================================================
}
package com.ikonke.konkeaialibabamcp.constant;
import java.util.List;
import java.util.Map;
public class DeviceConstant {
public final static List<String> speed_15005 = List.of(
"LOW", "MID", "HIGH", "AUTO"
);
public final static List<String> speed_12505 = List.of(
"LOW", "MID", "HIGH", "STOP"
);
public final static List<String> mode_15005 = List.of(
"WIND", "HOT", "COLD", "DEHUMIDIFICATION"
);
public final static List<String> mode_12505 = List.of(
"AUTO", "MANUAL"
);
/**
* 设备类型 -- OID
*/
public final static Map<String, List<Integer>> device_model = Map.of(
"LIGHT", List.of(1,3,4,5,7,8,9,10,11,12,13,14,15,16,17,18,20,201,
201,492,493,501,502,503,504,505,506,507,508,509,510,511,513,514,515,516,517,518,519),
// "DIMMING_LIGHT",List.of(),
// "SWITCH",List.of(),//
"SOCKET",List.of(2006),//插座
"CURTAIN", List.of(1008),//窗帘
"CURTAIN_MOTOR",List.of(1003,1012,1016,1017),//窗帘电机
"AIR_CONDITION",List.of(15005),//空调
"FLOOR_HEATER",List.of(12505),//地暖
"AIR_FRESHER",List.of(14003)//新风
// "TV_SET",List.of(),
// "AIR_PURIFIER",List.of(),
// "FAN",List.of(),
// "WATER_HEATER",List.of(),
// "HEATER",List.of(),
// "WASHING_MACHINE",List.of(),
// "GAS_STOVE",List.of(),
// "RANGE_HOOD",List.of(),
// "OVEN",List.of(),
// "MICROWAVE_OVEN",List.of(),
// "PRESSURE_COOKER",List.of(),
// "RICE_COOKER",List.of(),
// "INDUCTION_COOKER",List.of(),
// "HIGH_SPEED_BLENDER",List.of(),
// "SWEEPING_ROBOT",List.of(),
// "FRIDGE",List.of(),
// "HUMIDIFIER",List.of(),
);
public static String getDeviceType(Integer devId) {
for (Map.Entry<String, List<Integer>> entry : device_model.entrySet()) {
if (entry.getValue().contains(devId)) {
return entry.getKey();
}
}
return "UNKNOWN";
}
}
......@@ -37,4 +37,8 @@ public class SynDevice implements Serializable {
private Integer type;
@TableField("ccuId")
private String ccuId;
@TableField("mac")
private String mac;
@TableField("model")
private String model;
}
......@@ -5,6 +5,7 @@ import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.ikonke.konkeaialibabamcp.constant.DeviceConstant;
import com.ikonke.konkeaialibabamcp.entity.mongodb.Device;
import com.ikonke.konkeaialibabamcp.entity.mongodb.Region;
import com.ikonke.konkeaialibabamcp.entity.mongodb.Room;
......@@ -49,7 +50,8 @@ public class SycDeviceService {
jsonObject.set("deviceName", synDevice.getDeviceName());
jsonObject.set("roomId", synDevice.getRoomId());
jsonObject.set("roomName", synDevice.getRoomName());
jsonObject.set("type", synDevice.getOperateId());
jsonObject.set("typeId", synDevice.getOperateId());
jsonObject.set("model", synDevice.getModel());
jsonArray.set(jsonObject);
}
......@@ -94,20 +96,25 @@ public class SycDeviceService {
if(d.getRoomId() == -1){
continue;
}
SynDevice synDevice = new SynDevice();
synDevice.setDeviceId(d.getDevId());
synDevice.setDeviceName(d.getName());
synDevice.setOperateId(String.valueOf(d.getRealType()));
synDevice.setRoomId(d.getRoomId());
for(Room room : rooms){
if(room.getId().equals(d.getRoomId())){
synDevice.setRoomName(room.getName());
String model = DeviceConstant.getDeviceType(d.getRealType());
if(!"UNKNOWN".equals(model)){
SynDevice synDevice = new SynDevice();
synDevice.setDeviceId(d.getDevId());
synDevice.setDeviceName(d.getName());
synDevice.setOperateId(String.valueOf(d.getRealType()));
synDevice.setRoomId(d.getRoomId());
for(Room room : rooms){
if(room.getId().equals(d.getRoomId())){
synDevice.setRoomName(room.getName());
}
}
}
synDevice.setType(1);
synDevice.setCcuId(ccuName);
synDevice.setType(1);
synDevice.setCcuId(ccuName);
synDevice.setMac(d.getMac());
synDevice.setModel(model);
synDeviceList.add(synDevice);
synDeviceList.add(synDevice);
}
}
if(scenes!=null && !scenes.isEmpty()){
for (Scene scene : scenes){
......@@ -126,6 +133,7 @@ public class SycDeviceService {
}
synDevice.setType(2);
synDevice.setCcuId(ccuName);
synDevice.setModel("scene");
synDeviceList.add(synDevice);
}
......
......@@ -4,6 +4,7 @@ import cn.hutool.core.exceptions.StatefulException;
import cn.hutool.http.HttpRequest;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import com.ikonke.konkeaialibabamcp.constant.DeviceConstant;
import com.ikonke.konkeaialibabamcp.entity.mongodb.DeviceStatus;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Value;
......@@ -21,6 +22,8 @@ import java.util.Map;
@Component
public class KonkeIotUtils {
@Value("${konke.deviceCloud.baseUrl}")
private String baseUrl;
@Value("${konke.deviceCloud.appId}")
......@@ -96,6 +99,7 @@ public class KonkeIotUtils {
case "518":
case "519":
case "701":
case "2006":
case "15005":
case "12505":
action = "SwitchOpt";
......@@ -168,6 +172,7 @@ public class KonkeIotUtils {
case "518":
case "519":
case "701":
case "2006":
case "15005":
case "12505":
action = "SwitchOpt";
......@@ -361,12 +366,7 @@ public class KonkeIotUtils {
}
public final static List<String> mode_15005 = List.of(
"WIND", "HOT", "COLD", "DEHUMIDIFICATION"
);
public final static List<String> mode_12505 = List.of(
"AUTO", "MANUAL"
);
/**
* 设置模式
......@@ -379,19 +379,19 @@ public class KonkeIotUtils {
switch (operateId) {
case "15005"://空调
action = "FancoilSetRunModel";//WIND HOT COLD DEHUMIDIFICATION
if(!mode_15005.contains(mode)){
if(!DeviceConstant.mode_15005.contains(mode)){
throw new StatefulException(-32, "不支持的模式");
}
break;
case "12505"://地暖
action = "SetFloorheatingWorkMode";//AUTO MANUAL
if(!mode_12505.contains(mode)){
if(!DeviceConstant.mode_12505.contains(mode)){
throw new StatefulException(-32, "不支持的模式");
}
break;
case "14003"://新风
action = "FreshAirSetRunModel";//AUTO MANUAL
if(!mode_12505.contains(mode)){
if(!DeviceConstant.mode_12505.contains(mode)){
throw new StatefulException(-32, "不支持的模式");
}
break;
......@@ -414,12 +414,7 @@ public class KonkeIotUtils {
return optAIDevice(ccuName, devId, action,opt.toString());
}
public final static List<String> speed_15005 = List.of(
"LOW", "MID", "HIGH", "AUTO"
);
public final static List<String> speed_12505 = List.of(
"LOW", "MID", "HIGH", "STOP"
);
/**
* 设置风速
*/
......@@ -431,13 +426,13 @@ public class KonkeIotUtils {
switch (operateId) {
case "15005"://空调
action = "FancoilSetFanSpeed";//LOW MID HIGH AUTO
if(!speed_15005.contains(speed)){
if(!DeviceConstant.speed_15005.contains(speed)){
throw new StatefulException(-32, "不支持的风速");
}
break;
case "14003"://新风
action = "FreshAirSetSpeed";//LOW MID HIGH STOP
if(!speed_12505.contains(speed)){
if(!DeviceConstant.speed_12505.contains(speed)){
throw new StatefulException(-32, "不支持的风速");
}
break;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment