Garden Irrigation
Introduction
This script has the intention to control and maintain your garden soil humidity.
Its a hodgepodge of different scripts found on the Domoticz forum.
Took me a couple of weeks to write/test (copy/past) the script.
But i'm happy i can share this script with you all.
It's my first LUA script so it may not be cleanest but it does the job ;-)
Be aware that using this script for the first time it may take awhile before irrigation script has collected all the data.
I wrote this script for my own little garden project and to beable to automate irrigation while i'm gone.
The topic can be found here: [1]
Somehow it got out of hand and got big.
So i thought that maybe some of you could have a benefit of this.
Although the script is intended for irrigation.
You could adapt it for other projects.
I do assume that when you want to use this script you already have the knowhow of Lua, Domoticz and other features needed to use this script.
As i won't explain the entire installation ;-)
How it works and what it does
- Checks if all Virtual switches and uservariables are available, if not then it won't trigger the program and alert you which variable is missing
- It scraps WeatherUnderground data and processing it to usable data
- It monitors buienradar (optional) to see if there are any showers upcoming 2hr
- It scraps temperature and humidity from your moist sensor and processing it to usable data
- It lets you choose when to irrigate via (Day of the week, month and time of the day)
- By an extensive Settings Menu you can set various settings to control when to irrigate settings ranges from: Min/Max WeaterTemp, Min/Max SoilTemp, Min/Max SoilHumidity pct, Amount of rain, wind, UV, day, month to stop or start irrigating.
- Also it detects if you are irrigating manual or stopped the program manually
- When a irrigation has taken place then the next irrigation will take place at the next scheduled Time Of The Day
- The irrigation has a optional MaxRunTime, when exceeded then it will stop at you desired MaxRunTime
- Irrigation will stop when the Soil Humidity has reached your desired Humidity Target
Dependencies
- Virtual switch to be able to manual override the irrigation program (Manual Override)
- Soil Moist & Humidity sensor
- Active WeatherUnderground account
- Switch to be able to control your waterpump/valve which is somehow wireless connected to domoticz
UserVariables to create
- VarBuienRadarCon (type=integer, value=0)
- VarFollowsProgram (type=integer, value=0)
- VarManOverride (type=integer, value=0)
- VarMaxRunTime (type=integer, value=0)
- VarMoistHumCon (type=integer, value=0)
- VarMoistLastSeen (type=integer, value=0)
- VarMoistOnline (type=integer, value=0)
- VarMoistOnlineHum (type=integer, value=0)
- VarMoistTempCon (type=integer, value=0)
- VarProgram (type=integer, value=0)
- VarProgramHasRun (type=integer, value=0)
- VarProgramStopHum (type=integer, value=0)
- VarScheduledDays (type=integer, value=0)
- VarScheduledMonths (type=integer, value=0)
- VarScheduledTOD (type=integer, value=0)
- VarScheduledTODcurrent (type=integer, value=0)
- VarWeatherCon (type=integer, value=0)
Finalize
Be aware that i'm not a coder and it's maybe not the cleanest script ever, but who cares as it works ;-)
I hope it can be of use to you and feel free to adapt it.
Bug fixes, patches, and improvements are hapiliy accepted of course.
Same counts for LUA optimizations as this is the first time i wrote,copy/past a LUA script.
When i started this i didn't had a clue what i was doing ;-)
Credits
- Nicky Bulthuis -/- for the dusk sensor script
- Hans van der Heijden -/- for the IsItGonnaRain script
- anonymous user -/- for the "Reading weather station data" script
- dannybloe -/- for Humidity Control script
- And to all those who i forgot to mention
Lua script
--[[
script_time_irrigation.lua
@author: Siewert Lameijer
@since: 2015-07-14
@version: 1.0
@Garden Irrigation lua script
Credits:
- Nicky Bulthuis -/- for the dusk sensor script
- Hans van der Heijden -/- for the IsItGonnaRain script
- anonymous user -/- for the "Reading weather station data" script
- dannybloe -/- for Humidity Control script
- And to all those who i forgot to mention
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
This script has the intention to control and maintain your garden soil humidity.
Its a hodgepodge of different scripts found on the Domoticz forum.
Be aware that using this script for the first time it may take awhile before irrigation script has collected all the data.
I wrote this script for my own little garden project and to beable to automate irrigation while i'm gone.
The topic can be found here: https://www.domoticz.com/forum/viewtopic.php?f=38&t=6904
Somehow it got out of hand and got big.
So i thought that maybe some of you could have a benefit of this.
Although the script is intended for irrigation.
You could adapt it for other projects.
I do assume that when you want to use this script you already have the knowhow of Lua and Domoticz.
As i won't explain the entire installation ;-)
The script does the following:
- It scraps WeatherUnderground data and processing it to usable data
- It monitors buienradar (optional) to see if there are any showers upcoming 2hr
- It scraps temperature and humidity from your moist sensor and processing it to usable data
- It lets you choose when to irrigate(Day of the week, month and time of the day)
- By an extensive Settings Menu you can set various settings to control when to irrigate
settings ranges from: Min/Max WeaterTemp, Min/Max SoilTemp, Min/Max SoilHumidity pct, Amount of rain, wind, UV, day, month to stop or start irrigating.
- Also it detects if you are irrigating manual or stopped the program manually
- When a irrigation has taken place then the next irrigation will take place at the next scheduled Time Of The Day
- The irrigation has a optional MaxRunTime, when exceeded then it will stop at you desired MaxRunTime
- Irrigation will stop when the Soil Humidity has reached your desired Humidity Target
The Hardware i use:
- DIY Garden irrigation piping as seen in the topic
- Washer Watervalve 2-way
- KaKu ACM-3500-3 3-in-1 unit
Be aware that i'm not a coder and it's maybe not the cleanest script ever, but who cares as it works ;-)
I hope it can be of use to you and feel free to adapt it.
Bug fixes, patches, and improvements are hapiliy accepted of course.
Same counts for LUA optimizations as this is the first time i wrote,copy/past a LUA script.
When i started this i didn't had a clue what i was doing ;-)
Siewert Lameijer
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
Dependencies:
1x Virtual switch to be able to manual override the irrigation program (Manual Override)
1x Soil Moist & Humidity sensor
1x Active WeatherUnderground account
1x Switch to be able to control your waterpump/valve which is somehow wireless connected to domoticz
1x Garden with irrigation hardware xD
The following UserVariable have to be create:
- VarBuienRadarCon (type=integer, value=0)
- VarFollowsProgram (type=integer, value=0)
- VarManOverride (type=integer, value=0)
- VarMaxRunTime (type=integer, value=0)
- VarMoistHumCon (type=integer, value=0)
- VarMoistLastSeen (type=integer, value=0)
- VarMoistOnline (type=integer, value=0)
- VarMoistOnlineHum (type=integer, value=0)
- VarMoistTempCon (type=integer, value=0)
- VarProgram (type=integer, value=0)
- VarProgramHasRun (type=integer, value=0)
- VarProgramStopHum (type=integer, value=0)
- VarScheduledDays (type=integer, value=0)
- VarScheduledMonths (type=integer, value=0)
- VarScheduledTOD (type=integer, value=0)
- VarScheduledTODcurrent (type=integer, value=0)
- VarWeatherCon (type=integer, value=0)
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
Changelog:
Version 1.1
- URL buienradar has changed
Version 1.0
- Initial release
Version 0.9
- Added thirth Log Info option (only Pump info)
Version 0.8
- Added validate check for switches and uservariables
- Fixed some misspelling (Do you find more misspellings, please let me know
- Added Max MoisSensor Last Seen option
Version 0.7
- Rewrote script due to a issue for which i couldn't find the culprit
- Reduced the amount of uservariables
- Some UserVariables have been renamed
- Fixed Soil Humidity scrap script
- Added MoistSensor Last Seen Check (max last seen is set to 10min)
- Fixed MaxRunTime Counter
- Changed Buienradar prediction to 2hr as this is the max by Buienradar it self
- Optimized Manual pump start
- Optimized displayed text in log regarding the running program and it's doings
- Fixed program stop when target humidity has been reached
- Fixed TimeOfTheDay schedule
- Added counter to log to see how long the irrigation program is still active until shutdown
- Added code to check when the moist sensor was last seen, if longer then 10minuten then no irrigation
Version 0.6
- Optimized reset switches
- Added new UserVariable for be sure a irrigation cycle has complete ( VarProgramHasRun (type=integer, value=0) )
- Fixed some issues with Manual Override
- Added extra lines to show in log if you enabled manual override
Version 0.5
- Buienradar MaxRainFall changed, it is now a average of your desired max rain fall input to prevent the switch to flip flop
- Optimized Moist sensor script as it now triggers irrigation on a minimum value and shutsdown on a maximum value
- Added extra loggin option
- Added option to use Buienradar or not
- Added option to use Dutch or English translation
Version 0.4
- Changed Days, Months to text instead of numbers as input
- Optimized irrigation program ending and keeping it that until the next time schedule
Version 0.3
- Added Buienradar (IsItGonnaRain) script
- Optimized Max irrigation time script
- Clean some code
- Reorderd printed text
Version 0.2
- Added counter for Max irrigation time
- Added manual override
- Optimized WeatherUnderground scraping data
- Optimized Moist sensor scraping data
- Optimized user input Time Of The Day, Days and Months
Version 0.1
- Added WeatherUnderground and scraping data
- Added Moist sensor scraping Temp & Humidity data
- Added Moist sensor online check
- Added user input for Time Of The Day where irrigation may start
- Added user input for days and months where the irrigation may start
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-]]
--
-- **********************************************************
-- Settings Begin
-- **********************************************************
--
-- Set your desired language (English, Dutch)
local lang = 'English'
-- Logging:
-- 0 = None,
-- 1 = Little Bit,
-- 2 = All,
-- 3 = Only Pump Info
local logging = 2
--
-- **********************************************************
-- Water Valve/Pump Variables
-- **********************************************************
--
-- Name of your irrigation switch for water valve/pump
local VarIsPump = 'Irrigation_Valve'
-- Max minuten/times we want to switch OFF irrigation after the program has started.
local VarMaxRunTime = 45
--
-- **********************************************************
-- Virtual Switches Variables
-- **********************************************************
--
-- Name of your manual override virtual switch
local VitManOverride = 'Irrigatie_Manual_Override'
--
-- **********************************************************
-- WeatherUnderGround Settings
-- **********************************************************
--
-- Name of your Weatherstation widget which contains humidity,uv,temp and pressure
local weatherstation = 'Barometer'
-- Name of your Weatherstation Wind widget
local wind = 'Wind'
-- Name of your Weatherstation Rain widget
local rain = 'Regenmeter'
-- Name of your Weatherstation UV widget
local uv = 'UV'
--
-- **********************************************************
-- WeatherUnderground Variables
-- **********************************************************
--
-- Set your prefered max rain fall, higher won't trigger irrigation
local RainMax = '0'
-- Set your prefered minimum outside temperature for irrigation, Lower won't trigger irrigation
local WeatherTempMin = '13'
-- Set your prefered maximum outside temperature for irrigation, Higher won't trigger irrigation
local WeatherTempMax = '25'
-- Set your prefered maximum UV for irrigation, Higher won't trigger irrigation
local UVMax = '5'
-- Set your prefered max windspeed km/h, higher won't trigger irrigation
local WindSpeed = '50'
-- Set your prefered max windgust km/h, higher won't trigger irrigation
local WindGust = '150'
--
-- **********************************************************
-- BuienRadar Location and minimum Rain Fall Variables
-- **********************************************************
--
-- Do you want to use BuienRadar? Yes or No (only usable for Dutch users)
local Buienradar = 'No' --(Dutch weather, rain prediction)
-- Set your location by adding Lat/Lon
local lat = '53.338023'
local lon = '6.303114'
-- Set your minimum rain fall for in a periode of 24hr
-- mm/per uur = 10^((waarde -109)/32)
-- Dus 77 = 0.1 mm/uur
local VarMaxRainFall = '100'
--
-- **********************************************************
-- MoistSensor Variables
-- **********************************************************
--
-- Name of your Moist Sensor device
local MoistSensor = 'MoistSensor'
-- Last Seen Max time in seconds for when the program will halt
local VarMoistLastSeen = 300
-- Your target soil humidity percentage
local VarTarHum = '75'
-- Your minumim soil humidity percentage from which the irrigation will start
local VarMinHum = '45'
-- Your Minumum soil temperature, Lower won't trigger irrigation
local VarTarTempMin = '12'
-- Your Maximum soil temperature, Higher won't trigger irrigation
local VarTarTempMax = '30'
--
-- **********************************************************
-- Scheduled Days
-- **********************************************************
--
-- Set your desired TimeOfDay for irrigation (Morning=0, Afternoon=1, Evening=2 or Night=3)
local VarTimeOfDay = '2'
-- Set your desired irrigation day, leave blank for no irrigation
-- Set Mon, Tue, Wed, Thu, Fri, Sat or Sun
local VarDay1 = 'Mon'
local VarDay2 = ''
local VarDay3 = 'Wed'
local VarDay4 = ''
local VarDay5 = 'Fri'
local VarDay6 = ''
local VarDay7 = 'Sun'
--
-- **********************************************************
-- Scheduled Months
-- **********************************************************
--
-- Set your desired irrigation month, leave blank for no irrigation,
-- Set months like: Jan, Feb, Apr, May, Jun, Jul, Aug, Sep, ect ect
local VarMonth1 = ''
local VarMonth2 = ''
local VarMonth3 = ''
local VarMonth4 = 'Apr'
local VarMonth5 = 'May'
local VarMonth6 = 'Jun'
local VarMonth7 = 'Jul'
local VarMonth8 = 'Aug'
local VarMonth9 = 'Sep'
local VarMonth10 = ''
local VarMonth11 = ''
local VarMonth12 = ''
--
-- **********************************************************
-- Settings End
-- **********************************************************
--
--[[
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
Don't edit anything below this line or you could break the script!
-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-_-
--]]
commandArray = {}
--
-- **********************************************************
-- Irrigation Program Variables Check
-- **********************************************************
--
--
-- Error logging.
--
function error(msg)
print("--------------------------------------------------------------------------------------")
print('-- Irrigation [ERROR] ==> ' .. msg)
end
function validate()
result = true
--
-- Switches and Devices Error logging.
--
if not otherdevices[VarIsPump] then
error('Device [' .. VarIsPump .. '] doesnt exist.')
result = false
end
if not otherdevices[VitManOverride] then
error('Device [' .. VitManOverride .. '] doesnt exist.')
result = false
end
if not otherdevices[weatherstation] then
error('Device [' .. weatherstation .. '] doesnt exist.')
result = false
end
if not otherdevices[wind] then
error('Device [' .. wind .. '] doesnt exist.')
result = false
end
if not otherdevices[rain] then
error('Device [' .. rain .. '] doesnt exist.')
result = false
end
if not otherdevices[wind] then
error('Device [' .. uv .. '] doesnt exist.')
result = false
end
if not otherdevices[MoistSensor] then
error('Device [' .. MoistSensor .. '] doesnt exist.')
result = false
end
--
-- User Variables Error logging.
--
if not uservariables['VarBuienRadarCon'] then
error('User Variable [ VarBuienRadarCon ] doesnt exist.')
result = false
end
if not uservariables['VarFollowsProgram'] then
error('User Variable [ VarFollowsProgram ] doesnt exist.')
result = false
end
if not uservariables['VarManOverride'] then
error('User Variable [ VarManOverride ] doesnt exist.')
result = false
end
if not uservariables['VarMaxRunTime'] then
error('User Variable [ VarMaxRunTime ] doesnt exist.')
result = false
end
if not uservariables['VarMoistHumCon'] then
error('User Variable [ VarMoistHumCon ] doesnt exist.')
result = false
end
if not uservariables['VarMoistLastSeen'] then
error('User Variable [ VarMoistLastSeen ] doesnt exist.')
result = false
end
if not uservariables['VarMoistOnline'] then
error('User Variable [ VarMoistOnline ] doesnt exist.')
result = false
end
if not uservariables['VarMoistOnlineHum'] then
error('User Variable [ VarMoistOnlineHum ] doesnt exist.')
result = false
end
if not uservariables['VarMoistTempCon'] then
error('User Variable [ VarMoistTempCon ] doesnt exist.')
result = false
end
if not uservariables['VarProgram'] then
error('User Variable [ VarProgram ] doesnt exist.')
result = false
end
if not uservariables['VarProgramHasRun'] then
error('User Variable [ VarProgramHasRun ] doesnt exist.')
result = false
end
if not uservariables['VarProgramStopHum'] then
error('User Variable [ VarProgramStopHum ] doesnt exist.')
result = false
end
if not uservariables['VarScheduledDays'] then
error('User Variable [ VarScheduledDays ] doesnt exist.')
result = false
end
if not uservariables['VarScheduledMonths'] then
error('User Variable [ VarScheduledMonths ] doesnt exist.')
result = false
end
if not uservariables['VarScheduledTOD'] then
error('User Variable [ VarScheduledTOD ] doesnt exist.')
result = false
end
if not uservariables['VarScheduledTODcurrent'] then
error('User Variable [ VarScheduledTODcurrent ] doesnt exist.')
result = false
end
if not uservariables['VarWeatherCon'] then
error('User Variable [ VarWeatherCon ] doesnt exist.')
result = false
end
return result
end
--
-- **********************************************************
-- END Irrigation Program Variables Check
-- **********************************************************
--
if validate() then
time = os.date("*t")
--
-- **********************************************************
-- Scrapping Weather Data from WeatherUnderground
-- **********************************************************
--
if logging >= 1 and logging <= 2 then
print("--------------------------------------------------------------------------------------")
if lang == 'Dutch' then
print('-- Irrigatie [HET WEER]');
else
print('-- Irrigation [WEATHER]');
end
end
--
--
-- WeatherStation data:
--
sWeatherTemp, sWeatherHumidity, sWeatherUV, sWeatherPressure, sWeatherUV2 = otherdevices_svalues[weatherstation]:match("([^;]+);([^;]+);([^;]+);([^;]+);([^;]+)")
sWeatherTemp = tonumber(sWeatherTemp);
sWeatherHumidity = tonumber(sWeatherHumidity);
sWeatherUV = tonumber(sWeatherUV);
sWeatherPressure = tonumber(sWeatherPressure);
sWeatherUV2 = tonumber(sWeatherUV2);
if logging == 1 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [WeerStation] - Temperatuur: " .. sWeatherTemp .. " ");
else
print("-- Irrigation ==> [WeatherStation] - Temperature: " .. sWeatherTemp .. " ");
end
end
if logging == 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [WeerStation] - Temperatuur: " .. sWeatherTemp .. " ");
print("-- Irrigatie ==> [WeerStation] - Vochtigheid: " .. sWeatherHumidity .. " ");
print("-- Irrigatie ==> [WeerStation] - Barometer: " .. sWeatherPressure .. " ");
else
print("-- Irrigation ==> [WeatherStation] - Temperature: " .. sWeatherTemp .. " ");
print("-- Irrigation ==> [WeatherStation] - Humidity: " .. sWeatherHumidity .. " ");
print("-- Irrigation ==> [WeatherStation] - Pressure: " .. sWeatherPressure .. " ");
end
end
--
-- Windmeter data:
--
sWindDirectionDegrees, sWindDirection, sWindSpeed, sWindGust, sWindTemperature, sWindFeel = otherdevices_svalues[wind]:match("([^;]+);([^;]+);([^;]+);([^;]+);([^;]+);([^;]+)")
sWindDirectionDegrees = tonumber(sWindDirectionDegrees);
sWindDirection = (sWindDirection);
sWindSpeed = tonumber(sWindSpeed);
sWindGust = tonumber(sWindGust);
sWindTemperature = tonumber(sWindTemperature);
sWindFeel = tonumber(sWindFeel);
if logging == 1 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [Windmeter] - Windsnelheid: " .. sWindSpeed .. " ");
print("-- Irrigatie ==> [Windmeter] - Windvlaag: " .. sWindGust .. " ");
else
print("-- Irrigation ==> [Windmeter] - Windspeed: " .. sWindSpeed .. " ");
print("-- Irrigation ==> [Windmeter] - Windgust: " .. sWindGust .. " ");
end
end
if logging == 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [Windmeter] - Windrichting (in graden): " .. sWindDirectionDegrees .. " ");
print("-- Irrigatie ==> [Windmeter] - Windrichting: " .. sWindDirection .. " ");
print("-- Irrigatie ==> [Windmeter] - Windsnelheid: " .. sWindSpeed .. " ");
print("-- Irrigatie ==> [Windmeter] - Windvlaag: " .. sWindGust .. " ");
print("-- Irrigatie ==> [Windmeter] - Windtemperatuur: " .. sWindTemperature .. " ");
print("-- Irrigatie ==> [Windmeter] - Gevoelstemperatuur: " .. sWindFeel .. " ");
else
print("-- Irrigation ==> [Windmeter] - Winddirection (in degrees): " .. sWindDirectionDegrees .. " ");
print("-- Irrigation ==> [Windmeter] - Winddirection: " .. sWindDirection .. " ");
print("-- Irrigation ==> [Windmeter] - Windspeed: " .. sWindSpeed .. " ");
print("-- Irrigation ==> [Windmeter] - Windgust: " .. sWindGust .. " ");
print("-- Irrigation ==> [Windmeter] - Windtemperature: " .. sWindTemperature .. " ");
print("-- Irrigation ==> [Windmeter] - Windfeel: " .. sWindFeel .. " ");
end
end
--
-- Rainmeter data:
--
sRainmeterCurrent, sRainmeterTotal = otherdevices_svalues[rain]:match("([^;]+);([^;]+)")
sRainmeterCurrent = tonumber(sRainmeterCurrent);
sRainmeterTotal = tonumber(sRainmeterTotal);
if logging >= 1 and logging <= 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [Regenmeter] - Actuele regenval: " .. sRainmeterCurrent .. " ");
print("-- Irrigatie ==> [Regenmeter] - Totale regenval: " .. sRainmeterTotal .. " ");
else
print("-- Irrigation ==> [Rainmeter] - Actual rain is: " .. sRainmeterCurrent .. " ");
print("-- Irrigation ==> [Rainmeter] - Total rain is: " .. sRainmeterTotal .. " ");
end
end
--
-- UV data:
--
sUV, sSolar = otherdevices_svalues[uv]:match("([^;]+);([^;]+)")
sUV = tonumber(sUV);
sSolar = tonumber(sSolar);
if logging >= 1 and logging <= 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [UV] - UV Sterkte: " .. sUV .." ");
else
print("-- Irrigation ==> [UV] - UV Strength: " .. sUV .." ");
end
end
if sRainmeterTotal <= tonumber (RainMax)
and sWeatherTemp >= tonumber (WeatherTempMin)
and sWeatherTemp <= tonumber (WeatherTempMax)
and sUV <= tonumber (UVMax)
and sWindSpeed <= tonumber (WindSpeed)
and sWindGust <= tonumber (WindGust)
then
if logging >= 1 and logging <= 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [WEER INFO] - Weer conditie lijkt goed voor irrigatie");
else
print("-- Irrigation ==> [WEATHER INFO] - Weather conditions are looking good and ready for irrigation");
end
end
if(uservariables['VarWeatherCon'] == 0) then
commandArray['Variable:VarWeatherCon']= '1'
end
else
if logging >= 1 and logging <= 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [WEER INFO] - Weer conditie lijkt NIET goed voor irrigatie");
else
print("-- Irrigation [WEATHER INFO] ==> Weather conditions aren't good for irrigation");
end
end
if(uservariables['VarWeatherCon'] == 1) then
commandArray['Variable:VarWeatherCon']= '0'
end
end
--
-- **********************************************************
-- Checking Buienradar
-- **********************************************************
--
if Buienradar == 'Yes' then
if logging >= 1 and logging <= 2 then
print("--------------------------------------------------------------------------------------")
print("-- Irrigation [BUIENRADAR]");
end
tempfilename = '/var/tmp/rain.tmp'
totalrain = 0
rainlines = 0
function IsItGonnaRain( minutesinfuture )
--url='http://gps.buienradar.nl/getrr.php?lat='..lat..'&lon='..lon
url='https://gadgets.buienradar.nl/data/raintext?lat='..lat..'&lon='..lon
read = os.execute('curl -s -o '..tempfilename..' "'..url..'"')
file = io.open(tempfilename, "r")
while true do
line = file:read("*line")
if not line then break end
linetime=string.sub(tostring(line), 5, 9)
linetime2 = os.time{year=os.date('%Y'), month=os.date('%m'), day=os.date('%d'), hour=string.sub(linetime,1,2), min=string.sub(linetime,4,5), sec=os.date('%S')}
difference = os.difftime (linetime2,os.time())
if ((difference > 0) and (difference<=minutesinfuture*60)) then
rain=tonumber(string.sub(tostring(line), 0, 3))
totalrain = totalrain+rain
rainlines=rainlines+1
end
end
file:close()
averagerain=totalrain/rainlines
return(averagerain)
end
function round(num, idp)
local mult = 10^(idp or 0)
return math.floor(num * mult + 0.5) / mult
end
--
-- **********************************************************
-- Is it gonna rain for the upcoming 2hr YES/NO
-- **********************************************************
--
minutes=120
RainPrediction = IsItGonnaRain(minutes)
RainmmHour=10^((RainPrediction-109)/32)
if RainPrediction >= tonumber (VarMaxRainFall) then
verw = 3
if (uservariables['VarBuienRadarCon']) == 1 then
commandArray['Variable:VarBuienRadarCon']= '0'
end
if logging >= 1 and logging <= 2 then
print('-- Irrigation ==> [REGEN] - ['..RainPrediction..'] regen verwacht binnen 2uur')
end
else
verw = 2
if (uservariables['VarBuienRadarCon']) == 0 then
commandArray['Variable:VarBuienRadarCon']= '1'
end
if logging >= 1 and logging <= 2 then
print('-- Irrigatie ==> [REGEN] - Geen of weinig regen verwacht binnen 2uur')
end
end
end
--
-- **********************************************************
-- MoistSensor Scrapping Temparature and humidity
-- **********************************************************
--
smoistsensorTemp, smoistsensorHumidity = otherdevices_svalues[MoistSensor]:match("([^;]+);([^;]+);([^;]+)")
smoistsensorTemp = tonumber(smoistsensorTemp);
smoistsensorHumidity = tonumber(smoistsensorHumidity);
if logging >= 1 and logging <= 2 then
print("--------------------------------------------------------------------------------------")
if lang == 'Dutch' then
print("-- Irrigatie [GROND CONDITIES]");
else
print("-- Irrigation [SOIL CONDITION]");
end
end
if logging >= 1 and logging <= 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [VochtSensor] - Grond Temperatuur: " .. smoistsensorTemp .. " ");
print("-- Irrigatie ==> [VochtSensor] - Grond Vochtigheid: " .. smoistsensorHumidity .. " ");
else
print("-- Irrigation ==> [MoistSensor] - Soil Temperature: " .. smoistsensorTemp .. " ");
print("-- Irrigation ==> [MoistSensor] - Soil Humidity: " .. smoistsensorHumidity .. " ");
end
end
--
-- **********************************************************
-- MoistSensor Checking Soil Temperature Conditions
-- **********************************************************
--
if smoistsensorTemp >= tonumber (VarTarTempMin)
and smoistsensorTemp <= tonumber (VarTarTempMax)
then
if logging <= 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [VochtSensor] - Grond temperatuur is goed voor irrigatie");
else
print("-- Irrigation ==> [MoistSensor] - Soil temperatuur is fine for irrigation");
end
end
if(uservariables['VarMoistTempCon'] == 0) then
commandArray['Variable:VarMoistTempCon']= '1'
end
elseif smoistsensorTemp <= tonumber (VarTarTempMin) then
if logging <= 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [VochtSensor] - Grond temperatuur is te laag");
else
print("-- Irrigation ==> [MoistSensor] - Soil Temperature is to low");
end
end
if(uservariables['VarMoistTempCon'] == 1) then
commandArray['Variable:VarMoistTempCon']= '0'
end
elseif smoistsensorTemp >= tonumber (VarTarTempMax) then
if logging <= 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [VochtSensor] - Grond temperatuur is te hoog");
else
print("-- Irrigation ==> [MoistSensor] - Soil Temperature is to high");
end
end
if(uservariables['VarMoistTempCon'] == 1) then
commandArray['Variable:VarMoistTempCon']= '0'
end
end
--
-- **********************************************************
-- MoistSensor Checking Soil Humidity Conditions
-- **********************************************************
--
if smoistsensorHumidity >= tonumber (VarMinHum)
and smoistsensorHumidity <= tonumber (VarTarHum)
then
if logging <= 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [VochtSensor] - Grond vochtigheid is goed, geen irrigatie nodig");
else
print("-- Irrigation ==> [MoistSensor] - Soil Humidity conditions are fine, no irrigation required");
end
end
if(uservariables['VarMoistHumCon'] == 1) then
commandArray['Variable:VarMoistHumCon']= '0'
end
elseif smoistsensorHumidity <= tonumber (VarMinHum) then
if logging <= 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [VochtSensor] - Grond vochtigheid is te laag");
else
print("-- Irrigation ==> [MoistSensor] - Soil humidity is to low");
end
end
if(uservariables['VarMoistHumCon'] == 0) then
commandArray['Variable:VarMoistHumCon']= '1'
end
elseif smoistsensorHumidity >= tonumber (VarTarHum) then
if logging <= 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [VochtSensor] - Grond vochtigheid is te hoog");
else
print("-- Irrigation ==> [MoistSensor] - Soil humidity is to high");
end
end
if(uservariables['VarMoistHumCon'] == 1) then
commandArray['Variable:VarMoistHumCon']= '0'
end
end
--
-- **********************************************************
-- MoistSensor online check
-- **********************************************************
--
if (smoistsensorTemp == 0 or smoistsensorTemp == nil) then
if logging >= 1 and logging <= 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [VochtSensor] - [ERROR] Vochtsensor geeft een temperatuur aan van 0 of nil");
else
print('-- Irrigation ==> [MoistSensor] - [ERROR] Moist Sensor reports Temp is 0 or nil')
end
end
if(uservariables['VarMoistOnline'] == 1) then
commandArray['Variable:VarMoistOnline']= '0'
end
else
if(uservariables['VarMoistOnline'] == 0) then
commandArray['Variable:VarMoistOnline']= '1'
end
end
if (smoistsensorHumidity <= 6 or smoistsensorHumidity == nil) then
if logging >= 1 and logging <= 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [VochtSensor] - [ERROR] Vochtsensor geeft een vochtigheid aan van 0 of nil");
else
print('-- Irrigation ==> [MoistSensor] - [ERROR] ==> Moist Sensor reports wrong Humidity values')
end
end
if(uservariables['VarMoistOnlineHum'] == 1) then
commandArray['Variable:VarMoistOnlineHum']= '0'
end
else
if(uservariables['VarMoistOnlineHum'] == 0) then
commandArray['Variable:VarMoistOnlineHum']= '1'
end
end
--
-- **********************************************************
-- MoistSensor Last Seen Check
-- **********************************************************
--
t1 = os.time()
s = otherdevices_lastupdate[MoistSensor]
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
Moist = (os.difftime (t1, t2))
if (Moist > VarMoistLastSeen) then
if logging >= 1 and logging <= 2 then
print('--')
if lang == 'Dutch' then
print('--')
print('-- Irrigatie ==> [VochtSensor] - [ERROR] Vochtsensor '..Moist..' Seconden geleden voor het laatste gezien')
print('-- Irrigatie ==> [VochtSensor] - Dat is te lang geleden om een betrouwbaar beeld te vormen')
else
print('--')
print('-- Irrigation ==> [MoistSensor] - [ERROR] MoistSensor last seen '..Moist..' seconds ago')
print('-- Irrigation ==> [MoistSensor] - Thats too long ago to be reliable')
end
end
if(uservariables['VarMoistLastSeen'] == 1) then
commandArray['Variable:VarMoistLastSeen']= '0'
end
else
if logging <= 2 then
if lang == 'Dutch' then
print('-- Irrigatie ==> [VochtSensor] - Vochtsensor '..Moist..' Seconden geleden voor het laatste gezien')
else
print('-- Irrigation ==> [MoistSensor] - MoistSensor last seen '..Moist..' seconds ago')
end
end
if(uservariables['VarMoistLastSeen'] == 0) then
commandArray['Variable:VarMoistLastSeen']= '1'
end
end
--
-- **********************************************************
-- Retrieve Date & Time
-- **********************************************************
--
week = tonumber(os.date("%V"));
month = tostring(os.date("%b"));
dayno = tonumber(os.date("%d"));
dayofweekno = tonumber(os.date("%w"));
day = tostring(os.date("%a"));
hour = tonumber(os.date("%H"));
min = tonumber(os.date("%M"));
--
-- **********************************************************
-- Checking Scheduled Days
-- **********************************************************
--
if logging >= 1 and logging <= 2 then
print("--------------------------------------------------------------------------------------")
if lang == 'Dutch' then
print('-- Irrigatie [ROOSTER]')
else
print('-- Irrigation [TIMEFRAME]')
end
end
if day == VarDay1 or day == VarDay2 or day == VarDay3 or day == VarDay4 or day == VarDay5 or day == VarDay6 or day == VarDay7
then
if logging >= 1 and logging <= 2 then
if lang == 'Dutch' then
print(os.date("-- Irrigatie ==> [Rooster] - Vandaag is het %A en jouw ingeroosterde voorkeurs irrigatie dag"))
else
print(os.date("-- Irrigation ==> [Scheduled Days] - Today is %A and it is your desired scheduled day"))
end
end
if logging <= 2 then
if lang == 'Dutch' then
print('-- Irrigatie ==> [Rooster] - Ingeroosterde dagen: '..VarDay1..' '..VarDay2..' '..VarDay3..' '..VarDay4..' '..VarDay5..' '..VarDay6..' '..VarDay7..'')
else
print('-- Irrigation ==> [Scheduled Days] - Scheduled days: '..VarDay1..' '..VarDay2..' '..VarDay3..' '..VarDay4..' '..VarDay5..' '..VarDay6..' '..VarDay7..'')
end
end
if(uservariables['VarScheduledDays'] == 0) then
commandArray['Variable:VarScheduledDays']= '1'
end
else
if logging >= 1 and logging <= 2 then
if lang == 'Dutch' then
print(os.date("-- Irrigatie ==> [Rooster] - Vandaag is het %A en is NIET jouw ingeroosterde voorkeurs irrigatie dag"))
else
print(os.date("-- Irrigation ==> [Scheduled Days] - Today is %A and it is NOT your desired scheduled day"))
end
end
if logging <= 2 then
if lang == 'Dutch' then
print('-- Irrigatie ==> [Rooster] - Ingeroosterde dagen: '..VarDay1..' '..VarDay2..' '..VarDay3..' '..VarDay4..' '..VarDay5..' '..VarDay6..' '..VarDay7..'')
else
print('-- Irrigation ==> [Scheduled Days] - Scheduled days are: '..VarDay1..' '..VarDay2..' '..VarDay3..' '..VarDay4..' '..VarDay5..' '..VarDay6..' '..VarDay7..'')
end
end
if(uservariables['VarScheduledDays'] == 1) then
commandArray['Variable:VarScheduledDays']= '0'
end
end
--
-- **********************************************************
-- Scheduled Months
-- **********************************************************
--
if month == VarMonth1 or month == VarMonth2 or month == VarMonth3 or month == VarMonth4 or month == VarMonth5 or month == VarMonth6 or month == VarMonth7 or month == VarMonth8 or month == VarMonth9 or month == VarMonth10 or month == VarMonth11 or month == VarMonth12
then
if logging >= 1 and logging <= 2 then
if lang == 'Dutch' then
print(os.date("-- Irrigatie ==> [Rooster] - Vandaag is het en dag in %B, en jouw ingeroosterde voorkeurs irrigatie maand"))
else
print(os.date("-- Irrigation ==> [Scheduled Months] - Today is a day in %B, and is scheduled for irrigation"))
end
end
if logging <= 2 then
if lang == 'Dutch' then
print('-- Irrigatie ==> [Rooster] - Ingeroosterde maanden: '..VarMonth1..' '..VarMonth2..' '..VarMonth3..' '..VarMonth4..' '..VarMonth5..' '..VarMonth6..' '..VarMonth7..' '..VarMonth8..' '..VarMonth9..' '..VarMonth10..' '..VarMonth11..' '..VarMonth12..'')
else
print('-- Irrigation ==> [Scheduled Months] - Scheduled months: '..VarMonth1..' '..VarMonth2..' '..VarMonth3..' '..VarMonth4..' '..VarMonth5..' '..VarMonth6..' '..VarMonth7..' '..VarMonth8..' '..VarMonth9..' '..VarMonth10..' '..VarMonth11..' '..VarMonth12..'')
end
end
if(uservariables['VarScheduledMonths'] == 0) then
commandArray['Variable:VarScheduledMonths']= '1'
end
else
if logging >= 1 and logging <= 2 then
if lang == 'Dutch' then
print(os.date("-- Irrigatie ==> [Maand Rooster] - Vandaag is het een dag in %B, en is NIET jouw ingeroosterde voorkeurs irrigatie maand"))
else
print(os.date("-- Irrigation ==> [Scheduled Months] - Today is a day in %B, and isn't scheduled for irrigation"))
end
end
if logging <= 2 then
if lang == 'Dutch' then
print('-- Irrigatie ==> [Rooster] - Ingeroosterde maanden: '..VarMonth1..' '..VarMonth2..' '..VarMonth3..' '..VarMonth4..' '..VarMonth5..' '..VarMonth6..' '..VarMonth7..' '..VarMonth8..' '..VarMonth9..' '..VarMonth10..' '..VarMonth11..' '..VarMonth12..'')
else
print('-- Irrigation ==> [Scheduled Months] - Scheduled months are: '..VarMonth1..' '..VarMonth2..' '..VarMonth3..' '..VarMonth4..' '..VarMonth5..' '..VarMonth6..' '..VarMonth7..' '..VarMonth8..' '..VarMonth9..' '..VarMonth10..' '..VarMonth11..' '..VarMonth12..'')
end
end
if(uservariables['VarScheduledMonths'] == 1) then
commandArray['Variable:VarScheduledMonths']= '0'
end
end
--
-- **********************************************************
-- Scheduled Day Time
-- **********************************************************
--
if (timeofday['Daytime']) and (time.hour < 12)
then
if (uservariables['VarScheduledTODcurrent'] ~= 0) then
commandArray['Variable:VarScheduledTODcurrent']= '0'
end
elseif (timeofday['Daytime']) and (time.hour >= 12)
then
if (uservariables['VarScheduledTODcurrent'] ~= 1) then
commandArray['Variable:VarScheduledTODcurrent']= '1'
end
elseif (timeofday['Nighttime']) and (time.hour < 22)
then
if (uservariables['VarScheduledTODcurrent'] ~= 2) then
commandArray['Variable:VarScheduledTODcurrent']= '2'
end
elseif (timeofday['Nighttime']) and (time.hour >= 22)
then
if (uservariables['VarScheduledTODcurrent'] ~= 3) then
commandArray['Variable:VarScheduledTODcurrent']= '3'
end
elseif (timeofday['Nighttime'])
then
if (uservariables['VarScheduledTODcurrent'] ~= 3) then
commandArray['Variable:VarScheduledTODcurrent']= '3'
end
end
if (uservariables['VarScheduledTODcurrent']) == tonumber (VarTimeOfDay) then
if logging >= 1 and logging <= 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [Rooster] - Huidige dagdeel komt overeen met jouw voorkeurs dagdeel")
else
print("-- Irrigation ==> [Scheduled Time] - Time of the Day matches your desired scheduled TimeOfTheDay")
end
end
if (uservariables['VarScheduledTOD']) == 0 then
commandArray['Variable:VarScheduledTOD']= '1'
end
else
if logging >= 1 and logging <= 2 then
if lang == 'Dutch' then
print("-- Irrigatie ==> [Rooster] - Huidige dagdeel komt NIET overeen met jouw voorkeurs dagdeel")
else
print("-- Irrigation ==> [Scheduled Time] - Time of the Day doesn't match your desired scheduled TimeOfTheDay")
end
end
if (uservariables['VarScheduledTOD']) == 1 then
commandArray['Variable:VarScheduledTOD']= '0'
end
end
--
-- **********************************************************
-- Irrigation Program
-- **********************************************************
--
if Buienradar == 'Yes' then
if (uservariables['VarScheduledTOD'] == 1
and uservariables['VarScheduledMonths'] == 1
and uservariables['VarScheduledDays'] == 1
and uservariables['VarMoistHumCon'] == 1
and uservariables['VarMoistTempCon'] == 1
and uservariables['VarBuienRadarCon'] == 1
and uservariables['VarWeatherCon'] == 1
and uservariables['VarMoistOnline'] == 1
and uservariables['VarMoistOnlineHum'] == 1
and uservariables['VarMoistLastSeen'] == 1
and uservariables['VarProgramStopHum'] == 0
and uservariables['VarManOverride'] == 0
and uservariables['VarProgramHasRun'] == 0
and uservariables['VarFollowsProgram'] == 0
and uservariables['VarProgram'] == 0
and otherdevices[VarIsPump] == 'Off')
then
commandArray['Variable:VarProgram']= '1'
end
else
if (uservariables['VarScheduledTOD'] == 1
and uservariables['VarScheduledMonths'] == 1
and uservariables['VarScheduledDays'] == 1
and uservariables['VarMoistHumCon'] == 1
and uservariables['VarMoistTempCon'] == 1
and uservariables['VarWeatherCon'] == 1
and uservariables['VarMoistOnline'] == 1
and uservariables['VarMoistOnlineHum'] == 1
and uservariables['VarMoistLastSeen'] == 1
and uservariables['VarProgramStopHum'] == 0
and uservariables['VarManOverride'] == 0
and uservariables['VarProgramHasRun'] == 0
and uservariables['VarFollowsProgram'] == 0
and uservariables['VarProgram'] == 0
and otherdevices[VarIsPump] == 'Off')
then
commandArray['Variable:VarProgram']= '1'
end
end
local VarIsCounter = 'VarMaxRunTime'
local VarMax = VarMaxRunTime * -1
if logging >= 1 or logging == 3 then
print("--------------------------------------------------------------------------------------")
if lang == 'Dutch' then
print('-- Irrigatie [PROGRAMMA]')
else
print('-- Irrigation [PROGRAM]')
end
end
if otherdevices[VitManOverride] == 'On' and uservariables['VarManOverride'] == 0
then
commandArray['Variable:VarManOverride']= '1'
elseif otherdevices[VitManOverride] == 'On' and uservariables['VarManOverride'] == 1 and uservariables['VarMaxRunTime'] ~= VarMax
then
commandArray['Variable:VarMaxRunTime']=tostring(VarMax)
commandArray['Variable:VarProgram']= '0'
commandArray['Variable:VarProgramRun']= '0'
commandArray['Variable:VarProgramHasRun']= '0'
commandArray[VarIsPump]='Off'
elseif otherdevices[VitManOverride] == 'Off' and uservariables['VarManOverride'] == 1
then
commandArray['Variable:VarManOverride']= '0'
end
function info(msg)
if logging >= 1 or logging == 3 then
if lang == 'Dutch' then
print('-- Irrigatie ==> [Programma] - ' .. msg)
else
print('-- Irrigation ==> [Program] - ' .. msg)
end
end
end
function may_update(is_irrigate)
counter = tonumber(uservariables[VarIsCounter])
current_counter = counter
if is_irrigate and uservariables['VarManOverride'] == 0 and counter >= 0 then
counter = math.min(1, counter + 1)
elseif not is_irrigate and uservariables['VarManOverride'] == 0 and counter <= 0 then
counter = math.max(VarMaxRunTime * -1, counter - 1)
else
if uservariables['VarManOverride'] == 0 then
counter = 0
end
end
if counter ~= current_counter then
commandArray['Variable:' .. VarIsCounter]=tostring(counter)
end
result = false
if is_irrigate and counter >= 1 then
result = true
elseif not is_irrigate and math.abs(counter) >= VarMaxRunTime then
result = true
end
return result
end
function on_off(is_irrigate)
update_allowed = may_update(is_irrigate)
if logging >= 1 or logging == 3 then
if lang == 'Dutch' then
info('Pomp Status [' .. otherdevices[VarIsPump] .. ']')
else
info('Pump State [' .. otherdevices[VarIsPump] .. ']')
end
end
if update_allowed then
if otherdevices[VarIsPump] == 'Off'
and uservariables['VarProgram'] == 1
and uservariables['VarProgramHasRun'] == 0
and uservariables['VarManOverride'] == 0
and is_irrigate then
commandArray[VarIsPump]='On'
commandArray['Variable:VarProgram']= '0'
elseif (otherdevices[VarIsPump] == 'On'
and uservariables['VarProgram'] == 0
and uservariables['VarProgramHasRun'] == 0
and uservariables['VarManOverride'] == 0
and not is_irrigate) then
commandArray[VarIsPump]='Off'
commandArray['Variable:VarProgramHasRun']= '1'
commandArray['Variable:VarFollowsProgram']= '0'
end
end
end
function is_VarProgram_aan()
result = false
result = (uservariables['VarProgram'] == 1)
return result
end
on_off(is_VarProgram_aan())
--
-- **********************************************************
-- New timeframe so irrigation reactivated
-- **********************************************************
--
if (uservariables['VarScheduledTOD']) == 0 and (uservariables['VarProgramHasRun']) == 1
then
commandArray['Variable:VarProgramHasRun']= '0'
commandArray['Variable:VarProgramStopHum']= '0'
end
--
-- **********************************************************
-- Irrigation Program manual or automatic check
-- **********************************************************
--
if uservariables['VarMaxRunTime'] >= 0 and otherdevices[VarIsPump] == 'Off'
then
commandArray['Variable:VarFollowsProgram']= '1'
end
if otherdevices[VarIsPump] == 'On' and uservariables['VarFollowsProgram'] == 0
then
if lang == 'Dutch' then
print('-- Irrigatie ==> [Programma] - Irrigatie programma manueel gestart')
else
print('-- Irrigation ==> [Program] - Irrigation program started manually')
end
end
--
-- **********************************************************
-- Irrigation Program Max Run Time Remaining
-- **********************************************************
--
if uservariables['VarMaxRunTime'] <= 0 and otherdevices[VarIsPump] == 'On' and uservariables['VarFollowsProgram'] == 1
then
VarRemaining_counter = uservariables['VarMaxRunTime']
VarRemaining = VarRemaining_counter + VarMaxRunTime -1
if logging >= 2 or logging == 3 then
if lang == 'Dutch' then
print('-- Irrigatie ==> [Programma] - [' .. VarRemaining .. '] minuten resterend totdat programma word beeindigd')
else
print('-- Irrigation ==> [Program] - [' .. VarRemaining .. '] minutes remaining until irrigation will stop')
end
end
end
--
-- **********************************************************
-- Stop Irrigation when Moist Humidity has reached your desired humidity
-- **********************************************************
--
if (uservariables['VarFollowsProgram']) == 1 and (uservariables['VarProgramStopHum']) == 0
and smoistsensorHumidity >= tonumber (VarTarHum)
then
commandArray['Variable:VarProgramStopHum']= '1'
end
if (uservariables['VarFollowsProgram']) == 1 and (uservariables['VarProgramStopHum']) == 1
then
commandArray['Variable:VarMaxRunTime']=tostring(VarMax)
commandArray[VarIsPump]='Off'
commandArray['Variable:VarProgramHasRun']= '1'
commandArray['Variable:VarFollowsProgram']= '0'
end
if uservariables['VarProgramHasRun'] == 1
and (uservariables['VarProgramStopHum']) == 1
and uservariables['VarProgram'] == 0
and uservariables['VarManOverride'] == 0
and otherdevices[VarIsPump] == 'Off'
then
if logging >= 1 or logging == 3 then
if lang == 'Dutch' then
print('-- Irrigatie ==> [Programma] - Irrigatie programma heeft vandaag al geirrigeerd, Grondvochtigheid target is behaalt')
print('-- Irrigatie ==> [Programma] - Programma word op de eerst volgende irrigatie dag herstart')
else
print('-- Irrigation ==> [Program] - Irrigation program already irrigated today and soil humidity reached target')
print('-- Irrigation ==> [Program] - Program will reactivated on the next scheduled irrigation day')
end
end
end
--
-- **********************************************************
-- Irrigation Program Stop Information
-- **********************************************************
--
if uservariables['VarProgramHasRun'] == 1
and (uservariables['VarProgramStopHum']) == 0
and uservariables['VarProgram'] == 0
and uservariables['VarManOverride'] == 0
and otherdevices[VarIsPump] == 'Off'
then
if logging >= 1 or logging == 3 then
if lang == 'Dutch' then
print('-- Irrigatie ==> [Programma] - Irrigatie programma heeft vandaag al geirrigeerd, Grondvochtigheid target is NIET behaalt')
print('-- Irrigatie ==> [Programma] - Programma word op de eerst volgende irrigatie dag herstart')
else
print('-- Irrigation ==> [Program] - Irrigation program already irrigated today but soil humidity didnt reached target')
print('-- Irrigation ==> [Program] - Program will reactivated on the next scheduled irrigation day')
end
end
end
if uservariables['VarProgramHasRun'] == 0 and uservariables['VarProgram'] == 0 and uservariables['VarManOverride'] == 0 and otherdevices[VarIsPump] == 'Off'
then
if logging >= 1 or logging == 3 then
if lang == 'Dutch' then
print('-- Irrigatie ==> [Programma] - Irrigatie programma standby, en word hervat als alle condities inorde zijn')
else
print('-- Irrigation ==> [Program] - Irrigation program standby, awaiting for all conditions to be okay')
end
end
end
if uservariables['VarManOverride'] == 1 and otherdevices[VarIsPump] == 'Off'
then
if logging >= 1 or logging == 3 then
if lang == 'Dutch' then
print('-- Irrigatie ==> [Programma] - Irrigatie programma manueel gestopt')
else
print('-- Irrigation ==> [Program] - Irrigation program Stopped, Manual Override')
end
end
end
if logging >= 1 or logging == 3 then
print("--------------------------------------------------------------------------------------")
end
else
print("--------------------------------------------------------------------------------------")
end
return commandArray
Links
LUA Garden Irrigation Thread {Script}
DIY Garden Irrigation Thread {ShowYourProject}
--Siewert308SW (talk) 16:32, 14 July 2015 (CEST)