iRobot zone support added (#11783)
Signed-off-by: Nuesel <nuesel@gruenbaer.net>
This commit is contained in:
@@ -12,9 +12,8 @@
|
||||
*/
|
||||
package org.openhab.binding.irobot.internal.dto;
|
||||
|
||||
import java.util.Arrays;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import com.google.gson.JsonElement;
|
||||
import com.google.gson.annotations.SerializedName;
|
||||
@@ -35,13 +34,20 @@ public class MQTTProtocol {
|
||||
public int ordered;
|
||||
@SerializedName("pmap_id")
|
||||
public String pmapId;
|
||||
@SerializedName("user_pmapv_id")
|
||||
public String userPmapvId;
|
||||
public List<Region> regions;
|
||||
|
||||
public CleanRoomsRequest(String cmd, String mapId, String[] regions) {
|
||||
public CleanRoomsRequest(String cmd, String mapId, String[] pregions, String[] types, String userPmapvId) {
|
||||
super(cmd);
|
||||
ordered = 1;
|
||||
pmapId = mapId;
|
||||
this.regions = Arrays.stream(regions).map(i -> new Region(i)).collect(Collectors.toList());
|
||||
this.userPmapvId = userPmapvId;
|
||||
|
||||
regions = new ArrayList<Region>();
|
||||
for (int i = 0; (i < pregions.length) && (i < types.length); i++) {
|
||||
regions.add(new Region(pregions[i], types[i]));
|
||||
}
|
||||
}
|
||||
|
||||
public static class Region {
|
||||
@@ -49,9 +55,9 @@ public class MQTTProtocol {
|
||||
public String regionId;
|
||||
public String type;
|
||||
|
||||
public Region(String id) {
|
||||
public Region(String id, String type) {
|
||||
this.regionId = id;
|
||||
this.type = "rid";
|
||||
this.type = type;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -189,9 +189,38 @@ public class RoombaHandler extends BaseThingHandler {
|
||||
String[] params = cmds[1].split(";");
|
||||
|
||||
String mapId = params[0];
|
||||
String[] regionIds = params[1].split(",");
|
||||
String userPmapvId;
|
||||
if (params.length >= 3) {
|
||||
userPmapvId = params[2];
|
||||
} else {
|
||||
userPmapvId = null;
|
||||
}
|
||||
|
||||
MQTTProtocol.Request request = new MQTTProtocol.CleanRoomsRequest("start", mapId, regionIds);
|
||||
String[] regions = params[1].split(",");
|
||||
String regionIds[] = new String[regions.length];
|
||||
String regionTypes[] = new String[regions.length];
|
||||
|
||||
for (int i = 0; i < regions.length; i++) {
|
||||
String[] regionDetails = regions[i].split("=");
|
||||
|
||||
if (regionDetails.length >= 2) {
|
||||
if (regionDetails[0].equals("r")) {
|
||||
regionIds[i] = regionDetails[1];
|
||||
regionTypes[i] = "rid";
|
||||
} else if (regionDetails[0].equals("z")) {
|
||||
regionIds[i] = regionDetails[1];
|
||||
regionTypes[i] = "zid";
|
||||
} else {
|
||||
regionIds[i] = regionDetails[0];
|
||||
regionTypes[i] = "rid";
|
||||
}
|
||||
} else {
|
||||
regionIds[i] = regionDetails[0];
|
||||
regionTypes[i] = "rid";
|
||||
}
|
||||
}
|
||||
MQTTProtocol.Request request = new MQTTProtocol.CleanRoomsRequest("start", mapId, regionIds,
|
||||
regionTypes, userPmapvId);
|
||||
connection.send(request.getTopic(), gson.toJson(request));
|
||||
} else {
|
||||
logger.warn("Invalid request: {}", cmd);
|
||||
|
||||
Reference in New Issue
Block a user