Test script

# Title: Test 2
# Purpose: learning about scripting, sensors and turnouts
# Author: Chris Morgan
# Date: 22nd October 2014

import jarray
import jmri

class Test2(jmri.jmrit.automat.AbstractAutomaton) :

    def init(self):

        # define sensors
        print ">>> Defining sensors"
        self.mainlineSensor = sensors.provideSensor("mainline")
        self.approachpointsSensor = sensors.provideSensor("approachpoints")
        self.baypointsSensor = sensors.provideSensor("baypoints")
        self.quaypointsSensor = sensors.provideSensor("quaypoints")
        self.quaysidingSensor = sensors.provideSensor("quaysiding")
        self.quaysideSensor = sensors.provideSensor("quayside")
        # set loco throttle
        print ">>> Setting up loco throttle"
        self.throttle = self.getThrottle(101, True)
	
        # set loco sound on
        self.throttle.setF1(True)

        print ">>> Setup complete"

        return

    def handle(self):

        print ">>> Running loop..."
        # engine is on the bay points and is to be reversed onto the main line
        # and then run forward down the quay side before returning to the start

        print ">>> Setting points..."
        turnouts.provideTurnout("approachpointsop").setState(CLOSED)

        print ">>> Setting loco to reverse"
        self.throttle.setIsForward(False)
        self.waitMsec(1000)

        print ">>> Sound whistle"
        self.throttle.setF3(True)
        self.waitMsec(1000)
        self.throttle.setF3(False)

        print ">>> move loco"
        self.throttle.setSpeedSetting(0.2)
        # drain cocks
        self.throttle.setF7(True)
        self.waitMsec(6000)
        self.throttle.setF7(False)

        print ">>> waiting for the loco to to get to the main line"
        self.waitSensorActive(self.mainlineSensor)

        print ">>> at the main line, let the loco run on for a while"
        self.waitMsec(6000)

        print ">>> stopping the loco"
        self.throttle.setSpeedSetting(0)

        print ">>> allow the loco to come to a halt"
        self.waitMsec(5000)
  
        print ">>> throw approach points"
        turnouts.provideTurnout("approachpointsop").setState(THROWN)
        print ">>> ensure quay points are thrown correctly"
        turnouts.provideTurnout("quaypointsop").setState(THROWN)
        self.waitMsec(4000)

        print ">>> Guard sounds whistle"
        self.throttle.setF9(True)
        self.waitMsec(500)
        self.throttle.setF9(False)

        print ">>> loco prepares to move off"
        self.throttle.setIsForward(True) self.waitMsec(2000)
        # whistle
        self.throttle.setF3(True)
        self.waitMsec(500)
         self.throttle.setF3(False)

        print ">>> moving off"
        self.throttle.setSpeedSetting(0.8)
        # drain cocks
        self.throttle.setF7(True)
        self.waitMsec(6000)        self.throttle.setF7(False)

        print ">>> wait until the loco gets to the quay side"
        self.waitSensorActive(self.quaysideSensor)

        print ">>> at the quay side, let it run on a for a while"
        self.waitMsec(1000)

        print ">>> bring the loco to a halt"
        self.throttle.setSpeedSetting(0)

        print ">>> wait 15 seonds for the loco to come to a halt"
        self.waitMsec(15000)

        print ">>> go back again"

        print ">>> set the loco to reverse"
        self.throttle.setIsForward(False)
        print ">>> Sound whistle twice"
        self.throttle.setF3(True)
        self.waitMsec(1000)
        self.throttle.setF3(False)
        self.waitMsec(500)
        self.throttle.setF3(True)
        self.waitMsec(1000)
        self.throttle.setF3(False)

        print ">>> move of in reverse"
        self.throttle.setSpeedSetting(0.8)
        # drain cocks
        self.throttle.setF7(True)
        self.waitMsec(6000)
        self.throttle.setF7(False)
    
        print ">>> waiting for the loco to to get to the quay points"
        self.waitSensorActive(self.quaypointsSensor)

        print ">>> at the quay points so begin slowing the loco now"
        self.throttle.setSpeedSetting(0.4)

        print ">>> waiting for the loco to to get to the approach points"
        self.waitSensorActive(self.approachpointsSensor)

        print ">>> at the approach points so let it run on a 4 seconds"
        self.waitMsec(4000)

        print ">>> begin stopping the loco now"
        self.throttle.setSpeedSetting(0)

        print ">>> allow 15 seconds for the loco to come to a halt"
        self.waitMsec(15000)

        print ">>> now put the loco back on the bay points"
        turnouts.provideTurnout("approachpointsop").setState(CLOSED)
        turnouts.provideTurnout("baypointsop").setState(THROWN)
        self.waitMsec(4000)

        print ">>> Guard sounds whistle"
        self.throttle.setF9(True)
        self.waitMsec(500)
        self.throttle.setF9(False)

        print ">>> loco prepares to move off"
        self.throttle.setIsForward(True)
        self.waitMsec(2000)
        # whistle
        self.throttle.setF3(True)
        self.waitMsec(500)
        self.throttle.setF3(False)

        print ">>> moving off"
        self.throttle.setSpeedSetting(0.2)
        # drain cocks
        self.throttle.setF7(True)
        self.waitMsec(6000)
        self.throttle.setF7(False)

        print ">>> wait for the loco to get to the bay points"
        self.waitSensorActive(self.baypointsSensor)

        print ">>> at the bay points, let the loco run on for 3 seconds"
        self.waitMsec(3000)

        print ">>> brining the loco to a halt"
        self.throttle.setSpeedSetting(0)

        # wait 20 seconds before going found again
        self.waitMsec(10000)

        return 1

# end of class definition

# start up
Test2().start()