Announcement

Collapse
No announcement yet.

Syntax for running script in Homeseer from Allonis MyServer

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • simonmason
    replied
    Here is the other script related to this in case it is useful:

    Code:
    sub Sprinkler2(parms)
    
    Dim result
    Dim temp
    Dim data1
    Dim data2
    Dim hParm
    dim Program1Zone1Length, Program2Zone1Length, Program3Zone1Length, Program4Zone1Length, Program5Zone1Length, Program6Zone1Length, Program1TotalLength
    dim Program1StartTime
    dim filesys, filetxt
    dim RainSensor, ManualMode
    
    
    Const ForReading = 1, ForWriting = 2, ForAppending = 8
    
    Set filesys = CreateObject("Scripting.FileSystemObject")
    
    ' Q72, Q73 - Status variables for screen in MainLobby showing Last Event and Last Program
    
    
    'Called by:
    '
    ' Two parameters:
    ' data1 - Zone - ALL, ZONE1..6
    ' data2 - Command - ON, OFF
    ' data3 - Calling script or event
    
    REM hs.Writelog "Info","In script Sprinkler2.vbs"
    
    
    hParm = split(parms,";")
    data1 = hParm(0) '
    data2 = hParm(1)
    data3 = hParm(2)
    
    hs.writelog "Sprinkler2", "+++++++++++++++++++++++++++++++++++ SPRINKLER2 START +++++++++++++++++++++++++++++++++++ "
    
    hs.writelog "sprinkler2", "Parameters | data1 - " & data1 & " | data2 - " & data2 & " | data3 - " & data3
    
    
    
    'hs.writelog "Debug", "In sprinkler2.vbs - Data1 : " & data1
    'hs.writelog "Debug", "In sprinkler2.vbs - Data2 : " & data2
    'hs.writelog "Debug", "In sprinkler2.vbs - Data3 : " & data3
    
    ' Retrieve variables
    ' Pulling stored strings:
    CurrentProgramZone1Length = hs.devicestring("1350")
    CurrentProgramZone2Length = hs.devicestring("1351")
    CurrentProgramZone3Length = hs.devicestring("1352")
    CurrentProgramZone4Length = hs.devicestring("1353")
    CurrentProgramZone5Length = hs.devicestring("1354")
    CurrentProgramZone6Length = hs.devicestring("1355")
    Program1Zone1Length = hs.devicestring("1356")
    Program1Zone2Length = hs.devicestring("1357")
    Program1Zone3Length = hs.devicestring("1358")
    Program1Zone4Length = hs.devicestring("1359")
    Program1Zone5Length = hs.devicestring("1360")
    Program1Zone6Length = hs.devicestring("1361")
    Program2Zone1Length = hs.devicestring("1362")
    Program2Zone2Length = hs.devicestring("1363")
    Program2Zone3Length = hs.devicestring("1364")
    Program2Zone4Length = hs.devicestring("1365")
    Program2Zone5Length = hs.devicestring("1366")
    Program2Zone6Length = hs.devicestring("1367")
    Program3Zone1Length = hs.devicestring("1368")
    Program3Zone2Length = hs.devicestring("1369")
    Program3Zone3Length = hs.devicestring("1370")
    Program3Zone4Length = hs.devicestring("1371")
    Program3Zone5Length = hs.devicestring("1372")
    Program3Zone6Length = hs.devicestring("1373")
    Program1StartTime = hs.devicestring("1374")
    Program1EndTime = hs.devicestring("1377")
    Program2StartTime = hs.devicestring("1375")
    Program2EndTime = hs.devicestring("1378")
    Program3StartTime = hs.devicestring("1376")
    Program3EndTime = hs.devicestring("1379")
    ' Pulling device on/off status
    TimeInterval5 = hs.devicevalue("1380")
    TimeInterval15 = hs.devicevalue("1381")
    TimeInterval60 = hs.devicevalue("1382")
    Program1Enable = hs.devicevalue("1386")
    Program2Enable = hs.devicevalue("1387")
    Program3Enable = hs.devicevalue("1388")
    ProgramModeSchedule = hs.devicevalue("1385")
    SprinklerMonday = hs.devicevalue("2716")
    SprinklerTuesday = hs.devicevalue("2717")
    SprinklerWednesday = hs.devicevalue("2718")
    SprinklerThursday = hs.devicevalue("2719")
    SprinklerFriday = hs.devicevalue("2720")
    SprinklerSaturday = hs.devicevalue("2721")
    'hs.writelog "Sprinkler2", "SprinklerSaturday is " & SprinklerSaturday
    SprinklerSunday = hs.devicevalue("2722")
    SprinklerOddDays = hs.devicevalue("2725")
    SprinklerEvenDays = hs.devicevalue("2724")
    SprinklerInterval = hs.devicevalue("2723")
    RainSensor = hs.devicevalue("1341")
    ManualMode = hs.devicevalue("1383")
    
    REM Program1StartTime=dateadd("n",-5,Program1StartTime)
    REM Program1StartTime = FormatDateTime(Program1StartTime, 3)
    REM Program1EndTime = dateadd("n",+CurrentProgramTotalLength,Program1StartTime)
    REM Program1EndTime = FormatDateTime(Program1EndTime, 3)
    
    
    select case data1
    
    case "PROGRAM"
    select case data2
    case "CHECKSTARTPROGRAM"
    ' Called every 5 minutes to see if a program needs to be started.
    hs.writelog "Sprinkler2", "The current Sprinkler time is : " & time & " and I am checking to see if the sprinklers need to run"
    if ProgramModeSchedule = 100 then
    hs.writelog "Sprinkler2", "ProgramModeSchedule = " & ProgramModeSchedule & " - Program Mode is On"
    elseif ProgramModeSchedule = 0 then
    hs.writelog "Sprinkler2", "ProgramModeSchedule = " & ProgramModeSchedule & " - Program Mode is Off"
    end if
    if Program1Enable = 100 then
    hs.writelog "Sprinkler2", "Program1Enable = " & Program1Enable & " - Program 1 is Enabled"
    elseif Program1Enable = 0 then
    hs.writelog "Sprinkler2", "Program1Enable = " & Program1Enable & " - Program 1 is Disabled"
    end if
    if RainSensor = 100 then
    hs.writelog "Sprinkler2", "RainSensor = " & RainSensor & " - Rain Sensor is On"
    elseif RainSensor = 0 then
    hs.writelog "Sprinkler2", "RainSensor = " & RainSensor & " - Rain Sensor is Off"
    end if
    hs.writelog "Sprinkler2", "ProgramModeSchedule = " & ProgramModeSchedule
    ' ******************** ProgramModeSchedule is 0 or 100, not 2 from HS2 - need to find and fix all of these references.a
    if ProgramModeSchedule = 2 then
    dayofweek = Weekday(Date)
    hs.writelog "Sprinkler2", " ************ Program Mode Schedule is On"
    hs.writelog "Sprinkler2", " ************ Weekday - " & dayofweek
    dayofmonth = Day(Date)
    'hs.writelog "Sprinkler2", " ************ Day of Month - " & dayofmonth
    currenttime = FormatDateTime(time, 3)
    currenthour = Hour(currenttime)
    currentminute = Minute(currenttime)
    If dayofmonth Mod 2 = 0 Then
    'hs.writelog "Sprinkler2", "EVEN"
    evenday = 1
    oddday = 0
    Else
    'hs.writelog "Sprinkler2", "ODD"
    oddday = 1
    evenday = 0
    End If
    if SprinklerOddDays = 2 then
    'Odd is true
    if oddday = 1 then
    oktogo = 1
    'hs.writelog "Sprinkler2", "OK TO GO!"
    else
    oktogo = 0
    ' Setting Status and String of Ran Last Night Status Variable:
    hs.SetDeviceValue "Q2", 3
    status_string = now & " | The sprinklers didn't run last night because it was an even numbered day and they are set to run only on odd days."
    hs.SetDeviceString "1348", status_string, True
    end if
    elseif SprinklerEvenDays = 2 then
    'Even is true
    if evenday = 1 then
    oktogo = 1
    else
    oktogo = 0
    ' Setting Status and String of Ran Last Night Status Variable:
    hs.SetDeviceValue "Q2", 3
    status_string = now & " | The sprinklers didn't run last night because it was an odd numbered day and they are set to run only on even days."
    hs.SetDeviceString "1348", status_string , True
    end if
    end if
    if SprinklerSunday = 2 then
    hs.writelog "Sprinkler2", " ************ Sunday"
    hs.writelog "Sprinkler2", " ************ Dayofweek - " & dayofweek
    
    if dayofweek = 1 then
    oktogo = 1
    'hs.writelog "Sprinkler2", "Sunday - OK TO GO!"
    else
    ' Setting Status and String of Ran Last Night Status Variable:
    hs.SetDeviceValue "Q2", 3
    status_string = now & " | The sprinklers didn't run last night because it was a Sunday and they are set not to run on this day."
    hs.SetDeviceString "1348", status_string , True
    end if
    end if
    if SprinklerMonday = 2 then
    if dayofweek = 2 then
    oktogo = 1
    'hs.writelog "Sprinkler2", "Monday - OK TO GO!"
    else
    ' Setting Status and String of Ran Last Night Status Variable:
    hs.SetDeviceValue "Q2", 3
    status_string = now & " | The sprinklers didn't run last night because it was a Monday and they are set not to run on this day."
    hs.SetDeviceString "1348", status_string , True
    end if
    end if
    if SprinklerTuesday = 2 then
    if dayofweek = 3 then
    oktogo = 1
    'hs.writelog "Sprinkler2", "Tuesday - OK TO GO!"
    else
    ' Setting Status and String of Ran Last Night Status Variable:
    hs.SetDeviceValue "Q2", 3
    status_string = now & " | The sprinklers didn't run last night because it was a Tuesday and they are set not to run on this day."
    hs.SetDeviceString "1348", status_string , True
    end if
    end if
    if SprinklerWednesday = 2 then
    if dayofweek = 4 then
    oktogo = 1
    'hs.writelog "Sprinkler2", "Wednesday - OK TO GO!"
    else
    ' Setting Status and String of Ran Last Night Status Variable:
    hs.SetDeviceValue "Q2", 3
    status_string = now & " | The sprinklers didn't run last night because it was a Wednesday and they are set not to run on this day."
    hs.SetDeviceString "1348", status_string , True
    end if
    end if
    if SprinklerThursday = 2 then
    if dayofweek = 5 then
    oktogo = 1
    'hs.writelog "Sprinkler2", "Thursday - OK TO GO!"
    else
    ' Setting Status and String of Ran Last Night Status Variable:
    hs.SetDeviceValue "Q2", 3
    status_string = now & " | The sprinklers didn't run last night because it was a Thursday and they are set not to run on this day."
    hs.SetDeviceString "1348", status_string , True
    end if
    end if
    if SprinklerFriday = 2 then
    if dayofweek = 6 then
    oktogo = 1
    'hs.writelog "Sprinkler2", "Friday - OK TO GO!"
    else
    ' Setting Status and String of Ran Last Night Status Variable:
    hs.SetDeviceValue "Q2", 3
    status_string = now & " | The sprinklers didn't run last night because it was a Friday and they are set not to run on this day."
    hs.SetDeviceString "1348", status_string , True
    end if
    end if
    if SprinklerSaturday = 2 then
    'hs.writelog "Sprinkler2", "It's Saturday - checking to see if sprinklers should be turned on"
    if dayofweek = 7 then
    oktogo = 1
    'hs.writelog "Sprinkler2", "Saturday - OK TO GO!"
    else
    ' Setting Status and String of Ran Last Night Status Variable:
    hs.SetDeviceValue "Q2", 3
    status_string = now & " | The sprinklers didn't run last night because it was a Saturday and they are set not to run on this day."
    hs.SetDeviceString "1348", status_string , True
    end if
    end if
    if oktogo = 1 then
    if Program1Enable = 2 then
    Program1Hour = Hour(Program1StartTime)
    Program1Minute = Minute(Program1StartTime)
    'hs.writelog "Sprinkler2", "currenttime is " & currenttime & " currentminute is " & currentminute & " currenthour is " & currenthour & " Program1Hour is " & Program1Hour & " Program1Minute is " & Program1Minute
    if Program1Hour = currenthour then
    if Program1Minute = currentminute then
    if RainSensor <> 2 then
    'hs.writelog "Sprinkler2", "Starting Sprinkler Program 1 on automatic schedule"
    'error = hs.runex("sprinkler.vbs", "Sprinkler","PROGRAM;1;SPRINKLER2.VBS")
    error = hs.RunScriptFunc("sprinkler.vbs","Sprinkler","PROGRAM;1;SPRI NKLER2.VBS",False,False)
    'error = hs.runex("EtherRain.vb", "runNamedCycle","EtherRain.8; Full")
    status_string = now & " | Sprinkler Program 1"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "1349", status_string, True
    Set filetxt = filesys.OpenTextFile("vacalog.txt", ForAppending, True)
    filetxt.WriteLine(status_string)
    filetxt.Close
    ' Setting Status and String of Ran Last Night Status Variable:
    hs.SetDeviceValue "Q2", 2
    status_string = now & " | Sprinkler Program 1 ran last night"
    hs.SetDeviceString "1348", status_string , True
    elseif RainSensor = 2 then
    status_string = now & " | Rain Sensor is On so Automatic Program 1 not Started"
    'hs.writelog "Sprinkler2", "Sprinklers not started because rain sensor is on"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "1349", status_string, True
    ' I disabled the following log update because it was updating everytime the sprinkler program ran - turned back on
    Set filetxt = filesys.OpenTextFile("vacalog.txt", ForAppending, True)
    filetxt.WriteLine(status_string)
    filetxt.Close
    hs.writelog "Sprinkler", "******************** Stopped Sprinkler Automatic Program 1 - Rain *****************************"
    ' Setting Status and String of Ran Last Night Status Variable:
    hs.SetDeviceValue "Q2", 3
    status_string = now & " | Sprinkler program 1 was scheduled to run last night but didn't because it was raining."
    hs.SetDeviceString "1348", status_string , True
    end if
    end if
    end if
    elseif Program2Enable = 2 then
    Program2Hour = Hour(Program2StartTime)
    Program2Minute = Minute(Program2StartTime)
    if Program2Hour = currenthour then
    if Program2Minute = currentminute then
    if RainSensor <> 2 then
    'error = hs.runex("sprinkler.vbs", "Sprinkler","PROGRAM;2;SPRINKLER2.VBS")
    error = hs.RunScriptFunc("sprinkler.vbs","Sprinkler","PROGRAM;2;SPRI NKLER2.VBS",False,False)
    'error = hs.runex("EtherRain.vb", "runNamedCycle","EtherRain.8; Front")
    hs.writelog "Sprinkler2", "Starting Sprinkler Program 2 on automatic schedule"
    status_string = now & " | Sprinkler Program 2"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "1349", status_string, True
    ' Setting Status and String of Ran Last Night Status Variable:
    hs.SetDeviceValue "Q2", 2
    status_string = now & " | Sprinkler Program 2 ran last night"
    hs.SetDeviceString "1348", status_string , True
    elseif RainSensor = 2 then
    status_string = now & " | Rain Sensor is On so Automatic Program 2 not Started"
    'hs.writelog "Sprinkler2", "Sprinklers not started because rain sensor is on"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "1349", status_string, True
    ' I disabled the following log update because it was updating everytime the sprinkler program ran - turned back on
    Set filetxt = filesys.OpenTextFile("vacalog.txt", ForAppending, True)
    filetxt.WriteLine(status_string)
    filetxt.Close
    hs.writelog "Sprinkler", "******************** Stopped Sprinkler Automatic Program 2 - Rain *****************************"
    ' Setting Status and String of Ran Last Night Status Variable:
    hs.SetDeviceValue "Q2", 3
    status_string = now & " | Sprinkler program 2 was scheduled to run last night but didn't because it was raining."
    hs.SetDeviceString "1348", status_string , True
    end if
    end if
    end if
    elseif Program3Enable = 2 then
    Program3Hour = Hour(Program3StartTime)
    Program3Minute = Minute(Program3StartTime)
    if Program3Hour = currenthour then
    if Program3Minute = currentminute then
    if RainSensor <> 2 then
    'error = hs.runex("sprinkler.vbs", "Sprinkler","PROGRAM;3;SPRINKLER2.VBS")
    error = hs.RunScriptFunc("sprinkler.vbs","Sprinkler","PROGRAM;3;SPRI NKLER2.VBS",False,False)
    'error = hs.runex("EtherRain.vb", "runNamedCycle","EtherRain.8; Back")
    hs.writelog "Sprinkler2", "Starting Sprinkler Program 3 on automatic schedule"
    status_string = now & " | Sprinkler Program 3"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "1349", status_string, True
    Set filetxt = filesys.OpenTextFile("vacalog.txt", ForAppending, True)
    filetxt.WriteLine(status_string)
    filetxt.Close
    ' Setting Status and String of Ran Last Night Status Variable:
    hs.SetDeviceValue "Q2", 2
    status_string = now & " | Sprinkler Program 3 ran last night."
    hs.SetDeviceString "1348", status_string , True
    elseif RainSensor = 2 then
    status_string = now & " | Rain Sensor is On so Automatic Program 3 not Started"
    'hs.writelog "Sprinkler2", "Sprinklers not started because rain sensor is on"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "1349", status_string, True
    ' I disabled the following log update because it was updating everytime the sprinkler program ran - turned back on
    Set filetxt = filesys.OpenTextFile("vacalog.txt", ForAppending, True)
    filetxt.WriteLine(status_string)
    filetxt.Close
    hs.writelog "Sprinkler", "******************** Stopped Sprinkler Automatic Program 3 - Rain *****************************"
    ' Setting Status and String of Ran Last Night Status Variable:
    hs.SetDeviceValue "Q2", 3
    status_string = now & " | Sprinkler program 3 was scheduled to run but didn't because it was raining."
    hs.SetDeviceString "1348", status_string , True
    end if
    end if
    end if
    end if
    end if
    else
    ' ProgramModeSchedule <> 2 - So Automatic Program Not on
    ' Setting Status and String of Ran Last Night Status Variable:
    hs.SetDeviceValue "Q2", 3
    hs.SetDeviceString "1348", "The Sprinklers did not run last night because they are disabled.", True
    end if
    end select
    
    
    case "ZONE1"
    ' Single Zone Execution
    'hs.writelog "Sprinkler2", "Current Program Zone 1 Length - > " & CurrentProgramZone1Length
    select case data2
    case "ON"
    if CurrentProgramZone1Length > 0 then
    'hs.writelog "Sprinkler2", " - > CurrentProgramZone1Length is greater than 0 so turning on Zone 1"
    ' Start Zone 1 timer
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Enable~3"
    hs.writelog "Sprinkler2", "Turning on Zone1 for " & CurrentProgramZone1Length & " minutes"
    status_string = now & " | Starting Zone 1 for " & CurrentProgramZone1Length & " minutes"
    hs.SetDeviceString "1347", status_string, True
    ' Call Etherrain with all variables
    hs.writelog "sprinkler", "Calling etherrain with zone1 : " & cint(CurrentProgramZone1Length) & " zone2 : " & 0 & " zone 3 : " & 0 & " zone 4 : " & 0 & " zone 5 : " & 0 & " zone 6 : " & 0
    ' Issue etherrain command
    command = cint(CurrentProgramZone1Length) & ";" & 0 & ";" & 0 & ";" & 0 & ";" & 0 & ";" & 0 & ";0;0"
    'error = hs.runex("EtherRain.vb", "runCycle","EtherRain.8; pw; " & command)
    error = hs.RunScriptFunc("EtherRain.vb","runCycle","EtherRain.8; pw; " & command,False,False)
    hs.SetDeviceString "2706", "On", True
    hs.SetDeviceValue "Q3", 2
    else
    hs.writelog "Sprinkler2", "Zone 1 On called for but timer is 0 so doing nothing"
    status_string = now & " | Stopping Zone 1 - timer is set to 0"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2706", "Off", True
    hs.SetDeviceValue "Q3", 3
    end if
    case "OFF"
    hs.writelog "Sprinkler2", "Turning off Zone1"
    status_string = now & " | Stopping Zone 1"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2706", "Off", True
    hs.SetDeviceValue "Q3", 3
    'error = hs.runex("EtherRain.vb", "stopCycle","EtherRain.8; pw")
    error = hs.RunScriptFunc("EtherRain.vb","stopCycle","EtherRain.8; pw",False,False)
    end select
    case "ZONE2"
    'hs.writelog "Sprinkler2", "Current Program Zone2 Length - > " & CurrentProgramZone2Length
    select case data2
    case "ON"
    if CurrentProgramZone2Length > 0 then
    'hs.writelog "Sprinkler2", " - > CurrentProgramZone2Length is greater than 0 so turning on Zone 2"
    ' Start Zone 2 timer
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Enable~4"
    'hs.writelog "Sprinkler2", "Turning on Zone2"
    status_string = now & " | Starting Zone 2"
    hs.SetDeviceString "1347", status_string, True
    hs.writelog "Sprinkler2", "Turning on Zone2 for " & CurrentProgramZone2Length & " minutes"
    status_string = now & " | Starting Zone 2 for " & CurrentProgramZone2Length & " minutes"
    hs.SetDeviceString "1347", status_string, True
    ' Call Etherrain with all variables
    hs.writelog "sprinkler", "Calling etherrain with zone1 : " & 0 & " zone2 : " & cint(CurrentProgramZone2Length) & " zone 3 : " & 0 & " zone 4 : " & 0 & " zone 5 : " & 0 & " zone 6 : " & 0
    ' Issue etherrain command
    command = 0 & ";" & cint(CurrentProgramZone2Length) & ";" & 0 & ";" & 0 & ";" & 0 & ";" & 0 & ";0;0"
    'error = hs.runex("EtherRain.vb", "runCycle","EtherRain.8; pw; " & command)
    error = hs.RunScriptFunc("EtherRain.vb","runCycle","EtherRain.8; pw",False,False)
    hs.SetDeviceString "2707", "On", True
    hs.SetDeviceValue "Q4", 2
    else
    'hs.writelog "Sprinkler2", "Zone 2 On called for but timer is 0 so doing nothing"
    status_string = now & " | Stopping Zone 2 - timer is set to 0"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2707", "Off", True
    hs.SetDeviceValue "Q4", 3
    end if
    case "OFF"
    hs.writelog "Sprinkler2", "Turning off Zone2"
    status_string = now & " | Stopping Zone 2"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2707", "Off", True
    hs.SetDeviceValue "Q4", 3
    'error = hs.runex("EtherRain.vb", "stopCycle","EtherRain.8; pw")
    error = hs.RunScriptFunc("EtherRain.vb","stopCycle","EtherRain.8; pw",False,False)
    end select
    case "ZONE3"
    'hs.writelog "Sprinkler2", "Current Program Zone 3 Length - > " & CurrentProgramZone3Length
    select case data2
    case "ON"
    if CurrentProgramZone3Length > 0 then
    'hs.writelog "Sprinkler2", " - > CurrentProgramZone3Length is greater than 0 so turning on Zone 3"
    ' Start Zone 3 timer
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Enable~5"
    'hs.writelog "Sprinkler2", "Turning on Zone3"
    status_string = now & " | Starting Zone 3"
    hs.SetDeviceString "1347", status_string, True
    hs.writelog "Sprinkler2", "Turning on Zone3 for " & CurrentProgramZone3Length & " minutes"
    status_string = now & " | Starting Zone 3 for " & CurrentProgramZone3Length & " minutes"
    hs.SetDeviceString "1347", status_string, True
    ' Call Etherrain with all variables
    hs.writelog "sprinkler", "Calling etherrain with zone1 : " & 0 & " zone2 : " & 0 & " zone 3 : " & cint(CurrentProgramZone3Length) & " zone 4 : " & 0 & " zone 5 : " & 0 & " zone 6 : " & 0
    ' Issue etherrain command
    command = 0 & ";" & 0 & ";" & cint(CurrentProgramZone3Length) & ";" & 0 & ";" & 0 & ";" & 0 & ";0;0"
    'error = hs.runex("EtherRain.vb", "runCycle","EtherRain.8; pw; " & command)
    error = hs.RunScriptFunc("EtherRain.vb","runCycle","EtherRain.8; pw; " & command,False,False)
    hs.SetDeviceString "2708", "On", True
    hs.SetDeviceValue "Q5", 2
    else
    'hs.writelog "Sprinkler2", "Zone 3 On called for but timer is 0 so doing nothing"
    status_string = now & " | Stopping Zone 3 - timer is set to 0"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2708", "Off", True
    hs.SetDeviceValue "Q5", 3
    end if
    case "OFF"
    hs.writelog "Sprinkler2", "Turning off Zone3"
    status_string = now & " | Stopping Zone 3"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2708", "Off", True
    hs.SetDeviceValue "Q5", 3
    'error = hs.runex("EtherRain.vb", "stopCycle","EtherRain.8; pw")
    error = hs.RunScriptFunc("EtherRain.vb","stopCycle","EtherRain.8; pw",False,False)
    end select
    case "ZONE4"
    'hs.writelog "Sprinkler2", "Current Program Zone 4 Length - > " & CurrentProgramZone4Length
    select case data2
    case "ON"
    if CurrentProgramZone4Length > 0 then
    'hs.writelog "Sprinkler2", " - > CurrentProgramZone4Length is greater than 0 so turning on Zone 4"
    ' Start Zone 4 timer
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Enable~6"
    'hs.writelog "Sprinkler2", "Turning on Zone4"
    status_string = now & " | Starting Zone 4"
    hs.SetDeviceString "1347", status_string, True
    hs.writelog "Sprinkler2", "Turning on Zone4 for " & CurrentProgramZone4Length & " minutes"
    status_string = now & " | Starting Zone 4 for " & CurrentProgramZone4Length & " minutes"
    hs.SetDeviceString "1347", status_string, True
    ' Call Etherrain with all variables
    hs.writelog "sprinkler", "Calling etherrain with zone1 : " & 0 & " zone2 : " & 0 & " zone 3 : " & 0 & " zone 4 : " & cint(CurrentProgramZone4Length) & " zone 5 : " & 0 & " zone 6 : " & 0
    ' Issue etherrain command
    command = 0 & ";" & 0 & ";" & 0 & ";" & cint(CurrentProgramZone4Length) & ";" & 0 & ";" & 0 & ";0;0"
    'error = hs.runex("EtherRain.vb", "runCycle","EtherRain.8; pw; " & command)
    error = hs.RunScriptFunc("EtherRain.vb","runCycle","EtherRain.8; pw; " & command,False,False)
    hs.SetDeviceString "2709", "On", True
    hs.SetDeviceValue "Q6", 2
    else
    'hs.writelog "Sprinkler2", "Zone 4 On called for but timer is 0 so doing nothing"
    status_string = now & " | Stopping Zone 4 - timer is set to 0"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2709", "Off", True
    hs.SetDeviceValue "Q6", 3
    end if
    case "OFF"
    hs.writelog "Sprinkler2", "Turning off Zone4"
    status_string = now & " | Stopping Zone 4"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2709", "Off", True
    hs.SetDeviceValue "Q6", 3
    'error = hs.runex("EtherRain.vb", "stopCycle","EtherRain.8; pw")
    error = hs.RunScriptFunc("EtherRain.vb","stopCycle","EtherRain.8; pw",False,False)
    end select
    case "ZONE5"
    'hs.writelog "Sprinkler2", "Current Program Zone 5 Length - > " & CurrentProgramZone5Length
    select case data2
    case "ON"
    if CurrentProgramZone5Length > 0 then
    'hs.writelog "Sprinkler2", " - > CurrentProgramZone5Length is greater than 0 so turning on Zone 5"
    ' Start Zone 5 timer
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Enable~7"
    'hs.writelog "Sprinkler2", "Turning on Zone5"
    status_string = now & " | Starting Zone 5"
    hs.SetDeviceString "1347", status_string, True
    hs.writelog "Sprinkler2", "Turning on Zone5 for " & CurrentProgramZone5Length & " minutes"
    status_string = now & " | Starting Zone 5 for " & CurrentProgramZone5Length & " minutes"
    hs.SetDeviceString "1347", status_string, True
    ' Call Etherrain with all variables
    hs.writelog "sprinkler", "Calling etherrain with zone1 : " & 0 & " zone2 : " & 0 & " zone 3 : " & 0 & " zone 4 : " & 0 & " zone 5 : " & cint(CurrentProgramZone5Length) & " zone 6 : " & 0
    ' Issue etherrain command
    command = 0 & ";" & 0 & ";" & 0 & ";" & 0 & ";" & cint(CurrentProgramZone5Length) & ";" & 0 & ";0;0"
    'error = hs.runex("EtherRain.vb", "runCycle","EtherRain.8; pw; " & command)
    error = hs.RunScriptFunc("EtherRain.vb","runCycle","EtherRain.8; pw; " & command,False,False)
    hs.SetDeviceString "2710", "On", True
    hs.SetDeviceValue "Q7", 2
    else
    'hs.writelog "Sprinkler2", "Zone 5 On called for but timer is 0 so doing nothing"
    status_string = now & " | Stopping Zone 5 - timer is set to 0"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2710", "Off", True
    hs.SetDeviceValue "Q7", 3
    end if
    case "OFF"
    hs.writelog "Sprinkler2", "Turning off Zone5"
    status_string = now & " | Stopping Zone 4"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2710", "Off", True
    hs.SetDeviceValue "Q7", 3
    'error = hs.runex("EtherRain.vb", "stopCycle","EtherRain.8; pw")
    error = hs.RunScriptFunc("EtherRain.vb","stopCycle","EtherRain.8; pw",False,False)
    end select
    case "ZONE6"
    'hs.writelog "Sprinkler2", "Current Program Zone 6 Length - > " & CurrentProgramZone6Length
    select case data2
    case "ON"
    if CurrentProgramZone6Length > 0 then
    'hs.writelog "Sprinkler2", " - > CurrentProgramZone5Length is greater than 0 so turning on Zone 6"
    ' Start Zone 6 timer
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Enable~8"
    'hs.writelog "Sprinkler2", "Turning on Zone6"
    status_string = now & " | Starting Zone 6"
    hs.SetDeviceString "1347", status_string, True
    hs.writelog "Sprinkler2", "Turning on Zone6 for " & CurrentProgramZone6Length & " minutes"
    status_string = now & " | Starting Zone 6 for " & CurrentProgramZone6Length & " minutes"
    hs.SetDeviceString "1347", status_string, True
    ' Call Etherrain with all variables
    hs.writelog "sprinkler", "Calling etherrain with zone1 : " & 0 & " zone2 : " & 0 & " zone 3 : " & 0 & " zone 4 : " & 0 & " zone 5 : " & 0 & " zone 6 : " & cint(CurrentProgramZone6Length)
    ' Issue etherrain command
    command = 0 & ";" & 0 & ";" & 0 & ";" & 0 & ";" & 0 & ";" & cint(CurrentProgramZone6Length) & ";0;0"
    'error = hs.runex("EtherRain.vb", "runCycle","EtherRain.8; pw; " & command)
    error = hs.RunScriptFunc("EtherRain.vb","runCycle","EtherRain.8; pw; " & command,False,False)
    hs.SetDeviceString "2711", "On", True
    hs.SetDeviceValue "Q8", 2
    else
    'hs.writelog "Sprinkler2", "Zone 6 On called for but timer is 0 so doing nothing"
    status_string = now & " | Stopping Zone 6 - timer is set to 0"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2711", "Off", True
    hs.SetDeviceValue "Q8", 3
    end if
    case "OFF"
    hs.writelog "Sprinkler2", "Turning off Zone6"
    status_string = now & " | Stopping Zone 6"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2711", "Off", True
    hs.SetDeviceValue "Q8", 3
    'error = hs.runex("EtherRain.vb", "stopCycle","EtherRain.8; pw")
    error = hs.RunScriptFunc("EtherRain.vb","stopCycle","EtherRain.8; pw",False,False)
    end select
    end select
    
    hs.writelog "Sprinkler2", "+++++++++++++++++++++++++++++++++ SPRINKLER2 END ++++++++++++++++++++++++++++++++++++ "
    
    End Sub

    Leave a comment:


  • simonmason
    replied
    I am in the process of converting some legacy HS2 scripts over to HS3. I have been keeping HS2 running for a number of functions that were low priority to switch. Here are the two scripts I am working on - controlling my sprinklers. Thanks for offering to help - if you want to provide some pointers on things I need to be addressing that would help. I am self-taught on vb so looking to use this as a learning experience.

    Code:
    sub Sprinkler(parms)
    
    Dim result
    Dim temp
    Dim data1
    Dim data2
    Dim hParm
    dim Program1Zone1Length, Program2Zone1Length, Program3Zone1Length, Program4Zone1Length, Program5Zone1Length, Program6Zone1Length, Program1TotalLength
    dim Program1StartTime
    dim RainSensor, ManualMode
    dim command
    
    'Called by:
    '
    ' Two parameters:
    ' data1 - Command 1
    ' data2 - Command 2
    
    
    
    hParm = split(parms,";")
    data1 = hParm(0) '
    data2 = hParm(1)
    
    hs.writelog "Sprinkler", "+++++++++++++++++++++++++++++++++++ SPRINKLER START +++++++++++++++++++++++++++++++++++ "
    hs.writelog "sprinkler.vbs", "-> Parameters - " & script & " with data1 - " & data1 & " and data2 - " & data2
    
    
    ' Retrieve variables
    CurrentProgramZone1Length = hs.devicestring("1350")
    CurrentProgramZone2Length = hs.devicestring("1351")
    CurrentProgramZone3Length = hs.devicestring("1352")
    CurrentProgramZone4Length = hs.devicestring("1353")
    CurrentProgramZone5Length = hs.devicestring("1354")
    CurrentProgramZone6Length = hs.devicestring("1355")
    Program1Zone1Length = hs.devicestring("1356")
    Program1Zone2Length = hs.devicestring("1357")
    Program1Zone3Length = hs.devicestring("1358")
    Program1Zone4Length = hs.devicestring("1359")
    Program1Zone5Length = hs.devicestring("1360")
    Program1Zone6Length = hs.devicestring("1361")
    Program2Zone1Length = hs.devicestring("1362")
    Program2Zone2Length = hs.devicestring("1363")
    Program2Zone3Length = hs.devicestring("1364")
    Program2Zone4Length = hs.devicestring("1365")
    Program2Zone5Length = hs.devicestring("1366")
    Program2Zone6Length = hs.devicestring("1367")
    Program3Zone1Length = hs.devicestring("1368")
    Program3Zone2Length = hs.devicestring("1369")
    Program3Zone3Length = hs.devicestring("1370")
    Program3Zone4Length = hs.devicestring("1371")
    Program3Zone5Length = hs.devicestring("1372")
    Program3Zone6Length = hs.devicestring("1373")
    Program1StartTime = hs.devicestring("1374")
    Program1EndTime = hs.devicestring("1377")
    Program2StartTime = hs.devicestring("1375")
    Program2EndTime = hs.devicestring("1378")
    Program3StartTime = hs.devicestring("1376")
    Program3EndTime = hs.devicestring("1379")
    TimeInterval5 = hs.devicevalue("1380")
    TimeInterval15 = hs.devicevalue("1381")
    TimeInterval60 = hs.devicevalue("1382")
    RainSensor = hs.devicevalue("1341")
    ManualMode = hs.devicevalue("1383")
    
    
    'hs.writelog "Sprinkler", "TimeInterval5 = " & TimeInterval5
    'hs.writelog "Sprinkler", "TimeInterval15 = " & TimeInterval15
    'hs.writelog "Sprinkler", "TimeInterval60 = " & TimeInterval60
    
    
    
    select case data1
    case "RESET"
    select case data2
    case "ALL"
    ' Reset all zones to defaults - used only if homeseer variables get wiped out
    
    ' Test script command
    ' hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~3~NoRepeat~" & Program1Zone1Length & "~minutes~sprinklerzone1done~off"
    'hs.Plugin("BLML2HS", "", "MLServeCmd", new Object(){"SetTimer~3~NoRepeat~" & Program1Zone1Length & "~minutes~sprinklerzone1done~off"})
    
    'hs.PluginFunction("BLML2HS", "", "MLServeCmd", {"Macro|SetVariable|my_variable1~hi!SetVariable|my_variable2 ~there"})
    'level = hs.PluginFunction("Z-Wave", "", "AccessLevel", nothing)
    
    ' hs.PluginFunction("Plugin Name","","Function",New Object(){"paramater1","parameter2","parameter3"})
    
    result = nhs.PluginFunction ("BLML2HS", "", "MLServeCmd", {"Macro|SetVariable|my_variable1_test~hi!SetVariable|my_vari able2_test~there"})
    
    ' hs.SetDeviceString "1356", Program1Zone1Length, True
    hs.writelog "SPRINKLER", "Resetting all variables"
    
    ' Program 1
    hs.setdevicestring("1356"), 40, True
    hs.setdevicestring("1357"), 40, True
    hs.setdevicestring("1358"), 40, True
    hs.setdevicestring("1359"), 40, True
    hs.setdevicestring("1360"), 25, True
    hs.setdevicestring("1361"), 25, True
    hs.setdevicestring("2713"), 210, True
    ' Program 2
    hs.setdevicestring("1362"), 40, True
    hs.setdevicestring("1363"), 40, True
    hs.setdevicestring("1364"), 40, True
    hs.setdevicestring("1365"), 40, True
    hs.setdevicestring("1366"), 0, True
    hs.setdevicestring("1367"), 0, True
    hs.setdeviceString("2714"), 160, True
    ' Program 3
    hs.setdevicestring("1368"), 0, True
    hs.setdevicestring("1369"), 0, True
    hs.setdevicestring("1370"), 0, True
    hs.setdevicestring("1371"), 0, True
    hs.setdevicestring("1372"), 25, True
    hs.setdevicestring("1373"), 25, True
    hs.setdevicestring("2715"), 50, True
    ' Program 4
    hs.setdevicestring("2728"), 20, True
    hs.setdevicestring("2729"), 20, True
    hs.setdevicestring("2730"), 20, True
    hs.setdevicestring("2731"), 20, True
    hs.setdevicestring("2732"), 20, True
    hs.setdevicestring("2733"), 20, True
    hs.setdevicestring("2734"), 120, True
    
    hs.setdevicestring("1374"), "03:00:00 AM", True
    hs.setdevicestring("1377"), "06:40:00 AM", True
    hs.setdevicestring("1375"), "03:00:00 AM", True
    hs.setdevicestring("1378"), "05:40:00 AM", True
    hs.setdevicestring("1376"), "03:00:00 AM", True
    hs.setdevicestring("1379"), "03:50:00 AM", True
    hs.setdevicestring("2735"), "03:50:00 AM", True
    
    
    hs.SetDeviceValueByRef 1381, 100, True
    hs.SetDeviceValueByRef 1382, 0, True
    hs.SetDeviceValueByRef 2738, 100, True
    
    end select
    case "PROGRAM"
    select case data2
    case "1"
    ' Program Name - Full Cycle
    ' This sets up all of the parameters for Program 1 and starts Zone 1. Subsequent zones will be called when the zones end.
    hs.writelog "Sprinkler", "******************** Starting Sprinkler Program Full Cycle *****************************"
    if RainSensor = 2 then
    status_string = now & " - Rain Sensor is On so Automatic Program not Started"
    hs.writelog "Sprinkler", "******************** Stopped Sprinkler Program 1 Full Cycle - Rain *****************************"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "1349", status_string, True
    ' I disabled the following log update because it was updating everytime the sprinkler program ran
    'Set filetxt = filesys.OpenTextFile("vacalog.txt", ForAppending, True)
    'filetxt.WriteLine(status_string)
    'filetxt.Close
    else
    ' Setting CurrentProgramZoneLength variables with values found in Program1Zone1Length variables
    hs.SetDeviceString "1350", Program1Zone1Length, True
    hs.SetDeviceString "1351", Program1Zone2Length, True
    hs.SetDeviceString "1352", Program1Zone3Length, True
    hs.SetDeviceString "1353", Program1Zone4Length, True
    hs.SetDeviceString "1354", Program1Zone5Length, True
    hs.SetDeviceString "1355", Program1Zone6Length, True
    hs.SetDeviceString "2726", CurrentProgramTotalLength, True
    
    CurrentProgramTotalLength = cint(Program1Zone1Length) + cint(Program1Zone2Length) + cint(Program1Zone3Length) + cint(Program1Zone4Length) + cint(Program1Zone5Length) + cint(Program1Zone6Length)
    
    ' Setting all zone status variables to off - probably not necessary as they should be off
    ' - but if a program is loaded when another program is running this will take care of it
    ' - this will trigger events for each of these zones to send off commands to CStar through sprinkler2.vbs
    ' - this is problematic - sending off to any specific zone causes sprinkler2.vbs to cascade to the next zone - will comment and need to check
    REM hs.SetDeviceString "2706", "Off", True
    REM hs.SetDeviceValue "Q3", 3
    REM hs.SetDeviceString "2707", "Off", True
    REM hs.SetDeviceValue "Q4", 3
    REM hs.SetDeviceString "2708", "Off", True
    REM hs.SetDeviceValue "Q5", 3
    REM hs.SetDeviceString "2709", "Off", True
    REM hs.SetDeviceValue "Q6", 3
    REM hs.SetDeviceString "2710", "Off", True
    REM hs.SetDeviceValue "Q7", 3
    REM hs.SetDeviceString "2711", "Off", True
    REM hs.SetDeviceValue "Q8", 3
    
    ' Setting information variables
    hs.SetDeviceString "2727", "Running", True
    hs.SetDeviceString "2712", "Program 1 - Full Cycle", True
    
    ' Set timers for all zones in MainLobby
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~3~NoRepeat~" & Program1Zone1Length & "~minutes~sprinklerzone1done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~4~NoRepeat~" & Program1Zone2Length & "~minutes~sprinklerzone2done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~5~NoRepeat~" & Program1Zone3Length & "~minutes~sprinklerzone3done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~6~NoRepeat~" & Program1Zone4Length & "~minutes~sprinklerzone4done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~7~NoRepeat~" & Program1Zone5Length & "~minutes~sprinklerzone5done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~8~NoRepeat~" & Program1Zone6Length & "~minutes~sprinklerzone6done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~9~NoRepeat~" & CurrentProgramTotalLength & "~minutes~sprinklertotaldone~off"
    
    ' Start timer for all zones
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|Enable~9"
    
    ' Turn on first zone to start cascade
    ' This in turn will trigger the event to call sprinkler2.vbs and turn on this zone
    'error = hs.runex("sprinkler2.vbs", "Sprinkler2","ZONE1;ON;SPRINKLER.VBS")
    'hs.SetDeviceString "2706", "On", True
    'hs.SetDeviceValue "Q3", 2
    ' Call Etherrain with all variables
    hs.writelog "sprinkler", "Calling etherrain with zone1 : " & cint(Program1Zone1Length) & " zone2 : " & Program1Zone2Length & " zone 3 : " & Program1Zone3Length & " zone 4 : " & Program1Zone5Length & " zone 5 : " & Program1Zone5Length & " zone 6 : " & Program1Zone6Length
    ' Issue etherrain command
    command = cint(Program1Zone1Length) & ";" & Program1Zone2Length & ";" & Program1Zone3Length & ";" & Program1Zone4Length & ";" & Program1Zone5Length & ";" & Program1Zone6Length & ";0;0"
    'error = hs.runex("EtherRain.vb", "runCycle","EtherRain.8; pw; " & command)
    error = hs.RunScriptFunc("EtherRain.vb","runCycle","EtherRain.8; pw;" & command,False,False)
    end if
    case "2"
    ' This sets up all of the parameters for Program 2 and starts Zone 1. Subsequent zones will be sprinkled when the zones end.
    hs.writelog "Sprinkler", "******************** Starting Sprinkler Program Front Garden *****************************"
    if RainSensor = 2 then
    status_string = now & " - Rain Sensor is On so Automatic Program not Started"
    hs.writelog "Sprinkler", "******************** Stopped Sprinkler Program 2 Front Garden - Rain *****************************"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "1349", status_string, True
    ' I disabled the following log update because it was updating everytime the sprinkler program ran
    'Set filetxt = filesys.OpenTextFile("vacalog.txt", ForAppending, True)
    'filetxt.WriteLine(status_string)
    'filetxt.Close
    else
    ' Turn on Sprinkler Controller Main Switch and Master valve
    ' hs.SendToComPort 4, "SPRINKLER=MAINON" & vbCR
    ' hs.SendToComPort 4, "SPRINKMASTVAL0" & vbCR
    
    CurrentProgramTotalLength = cint(Program2Zone1Length) + cint(Program2Zone2Length) + cint(Program2Zone3Length) + cint(Program2Zone4Length) + cint(Program2Zone5Length) + cint(Program2Zone6Length)
    
    hs.SetDeviceString "2727", "Running", True
    hs.SetDeviceString "2712", "Program 2 - Front Garden", True
    hs.SetDeviceString "1350", Program2Zone1Length, True
    hs.SetDeviceString "1351", Program2Zone2Length, True
    hs.SetDeviceString "1352", Program2Zone3Length, True
    hs.SetDeviceString "1353", Program2Zone4Length, True
    hs.SetDeviceString "1354", Program2Zone5Length, True
    hs.SetDeviceString "1355", Program2Zone6Length, True
    hs.SetDeviceString "2726", CurrentProgramTotalLength, True
    
    REM hs.SetDeviceString "2706", "Off", True
    REM hs.SetDeviceValue "Q3", 3
    REM hs.SetDeviceString "2707", "Off", True
    REM hs.SetDeviceValue "Q4", 3
    REM hs.SetDeviceString "2708", "Off", True
    REM hs.SetDeviceValue "Q5", 3
    REM hs.SetDeviceString "2709", "Off", True
    REM hs.SetDeviceValue "Q6", 3
    REM hs.SetDeviceString "2710", "Off", True
    REM hs.SetDeviceValue "Q7", 3
    REM hs.SetDeviceString "2711", "Off", True
    REM hs.SetDeviceValue "Q8", 3
    
    ' Set timers for all zones
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~3~NoRepeat~" & Program2Zone1Length & "~minutes~sprinklerzone1done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~4~NoRepeat~" & Program2Zone2Length & "~minutes~sprinklerzone2done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~5~NoRepeat~" & Program2Zone3Length & "~minutes~sprinklerzone3done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~6~NoRepeat~" & Program2Zone4Length & "~minutes~sprinklerzone4done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~7~NoRepeat~" & Program2Zone5Length & "~minutes~sprinklerzone5done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~8~NoRepeat~" & Program2Zone6Length & "~minutes~sprinklerzone6done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~9~NoRepeat~" & CurrentProgramTotalLength & "~minutes~sprinklertotaldone~off"
    
    ' Start timer for all zones
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|Enable~9"
    
    ' Turn on first zone to start cascade
    hs.SetDeviceString "2706", "On", True
    hs.SetDeviceValue "Q3", 2
    
    ' Issue Etherrain command
    command = cint(Program2Zone1Length) & ";" & Program2Zone2Length & ";" & Program2Zone3Length & ";" & Program2Zone4Length & ";" & Program2Zone5Length & ";" & Program2Zone6Length & ";0;0"
    'error = hs.runex("EtherRain.vb", "runCycle","EtherRain.8; pw; " & command)
    error = hs.RunScriptFunc("EtherRain.vb","runCycle","EtherRain.8; pw;" & command,False,False)
    
    
    end if
    case "3"
    ' This sets up all of the parameters for Program 3 and starts Zone 1. Subsequent zones will be called when the zones end.
    hs.writelog "Sprinkler", "******************** Starting Sprinkler Program Back Garden *****************************"
    if RainSensor = 2 then
    status_string = now & " - Rain Sensor is On so Automatic Program not Started"
    hs.writelog "Sprinkler", "******************** Stopped Sprinkler Program 3 Back Garden - Rain *****************************"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "1349", status_string, True
    ' I disabled the following log update because it was updating everytime the sprinkler program ran
    'Set filetxt = filesys.OpenTextFile("vacalog.txt", ForAppending, True)
    'filetxt.WriteLine(status_string)
    'filetxt.Close
    else
    ' Turn on Sprinkler Controller Main Switch and Master valve
    ' hs.SendToComPort 4, "SPRINKLER=MAINON" & vbCR
    ' hs.SendToComPort 4, "SPRINKMASTVAL0" & vbCR
    
    CurrentProgramTotalLength = cint(Program3Zone1Length) + cint(Program3Zone2Length) + cint(Program3Zone3Length) + cint(Program3Zone4Length) + cint(Program3Zone5Length) + cint(Program3Zone6Length)
    
    hs.SetDeviceString "2727", "Running", True
    hs.SetDeviceString "2712", "Program 3 - Back Garden", True
    hs.SetDeviceString "1350", Program3Zone1Length, True
    hs.SetDeviceString "1351", Program3Zone2Length, True
    hs.SetDeviceString "1352", Program3Zone3Length, True
    hs.SetDeviceString "1353", Program3Zone4Length, True
    hs.SetDeviceString "1354", Program3Zone5Length, True
    hs.SetDeviceString "1355", Program3Zone6Length, True
    hs.SetDeviceString "2726", CurrentProgramTotalLength, True
    
    REM hs.SetDeviceString "2706", "Off", True
    REM hs.SetDeviceValue "Q3", 3
    REM hs.SetDeviceString "2707", "Off", True
    REM hs.SetDeviceValue "Q4", 3
    REM hs.SetDeviceString "2708", "Off", True
    REM hs.SetDeviceValue "Q5", 3
    REM hs.SetDeviceString "2709", "Off", True
    REM hs.SetDeviceValue "Q6", 3
    REM hs.SetDeviceString "2710", "Off", True
    REM hs.SetDeviceValue "Q7", 3
    REM hs.SetDeviceString "2711", "Off", True
    REM hs.SetDeviceValue "Q8", 3
    
    ' Set timers for all zones
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~3~NoRepeat~" & Program3Zone1Length & "~minutes~sprinklerzone1done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~4~NoRepeat~" & Program3Zone2Length & "~minutes~sprinklerzone2done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~5~NoRepeat~" & Program3Zone3Length & "~minutes~sprinklerzone3done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~6~NoRepeat~" & Program3Zone4Length & "~minutes~sprinklerzone4done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~7~NoRepeat~" & Program3Zone5Length & "~minutes~sprinklerzone5done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~8~NoRepeat~" & Program3Zone6Length & "~minutes~sprinklerzone6done~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~9~NoRepeat~" & CurrentProgramTotalLength & "~minutes~sprinklertotaldone~off"
    
    ' Start timer for all zones
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|Enable~9"
    
    ' Turn on first zone to start cascade
    hs.SetDeviceString "2706", "On", True
    hs.SetDeviceValue "Q3", 2
    
    ' Issue Etherrain command
    command = cint(Program3Zone1Length) & ";" & Program3Zone2Length & ";" & Program3Zone3Length & ";" & Program3Zone4Length & ";" & Program3Zone5Length & ";" & Program3Zone6Length & ";0;0"
    'error = hs.runex("EtherRain.vb", "runCycle","EtherRain.8; pw; " & command)
    error = hs.RunScriptFunc("EtherRain.vb","runCycle","EtherRain.8; pw;" & command,False,False)
    
    
    end if
    end select
    
    case "PROG1"
    ' Handle changes in start and end time of program
    CurrentProgramTotalLength = cint(Program1Zone1Length) + cint(Program1Zone2Length) + cint(Program1Zone3Length) + cint(Program1Zone4Length) + cint(Program1Zone5Length) + cint(Program1Zone6Length)
    select case data2
    case "PRESET1"
    hs.SetDeviceString "1356", 40, True
    hs.SetDeviceString "1357", 40, True
    hs.SetDeviceString "1358", 40, True
    hs.SetDeviceString "1359", 40, True
    hs.SetDeviceString "1360", 25, True
    hs.SetDeviceString "1361", 25, True
    case "PRESET2"
    hs.SetDeviceString "1356", 1, True
    hs.SetDeviceString "1357", 1, True
    hs.SetDeviceString "1358", 1, True
    hs.SetDeviceString "1359", 1, True
    hs.SetDeviceString "1360", 1, True
    hs.SetDeviceString "1361", 1, True
    
    case "STARTDN"
    if TimeInterval5 = 2 then
    Program1StartTime=dateadd("n",-5,Program1StartTime)
    Program1StartTime = FormatDateTime(Program1StartTime, 3)
    Program1EndTime = dateadd("n",+CurrentProgramTotalLength,Program1StartTime)
    Program1EndTime = FormatDateTime(Program1EndTime, 3)
    elseif TimeInterval15 = 2 then
    Program1StartTime=dateadd("n",-15,Program1StartTime)
    Program1StartTime = FormatDateTime(Program1StartTime, 3)
    Program1EndTime = dateadd("n",+CurrentProgramTotalLength,Program1StartTime)
    Program1EndTime = FormatDateTime(Program1EndTime, 3)
    else
    Program1StartTime=dateadd("n",-60,Program1StartTime)
    Program1StartTime = FormatDateTime(Program1StartTime, 3)
    Program1EndTime = dateadd("n",+CurrentProgramTotalLength,Program1StartTime)
    Program1EndTime = FormatDateTime(Program1EndTime, 3)
    end if
    hs.SetDeviceString "1374", cstr(Program1StartTime), True
    hs.SetDeviceString "1377", Program1EndTime, True
    case "STARTUP"
    if TimeInterval5 = 2 then
    Program1StartTime=dateadd("n",+5,Program1StartTime)
    Program1StartTime = FormatDateTime(Program1StartTime, 3)
    Program1EndTime = dateadd("n",+CurrentProgramTotalLength,Program1StartTime)
    Program1EndTime = FormatDateTime(Program1EndTime, 3)
    elseif TimeInterval15 = 2 then
    hs.writelog "sprinkler", "Increasing Start time from : " & Program1StartTime
    Program1StartTime=dateadd("n",+15,Program1StartTime)
    Program1StartTime = FormatDateTime(Program1StartTime, 3)
    Program1EndTime = dateadd("n",+CurrentProgramTotalLength,Program1StartTime)
    Program1EndTime = FormatDateTime(Program1EndTime, 3)
    hs.writelog "sprinkler", "to : " & Program1StartTime
    else
    Program1StartTime=dateadd("n",+60,Program1StartTime)
    Program1StartTime = FormatDateTime(Program1StartTime, 3)
    Program1EndTime = dateadd("n",+CurrentProgramTotalLength,Program1StartTime)
    Program1EndTime = FormatDateTime(Program1EndTime, 3)
    end if
    hs.SetDeviceString "1374", Program1StartTime, True
    hs.SetDeviceString "1377", Program1EndTime, True
    case "ENDDN"
    if TimeInterval5 = 2 then
    Program1EndTime=dateadd("n",-5,Program1EndTime)
    Program1EndTime = FormatDateTime(Program1EndTime, 3)
    Program1StartTime = dateadd("n",-CurrentProgramTotalLength,Program1EndTime)
    Program1StartTime = FormatDateTime(Program1StartTime, 3)
    elseif TimeInterval15 = 2 then
    Program1EndTime=dateadd("n",-15,Program1EndTime)
    Program1EndTime = FormatDateTime(Program1EndTime, 3)
    Program1StartTime = dateadd("n",-CurrentProgramTotalLength,Program1EndTime)
    Program1StartTime = FormatDateTime(Program1StartTime, 3)
    else
    Program1EndTime=dateadd("n",-60,Program1EndTime)
    Program1EndTime = FormatDateTime(Program1EndTime, 3)
    Program1StartTime = dateadd("n",-CurrentProgramTotalLength,Program1EndTime)
    Program1StartTime = FormatDateTime(Program1StartTime, 3)
    end if
    hs.SetDeviceString "1374", Program1StartTime, True
    hs.SetDeviceString "1377", Program1EndTime, True
    case "ENDUP"
    if TimeInterval5 = 2 then
    Program1EndTime=dateadd("n",+5,Program1EndTime)
    Program1EndTime = FormatDateTime(Program1EndTime, 3)
    Program1StartTime = dateadd("n",-CurrentProgramTotalLength,Program1EndTime)
    Program1StartTime = FormatDateTime(Program1StartTime, 3)
    elseif TimeInterval15 = 2 then
    Program1EndTime=dateadd("n",+15,Program1EndTime)
    Program1EndTime = FormatDateTime(Program1EndTime, 3)
    Program1StartTime = dateadd("n",-CurrentProgramTotalLength,Program1EndTime)
    Program1StartTime = FormatDateTime(Program1StartTime, 3)
    else
    Program1EndTime=dateadd("n",+60,Program1EndTime)
    Program1EndTime = FormatDateTime(Program1EndTime, 3)
    Program1StartTime = dateadd("n",-CurrentProgramTotalLength,Program1EndTime)
    Program1StartTime = FormatDateTime(Program1StartTime, 3)
    end if
    hs.SetDeviceString "1374", Program1StartTime, True
    hs.SetDeviceString "1377", Program1EndTime, True
    end select
    
    case "PROG2"
    ' Handle changes in start and end time of program
    CurrentProgramTotalLength = cint(Program2Zone1Length) + cint(Program2Zone2Length) + cint(Program2Zone3Length) + cint(Program2Zone4Length) + cint(Program2Zone5Length) + cint(Program2Zone6Length)
    select case data2
    case "PRESET1"
    hs.SetDeviceString "1362", 40, True
    hs.SetDeviceString "1363", 40, True
    hs.SetDeviceString "1364", 40, True
    hs.SetDeviceString "1365", 40, True
    hs.SetDeviceString "1366", 0, True
    hs.SetDeviceString "1367", 0, True
    case "PRESET2"
    hs.SetDeviceString "1362", 1, True
    hs.SetDeviceString "1363", 1, True
    hs.SetDeviceString "1364", 1, True
    hs.SetDeviceString "1365", 1, True
    hs.SetDeviceString "1366", 0, True
    hs.SetDeviceString "1367", 0, True
    
    
    case "STARTDN"
    if TimeInterval5 = 2 then
    Program2StartTime=dateadd("n",-5,Program2StartTime)
    Program2StartTime = FormatDateTime(Program2StartTime, 3)
    Program2EndTime = dateadd("n",+CurrentProgramTotalLength,Program2StartTime)
    Program2EndTime = FormatDateTime(Program2EndTime, 3)
    elseif TimeInterval15 = 2 then
    Program2StartTime=dateadd("n",-15,Program2StartTime)
    Program2StartTime = FormatDateTime(Program2StartTime, 3)
    Program2EndTime = dateadd("n",+CurrentProgramTotalLength,Program2StartTime)
    Program2EndTime = FormatDateTime(Program2EndTime, 3)
    else
    Program2StartTime=dateadd("n",-60,Program2StartTime)
    Program2StartTime = FormatDateTime(Program2StartTime, 3)
    Program2EndTime = dateadd("n",+CurrentProgramTotalLength,Program2StartTime)
    Program2EndTime = FormatDateTime(Program2EndTime, 3)
    end if
    hs.SetDeviceString "1375", cstr(Program2StartTime), True
    hs.SetDeviceString "1378", Program2EndTime, True
    case "STARTUP"
    if TimeInterval5 = 2 then
    Program2StartTime=dateadd("n",+5,Program2StartTime)
    Program2StartTime = FormatDateTime(Program2StartTime, 3)
    Program2EndTime = dateadd("n",+CurrentProgramTotalLength,Program2StartTime)
    Program2EndTime = FormatDateTime(Program2EndTime, 3)
    elseif TimeInterval15 = 2 then
    Program2StartTime=dateadd("n",+15,Program2StartTime)
    Program2StartTime = FormatDateTime(Program2StartTime, 3)
    Program2EndTime = dateadd("n",+CurrentProgramTotalLength,Program2StartTime)
    Program2EndTime = FormatDateTime(Program2EndTime, 3)
    else
    Program2StartTime=dateadd("n",+60,Program2StartTime)
    Program2StartTime = FormatDateTime(Program2StartTime, 3)
    Program2EndTime = dateadd("n",+CurrentProgramTotalLength,Program2StartTime)
    Program2EndTime = FormatDateTime(Program2EndTime, 3)
    end if
    hs.SetDeviceString "1375", Program2StartTime, True
    hs.SetDeviceString "1378", Program2EndTime, True
    case "ENDDN"
    if TimeInterval5 = 2 then
    Program2EndTime=dateadd("n",-5,Program2EndTime)
    Program2EndTime = FormatDateTime(Program2EndTime, 3)
    Program2StartTime = dateadd("n",-CurrentProgramTotalLength,Program2EndTime)
    Program2StartTime = FormatDateTime(Program2StartTime, 3)
    elseif TimeInterval15 = 2 then
    Program2EndTime=dateadd("n",-15,Program2EndTime)
    Program2EndTime = FormatDateTime(Program2EndTime, 3)
    Program2StartTime = dateadd("n",-CurrentProgramTotalLength,Program2EndTime)
    Program2StartTime = FormatDateTime(Program2StartTime, 3)
    else
    Program2EndTime=dateadd("n",-60,Program2EndTime)
    Program2EndTime = FormatDateTime(Program2EndTime, 3)
    Program2StartTime = dateadd("n",-CurrentProgramTotalLength,Program2EndTime)
    Program2StartTime = FormatDateTime(Program2StartTime, 3)
    end if
    hs.SetDeviceString "1375", Program2StartTime, True
    hs.SetDeviceString "1378", Program2EndTime, True
    case "ENDUP"
    if TimeInterval5 = 2 then
    Program2EndTime=dateadd("n",+5,Program2EndTime)
    Program2EndTime = FormatDateTime(Program2EndTime, 3)
    Program2StartTime = dateadd("n",-CurrentProgramTotalLength,Program2EndTime)
    Program2StartTime = FormatDateTime(Program2StartTime, 3)
    elseif TimeInterval15 = 2 then
    Program2EndTime=dateadd("n",+15,Program2EndTime)
    Program2EndTime = FormatDateTime(Program2EndTime, 3)
    Program2StartTime = dateadd("n",-CurrentProgramTotalLength,Program2EndTime)
    Program2StartTime = FormatDateTime(Program2StartTime, 3)
    else
    Program2EndTime=dateadd("n",+60,Program2EndTime)
    Program2EndTime = FormatDateTime(Program2EndTime, 3)
    Program2StartTime = dateadd("n",-CurrentProgramTotalLength,Program2EndTime)
    Program2StartTime = FormatDateTime(Program2StartTime, 3)
    end if
    hs.SetDeviceString "1375", Program2StartTime, True
    hs.SetDeviceString "1378", Program2EndTime, True
    end select
    
    case "PROG3"
    ' Handle changes in start and end time of program
    CurrentProgramTotalLength = cint(Program3Zone1Length) + cint(Program3Zone2Length) + cint(Program3Zone3Length) + cint(Program3Zone4Length) + cint(Program3Zone5Length) + cint(Program3Zone6Length)
    select case data2
    case "PRESET1"
    hs.SetDeviceString "1368", 0, True
    hs.SetDeviceString "1369", 0, True
    hs.SetDeviceString "1370", 0, True
    hs.SetDeviceString "1371", 0, True
    hs.SetDeviceString "1372", 25, True
    hs.SetDeviceString "1373", 25, True
    case "PRESET2"
    hs.SetDeviceString "1368", 0, True
    hs.SetDeviceString "1369", 0, True
    hs.SetDeviceString "1370", 0, True
    hs.SetDeviceString "1371", 0, True
    hs.SetDeviceString "1372", 1, True
    hs.SetDeviceString "1373", 1, True
    
    
    case "STARTDN"
    if TimeInterval5 = 2 then
    Program3StartTime=dateadd("n",-5,Program3StartTime)
    Program3StartTime = FormatDateTime(Program3StartTime, 3)
    Program3EndTime = dateadd("n",+CurrentProgramTotalLength,Program3StartTime)
    Program3EndTime = FormatDateTime(Program3EndTime, 3)
    elseif TimeInterval15 = 2 then
    Program3StartTime=dateadd("n",-15,Program3StartTime)
    Program3StartTime = FormatDateTime(Program3StartTime, 3)
    Program3EndTime = dateadd("n",+CurrentProgramTotalLength,Program3StartTime)
    Program3EndTime = FormatDateTime(Program3EndTime, 3)
    else
    Program3StartTime=dateadd("n",-60,Program3StartTime)
    Program3StartTime = FormatDateTime(Program3StartTime, 3)
    Program3EndTime = dateadd("n",+CurrentProgramTotalLength,Program3StartTime)
    Program3EndTime = FormatDateTime(Program3EndTime, 3)
    end if
    hs.SetDeviceString "1376", cstr(Program3StartTime), True
    hs.SetDeviceString "1379", Program3EndTime, True
    
    case "STARTUP"
    if TimeInterval5 = 2 then
    Program3StartTime=dateadd("n",+5,Program3StartTime)
    Program3StartTime = FormatDateTime(Program3StartTime, 3)
    Program3EndTime = dateadd("n",+CurrentProgramTotalLength,Program3StartTime)
    Program3EndTime = FormatDateTime(Program3EndTime, 3)
    elseif TimeInterval15 = 2 then
    Program3StartTime=dateadd("n",+15,Program3StartTime)
    Program3StartTime = FormatDateTime(Program3StartTime, 3)
    Program3EndTime = dateadd("n",+CurrentProgramTotalLength,Program3StartTime)
    Program3EndTime = FormatDateTime(Program3EndTime, 3)
    else
    Program3StartTime=dateadd("n",+60,Program3StartTime)
    Program3StartTime = FormatDateTime(Program3StartTime, 3)
    Program3EndTime = dateadd("n",+CurrentProgramTotalLength,Program3StartTime)
    Program3EndTime = FormatDateTime(Program3EndTime, 3)
    end if
    hs.SetDeviceString "1376", Program3StartTime, True
    hs.SetDeviceString "1379", Program3EndTime, True
    case "ENDDN"
    if TimeInterval5 = 2 then
    Program3EndTime=dateadd("n",-5,Program3EndTime)
    Program3EndTime = FormatDateTime(Program3EndTime, 3)
    Program3StartTime = dateadd("n",-CurrentProgramTotalLength,Program3EndTime)
    Program3StartTime = FormatDateTime(Program3StartTime, 3)
    elseif TimeInterval15 = 2 then
    Program3EndTime=dateadd("n",-15,Program3EndTime)
    Program3EndTime = FormatDateTime(Program3EndTime, 3)
    Program3StartTime = dateadd("n",-CurrentProgramTotalLength,Program3EndTime)
    Program3StartTime = FormatDateTime(Program3StartTime, 3)
    else
    Program3EndTime=dateadd("n",-60,Program3EndTime)
    Program3EndTime = FormatDateTime(Program3EndTime, 3)
    Program3StartTime = dateadd("n",-CurrentProgramTotalLength,Program3EndTime)
    Program3StartTime = FormatDateTime(Program3StartTime, 3)
    end if
    hs.SetDeviceString "1376", Program3StartTime, True
    hs.SetDeviceString "1379", Program3EndTime, True
    case "ENDUP"
    if TimeInterval5 = 2 then
    Program3EndTime=dateadd("n",+5,Program3EndTime)
    Program3EndTime = FormatDateTime(Program3EndTime, 3)
    Program3StartTime = dateadd("n",-CurrentProgramTotalLength,Program3EndTime)
    Program3StartTime = FormatDateTime(Program3StartTime, 3)
    elseif TimeInterval15 = 2 then
    Program3EndTime=dateadd("n",+15,Program3EndTime)
    Program3EndTime = FormatDateTime(Program3EndTime, 3)
    Program3StartTime = dateadd("n",-CurrentProgramTotalLength,Program3EndTime)
    Program3StartTime = FormatDateTime(Program3StartTime, 3)
    else
    Program3EndTime=dateadd("n",+60,Program3EndTime)
    Program3EndTime = FormatDateTime(Program3EndTime, 3)
    Program3StartTime = dateadd("n",-CurrentProgramTotalLength,Program3EndTime)
    Program3StartTime = FormatDateTime(Program3StartTime, 3)
    end if
    hs.SetDeviceString "1376", Program3StartTime, True
    hs.SetDeviceString "1379", Program3EndTime, True
    end select
    
    case "PROG1ZONE1"
    select case data2
    case "UP"
    Program1Zone1Length = hs.devicestring("1356")
    Program1Zone1Length = Program1Zone1Length + 1
    hs.SetDeviceString "1356", Program1Zone1Length, True
    Program1TotalLength = cint(Program1Zone1Length) + cint(Program1Zone2Length) + cint(Program1Zone3Length) + cint(Program1Zone4Length) + cint(Program1Zone5Length) + cint(Program1Zone6Length)
    hs.SetDeviceString "2713", Program1TotalLength, True
    'hs.writelog "Sprinkler", Program1Zone1Length & " | " & Program1Zone2Length & " | " & Program1Zone3Length & " | " & Program1Zone4Length & " | " & Program1Zone5Length & " | " & Program1Zone6Length & " | " & Program1TotalLength
    case "DN"
    Program1Zone1Length = hs.devicestring("1356")
    Program1Zone1Length = Program1Zone1Length - 1
    hs.SetDeviceString "1356", Program1Zone1Length, True
    Program1TotalLength = cint(Program1Zone1Length) + cint(Program1Zone2Length) + cint(Program1Zone3Length) + cint(Program1Zone4Length) + cint(Program1Zone5Length) + cint(Program1Zone6Length)
    hs.SetDeviceString "2713", Program1TotalLength, True
    'hs.writelog "Sprinkler", Program1Zone1Length & " | " & Program1Zone2Length & " | " & Program1Zone3Length & " | " & Program1Zone4Length & " | " & Program1Zone5Length & " | " & Program1Zone6Length & " | " & Program1TotalLength
    end select
    
    case "PROG1ZONE2"
    select case data2
    case "UP"
    Program1Zone2Length = hs.devicestring("1357")
    Program1Zone2Length = Program1Zone2Length + 1
    hs.SetDeviceString "1357", Program1Zone2Length, True
    Program1TotalLength = cint(Program1Zone1Length) + cint(Program1Zone2Length) + cint(Program1Zone3Length) + cint(Program1Zone4Length) + cint(Program1Zone5Length) + cint(Program1Zone6Length)
    hs.SetDeviceString "2713", Program1TotalLength, True
    'hs.writelog "Sprinkler", Program1Zone1Length & " | " & Program1Zone2Length & " | " & Program1Zone3Length & " | " & Program1Zone4Length & " | " & Program1Zone5Length & " | " & Program1Zone6Length & " | " & Program1TotalLength
    case "DN"
    Program1Zone2Length = hs.devicestring("1357")
    Program1Zone2Length = Program1Zone2Length - 1
    hs.SetDeviceString "1357", Program1Zone2Length, True
    Program1TotalLength = cint(Program1Zone1Length) + cint(Program1Zone2Length) + cint(Program1Zone3Length) + cint(Program1Zone4Length) + cint(Program1Zone5Length) + cint(Program1Zone6Length)
    hs.SetDeviceString "2713", Program1TotalLength, True
    'hs.writelog "Sprinkler", Program1Zone1Length & " | " & Program1Zone2Length & " | " & Program1Zone3Length & " | " & Program1Zone4Length & " | " & Program1Zone5Length & " | " & Program1Zone6Length & " | " & Program1TotalLength
    end select
    
    case "PROG1ZONE3"
    select case data2
    case "UP"
    Program1Zone3Length = hs.devicestring("1358")
    Program1Zone3Length = Program1Zone3Length + 1
    hs.SetDeviceString "1358", Program1Zone3Length, True
    Program1TotalLength = cint(Program1Zone1Length) + cint(Program1Zone2Length) + cint(Program1Zone3Length) + cint(Program1Zone4Length) + cint(Program1Zone5Length) + cint(Program1Zone6Length)
    hs.SetDeviceString "2713", Program1TotalLength, True
    case "DN"
    Program1Zone3Length = hs.devicestring("1358")
    Program1Zone3Length = Program1Zone3Length - 1
    hs.SetDeviceString "1358", Program1Zone3Length, True
    Program1TotalLength = cint(Program1Zone1Length) + cint(Program1Zone2Length) + cint(Program1Zone3Length) + cint(Program1Zone4Length) + cint(Program1Zone5Length) + cint(Program1Zone6Length)
    hs.SetDeviceString "2713", Program1TotalLength, True
    end select
    
    case "PROG1ZONE4"
    select case data2
    case "UP"
    Program1Zone4Length = hs.devicestring("1359")
    Program1Zone4Length = Program1Zone4Length + 1
    hs.SetDeviceString "1359", Program1Zone4Length, True
    Program1TotalLength = cint(Program1Zone1Length) + cint(Program1Zone2Length) + cint(Program1Zone3Length) + cint(Program1Zone4Length) + cint(Program1Zone5Length) + cint(Program1Zone6Length)
    hs.SetDeviceString "2713", Program1TotalLength, True
    case "DN"
    Program1Zone4Length = hs.devicestring("1359")
    Program1Zone4Length = Program1Zone4Length - 1
    hs.SetDeviceString "1359", Program1Zone4Length, True
    Program1TotalLength = cint(Program1Zone1Length) + cint(Program1Zone2Length) + cint(Program1Zone3Length) + cint(Program1Zone4Length) + cint(Program1Zone5Length) + cint(Program1Zone6Length)
    hs.SetDeviceString "2713", Program1TotalLength, True
    end select
    
    case "PROG1ZONE5"
    select case data2
    case "UP"
    Program1Zone5Length = hs.devicestring("1360")
    Program1Zone5Length = Program1Zone5Length + 1
    hs.SetDeviceString "1360", Program1Zone5Length, True
    Program1TotalLength = cint(Program1Zone1Length) + cint(Program1Zone2Length) + cint(Program1Zone3Length) + cint(Program1Zone4Length) + cint(Program1Zone5Length) + cint(Program1Zone6Length)
    hs.SetDeviceString "2713", Program1TotalLength, True
    case "DN"
    Program1Zone5Length = hs.devicestring("1360")
    Program1Zone5Length = Program1Zone5Length - 1
    hs.SetDeviceString "1360", Program1Zone5Length, True
    Program1TotalLength = cint(Program1Zone1Length) + cint(Program1Zone2Length) + cint(Program1Zone3Length) + cint(Program1Zone4Length) + cint(Program1Zone5Length) + cint(Program1Zone6Length)
    hs.SetDeviceString "2713", Program1TotalLength, True
    end select
    
    case "PROG1ZONE6"
    select case data2
    case "UP"
    Program1Zone6Length = hs.devicestring("1361")
    Program1Zone6Length = Program1Zone6Length + 1
    hs.SetDeviceString "1361", Program1Zone6Length, True
    Program1TotalLength = cint(Program1Zone1Length) + cint(Program1Zone2Length) + cint(Program1Zone3Length) + cint(Program1Zone4Length) + cint(Program1Zone5Length) + cint(Program1Zone6Length)
    hs.SetDeviceString "2713", Program1TotalLength, True
    case "DN"
    Program1Zone6Length = hs.devicestring("1361")
    Program1Zone6Length = Program1Zone6Length - 1
    hs.SetDeviceString "1361", Program1Zone6Length, True
    Program1TotalLength = cint(Program1Zone1Length) + cint(Program1Zone2Length) + cint(Program1Zone3Length) + cint(Program1Zone4Length) + cint(Program1Zone5Length) + cint(Program1Zone6Length)
    hs.SetDeviceString "2713", Program1TotalLength, True
    end select
    
    case "PROG2ZONE1"
    select case data2
    case "UP"
    Program2Zone1Length = hs.devicestring("1362")
    Program2Zone1Length = Program2Zone1Length + 1
    hs.SetDeviceString "1362", Program2Zone1Length, True
    Program2TotalLength = cint(Program2Zone1Length) + cint(Program2Zone2Length) + cint(Program2Zone3Length) + cint(Program2Zone4Length) + cint(Program2Zone5Length) + cint(Program2Zone6Length)
    hs.SetDeviceString "2714", Program2TotalLength, True
    case "DN"
    Program2Zone1Length = hs.devicestring("1362")
    Program2Zone1Length = Program2Zone1Length - 1
    hs.SetDeviceString "1362", Program2Zone1Length, True
    Program2TotalLength = cint(Program2Zone1Length) + cint(Program2Zone2Length) + cint(Program2Zone3Length) + cint(Program2Zone4Length) + cint(Program2Zone5Length) + cint(Program2Zone6Length)
    hs.SetDeviceString "2714", Program2TotalLength, True
    end select
    
    case "PROG2ZONE2"
    select case data2
    case "UP"
    Program2Zone2Length = hs.devicestring("1363")
    Program2Zone2Length = Program2Zone2Length + 1
    hs.SetDeviceString "1363", Program2Zone2Length, True
    Program2TotalLength = cint(Program2Zone1Length) + cint(Program2Zone2Length) + cint(Program2Zone3Length) + cint(Program2Zone4Length) + cint(Program2Zone5Length) + cint(Program2Zone6Length)
    hs.SetDeviceString "2714", Program2TotalLength, True
    case "DN"
    Program2Zone2Length = hs.devicestring("1363")
    Program2Zone1Length = Program2Zone2Length - 1
    hs.SetDeviceString "1363", Program2Zone2Length, True
    Program2TotalLength = cint(Program2Zone1Length) + cint(Program2Zone2Length) + cint(Program2Zone3Length) + cint(Program2Zone4Length) + cint(Program2Zone5Length) + cint(Program2Zone6Length)
    hs.SetDeviceString "2714", Program2TotalLength, True
    end select
    
    case "PROG2ZONE3"
    select case data2
    case "UP"
    Program2Zone3Length = hs.devicestring("1364")
    Program2Zone3Length = Program2Zone3Length + 1
    hs.SetDeviceString "1364", Program2Zone3Length, True
    Program2TotalLength = cint(Program2Zone1Length) + cint(Program2Zone2Length) + cint(Program2Zone3Length) + cint(Program2Zone4Length) + cint(Program2Zone5Length) + cint(Program2Zone6Length)
    hs.SetDeviceString "2714", Program2TotalLength, True
    case "DN"
    Program2Zone3Length = hs.devicestring("1364")
    Program2Zone3Length = Program2Zone3Length - 1
    hs.SetDeviceString "1364", Program2Zone1Length, True
    Program2TotalLength = cint(Program2Zone1Length) + cint(Program2Zone2Length) + cint(Program2Zone3Length) + cint(Program2Zone4Length) + cint(Program2Zone5Length) + cint(Program2Zone6Length)
    hs.SetDeviceString "2714", Program2TotalLength, True
    end select
    
    case "PROG2ZONE4"
    select case data2
    case "UP"
    Program2Zone4Length = hs.devicestring("1365")
    Program2Zone4Length = Program2Zone4Length + 1
    hs.SetDeviceString "1365", Program2Zone4Length, True
    Program2TotalLength = cint(Program2Zone1Length) + cint(Program2Zone2Length) + cint(Program2Zone3Length) + cint(Program2Zone4Length) + cint(Program2Zone5Length) + cint(Program2Zone6Length)
    hs.SetDeviceString "2714", Program2TotalLength, True
    case "DN"
    Program2Zone4Length = hs.devicestring("1365")
    Program2Zone4Length = Program2Zone4Length - 1
    hs.SetDeviceString "1365", Program2Zone4Length, True
    Program2TotalLength = cint(Program2Zone1Length) + cint(Program2Zone2Length) + cint(Program2Zone3Length) + cint(Program2Zone4Length) + cint(Program2Zone5Length) + cint(Program2Zone6Length)
    hs.SetDeviceString "2714", Program2TotalLength, True
    end select
    
    case "PROG2ZONE5"
    select case data2
    case "UP"
    Program2Zone5Length = hs.devicestring("1366")
    Program2Zone5Length = Program2Zone5Length + 1
    hs.SetDeviceString "1366", Program2Zone5Length, True
    Program2TotalLength = cint(Program2Zone1Length) + cint(Program2Zone2Length) + cint(Program2Zone3Length) + cint(Program2Zone4Length) + cint(Program2Zone5Length) + cint(Program2Zone6Length)
    hs.SetDeviceString "2714", Program2TotalLength, True
    case "DN"
    Program2Zone5Length = hs.devicestring("1366")
    Program2Zone5Length = Program2Zone5Length - 1
    hs.SetDeviceString "1366", Program2Zone5Length, True
    Program2TotalLength = cint(Program2Zone1Length) + cint(Program2Zone2Length) + cint(Program2Zone3Length) + cint(Program2Zone4Length) + cint(Program2Zone5Length) + cint(Program2Zone6Length)
    hs.SetDeviceString "2714", Program2TotalLength, True
    end select
    
    case "PROG2ZONE6"
    select case data2
    case "UP"
    Program2Zone6Length = hs.devicestring("1367")
    Program2Zone6Length = Program2Zone6Length + 1
    hs.SetDeviceString "1367", Program2Zone6Length, True
    Program2TotalLength = cint(Program2Zone1Length) + cint(Program2Zone2Length) + cint(Program2Zone3Length) + cint(Program2Zone4Length) + cint(Program2Zone5Length) + cint(Program2Zone6Length)
    hs.SetDeviceString "2714", Program2TotalLength, True
    case "DN"
    Program2Zone6Length = hs.devicestring("1367")
    Program2Zone6Length = Program2Zone6Length - 1
    hs.SetDeviceString "1367", Program2Zone6Length, True
    Program2TotalLength = cint(Program2Zone1Length) + cint(Program2Zone2Length) + cint(Program2Zone3Length) + cint(Program2Zone4Length) + cint(Program2Zone5Length) + cint(Program2Zone6Length)
    hs.SetDeviceString "2714", Program2TotalLength, True
    end select
    
    case "PROG3ZONE1"
    select case data2
    case "UP"
    Program3Zone1Length = hs.devicestring("1368")
    Program3Zone1Length = Program3Zone1Length + 1
    hs.SetDeviceString "1368", Program3Zone1Length, True
    Program3TotalLength = cint(Program3Zone1Length) + cint(Program3Zone2Length) + cint(Program3Zone3Length) + cint(Program3Zone4Length) + cint(Program3Zone5Length) + cint(Program3Zone6Length)
    hs.SetDeviceString "2715", Program3TotalLength, True
    case "DN"
    Program3Zone1Length = hs.devicestring("1368")
    Program3Zone1Length = Program3Zone1Length - 1
    hs.SetDeviceString "1368", Program3Zone1Length, True
    Program3TotalLength = cint(Program3Zone1Length) + cint(Program3Zone2Length) + cint(Program3Zone3Length) + cint(Program3Zone4Length) + cint(Program3Zone5Length) + cint(Program3Zone6Length)
    hs.SetDeviceString "2715", Program3TotalLength, True
    end select
    
    case "PROG3ZONE2"
    select case data2
    case "UP"
    Program3Zone2Length = hs.devicestring("1369")
    Program3Zone2Length = Program3Zone2Length + 1
    hs.SetDeviceString "1369", Program3Zone2Length, True
    Program3TotalLength = cint(Program3Zone1Length) + cint(Program3Zone2Length) + cint(Program3Zone3Length) + cint(Program3Zone4Length) + cint(Program3Zone5Length) + cint(Program3Zone6Length)
    hs.SetDeviceString "2715", Program3TotalLength, True
    case "DN"
    Program3Zone2Length = hs.devicestring("1369")
    Program3Zone2Length = Program3Zone2Length - 1
    hs.SetDeviceString "1369", Program3Zone2Length, True
    Program3TotalLength = cint(Program3Zone1Length) + cint(Program3Zone2Length) + cint(Program3Zone3Length) + cint(Program3Zone4Length) + cint(Program3Zone5Length) + cint(Program3Zone6Length)
    hs.SetDeviceString "2715", Program3TotalLength, True
    end select
    
    case "PROG3ZONE3"
    select case data2
    case "UP"
    Program3Zone3Length = hs.devicestring("1370")
    Program3Zone3Length = Program3Zone3Length + 1
    hs.SetDeviceString "1370", Program3Zone3Length, True
    Program3TotalLength = cint(Program3Zone1Length) + cint(Program3Zone2Length) + cint(Program3Zone3Length) + cint(Program3Zone4Length) + cint(Program3Zone5Length) + cint(Program3Zone6Length)
    hs.SetDeviceString "2715", Program3TotalLength, True
    case "DN"
    Program3Zone3Length = hs.devicestring("1370")
    Program3Zone3Length = Program3Zone3Length - 1
    hs.SetDeviceString "1370", Program3Zone3Length, True
    Program3TotalLength = cint(Program3Zone1Length) + cint(Program3Zone2Length) + cint(Program3Zone3Length) + cint(Program3Zone4Length) + cint(Program3Zone5Length) + cint(Program3Zone6Length)
    hs.SetDeviceString "2715", Program3TotalLength, True
    end select
    
    case "PROG3ZONE4"
    select case data2
    case "UP"
    Program3Zone4Length = hs.devicestring("1371")
    Program3Zone4Length = Program3Zone4Length + 1
    hs.SetDeviceString "1371", Program3Zone4Length, True
    Program3TotalLength = cint(Program3Zone1Length) + cint(Program3Zone2Length) + cint(Program3Zone3Length) + cint(Program3Zone4Length) + cint(Program3Zone5Length) + cint(Program3Zone6Length)
    hs.SetDeviceString "2715", Program3TotalLength, True
    case "DN"
    Program3Zone4Length = hs.devicestring("1371")
    Program3Zone4Length = Program3Zone4Length - 1
    hs.SetDeviceString "1371", Program3Zone4Length, True
    Program3TotalLength = cint(Program3Zone1Length) + cint(Program3Zone2Length) + cint(Program3Zone3Length) + cint(Program3Zone4Length) + cint(Program3Zone5Length) + cint(Program3Zone6Length)
    hs.SetDeviceString "2715", Program3TotalLength, True
    end select
    
    case "PROG3ZONE5"
    select case data2
    case "UP"
    Program3Zone5Length = hs.devicestring("1372")
    Program3Zone5Length = Program3Zone5Length + 1
    hs.SetDeviceString "1372", Program3Zone5Length, True
    Program3TotalLength = cint(Program3Zone1Length) + cint(Program3Zone2Length) + cint(Program3Zone3Length) + cint(Program3Zone4Length) + cint(Program3Zone5Length) + cint(Program3Zone6Length)
    hs.SetDeviceString "2715", Program3TotalLength, True
    case "DN"
    Program3Zone5Length = hs.devicestring("1372")
    Program3Zone5Length = Program3Zone5Length - 1
    hs.SetDeviceString "1372", Program3Zone5Length, True
    Program3TotalLength = cint(Program3Zone1Length) + cint(Program3Zone2Length) + cint(Program3Zone3Length) + cint(Program3Zone4Length) + cint(Program3Zone5Length) + cint(Program3Zone6Length)
    hs.SetDeviceString "2715", Program3TotalLength, True
    end select
    
    case "PROG3ZONE6"
    select case data2
    case "UP"
    Program3Zone6Length = hs.devicestring("1373")
    Program3Zone6Length = Program3Zone6Length + 1
    hs.SetDeviceString "1373", Program3Zone6Length, True
    Program3TotalLength = cint(Program3Zone1Length) + cint(Program3Zone2Length) + cint(Program3Zone3Length) + cint(Program3Zone4Length) + cint(Program3Zone5Length) + cint(Program3Zone6Length)
    hs.SetDeviceString "2715", Program3TotalLength, True
    case "DN"
    Program3Zone6Length = hs.devicestring("1373")
    Program3Zone6Length = Program3Zone6Length - 1
    hs.SetDeviceString "1373", Program3Zone6Length, True
    Program3TotalLength = cint(Program3Zone1Length) + cint(Program3Zone2Length) + cint(Program3Zone3Length) + cint(Program3Zone4Length) + cint(Program3Zone5Length) + cint(Program3Zone6Length)
    hs.SetDeviceString "2715", Program3TotalLength, True
    end select
    
    case "ALL"
    select case data2
    REM case "ON"
    REM ' Commstar controlled full on
    REM hs.SendToComPort 4, "SPRINKLER=FULL" & vbCR
    REM hs.writelog "Sprinkler", "Full On"
    case "OFF"
    
    ' Issue Etherrain Stop
    error = hs.RunScriptFunc("EtherRain.vb","stopCycle","EtherRain.8; pw",False,False)
    'error = hs.runex("EtherRain.vb", "stopCycle","EtherRain.8; pw")
    'error = hs.runex "EtherRain.vb", "stopCycle","EtherRain.8; pw"
    ' Turn off timers in MainLobby - these are only for display and don't actually trigger anything
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Disable~3"
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Disable~4"
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Disable~5"
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Disable~6"
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Disable~7"
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Disable~8"
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Disable~9"
    ' Turn off Zones
    hs.SetDeviceString "2706", "Off", True
    hs.SetDeviceValue "Q3", 3
    hs.SetDeviceString "2707", "Off", True
    hs.SetDeviceValue "Q4", 3
    hs.SetDeviceString "2708", "Off", True
    hs.SetDeviceValue "Q5", 3
    hs.SetDeviceString "2709", "Off", True
    hs.SetDeviceValue "Q6", 3
    hs.SetDeviceString "2710", "Off", True
    hs.SetDeviceValue "Q7", 3
    hs.SetDeviceString "2711", "Off", True
    hs.SetDeviceValue "Q8", 3
    ' Update main status variable and program running variable - used to show sprinkler status in MainLobby
    hs.SetDeviceString "2727", "Stopped", True
    hs.SetDeviceString "2712", "None", True
    case "NEXT"
    'Q3-Q8 hold status of current zone on/off
    
    end select
    case "MANUAL"
    select case data2
    case "UP"
    ManualLength = hs.devicestring("2738")
    ManualLength = ManualLength + 1
    hs.SetDeviceString "2738", ManualLength, True
    case "DN"
    ManualLength = hs.devicestring("2738")
    ManualLength = ManualLength - 1
    hs.SetDeviceString "2738", ManualLength, True
    end select
    
    case "ZONE1"
    Select case data2
    case "TOGGLE"
    if ManualMode = 2 then
    ' Turning Zone 1 on manually
    ' Checking status of zone
    temp = hs.devicevalue("2706")
    Select case temp
    case 2
    ' Sprinkler On, turn it off
    'hs.SetDeviceString "2706", "Off", True
    'hs.SetDeviceValue "Q3", 3
    ManualLength = 0
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Macro|sprinkler.zone1.off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Macro|sprinkler.all.off"
    'error = hs.runex("sprinkler2.vbs", "Sprinkler2","ZONE1;OFF;SPRINKLER.VBS")
    case 3
    ' Sprinkler Off, turn it on
    ' Get manual zone run time...
    ManualLength = hs.devicestring("2738")
    ' Set zone 1 timer length in MainLobby
    ' New syntax : Timers|SetTimer~3~OneTime~1 to Any Number~Minutes~Macro Command~Enable
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~3~NoRepeat~" & ManualLength & "~minutes~sprinklerzone1done~off"
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~9~NoRepeat~" & ManualLength & "~minutes~sprinklertotaldone~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|SetTimer~3~OneTime~" & ManualLength & "~minutes~sprinkler.zone1.off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|SetTimer~9~OneTime~" & ManualLength & "~minutes~sprinkler.all.off"
    hs.SetDeviceString "1350", ManualLength, True
    ' Start total program length timer
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Enable~9"
    'hs.SetDeviceString "2706", "On", True
    'hs.SetDeviceValue "Q3", 2
    'error = hs.runex("sprinkler2.vbs", "Sprinkler2","ZONE1;ON;SPRINKLER.VBS")
    error = hs.RunScriptFunc("sprinkler2.vbs","Sprinkler2","ZONE1;ON;SPR INKLER.VBS",False,False)
    end select
    else
    hs.writelog "Sprinkler", "Zone 1 manual and on automatic"
    status_string = now & " - Zone 1 Manual but Sprinklers are on automatic - switch to manual"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2706", "Off", True
    hs.SetDeviceValue "Q3", 3
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLCmd|Msg~All~Sprinkler~System in Automatic Mode - Please switch to manual to operate zones individually~3"
    end if
    end select
    
    case "ZONE2"
    Select case data2
    case "TOGGLE"
    if ManualMode = 2 then
    ' Turning Zone 2 on manually
    ' Checking status of zone
    temp = hs.devicevalue("2707")
    Select case temp
    case 2
    ' Sprinkler On, turn it off
    'hs.SetDeviceString "2707", "Off", True
    'hs.SetDeviceValue "Q4", 3
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Macro|sprinkler.zone2.off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Macro|sprinkler.all.off"
    'error = hs.runex("sprinkler2.vbs", "Sprinkler2","ZONE2;OFF;SPRINKLER.VBS")
    case 3
    ' Sprinkler Off, turn it on
    ' Get manual zone run time...
    ManualLength = hs.devicestring("2738")
    ' Set zone 2 timer length in MainLobby
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~4~NoRepeat~" & ManualLength & "~minutes~sprinklerzone1done~off"
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~9~NoRepeat~" & ManualLength & "~minutes~sprinklertotaldone~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|SetTimer~4~OneTime~" & ManualLength & "~minutes~sprinkler.zone2.off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|SetTimer~9~OneTime~" & ManualLength & "~minutes~sprinkler.all.off"
    hs.SetDeviceString "1351", ManualLength, True
    ' Start total program length timer
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Enable~9"
    hs.SetDeviceString "2707", "On", True
    hs.SetDeviceValue "Q4", 2
    'error = hs.runex("sprinkler2.vbs", "Sprinkler2","ZONE2;ON;SPRINKLER.VBS")
    error = hs.RunScriptFunc("sprinkler2.vbs","Sprinkler2","ZONE2;ON;SPR INKLER.VBS",False,False)
    end select
    else
    hs.writelog "Sprinkler", "Zone 2 manual and on automatic"
    status_string = now & " - Zone 2 Manual but Sprinklers are on automatic - switch to manual"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2707", "Off", True
    hs.SetDeviceValue "Q4", 3
    end if
    end select
    
    case "ZONE3"
    Select case data2
    case "TOGGLE"
    if ManualMode = 2 then
    ' Turning Zone 3 on manually
    ' Checking status of zone
    temp = hs.devicevalue("2708")
    Select case temp
    case 2
    ' Sprinkler On, turn it off
    'hs.SetDeviceString "2708", "Off", True
    'hs.SetDeviceValue "Q5", 3
    hs.writelog "Sprinkler", "Zone 3 Toggle - Sprinkler On - Turning Zone 3 Off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Macro|sprinkler.zone3.off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Macro|sprinkler.all.off"
    'error = hs.runex("sprinkler2.vbs", "Sprinkler3","ZONE1;OFF;SPRINKLER.VBS")
    case 3
    ' Sprinkler Off, turn it on
    ' Get manual zone run time...
    ManualLength = hs.devicestring("2738")
    ' Set zone 3 timer length in MainLobby
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~5~NoRepeat~" & ManualLength & "~minutes~sprinklerzone1done~off"
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~9~NoRepeat~" & ManualLength & "~minutes~sprinklertotaldone~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|SetTimer~5~OneTime~" & ManualLength & "~minutes~sprinkler.zone3.off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|SetTimer~9~OneTime~" & ManualLength & "~minutes~sprinkler.all.off"
    hs.SetDeviceString "1352", ManualLength, True
    ' Start total program length timer
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Enable~9"
    hs.SetDeviceString "2708", "On", True
    hs.SetDeviceValue "Q5", 2
    'error = hs.runex("sprinkler2.vbs", "Sprinkler2","ZONE3;ON;SPRINKLER.VBS")
    error = hs.RunScriptFunc("sprinkler2.vbs","Sprinkler2","ZONE3;ON;SPR INKLER.VBS",False,False)
    end select
    else
    hs.writelog "Sprinkler", "Zone 3 manual and on automatic"
    status_string = now & " - Zone 3 Manual but Sprinklers are on automatic - switch to manual"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2708", "Off", True
    hs.SetDeviceValue "Q5", 3
    end if
    end select
    
    case "ZONE4"
    Select case data2
    case "TOGGLE"
    if ManualMode = 2 then
    ' Turning Zone 4 on manually
    ' Checking status of zone
    temp = hs.devicevalue("2709")
    Select case temp
    case 2
    ' Sprinkler On, turn it off
    'hs.SetDeviceString "2709", "Off", True
    'hs.SetDeviceValue "Q6", 3
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Macro|sprinkler.zone4.off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Macro|sprinkler.all.off"
    'error = hs.runex("sprinkler2.vbs", "Sprinkler2","ZONE4;OFF;SPRINKLER.VBS")
    case 3
    ' Sprinkler Off, turn it on
    ' Get manual zone run time...
    ManualLength = hs.devicestring("2738")
    ' Set zone 3 timer length in MainLobby
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~6~NoRepeat~" & ManualLength & "~minutes~sprinklerzone1done~off"
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~9~NoRepeat~" & ManualLength & "~minutes~sprinklertotaldone~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|SetTimer~6~OneTime~" & ManualLength & "~minutes~sprinkler.zone4.off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|SetTimer~9~OneTime~" & ManualLength & "~minutes~sprinkler.all.off"
    hs.SetDeviceString "1353", ManualLength, True
    ' Start total program length timer
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Enable~9"
    hs.SetDeviceString "2709", "On", True
    hs.SetDeviceValue "Q6", 2
    'error = hs.runex("sprinkler2.vbs", "Sprinkler2","ZONE4;ON;SPRINKLER.VBS")
    error = hs.RunScriptFunc("sprinkler2.vbs","Sprinkler2","ZONE4;ON;SPR INKLER.VBS",False,False)
    end select
    else
    hs.writelog "Sprinkler", "Zone 4 manual and on automatic"
    status_string = now & " - Zone 4 Manual but Sprinklers are on automatic - switch to manual"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2709", "Off", True
    hs.SetDeviceValue "Q6", 3
    end if
    end select
    
    case "ZONE5"
    Select case data2
    case "TOGGLE"
    if ManualMode = 2 then
    ' Turning Zone 5 on manually
    ' Checking status of zone
    temp = hs.devicevalue("2710")
    Select case temp
    case 2
    ' Sprinkler On, turn it off
    'hs.SetDeviceString "2710", "Off", True
    'hs.SetDeviceValue "Q7", 3
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Macro|sprinkler.zone5.off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Macro|sprinkler.all.off"
    'error = hs.runex("sprinkler2.vbs", "Sprinkler2","ZONE5;OFF;SPRINKLER.VBS")
    case 3
    ' Sprinkler Off, turn it on
    ' Get manual zone run time...
    ManualLength = hs.devicestring("2738")
    ' Set zone 3 timer length in MainLobby
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~7~NoRepeat~" & ManualLength & "~minutes~sprinklerzone1done~off"
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~9~NoRepeat~" & ManualLength & "~minutes~sprinklertotaldone~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|SetTimer~7~OneTime~" & ManualLength & "~minutes~sprinkler.zone5.off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|SetTimer~9~OneTime~" & ManualLength & "~minutes~sprinkler.all.off"
    hs.SetDeviceString "1354", ManualLength, True
    ' Start total program length timer
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Enable~9"
    hs.SetDeviceString "2710", "On", True
    hs.SetDeviceValue "Q7", 2
    'error = hs.runex("sprinkler2.vbs", "Sprinkler2","ZONE5;ON;SPRINKLER.VBS")
    error = hs.RunScriptFunc("sprinkler2.vbs","Sprinkler2","ZONE5;ON;SPR INKLER.VBS",False,False)
    end select
    else
    hs.writelog "Sprinkler", "Zone 5 manual and on automatic"
    status_string = now & " - Zone 5 Manual but Sprinklers are on automatic - switch to manual"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2710", "Off", True
    hs.SetDeviceValue "Q7", 3
    end if
    end select
    
    case "ZONE6"
    Select case data2
    case "TOGGLE"
    if ManualMode = 2 then
    ' Turning Zone 6 on manually
    ' Checking status of zone
    temp = hs.devicevalue("2711")
    Select case temp
    case 2
    ' Sprinkler On, turn it off
    'hs.SetDeviceString "2711", "Off", True
    'hs.SetDeviceValue "Q8", 3
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Macro|sprinkler.zone6.off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Macro|sprinkler.all.off"
    'error = hs.runex("sprinkler2.vbs", "Sprinkler2","ZONE6;OFF;SPRINKLER.VBS")
    case 3
    ' Sprinkler Off, turn it on
    ' Get manual zone run time...
    ManualLength = hs.devicestring("2738")
    ' Set zone 3 timer length in MainLobby
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~8~NoRepeat~" & ManualLength & "~minutes~sprinklerzone1done~off"
    'hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.MLTimer|SetTimer~9~NoRepeat~" & ManualLength & "~minutes~sprinklertotaldone~off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|SetTimer~8~OneTime~" & ManualLength & "~minutes~sprinkler.zone6.off"
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|SetTimer~9~OneTime~" & ManualLength & "~minutes~sprinkler.all.off"
    hs.SetDeviceString "1355", ManualLength, True
    ' Start total program length timer
    hs.plugin("MLHSPlugin").MLServeCMD "MLServeCmd.Timers|Enable~9"
    hs.SetDeviceString "2711", "On", True
    hs.SetDeviceValue "Q8", 2
    'error = hs.runex("sprinkler2.vbs", "Sprinkler2","ZONE6;ON;SPRINKLER.VBS")
    error = hs.RunScriptFunc("sprinkler2.vbs","Sprinkler2","ZONE6;ON;SPR INKLER.VBS",False,False)
    end select
    else
    hs.writelog "Sprinkler", "Zone 6 manual and on automatic"
    status_string = now & " - Zone 6 Manual but Sprinklers are on automatic - switch to manual"
    hs.SetDeviceString "1347", status_string, True
    hs.SetDeviceString "2711", "Off", True
    hs.SetDeviceValue "Q8", 3
    end if
    end select
    
    end select
    
    hs.writelog "Sprinkler", "+++++++++++++++++++++++++++++++++++ SPRINKLER END +++++++++++++++++++++++++++++++++++ "
    
    
    End Sub

    Leave a comment:


  • Blade
    replied
    I would convert it to .vb as vbs is very old
    Post the script and I will have a look at it for you

    Leave a comment:


  • simonmason
    replied
    Thanks for the response. I am trying to use this in a vbscript .vbs file and it doesn't seem to work. This an extensive script that I had running on HS2 and I would rather note convert to vb. Is there a syntax that would work in .vbs? I have tried all of the logical versions I can think of. Thanks for your help.

    Leave a comment:


  • Blade
    replied
    You could try this:

    Code:
    hs.PluginFunction("BLML2HS", "", "MLServeCmd", {"Macro|SetVariable|my_variable1~hi!SetVariable|my_variable2~there"})

    Leave a comment:


  • simonmason
    replied
    Thanks. One more related question. What is the syntax for calling MyServer from a script in HS3? Specifically I want to use the command SetVariable.

    Leave a comment:


  • Blade
    replied
    You would need to do this:

    Code:
    BLML2HS|HS-Runex~etherrain.vb~runCycle~EtherRain.8;pw;0;0;0;0;0;0;0;0
    Then in your script you would need to split that parameter by a semicolon

    Code:
    Public Sub runCycle(ByVal parms As String)
        Dim splitArray As String() = parms.Trim.Split(";")
        If splitArray.Length > 0 Then
            For Each parm As String In splitArray
                If parm IsNot Nothing Then
    
    *** do whatever you want with the parms ***
    
                End If
            Next
        End If
        splitArray = Nothing
    End Sub

    Leave a comment:


  • Syntax for running script in Homeseer from Allonis MyServer

    I am trying to figure out the syntax for running scripts in Myserver. The command builder shows all of the sections of the command as dropdowns but doesn't construct the command at the bottom.

    I tried this:

    BLML2HS|HS-Runex:etherrain.vb~runCycle~EtherRain.8; pw; 0;0;0;0;0;0;0;0

    and this:

    BLML2HS|HS-Runex~etherrain.vb~runCycle~EtherRain.8; pw; 0;0;0;0;0;0;0;0

    But nothing works. I want to pass variables to the script from MyServer otherwise I would just put the script in an event and run the event.

    I looked around for any documentation but wasn't able to find anything. Thanks for any help.

    Click image for larger version

Name:	Screen Shot 2020-07-01 at 5.16.13 PM.png
Views:	175
Size:	165.9 KB
ID:	1398169
Working...
X