Zigbee flower sensors for soil moisture + light + temperature + humidity?

Tags: #<Tag:0x00007fc40d4c8370> #<Tag:0x00007fc4185cf100> #<Tag:0x00007fc4185ce3e0>

Does anyone other than me think there is a need for a small battery-powered Zigbee flower sensor for indoor houseplants with features such as; capacitive soil moisture + lumen + temperature + humidity sensors, preferably packaked in a product designed to look good and work well with third-party home automation software/hubs, as well as being small and relatively inexpensive as want one for each and every flower-pot inside the house?

Does anyone know of a low-cost Zigbee device that could match all of most of those requirements?

Basically what she would like is a Zigbee based alternative that looks and cost like “Xiaomi Mi Flora” (as Xiaomi MiFlora uses Bluetooth/BLE without mesh support and has infamously very poor reception).

image

LilyGO TTGO HiGrow is ESP32 WiFi-based but otherwise almost perfectly matches that description however I would much prefer it to use Zigbee and some type of standard battery that is widly available.

image

As far as I know, Spruce Spoil Moisture Sensors by Plaid Systems is the only Zigbee product that you can already buy which matches most the description, except that is relatively expensive and large (plus it has an ugly colour and design that does not fit indoor flowers IMHO, though in its defence its size and price are probably due to it being fully waterproof as primarily design to outdoor use in your vegetable garden rather than potted plants indoors).

image

DIYRuZ (modkam.ru) community do have an open-source hardware design for a Zigbee DIY Soil Moisture Sensor Flower board but I for one would not mind seeing a version similar to that as a commercial Zigbee flower sensor available as a complete kit with enclosure and/or an all finished product available for purchase.

4 Likes

Hi, I am in search for the same solution but not for my flowers. I use a seed propagator without a thermostat and want to stick a soil temperature zigbee sensor so it can trigger on/off the zigbee outlet where the propagator is connected to. Please kindly share if you find out options from outside this forum! Thanks for your post!

I posted same question in https://github.com/zigpy/zigpy/discussions/647 but no suggestions yet.

I’m looking as well for an outdoor Zigbee soil moisture sensor.

Spruce Soil Moisture Sensor are designed to work outside in vegetable gardens, but are expensive.

They are also rather ugly and have relativly large design, however usually don’t matter in a garden.

Any new discoveries in this vector of nterest? I just bought miflora and the bluetooth does not even cross my windows five meters away from RPi, kind of useless in our concrete-steel house

No specific device news, but in related news, Espressif announced ESP32-H2 SoC with Zigbee support (thought there are no news released about Zigbee stack, SDK, libraries or code for it as of yet).

ESP32-H2 RISC-V WiSoC announced with Zigbee 3, Thread, and Bluetooth LE 5.2 - CNX Software (cnx-software.com)

Announcing ESP32-H2, an IEEE 802.15.4 + Bluetooth 5.2 (LE) RISC-V SoC | Espressif Systems

I do not measure soil moisture, but the speed at which the flower leafs go down. I use laser ranger once an 4 hours and I set up derivative sensor to calculate movement per hour and if it is more than 5mm/hr it sends me Telegram notification. The leafs are BIG, so for smaller flower speed should be less. It works for about three months on battery charge. I also measure battery. If you are interested in esphome yaml it is here:

globals:
  - id: bc2
    type: long int
    restore_value: yes
    initial_value: "0"

  - id: a_input
    restore_value: no
    type: float
    initial_value: "0.0"

  - id: d_input
    restore_value: no
    type: float
    initial_value: "0.0"

  - id: i
    type: char
    restore_value: no
    initial_value: "0"

  - id: d_count
    type: char
    restore_value: no
    initial_value: "0"

esphome:
  name: mqtt_flower2
  platform: esp8266
  board: esp12e

  on_loop:
    then:
      lambda: |-
        id(i)++;
        if (id(i) <= 10) {
          id(internal_a0).update();
          id(one_d).update();
          id(a_input) = id(a_input) + id(internal_a0).state/10.0;
          if (isnan(id(one_d).state)) {
            //ESP_LOGD("main", "################################ Error NAN");
            }
          else {
            id(d_count)++;
            id(d_input) = id(d_input) + id(one_d).state;
            }
          //ESP_LOGD("main", "########## a_input: %f, d_input: %f, one_d: %f", id(a_input), id(d_input), id(one_d).state);
          delay(50);
          }
        if (id(i) == 10) {
          id(bc2)++;
          if((id(bc2)%4 == 1) || (id(a_input) <= 3.1)) {  
            pinMode(14, INPUT);
            float di = id(d_input)/id(d_count);
            id(flower2_battery).publish_state(id(a_input));
            id(flower2_distance).publish_state(di);
            //ESP_LOGD("main", "################### Sending values. d_count: %d, one_d: %f, d_input: %f, Volts: %f, BC2: %d, Millis: %d", id(d_count), id(one_d).state, di, id(a_input), id(bc2), millis());
            }
          else {
            pinMode(14, INPUT);
            id(should_sleep).publish_state(0);
            id(should_sleep).publish_state(1);
            //ESP_LOGD("main", "################### NOT sending values. one_d: %f, d_input: %f, Volts: %f, BC2: %d, Millis: %d", id(one_d), id(d_input), id(a_input), id(bc2), millis());
            }
          }
        if (id(i) > 11) {
          id(i) = 11;
          }
        if (millis() > 30000) {
          pinMode(13, INPUT);
          ESP.deepSleep(1800000000, WAKE_RF_DEFAULT);
          }
        delay(50);

wifi:
  ssid: "IoT"
  password: "xxxxxxxxxx"
  manual_ip:
    static_ip: 10.0.0.48
    gateway: 10.0.0.138
    subnet: 255.255.255.0
    dns1: 8.8.8.8
    dns2: 8.8.4.4
  reboot_timeout: 30s
  fast_connect: on

logger:

ota:

http_request:

switch:
  - platform: gpio
    pin: 14
    name: vl_power
    id: vl_power
    restore_mode: ALWAYS_ON
  
i2c:
  sda: GPIO5
  scl: GPIO4

sensor:
  - platform: template
    id: should_sleep
    name: should_sleep
    internal: true
    lambda:
      return 0;
    on_value_range:
      above: 0.5
      then:
        - lambda: |-
        - delay: 100ms
        - deep_sleep.enter: deep_sleep_1

  - platform: template
    name: "Flower2 Distance"
    id: flower2_distance
    update_interval: 10s # 500ms
    retain: true
    unit_of_measurement: "mm"
    accuracy_decimals: 3
    lambda:
      return {};

  - platform: vl53l0x
    id: one_d
    name: one_d
    retain: true
    internal: true
    address: 0x29
    accuracy_decimals: 4
    long_range: False
    unit_of_measurement: "mm"
    filters:
      - multiply: 1000.0

  - platform: adc
    pin: A0
    name: internal_a0
    internal: true
    accuracy_decimals: 4
    id: internal_a0
    update_interval: 10s
    filters:
      multiply: 7.219

  - platform: template
    id: flower2_battery
    name: "Flower2 Battery"
    retain: true
    accuracy_decimals: 3
    unit_of_measurement: "V"
    update_interval: 10s
    lambda:
      return {};

deep_sleep:
  id: deep_sleep_1
  run_duration: 2s
  sleep_duration: 3400s
  
mqtt:
  broker: 10.0.0.54
  username: janb
  password: xxxxxxxxxx
  birth_message:
    topic: mqtt_flower2/status
    payload: 
    qos: 2
  will_message:
    topic: mqtt_flower2/status
    payload: 
  on_message:
    - topic: mqtt_flower2/ota_mode
      payload: 'ON'
      then:
        - deep_sleep.prevent: deep_sleep_1
    - topic: mqtt_flower2/sleep_mode
      payload: 'ON'
      then:
        - deep_sleep.enter: deep_sleep_1
3 Likes

I use an ESP32 with esphome as a BLE–>WiFi gateway and have one sit somewhere in every room I have a miflora. All you need is a cheap esp32 devkit board a usb charger and micro usb cable. No external components, soldering etc…

Definitely I would like a zigbee alternative…

FYI, ITead has now released a wired external “Sonoff MS01 Smart Soil Moisture Sensor” addon that is meant to be paired with Sonoff TH10 or Sonoff TH16 (ESP8266 based devices) to monitor your plants soil moisture, but those make for very bulky and unpractical sensors for monitoring indoor potted plants like flowers, like how most people have in their windows. It also does not include other sensors like for; UV or lumen, temperature and humidity for the air.

Just found this other DIY project based on nRF52840 which potentially could support Zigbee:

It uses these basic “capacitive soil moisture sensor” boards originally designed for Arduino:

Same dev also made a simpler Plant Watering Sensor Project for Zigbee but with CC2530 and based on the DIYRuZ Flower project

1 Like

Is anyone knowing if that works with ZHA as well? Also, I would be interested in knowing how well it works overall.

Looks like they are out of stock at the moment. I will buy some different sensors and test and compare them.

1 Like

Did anyone end up purchasing this? Is it any good?

No, but it looks like what we were looking for. If I understand it correctly, it returns only one number - moisture, maybe the battery but nothing else as the BT MiFlora.

Do you plan to try it? I would try some, maybe three to check the zigbee mesh outside my farraday box flat.

I’ve got a couple on order for the front and back lawns outside and can report back when I have feedback (although delivery from Russia seems to be taking some time). Will move my Mi Flora BT ones inside and run the EFEKTA sensors via ZigBee2MQTT. The transmitting distance isn’t very far, but sight lines have a lot in the way and Mi Flora just isn’t up to it on its own (despite the unexpected, but perhaps just lucky, weather resilience).

I also ordered one yesterday from Tindie.
Will check the integration into HA when it arrives from Russia.

Is the EFEKTA sensor water resistant and suitable for outdoor usage?

Definitely not, but I guess that you could probably modify it to be so by wrapping it with self-vulcanizing silicone rubber tape / self-fusing silicone rubber electrical tapes or something similar.