misensor-mqtt-daemon/README.md

138 lines
5.1 KiB
Markdown
Raw Normal View History

2017-07-24 21:19:19 +02:00
# Xiaomi Mi Flora Plant Sensor MQTT Client/Daemon
2017-02-09 21:18:45 +01:00
A simple Linux python script to query arbitrary Mi Flora plant sensor devices and send the data to an **MQTT** broker,
2017-07-24 21:31:39 +02:00
e.g., the famous [Eclipse Mosquitto](https://projects.eclipse.org/projects/technology.mosquitto) or the embedded MQTT broker in [Home Assistant](https://home-assistant.io). After data made the hop to the MQTT broker it can be used by home automation software like Home Assistant or [openHAB](https://openhab.org).
2017-07-24 21:19:19 +02:00
![Demo gif for command line execution](demo.gif)
The program can be executed for a single run or in **daemon mode** to run continuously in the background.
2017-07-24 21:31:39 +02:00
2017-07-24 21:19:19 +02:00
### Features
* Support for [Xiaomi](https://xiaomi-mi.com/sockets-and-sensors/xiaomi-huahuacaocao-flower-care-smart-monitor) [Mi Flora sensors](https://www.aliexpress.com/item/Newest-Original-Xiaomi-Flora-Monitor-Digital-Plants-Flowers-Soil-Water-Light-Tester-Sensor-Monitor-for-Aquarium/32685750372.html) (tested with firmware v2.6.2, v2.6.4, v2.6.6, v3.1.4, others anticipated)
2017-07-24 21:19:19 +02:00
* Build on top of [open-homeautomation/miflora](https://github.com/open-homeautomation/miflora)
* Highly configurable
* Data publication via MQTT
2017-07-28 02:39:20 +02:00
* JSON encoded or following the [Homie Convention](https://github.com/marvinroger/homie)
* Announcement messages to support auto-discovery services
2017-07-24 21:19:19 +02:00
* MQTT authentication support
* Daemon mode (default)
* Systemd service file included, sd\_notify messages generated
* MQTT-less mode, printing data directly to stdout/file
2017-07-24 21:19:19 +02:00
* Reliable and inituitive
2017-07-28 02:39:20 +02:00
* Tested on Raspberry Pi 3 and 0W
2017-07-24 21:19:19 +02:00
![Promotional image](https://xiaomi-mi.com/uploads/ck/xiaomi-flower-monitor-001.jpg)
### Readings
The Mi Flora sensor offers the following plant and soil readings:
| Name | Description |
|-----------------|-------------|
| `temperature` | Air temperature, in [°C] (0.1°C resolution) |
| `light` | [Sunlight intensity](https://aquarium-digest.com/tag/lumenslux-requirements-of-a-cannabis-plant/), in [lux] |
2017-07-28 02:39:20 +02:00
| `moisture` | [Soil moisture](https://observant.zendesk.com/hc/en-us/articles/208067926-Monitoring-Soil-Moisture-for-Optimal-Crop-Growth), in [%] |
| `conductivity` | [Soil fertility](https://www.plantcaretools.com/measure-fertilization-with-ec-meters-for-plants-faq), in [µS/cm] |
| `battery` | Sensor battery level, in [%] |
2017-07-24 21:19:19 +02:00
### Installation
On a modern Linux system just a few steps are needed.
The following example shows the installation under Debian/Raspbian:
2017-07-24 21:19:19 +02:00
```shell
sudo apt install git python3 python3-pip bluetooth bluez
git clone https://github.com/ThomDietrich/miflora-mqtt-daemon.git /opt/miflora-mqtt-daemon
2017-07-24 21:19:19 +02:00
cd /opt/miflora-mqtt-daemon
sudo pip3 install -r requirements.txt
2017-07-24 21:19:19 +02:00
```
### Configuration
To match personal needs, all operation details can be configured using the file [`config.ini`](config.ini).
2017-07-24 21:19:19 +02:00
You need to add at least one sensor to the configuration.
2017-07-27 01:20:04 +02:00
Scan for available Mi Flora sensors in your proximity with the command:
```shell
sudo hcitool lescan
```
2017-07-27 01:20:04 +02:00
Interfacing your Mi Flora sensor with this program is harmless.
The device will not be modified and will still work with the official Xiaomi app.
2017-07-24 21:19:19 +02:00
### Execution
A first test run is as easy as:
```shell
2017-07-27 01:20:04 +02:00
python3 miflora-mqtt-daemon.py
2017-07-24 21:19:19 +02:00
```
With a correct configuration the result should look similar to the the screencap above.
The extensive output can be reduced to error messages:
```shell
2017-07-27 01:20:04 +02:00
python3 miflora-mqtt-daemon.py > /dev/null
2017-02-09 21:18:45 +01:00
```
2017-07-24 21:31:39 +02:00
#### Continous Daemon/Service
You most probably want to execute the program **continuously in the background**.
This can be done either by using the internal daemon or cron.
2017-07-24 21:19:19 +02:00
**Attention:** Daemon mode must be enabled in the configuration file (default).
2017-07-24 21:31:39 +02:00
1. Systemd service - on systemd powered systems the recommended option
2017-07-24 21:19:19 +02:00
```shell
2017-07-27 01:20:04 +02:00
sudo cp /opt/miflora-mqtt-daemon/template.service /etc/systemd/system/miflora.service
sudo systemctl daemon-reload
sudo systemctl start miflora.service
sudo systemctl status miflora.service
sudo systemctl enable miflora.service
2017-07-24 21:19:19 +02:00
```
1. Screen Shell - Run the program inside a [screen shell](https://www.howtoforge.com/linux_screen):
2017-07-24 21:19:19 +02:00
```shell
2017-07-27 01:20:04 +02:00
screen -S miflora-mqtt-daemon -d -m python3 /path/to/miflora-mqtt-daemon.py
2017-07-24 21:19:19 +02:00
```
1. Cron job - Add a new con job, e.g., `/etc/cron.d/miflora`, execute every 5 minutes
2017-07-24 21:19:19 +02:00
```shell
2017-07-27 01:20:04 +02:00
*/5 * * * * root python3 /path/to/miflora-mqtt-daemon.py > /dev/null
2017-07-24 21:19:19 +02:00
```
### Integration
2017-07-28 02:39:20 +02:00
In the "mqtt-json" reporting mode, data will be published to the MQTT broker topic "`miflora/sensorname`" (names configurable).
2017-07-24 21:19:19 +02:00
An example:
```json
{"light": 5424, "moisture": 30, "temperature": 21.4, "conductivity": 1020, "battery": 100}
2017-07-24 21:19:19 +02:00
```
2017-07-24 21:31:39 +02:00
This data can be subscribed to and processed by other applications, like [Home Assistant](https://home-assistant.io) or [openHAB](https://openhab.org).
2017-07-24 21:19:19 +02:00
Enjoy!
----
#### Disclaimer and Legal
> *Xiaomi* and *Mi Flora* are registered trademarks of *BEIJING XIAOMI TECHNOLOGY CO., LTD.*
>
> This project is a community project not for commercial use.
2017-07-27 01:20:04 +02:00
> The authors will not be held responsible in the event of device failure or other damages.
2017-07-24 21:19:19 +02:00
>
> This project is in no way affiliated with, authorized, maintained, sponsored or endorsed by *Xiaomi* or any of its affiliates or subsidiaries.