diff --git a/.idea/iotos-soft-gateway-demo.iml b/.idea/iotos-soft-gateway-demo.iml index e53dca1516b954a2c79bb3a98531fdb7e8967ff0..d2c34ec9145916e1565778a924e3e07f21443433 100644 --- a/.idea/iotos-soft-gateway-demo.iml +++ b/.idea/iotos-soft-gateway-demo.iml @@ -11,9 +11,9 @@ - - - + + + diff --git "a/docs/\345\255\220\347\263\273\347\273\237\346\265\213\350\257\225demo\347\211\251\346\250\241\345\236\213.json" "b/docs/\345\255\220\347\263\273\347\273\237\346\265\213\350\257\225demo\347\211\251\346\250\241\345\236\213.json" new file mode 100644 index 0000000000000000000000000000000000000000..555ecaefd41ff0790b0c9ac8982a766a49c259fd --- /dev/null +++ "b/docs/\345\255\220\347\263\273\347\273\237\346\265\213\350\257\225demo\347\211\251\346\250\241\345\236\213.json" @@ -0,0 +1 @@ +{"params":[{"name":"音量","param":"vol","dataType":"INT","frameType":"DEV_UP_DOWN","checkType":{"max":{"value":100,"desc":"最大值"},"min":{"value":0,"desc":"最小值"},"type":"RANGE"}},{"name":"播放状态","param":"playStat","dataType":"INT","frameType":"DEV_UP_DOWN","checkType":{"max":{"value":3,"desc":"最大值"},"min":{"value":0,"desc":"最小值"},"type":"RANGE"}}],"cmds":[{"name":"上报","cmd":"report","frameType":"DEV_UP","params":["playStat","vol"]},{"name":"设置音量","cmd":"setVol","frameType":"DEV_DOWN","params":["vol"]}]} \ No newline at end of file diff --git "a/docs/\347\275\221\345\205\263\350\277\234\347\250\213\351\205\215\347\275\256.txt" "b/docs/\347\275\221\345\205\263\350\277\234\347\250\213\351\205\215\347\275\256.txt" new file mode 100644 index 0000000000000000000000000000000000000000..2cd644456182a03921aab4378b858a6b7476a364 --- /dev/null +++ "b/docs/\347\275\221\345\205\263\350\277\234\347\250\213\351\205\215\347\275\256.txt" @@ -0,0 +1,2 @@ +{"pk":"37743d2ebbe44fb7997a6050fa549411","devId":"demo_subsystem_001","radioDevId":"radio_id_0","devName":"demo子系统终端001"} +{"pk":"37743d2ebbe44fb7997a6050fa549411","devId":"demo_subsystem_002","radioDevId":"radio_id_1","devName":"demo子系统终端002"} diff --git a/pom.xml b/pom.xml index af9b16f56cc4a056f299522ad4425964493ed7a8..2a87494a2a010456727c1cc683ef7041b02cc5e5 100644 --- a/pom.xml +++ b/pom.xml @@ -14,6 +14,7 @@ 8 8 + 2.0.1-SNAPSHOT @@ -28,13 +29,13 @@ me.hekr.iotos.softgateway framework-core - 0.0.1 + ${iotos.softgateway.version} me.hekr.iotos.softgateway framework-network-udp - 0.0.1 + ${iotos.softgateway.version} diff --git a/src/main/java/me/hekr/iotos/softgateway/subsystem/dto/RadioDevice.java b/src/main/java/me/hekr/iotos/softgateway/subsystem/dto/RadioDevice.java index e26d5d1902881ab530e2a4809067146444299792..797c9fe2493a8ece4f2c2ea8844abe2890cd2502 100644 --- a/src/main/java/me/hekr/iotos/softgateway/subsystem/dto/RadioDevice.java +++ b/src/main/java/me/hekr/iotos/softgateway/subsystem/dto/RadioDevice.java @@ -1,6 +1,9 @@ package me.hekr.iotos.softgateway.subsystem.dto; import lombok.Data; +import me.hekr.iotos.softgateway.core.config.DeviceRemoteConfig; +import me.hekr.iotos.softgateway.core.config.DeviceRemoteConfig.Props; +import me.hekr.iotos.softgateway.core.dto.DeviceMapper; /** * 广播设备 @@ -8,8 +11,8 @@ import lombok.Data; * @author iotos */ @Data -public class RadioDevice { - +public class RadioDevice implements DeviceMapper { + private static final String RADIO_DEV_ID = "radioDevId"; /** 设备id */ private String radioDevId; @@ -21,4 +24,15 @@ public class RadioDevice { /** 播放状态 0 停止, 1 播放, 2 暂停 */ private int playStat; + + public static RadioDevice parse(DeviceRemoteConfig device) { + RadioDevice dev = new RadioDevice(); + dev.setRadioDevId(device.getProp(RADIO_DEV_ID)); + return dev; + } + + @Override + public Props getProps() { + return Props.p(RADIO_DEV_ID, radioDevId).get(); + } } diff --git a/src/main/java/me/hekr/iotos/softgateway/subsystem/service/DemoSubSystemCommandServiceImpl.java b/src/main/java/me/hekr/iotos/softgateway/subsystem/service/DemoSubSystemCommandServiceImpl.java index 4de854e1b76083582ba21f07a964875185984a87..ace9173974c2839ab2f6af1bd2592c31ab05a92a 100644 --- a/src/main/java/me/hekr/iotos/softgateway/subsystem/service/DemoSubSystemCommandServiceImpl.java +++ b/src/main/java/me/hekr/iotos/softgateway/subsystem/service/DemoSubSystemCommandServiceImpl.java @@ -1,24 +1,29 @@ package me.hekr.iotos.softgateway.subsystem.service; import lombok.extern.slf4j.Slf4j; -import me.hekr.iotos.softgateway.core.config.DeviceMapper; +import me.hekr.iotos.softgateway.core.config.DeviceRemoteConfig; import me.hekr.iotos.softgateway.core.klink.ModelData; import me.hekr.iotos.softgateway.core.subsystem.SubsystemCommandService; +import me.hekr.iotos.softgateway.subsystem.dto.RadioDevice; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; /** * demo 命令测试用例,如果需要处理,则需要在 iot 上物模型中定义一个 demo 的命令 * - * @see me.hekr.iotos.softgateway.core.subsystem.SubsystemCommandService#handle(DeviceMapper, + * @see me.hekr.iotos.softgateway.core.subsystem.SubsystemCommandService#handle(DeviceRemoteConfig, * ModelData) * @author iot */ -@Service("demoSubSystemCommandService") +@Service("setVol@SubSystemCommandService") @Slf4j public class DemoSubSystemCommandServiceImpl implements SubsystemCommandService { + @Autowired private UdpServerService udpServerService; @Override - public void handle(DeviceMapper device, ModelData data) { + public void handle(DeviceRemoteConfig device, ModelData data) { log.info("设备收到命令, 设备:{},命令:{}", device, data); + RadioDevice dev = RadioDevice.parse(device); + udpServerService.setVol(dev.getRadioDevId(), (Integer) data.getParam("vol")); } } diff --git a/src/main/java/me/hekr/iotos/softgateway/subsystem/service/UdpServerService.java b/src/main/java/me/hekr/iotos/softgateway/subsystem/service/UdpServerService.java index 9bb98c86637f0193dd6eb597658a0dda1e7beddf..ea59d9ac3894c6c06730f829366abb20c2fd6f3b 100644 --- a/src/main/java/me/hekr/iotos/softgateway/subsystem/service/UdpServerService.java +++ b/src/main/java/me/hekr/iotos/softgateway/subsystem/service/UdpServerService.java @@ -4,15 +4,11 @@ import static java.util.stream.Collectors.toList; import com.fasterxml.jackson.core.type.TypeReference; import java.nio.charset.StandardCharsets; -import java.util.HashMap; import java.util.List; -import java.util.Map; -import java.util.Optional; import java.util.stream.IntStream; import lombok.extern.slf4j.Slf4j; -import me.hekr.iotos.softgateway.core.config.DeviceMapper; -import me.hekr.iotos.softgateway.core.config.DeviceMapper.Props; import me.hekr.iotos.softgateway.core.klink.KlinkService; +import me.hekr.iotos.softgateway.core.klink.ModelData; import me.hekr.iotos.softgateway.core.utils.JsonUtil; import me.hekr.iotos.softgateway.network.common.DecodePacket; import me.hekr.iotos.softgateway.network.common.PacketCoder; @@ -54,25 +50,16 @@ public class UdpServerService { udpClient.send("getAllStatus"), new TypeReference>() {}); for (RadioDevice d : devices) { - Optional subsystemDev = - DeviceMapper.getBySubSystemProperties(Props.p("radioDevId", d.getRadioDevId()).get()); - if (!subsystemDev.isPresent()) { - log.warn("没有配置映射设备信息,请在远程配置中进行配置,设备信息:{}", d); - continue; - } - - DeviceMapper dev = subsystemDev.get(); // 如果是离线,设置iot的设备离线 if (d.getStatus() == 0) { - klinkService.devLogout(dev.getPk(), dev.getDevId()); + klinkService.devLogout(d); continue; } - Map params = new HashMap<>(3); - params.put("vol", d.getVol()); - params.put("playStat", d.getPlayStat()); - klinkService.devSend(dev.getPk(), dev.getDevId(), "report", params); + ModelData data = + ModelData.cmd("report").param("vol", d.getVol()).param("playStat", d.getPlayStat()); + klinkService.devSend(d, data); } } @@ -111,6 +98,9 @@ public class UdpServerService { break; // 可以自行扩展其他指令 default: + if (msg.startsWith("setVol")) { + udpServer.send(ctx, "OK"); + } } }); // 开启网络日志 @@ -131,4 +121,8 @@ public class UdpServerService { }) .collect(toList()); } + + public void setVol(String radioDevId, Integer vol) { + System.out.println(udpClient.send("setVol:" + radioDevId + ":" + vol)); + } }