okay, that (2nd one) worked indeed proper (in the sense that command was transformed well and the robot received it and did not return an error)
So you prob need to fiddle with the parameters in the "in": [] array until you get the right ones.
you could try with miio-python to see if you can get it to work with that and than it will be easy to ‘translate’ the command to openhab.
You don’t need the cloud, this is only for specific situations where your device is not accepting local commands or is outside of your regular network/subnet. For map receiving you don’t need to enable it (the map is anyway pulled from the cloud regardless of this setting).
but you are right for this model OH does not support map. maps are only available for rockrobo devices.
Im a new owner of Xiaomi Mi Vacuum Mop 2 Pro+ (ijai.vacuum.v3) and i want to control it by openHAB.
Surprisingly , lot of functions are working, e.g., start, stop sweep / mop, go to charge, mode change, suction level…but there is a one thing what i needed, and cant get it work. I want a possibility to choice,the exact room, with a want to clean.
So at first, i need to find out the room IDs
I tried execute command get_map, but it gives me back this:
I‘m curious, did you manage to get a command with an parameter (in) working? I‘m still struggling.
Are the siid and aiid of the mop 2 pro identical to the mop 2s?
Maybe this helps you, here is the list of aiid/siid for your robot:
Andreas, I’ve read your posts from few days ago. We are trying to find out the same thing!
So i tried the commands as you descripted, and the outputs was the same… same behavior, same errors, same “bling”.
I think, the ssids and piids are identical. I am based on this page https://home.miot-spec.com/spec/ijai.vacuum.v3
So, my best result is, as yours:
Im dont know the rooms IDs, also as you, so the “10” from [24.10,25.0,26.1] is only my estimate.
At the moment, i think, we need to try the python-miio to find the correct parameters to fill the part: “in”: [].
I did quick check for you in the mihome app code for the v19
which makes me think you need in the in array something like:
[ “10,11,12”, 1,1]
or in words: a string with the roomIds (separated with comma) the model which seems to be the sweeptype dunno exactly what that expects and the per which is I guess starting/stopping/pausing.
here some of the relevant parts of the source:
function controlClean(status) {
var rooIds = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : [];
var per = status == _SCPublic.SCControlParam.start ? _SCPublic.SCSetRoomCleanParam.start : _SCPublic.SCSetRoomCleanParam.pause;
var model = _SCDevice.SCDevice.stateModel.S2P8_sweepType == _SCPublic.SCCleanModel.border ? _SCPublic.SCSetRoomModeParam.border : _SCPublic.SCSetRoomModeParam.auto;
_WLLog.default.log('controlClean_s2p8:', _SCDevice.SCDevice.stateModel.S2P8_sweepType);
return setRoomClean(rooIds, per, model);
}
function setRoomClean(ids, per, model) {
var values = [ids.join(","), model, per];
var params = _encapDo(_SCNetEnum.default.NetServer.S7sweep, _SCNetEnum.default.S7SweepAction.S7A3_setRoomClean, values);
var matches = /function\s*(\w*)/i.exec(arguments.callee.toString());
_WLLog.default.log(_WLDateUtils.default.nowText() + " \u9009\u623F\u95F4\u6E05\u626B:", matches[1], params);
var SCSetRoomCleanParam = {
stop: 0,
start: 1,
pause: 2,
puaseFalse: 3
};
exports.SCSetRoomCleanParam = SCSetRoomCleanParam;
var SCSetRoomModeParam = {
auto: 0,
border: 1
};
exports.SCSetRoomModeParam = SCSetRoomModeParam;
var SCBuildParam = {
noBuild: 0,
onlyBuild: 1,
buildSweep: 2
};
But for me, i still don’t know the room IDs. I tried 10, 15, 20, 25, 30, but the vacuum still start to clean all rooms.
But, there is a another solution to get a right command direct from the Mi home app.
In the mentioned thread, there is a android version of Mi home by vevs, which make it possible to log and save the messages to file, so you can get the exact command, what you need.
I need some time to try it out, but christmas holidays ends, and there will be less time
And then use the following command to find out the room ids:
Robot_Command.sendCommand(‘action{“did”:“vacuum-get-map-room-list”,“siid”:10,“aiid”:13,“in”:[{“piid”:2,“value”:map-id from the previous command}]}’)
Thanks to you we now use the correct syntax so this command should work.
Ok update: I tested it out my own - but it did not work for me neither. It only reported back something like Room1 Id10 although in the saved map I have got three rooms.
Yep, me to, only 1 room, with ID 10.
I finally succeeded to get log output from android Mi home app by vevs.
I got this command, when i start clean the specific room:
Your last one is the formatted the way OH miio binding needs it.
The value in did is not relevant → in the binding we set it to the command to have it recognizable so we don’t need to remember what the aiid/siid etc mean.
This is indeed what was expected from the source code.
I am curious as it seems than to accept two formats as you said "in":[{"piid":24,"value":10},{"piid":25,"value":0},{"piid":26,"value":1}]} was also working for you.
I just have one floor. Frequently my Roborock S5 is changing the map (closed doors, stuck somewhere) and then it will not enter a room or is totaly lost.
Then I need to open the Xiaomi App and load my manual saved map.
I want to accomplish this by openhab. I have tried to read the actual map.
Sendind the command “get_map” to a “miio:vacuum:1234567:actions#commands” linked item let me read the map ID. roborockCommands.sendCommand("get_map")
The item roborockCommands will change to “retry” when not moving. While moving it will change to result":[“robomap%2F987654321%2F16”]
No I know the Map ID of a working map.
But how to tell roborock to the load the map when I see his “self changed map” is wrong?
I have tried several commands and methods, even json formated Strings. Nothing worked.
I have this channels:
miio:vacuum:1234567:actions#commands
miio:vacuum:1234567:status#map_status
miio:vacuum:1234567:info#multi_maps_list