def test_schedConflict(): irrigate, logger, cfg, valves, q = init("test_config.yaml") setStartTimeToNow(cfg, 'sched1', duration=3) setStartTimeToNow(cfg, 'sched2', deltaInMinutes=1) cfg.valves['valve1'].schedules['sched2'] = cfg.schedules['sched2'] cfg.valves['valve2'].schedules.clear() cfg.valves['valve3'].schedules.clear() cfg.valves['valve4'].schedules.clear() cfg.valves['valve5'].schedules.clear() assertValves(valves, ['valve1'], [(False, False)]) assert len(q.queue) == 0 irrigate.start() time.sleep(5) assertValves(valves, ['valve1'], [(True, True)]) time.sleep(60) assertValves(valves, ['valve1'], [(True, True)]) assert len(q.queue) == 0 time.sleep(60) assertValves(valves, ['valve1'], [(True, True)]) assert len(q.queue) == 0 time.sleep(60) assertValves(valves, ['valve1'], [(True, True)]) assert len(q.queue) == 0 time.sleep(60) assert len(q.queue) == 0 assert valves['valve1'].secondsDaily == 240
def test_sh_mqttErrors(): irrigate, logger, cfg, valves, q = init("test_config.yaml") setStartTimeToNow(cfg, 'sched1', duration=0.5) setStartTimeToNow(cfg, 'sched2', deltaInMinutes=10) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0 irrigate.start() time.sleep(2) irrigate.mqtt.processMessages("xxx/suspend/valve1/command", "asd") time.sleep(1) irrigate.mqtt.processMessages("xxx/open/valve1/command", "asd") time.sleep(1) irrigate.mqtt.processMessages("xxx/enable/valve1/command", "") time.sleep(1) irrigate.mqtt.processMessages("xxx/suspend/valve1/command", 4) time.sleep(1) irrigate.mqtt.processMessages("xxx/enable/valve1/command", 4) time.sleep(1) irrigate.mqtt.processMessages("xxx/enable/asd/command", 4) time.sleep(1) irrigate.mqtt.processMessages("xxx/enable/valve786/command", 4) time.sleep(1) irrigate.mqtt.processMessages("", "") time.sleep(1) irrigate.mqtt.processMessages("/", 4) time.sleep(30) assert valves['valve1'].secondsDaily == 30
def test_sh_mqttDisableAfterOpen(): irrigate, logger, cfg, valves, q = init("test_config.yaml") cfg.valves['valve1'].enabled = False time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0
def test_sh_mqttOpen2(): irrigate, logger, valves, q, cfg = test_sh_mqttOpen() irrigate.mqtt.processMessages("xxx/open/valve2/command", 0.2) time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (True, True), (False, False)]) assert len(q.queue) == 0 return irrigate, logger, valves, q, cfg
def test_schedPerSeason(): irrigate, logger, cfg, valves, q = init("test_config.yaml") setStartTimeToNow(cfg, 'sched1', duration=1) cfg.valves['valve2'].schedules.clear() setStartTimeToNow(cfg, 'sched2', duration=1) cfg.schedules['sched1'].seasons.clear() cfg.schedules['sched1'].seasons.append(irrigate.getSeason(cfg.latitude)) cfg.schedules['sched2'].seasons.clear() cfg.schedules['sched2'].seasons.append(irrigate.getSeason(-1 * cfg.latitude)) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) irrigate.start() time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (False, False), (False, False)])
def test_sh_mqttDisableWhileInQueue(): irrigate, logger, valves, q, cfg = test_sh_mqttOpen2() irrigate.mqtt.processMessages("xxx/open/valve3/command", 1) time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (True, True), (False, False)]) assert len(q.queue) == 1 cfg.valves['valve1'].enabled = False time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (True, True), (True, True)]) assert len(q.queue) == 0
def test_schedPerDay(): irrigate, logger, cfg, valves, q = init("test_config.yaml") setStartTimeToNow(cfg, 'sched1', duration=1) cfg.valves['valve2'].schedules.clear() setStartTimeToNow(cfg, 'sched2', duration=1) cfg.schedules['sched1'].days.clear() dayStr = calendar.day_abbr[datetime.datetime.today().weekday()] cfg.schedules['sched1'].days.append(dayStr) cfg.schedules['sched2'].days.clear() dayStr = calendar.day_abbr[(datetime.datetime.today() + datetime.timedelta(days=1)).weekday()] cfg.schedules['sched2'].days.append(dayStr) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) irrigate.start() time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (False, False), (False, False)])
def test_sh_mqttOpen(): irrigate, logger, cfg, valves, q = init("test_config.yaml") cfg.valves['valve1'].schedules.clear() cfg.valves['valve2'].schedules.clear() cfg.valves['valve3'].schedules.clear() irrigate.start() time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0 irrigate.mqtt.processMessages("xxx/open/valve1/command", 0.2) time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (False, False), (False, False)]) assert len(q.queue) == 0 return irrigate, logger, valves, q, cfg
def test_sh_mqttOpenDisabled(): irrigate, logger, cfg, valves, q = init("test_config.yaml") cfg.valves['valve1'].schedules.clear() cfg.valves['valve2'].schedules.clear() cfg.valves['valve3'].schedules.clear() cfg.valves['valve1'].enabled = False irrigate.start() time.sleep(4) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0 irrigate.mqtt.processMessages("xxx/open/valve1/command", 1) time.sleep(4) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0
def test_schedThirdWaiting(): irrigate, logger, cfg, valves, q = init("test_config.yaml") setStartTimeToNow(cfg, 'sched1', duration=1.2) setStartTimeToNow(cfg, 'sched2', deltaInMinutes=1, duration=0.1) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0 irrigate.start() time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (True, True), (False, False)]) assert len(q.queue) == 0 time.sleep(60) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (True, True), (False, False)]) assert len(q.queue) == 1 time.sleep(12) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (True, True)]) assert len(q.queue) == 0 time.sleep(10) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0
def test_schedSimple(): irrigate, logger, cfg, valves, q = init("test_config.yaml") setStartTimeToNow(cfg, 'sched1', duration=0.1) setStartTimeToNow(cfg, 'sched2', deltaInMinutes=10) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0 irrigate.start() time.sleep(3) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (True, True), (False, False)]) assert len(q.queue) == 0 time.sleep(6) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0 assert valves['valve1'].secondsDaily >= 6
def test_schedOverlap(): irrigate, logger, cfg, valves, q = init("test_config.yaml") setStartTimeToNow(cfg, 'sched1', duration=0.1) setStartTimeToNow(cfg, 'sched2', duration=0.1) cfg.valves['valve1'].schedules["sched2"] = cfg.schedules['sched2'] cfg.valves['valve2'].schedules.clear() cfg.valves['valve3'].schedules.clear() assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) assert len(q.queue) == 0 irrigate.start() time.sleep(5) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(True, True), (False, False), (False, False)]) assert len(q.queue) == 0 time.sleep(10) assertValves(valves, ['valve1', 'valve2', 'valve3'], [(False, False), (False, False), (False, False)]) time.sleep(65) assert valves['valve1'].secondsDaily == 12 assert len(q.queue) == 0
def test_sh_sensorOverridesMqtt(): irrigate, logger, cfg, valves, q = init("test_config.yaml") setStartTimeToNow(cfg, 'sched4') cfg.valves['valve1'].schedules.clear() cfg.valves['valve2'].schedules.clear() cfg.valves['valve3'].schedules.clear() cfg.schedules['sched4'].sensor.handler.disable = True irrigate.start() time.sleep(3) # Should be handled but not opened assertValves(valves, ['valve5'], [(True, False)]) irrigate.mqtt.processMessages("xxx/suspend/valve5/command", 0) time.sleep(3) # Should not open because the sensor overrides assertValves(valves, ['valve5'], [(True, False)]) cfg.schedules['sched4'].sensor.handler.disable = False time.sleep(3) # Should open because the sensor is now enabled and the MQTT command is already "lost" assertValves(valves, ['valve5'], [(True, True)])