mirror of
https://github.com/pimoroni/grow-python
synced 2025-10-25 15:19:23 +00:00
Add auto-water setting and disable by default
Adds a new setting - auto_water - and disables by default to reflect the basic Grow kit being monitor-only. Adds documentation for the settings file.
This commit is contained in:
46
examples/README.md
Normal file
46
examples/README.md
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
# Watering Settings
|
||||||
|
|
||||||
|
The `grow-monitor-and-water.py` example can monitor and, optionally, automatically water all three Grow channels.
|
||||||
|
|
||||||
|
It's configured using a settings file - `water.yml` - that looks like the following:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
channel1:
|
||||||
|
water_level: 0.8
|
||||||
|
warn_level: 0.2
|
||||||
|
pump_speed: 0.7
|
||||||
|
pump_time: 0.7
|
||||||
|
auto_water: False
|
||||||
|
icon: icons/flat-4.png
|
||||||
|
channel2:
|
||||||
|
water_level: 0.8
|
||||||
|
warn_level: 0.2
|
||||||
|
pump_speed: 0.7
|
||||||
|
pump_time: 0.7
|
||||||
|
auto_water: False
|
||||||
|
channel3:
|
||||||
|
water_level: 0.8
|
||||||
|
warn_level: 0.2
|
||||||
|
pump_speed: 0.7
|
||||||
|
pump_time: 0.7
|
||||||
|
auto_water: False
|
||||||
|
general:
|
||||||
|
alarm_enable: True
|
||||||
|
alarm_interval: 1.0
|
||||||
|
```
|
||||||
|
|
||||||
|
By default auto-watering is disabled and an alarm will sound every 1s if the `warn_level` is reached.
|
||||||
|
|
||||||
|
## Channel Settings
|
||||||
|
|
||||||
|
* `water_level` - The level at which auto-watering should be triggered (soil saturation from 0.0 to 1.0)
|
||||||
|
* `warn_level` - The level at which the alarm should be triggered (soil saturation from 0.0 to 1.0)
|
||||||
|
* `pump_speed` - The speed at which the pump should be run (from 0.0 low speed to 1.0 full speed)
|
||||||
|
* `pump_time` - The time that the pump should run for (in seconds)
|
||||||
|
* `auto_water` - Whether to run the attached pump (True to auto-water, False for manual watering)
|
||||||
|
* `icon` - Optional icon image for the channel, see the icons directory for images.
|
||||||
|
|
||||||
|
## General Settings
|
||||||
|
|
||||||
|
* `alarm_enable` - Whether to enable the alarm
|
||||||
|
* `alarm_interval` - The interval at which the alarm should beep (in seconds)
|
||||||
@@ -30,12 +30,13 @@ class Channel:
|
|||||||
(254, 82, 82), # Red
|
(254, 82, 82), # Red
|
||||||
]
|
]
|
||||||
|
|
||||||
def __init__(self, display_channel, sensor_channel, pump_channel, water_level=0.5, alarm_level=0.5, pump_speed=0.7, pump_time=0.7, watering_delay=30, icon=None):
|
def __init__(self, display_channel, sensor_channel, pump_channel, water_level=0.5, alarm_level=0.5, pump_speed=0.7, pump_time=0.7, watering_delay=30, icon=None, auto_water=False):
|
||||||
self.channel = display_channel
|
self.channel = display_channel
|
||||||
self.sensor = Moisture(sensor_channel)
|
self.sensor = Moisture(sensor_channel)
|
||||||
self.pump = Pump(pump_channel)
|
self.pump = Pump(pump_channel)
|
||||||
self.water_level = water_level
|
self.water_level = water_level
|
||||||
self.alarm_level = alarm_level
|
self.alarm_level = alarm_level
|
||||||
|
self.auto_water = auto_water
|
||||||
self.pump_speed = pump_speed
|
self.pump_speed = pump_speed
|
||||||
self.pump_time = pump_time
|
self.pump_time = pump_time
|
||||||
self.watering_delay = watering_delay
|
self.watering_delay = watering_delay
|
||||||
@@ -67,6 +68,7 @@ class Channel:
|
|||||||
self.alarm_level = config.get("alarm_level", self.alarm_level)
|
self.alarm_level = config.get("alarm_level", self.alarm_level)
|
||||||
self.water_level = config.get("water_level", self.water_level)
|
self.water_level = config.get("water_level", self.water_level)
|
||||||
self.watering_delay = config.get("watering_delay", self.watering_delay)
|
self.watering_delay = config.get("watering_delay", self.watering_delay)
|
||||||
|
self.auto_water = config.get("auto_water", self.auto_water)
|
||||||
icon = config.get("icon", None)
|
icon = config.get("icon", None)
|
||||||
if icon is not None:
|
if icon is not None:
|
||||||
self.icon = Image.open(icon)
|
self.icon = Image.open(icon)
|
||||||
@@ -77,12 +79,15 @@ class Channel:
|
|||||||
return """Channel: {channel}
|
return """Channel: {channel}
|
||||||
Water level: {water_level}
|
Water level: {water_level}
|
||||||
Alarm level: {alarm_level}
|
Alarm level: {alarm_level}
|
||||||
|
Auto water: {auto_water}
|
||||||
Pump speed: {pump_speed}
|
Pump speed: {pump_speed}
|
||||||
Pump time: {pump_time}
|
Pump time: {pump_time}
|
||||||
Delay: {watering_delay}
|
Delay: {watering_delay}
|
||||||
""".format(**self.__dict__)
|
""".format(**self.__dict__)
|
||||||
|
|
||||||
def water(self):
|
def water(self):
|
||||||
|
if not self.auto_water:
|
||||||
|
return False
|
||||||
if time.time() - self.last_dose > self.watering_delay:
|
if time.time() - self.last_dose > self.watering_delay:
|
||||||
self.pump.dose(self.pump_speed, self.pump_time, blocking=False)
|
self.pump.dose(self.pump_speed, self.pump_time, blocking=False)
|
||||||
self.last_dose = time.time()
|
self.last_dose = time.time()
|
||||||
@@ -135,7 +140,7 @@ Delay: {watering_delay}
|
|||||||
if self.water():
|
if self.water():
|
||||||
logging.info("Watering Channel: {} - rate {:.2f} for {:.2f}sec".format(self.channel, self.pump_speed, self.pump_time))
|
logging.info("Watering Channel: {} - rate {:.2f} for {:.2f}sec".format(self.channel, self.pump_speed, self.pump_time))
|
||||||
if sat < self.alarm_level and not self.alarm:
|
if sat < self.alarm_level and not self.alarm:
|
||||||
logging.warning("Alarm on Channel: {} - saturation is {:.2f} (warn level {:.2f}".format(self.channel, sat, self.alarm_level))
|
logging.warning("Alarm on Channel: {} - saturation is {:.2f} (warn level {:.2f})".format(self.channel, sat, self.alarm_level))
|
||||||
self.alarm = True
|
self.alarm = True
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -3,17 +3,20 @@ channel1:
|
|||||||
warn_level: 0.2
|
warn_level: 0.2
|
||||||
pump_speed: 0.7
|
pump_speed: 0.7
|
||||||
pump_time: 0.7
|
pump_time: 0.7
|
||||||
|
auto_water: False
|
||||||
icon: icons/flat-4.png
|
icon: icons/flat-4.png
|
||||||
channel2:
|
channel2:
|
||||||
water_level: 0.8
|
water_level: 0.8
|
||||||
warn_level: 0.2
|
warn_level: 0.2
|
||||||
pump_speed: 0.7
|
pump_speed: 0.7
|
||||||
pump_time: 0.7
|
pump_time: 0.7
|
||||||
|
auto_water: False
|
||||||
channel3:
|
channel3:
|
||||||
water_level: 0.8
|
water_level: 0.8
|
||||||
warn_level: 0.2
|
warn_level: 0.2
|
||||||
pump_speed: 0.7
|
pump_speed: 0.7
|
||||||
pump_time: 0.7
|
pump_time: 0.7
|
||||||
|
auto_water: False
|
||||||
general:
|
general:
|
||||||
alarm_enable: True
|
alarm_enable: True
|
||||||
alarm_interval: 1.0
|
alarm_interval: 1.0
|
||||||
|
|||||||
Reference in New Issue
Block a user