Xiaomi Mijia bluetooth temperature & humidity sensor compatibility

If you really do setcap, then there is a mistype in the cmd line. You can try to:

sudo setcap 'cap_net_raw+ep' `readlink -f  `which hcidump``

or

sudo setcap 'cap_net_raw+ep' `which hcitool`

In fact, your error is a hcitool error, and it’s easy to google. You can try to:

sudo hciconfig hci0 down
sudo hciconfig hci0 up
sudo hcitool lescan

Just follow tsymbaliuk instructions (remove the backslashes from setcap cmd), and replace sensor.py content with code from my gist.

1 Like

I found some problems with this solution.

  1. The first problem is that with such a frequent update of sensors, the database is very quickly filled with data and the server becomes slow …

As a solution, I did the update once every one minute with the average value of all the data received for that minute.

  1. Turning on debugging, I noticed that the number of actually processed values ​​is much less than expected, based on the refresh rate of the sensors.
    As far as I understand, the essence of the problem is that hcidump generates such a large amount of data that it quickly overflows the allowed size of the PIPE buffer and further output is blocked (sometimes only 6 readings actually reach a minute).

I solved the problem by redirecting the output of hcidump to a python tempfile - now I really get all the readings in a minute (total about 45-50 and more, 20+ per minute for each of my two sensors).

Updated my gist with the described changes (+ some small fixes).

2 Likes

Guys thanks for code, it does work on hassio :slight_smile:

Is this custom component fixing the non-updating data issue ?

Yes so far everything is runs smooth. No issues.

Yes, it is fixing because there is no need for polling, the sensor originaly sends the data in every seconds.

I must be a total noob, but I can’t run your command. I tried both with a SSH session on port 22 and 22222, but each time, it returns

'bash: sudo: command not found"

I am on a Raspberry Pi 3B+, with an hassio image. Is this command supposed to work on Raspbian only ?

I did it this way

works great

even got
one of these

https://www.ebay.com/itm/Xiaomi-Mi-Bluetooth-Smart-Plant-Monitor-Flora-Soil-Water-Light-Sensor-Tester/153551869395?var=453547131351&_trkparms=ispr%3D1&hash=item23c06795d3:m:m2Zuz1p2WD8-l4i0f98ZZhg&enc=AQAEAAACIBPxNw%2BVj6nta7CKEs3N0qVyy%2B%2FGlKC87xTxz8QnnNfgY%2FcP3Aogpvo3%2BstOWpIvEi8QPC7RJujUbx28Un05hvzaOlb%2B8wjR29w%2FReHtkhhVMjiaigd%2B3loBFchhLGFaDuzeZFFDQY9ekkFIGEYU7jpNGH00LaAd6xuMZ8QYP1XcWvJd2ej1Q4r0BmqLKplCdyTBdovy%2FOO%2FvzvtWMQhkf9TZoOtzRjHelhLLcT7nXvr5sjtz2RU4MfFmw7cAwfkbW5gX5ortihQwCpN3J5VwLjwrFK%2FaVzkzA3l4jt21%2Fi6JwndwMiBatHAFiOn4Xjw85PRZUYSZYOu%2BndDhyUmeM2dgJGSFEEGfj1X5h%2BqldQxNAzIt7wLPQ19rBurSFHiYVAA4GFYoJsFB1yiHxi9Fl2CMDQkj%2Fdnyd2AQZ%2FQuaEMc%2FxmxPn92rhYY8Iletv8uQNSVRv4AxH4d%2F7uDLxfON%2BrMSgOaHcujRefxU4%2FOCVqowowywT9Bq2pc%2BXb5BjpZmuPsOBE0tbJAD5klPdOJr6hs7qjT25Q7XOSGeGOqiEPVvKlpToSGSYSVSgnSuiMLr7ncfPv62vbnzyqPV7n7%2Bx2wvSK42eABcYBatJmpjKBiNkRXIcSGvJrFcjyopqCWFvAWfwuKx1yQXwNwhEDAt%2Fp%2FqN%2Bit%2FAyWUivrd52mph29mvAIszGFl7NsOXuG7rQqboDgc9QQfTBTowMO%2FaQbA%3D&checksum=15355186939506ffa6d3ab8c4c9690a0e764d5a949f9

looking to add this to it

https://www.ebay.com/itm/Xiaomi-Smart-Body-Fat-Scale-2-Bluetooth-Balance-Test-BMI-Health-Weight-Measure/153554200000?_trkparms=ispr%3D1&hash=item23c08b25c0:m:mC4aOnCOSKceJalsMyU1EPw&enc=AQAEAAAB4BPxNw%2BVj6nta7CKEs3N0qWaEWy29gF3aMsotSpZTNyqMhEdTMj%2F47c56ZfXVETWJhNxR4%2BeskTjruOU%2Fhwa%2BJtaAXsOMRYZAv%2FmShlfimiLQaaAESvjb2R85R27qCgi4tzWDdS4gI7mG%2BCwXtCCeT%2Bc8FFBQ4kmiMV0uu3jXK903mPZjV%2FuogMszOsmsqCcvgNtb1Mg2x5rliTXGDFWBnwc9QkyDTpClk6j15k9oJI6LZEDwPbH90kc57SjFSfExybtfpIH4Y8XfpIO3l588DxpyGAEV2%2By1vCeePVpnvorwGux%2BUcC4mqTqV16fq%2FvtEouwBzz9rO%2BpPqF6OXT%2FFnOcgK0%2BTBVUzu68OyE3%2FoiUdxZOx%2FjW12ZbSbQ8rcoJ%2Bws8CIlg5N6bx7yWzzeoZWGYO4cDXG9n7A9krlmgOXCD8eyYpwySWwISu4fA2SP4tYV%2BO8%2BECEFXbqAZgeCj3FyJCP%2F%2F%2B2tlUqD3XS5Jk0GAuCq6UxGfA4Gi2MieJNaA%2B7S4hwGf7J0RjMN1IUnIDGpNBjGq2hK7Sbe%2B4ivH94ajf9vsYLb%2BDK2W6tcaD9H17xjNg0jQy3coXdGfQw8jQAEK0egUC0ODkZE2mQzexYEDWd1PdUITgqW%2BRJei813Vw%3D%3D&checksum=153554200000a9abd30853464a45a6cd79a6dc5955e6

If you are running Hassio you don’t have to run any sudo commands ( at least for me I didn’t ),

Just put the mitemp_bt folder into your custom_components folder in config, and add

sensor:
  - platform: mitemp_bt

to your configuration.yaml and you’re all set.

Restart HA and you will see sensors like mi t_582D3432CFTR

Hope this helps! Huge thanks to @tsymbaliuk :heart:

4 Likes

Thanks, worked like a charm. But I can’t see battery level, is it normal?

The battery level in the tsimbalyuk code is presented not as a sensor, but as a sensor attribute, which can be seen on the status page or in details by clicking on the sensor card.

If you need a separate sensor, then you can try something like this (replace senor’s name with yours):

- platform: template
  sensors:
    batt_582D3432CFTR:
      friendly_name: "Mitemp battery level"
      entity_id: sensor.mi_t_582D3432CFTR
      unit_of_measurement: '%'
      device_class: battery
      value_template: "{{ state_attr('sensor.mi_t_582D3432CFTR', 'battery_level') }}"

I’ve tried your code (with the right sensor name), but I obtain “None” in the state value.
I’m not even able to see the battery value through the sensor status: 2019-08-18_185854

Interesting. Battery readings are really missing… I assume two options: either the sensor does not send this data at all (it may be a firmware issue, or the hw of the sensor), or the packets with the battery level data do not reach due to a weak signal (my sensors sends battery information less often than temperature and humidity).
I can offer to connect the sensor to the official program from Xiaomi (Mi Home), and check the relevance of the firmware in it. You can also try to place the sensor closer to the Home assistant host, and see if the situation changes (as an option, you can take the code from my post, then look at the sensor’s status, where the median number will be equal to the number of packets received between sensor updates - a small number (smaller than 5, may be) will indicate poor reception conditions). If it turns out to be a bad reception, then either improve the conditions or just wait in the hope that the battery data will come one day…

I wonder whether the battery status is not broadcast for a few hours after boot time of the sensor? This is the case (as I recently found out) for the Aqara human body sensor

I’ve came back home and found my Hassio totally down… rebooted (from the main power)… all messed up!!! Reboot again (via software)… all up and running!
And now I can see battery level in all 3 images linked above.
Let’s see what will happen tomorrow… :crossed_fingers:

Thank you, it was that simple !

The custom component from @tsymbaliuk makes Hassio on Raspberry Pi significantly slower, especially if you plot the data on a graph card. CPU usage and temperature is higher than usual (I have frequent load peaks above 30%).
The update of @Magalex seems to fix this issue (CPU is now running as usual again), but I haven’t tested long enough to confirm that data does not randomly stop updating.

i replaced the sensor.py file with your script. i had to change the name of your script from mitemp_bt_sensor.py to sensor.py, than i manged to save the config.

that’s the only thing that i need to do in order to avoid the database issue?

Yes, nothing else is needed.

1 Like