{"id":32107359,"url":"https://github.com/emericg/watchflower","last_synced_at":"2025-10-20T09:59:57.195Z","repository":{"id":37497868,"uuid":"132017060","full_name":"emericg/WatchFlower","owner":"emericg","description":"A plant monitoring application that reads and plots data from compatible Bluetooth sensors and thermometers like Xiaomi 'Flower Care' or Parrot 'Flower Power'","archived":false,"fork":false,"pushed_at":"2025-09-05T18:53:08.000Z","size":12033,"stargazers_count":220,"open_issues_count":9,"forks_count":34,"subscribers_count":15,"default_branch":"master","last_synced_at":"2025-09-05T20:39:20.389Z","etag":null,"topics":["bluetooth-low-energy","flowercare","flowerpower","miflora","parrot","plants","ropot","thermometer","xiaomi"],"latest_commit_sha":null,"homepage":"https://emeric.io/WatchFlower","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/emericg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"github":["emericg"],"custom":["https://play.google.com/store/apps/details?id=com.emeric.watchflower","https://apps.apple.com/app/watchflower/id1476046123","https://paypal.me/EmericGrange"]}},"created_at":"2018-05-03T15:45:14.000Z","updated_at":"2025-09-05T18:53:12.000Z","dependencies_parsed_at":"2023-10-01T19:11:43.320Z","dependency_job_id":"4313a9a0-96a8-467e-863e-6d7d8de6dda3","html_url":"https://github.com/emericg/WatchFlower","commit_stats":null,"previous_names":[],"tags_count":30,"template":false,"template_full_name":null,"purl":"pkg:github/emericg/WatchFlower","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emericg%2FWatchFlower","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emericg%2FWatchFlower/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emericg%2FWatchFlower/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emericg%2FWatchFlower/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/emericg","download_url":"https://codeload.github.com/emericg/WatchFlower/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/emericg%2FWatchFlower/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":280073297,"owners_count":26267112,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-20T02:00:06.978Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bluetooth-low-energy","flowercare","flowerpower","miflora","parrot","plants","ropot","thermometer","xiaomi"],"created_at":"2025-10-20T09:59:55.533Z","updated_at":"2025-10-20T09:59:57.186Z","avatar_url":"https://github.com/emericg.png","language":"C++","funding_links":["https://github.com/sponsors/emericg","https://play.google.com/store/apps/details?id=com.emeric.watchflower","https://apps.apple.com/app/watchflower/id1476046123","https://paypal.me/EmericGrange"],"categories":[],"sub_categories":[],"readme":"# ![WatchFlower](assets/android/res/drawable-xxxhdpi/splashicon.png)\n\n[![GitHub release](https://img.shields.io/github/release/emericg/WatchFlower.svg?style=flat-square)](https://github.com/emericg/WatchFlower/releases)\n[![GitHub action](https://img.shields.io/github/actions/workflow/status/emericg/WatchFlower/builds_desktop.yml?style=flat-square)](https://github.com/emericg/WatchFlower/actions)\n[![GitHub issues](https://img.shields.io/github/issues/emericg/WatchFlower.svg?style=flat-square)](https://github.com/emericg/WatchFlower/issues)\n[![GitHub contributors](https://img.shields.io/github/contributors/emericg/WatchFlower.svg?style=flat-square)](https://github.com/emericg/WatchFlower/graphs/contributors)\n[![License: GPL v3](https://img.shields.io/badge/license-GPL%20v3-brightgreen.svg?style=flat-square)](http://www.gnu.org/licenses/gpl-3.0)\n\nWatchFlower is a **plant monitoring application** that reads and plots data from compatible Bluetooth sensors like Xiaomi \"Flower Care\" and \"RoPot\" or Parrot \"Flower Power\" and \"Parrot Pot\", as well as many Bluetooth thermometers!\nIt works with international and Chinese Xiaomi devices, doesn't require an account creation, your GPS location, nor any other personal data from you!\n\nWorks on Linux, macOS, Windows, but also Android and iOS! Desktop binaries are available on the \"release\" page, mobile applications are on the app stores.  \nVirtually all phones and laptops have Bluetooth \"Low Energy\", but you will need to make sure your desktop computer has a Bluetooth card or dongle (and for Windows, a working driver too).  \n\n\u003e Available in Chinese (traditional and simplified), Danish, Dutch, English, French, Frisian, Hungarian, German, Norwegian (Bokmål and Nynorsk), Russian and Spanish!\n\n\u003e Application developed by [Emeric Grange](https://emeric.io/). Visual design by [Chris Díaz](https://dribbble.com/chrisdiaz).\n\n#### Features\n\n* Support many different plant sensors and thermometers\n* Support a couple of environmental and air quality sensors\n* Plant database with over 3400 plants\n* Name your plants and set your own limits for optimal care\n* Background updates and notifications (excluding iOS)\n* Synchronize sensors history (FlowerCare, RoPot and ThermoBeacon ONLY for now)\n* Configurable update intervals\n* Clickable two-week graphs\n* Monthly/weekly/daily data histograms\n* 90 days CSV data export\n* Scalable UI: 4.6\" to 34\" screens, landscape or portrait\n\n#### Download\n\n\u003cp\u003e\n\u003ca href='https://flathub.org/apps/io.emeric.watchflower'\u003e\u003cimg height='66' alt='Download on Flathub' src='https://i.imgur.com/MRwDkAl.png'/\u003e\u003c/a\u003e\n\u003ca href=\"https://apps.apple.com/us/app/watchflower/id1476046123\"\u003e\u003cimg height='66' src=\"https://i.imgur.com/Pbhu6zv.png\" alt=\"Download on the App Store\"\u003e\u003c/a\u003e\n\u003ca href='https://play.google.com/store/apps/details?id=com.emeric.watchflower'\u003e\u003cimg height='66' alt='Get it on Google Play' src='https://i.imgur.com/VyahdKR.png'/\u003e\u003c/a\u003e\n\u003c/p\u003e\n\n![GUI_MOBILE1](https://i.imgur.com/VdzHdqH.png)\n\n\n## Supported devices\n\nWatchFlower has been built to be compatible with as many Bluetooth sensors as possible.  \nVarious new Bluetooth devices and sensors can be added to WatchFlower. If you have one in mind, you can contact us and we'll see what can be done!  \n\nCheckout out the [device page](docs/README.md) to get more informations about the devices currently support, and get a peek at their Bluetooth APIs.  \nYou can also create your own sensors and use them with WatchFlower! Checkout this [guide](docs/howto-custom-sensor.md) to learn more about the process.  \n\n\u003e WatchFlower is NOT associated with Xiaomi, Parrot, or any device manufacturer.\n\nPlease note that most Chinese devices have many names, usually no official manufacturer, sometimes a couple of variants potentially sold as the same base model. We do our best to identify them as clearly as we can.\n\n| Flower Care | Flower Care | Flower Care Max | RoPot | Flower Power | Parrot Pot |\n| :---------: | :---------: | :-------------: | :---: | :----------: | :--------: |\n| ![FlowerCare](docs/flowercare.svg) | ![FlowerCare](docs/flowercare.svg) | ![FlowerCare Max](docs/flowercaremax.svg) | ![RoPot](docs/ropot.svg) | ![FlowerPower](docs/flowerpower.svg) | ![ParrotPot](docs/parrotpot.svg) |\n| HHCCJCY01 | HHCCJCY10 | HHCCJCY09 \u003cbr\u003e GCLS002 | HHCCPOT002 | RKXHAWAII | 2AG61POT |\n| Xiaomi / VegTrug / ...\u003cbr\u003e(International and Chinese versions) | Tuya | Xiaomi and VegTrug variants | Xiaomi and VegTrug variants | | (monitoring only) |\n\n| Xiaomi MiJia Bluetooth Hygrometer (LCD) | ClearGrass Temp \u0026 RH Monitor (EInk) | Qingping Temp \u0026 RH Monitor Lite (LCD) |\n| :-----------------------------: | :----------------------------------: | :-------------------------: |\n| ![LYWSDCGQ](docs/hygrotemp_lywsdcgq.svg) | ![CGG1](docs/hygrotemp_cgg1.svg) | ![CGDK2](docs/hygrotemp_cgdk2.svg) |\n| LYWSDCGQ | CGG1 | CGDK2 |\n\n| Miaomiaoce Thermo-Hygrometer 2 (LCD) | Miaomiaoce Thermo-Hygrometer 2 (EInk) | Miaomiaoce Thermo-Hygrometer (EInk) |\n| :----------------------------------: | :---------------------------------: | :---------------------------------: |\n| ![LYWSD03MMC](docs/hygrotemp_lywsd03mmc.svg) | ![MHO-C401](docs/hygrotemp_mhoc401.svg) | ![XMWSDJO4MMC](docs/hygrotemp_xmwsdjo4mmc.svg) |\n| LYWSD03MMC | MHO-C401 | XMWSDJO4MMC |\n\n| Miaomiaoce Digital Hygrometer Clock (EInk) | Miaomiaoce Digital Hygrometer Alarm (EInk) | Qingping Bluetooth Alarm Clock (LCD) | Qingping Temp \u0026 RH Barometer Pro S (LCD) |\n| :----------------------------------------: | :----------------------------------------: | :----------------------------------: | :--------------------------------------: |\n| ![HygroTempClock](docs/hygrotemp_clock.svg) | ![HygroTempAlarm](docs/hygrotemp_alarm.svg) | ![CGD1](docs/hygrotemp_cgd1.svg) | ![CGP1W](docs/hygrotemp_cgp1w.svg) |\n| LYWSD02 | MHO-C303 | CGD1 | CGP1W |\n\n| ThermoBeacon (round keychain) | ThermoBeacon (diamond keychain) | ThermoBeacon (LCD) |\n| :---------------------------: | :-----------------------------: | :----------------: |\n| ![ThermoBeacon](docs/thermobeacon_round.svg) | ![ThermoBeacon](docs/thermobeacon_diamond.svg) | ![ThermoBeacon](docs/thermobeacon_square.svg) |\n| 2ACD3-WS02\u003cbr\u003e2ACD3-WS07 |  2ACD3-WS02 | 2ACD3-WS08\u003cbr\u003eKEU-WA59D |\n\n| Air Box WP6003 | Honeywell HCHO detector | Qingping Air Monitor Lite |\n| :------------: | :---------------------: | :-----------------------: |\n| ![WP6003](docs/wp6003.svg) | ![JQJCY01YM](docs/jqjcy01ym.svg) | ![CGDN1](docs/cgdn1.svg) |\n| | JQJCY01YM | CGDN1 |\n\n| b-parasite                        | HiGrow                            |\n| :-------------------------------: | :-------------------------------: |\n| ![b-parasite](docs/bparasite.svg) | ![HiGrow](docs/higrow.svg)        |\n|                                   |                                   |\n| (with custom firmware)            | (with custom firmware)            |\n| [firmware](https://github.com/rbaron/b-parasite) | [firmware](https://github.com/emericg/esp32-environmental-sensors/tree/master/HiGrow) |\n\n| ESP32 Air Quality Monitor | ESP32 Weather Station | ESP32 Geiger Counter |\n| :-----------------------: | :-------------------: | :------------------: |\n| ![Air Monitor](docs/lungs-solid.svg) | ![Weather Station](docs/cloud-sun-solid.svg) | ![Geiger Counter](docs/radiation-alt-solid.svg) |\n| [build](https://github.com/emericg/esp32-environmental-sensors/tree/master/AirQualityMonitor) | [build](https://github.com/emericg/esp32-environmental-sensors/tree/master/WeatherStation) | [build](https://github.com/emericg/esp32-environmental-sensors/tree/master/GeigerCounter) |\n\n\n## Screenshots\n\n![GUI_MOBILE1](https://raw.githubusercontent.com/emericg/screenshots_flathub/master/WatchFlower/mobile1.png)\n![GUI_DESKTOP1](https://raw.githubusercontent.com/emericg/screenshots_flathub/master/WatchFlower/devicelist.png)\n![GUI_DESKTOP2](https://raw.githubusercontent.com/emericg/screenshots_flathub/master/WatchFlower/plantdata1.png)\n![GUI_DESKTOP3](https://raw.githubusercontent.com/emericg/screenshots_flathub/master/WatchFlower/airsensor1.png)\n\n\n## Documentation\n\n#### Dependencies\n\nYou will need a C++17 compiler and Qt 6.8+ with the following 'additional librairies':  \n- Qt Connectivity\n- Qt Positioning\n- Qt Charts\n\nFor macOS and iOS builds, you'll need Xcode (15+) installed.  \nFor Windows builds, you'll need MSVC (2022) installed. Bluetooth won't work with MinGW.  \nFor Android builds, you'll need the appropriates JDK (17) SDK (28+) and NDK (28+). You can customize Android build environment using the `assets/android/gradle.properties` file.  \n\n#### Building WatchFlower\n\n```bash\n$ git clone https://github.com/emericg/WatchFlower.git\n$ cd WatchFlower/\n$ cmake -B build/\n$ cmake --build build/\n```\n\n#### Using WatchFlower\n\n##### Android\n\nThe Android operating system requires applications to ask for device location permission in order to scan for nearby Bluetooth Low Energy sensors. Android 10+ will ask for _ACCESS_FINE_LOCATION_, while Android 6+ will only ask for _ACCESS_COARSE_LOCATION_.  \nThis is a mandatory requirement. The application is neither using nor storing your location. Sorry for the inconvenience.  \n\nYou can learn more on Android developer [website](https://developer.android.com/guide/topics/connectivity/bluetooth/permissions).  \n\nSome devices also require the GPS to be turned on while scanning for new sensors. This requirement is not documented and there is not much that can be done about it.  \n\n##### Android background updates and notifications\n\nUsing the 'background updates' feature requires the _ACCESS_BACKGROUND_LOCATION_ additional permission, for the same reasons just mentioned above. Note that you can actually deny that permission, but then the background updates will be **much** less efficient.  \n\nIt's also very important to note that Android phones will try very hard to both prevent the app from starting in the background, then kill every application running in the background, making it hard for this feature to work properly.  \nDepending on your phone model and manufacturer, you **will** have to manually **enable** `auto launch` and manually **disable** various `battery saving` features.  \n\n\u003e Fortunately, there is a very good website with per device steps to help you do that: https://dontkillmyapp.com/\n\n##### iOS\n\nThe application will ask you for permission to use Bluetooth. You can learn more on Apple [website](https://support.apple.com/HT210578).\n\n##### macOS\n\nStarting with macOS 11, the application will ask you for permission to use Bluetooth. You can learn more on Apple [developer website](https://developer.apple.com/documentation/bundleresources/information_property_list/nsbluetoothalwaysusagedescription).\n\n##### Linux ('live mode' and 'historical data')\n\nWhile reading Flower Care and RoPot historical entry count, the sensors usually freeze for up to a second, and the Linux kernel consider that to be a connection timeout.  \nTo be able to get the historical data working on Linux, you'll need to increase the \"supervision timeout\" value (while root):\n\n```bash\n# echo 100 \u003e /sys/kernel/debug/bluetooth/hci0/supervision_timeout\n```\n\nYou could also give WatchFlower binary the _net_raw_ and _net_admin_ capabilities, so that it could be allowed to changes the supervision timeout on its own. But at the moment that's not fully implemented.\n\n```bash\n# setcap 'cap_net_raw,cap_net_admin+eip' watchflower\n```\n\n\n## Special thanks\n\n* Chris Díaz \u003cchristiandiaz.design@gmail.com\u003e for his extensive work on the application design and logo!\n* Mickael Heudre \u003cmickheudre@gmail.com\u003e for his invaluable QML expertise!\n* Everyone who gave time to [help translate](i18n/README.md#special-thanks) this application!\n\n#### Third party projects used by WatchFlower\n\n* [Qt6](https://www.qt.io) ([LGPL v3](https://www.gnu.org/licenses/lgpl-3.0.txt))\n* [MobileUI](src/thirdparty/MobileUI/) ([MIT](https://opensource.org/licenses/MIT))\n* [MobileSharing](src/thirdparty/MobileSharing/) ([MIT](https://opensource.org/licenses/MIT))\n* [SingleApplication](https://github.com/itay-grudev/SingleApplication) ([MIT](https://opensource.org/licenses/MIT))\n* RC4 code from Christophe Devine ([GPL v2](https://www.gnu.org/licenses/old-licenses/gpl-2.0.txt))\n* Graphical resources: [assets/COPYING](assets/COPYING)\n\n\n## Get involved!\n\n#### Developers\n\nYou can browse the code on the GitHub page, submit patches and pull requests! Your help would be greatly appreciated ;-)\n\n#### Users\n\nYou can help us find and report bugs, suggest new features, help with translation, documentation and more! Visit the Issues section of the GitHub page to start!\n\n\n## License\n\nWatchFlower is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 3 of the License, or (at your option) any later version.  \nRead the [LICENSE](LICENSE.md) file or [consult the license on the FSF website](https://www.gnu.org/licenses/gpl-3.0.txt) directly.\n\n\u003e Emeric Grange \u003cemeric.grange@gmail.com\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femericg%2Fwatchflower","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Femericg%2Fwatchflower","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Femericg%2Fwatchflower/lists"}