[Amazfit] nelsontky:
Hi all! The Amazfit Bip is an amazing device with great hardware and battery life that would even put a Pebble to shame. However, due to its limited software, it has a lot of unrealized potential and this thread aims to provide some workarounds for the power users of XDA to make this amazing smartwatch more functional.

I will taking requests for additional tutorials so do please feel free to comment!

Note: Most of the guides here require the use of 2 paid apps, 'Tasker' and 'Tools & Amazfit'. Both are awesome apps (esp Tasker) and they do not cost much to download

Tasker: https://play.google.com/store/apps/details?id=net.dinglisch.android.taskerm&hl=en

Tools & Amazfit: https://play.google.com/store/apps/details?id=cz.zdenekhorak.amazfittools&hl=en

With this, we can start now!

1. Custom watch face tutorial

(Yes I am a big fan of Pebble's sliding text watch face, you can download this watchface here.)

This tutorial does not require the use of either Tasker or Tools & Amazfit and thus can be done for free.

1. In order to start to create a custom watch face, first you need a watch face template.

2. Connect your BIP to your android phone via MiFit app.

3. Open MiFit, goto Profile->Amazfit Bip->Watch face settings

4. Click on the ugliest watch face (in your opinion, i used the 'Number'' watch face and press 'Sync watch face'

5. Watch face should be synced to your BIP and downloaded to your phone.

6. Connect your Android phone to your PC and navigate to 'Android/data/com.xiaomi.hm.health/files/watch_skin' and transfer the .bin file to your working directory on your PC.

(For my case, the .bin file is named '9098940e097cf25a971fc917630a6ac2.bin'. That is the name of the 'Number' watch face. Your .bin file may have a different name and that is ok)

7. Download Amazfit Tools to your PC from this link: https://bitbucket.org/valeronm/amazfitbiptools/downloads/

8. Extract the downloaded file to a folder and then drag and drop the transferred .bin file on 'WatchFace.exe' A cmd window should appear and disappear in a flash.

9. A folder with the name of your .bin file should now appear in folder where your .bin file is stored. (In my case, the folder is named '9098940e097cf25a971fc917630a6ac2')

10. Open the folder that appeared and inside you can see the components of a BIP watch face

11. In the folder, have 2 main file types, .png and .json (Delete the .log file and the 2 preview files)

12. The .png files are resources for the watch face (such as backgrounds, numbers etc) while the .json file contains code for the picture placements and watch face functions.

13. Now, you can either make small edits to the preexisting .png files with a photo editor (paint/gimp/photoshop) and then recompile to a .bin file

or

14. You can replace all the .png files with your own images

(I will be going through this option more, people choosing the small edits path, after editing the resources, you can skip to recompiling the .bin, which is step 28)

15. If you choose to replace all the .png files with your own images, start creating your .png files now. Below are the requirements for the .png files

The screen size of the BIP is 176x176px, so do size your images accordingly

Must have at least 11 images, with 000.png being the background and 001.png being number 0, 002.png being number 1, so on till 010.png being number 9.

If you want to have a separate of images for minutes and hours it is possible. Your next set of images should start with 011.png being number 0.

16. Follow all the requirements and your folder will end up looking like this:

17. It is possible to edit the .json by hand but it is easier to do so with a GUI tool.

18. Go to https://v1ack.github.io/watchfaceEditor/ and upload all your custom images and the .json file respectively.

19. You may get a few error messages but just ignore them.

20. Go to the edit tab and replace the contents inside with this:

{
"Background": {
"Image": {
"X": 0,
"Y": 0,
"ImageIndex": 0
}
},
"Time": {
"Hours": {
"Tens": {
"X": 7,
"Y": 9,
"ImageIndex": 1,
"ImagesCount": 10
},
"Ones": {
"X": 36,
"Y": 9,
"ImageIndex": 1,
"ImagesCount": 10
}
},
"Minutes": {
"Tens": {
"X": 81,
"Y": 9,
"ImageIndex": 1,
"ImagesCount": 10
},
"Ones": {
"X": 110,
"Y": 9,
"ImageIndex": 1,
"ImagesCount": 10
}
}
}
}

21. This is the most basic .json watch face code, giving you only the time in hours and minutes. The code explanation is below:

{
"Background": {
"Image": {
"X": 0,
"Y": 0,
"ImageIndex": 0 \\ use 000.png
}
},
"Time": {
"Hours": {
"Tens": {
"X": 7, // position on the XY axis
"Y": 9,
//To use image 001.png to image 010.png, use ImageIndex 1,
// to use image 011.png to image 020.png, use ImageIndex 2 and so on
"ImageIndex": 1,
"ImagesCount": 10 // will go from image 001.png to image 010.png
},
"Ones": {
"X": 36, // position on the XY axis
"Y": 9,
//To use image 001.png to image 010.png, use ImageIndex 1,
// to use image 011.png to image 020.png, use ImageIndex 2 and so on
"ImageIndex": 1,
"ImagesCount": 10 // will go from image 001.png to image 010.png
}
},
"Minutes": {
"Tens": {
"X": 81, // position on the XY axis
"Y": 9,
//To use image 001.png to image 010.png, use ImageIndex 1,
// to use image 011.png to image 020.png, use ImageIndex 2 and so on
"ImageIndex": 1,
"ImagesCount": 10 // will go from image 001.png to image 010.png
},
"Ones": {
"X": 110, // position on the XY axis
"Y": 9,
//To use image 001.png to image 010.png, use ImageIndex 1,
// to use image 011.png to image 020.png, use ImageIndex 2 and so on
"ImageIndex": 1,
"ImagesCount": 10 // will go from image 001.png to image 010.png
}
}
}
}

22. In the edit tab, there are a few options for you to play around in the sidebar. Do experiment and play around!

22. You can go to the design tab and start moving the numbers according to your own needs.

23. There are many more watch face functions supported by the BIP and I recommend visiting this site. (Google translated) to learn more about them. The site is an amazing site with numerous watch face related tutorials but it is all in Spanish :(

24. When satisfied with your watch face, press export JSON and download the .json file to your decompiled .bin file folder. Replace the existing .json file. (For me, the folder is the '9098940e097cf25a971fc917630a6ac2' folder)

25. Download this zip file: https://github.com/v1ack/watchfaceEditor/raw/master/defaultimages/defaultimages.zip

26. Extract all the files in the downloaded file into your decompiled .bin file folder. These images are the ones used by the online watch face editor when you add functions such as date display, weather, steps etc etc

27. Your decompiled .bin folder should look like this now:

28. Drag and drop the .json file onto 'WatchFace.exe', '9098940e097cf25a971fc917630a6ac2_packed.bin' should appear in the folder (your file name should be different) alongside a few previews of your watch face.

29. Rename your packed .bin file by removing the '_packed.bin'. (In my case, my file is renamed from 9098940e097cf25a971fc917630a6ac2_packed.bin to 9098940e097cf25a971fc917630a6ac2.bin )

30. Transfer the newly created .bin file to your Android phone, into this folder: 'Android/data/com.xiaomi.hm.health/files/watch_skin' . Replace the old watch face .bin.

31. Open MiFit app and sync the watch face you synced at step 4 onto your BIP

32. Viola! You got a new custom watch face.

33. If you get any errors at step 28 (recompiling), check if you all all the images you referenced to in your .json in the folder. Also, go back to the watch editor website and check your .json file for any errors. You can comment below if you have anything that you are unsure of or need more clarifications.

2. Tasker Integration

Tasker is a very powerful Android app and if integrated with the Amazfit BIP, the amount of things that can be done with the BIP is ENDLESS!

The video below shows how I use my BIP as a TV remote control

[YOUTUBE]GN_AWeANm_U[/YOUTUBE]

Two clicks of the BIP's button turned off the television.

To learn more about Tasker Integration with the BIP, then expand content:

To get Tasker integration for the BIP, you need to download both Tasker and Tools & Amazfit to your Android.

Both are paid apps!!!

This tutorial assumes the knowledge of variables and flow control in Tasker.

If you have never used Tasker before, I recommend you start learning by following some of the tasks listed here. I believe that the best way to learn is a hands on approach and thus after completing a few of the Beginner tasks, move on to the Intermediate tasks and you should be well-versed enough in Tasker for the purposes of this tutorial.

Before starting this tutorial, make sure your BIP is connected to both MiFit and Tools & Amazfit apps.

1. The Tools & Amazfit app has both Tasker Event plugins and Action plugins.

2. Event plugins will trigger an action in Tasker. (e.g. button is pressed or heart rate is measured)

3. These plugins also provides variables to Tasker (e.g. the event plugin will tell you how many times the button on Amazfit was pressed).

4. Action plugins let Tasker do something on the BIP. (e.g. you can send custom vibration to your BIP or you can change heart rate monitoring mode, vibration notification mode, etc.)

5. These plugins can provide variables to Amazfit Tools (e.g. you can pass your own custom text you want to display on the BIP).

Events:

To setup event plugin in Tasker, on Profiles screen tap + and select Event - Plugin - Amazfit Tools. Then simply tap configure and choose event you want to be notified about in Tasker.

1. Tools & Amazfit supports 3 tasker events (as of 9th Feb 2018) as shown on the bottom right image above.

2. Each of these events has variables for finer even controls. The %button_pressed and %heart_rate variable supports numbers from 1 to infinity while the %charging_state variable supports 0 and 1, 0 for not charging and 1 for charging.

Actions:

To setup action plugin in Tasker, on Tasks screen, create new task, then tap + and select Plugin - Amazfit Tools. Then simply tap configure and choose action you want to perform in Amazfit Tools.

1. Tools & Amazfit supports 5 tasker actions (as of 9th Feb 2018) as shown on the right-side image above

2. These actions are self-explanatory.

Project:

Using both Tools & Amazfit events and actions, now we can create a Tasker profile to turn off the TV!

1. The Event tab and Task:

2. The event is quite straightforward, it just tells Tasker to look out when the button on the BIP is pressed

3. Task explanation:

Line 1: If the variable %button_count equals to 2 (i.e. if the BIP's button was pressed twice), run lines 2 to 6. If not equals to 2, do nothing.

Line 2: Run the command 'input keyevent 26'. This command simulates a power button press (requires root) and thus wakes the screen.

Line 3: Launch my remote control app.

Line 4: Run the command 'input tap 225 270'. This command simulates a screen touch event at pixel X: 225 Y: 270, which is the location of the power button of my remote control app. (Requires root)

Line 5: Simulates power button press to lock phone again.

Line 6: Sends the notification 'TV TURNED OFF' to the BIP.

End product, after pressing the BIP's button twice, the phone screen turns on, opens the remote control app, taps on the power button and locks screen again.

[YOUTUBE]9BFN864LT2k[/YOUTUBE]

I understand that turning on the screen of your phone and simulating a tap may not be the most efficient way to code a Tasker profile, however, this is the only remote control app that works for my TV and it does not have Tasker integration and so I have to resort to such means. There are other remote control apps that includes Tasker integration and these apps can even control a smart home, thus allowing your BIP to control everything from light switches to smart TVs. Whatever Tasker can do, your BIP will be able to do the same and thus the possibilities are endless and so have fun!

3. Music Controls

[YOUTUBE]gBVEoHB0Yj8[/YOUTUBE]

When I bought the BIP, I was disappointed that it had no built-in music control functions as that was one of the main uses of my Pebble watch. Below, I will be teaching you all how to control music with the BIP.

To allow music control with your BIP, you need to download Tools & Amazfit to your Android.

This is a paid app!!!

Make sure that your BIP is connected to both MiFit and the Tools & Amazfit app before starting on this tutorial.

The Tools & Amazfit app allows you to use the BIP's button presses and sensors to control your phone's function.

Refer to the app developer's website for a tutorial on how to use the button control function of the app: http://help.amazfittools.com/knowledge_base/topics/button-control-amazfit

Due to the BIP having only 1 button, it may be cumbersome to launch any task when there are already too many preset tasks (i.e. it is not convenient to press a button 10 times just to pause music) Thus, the app developers included the ability to have different button profiles. Find out more here: http://help.amazfittools.com/knowledge_base/topics/button-control-switch-profile-amazfit

4. Picking Up Calls

[YOUTUBE]zY_VysxtlX0[/YOUTUBE]

The BIP has the ability to end calls but is unable to pickup calls. In this tutorial, we will be learning 2 ways to pickup calls with the BIP.

The first method requires you to download Tools & Amazfit to your Android.

The second method requires you to download both Tasker and Tools & Amazfit to your Android and it also needs root access on your Android.

Both are paid apps!!!

Method 1:

1. Tools & Amazfit app supports picking up of incoming calls.

2. Make sure that your BIP is both connected to MiFit and Tools & Amazfit app before continuing.

3. Open Tools & Amazfit app, open sidebar (swipe from left) and press contacts.

4. Press the plus button and choose 'Any Other'.

5. Tap on the Any Other option that now appears at the contacts screen and tap on 'Amazfit Button Actions'.

6. Set 'Push Button' to 'Answer'

7. In the meantime, you can also customize the incoming call notifications using the Tools & Amazfit app. Have fun!

8. However, this method does not work on recent versions on Android and thus I will be introducing the 2nd way below.

Method 2:

Video tutorial:

[YOUTUBE]9R-OoWCr_N8[/YOUTUBE]

1. Make sure that your BIP is both connected to MiFit and Tools & Amazfit app before continuing. This method also requires Tasker and root.

2. Create new Tasker task called 'Pickup'

3. Add an action and tap Code->Run Shell.

4. Type 'service call phone 6' in the command box and check 'Use Root'

5. Press back, add task, tap on Task->Stop and type 'Pickup' in the box.

6. Create a new profile, tap on State->Phone->Call and choose incoming.

7. Add 'Pickup' as the task to the profile.

8. Add an Event to that profile. In the Event Category window, tap on Plugin->Amazfit Tools and configure as Button Pressed.

9. Now when there is an incoming call and you press the BIP's button, you will be able to pickup the call!

5. Coming soon: Google Maps Navigation