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));
+ }
}