diff --git a/examples/README.md b/examples/README.md new file mode 100644 index 0000000..bf9e5d6 --- /dev/null +++ b/examples/README.md @@ -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) diff --git a/examples/grow-monitor-and-water.py b/examples/grow-monitor-and-water.py index eb70fc4..0388263 100644 --- a/examples/grow-monitor-and-water.py +++ b/examples/grow-monitor-and-water.py @@ -30,12 +30,13 @@ class Channel: (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.sensor = Moisture(sensor_channel) self.pump = Pump(pump_channel) self.water_level = water_level self.alarm_level = alarm_level + self.auto_water = auto_water self.pump_speed = pump_speed self.pump_time = pump_time self.watering_delay = watering_delay @@ -67,6 +68,7 @@ class Channel: self.alarm_level = config.get("alarm_level", self.alarm_level) self.water_level = config.get("water_level", self.water_level) 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) if icon is not None: self.icon = Image.open(icon) @@ -77,12 +79,15 @@ class Channel: return """Channel: {channel} Water level: {water_level} Alarm level: {alarm_level} +Auto water: {auto_water} Pump speed: {pump_speed} Pump time: {pump_time} Delay: {watering_delay} """.format(**self.__dict__) def water(self): + if not self.auto_water: + return False if time.time() - self.last_dose > self.watering_delay: self.pump.dose(self.pump_speed, self.pump_time, blocking=False) self.last_dose = time.time() @@ -135,7 +140,7 @@ Delay: {watering_delay} if self.water(): 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: - 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 diff --git a/examples/water.yml b/examples/water.yml index a9324ee..e3b5f8c 100644 --- a/examples/water.yml +++ b/examples/water.yml @@ -3,17 +3,20 @@ channel1: 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