* [ATC_MiThermometer_Gateway](#atc_mithermometer_gateway) * [Roadmap](#roadmap) * [Getting started](#getting-started) * [Run Gateway](#run-gateway) * [Shell Scripts](#shell-scripts) * [Docker](#docker) * [MicroPython for MicroController](#micropython-for-microcontroller) * [Resources](#resources) # ATC_MiThermometer_Gateway Python gateway for the [custom firmware](https://github.com/atc1441/ATC_MiThermometer) for the [Xiaomi Thermometer LYWSD03MMC](https://www.mi.com/de/product/mi-temperature-and-humidity-monitor-2/). ![](.media/41N1IH9jwoL._AC_SL1024_.jpg) ## Roadmap **Done:** - Make in runnable in a docker container (because only cool people are using docker) - Make docker image smaller. I mean shiiit 1GB D: should be possible to be under 500MB (It's now around 100MB) - Implement a loop for fetching the data every X seconds **TODOs:** - [WIP] Can run on Raspberry Pi (3, 4, zero w) or any other Linux driven hardware which has BLE and WiFi support - [WIP] Storing temperature, humidity and battery state as json in a text file - [TODO] Make a microPython version for using the raspberry pico w or any other microcontroller with BLE and WiFi support - [TODO] Collect data from multiple devices/gateways - [TODO] Command line tool for managing the devices - [TODO] Analyzing tool for making statistics - [TODO] HomeAssistant integration - [TODO] MQTT publishing - [TODO] Maybe... a webinterface. But I suck at web stuff, so I don't know. - [TODO] Implement other BLE Sensors **Current State** ![](.media/demo.gif) ## Getting started First of all, you need to flash the [custom firmware](https://github.com/atc1441/ATC_MiThermometer) on your LYWSD03MMC device. A step-by-step guid is in his youtube channel, the video is linked on his GitHub repo. It's straight forward and does not require any special hardware. ## Run Gateway The libraries are needed to be installed as root, because the gateway itself needs to be executed as root, else it is not able to use the bluetooth adapter. In the future, I try to do it better. Also in the future it will be much easier to start and install. Install `bluez`. It's needed for bluepy to communicate with the bluetooth adapter. ```bash sudo apt-get install -y bluez ``` Install PIP Libraries ```bash sudo pip3 install -r python/requirements.txt ``` Run Gateway ```bash cd python/src sudo python3 main.py ``` ## Shell Scripts **build_docker.sh** | Arg | Meaning | Default | |---------------|----------------------------|---------------------------------------| | -t \| --tag | Set a tag for build | develop | | -i \| --image | Set a image name for build | dasmoorhuhn/atc-mithermometer-gateway | | -h \| --help | Get this help in the CLI | | **run_docker.sh** | Arg | Meaning | Default | |-------------------|----------------------------------------------|---------------| | -d | Run in Backgrund | | | -t \| --tag | Set a docker tag | develop | | -b \| --build | Build the image before running the container | | | -l \| --loop | Start the gateway in looping mode | | | -a \| --api | Start with the API | false | | -tz \| --timezone | Set the timezone | Europe/Berlin | | -to \| --timeout | Set the timeout for the bluetooth scan | 20 | | -h \| --help | Get this dialog in CLI | | ## Docker Build docker container () ```bash sh build_docker.sh # Or sh build_docker.sh -i your-image-name -t your-tag ``` Run docker container. Killing the hosts bluetooth service is needed to access it from the docker container. ```bash sudo sh run_docker.sh ``` ## MicroPython for MicroController Coming when I develop it... # Resources - https://pythonspeed.com/articles/alpine-docker-python this article is nuts :D - https://docs.docker.com/build/building/multi-stage/