Automating Honeywell CT60 OTA Updates

DS
Daniel Smith
Duncan Aviation

Hello,

I am tasked with updating Android on our CT60 devices (currently on android 7.1.1, trying to update to android 9). Since we have 60+ devices in different locations, we need to be able to update remotely and automatically. According to Honeywell, the recommended way to automate this is to upload a Provisioner.xml file from their EZConfig software with the below

"Source">/storage/IPSM/Honeywell/autoinstall/AndroidUpdate.zip

"Action">InstallOta

Where the AndroidUpdate.zip is an OTA file file synced to the device. However, there are three main issues with this process.

1. File sync does not work on our Honeywell devices when they are set to "User Mode" (general failure)

2. The recommended way to run the provisioner file is:

sendintent -b "intent:#Intent;action=com.honeywell.ezconfig.intent.action.IMPORT_XML;S.path=/storage/IPSM/Provisioner.xml;launchFlags=0x0000020;end"

However, this script seems to do nothing regardless of if the device is in user or admin mode.

3. Most important issue, once the device is updated (can manually launch the above update .xml via a barcode generated from EZConfig software), the devices is unenrolled from mobicontrol, and the wireless sign in information is forgotten, and the device is disconnected from our network.

So I am wondering if there is an easier way to get these devices updated, or if there are any suggestions. I have worked with Soti tech support, and collected full ADB logs of this process, but have not made much progress on it, so I was wondering if anyone might have some ideas.

4 years ago
Android
ANSWERS
MB

Hi Daniel,

you are on the Right way!

First Possibility when you generate the Tasks in the Enterprise Provisioner.

First task is "waiting for network"

Second Task is "SoftwareUpdate" -> i recommand that you have the update File on a Server or Cloud Server to Download it.

You can use https, http, sftp or ftp tp dpwnload the File.

I do it over a Cloud SFTP Server that is for my opinion the Fastest way from different locations to bring the Update to the Device.

Check bevore you export hte XML File that not other task is Marked or added.

With this Proxisioner.xml file i have created a install Package with the Package studio.

Copy the xml File to the Location: %sdcard%\honeywell\persist\

And in the Post - install Script the Comand as you used: sendintent -b "intent:#Intent;action=com.honeywell.ezconfig.intent.action.IMPORT_XML;S.path=/sdcard/honeywell/persist/Provisioner.xml;launchFlags=0x1400020;end"

Downloading Starts and installes the Package, works Perfect on CT40 Gen1, Gen2 and XP ;)

The only Problem what could be that an directly Upgrade from Andriod 7.1.1 to 9 is causing an Enterprise Reset.

Can you try to Update from 7.1.1 to 8 and then to 9 or 10 ?

What i know has Andriod 9 Many Structure Changes in the Backgroud....

DS
Daniel Smith
4 years ago

Hello,

Thank you for the info! I have attached screenshots of my enterprise provisioner settings to verify that everything is setup correctly there. I was able to get the file sync working, however, when I try running the sendintent even through the console, it gives an "ok" message and nothing happens.

Our devices are on an isolated network, so most external network traffic is blocked. From what it looks like, the provisioner does not like handling local filepaths for OTA downloads, so I will try setting up a FTP server and see if that works for me (since we have no servers on that network, I might have to jump through some hoops).

Also, I did notice that the Provisioner only has an option for HON660 84.00.20, while our devices are on 84.00.14. I can not find the article, but I remember reading somewhere that provisioner did not work until a certain version. Maybe that is why I am having troubles with it?

I have not tried Android 8, so I will see if that causes an enterprise reset or not.

DS
Daniel Smith
4 years ago

After looking at the ADB logs, I found that it is acttually not calling the import xml command due to a permission issue (last line has the error):


05-05 10:21:17.987  7305  7305 D BatteryOptimizer :OptimizeBatteryReceiver:  Action observed com.honeywell.ezconfig.intent.action.IMPORT_XML
05-05 10:21:18.000  7305  7305 D BatteryOptimizer : XMLParser:
05-05 10:21:18.001  7305  7305 D BatteryOptimizer : XMLParser:  loadXMLJSON {}
05-05 10:21:18.005  7305  7305 W System.err: org.json.JSONException: No value for ConfigDoc
05-05 10:21:18.005  7305  7305 W System.err:     at org.json.JSONObject.get(JSONObject.java:389)
05-05 10:21:18.005  7305  7305 W System.err:     at org.json.JSONObject.getJSONObject(JSONObject.java:609)
05-05 10:21:18.005  7305  7305 W System.err:     at com.honeywell.batterymaximizer.parser.jsonparser.JsonParser.getCustomProfileConfig(JsonParser.java:147)
05-05 10:21:18.005  7305  7305 W System.err:     at com.honeywell.batterymaximizer.repository.BatteryOptimizerRepository.reloadConfiguration(BatteryOptimizerRepository.java:61)
05-05 10:21:18.005  7305  7305 W System.err:     at com.honeywell.batterymaximizer.receiver.OptimizeBatteryReceiver.onReceive(OptimizeBatteryReceiver.java:69)
05-05 10:21:18.005  7305  7305 W System.err:     at android.app.ActivityThread.handleReceiver(ActivityThread.java:3040)
05-05 10:21:18.005  7305  7305 W System.err:     at android.app.ActivityThread.-wrap18(ActivityThread.java)
05-05 10:21:18.005  7305  7305 W System.err:     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1561)
05-05 10:21:18.005  7305  7305 W System.err:     at android.os.Handler.dispatchMessage(Handler.java:102)
05-05 10:21:18.005  7305  7305 W System.err:     at android.os.Looper.loop(Looper.java:154)
05-05 10:21:18.005  7305  7305 W System.err:     at android.app.ActivityThread.main(ActivityThread.java:6126)
05-05 10:21:18.005  7305  7305 W System.err:     at java.lang.reflect.Method.invoke(Native Method)
05-05 10:21:18.005  7305  7305 W System.err:     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
05-05 10:21:18.006  7305  7305 W System.err:     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
05-05 10:21:18.033  1655  1999 W BroadcastQueue: Permission Denial: broadcasting Intent { act=com.honeywell.ezconfig.intent.action.IMPORT_XML flg=0x1400030 (has extras) } from net.soti.mobicontrol.honeywell (pid=3239, uid=10121) requires com.honeywell.provisioner.ACCESS due to receiver com.honeywell.tools.provisioner/.EZConfigReceiver

I can not read all this, but it appears to fail from what I can tell. I am going to post this to the Honeywell forums and see if they have any suggestions and will report what I find.

MB

Hi Daniel you are on the Right Way :).

When you use the Profile 84.00.20 it can happen that it is not working.

You can Download the neede Profiles at the https://hsmftp.honeywell.com/ here:

Software-Software and Tools -Device Management -Enterprise Provisioner -Provisioner Bundels -Archive

Here you will see that there are different Versions Available, Download them.

Execute this .exe on the Server or WS where you have installed the Enterprise Provisioner, then you can select the installed Profile in the Provisioner.

At the Provisioning Tasks you must unselekt "Clear all Tasks" and "Download files from Enterprise Provisioner" that cause the in the Generated XML File it trys to Download the file from the Server or Workstation where you have installed the Enterprise Provisioner.

When you start the Enterprise Prosisioner it is Starting a Server that you can download the Files from this WS or Server when the Scanner can reach the IP where the Provisioner is installed.

But you have an Second possibility to Update the Firmware on the Device.

When you sync the File zip to the Folder \sdcard\honeywell\autoinstall and Reboot the Device it installs the Update after the reboot.

That works with Full and Inkremental Updated , APK Files.......

DS
Daniel Smith
4 years ago

So I setup an FTP server, and used the suggested settings, and got the same error message again. I posted on Honeywell forums and got the below answer

"The Manifest for the application must have

<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

<uses-permission android:name="com.honeywell.provisioner.ACCESS" />

First row to be able to read external file and the second to be able to use the Intent."

So, it appears that CT60 Android 7 specifically needs access to com.honeywell.provisioner.ACCESS in order to even run the provisioner xml. And it appears that mobicontrol does not have this authority. I tried adding a afw_set_permission_grant_state, but got a "this command is not supported". According to this article it seems as that setting this authority is impossible. So is there any way I can give a Manifest for mobicontrol enabled? Or if there is any workaround for this?

I did try updating the device using autoinstall, however, it seemed to fail as well (I might try it again with adb logs).

MB

Hi Daniel,

that is really strange :(.

Can you try to full Factory reset on CT60 jump to the Set up  and copy the File on the Device.

First Copy the File into the Auto install Folder and see whats happen.

if not

Can you manually start the Upgrade ?

With the APP HUpgrade (don´t know if tihs app is Available on Version 7)

DS
Daniel Smith
4 years ago

Hello,

I was able to figure out how to automate these updates and will post here in case anyone runs into this issue. The only possible way I have found is to upload the OTA file into the autoinstall folder as Marcus pointed out (/sdcard/Honeywell/autoinstall/HON660-O-86.00.27-(0189).zip). The device also has to upgrade from 7 to 8, you can not skip versions. After doing that, the device needs to be put in a unrestricted group in mobicontrol, where it can then restart after a file sync (I am having the users manually restart) and it will initiate an update automatically.

Thank you Marcus for your help.

FH
Felix Hahmann
4 years ago

Hi Daniel,

thank you for the answer for upgrading from Android 7 to 8.

If I want to upgrade from Android 8 to Android 9, is it the same solution with the autoinstall folder?

Thank you!

MB

Hi Felix,

what i know is it Possible to Upgrade from Android 8 -> Android 10 directly.

My update Process has not Changed.

Creating Steps for the Downloading and Installing in the Enterprise Provisioner.

What i have not tested is, ther the "Provision Mode" i allways Enabelt.

That could be like a reason that the Update was not starting.

Normally it is Disabelt after first enrolling, but when it is allways "on" you can scane example the Factoys reset code every time by the user when it must be done or scaner other codes from the enterprise provisioner