Coder Social home page Coder Social logo

emericg / watchflower Goto Github PK

View Code? Open in Web Editor NEW
187.0 15.0 26.0 12.39 MB

A plant monitoring application that reads and plots data from compatible Bluetooth sensors and thermometers like Xiaomi 'Flower Care' or Parrot 'Flower Power'

Home Page: https://emeric.io/WatchFlower

License: GNU General Public License v3.0

QML 53.07% C++ 40.37% QMake 0.54% Java 1.74% JavaScript 3.19% NSIS 0.20% Shell 0.39% CMake 0.39% C 0.11%
xiaomi miflora plants flowercare ropot parrot flowerpower thermometer bluetooth-low-energy

watchflower's Introduction

WatchFlower

GitHub release GitHub action GitHub issues GitHub contributors License: GPL v3

WatchFlower 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! It works with international and Chinese Xiaomi devices, doesn't require an account creation, your GPS location, nor any other personal data from you!

Works on Linux, macOS, Windows, but also Android and iOS! Desktop binaries are available on the "release" page, mobile applications are on the app stores.
Virtually 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).

Available in Chinese (traditional and simplified), Danish, Dutch, English, French, Frisian, Hungarian, German, Norwegian (Bokmål and Nynorsk), Russian and Spanish!

Application developed by Emeric Grange. Visual design by Chris Díaz.

Features

  • Support many different plant sensors and thermometers
  • Support a couple of environmental and air quality sensors
  • Plant database with over 3400 plants
  • Name your plants and set your own limits for optimal care
  • Background updates and notifications (excluding iOS)
  • Synchronize sensors history (FlowerCare, RoPot and ThermoBeacon ONLY for now)
  • Configurable update intervals
  • Clickable two-week graphs
  • Monthly/weekly/daily data histograms
  • 90 days CSV data export
  • Scalable UI: 4.6" to 34" screens, landscape or portrait

Download

Download on Flathub Download on the App Store Get it on Google Play

GUI_MOBILE1

Supported devices

WatchFlower has been built to be compatible with as many Bluetooth sensors as possible.
Various 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!

Checkout out the device page to get more informations about the devices currently support, and get a peek at their Bluetooth APIs.
You can also create your own sensors and use them with WatchFlower! Checkout this guide to learn more about the process.

WatchFlower is NOT associated with Xiaomi, Parrot, or any device manufacturer.

Please 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.

Flower Care Flower Care Flower Care Max RoPot Flower Power Parrot Pot
FlowerCare FlowerCare FlowerCare Max RoPot FlowerPower ParrotPot
HHCCJCY01 HHCCJCY10 HHCCJCY09
GCLS002
HHCCPOT002 RKXHAWAII 2AG61POT
Xiaomi / VegTrug / ...
(International and Chinese versions)
Tuya Xiaomi and VegTrug variants Xiaomi and VegTrug variants (monitoring only)
Xiaomi MiJia Bluetooth Hygrometer (LCD) ClearGrass Temp & RH Monitor (EInk) Qingping Temp & RH Monitor Lite (LCD)
LYWSDCGQ CGG1 CGDK2
LYWSDCGQ CGG1 CGDK2
Miaomiaoce Thermo-Hygrometer 2 (LCD) Miaomiaoce Thermo-Hygrometer 2 (EInk) Miaomiaoce Thermo-Hygrometer (EInk)
LYWSD03MMC MHO-C401 XMWSDJO4MMC
LYWSD03MMC MHO-C401 XMWSDJO4MMC
Miaomiaoce Digital Hygrometer Clock (EInk) Miaomiaoce Digital Hygrometer Alarm (EInk) Qingping Bluetooth Alarm Clock (LCD) Qingping Temp & RH Barometer Pro S (LCD)
HygroTempClock HygroTempAlarm CGD1 CGP1W
LYWSD02 MHO-C303 CGD1 CGP1W
ThermoBeacon (round keychain) ThermoBeacon (diamond keychain) ThermoBeacon (LCD)
ThermoBeacon ThermoBeacon ThermoBeacon
2ACD3-WS02
2ACD3-WS07
2ACD3-WS02 2ACD3-WS08
KEU-WA59D
Air Box WP6003 Honeywell HCHO detector Qingping Air Monitor Lite
WP6003 JQJCY01YM CGDN1
JQJCY01YM CGDN1
b-parasite HiGrow
b-parasite HiGrow
(with custom firmware) (with custom firmware)
firmware firmware
ESP32 Air Quality Monitor ESP32 Weather Station ESP32 Geiger Counter
Air Monitor Weather Station Geiger Counter
build build build

Screenshots

GUI_MOBILE1 GUI_DESKTOP1 GUI_DESKTOP2 GUI_DESKTOP3

Documentation

Dependencies

You will need a C++17 compiler and Qt 6.5+ with the following 'additional librairies':

  • Qt Connectivity
  • Qt Charts

For Android builds, you'll need the appropriates JDK (11) SDK (23+) and NDK (23+). You can customize Android build environment using the assets/android/gradle.properties file.
For Windows builds, you'll need the MSVC 2019+ compiler. Bluetooth won't work with MinGW.
For macOS and iOS builds, you'll need Xcode 13+ installed.

Building WatchFlower

$ git clone https://github.com/emericg/WatchFlower.git
$ cd WatchFlower/
$ qmake6
$ make

Using WatchFlower

Android

The 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.
This is a mandatory requirement. The application is neither using nor storing your location. Sorry for the inconvenience.

You can learn more on Android developer website.

Some 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.

Android background updates and notifications

Using 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.

It'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.
Depending on your phone model and manufacturer, you will have to manually enable auto launch and manually disable various battery saving features.

Fortunately, there is a very good website with per device steps to help you do that: https://dontkillmyapp.com/

iOS

The application will ask you for permission to use Bluetooth. You can learn more on Apple website.

macOS

Starting with macOS 11, the application will ask you for permission to use Bluetooth. You can learn more on Apple developer website.

Linux ('live mode' and 'historical data')

While 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.
To be able to get the historical data working on Linux, you'll need to increase the "supervision timeout" value (while root):

# echo 100 > /sys/kernel/debug/bluetooth/hci0/supervision_timeout

You 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.

# setcap 'cap_net_raw,cap_net_admin+eip' watchflower

Special thanks

Third party projects used by WatchFlower

Get involved!

Developers

You can browse the code on the GitHub page, submit patches and pull requests! Your help would be greatly appreciated ;-)

Users

You 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!

License

WatchFlower 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.
Read the LICENSE file or consult the license on the FSF website directly.

Emeric Grange [email protected]

watchflower's People

Contributors

dittaeva avatar emericg avatar fyr76 avatar megachip avatar thecheis avatar vicklau avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

watchflower's Issues

Feature Request - update other tools

hi - WatchFlower works great on my windows machine. I"m also running a home automation software (Domoticz), and it will be great to integrate watchflower to it. any way I can configure a notification address (say REST message) or be able to pull the data collected?

This will allow me to integrate this to other automation flows (like sending mails when a plan need water etc.

lumen vs lux

I'll guess the FlowerCare measure the light intensity in lux, not in lumen.

Maybe thats also related to the scale issue in #6

[Feature Request] Flatpak release

Please, could you release Watch Flower on Flatpak ?
It has so much better desktop integration than AppImage.
Thank you !

I love your app ! You've done an amazing work.
High Five

Date choose is not possible on journal entry

Hi,
When I click on the date to edit it when adding a new entry on journal, the days appear all crumpled on upper lef side of calendar. So I can't choose the date.
Screenshot_2022-06-26-16-27-48-432_com emeric watchflower

I didn't notice the journal before, it will be very useful.
Android, app v4.0

Parrot Pot : moisture doesn’t recognize

Hi,

I have a Parrot pot and I just downloaded your iOS app.
Everything works fine except he doesn’t recognize the moisture. (See screenshot)
00E29204-A866-49C9-B13B-3F44BE6E232C

Can you please help me?

Best regards,
Daniel

No sensors detected on macOS 12

Describe the bug
I click "launch detection" but nothing happens

Expected behavior
I would expect it to find the sensor

Screenshots
image

Your environment
Please describe the environment you are using:

  1. Mac 12.2.1
  2. Downloaded off your website
  3. version 3.1

Additional context
The sensor is paired with my phone. I'm not sure if this is blocking it finding it? I've turned Bluetooth on my phone but it still doesn't find it. I've also pulled out the battery and put it back in, but that hasn't helped either.

Impossible to export data - Android doesn't find any app.

Thanks a lot for this amazing app. It works generally super well and has a lot of great features!
I downloaded it mainly to be able to export data, but the functionality doesn't work on my Android phone :/

When I go to settings and click on "Export File" at the bottom, the Android share menu opens with a messages saying that "there are no apps that can handle this action". I think that it is because of the line:
Settings.qml#L1672
utilsShare.sendFile(file, "Export file", "text/csv", 0)
I think the problem is "text/csv".
I tried downloading many CSV apps and File managers but nothing works.

I feel that this could be the answer:
https://stackoverflow.com/a/72105124/5539469

If not you could also save the file in the non-protected area of the phone so that a file manager could retrieve it no matter what.

I hope my description is accurate enough and I am willing to test some fixes if you need a tester :D

Thanks again and have a nice day!

No sensors detected on Windows 11

I bought a usb bluetooth adapter for my pc but the app is not detecting any of my sensors. The adapters seems to be installed correctly (appears on the taskbar on windows) but the app is not finding the sensors.
The app works and find the sensors correctly both on my phone and on my tablet though.

Expected behavior
To find the sensors

To Reproduce
Not sure how to reproduce in another pc. Does the bluetooth adapter need to be internal? Does the app not work with usb adapters? Are there any error logs i can check?

Your environment
Windows 11 PC with a Bluetooth 5 usb adapter.

Dutch translation

Hi there,

Your app is growing more and more and starting to flower. Love it!
I'd like to contribute with a Dutch translation. I'm compactly new to contributing on GitHub, so I hope you can help me a bit with the necessary steps.

Kind regards, FYr76

Device database initialization error

Describe the bug
If a new device is added (maybe only the first in the database), and the history is synced the first database entry is initialized with wrong values. The first entry in the history is Moisture 255%, Temperature -0.1°, Luminosity -1 lux, Fertility -1µs/cm (which is probably -1 cast into uint 8bit, -1 for floats as temperature is reported in 0.1°C units AFAIK. These artifacts are present both on the Windows and Android app and probably for all platforms. While not a serious issue itself, this bug is affecting the auto-scaling, as 255% moisture can not be reached in live operation and all subsequent values are scaled down to tiny bars.

Expected behavior
Initialize moisture to 0% and do not use first value for auto-scaling at all

Screenshots
image

Your environment
Win10 WatchFlower v2.1
Android11

Bluetooth disabled notification after allowing bluetooth access M1 macOS 12.4

Describe the bug
Bluetooth disabled notification after allowing bluetooth acces macOS 12.4. When the app launches I give it permission but all devices show as offline with a notification that my bluetooth is disabled. Also granted additional access in privacy & settings > bluetooth, to see if that makes any difference.

iPad version that can be run from Mac App Store on M1 iMac doesn't have this issue

Expected behavior
Sensors show as online

To Reproduce
Steps to reproduce the behavior:

  1. Open app on macOS
  2. grant bluetooth access
  3. Go to Home Screen
  4. See error

Screenshots
Schermafbeelding 2022-06-29 om 16 18 29

Your environment
Please describe the environment you are using:

  1. macOS 12.4, iMac 24 inch late 2020
  2. downloaded 4.1 update just now to see if it was fixed. Bug was introduced in 4.0
  3. 4.1

[Feature Request] BTHome Format Support?

Is your feature request related to a problem? Please describe.
I've got a few sensors that I've flashed with the pvvx/ATC_MiThermometer firmware.

I'm broadcasting with the BTHome format instead of Xiaomi, because it's an open standard that allows devices to broadcast their sensor data and button presses without being tied to a specific manufacturer. It's well-supported by other projects like Home Assistant as well!

Describe the solution you'd like
It would be great if WatchFlower could support the BTHome format too!

The format is quite well-documented: https://bthome.io/format/

Supporting BTHome could also reduce the effort it takes this project to maintain pages like the custom sensor page, and also adds support for cool devices like the open-source b-parasite soil moisture sensor

Issues on Android platform, device history [Android 11]

Hi,

I think I am one of the few people who installed it on a mobile device. I was curious, if I can exchange the proprietary FlowerCare App with GNU software. In overall a lot of effort has been put in WatchFlower for a usable app, that I want to appreciate. However, some things do not work as Intendant or are missing, but first I want to give feedback of core functionalities.

Bug
Registered devices are synced on app start, but syncing with device history needs a manual start for every device with the "Update history" command. The sync routine will not finish, blocking other threads of the app until it is force closed. However, synced history data is visible in the app.

Expected behavior
After history syncing of one device the "update history" should be available for other devices again. Ideally, history syncing should be made available as part of the auto sync queue routine for every device

Details
After multiple scanning of sensors I was able to register 2 MiFlora produced a few years ago, 2 VegTrugs and 2 Miflora of the newest generation produced June 2021. Additionally 1 Thermometer was registered and one themometer with alternative firmware removed. Thermometer history is not supported in WatchFlower.
After every history sync the app will no longer follow new commands like update, blink led,.. but history values are displayed in app. History is not deleted from device after sync, which is very good as history can also be imported to FlowerCare, which resets history after import in Mi's database. I think the sync routine just never finishes or is throwing an error.
In logcat some errors are logged. These errors are produced during switching to watchflower and are there regardless of sync command.

BufferQueueProducer
[SurfaceView - com.emeric.watchlfower/
com.emeric.watchflower.NotificationDispatcher#1]
(id:3c3000027b2, api :0, p: -1, c963) dequeueBuffer:
BufferQueue has no connected producer

From a quick google search this is unreleated to bluetooth and indicates an issue with flutter and garbage collection.

Environment
Android 11 on a rooted device, custom firmware similar to Lineage OS. Flower Care is running fine as well as other bluethooth devices (smart watch, phones, Mi thermometers...)

Sensor doesn't show graph dots

First let me compliment you with your app, Very well made!

I just got some Xiaomi sensors and noticed that suddenly one of them isn't able to show graph dots anymore, which I find a very nice feature. All other behave like they should. Also I just noticed that battery level is at -1% and firmware is UNKN.
Didn't had this issue yesterday. Since I just got them, I can still return them. You think I got a faulty sensor?

[Feature Request] Live mode

What a great android app! I was looking for such an open source solution for a very long time, so thank you so much! :) One function I'm really missing: I'm doing a lot of EC measurements for my hydro plants. Therefore I have to check my EC values regulary. Is it possible to integrate a kind of "live mode" which shows all values on one screen and updates them every 2 seconds or so?! (like in Xiaomi's official app) That would be really awesome!

support for androidx

Hello emericg i love the project but it would be better if you moved to androidx and abandon v4

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.core:core:1.1.0'
implementation 'androidx.annotation:annotation:1.1.0'

[Idea] Implement a generic universal sensors interface

Well, as this is quite a chicken and egg problem, I don't have much hope for this. But for those like me (i.e. tinkerers, playing with their own hardware) it could be quite useful. At least, maybe an interesting discussion would arise.

What I have in mind in particular is BLE Environment Sensing Profile (https://www.bluetooth.com/specifications/assigned-numbers/environmental-sensing-service-characteristics/). I didn't have time to have a deeper view into this, but it looks promising for a generic sensors interface.

The problem with current WatchFlower, is that in order to make your custom BLE controller to be properly detected, you need to implement some obscure proprietary interface. Often it requires to dig deep into the application (WatchFlower) code to understand why it does not work as expected. Furthermore, specific interfaces have specific sensors hardcoded and if you have a different set of sensors, then you might need to drop some out or simulate those that are absent.

In a broader idealistic view, this could also encourage development of devices with a standardized interfaces.

The biggest problem I see with this proposal, that there is no (or rather I don't know) a standard for sensor values history. Some BLE profiles could probably be used for file download, but there would still be no standard for data format in such file.

Keeps crashing on Mac OS 12.3.1


Translated Report (Full Report Below)

Process: WatchFlower [30635]
Path: /Applications/WatchFlower.app/Contents/MacOS/WatchFlower
Identifier: com.emeric.WatchFlower
Version: 3.1 (03010001)
Code Type: X86-64 (Native)
Parent Process: launchd [1]
User ID: 501

Date/Time: 2022-05-11 18:58:26.3874 +0200
OS Version: macOS 12.3.1 (21E258)
Report Version: 12
Bridge OS Version: 6.4 (19P4243)
Anonymous UUID: 4A833609-E329-4A68-8332-F715FFFD4C84

Sleep/Wake UUID: 673A19AA-27B7-4D59-AF6C-5024EB9E4513

Time Awake Since Boot: 470000 seconds

System Integrity Protection: enabled

Crashed Thread: 3 Dispatch queue: com.apple.bluetooth.iobluetooth.coordinatorQueue

Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000000
Exception Codes: 0x0000000000000001, 0x0000000000000000
Exception Note: EXC_CORPSE_NOTIFY

Termination Reason: Namespace SIGNAL, Code 11 Segmentation fault: 11
Terminating Process: exc handler [30635]

VM Region Info: 0 is not in any region. Bytes before following region: 4389900288
REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL
UNUSED SPACE AT START
--->
__TEXT 105a89000-105bbd000 [ 1232K] r-x/r-x SM=COW ...S/WatchFlower

Thread 0:: Dispatch queue: com.apple.main-thread
0 libsystem_kernel.dylib 0x7ff815bfb97a mach_msg_trap + 10
1 libsystem_kernel.dylib 0x7ff815bfbce8 mach_msg + 56
2 AppKit 0x7ff818c424d8 NSWaitUntilHostTime + 102
3 AppKit 0x7ff819162749 -[NSCGLSurface synchronize] + 112
4 AppKit 0x7ff819161cc5 NSCGLSurfaceFlush + 83
5 GLEngine 0x7ffa2df19472 glSwap_Exec + 210
6 OpenGL 0x7ffa2dce29b3 CGLFlushDrawable + 59
7 AppKit 0x7ff818a6d227 -[NSOpenGLContext flushBuffer] + 20
8 libqcocoa.dylib 0x1079749c9 0x10791d000 + 358857
9 QtGui 0x107de5d90 QOpenGLContext::swapBuffers(QSurface*) + 304
10 QtQuick 0x10629e497 0x1061d6000 + 820375
11 QtQuick 0x10631cc87 QQuickWindow::event(QEvent*) + 839
12 QtWidgets 0x106c022f6 QApplicationPrivate::notify_helper(QObject*, QEvent*) + 262
13 QtWidgets 0x106c036ad QApplication::notify(QObject*, QEvent*) + 477
14 QtCore 0x108b43d66 QCoreApplication::notifyInternal2(QObject*, QEvent*) + 166
15 QtGui 0x107d91355 QPlatformWindow::deliverUpdateRequest() + 69
16 libqcocoa.dylib 0x10793f9f2 0x10791d000 + 141810
17 libqcocoa.dylib 0x10792c0cc 0x10791d000 + 61644
18 libdispatch.dylib 0x7ff815a7d317 _dispatch_client_callout + 8
19 libdispatch.dylib 0x7ff815a7fd7c _dispatch_continuation_pop + 453
20 libdispatch.dylib 0x7ff815a91208 _dispatch_source_invoke + 2179
21 libdispatch.dylib 0x7ff815a89bb1 _dispatch_main_queue_drain + 744
22 libdispatch.dylib 0x7ff815a898bb _dispatch_main_queue_callback_4CF + 31
23 CoreFoundation 0x7ff815d3c9c7 CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE + 9
24 CoreFoundation 0x7ff815cfd93f __CFRunLoopRun + 2771
25 CoreFoundation 0x7ff815cfc7ac CFRunLoopRunSpecific + 562
26 HIToolbox 0x7ff81e983ce6 RunCurrentEventLoopInMode + 292
27 HIToolbox 0x7ff81e983a4a ReceiveNextEventCommon + 594
28 HIToolbox 0x7ff81e9837e5 _BlockUntilNextEventMatchingListInModeWithFilter + 70
29 AppKit 0x7ff81872353d _DPSNextEvent + 927
30 AppKit 0x7ff818721bfa -[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:] + 1394
31 AppKit 0x7ff8187142a9 -[NSApplication run] + 586
32 libqcocoa.dylib 0x1079557d4 0x10791d000 + 231380
33 QtCore 0x108b40427 QEventLoop::exec(QFlagsQEventLoop::ProcessEventsFlag) + 471
34 QtCore 0x108b44302 QCoreApplication::exec() + 130
35 WatchFlower 0x105a95f48 main + 3224
36 dyld 0x1076b951e start + 462

Thread 1:
0 libsystem_pthread.dylib 0x7ff815c33f48 start_wqthread + 0

Thread 2:
0 libsystem_pthread.dylib 0x7ff815c33f48 start_wqthread + 0

Thread 3 Crashed:: Dispatch queue: com.apple.bluetooth.iobluetooth.coordinatorQueue
0 ??? 0x0 ???
1 QtBluetooth 0x105ebfab4 0x105e98000 + 162484
2 IOBluetooth 0x7ff824be099e -[IOBluetoothConcreteUserNotification objcNotificationRoutine:] + 192
3 CoreFoundation 0x7ff815cf403c CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER + 12
4 CoreFoundation 0x7ff815d91592 ___CFXRegistrationPost_block_invoke + 49
5 CoreFoundation 0x7ff815d91510 _CFXRegistrationPost + 496
6 CoreFoundation 0x7ff815cc5ca8 _CFXNotificationPost + 735
7 Foundation 0x7ff816afa90e -[NSNotificationCenter postNotificationName:object:userInfo:] + 82
8 IOBluetooth 0x7ff824c20eee -[IOBluetoothCoreBluetoothCoordinator centralManager:connectionEventDidOccur:forPeripheral:] + 176
9 CoreBluetooth 0x7ff827b4f366 -[CBCentralManager handleApplicationConnectionEventDidOccur:] + 262
10 CoreBluetooth 0x7ff827b50d3d -[CBCentralManager handleMsg:args:] + 733
11 CoreBluetooth 0x7ff827b91121 -[CBManager xpcConnectionDidReceiveMsg:args:] + 177
12 CoreBluetooth 0x7ff827b804e2 __30-[CBXpcConnection _handleMsg:]_block_invoke + 66
13 libdispatch.dylib 0x7ff815a7c0cc _dispatch_call_block_and_release + 12
14 libdispatch.dylib 0x7ff815a7d317 _dispatch_client_callout + 8
15 libdispatch.dylib 0x7ff815a83317 _dispatch_lane_serial_drain + 672
16 libdispatch.dylib 0x7ff815a83e30 _dispatch_lane_invoke + 417
17 libdispatch.dylib 0x7ff815a831cd _dispatch_lane_serial_drain + 342
18 libdispatch.dylib 0x7ff815a83e30 _dispatch_lane_invoke + 417
19 libdispatch.dylib 0x7ff815a8deee _dispatch_workloop_worker_thread + 753
20 libsystem_pthread.dylib 0x7ff815c34fd0 _pthread_wqthread + 326
21 libsystem_pthread.dylib 0x7ff815c33f57 start_wqthread + 15

Thread 4:: com.apple.CFSocket.private
0 libsystem_kernel.dylib 0x7ff815c03d5a __select + 10
1 CoreFoundation 0x7ff815d25f79 __CFSocketManager + 641
2 libsystem_pthread.dylib 0x7ff815c384e1 _pthread_start + 125
3 libsystem_pthread.dylib 0x7ff815c33f6b thread_start + 15

Thread 5:
0 libsystem_pthread.dylib 0x7ff815c33f48 start_wqthread + 0

Thread 6:
0 libsystem_pthread.dylib 0x7ff815c33f48 start_wqthread + 0

Thread 7:
0 libsystem_pthread.dylib 0x7ff815c33f48 start_wqthread + 0

Thread 8:
0 libsystem_pthread.dylib 0x7ff815c33f48 start_wqthread + 0

Thread 9:: QQmlThread
0 libsystem_kernel.dylib 0x7ff815c020aa poll + 10
1 QtCore 0x108ba123e qt_safe_poll(pollfd*, unsigned int, timespec const*) + 94
2 QtCore 0x108ba2a6a QEventDispatcherUNIX::processEvents(QFlagsQEventLoop::ProcessEventsFlag) + 810
3 QtCore 0x108b40427 QEventLoop::exec(QFlagsQEventLoop::ProcessEventsFlag) + 471
4 QtCore 0x1089830d3 QThread::exec() + 131
5 QtQml 0x107426bb9 0x10719a000 + 2673593
6 QtCore 0x108983fe9 0x108964000 + 131049
7 libsystem_pthread.dylib 0x7ff815c384e1 _pthread_start + 125
8 libsystem_pthread.dylib 0x7ff815c33f6b thread_start + 15

Thread 10:: CVDisplayLink
0 libsystem_kernel.dylib 0x7ff815bfe3ea __psynch_cvwait + 10
1 libsystem_pthread.dylib 0x7ff815c38aa4 _pthread_cond_wait + 1302
2 CoreVideo 0x7ff81d4b764a CVDisplayLink::waitUntil(unsigned long long) + 370
3 CoreVideo 0x7ff81d4b6848 CVDisplayLink::runIOThread() + 526
4 libsystem_pthread.dylib 0x7ff815c384e1 _pthread_start + 125
5 libsystem_pthread.dylib 0x7ff815c33f6b thread_start + 15

Thread 11:: com.apple.NSEventThread
0 libsystem_kernel.dylib 0x7ff815bfb97a mach_msg_trap + 10
1 libsystem_kernel.dylib 0x7ff815bfbce8 mach_msg + 56
2 CoreFoundation 0x7ff815cfecdd __CFRunLoopServiceMachPort + 319
3 CoreFoundation 0x7ff815cfd368 __CFRunLoopRun + 1276
4 CoreFoundation 0x7ff815cfc7ac CFRunLoopRunSpecific + 562
5 AppKit 0x7ff818890f5e _NSEventThread + 132
6 libsystem_pthread.dylib 0x7ff815c384e1 _pthread_start + 125
7 libsystem_pthread.dylib 0x7ff815c33f6b thread_start + 15

Thread 3 crashed with X86 Thread State (64-bit):
rax: 0x00007f80ab45a5c0 rbx: 0x00007f80b2d94f90 rcx: 0x0100000000000000 rdx: 0x043dfff8581f6275
rdi: 0x00007f80b01a2588 rsi: 0x000070000433fb48 rbp: 0x000070000433fb60 rsp: 0x000070000433fb38
r8: 0x0001000101a40007 r9: 0x00007f80b0300000 r10: 0x0000000001a40007 r11: 0x00007f80b03eecc0
r12: 0x00007f80b019f9d0 r13: 0x0000000105ef72c7 r14: 0x00007f80b019f9d0 r15: 0x00007f80b2d94f90
rip: 0x0000000000000000 rfl: 0x0000000000010246 cr2: 0x0000000000000000

Logical CPU: 0
Error Code: 0x00000014 (no mapping for user instruction read)
Trap Number: 14

Binary Images:
0x7ff815bfa000 - 0x7ff815c31fff libsystem_kernel.dylib () <26a59789-b846-3ed4-96dc-8dbef3c0c8e7> /usr/lib/system/libsystem_kernel.dylib
0x7ff8186e5000 - 0x7ff819572fff com.apple.AppKit (6.9) <92a78ebd-bba5-3f18-a5e1-768c955539d7> /System/Library/Frameworks/AppKit.framework/Versions/C/AppKit
0x7ffa2defc000 - 0x7ffa2e085fff GLEngine (
) /System/Library/Frameworks/OpenGL.framework/Versions/A/Resources/GLEngine.bundle/GLEngine
0x7ffa2dcd5000 - 0x7ffa2dce4fff com.apple.opengl (19.4.3) /System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL
0x10791d000 - 0x107a80fff libqcocoa.dylib () <74139f2b-67bb-37fd-9669-81859feb1650> /Applications/WatchFlower.app/Contents/PlugIns/platforms/libqcocoa.dylib
0x107d63000 - 0x108246fff org.qt-project.QtGui (5.15) /Applications/WatchFlower.app/Contents/Frameworks/QtGui.framework/Versions/5/QtGui
0x1061d6000 - 0x106515fff org.qt-project.QtQuick (5.15) <012747eb-e295-34a9-952d-cf71865fec20> /Applications/WatchFlower.app/Contents/Frameworks/QtQuick.framework/Versions/5/QtQuick
0x106bf1000 - 0x107034fff org.qt-project.QtWidgets (5.15) /Applications/WatchFlower.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets
0x108964000 - 0x108e9ffff org.qt-project.QtCore (5.15) /Applications/WatchFlower.app/Contents/Frameworks/QtCore.framework/Versions/5/QtCore
0x7ff815a7a000 - 0x7ff815ac0fff libdispatch.dylib (
) <31d69d55-9895-326c-ad61-621c5ca87314> /usr/lib/system/libdispatch.dylib
0x7ff815c7f000 - 0x7ff816180fff com.apple.CoreFoundation (6.9) <743f0cb7-e962-3e42-8653-7bd141129561> /System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation
0x7ff81e954000 - 0x7ff81ec47fff com.apple.HIToolbox (2.1.1) <7761967d-a138-33b6-9e3f-5c5420a2eeff> /System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox
0x105a89000 - 0x105bbcfff com.emeric.WatchFlower (3.1) <7ecc7d14-be1c-364e-9755-2b0bf224e07c> /Applications/WatchFlower.app/Contents/MacOS/WatchFlower
0x1076b4000 - 0x10771ffff dyld () /usr/lib/dyld
0x7ff815c32000 - 0x7ff815c3dfff libsystem_pthread.dylib (
) <2f6c275d-7e14-3d31-a924-e1bb41d2415f> /usr/lib/system/libsystem_pthread.dylib
0x0 - 0xffffffffffffffff ??? (*) <00000000-0000-0000-0000-000000000000> ???
0x105e98000 - 0x105efffff org.qt-project.QtBluetooth (5.15) /Applications/WatchFlower.app/Contents/Frameworks/QtBluetooth.framework/Versions/5/QtBluetooth
0x7ff824bbe000 - 0x7ff824c71fff com.apple.Bluetooth (1.0) <290bfa08-4236-3c0e-8b75-c92cbc6183ff> /System/Library/Frameworks/IOBluetooth.framework/Versions/A/IOBluetooth
0x7ff816af1000 - 0x7ff816eacfff com.apple.Foundation (6.9) <3370467f-ef48-301d-97d1-cdc236b7053a> /System/Library/Frameworks/Foundation.framework/Versions/C/Foundation
0x7ff827b3d000 - 0x7ff827bd8fff com.apple.CoreBluetooth (1.0) <671d61f0-c989-3524-a7a9-ad8d9462a748> /System/Library/Frameworks/CoreBluetooth.framework/Versions/A/CoreBluetooth
0x10719a000 - 0x1074edfff org.qt-project.QtQml (5.15) <86e0f613-f31f-38f0-a9e4-756ff38c0276> /Applications/WatchFlower.app/Contents/Frameworks/QtQml.framework/Versions/5/QtQml
0x7ff81d4b4000 - 0x7ff81d505fff com.apple.CoreVideo (1.8) <1f916be5-077b-3103-adce-c69e661cc102> /System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo

External Modification Summary:
Calls made by other processes targeting this process:
task_for_pid: 0
thread_create: 0
thread_set_state: 0
Calls made by this process:
task_for_pid: 0
thread_create: 0
thread_set_state: 0
Calls made by all processes on this machine:
task_for_pid: 0
thread_create: 0
thread_set_state: 0

VM Region Summary:
ReadOnly portion of Libraries: Total=932.1M resident=0K(0%) swapped_out_or_unallocated=932.1M(100%)
Writable regions: Total=239.0M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=239.0M(100%)

                            VIRTUAL   REGION 

REGION TYPE SIZE COUNT (non-coalesced)
=========== ======= =======
Accelerate framework 128K 1
Activity Tracing 256K 1
CG backing stores 2160K 4
CG image 1052K 2
ColorSync 232K 26
CoreAnimation 80K 7
CoreGraphics 12K 2
CoreUI image data 808K 5
Dispatch continuations 64.0M 1
Foundation 16K 1
IOKit 7940K 1
JS JIT generated code 216K 48
JS VM Gigacage 4096K 1
JS VM Isolated Heap 6400K 5
Kernel Alloc Once 8K 1
MALLOC 139.0M 141
MALLOC guard page 32K 7
OpenGL GLSL 256K 3
STACK GUARD 56.0M 12
Stack 21.1M 12
VM_ALLOCATE 980K 136
__DATA 21.5M 354
__DATA_CONST 13.8M 180
__DATA_DIRTY 542K 100
__FONT_DATA 4K 1
__GLSLBUILTINS 5176K 1
__LINKEDIT 657.9M 53
__OBJC_RO 82.6M 1
__OBJC_RW 3200K 2
__TEXT 274.1M 367
__UNICODE 592K 1
dyld private memory 1024K 1
mapped file 381.6M 90
shared memory 768K 15
=========== ======= =======
TOTAL 1.7G 1583


Full Report

{"app_name":"WatchFlower","timestamp":"2022-05-11 18:58:27.00 +0200","app_version":"3.1","slice_uuid":"7ecc7d14-be1c-364e-9755-2b0bf224e07c","build_version":"03010001","platform":1,"bundleID":"com.emeric.WatchFlower","share_with_app_devs":0,"is_first_party":0,"bug_type":"309","os_version":"macOS 12.3.1 (21E258)","incident_id":"97A2B6B5-27D4-4524-B43D-B68D411851EB","name":"WatchFlower"}
{
"uptime" : 470000,
"procLaunch" : "2022-05-11 18:58:23.7517 +0200",
"procRole" : "Foreground",
"version" : 2,
"userID" : 501,
"deployVersion" : 210,
"modelCode" : "MacBookAir9,1",
"procStartAbsTime" : 478195826548147,
"coalitionID" : 103766,
"osVersion" : {
"train" : "macOS 12.3.1",
"build" : "21E258",
"releaseType" : "User"
},
"captureTime" : "2022-05-11 18:58:26.3874 +0200",
"incident" : "97A2B6B5-27D4-4524-B43D-B68D411851EB",
"bug_type" : "309",
"pid" : 30635,
"procExitAbsTime" : 478198457752778,
"cpuType" : "X86-64",
"procName" : "WatchFlower",
"procPath" : "/Applications/WatchFlower.app/Contents/MacOS/WatchFlower",
"bundleInfo" : {"CFBundleShortVersionString":"3.1","CFBundleVersion":"03010001","CFBundleIdentifier":"com.emeric.WatchFlower"},
"storeInfo" : {"deviceIdentifierForVendor":"14B77606-9DBF-5E0B-B750-DB30AFB6F01A","thirdParty":true},
"parentProc" : "launchd",
"parentPid" : 1,
"coalitionName" : "com.emeric.WatchFlower",
"crashReporterKey" : "4A833609-E329-4A68-8332-F715FFFD4C84",
"bridgeVersion" : {"build":"19P4243","train":"6.4"},
"sleepWakeUUID" : "673A19AA-27B7-4D59-AF6C-5024EB9E4513",
"sip" : "enabled",
"vmRegionInfo" : "0 is not in any region. Bytes before following region: 4389900288\n REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL\n UNUSED SPACE AT START\n---> \n __TEXT 105a89000-105bbd000 [ 1232K] r-x/r-x SM=COW ...S/WatchFlower",
"isCorpse" : 1,
"exception" : {"codes":"0x0000000000000001, 0x0000000000000000","rawCodes":[1,0],"type":"EXC_BAD_ACCESS","signal":"SIGSEGV","subtype":"KERN_INVALID_ADDRESS at 0x0000000000000000"},
"termination" : {"flags":0,"code":11,"namespace":"SIGNAL","indicator":"Segmentation fault: 11","byProc":"exc handler","byPid":30635},
"vmregioninfo" : "0 is not in any region. Bytes before following region: 4389900288\n REGION TYPE START - END [ VSIZE] PRT/MAX SHRMOD REGION DETAIL\n UNUSED SPACE AT START\n---> \n __TEXT 105a89000-105bbd000 [ 1232K] r-x/r-x SM=COW ...S/WatchFlower",
"extMods" : {"caller":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"system":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"targeted":{"thread_create":0,"thread_set_state":0,"task_for_pid":0},"warnings":0},
"faultingThread" : 3,
"threads" : [{"id":4005887,"queue":"com.apple.main-thread","frames":[{"imageOffset":6522,"symbol":"mach_msg_trap","symbolLocation":10,"imageIndex":0},{"imageOffset":7400,"symbol":"mach_msg","symbolLocation":56,"imageIndex":0},{"imageOffset":5625048,"symbol":"NSWaitUntilHostTime","symbolLocation":102,"imageIndex":1},{"imageOffset":10999625,"symbol":"-[NSCGLSurface synchronize]","symbolLocation":112,"imageIndex":1},{"imageOffset":10996933,"symbol":"NSCGLSurfaceFlush","symbolLocation":83,"imageIndex":1},{"imageOffset":119922,"symbol":"glSwap_Exec","symbolLocation":210,"imageIndex":2},{"imageOffset":55731,"symbol":"CGLFlushDrawable","symbolLocation":59,"imageIndex":3},{"imageOffset":3703335,"symbol":"-[NSOpenGLContext flushBuffer]","symbolLocation":20,"imageIndex":1},{"imageOffset":358857,"imageIndex":4},{"imageOffset":535952,"symbol":"QOpenGLContext::swapBuffers(QSurface*)","symbolLocation":304,"imageIndex":5},{"imageOffset":820375,"imageIndex":6},{"imageOffset":1338503,"symbol":"QQuickWindow::event(QEvent*)","symbolLocation":839,"imageIndex":6},{"imageOffset":70390,"symbol":"QApplicationPrivate::notify_helper(QObject*, QEvent*)","symbolLocation":262,"imageIndex":7},{"imageOffset":75437,"symbol":"QApplication::notify(QObject*, QEvent*)","symbolLocation":477,"imageIndex":7},{"imageOffset":1965414,"symbol":"QCoreApplication::notifyInternal2(QObject*, QEvent*)","symbolLocation":166,"imageIndex":8},{"imageOffset":189269,"symbol":"QPlatformWindow::deliverUpdateRequest()","symbolLocation":69,"imageIndex":5},{"imageOffset":141810,"imageIndex":4},{"imageOffset":61644,"imageIndex":4},{"imageOffset":13079,"symbol":"_dispatch_client_callout","symbolLocation":8,"imageIndex":9},{"imageOffset":23932,"symbol":"_dispatch_continuation_pop","symbolLocation":453,"imageIndex":9},{"imageOffset":94728,"symbol":"_dispatch_source_invoke","symbolLocation":2179,"imageIndex":9},{"imageOffset":64433,"symbol":"_dispatch_main_queue_drain","symbolLocation":744,"imageIndex":9},{"imageOffset":63675,"symbol":"_dispatch_main_queue_callback_4CF","symbolLocation":31,"imageIndex":9},{"imageOffset":776647,"symbol":"CFRUNLOOP_IS_SERVICING_THE_MAIN_DISPATCH_QUEUE","symbolLocation":9,"imageIndex":10},{"imageOffset":518463,"symbol":"__CFRunLoopRun","symbolLocation":2771,"imageIndex":10},{"imageOffset":513964,"symbol":"CFRunLoopRunSpecific","symbolLocation":562,"imageIndex":10},{"imageOffset":195814,"symbol":"RunCurrentEventLoopInMode","symbolLocation":292,"imageIndex":11},{"imageOffset":195146,"symbol":"ReceiveNextEventCommon","symbolLocation":594,"imageIndex":11},{"imageOffset":194533,"symbol":"_BlockUntilNextEventMatchingListInModeWithFilter","symbolLocation":70,"imageIndex":11},{"imageOffset":255293,"symbol":"_DPSNextEvent","symbolLocation":927,"imageIndex":1},{"imageOffset":248826,"symbol":"-[NSApplication(NSEvent) _nextEventMatchingEventMask:untilDate:inMode:dequeue:]","symbolLocation":1394,"imageIndex":1},{"imageOffset":193193,"symbol":"-[NSApplication run]","symbolLocation":586,"imageIndex":1},{"imageOffset":231380,"imageIndex":4},{"imageOffset":1950759,"symbol":"QEventLoop::exec(QFlagsQEventLoop::ProcessEventsFlag)","symbolLocation":471,"imageIndex":8},{"imageOffset":1966850,"symbol":"QCoreApplication::exec()","symbolLocation":130,"imageIndex":8},{"imageOffset":53064,"symbol":"main","symbolLocation":3224,"imageIndex":12},{"imageOffset":21790,"symbol":"start","symbolLocation":462,"imageIndex":13}]},{"id":4005925,"frames":[{"imageOffset":8008,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":14}]},{"id":4005928,"frames":[{"imageOffset":8008,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":14}]},{"triggered":true,"id":4005967,"threadState":{"r13":{"value":4394545863},"rax":{"value":140190606009792},"rflags":{"value":66118},"cpu":{"value":0},"r14":{"value":140190687033808},"rsi":{"value":123145372826440},"r8":{"value":281479299203079},"cr2":{"value":0},"rdx":{"value":305681791826485877},"r10":{"value":27525127},"r9":{"value":140190688477184},"r15":{"value":140190733127568},"rbx":{"value":140190733127568},"trap":{"value":14,"description":"(no mapping for user instruction read)"},"err":{"value":20},"r11":{"value":140190689455296},"rip":{"value":0},"rbp":{"value":123145372826464},"rsp":{"value":123145372826424},"r12":{"value":140190687033808},"rcx":{"value":72057594037927936},"flavor":"x86_THREAD_STATE","rdi":{"value":140190687045000}},"queue":"com.apple.bluetooth.iobluetooth.coordinatorQueue","frames":[{"imageOffset":0,"imageIndex":15},{"imageOffset":162484,"imageIndex":16},{"imageOffset":141726,"symbol":"-[IOBluetoothConcreteUserNotification objcNotificationRoutine:]","symbolLocation":192,"imageIndex":17},{"imageOffset":479292,"symbol":"CFNOTIFICATIONCENTER_IS_CALLING_OUT_TO_AN_OBSERVER","symbolLocation":12,"imageIndex":10},{"imageOffset":1123730,"symbol":"___CFXRegistrationPost_block_invoke","symbolLocation":49,"imageIndex":10},{"imageOffset":1123600,"symbol":"_CFXRegistrationPost","symbolLocation":496,"imageIndex":10},{"imageOffset":289960,"symbol":"_CFXNotificationPost","symbolLocation":735,"imageIndex":10},{"imageOffset":39182,"symbol":"-[NSNotificationCenter postNotificationName:object:userInfo:]","symbolLocation":82,"imageIndex":18},{"imageOffset":405230,"symbol":"-[IOBluetoothCoreBluetoothCoordinator centralManager:connectionEventDidOccur:forPeripheral:]","symbolLocation":176,"imageIndex":17},{"imageOffset":74598,"symbol":"-[CBCentralManager handleApplicationConnectionEventDidOccur:]","symbolLocation":262,"imageIndex":19},{"imageOffset":81213,"symbol":"-[CBCentralManager handleMsg:args:]","symbolLocation":733,"imageIndex":19},{"imageOffset":344353,"symbol":"-[CBManager xpcConnectionDidReceiveMsg:args:]","symbolLocation":177,"imageIndex":19},{"imageOffset":275682,"symbol":"__30-[CBXpcConnection _handleMsg:]_block_invoke","symbolLocation":66,"imageIndex":19},{"imageOffset":8396,"symbol":"_dispatch_call_block_and_release","symbolLocation":12,"imageIndex":9},{"imageOffset":13079,"symbol":"_dispatch_client_callout","symbolLocation":8,"imageIndex":9},{"imageOffset":37655,"symbol":"_dispatch_lane_serial_drain","symbolLocation":672,"imageIndex":9},{"imageOffset":40496,"symbol":"_dispatch_lane_invoke","symbolLocation":417,"imageIndex":9},{"imageOffset":37325,"symbol":"_dispatch_lane_serial_drain","symbolLocation":342,"imageIndex":9},{"imageOffset":40496,"symbol":"_dispatch_lane_invoke","symbolLocation":417,"imageIndex":9},{"imageOffset":81646,"symbol":"_dispatch_workloop_worker_thread","symbolLocation":753,"imageIndex":9},{"imageOffset":12240,"symbol":"_pthread_wqthread","symbolLocation":326,"imageIndex":14},{"imageOffset":8023,"symbol":"start_wqthread","symbolLocation":15,"imageIndex":14}]},{"id":4005973,"name":"com.apple.CFSocket.private","frames":[{"imageOffset":40282,"symbol":"__select","symbolLocation":10,"imageIndex":0},{"imageOffset":683897,"symbol":"__CFSocketManager","symbolLocation":641,"imageIndex":10},{"imageOffset":25825,"symbol":"_pthread_start","symbolLocation":125,"imageIndex":14},{"imageOffset":8043,"symbol":"thread_start","symbolLocation":15,"imageIndex":14}]},{"id":4005974,"frames":[{"imageOffset":8008,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":14}]},{"id":4005975,"frames":[{"imageOffset":8008,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":14}]},{"id":4005976,"frames":[{"imageOffset":8008,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":14}]},{"id":4005977,"frames":[{"imageOffset":8008,"symbol":"start_wqthread","symbolLocation":0,"imageIndex":14}]},{"id":4005980,"name":"QQmlThread","frames":[{"imageOffset":32938,"symbol":"poll","symbolLocation":10,"imageIndex":0},{"imageOffset":2347582,"symbol":"qt_safe_poll(pollfd*, unsigned int, timespec const*)","symbolLocation":94,"imageIndex":8},{"imageOffset":2353770,"symbol":"QEventDispatcherUNIX::processEvents(QFlagsQEventLoop::ProcessEventsFlag)","symbolLocation":810,"imageIndex":8},{"imageOffset":1950759,"symbol":"QEventLoop::exec(QFlagsQEventLoop::ProcessEventsFlag)","symbolLocation":471,"imageIndex":8},{"imageOffset":127187,"symbol":"QThread::exec()","symbolLocation":131,"imageIndex":8},{"imageOffset":2673593,"imageIndex":20},{"imageOffset":131049,"imageIndex":8},{"imageOffset":25825,"symbol":"_pthread_start","symbolLocation":125,"imageIndex":14},{"imageOffset":8043,"symbol":"thread_start","symbolLocation":15,"imageIndex":14}]},{"id":4005994,"name":"CVDisplayLink","frames":[{"imageOffset":17386,"symbol":"__psynch_cvwait","symbolLocation":10,"imageIndex":0},{"imageOffset":27300,"symbol":"_pthread_cond_wait","symbolLocation":1302,"imageIndex":14},{"imageOffset":13898,"symbol":"CVDisplayLink::waitUntil(unsigned long long)","symbolLocation":370,"imageIndex":21},{"imageOffset":10312,"symbol":"CVDisplayLink::runIOThread()","symbolLocation":526,"imageIndex":21},{"imageOffset":25825,"symbol":"_pthread_start","symbolLocation":125,"imageIndex":14},{"imageOffset":8043,"symbol":"thread_start","symbolLocation":15,"imageIndex":14}]},{"id":4005995,"name":"com.apple.NSEventThread","frames":[{"imageOffset":6522,"symbol":"mach_msg_trap","symbolLocation":10,"imageIndex":0},{"imageOffset":7400,"symbol":"mach_msg","symbolLocation":56,"imageIndex":0},{"imageOffset":523485,"symbol":"__CFRunLoopServiceMachPort","symbolLocation":319,"imageIndex":10},{"imageOffset":516968,"symbol":"__CFRunLoopRun","symbolLocation":1276,"imageIndex":10},{"imageOffset":513964,"symbol":"CFRunLoopRunSpecific","symbolLocation":562,"imageIndex":10},{"imageOffset":1752926,"symbol":"_NSEventThread","symbolLocation":132,"imageIndex":1},{"imageOffset":25825,"symbol":"_pthread_start","symbolLocation":125,"imageIndex":14},{"imageOffset":8043,"symbol":"thread_start","symbolLocation":15,"imageIndex":14}]}],
"usedImages" : [
{
"source" : "P",
"arch" : "x86_64",
"base" : 140703493496832,
"size" : 229376,
"uuid" : "26a59789-b846-3ed4-96dc-8dbef3c0c8e7",
"path" : "/usr/lib/system/libsystem_kernel.dylib",
"name" : "libsystem_kernel.dylib"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 140703538499584,
"CFBundleShortVersionString" : "6.9",
"CFBundleIdentifier" : "com.apple.AppKit",
"size" : 15261696,
"uuid" : "92a78ebd-bba5-3f18-a5e1-768c955539d7",
"path" : "/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit",
"name" : "AppKit",
"CFBundleVersion" : "2113.40.127"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 140712489238528,
"size" : 1613824,
"uuid" : "a4643d6b-1680-3258-a641-b26b57e5db00",
"path" : "/System/Library/Frameworks/OpenGL.framework/Versions/A/Resources/GLEngine.bundle/GLEngine",
"name" : "GLEngine"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 140712486981632,
"CFBundleShortVersionString" : "19.4.3",
"CFBundleIdentifier" : "com.apple.opengl",
"size" : 65536,
"uuid" : "d33c33c7-588a-3f42-80d0-fb3bce6ba674",
"path" : "/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL",
"name" : "OpenGL",
"CFBundleVersion" : "19.4.3"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 4421963776,
"size" : 1458176,
"uuid" : "74139f2b-67bb-37fd-9669-81859feb1650",
"path" : "/Applications/WatchFlower.app/Contents/PlugIns/platforms/libqcocoa.dylib",
"name" : "libqcocoa.dylib"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 4426444800,
"CFBundleShortVersionString" : "5.15",
"CFBundleIdentifier" : "org.qt-project.QtGui",
"size" : 5128192,
"uuid" : "fca9071f-b27e-3425-a631-1db0eecab0d9",
"path" : "/Applications/WatchFlower.app/Contents/Frameworks/QtGui.framework/Versions/5/QtGui",
"name" : "QtGui",
"CFBundleVersion" : "5.15.2"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 4397555712,
"CFBundleShortVersionString" : "5.15",
"CFBundleIdentifier" : "org.qt-project.QtQuick",
"size" : 3407872,
"uuid" : "012747eb-e295-34a9-952d-cf71865fec20",
"path" : "/Applications/WatchFlower.app/Contents/Frameworks/QtQuick.framework/Versions/5/QtQuick",
"name" : "QtQuick",
"CFBundleVersion" : "5.15.2"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 4408152064,
"CFBundleShortVersionString" : "5.15",
"CFBundleIdentifier" : "org.qt-project.QtWidgets",
"size" : 4472832,
"uuid" : "f1f5c798-35ec-36e4-84da-0e1f61a45186",
"path" : "/Applications/WatchFlower.app/Contents/Frameworks/QtWidgets.framework/Versions/5/QtWidgets",
"name" : "QtWidgets",
"CFBundleVersion" : "5.15.2"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 4439031808,
"CFBundleShortVersionString" : "5.15",
"CFBundleIdentifier" : "org.qt-project.QtCore",
"size" : 5488640,
"uuid" : "fdf8fa65-9d84-348e-8937-18f76bf48e4a",
"path" : "/Applications/WatchFlower.app/Contents/Frameworks/QtCore.framework/Versions/5/QtCore",
"name" : "QtCore",
"CFBundleVersion" : "5.15.2"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 140703491923968,
"size" : 290816,
"uuid" : "31d69d55-9895-326c-ad61-621c5ca87314",
"path" : "/usr/lib/system/libdispatch.dylib",
"name" : "libdispatch.dylib"
},
{
"source" : "P",
"arch" : "x86_64h",
"base" : 140703494041600,
"CFBundleShortVersionString" : "6.9",
"CFBundleIdentifier" : "com.apple.CoreFoundation",
"size" : 5251072,
"uuid" : "743f0cb7-e962-3e42-8653-7bd141129561",
"path" : "/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation",
"name" : "CoreFoundation",
"CFBundleVersion" : "1858.112"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 140703641714688,
"CFBundleShortVersionString" : "2.1.1",
"CFBundleIdentifier" : "com.apple.HIToolbox",
"size" : 3096576,
"uuid" : "7761967d-a138-33b6-9e3f-5c5420a2eeff",
"path" : "/System/Library/Frameworks/Carbon.framework/Versions/A/Frameworks/HIToolbox.framework/Versions/A/HIToolbox",
"name" : "HIToolbox"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 4389900288,
"CFBundleShortVersionString" : "3.1",
"CFBundleIdentifier" : "com.emeric.WatchFlower",
"size" : 1261568,
"uuid" : "7ecc7d14-be1c-364e-9755-2b0bf224e07c",
"path" : "/Applications/WatchFlower.app/Contents/MacOS/WatchFlower",
"name" : "WatchFlower",
"CFBundleVersion" : "03010001"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 4419436544,
"size" : 442368,
"uuid" : "dd9e80de-fb3b-349b-96a4-46874ad34d11",
"path" : "/usr/lib/dyld",
"name" : "dyld"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 140703493726208,
"size" : 49152,
"uuid" : "2f6c275d-7e14-3d31-a924-e1bb41d2415f",
"path" : "/usr/lib/system/libsystem_pthread.dylib",
"name" : "libsystem_pthread.dylib"
},
{
"size" : 0,
"source" : "A",
"base" : 0,
"uuid" : "00000000-0000-0000-0000-000000000000"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 4394156032,
"CFBundleShortVersionString" : "5.15",
"CFBundleIdentifier" : "org.qt-project.QtBluetooth",
"size" : 425984,
"uuid" : "d0e58b71-ddfe-33ef-8790-630c91290f53",
"path" : "/Applications/WatchFlower.app/Contents/Frameworks/QtBluetooth.framework/Versions/5/QtBluetooth",
"name" : "QtBluetooth",
"CFBundleVersion" : "5.15.2"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 140703744909312,
"CFBundleShortVersionString" : "1.0",
"CFBundleIdentifier" : "com.apple.Bluetooth",
"size" : 737280,
"uuid" : "290bfa08-4236-3c0e-8b75-c92cbc6183ff",
"path" : "/System/Library/Frameworks/IOBluetooth.framework/Versions/A/IOBluetooth",
"name" : "IOBluetooth",
"CFBundleVersion" : "1"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 140703509188608,
"CFBundleShortVersionString" : "6.9",
"CFBundleIdentifier" : "com.apple.Foundation",
"size" : 3915776,
"uuid" : "3370467f-ef48-301d-97d1-cdc236b7053a",
"path" : "/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation",
"name" : "Foundation",
"CFBundleVersion" : "1858.112"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 140703794712576,
"CFBundleShortVersionString" : "1.0",
"CFBundleIdentifier" : "com.apple.CoreBluetooth",
"size" : 638976,
"uuid" : "671d61f0-c989-3524-a7a9-ad8d9462a748",
"path" : "/System/Library/Frameworks/CoreBluetooth.framework/Versions/A/CoreBluetooth",
"name" : "CoreBluetooth",
"CFBundleVersion" : "1"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 4414087168,
"CFBundleShortVersionString" : "5.15",
"CFBundleIdentifier" : "org.qt-project.QtQml",
"size" : 3489792,
"uuid" : "86e0f613-f31f-38f0-a9e4-756ff38c0276",
"path" : "/Applications/WatchFlower.app/Contents/Frameworks/QtQml.framework/Versions/5/QtQml",
"name" : "QtQml",
"CFBundleVersion" : "5.15.2"
},
{
"source" : "P",
"arch" : "x86_64",
"base" : 140703620087808,
"CFBundleShortVersionString" : "1.8",
"CFBundleIdentifier" : "com.apple.CoreVideo",
"size" : 335872,
"uuid" : "1f916be5-077b-3103-adce-c69e661cc102",
"path" : "/System/Library/Frameworks/CoreVideo.framework/Versions/A/CoreVideo",
"name" : "CoreVideo",
"CFBundleVersion" : "0.0"
}
],
"sharedCache" : {
"base" : 140703490453504,
"size" : 15224815616,
"uuid" : "6cc5ecdc-5119-37f0-9a85-4f48a50f5f78"
},
"vmSummary" : "ReadOnly portion of Libraries: Total=932.1M resident=0K(0%) swapped_out_or_unallocated=932.1M(100%)\nWritable regions: Total=239.0M written=0K(0%) resident=0K(0%) swapped_out=0K(0%) unallocated=239.0M(100%)\n\n VIRTUAL REGION \nREGION TYPE SIZE COUNT (non-coalesced) \n=========== ======= ======= \nAccelerate framework 128K 1 \nActivity Tracing 256K 1 \nCG backing stores 2160K 4 \nCG image 1052K 2 \nColorSync 232K 26 \nCoreAnimation 80K 7 \nCoreGraphics 12K 2 \nCoreUI image data 808K 5 \nDispatch continuations 64.0M 1 \nFoundation 16K 1 \nIOKit 7940K 1 \nJS JIT generated code 216K 48 \nJS VM Gigacage 4096K 1 \nJS VM Isolated Heap 6400K 5 \nKernel Alloc Once 8K 1 \nMALLOC 139.0M 141 \nMALLOC guard page 32K 7 \nOpenGL GLSL 256K 3 \nSTACK GUARD 56.0M 12 \nStack 21.1M 12 \nVM_ALLOCATE 980K 136 \n__DATA 21.5M 354 \n__DATA_CONST 13.8M 180 \n__DATA_DIRTY 542K 100 \n__FONT_DATA 4K 1 \n__GLSLBUILTINS 5176K 1 \n__LINKEDIT 657.9M 53 \n__OBJC_RO 82.6M 1 \n__OBJC_RW 3200K 2 \n__TEXT 274.1M 367 \n__UNICODE 592K 1 \ndyld private memory 1024K 1 \nmapped file 381.6M 90 \nshared memory 768K 15 \n=========== ======= ======= \nTOTAL 1.7G 1583 \n",
"legacyInfo" : {
"threadTriggered" : {
"queue" : "com.apple.bluetooth.iobluetooth.coordinatorQueue"
}
},
"trialInfo" : {
"rollouts" : [
{
"rolloutId" : "6112dda2fc54bc3389840642",
"factorPackIds" : {
"SIRI_DICTATION_ASSETS" : "620aec83b02b354d3afd2f50"
},
"deploymentId" : 240000115
},
{
"rolloutId" : "607844aa04477260f58a8077",
"factorPackIds" : {
"SIRI_MORPHUN_ASSETS" : "6103050cbfe6dc472e1c982a"
},
"deploymentId" : 240000066
}
],
"experiments" : [

]
}
}

Model: MacBookAir9,1, BootROM 1731.100.130.0.0 (iBridge: 19.16.14243.0.0,0), 4 processors, Quad-Core Intel Core i7, 1.2 GHz, 16 GB, SMC
Graphics: Intel Iris Plus Graphics, Intel Iris Plus Graphics, Built-In
Display: Color LCD, 2560 x 1600 Retina, Main, MirrorOff, Online
Memory Module: BANK 0/ChannelA-DIMM0, 8 GB, LPDDR4X, 3733 MHz, SK Hynix, H9HCNNNFBMALPR-NEE
Memory Module: BANK 2/ChannelB-DIMM0, 8 GB, LPDDR4X, 3733 MHz, SK Hynix, H9HCNNNFBMALPR-NEE
AirPort: spairport_wireless_card_type_wifi (0x14E4, 0x870), wl0: Jul 16 2021 18:25:13 version 16.20.328.0.3.6.105 FWID 01-30be2b3a
Bluetooth: Version (null), 0 services, 0 devices, 0 incoming serial ports
Network Service: Wi-Fi, AirPort, en0
USB Device: USB31Bus
USB Device: USB31Bus
USB Device: T2Bus
USB Device: Touch Bar Backlight
USB Device: Apple Internal Keyboard / Trackpad
USB Device: Headset
USB Device: Ambient Light Sensor
USB Device: FaceTime HD Camera (Built-in)
USB Device: Apple T2 Controller
Thunderbolt Bus: MacBook Air, Apple Inc., 86.0

HHCCJCY10 not discovered on Android 12 or Windows 11

Describe the bug
I've purchased the new Flower Care HHCCJCY10 device (update from the previous device HHCCJCY01) which is listed as compatible device. The device is not found by WatchFlower under Windows 11 nor on Android 12.

Details:

  • Scanning for BT devices on Windows 11 and Android 12 (Pixel 6 Pro) I see the device available named as "TY" with a BT MAC address starting with DC:23:4D
  • DC:23:4D doesn't appear as a valid vendor in any of the lookup tools I'm using.
  • The device pairs with the Tuya "Smart Life" application as a device "HC010" and is able to display the desired information.
  • The "Flower Care" app does not find any supported devices.
  • Selecting the "devices" view in WatchFlower on Windows shows my device, again listed as "TY"
  • Selecting "Launch detection" in WatchFlower on Windows detects no devices
  • I purchased the Android version as a test in case there is a problem with Windows 11 (as noted elsewhere). Pressing "Launch detection" in the Android app similarly discoverers no available devices.

Expected behavior
I expect to be able to discover and pair the device as demonstrated in the "Smart Life" application

To Reproduce
Steps to reproduce the behavior:

  1. Go to 'Launch Detection' on Windows 11 or Android 12
  2. Observe no device detected

Screenshots
N/A

Your environment
Please describe the environment you are using:

  1. Windows 11 and Android 12

Watchflower pasted from the clipboard

Describe the bug
Got a message telling me that watchflower accessed my clipboard.

Expected behavior
Should not access my clipboard. what's happening here?

Screenshots
Screenshot_20211214-010102

Your environment
Android 12

WatchFlower.exe just hangs with a blank screen

Describe the bug
The program worked fine for a couple of weeks.
Now since a couple of days it won't open anymore. The program starts to the Windows tray, but on right click "show" or "settings" a blank screen open with the title "Watchflower (not responding)" and just hangs. Waited a couple of minutes but no success. Taskmanager shows WatchFlower.exe with a constant 6% CPU (16T CPU, shows 1 thread almost at max constantly) and a steady 85.224KB RAM with no change. Seems like it's stuck in some kind of loop.

Expected behavior
I expected the program to open.
It worked (sort of) fine for a couple of weeks.

To Reproduce
Don't know how to reproduce on your system

Screenshots
afbeelding

afbeelding

afbeelding

Your environment
Windows 10 x64 21H1
AMD Ryzen 7 3700X / 32GB RAM / SSD storage
Watchflower 2.1 x64 for windows zip from the site

Additional context
I tried renaming the "DB" file in %AppData%\WatchFlower and a new database is created but the problem is not solved.

cosmetic gui remarks

First of all thanks for the great software. The chinese original is very talkative and dont works without an internet connection. The rights request is also a joke. Your software is super exemplary !

Unfortunately now a few remarks:
The curve of the light intensity is not optimal for scaling. The blue curve and the dots are noticeably thicker than the others. Unfortunately, in the German translation the labels of the measured values are cut off on the left side. ( Android Version 1.4 )
Also a little translation failor: minute(s) in german Minute(n)
vor 1 hour(s) aktualisiert should be vor 1 Stunde(n)....
Screenshot_2020-07-09-20-43-45

Regards Peter

Keeps crashing on windows 10

Im sorry to report It error here with event 1000 application error.
Its a clean 1.0. Added all my devices (50) but after a few moments the application closes and there is an error 1000 in my event viewer.

–––

Log Name: Application
Source: Application Error
Date: 5/9/2021 19:20:10
Event ID: 1000
Task Category: (100)
Level: Error
User: N/A
Computer: WINDOWS10-VR
Description:
Faulting application name: WatchFlower.exe, version: 1.0.0.0, time stamp: 0x606743ed
Faulting module name: Qt5Bluetooth.dll, version: 5.15.2.0, time stamp: 0x5fa51110
Exception code: 0xc0000005
Fault offset: 0x0000000000043b6a
Faulting process id: 0x4cec
Faulting application start time: 0x01d744f77e064cc3
Faulting application path: C:*\WatchFlower-1.0-win64\WatchFlower.exe
Faulting module path: C:*
\WatchFlower-1.0-win64\Qt5Bluetooth.dll
Report Id: 5d3ea902-15c1-46b1-85b7-39843d93933a
Faulting package full name:
Faulting package-relative application ID:
Event Xml:



1000
0
2
100
0
0x80000000000000

398730


Application



WatchFlower.exe
1.0.0.0
606743ed
Qt5Bluetooth.dll
5.15.2.0
5fa51110
c0000005
0000000000043b6a
4cec
01d744f77e064cc3
C:*\WatchFlower-1.0-win64\WatchFlower.exe
C:*
\WatchFlower-1.0-win64\Qt5Bluetooth.dll
5d3ea902-15c1-46b1-85b7-39843d93933a





Invalid device name: MHOC401

Hi!
I can't connect one of the supported device because the device name is incorrect in the source code.
MMC Digital Hygrometer 2 (EInk) - MHOC401
The correct name is "MHO-C401".
Probably MHOC303 is also not correct, but I don't have that device.

[Feature request] Blacklist device(s)

Hi, I love this app. It is so great that I bought more sensors for my house.
Unfortunately, the application detects also my neighbour's sensor as I live in apartment in a city.
So, could it be possible to implement a blacklist somewhere to avoid this situation ?

Thank's a lot 👍🏻

Scale and threshold values

Is there a reason, why scale and the threshold values are much lower than they are provided by the sensor (and even by the plant db?)
E.g. for the plant showing in the screenshots, the plant db values are:
soil moisture: 22-70
soil fertility: 200 - 2500
light intensity: 3500 - 120000
temperature: 10 - 35

image
image

Range on fertility and light parameters inadequate

For some reason fertility and sunlight had been limited to 1k and 10k in this app. This is not ideal, as some plants has an upper limit for fertility at 2k and sunlight as much as 65k. I have a few semi-shadow plants who want 25-30k of sunlight. Topping out as low as 10k makes it difficult to assess whether they have ideal light conditions. This limitation is not in the stock app, but I really wish I didn't have to use that because - well - it sucks. Please update the range of these parameters to cover more plants.

[Feature Request] Please add Xiaomi Qingping Bluetooth Smart Alarm Clock support

Is your feature request related to a problem? Please describe.
While this device is indeed an alarm clock, it also has temperature and humidity sensor. Unfortunately I cannot use it with your app right now, but I saw Xiaomi Digital Hygrometer Alarm Clock and QingPing Temp RH Lite clock supported, so I hope it's possible for my device to be integrated.

Describe the solution you'd like
WatchFlower discovering the device via Bluetooth and connecting to it.

Describe alternatives you've considered
Buying another device

Additional context
Clock in question (pic from aliexpress):
https://ae01.alicdn.com/kf/H335313b8c5a3472c98a790ef9d09d550S/Xiaomi-Qingping-Bluetooth-Alarm-Clock-3-in-1-Temperature-Humidity-Sensor-Monitor-Mijia-Night-Light-Mihome.jpg

Clock's official page from Quingping: https://www.qingping.co/bluetooth-alarm-clock/overview

Parrot Flower Power no data

Describe the bug
Managed to connect to Parrot Flower Power. It's syncing, when clicking flash LED, it's flashing. However, there is no data from sensors.

Expected behavior
Should display the data from sensors, for instance, temperature should be +5 C right now

To Reproduce

  1. Turn on Flower Power.
  2. Launch Watch Flower app.
  3. Go to Home screen and wait for the app to see Flower Power
  4. Click on Flower Power and click Sync

Screenshots
image

Your environment
Please describe the environment you are using:

  1. Windows 11 x64 build 22623.1095 Insider Preview Beta
  2. Github
  3. 4.1

Grow Care Garden(Flora Care MAX) issue

Hi,
There're several glitches with my Grow Care Garden sensor.( VegTrug "Grow Care Garden" (GCLS002). Firmware: 3.6.6

  1. Fertility and Moisture disappeared. I kill the app and restart again and it appeared.(in the image)
    photo_2022-01-12 23 52 45

  2. Blink LED function not work. It worked with Mi Flora(Indoor version)

  3. History data is wrong. The temperature displayed is 31.6 but in history it showed 9.6 celcius. Our country is hot and never go below 20. Fertility also the same issue, it showed 0

Logo Proposal

Hello @emericg Good day!! I am a graphic artist and an open source enthusiast.. I would like to contribute to your project by designing a logo for free. Actually I already designed one for this project as I found it interesting. I hope you like it and consider using it! -Tobaloidee

  • The design is simple but memorable. It is unique as it embodies the initial of your project which is "W" placed in part of the flower/plant. Still open for your suggestions if you have any. :)

watchflower-01-01-01-01

How it will look in ReadME
readme

If you like it, I will finalize the files and make a PR for it!

Plant database en share info online

Hello,

I downloaded your app to used is for my VegTrug plant sensor.

Can you also connect a specific plant to the sensor from a plant database. At the moment it’s only a plain text field to fill in a regular plant name?

Can you also share the info from te app on a website or social media, live overview?

Thx in advance

[Feature Request] Background notifications on iOS

First of all, thanks for a wonderful app and thanks for pushing it to App Store.

Feature request:
Notifications on iOS (and Android for those using it) would be highly appreciated. This would allow me to know when to water the plants instead of having to check the app regularly. Preferably it would be possible to set certain limits on moisture, temperature, luminosity etc., e.g. when moisture is below X -> send notification.

[Feature Request] IFTTT integration

Would be great if the app could trigger IFTTT actions. This could be useful for triggering alerts on multiple devices (i.ex low moisture alert would send an e-mail) and also enable integration with smart home devices (scene triggers)

[Feature Request] Data Sync, Data Download, and Historical Data Fetch

Hi,

I recently downloaded WatchFlower on desktop (macOS) and iPhone for the graphing feature. Overall, great app and very polished looking on both platforms. Thanks for making this app! After working with the app on both platforms, I have a few new feature requests:

  1. Please add the ability to sync data between the mobile and desktop app. I mostly use my phone to collect data around the house and in the garden but like to view the data/graphs on the desktop app.
  2. Please add ability to download data. The Xiaomi/North Plant Monitor has a data download feature that exports the data as a csv file (example attached, converted to xlsx for github), which is great for importing the data into other graphing and data analysis apps.
  3. Finally, the sensors seem to have some on board memory for storing data. The Xiaomi app is able to collect the data points between syncs with the sensors but WatchFlower only collects a single data point for each sync. This is also reflected in the csv file which shows the sensor collects a data point every hour. This api gives the UUIDs and handles to read/clear the historical data: https://github.com/vrachieru/xiaomi-flower-care-api
    Please give WatchFlower the ability to read and plot the historical data to make the graphing feature even better: more data = more fun :) !

Thanks,
Phillip
2020-05-02-15-HHCC.xlsx

build instructions

I'm trying to build WatchFlower for Android, but sadly I seem to fail. I installed Qt Creator (as this seems the only way to get qt6 installed on Linux), installed the bluetooth module and chart module. The build for arm64-v8a succeeded with some warnings and a java error (of no consequence I think)

The generated apk I tried to install but upon opening the app, it just closes again.

Are there any up-to-date build instructions available for Android devices ? How could I debug this (building the x86 and then emulation?) ?

Also more of a question, would you be open to sell your builds somewhere other then google's platform such as eg. https://itch.io ? I'm not a big fan of giving google/my phone my creditcard info.

thanks !

Custom high/low values per device

Looking at plant monitoring sensors, the reading have (sane) defaults for low and high values (e.g. moisture) depending on whether the plant is inside or outside. It's neat, but it would be great to be able to customise that for plants with specific needs (e.g. succulents don't need as much moisture as strawberries).

[Feature Request] Firmware update

Will you add Firmware Update (and also downgrade) for the xiaomi plant sensors in the near future?

Otherwise I will still need the offcial App in parallel.

Translating

Any guide how to help on translation? Or just take one of the TS files?

Windows app find flower care module but no data

The last version detect all my flower care module but fail to retreive data.
The module is connecting, updating and then go offline without any change...
I tired on 3 pcs with 3 different bluetooth (An asus BT400, an intel/wifi module and can't remember the last one). All of them have similar behaviour.
image
Is there any log or debug mode to find what's happening?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.