var Timer valve1runtimer = null var Timer valve2runtimer = null var Timer valve3runtimer = null var Timer pumpinit = null var Timer pumptimeout = null var Timer delaytimeout var WATERING = false var valueOpenTime = 10 //This is the time (seconds) the valves should be open - for watering the plants //var valueOpenTime in seconds //var failover time == var timetorun -1 second //var pump time == 3x runtime -1 second rule "Reset Irrigation at OH Start" // Rule to close all irrigation at system start - to avoid flooding when System started then // use this line to just turn everything off if OH happens to restart when irrigation is running logInfo("IRRIGATION", "SYSTEM BOOT UP - SHUTDOWN ALL") sendCommand(Sprinkler_RUN, OFF) sendCommand(Sprinkler_SCHEDULE, OFF) sendCommand(Sprinkler_MANUAL, OFF) if (velbusvmb4ryldAddress34_irrigationmotor.state == ON){ logInfo("IRRIGATION","FORCED PUMP STOP - on boot") sendCommand(velbusvmb4ryldAddress34_irrigationmotor, OFF) } if (velbusvmb4ryldAddress34_irrivalve1.state == ON){ logInfo("IRRIGATION","FORCED VALVE 1 CLOSE - on boot") sendCommand(velbusvmb4ryldAddress34_irrivalve1, OFF) } if (velbusvmb4ryldAddress34_irrivalve2.state == ON){ logInfo("IRRIGATION","FORCED VALVE 2 CLOSE - on boot") sendCommand(velbusvmb4ryldAddress34_irrivalve2, OFF) } if (velbusvmb4ryldAddress34_irrivalve3.state == ON){ logInfo("IRRIGATION","FORCED VALVE 3 CLOSE - on boot") sendCommand(velbusvmb4ryldAddress34_irrivalve3, OFF) } end rule "Sprinkler schedule" when Channel 'astro:sun:34d5bcdcb2:daylight#event' triggered START or Channel 'astro:sun:34d5bcdcb2:daylight#event' triggered END or Channel 'velbus:vmbgp2-2:961ea6934d:14:input#CH1' triggered PRESSED then logInfo("IRRIGATION","IRRIGATION SEQUENCE STARTED - SCHEDULE") sendCommand(Sprinkler_SCHEDULE, ON) if (Sprinkler_RUN.state != ON) { sendCommand(Sprinkler_RUN, ON) } end rule "Sprinkler demand / on" when //Time cron "0 0 07 ? * * *" or Item Sprinkler_RUN received command ON //Channel 'astro:sun:34d5bcdcb2:daylight#event' triggered START or //Channel 'astro:sun:34d5bcdcb2:daylight#event' triggered END or //Channel 'velbus:vmbgp2-2:961ea6934d:14:input#CH1' triggered PRESSED then //valve3runtimer = null logInfo("IRRIGATION","IRRIGATION SEQUENCE STARTED") WATERING=true logInfo("IRRIGATION", "Valve 1: " + velbusvmb4ryldAddress34_irrivalve1.state) logInfo("IRRIGATION", "Valve 2: " + velbusvmb4ryldAddress34_irrivalve2.state) logInfo("IRRIGATION", "Valve 3: " + velbusvmb4ryldAddress34_irrivalve3.state) logInfo("IRRIGATION", "==========") // first valve to open and start pump velbusvmb4ryldAddress34_irrivalve1.sendCommand(ON) sendCommand(velbusvmb4ryldAddress34_irrigationmotor, ON) //PUMP logInfo("IRRIGATION", "Valve 1 ON REQUEST" ) logInfo("IRRIGATION", "Pump ON REQUEST" ) // open valve 2, close valve 1 (as built-in timer seems to not work anymore for closing valve 1) valve1runtimer = createTimer(now.plusSeconds(valueOpenTime)) [ | velbusvmb4ryldAddress34_irrivalve2.sendCommand(ON) logInfo("IRRIGATION", "Valve 2 ON REQUEST" ) velbusvmb4ryldAddress34_irrivalve1.sendCommand(OFF) logInfo("IRRIGATION", "Valve 1 OFF REQUEST" ) ] // open valve 3 after valve 2 valve2runtimer= createTimer(now.plusSeconds((valueOpenTime*2)-1)) [ | velbusvmb4ryldAddress34_irrivalve3.sendCommand(ON) logInfo("IRRIGATION", "Valve 3 ON REQUEST" ) velbusvmb4ryldAddress34_irrivalve2.sendCommand(OFF) logInfo("IRRIGATION", "Valve 2 OFF REQUEST" ) ] // switchoff pump before closing last valve - to release pressure pumpinit= createTimer(now.plusSeconds((valueOpenTime*3)-3)) [ | sendCommand(velbusvmb4ryldAddress34_irrigationmotor, OFF) logInfo("IRRIGATION", "Pump OFF REQUEST" ) ] //close the last valve valve3runtimer= createTimer(now.plusSeconds((valueOpenTime*3))) [ | //velbusvmb4ryldAddress34_irrivalve3.sendCommand(OFF) sendCommand(velbusvmb4ryldAddress34_irrivalve3, OFF) logInfo("IRRIGATION", "Valve 3 OFF REQUEST" ) //valve1runtimer = null //valve2runtimer = null //pumptimer = null logInfo("IRRIGATION","IRRIGATION SEQUENCE STOPPED") WATERING = false logInfo("IRRIGATION","DEBUG - at RUN SEQUENCE LEVEL WATERING: " + WATERING) sendCommand(Sprinkler_RUN, OFF) if (Sprinkler_SCHEDULE == ON) {sendCommand(Sprinkler_SCHEDULE, OFF)} if (Sprinkler_MANUAL == ON) {sendCommand(Sprinkler_MANUAL, OFF)} ] end rule "MANUAL RUN ALL ZONES - vs SINGLE ZONE" when Member of Sprinkler_Valves changed to ON then logInfo("IRRIGATION","DEBUG - at RUN MANUAL LEVEL WATERING: " + WATERING) logInfo("IRRIGATION","DEBUG - at RUN MANUAL LEVEL RUN STATE: " + Sprinkler_RUN.state) if (Sprinkler_RUN.state==OFF) { // manual override selected - we can run a full sequence timeout= createTimer(now.plusSeconds(2)) [ | if (velbusvmb4ryldAddress34_irrivalve1.state == ON && velbusvmb4ryldAddress34_irrivalve2.state == ON) { // Shutting down valve 2 again - will be opened with full sequence sendCommand(velbusvmb4ryldAddress34_irrivalve2, OFF) sendCommand(Sprinkler_SCHEDULE, ON) if (Sprinkler_RUN.state != ON) { logInfo("IRRIGATION","IRRIGATION SEQUENCE MANUAL INITIATION - FOR FULL SEQUENCE") WATERING=true logInfo("IRRIGATION","DEBUG WATERING: " + WATERING) sendCommand(Sprinkler_RUN, ON) } } if (WATERING != true) { logInfo("IRRIGATION","DEBUG WATERING: " + WATERING) if (velbusvmb4ryldAddress34_irrivalve1.state != OFF || velbusvmb4ryldAddress34_irrivalve2.state != OFF || velbusvmb4ryldAddress34_irrivalve3.state != OFF){ logInfo("IRRIGATION","IRRIGATION SEQUENCE MANUAL INITATION - FOR SINGLE STATION") sendCommand(velbusvmb4ryldAddress34_irrigationmotor, ON) //PUMP // switchoff pump before closing last valve - to release pressure pumpinit= createTimer(now.plusSeconds((valueOpenTime)-3)) [ | sendCommand(velbusvmb4ryldAddress34_irrigationmotor, OFF) ] // CLOSE ALL VALVES IF OPEN valve1runtimer= createTimer(now.plusSeconds(valueOpenTime)) [ | if (velbusvmb4ryldAddress34_irrivalve1.state == ON){ logInfo("IRRIGATION","FORCED VALVE 1 CLOSE - on manual run") sendCommand(velbusvmb4ryldAddress34_irrivalve1, OFF) } if (velbusvmb4ryldAddress34_irrivalve2.state == ON){ logInfo("IRRIGATION","FORCED VALVE 2 CLOSE - on manual run") sendCommand(velbusvmb4ryldAddress34_irrivalve2, OFF) } if (velbusvmb4ryldAddress34_irrivalve3.state == ON){ logInfo("IRRIGATION","FORCED VALVE 3 CLOSE - on manual run") sendCommand(velbusvmb4ryldAddress34_irrivalve3, OFF) } ] } } ] } end rule "Sprinkler Pump Forced off - safety" when Item velbusvmb4ryldAddress34_irrigationmotor changed then logInfo("IRRIGATION", "===============") logInfo("IRRIGATION", "PUMP validation") delaytimeout= createTimer(now.plusSeconds(2)) [ logInfo("IRRIGATION", "Valve 1: " + velbusvmb4ryldAddress34_irrivalve1.state) logInfo("IRRIGATION", "Valve 2: " + velbusvmb4ryldAddress34_irrivalve2.state) logInfo("IRRIGATION", "Valve 3: " + velbusvmb4ryldAddress34_irrivalve3.state) if (velbusvmb4ryldAddress34_irrivalve1.state == OFF && velbusvmb4ryldAddress34_irrivalve2.state == OFF && velbusvmb4ryldAddress34_irrivalve3.state == OFF) { if (velbusvmb4ryldAddress34_irrigationmotor.state == ON){ logInfo("IRRIGATION","FORCED PUMP STOP") sendCommand(velbusvmb4ryldAddress34_irrigationmotor, OFF) sendCommand(Sprinkler_RUN, OFF) } } else { logInfo("IRRIGATION","VALVE OPEN - NO FORCED STOP") } ] end