---
title: Plant Monitor
description: Instructions on how to setup plant monitoring with Home Assistant.
ha_category:
  - Environment
ha_release: 0.44
ha_quality_scale: internal
ha_codeowners:
  - '@ChristianKuehnel'
ha_domain: plant
---

This`plant`component lets you merge moisture, conductivity, light intensity, temperature and battery level for a plant into a single UI element. It also supports setting minimum and maximum values for each measurement and will change its state to "problem" if it is not within those limits.

## Configuration

To use your `plant` sensor in your installation, add the following to your `configuration.yaml` file:

```yaml
# Example configuration.yaml entry
plant:
  name_of_your_plant:
    sensors:
      moisture: sensor.my_sensor_moisture
      battery: sensor.my_sensor_battery
      temperature: sensor.my_sensor_temperature
      conductivity: sensor.my_sensor_conductivity
      brightness: sensor.my_sensor_brightness
    min_moisture: 20
```

{% configuration %}
entity_id:
  description: Set by you and is used by the integration as the `entity_id`.
  required: true
  type: list
  keys:
    sensors:
      description: List of sensor measure entities.
      required: true
      type: list
      keys:
        moisture:
          description: Moisture of the plant. Measured in %. Can have a min and max value set optionally.
          required: false
          type: string
        battery:
          description: Battery level of the plant sensor. Measured in %. Can only have a min level set optionally.
          required: false
          type: string
        temperature:
          description: Temperature of the plant. Measured in degrees Celsius. Can have a min and max value set optionally.
          required: false
          type: string
        conductivity:
          description: Conductivity of the plant. Measured in µS/cm. Can have a min and max value set optionally.
          required: false
          type: string
        brightness:
          description: Light exposure of the plant. Measured in Lux. Can have a min and max value set optionally.
          required: false
          type: string
    min_moisture:
      description: Minimum moisture level before triggering a problem.
      required: false
      default: 20
      type: integer
    max_moisture:
      description: Maximum moisture level before triggering a problem.
      required: false
      default: 60
      type: integer
    min_battery:
      description: Minimum battery level before triggering a problem.
      required: false
      default: 20
      type: integer
    min_conductivity:
      description: Minimum conductivity level before triggering a problem.
      required: false
      default: 500
      type: integer
    max_conductivity:
      description: Maximum conductivity level before triggering a problem.
      required: false
      default: 3000
      type: integer
    min_temperature:
      description: Minimum temperature before triggering a problem.
      required: false
      type: float
    max_temperature:
      description: Maximum temperature before triggering a problem.
      required: false
      type: float
    min_brightness:
      description: Minimum brightness before triggering a problem. In contrast to the other values, this check is *not* looking at the current situation, but rather at the last days. A problem is only reported if the maximum brightness over the last days was lower than min_brightness. You can use this to check if the plant gets enough light during the course of the day.
      required: false
      type: integer
    max_brightness:
      description: Maximum brightness before triggering a problem.
      required: false
      type: integer
    check_days:
      description: time interval (in days) used when checking `min_brightness`.
      required: false
      default: 3
      type: integer
{% endconfiguration %}

## Examples
### Using plain MQTT sensor to get the data
This is a practical example that uses a multiple of `MQTT sensors` to supply the readings used by the `plant` sensor.
Another good source of this data would be the [Mi Flora](/integrations/miflora) component.

If the sensor data is within the min/max values the status will be `ok`, if not the status will be `problem`. You can use this to trigger a notification, if there is a problem with your plant. Of course you can only monitor attributes of your plant, where the sensor is configured and is providing the data.

## Data Source

The main sources of the data will usually be a [MiFlora sensor](/integrations/miflora) or a [MQTT sensor](/integrations/sensor.mqtt/) receiving the data from a [PlantGateway](https://github.com/ChristianKuehnel/plantgateway).

If you want to get the date via a PlantGateway, this is a typical configuration for the MQTT sensors:

{% raw %}

```yaml
# Example configuration.yaml entry
plant:
  simulated_plant:
    sensors:
      moisture: sensor.mqtt_plant_moisture
      battery: sensor.mqtt_plant_battery
      temperature: sensor.mqtt_plant_temperature
      conductivity: sensor.mqtt_plant_conductivity
      brightness: sensor.mqtt_plant_brightness
    min_moisture: 20
    max_moisture: 60
    min_battery: 17
    min_conductivity: 500
    min_temperature: 15

sensor:
  - platform: mqtt
    name: my_plant_moisture
    state_topic: my_plant_topic
    value_template: '{{ value_json.moisture | int }}'
    unit_of_measurement: '%'
  - platform: mqtt
    name: my_plant_battery
    state_topic: my_plant_topic
    value_template: '{{ value_json.battery | int }}'
    unit_of_measurement: '%'
  - platform: mqtt
    name: my_plant_temperature
    state_topic: my_plant_topic
    value_template: '{{ value_json.temperature | float }}'
    unit_of_measurement: '°C'
  - platform: mqtt
    name: my_plant_conductivity
    state_topic: my_plant_topic
    value_template: '{{ value_json.conductivity | int }}'
    unit_of_measurement: 'µS/cm'
  - platform: mqtt
    name: my_plant_brightness
    state_topic: my_plant_topic
    value_template: '{{ value_json.brightness | int }}'
    unit_of_measurement: 'Lux'
```

{% endraw %}

You have to replace the `state_topic` with the value that you configured in the PlantGateway. It also depends on the global configuration of your MQTT server.
