Skip to content

Commit

Permalink
Merge pull request #155 from cricri-pingouin/master
Browse files Browse the repository at this point in the history
Trying again!
  • Loading branch information
atc1441 authored Jan 3, 2021
2 parents 89b8af8 + b6fcc7d commit 710c3c8
Showing 1 changed file with 33 additions and 31 deletions.
64 changes: 33 additions & 31 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ This repo is made together with this explanation video:(click on it)
It is possible to update the Firmware of the Xiaomi Thermometer OTA with this WEB Tool I wrote:
https://atc1441.github.io/TelinkFlasher.html

The web flasher does work for many devices that uses the Telink TLSR82** MCUs and it can also be used to reflash the Stock firmware back to the device.
The web flasher works for many devices that uses the Telink TLSR82** MCUs and it can also be used to reflash the Stock firmware back to the device.

### You can support my work via PayPal: https://paypal.me/hoverboard1 this keeps projects like this coming.

Expand All @@ -21,30 +21,35 @@ Thanks to Eduardo Ruiz
* Download the ATC_Thermometer_custom.bin file and open the Web Flasher.
* Connect to the Xiaomi thermometer; searching may take a while as it broadcasts not so often for better battery life.
* After the connection is successful click on "Do Activation" to Authorize the Connection. While it's doing so you can already select the firmware file. Be careful to select the right one as it's not possible to check the firmware further.
* Then click on start flashing to flash the new firmware to the Thermometer.
* Click on start flashing to flash the new firmware to the Thermometer.

After the flashing is done, the device should reboot. If the screen stays off, pull the battery out for a short amount of time.

To flash the stock firmware back to the Thermometer, just open that one while flashing.
To flash the stock firmware back to the Thermometer, just open the corresponding file (link in the section "Stock firmware" at the bottom of this document) for flashing.

## USB to UART
### How to flash the custom firmware or unbrick the device:

To flash a new firmware via an standard USB to UART adapter simply connect the Thermometer as seen in the picture "Mi_SWS_Connection.jpg" to the USB to UART converter and run the ATCtelink.py tool with the first command to be the file you want to flash.
To flash a new firmware via an standard USB to UART adapter, simply connect the Thermometer as seen in the picture "Mi_SWS_Connection.jpg" to the USB to UART converter and run the ATCtelink.py tool with the first parameter being the name of the file you want to flash.

Example: "python3 ATCtelink.py ATC_Thermometer.bin"

If the flashing fails or no valid COMport can be found, you can edit it in the Python script. Also try to increase the ResetTime, I will try to make that nicer in future!
So far it turned out that flashing via MAC does not work correctly. I think that is because the data will not get pushed out in real time so the Emulated SWS protocol gets interrupted.
If the flashing fails or no valid COM port can be found, you can edit it in the Python script. Also try to increase the ResetTime, I will try to make that nicer in the future!
So far it turned out that flashing via MAC does not work correctly. I think it's because the data will not get pushed out in real time so the Emulated SWS protocol gets interrupted.

The UART flasher software uses code base from https://github.com/pvvx/TlsrComSwireWriter. Thanks to pvvx for the awesome work on this!

## Custom firmware:
To build the custom firmware on your own, follow this guide to get a working TC32 Compiler environment ready where you can add the Custom Mi firmware: https://github.com/Ai-Thinker-Open/Telink_825X_SDK
Use Google Translate for a better reading experience: https://translate.google.com/translate?sl=auto&tl=en&u=https://github.com/Ai-Thinker-Open/Telink_825X_SDK
Try to "make" the blink example included in the SDK once to see if the compiling works as it should.
You can then copy the folder "ATC_Thermometer" into the example folder and go into that with the terminal. Now do a "make" and it will build the custom firmware.
The newly created .bin file can then simply be flashed by either the Web Flasher or the USB to UART method.
* To build the custom firmware on your own, follow this guide to get a working TC32 Compiler environment ready where you can add the Custom Mi firmware.

Original guide in Chinese: https://github.com/Ai-Thinker-Open/Telink_825X_SDK

Guide translated to English with Google Translate: https://translate.google.com/translate?sl=auto&tl=en&u=https://github.com/Ai-Thinker-Open/Telink_825X_SDK

* Try to "make" the blink example included in the SDK once to see if the compiling works as it should.
* You can then copy the folder "ATC_Thermometer" into the example folder and go into that with the terminal.
* Now do a "make" and it will build the custom firmware.
* The newly created .bin file can then simply be flashed by either the Web Flasher or the USB to UART method.

Because of the OTA dual bank update method a firmware can be maximum 256kB in size.

Expand All @@ -53,18 +58,15 @@ http://wiki.telink-semi.cn/doc/ds/DS_TLSR8251-E_Datasheet%20for%20Telink%20BLE+I

### Getting the MAC of your Thermometer:
On boot the custom firmware will show the last three bytes of the MAC Address in the humidity display part on the LCD for 2 seconds each, the first three bytes are always the same (A4:C1:38) so not shown.
Also the BLE name will include the last three bytes of the MAC Address
Also the BLE name will include the last three bytes of the MAC Address.

## Settings in custom firmware:
The following settings can be send to the RxTx Characteristics 0x1F10/0x1f1f
These settings will not get saved on power loss, maybe that will change in future but normaly the battery will be in there for a while

### Show battery level in LCD :
The following settings can be sent to the RxTx Characteristics 0x1F10/0x1f1f

Will show Humidity% or Battery% flipping back and forth every 5~6 seconds, with battery symbol at bottom indicating its battery level.
These settings will not get saved on power loss. Maybe that will change in the future, but normally the battery will be in there for a while.


The battery level will be shown on the LCD every 5-6secdonds indicated by the battery symbol next to the humidity display.
### Show battery level in LCD :
Will show Battery % (when the battery symbol is displayed at the bottom of the screen) or Humidity % (when the battery symbol is NOT displayed at the bottom of the screen) alternatively every 5~6 seconds.

0xB1 = Enabled <- Default

Expand Down Expand Up @@ -107,8 +109,7 @@ so Temp = range -12,8 - + 12,8 °C offset
Humi = range -50 - +50 % offset

### Temp or Humi instant advertising

When the temp or Humidity changes too fast between the main loop (5 seconds interval) the Advertising will be instant for that one.
When the temp or Humidity changes too fast between the main loop (5 seconds interval), the Advertising will be instant for that one.

byte0 0xFC = temp_alarm_point // value divided by 10 for temp in °C

Expand All @@ -123,32 +124,33 @@ Humi alarm from 1% to 50% Range <- 5% Default
## Advertising format of the custom firmware:
The custom firmware sends every minute an update of advertising data on the UUID 0x181A with the Tempereature, Humidity and Battery data.

The format is like this:
The format of the advertising data is as follow:

Byte 5-10 MAC in correct order
* Byte 5-10 MAC in correct order

Byte 11-12 Temperature in int16
* Byte 11-12 Temperature in int16

Byte 13 Humidity in percent
* Byte 13 Humidity in percent

Byte 14 Battery in percent
* Byte 14 Battery in percent

Byte 15-16 Battery in mV uint16_t
* Byte 15-16 Battery in mV uint16_t

Byte 17 frame packet counter
* Byte 17 frame packet counter

Example:
0x0e, 0x16, 0x1a, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0xaa, 0xbb, 0xcc, 0xdd, 0xdd, 0x00


## Using custom firmware with ESPHome
The LYWSD03MMC sensors work directly with ESPHome XiaomiBLE - [xiaomi_lywsd03mmc component](https://esphome.io/components/sensor/xiaomi_ble.html#lywsd03mmc).

Set "Mi like" advertising on custom firmware. The bindkey is not necessary any more as the payload is not encrypted in the custom firmware. However, since the bindkey is a mandatory parameter, you still need to give it a fake one in the config file. It can be anything though, as long as it is formatted like a real one.

Details: https://github.com/esphome/feature-requests/issues/552#issuecomment-688049747
Details:
https://github.com/esphome/feature-requests/issues/552#issuecomment-688049747

### Stock firmware:
This .zip contains the stock firmware to go back
This .zip file contains the stock firmware to go back:
https://github.com/custom-components/sensor.mitemp_bt/files/4022697/d4135e135443ba86e403ecb2af2bf0af_upd_miaomiaoce.sensor_ht.t2.zip

### Building manual for docker:
Expand Down

0 comments on commit 710c3c8

Please sign in to comment.