Using a Raspberry Pi and a soil moisture sensor to send Slack notifications when our plant needs watering
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Type Name Latest commit message Commit time
Failed to load latest commit information.


Using a Raspberry Pi and a soil moisture sensor to send Slack notifications when our plant needs watering. This is based on ModMyPi's code but adapted to send Slack notifications instead.

Raspberry Pi plant soil moisture sensor

Required parts:

Connect the soil moisture sensor

This is very simple. There are two connections on the fork shaped part (that goes into the soil) marked positive and negative - simply connect these to the sensor module part. It doesn't matter which of the two pins you use. Whilst there are 4 pins on the part of the sensor module that connects to your Raspberry Pi, you only need 3: VCC, GND and D0. Connect these as follows:

  • VCC to pin 1 on the Pi (3.3v)
  • GND to pin 9 on the Pi (Ground)
  • D0 to pin 11 on the Pi (GPIO 17).

If connected corrrectly, you should see at least 1 LED light up on the sensor module. If you then stick the fork end into a glass of water (only the prongs, not the entire module!), you should then see a second LED light up on the sensor module. If you don't, go back and check your connections - try swapping the two from the fork to the sensor module around first.

Calibrate the soil moisture sensor

There is a small potentiometer on the sensor module that allows you to calibrate the sensitivity of the sensor. The best way to do this is to insert the prongs of the fork into the soil and then slowly turn the potentiometer until 1 LED goes off, this means that when the soil moisture drops to this level, the script will be triggered and alert you via Slack that it needs watering.

Clone this GitHub repo

Obviously you'll need the code, so clone this on your Raspberry Pi by running this in your command line:

$ git clone git://

Edit the code to include your Slack webhook

After you have created your webhook integration in Slack, you'll need to edit the Python script accordingly:

$ cd plant-hydro-slack
$ nano

Find the variable on line 20 called webhook_url and then replace "ADD_HERE" with your Slack webhook URL. Then save and exit:

$ Y

Your script is now good to go.

Slack notifications generated by the Pi

Running the script automatically on boot using systemd

In order to run the script automatically when the Raspberry Pi boots, I recommend using systemd to run it as a service:

$ sudo nano /lib/systemd/system/moisturesensor.service

Then add the following:

Description=Plant soil moisture sensor service

ExecStart=/usr/bin/python /home/pi/plant-hydro-slack/ > /home/pi/plant-hydro-slack/dry-to-slack.log 2>&1


The parts to check are the ExecStart command as this assumes the script is located in /home/pi/plant-hydro-slack so please update accordingly if you have installed the script in a different location.

Once you have done this, Ctrl+X to exit and Y to save then run:

$ sudo chmod 644 /lib/systemd/system/moisturesensor.service
$ sudo systemctl daemon-reload
$ sudo systemctl enable moisturesensor.service

You can sudo reboot or simply run sudo systemctl start moisturesensor.service to start the script. Check the status by running sudo systemctl status moisturesensor.service.