def init(self): # self.arrivesMemoryVariable = "Arrives Freight House" self.departsMemoryVariable = "Departs Freight House" self.freightHouse = Building() self.freightHouse.init(self.arrivesMemoryVariable, self.departsMemoryVariable) self.scheduleTimes = [] self.scheduleTimes.append( memories.provideMemory(self.arrivesMemoryVariable)) #self.stove = lights.provideLight("NL120"); #self.platformLights = lights.provideLight("NL121"); #self.officeLight = lights.provideLight("NL122"); #self.dockLight = lights.provideLight("NL123"); #self.platformIndicator = lights.provideLight("IL121"); #self.officeIndicator = lights.provideLight("IL122"); #self.dockIndicator = lights.provideLight("IL123"); #self.platformLightDimmer = lights.provideLight("NL124"); #self.officeLightDimmer = lights.provideLight("NL125"); #self.dockLightDimmer = lights.provideLight("NL126"); self.freightDock = TriStateSensor( sensors.provideSensor("Freight Dock Dim"), sensors.provideSensor("Freight Dock On"), sensors.provideSensor("Freight Dock Off")) self.freightOffice = TriStateSensor( sensors.provideSensor("Freight Office Dim"), sensors.provideSensor("Freight Office On"), sensors.provideSensor("Freight Office Off")) self.freightPlatform = TriStateSensor( sensors.provideSensor("Freight Platform Dim"), sensors.provideSensor("Freight Platform On"), sensors.provideSensor("Freight Platform Off")) self.freightStove = TriStateSensor( None, sensors.provideSensor("Freight Stove"), None) self.sideDoor = sensors.provideSensor( "Mine Bldg Side Soor") # Mine Bldg Side Door self.lockerRoom = sensors.provideSensor( "Mine Bldg S2") # Mine Bldg Level 2 - Locker Room self.tipple = sensors.provideSensor("Mine Bldg S3") # Mine Bldg Tipple
def init(self) : arOn = lights.provideLight("NL101") arDim = lights.provideLight("NL106") jOn = sensors.provideSensor("Depot Platform On") jOff = sensors.provideSensor("Depot Platform Off") jDim = sensors.provideSensor("Depot Platform Dim") self.depotPlatform = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("NL102") arDim = lights.provideLight("NL107") jOn = sensors.provideSensor("Depot Waiting Room On") jOff = sensors.provideSensor("Depot Waiting Room Off") jDim = sensors.provideSensor("Depot Waiting Room Dim") self.depotWaitingRoom = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("LL145") arDim = lights.provideLight("LL149") jOn = sensors.provideSensor("Mine Building Roof Sign On") jOff = sensors.provideSensor("Mine Building Roof Sign Off") jDim = sensors.provideSensor("Mine Building Roof Sign Dim") self.roofSign = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("LL143") arDim = lights.provideLight("LL147") jOn = sensors.provideSensor("Mine Building Level 2 On") jOff = sensors.provideSensor("Mine Building Level 2 Off") jDim = sensors.provideSensor("Mine Building Level 2 Dim") self.mineS2 = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("LL144") arDim = lights.provideLight("LL148") jOn = sensors.provideSensor("Mine Building Level 3 On") jOff = sensors.provideSensor("Mine Building Level 3 Off") jDim = sensors.provideSensor("Mine Building Level 3 Dim") self.mineS3 = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("LL140") arDim = lights.provideLight("LL146") jOn = sensors.provideSensor("Mine Building Loading Dock On") jOff = sensors.provideSensor("Mine Building Loading Dock Off") jDim = sensors.provideSensor("Mine Building Loading Dock Dim") self.loadingDock = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("Mine Bldg Side Door Light") arDim = None jOn = sensors.provideSensor("Mine Bldg Side Door") jOff = None jDim = None self.s2 = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("LL143") arDim = None jOn = sensors.provideSensor("Mine Bldg S2") jOff = None jDim = None self.s2 = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("LL144") arDim = None jOn = sensors.provideSensor("Mine Bldg S3") jOff = None jDim = None self.s3 = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("LL79") arDim = lights.provideLight("LL80") jOn = sensors.provideSensor("Winding House Boiler Low") jOff = sensors.provideSensor("Winding House Boiler Off") jDim = sensors.provideSensor("Winding House Boiler High") self.boilerFire = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("LL74") arDim = lights.provideLight("LL75") jOn = sensors.provideSensor("Winding House Engine Room On") jOff = sensors.provideSensor("Winding House Engine Room Off") jDim = sensors.provideSensor("Winding House Engine Room Dim") self.engineRoom = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("NL123") arDim = lights.provideLight("NL126") jOn = sensors.provideSensor("Freight Dock On") jOff = sensors.provideSensor("Freight Dock Off") jDim = sensors.provideSensor("Freight Dock Dim") self.freightDock = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("NL121") arDim = lights.provideLight("NL124") jOn = sensors.provideSensor("Freight Platform On") jOff = sensors.provideSensor("Freight Platform Off") jDim = sensors.provideSensor("Freight Platform Dim") self.freightPlatform = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("NL122") arDim = lights.provideLight("NL125") jOn = sensors.provideSensor("Freight Office On") jOff = sensors.provideSensor("Freight Office Off") jDim = sensors.provideSensor("Freight Office Dim") self.freightOffice = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("NL120") jOn = sensors.provideSensor("Freight Stove") self.freightStove = foggyhollow.arduino.DimmableLight(None, arOn, None, jOn, None) arOn = lights.provideLight("Level 1 Blue Light") arDim = lights.provideLight("Level 1 Blue Dim") jOn = sensors.provideSensor("L1 Blue Light On") jOff = sensors.provideSensor("L1 Blue Light Off") jDim = sensors.provideSensor("L1 Blue Light Dim") self.loadingDock = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) self.l1Blue = TriStateSensor(jDim,jOn, jOff) self.l1Blue.setState(TriStateSensor.ON) arOn = lights.provideLight("NL133") arDim = lights.provideLight("Level 1 Violet Dim") jOn = sensors.provideSensor("L1 Violet Light On") jOff = sensors.provideSensor("L1 Violet Light Off") jDim = sensors.provideSensor("L1 Violet Light Dim") self.loadingDock = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("Level 1 Yellow Light") arDim = lights.provideLight("Level 1 Yellow Dim") jOn = sensors.provideSensor("L1 Yellow Light On") jOff = sensors.provideSensor("L1 Yellow Light Off") jDim = sensors.provideSensor("L1 Yellow Light Dim") self.loadingDock = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = sensors.provideSensor("Rock Wobble") jOn = sensors.provideSensor("Rock Wobble") jOff = sensors.provideSensor("Rock Off") self.dragonRock = foggyhollow.arduino.DimmableSensor(None, arOn, None, jOn, jOff) self.demoModeListener = self.DemoModeListener() self.demoModeListener.init(self.demoOff, 20) self.demoMode = sensors.provideSensor("Building Light Demo") self.demoMode.setState(jmri.Sensor.ACTIVE) self.demoMode.addPropertyChangeListener(self.demoModeListener) self.backgroundSound = jmri.jmrit.Sound(jmri.util.FileUtil.getExternalFilename("preference:resources/sounds/DangerousMineNoiseReduction16bit.wav")) self.waitMsec(5000) return;
class AceOfSpadesBackgroundSound(jmri.jmrit.automat.AbstractAutomaton) : def init(self) : arOn = lights.provideLight("NL101") arDim = lights.provideLight("NL106") jOn = sensors.provideSensor("Depot Platform On") jOff = sensors.provideSensor("Depot Platform Off") jDim = sensors.provideSensor("Depot Platform Dim") self.depotPlatform = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("NL102") arDim = lights.provideLight("NL107") jOn = sensors.provideSensor("Depot Waiting Room On") jOff = sensors.provideSensor("Depot Waiting Room Off") jDim = sensors.provideSensor("Depot Waiting Room Dim") self.depotWaitingRoom = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("LL145") arDim = lights.provideLight("LL149") jOn = sensors.provideSensor("Mine Building Roof Sign On") jOff = sensors.provideSensor("Mine Building Roof Sign Off") jDim = sensors.provideSensor("Mine Building Roof Sign Dim") self.roofSign = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("LL143") arDim = lights.provideLight("LL147") jOn = sensors.provideSensor("Mine Building Level 2 On") jOff = sensors.provideSensor("Mine Building Level 2 Off") jDim = sensors.provideSensor("Mine Building Level 2 Dim") self.mineS2 = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("LL144") arDim = lights.provideLight("LL148") jOn = sensors.provideSensor("Mine Building Level 3 On") jOff = sensors.provideSensor("Mine Building Level 3 Off") jDim = sensors.provideSensor("Mine Building Level 3 Dim") self.mineS3 = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("LL140") arDim = lights.provideLight("LL146") jOn = sensors.provideSensor("Mine Building Loading Dock On") jOff = sensors.provideSensor("Mine Building Loading Dock Off") jDim = sensors.provideSensor("Mine Building Loading Dock Dim") self.loadingDock = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("Mine Bldg Side Door Light") arDim = None jOn = sensors.provideSensor("Mine Bldg Side Door") jOff = None jDim = None self.s2 = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("LL143") arDim = None jOn = sensors.provideSensor("Mine Bldg S2") jOff = None jDim = None self.s2 = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("LL144") arDim = None jOn = sensors.provideSensor("Mine Bldg S3") jOff = None jDim = None self.s3 = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("LL79") arDim = lights.provideLight("LL80") jOn = sensors.provideSensor("Winding House Boiler Low") jOff = sensors.provideSensor("Winding House Boiler Off") jDim = sensors.provideSensor("Winding House Boiler High") self.boilerFire = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("LL74") arDim = lights.provideLight("LL75") jOn = sensors.provideSensor("Winding House Engine Room On") jOff = sensors.provideSensor("Winding House Engine Room Off") jDim = sensors.provideSensor("Winding House Engine Room Dim") self.engineRoom = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("NL123") arDim = lights.provideLight("NL126") jOn = sensors.provideSensor("Freight Dock On") jOff = sensors.provideSensor("Freight Dock Off") jDim = sensors.provideSensor("Freight Dock Dim") self.freightDock = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("NL121") arDim = lights.provideLight("NL124") jOn = sensors.provideSensor("Freight Platform On") jOff = sensors.provideSensor("Freight Platform Off") jDim = sensors.provideSensor("Freight Platform Dim") self.freightPlatform = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("NL122") arDim = lights.provideLight("NL125") jOn = sensors.provideSensor("Freight Office On") jOff = sensors.provideSensor("Freight Office Off") jDim = sensors.provideSensor("Freight Office Dim") self.freightOffice = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("NL120") jOn = sensors.provideSensor("Freight Stove") self.freightStove = foggyhollow.arduino.DimmableLight(None, arOn, None, jOn, None) arOn = lights.provideLight("Level 1 Blue Light") arDim = lights.provideLight("Level 1 Blue Dim") jOn = sensors.provideSensor("L1 Blue Light On") jOff = sensors.provideSensor("L1 Blue Light Off") jDim = sensors.provideSensor("L1 Blue Light Dim") self.loadingDock = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) self.l1Blue = TriStateSensor(jDim,jOn, jOff) self.l1Blue.setState(TriStateSensor.ON) arOn = lights.provideLight("NL133") arDim = lights.provideLight("Level 1 Violet Dim") jOn = sensors.provideSensor("L1 Violet Light On") jOff = sensors.provideSensor("L1 Violet Light Off") jDim = sensors.provideSensor("L1 Violet Light Dim") self.loadingDock = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = lights.provideLight("Level 1 Yellow Light") arDim = lights.provideLight("Level 1 Yellow Dim") jOn = sensors.provideSensor("L1 Yellow Light On") jOff = sensors.provideSensor("L1 Yellow Light Off") jDim = sensors.provideSensor("L1 Yellow Light Dim") self.loadingDock = foggyhollow.arduino.DimmableLight(arDim, arOn, jDim, jOn, jOff) arOn = sensors.provideSensor("Rock Wobble") jOn = sensors.provideSensor("Rock Wobble") jOff = sensors.provideSensor("Rock Off") self.dragonRock = foggyhollow.arduino.DimmableSensor(None, arOn, None, jOn, jOff) self.demoModeListener = self.DemoModeListener() self.demoModeListener.init(self.demoOff, 20) self.demoMode = sensors.provideSensor("Building Light Demo") self.demoMode.setState(jmri.Sensor.ACTIVE) self.demoMode.addPropertyChangeListener(self.demoModeListener) self.backgroundSound = jmri.jmrit.Sound(jmri.util.FileUtil.getExternalFilename("preference:resources/sounds/DangerousMineNoiseReduction16bit.wav")) self.waitMsec(5000) return; class DemoModeListener(java.beans.PropertyChangeListener) : def init(self, callback, delayMinutes): self.demoOff = callback self.delayMinutes = delayMinutes def propertyChange(self, event): if (event.source.getState() == jmri.Sensor.ACTIVE) : # # Schedule demo mode to end #self.scheduler.enter(60*self.delayMinutes, 1, self.demoOff, argument=(event.source,)) threading.Timer(60*self.delayMinutes, self.demoOff, [event.source]).start() return def demoOff(self, sensor) : import jmri sensor.setState(jmri.Sensor.INACTIVE) return def handle(self): self.backgroundSound.play() self.waitMsec(60000) # Wait 1 minute return (True)
def init(self): # # Mine Building Lights self.roofSign = TriStateSensor(sensors.provideSensor("Mine Bldg Roof Sign Dim"), sensors.provideSensor("Mine Building Roof Sign On"), sensors.provideSensor("Mine Building Roof Sign Off")) self.loadingDock = TriStateSensor(sensors.provideSensor("Mine Building Loading Dock Dim"), sensors.provideSensor("Mine Building Loading Dock On"), sensors.provideSensor("Mine Building Loading Dock Off")) self.mineSideDoor = TriStateSensor(None, lights.provideLight("Mine Bldg Side Door Light"), None) self.mineS2Light = TriStateSensor(None, lights.provideLight("Mine Bldg S2 Light"), None) self.mineS3Light = TriStateSensor(None, lights.provideLight("Mine Bldg S3 Light"), None) # # Hoist Call Buttons self.hoistS2 = TriStateSensor(None, sensors.provideSensor("IS Call Hoist To S2"), None) self.hoistS1 = TriStateSensor(None, sensors.provideSensor("IS Call Hoist To S1"), None) self.hoistL1 = TriStateSensor(None, sensors.provideSensor("IS Call Hoist To L1"), None) # # Tipple lights self.leftBridge = TriStateSensor(None, lights.provideLight("Tipple Bridge Left Light"), None) self.rightBridge = TriStateSensor(None, lights.provideLight("Tipple Bridge Right Light"), None) self.insideLights = TriStateSensor(None, lights.provideLight("Tipple Inside Lights"), None) self.chuteLight = TriStateSensor(None, lights.provideLight("Tipple Chute Light"), None) self.gateLight = TriStateSensor(None, lights.provideLight("Tipple Gate Light"), None) self.lantern = TriStateSensor(lights.provideLight("Tipple EOT Lantern Red"), lights.provideLight("Tipple EOT Lantern White"), None) # # Tipple chutes self.rightChute = TriStateSensor(None, sensors.provideSensor("Tipple Chute Right"), None) self.leftChute = TriStateSensor(None, sensors.provideSensor("Tipple Chute Left"), None) # # Winding House Lights self.whSideDoor = TriStateSensor(None, lights.provideLight("Winding House Side Door Light"), None) self.whBridge = TriStateSensor(None, lights.provideLight("Winding House Bridge Light"), None) self.wh2ndFloor = TriStateSensor(None, lights.provideLight("Winding House 2nd Floor Light"), None) self.whEngineRoom = TriStateSensor(sensors.provideSensor("Winding House Engine Room Dim"), sensors.provideSensor("Winding House Engine Room On"), sensors.provideSensor("Winding House Engine Room Off")) self.boilerFire = TriStateSensor(sensors.provideSensor("Winding House Boiler Low"), sensors.provideSensor("Winding House Boiler High"), sensors.provideSensor("Winding House Boiler Off")) # # Level 1 Lights self.l1BlueLight = TriStateSensor(sensors.provideSensor("L1 Blue Light Dim"), sensors.provideSensor("L1 Blue Light On"), sensors.provideSensor("L1 Blue Light Off")) self.l1YellowLight = TriStateSensor(sensors.provideSensor("L1 Yellow Light Dim"), sensors.provideSensor("L1 Yellow Light On"), sensors.provideSensor("L1 Yellow Light Off")) self.l1VioletLight = TriStateSensor(sensors.provideSensor("Level 1 Violet Light Dim"), sensors.provideSensor("Level 1 Violet Light On"), sensors.provideSensor("Level 1 Violet Light Off")) self.demoModeListener = self.DemoModeListener() self.demoModeListener.init(self.simulateActivity, self.shutdown) self.demoActive = sensors.provideSensor("S3 Demo") self.demoActive.addPropertyChangeListener(self.demoModeListener)
class MineSimulator(jmri.jmrit.automat.AbstractAutomaton): def init(self): # # Mine Building Lights self.roofSign = TriStateSensor(sensors.provideSensor("Mine Bldg Roof Sign Dim"), sensors.provideSensor("Mine Building Roof Sign On"), sensors.provideSensor("Mine Building Roof Sign Off")) self.loadingDock = TriStateSensor(sensors.provideSensor("Mine Building Loading Dock Dim"), sensors.provideSensor("Mine Building Loading Dock On"), sensors.provideSensor("Mine Building Loading Dock Off")) self.mineSideDoor = TriStateSensor(None, lights.provideLight("Mine Bldg Side Door Light"), None) self.mineS2Light = TriStateSensor(None, lights.provideLight("Mine Bldg S2 Light"), None) self.mineS3Light = TriStateSensor(None, lights.provideLight("Mine Bldg S3 Light"), None) # # Hoist Call Buttons self.hoistS2 = TriStateSensor(None, sensors.provideSensor("IS Call Hoist To S2"), None) self.hoistS1 = TriStateSensor(None, sensors.provideSensor("IS Call Hoist To S1"), None) self.hoistL1 = TriStateSensor(None, sensors.provideSensor("IS Call Hoist To L1"), None) # # Tipple lights self.leftBridge = TriStateSensor(None, lights.provideLight("Tipple Bridge Left Light"), None) self.rightBridge = TriStateSensor(None, lights.provideLight("Tipple Bridge Right Light"), None) self.insideLights = TriStateSensor(None, lights.provideLight("Tipple Inside Lights"), None) self.chuteLight = TriStateSensor(None, lights.provideLight("Tipple Chute Light"), None) self.gateLight = TriStateSensor(None, lights.provideLight("Tipple Gate Light"), None) self.lantern = TriStateSensor(lights.provideLight("Tipple EOT Lantern Red"), lights.provideLight("Tipple EOT Lantern White"), None) # # Tipple chutes self.rightChute = TriStateSensor(None, sensors.provideSensor("Tipple Chute Right"), None) self.leftChute = TriStateSensor(None, sensors.provideSensor("Tipple Chute Left"), None) # # Winding House Lights self.whSideDoor = TriStateSensor(None, lights.provideLight("Winding House Side Door Light"), None) self.whBridge = TriStateSensor(None, lights.provideLight("Winding House Bridge Light"), None) self.wh2ndFloor = TriStateSensor(None, lights.provideLight("Winding House 2nd Floor Light"), None) self.whEngineRoom = TriStateSensor(sensors.provideSensor("Winding House Engine Room Dim"), sensors.provideSensor("Winding House Engine Room On"), sensors.provideSensor("Winding House Engine Room Off")) self.boilerFire = TriStateSensor(sensors.provideSensor("Winding House Boiler Low"), sensors.provideSensor("Winding House Boiler High"), sensors.provideSensor("Winding House Boiler Off")) # # Level 1 Lights self.l1BlueLight = TriStateSensor(sensors.provideSensor("L1 Blue Light Dim"), sensors.provideSensor("L1 Blue Light On"), sensors.provideSensor("L1 Blue Light Off")) self.l1YellowLight = TriStateSensor(sensors.provideSensor("L1 Yellow Light Dim"), sensors.provideSensor("L1 Yellow Light On"), sensors.provideSensor("L1 Yellow Light Off")) self.l1VioletLight = TriStateSensor(sensors.provideSensor("Level 1 Violet Light Dim"), sensors.provideSensor("Level 1 Violet Light On"), sensors.provideSensor("Level 1 Violet Light Off")) self.demoModeListener = self.DemoModeListener() self.demoModeListener.init(self.simulateActivity, self.shutdown) self.demoActive = sensors.provideSensor("S3 Demo") self.demoActive.addPropertyChangeListener(self.demoModeListener) def getDelay(self, delay): if (sensors.provideSensor("Building Light Demo").getState() == ACTIVE) : delay = float(delay) / 3.0 return delay def simulateActivity(self): self.shutdown() self.waitMsec(5000) # self.l1BlueLight.scheduleStateChange(TriStateSensor.DIM, 0) self.l1VioletLight.setPeriodicStateChange(self.getDelay(3.0), self.getDelay(4.0), self.getDelay(5.0), 1) self.callHoist("S1", 0.5) self.boilerFire.scheduleStateChange(TriStateSensor.DIM, 0) self.mineSideDoor.scheduleStateChange(TriStateSensor.ON, self.getDelay(0.5)) self.whSideDoor.scheduleStateChange(TriStateSensor.ON, self.getDelay(.8)) self.whEngineRoom.scheduleStateChange(TriStateSensor.ON, self.getDelay(1)) self.whEngineRoom.setPeriodicStateChange(self.getDelay(2.0), self.getDelay(3.0), self.getDelay(1), 0) self.boilerFire.setPeriodicStateChange(self.getDelay(2.0), self.getDelay(2.0), self.getDelay(5.0), 1) self.wh2ndFloor.setPeriodicStateChange(self.getDelay(3.0), self.getDelay(3.0), self.getDelay(6.0), 0) self.whBridge.setPeriodicStateChange(self.getDelay(2.0), self.getDelay(2.0), self.getDelay(6.0), 0) self.loadingDock.scheduleStateChange(TriStateSensor.DIM, self.getDelay(1.5)) self.roofSign.scheduleStateChange(TriStateSensor.ON, self.getDelay(2.2)) self.roofSign.scheduleStateChange(TriStateSensor.DIM, self.getDelay(2.8)) self.callHoist("S2", 3) self.mineS2Light.scheduleStateChange(TriStateSensor.ON, self.getDelay(4)) self.whEngineRoom.scheduleStateChange(TriStateSensor.OFF, self.getDelay(5)) self.mineS2Light.scheduleStateChange(TriStateSensor.OFF, self.getDelay(6)) self.mineS3Light.scheduleStateChange(TriStateSensor.ON, self.getDelay(7)) self.roofSign.scheduleStateChange(TriStateSensor.ON, self.getDelay(7.5)) self.loadingDock.scheduleStateChange(TriStateSensor.ON, self.getDelay(8)) self.insideLights.scheduleStateChange(TriStateSensor.ON, self.getDelay(10)) self.rightBridge.scheduleStateChange(TriStateSensor.ON, self.getDelay(11)) self.lantern.scheduleStateChange(TriStateSensor.ON, self.getDelay(11.5)) self.leftBridge.scheduleStateChange(TriStateSensor.ON, self.getDelay(12)) self.lantern.scheduleStateChange(TriStateSensor.DIM, self.getDelay(13)) self.chuteLight.scheduleStateChange(TriStateSensor.ON, self.getDelay(15)) self.gateLight.scheduleStateChange(TriStateSensor.ON, self.getDelay(16)) prob = java.util.Random().nextInt(10) if (prob < 3): self.rightChute.scheduleStateChange(TriStateSensor.ON, self.getDelay(17)) self.rightChute.scheduleStateChange(TriStateSensor.OFF, self.getDelay(19)) elif (prob < 6): self.leftChute.scheduleStateChange(TriStateSensor.ON, self.getDelay(17)) self.leftChute.scheduleStateChange(TriStateSensor.OFF, self.getDelay(19)) else : self.leftChute.scheduleStateChange(TriStateSensor.ON, self.getDelay(17)) self.rightChute.scheduleStateChange(TriStateSensor.ON, self.getDelay(17.5)) self.leftChute.scheduleStateChange(TriStateSensor.OFF, self.getDelay(18.5)) self.rightChute.scheduleStateChange(TriStateSensor.OFF, self.getDelay(19)) self.gateLight.scheduleStateChange(TriStateSensor.OFF, self.getDelay(20)) self.chuteLight.scheduleStateChange(TriStateSensor.OFF, self.getDelay(21)) self.lantern.scheduleStateChange(TriStateSensor.OFF, self.getDelay(21.5)) self.leftBridge.scheduleStateChange(TriStateSensor.OFF, self.getDelay(22)) self.rightBridge.scheduleStateChange(TriStateSensor.OFF, self.getDelay(23)) self.insideLights.scheduleStateChange(TriStateSensor.OFF, self.getDelay(24)) self.mineS3Light.scheduleStateChange(TriStateSensor.OFF, self.getDelay(25)) self.mineS2Light.scheduleStateChange(TriStateSensor.ON, self.getDelay(26)) self.callHoist("L1", 26.5) self.l1YellowLight.scheduleStateChange(TriStateSensor.ON, self.getDelay(28)) self.callHoist("S2", 30) self.l1YellowLight.scheduleStateChange(TriStateSensor.OFF, self.getDelay(30)) self.mineS2Light.scheduleStateChange(TriStateSensor.OFF, self.getDelay(35)) self.loadingDock.scheduleStateChange(TriStateSensor.OFF, self.getDelay(36)) self.mineSideDoor.scheduleStateChange(TriStateSensor.OFF, self.getDelay(36.5)) self.whSideDoor.scheduleStateChange(TriStateSensor.OFF, self.getDelay(30.2)) self.roofSign.scheduleStateChange(TriStateSensor.DIM, self.getDelay(29)) def callHoist(self, level, delay): if (sensors.provideSensor("Hoist Motor Enabled").getState() == ACTIVE): if (level == "S2"): self.hoistS2.scheduleStateChange(TriStateSensor.ON, self.getDelay(delay)) elif (level == "S1") : self.hoistL1.scheduleStateChange(TriStateSensor.ON, self.getDelay(delay)) elif (level == "L1") : self.hoistL1.scheduleStateChange(TriStateSensor.ON, self.getDelay(delay)) def turnAllLightsOff(self): self.leftChute.setState(TriStateSensor.OFF) self.rightChute.setState(TriStateSensor.OFF) self.whSideDoor.setState(TriStateSensor.OFF) self.whBridge.setState(TriStateSensor.OFF) self.wh2ndFloor.setState(TriStateSensor.OFF) self.whEngineRoom.setState(TriStateSensor.OFF) self.leftBridge.setState(TriStateSensor.OFF) self.rightBridge.setState(TriStateSensor.OFF) self.insideLights.setState(TriStateSensor.OFF) self.chuteLight.setState(TriStateSensor.OFF) self.gateLight.setState(TriStateSensor.OFF) self.lantern.setState(TriStateSensor.OFF) self.roofSign.setState(TriStateSensor.OFF) self.loadingDock.setState(TriStateSensor.OFF) self.mineSideDoor.setState(TriStateSensor.OFF) self.mineS2Light.setState(TriStateSensor.OFF) self.mineS3Light.setState(TriStateSensor.OFF) def shutdown(self): self.turnAllLightsOff() self.whSideDoor.cancelScheduledTasks() self.whBridge.cancelScheduledTasks() self.wh2ndFloor.cancelScheduledTasks() self.whEngineRoom.cancelScheduledTasks() self.leftBridge.cancelScheduledTasks() self.rightBridge.cancelScheduledTasks() self.insideLights.cancelScheduledTasks() self.chuteLight.cancelScheduledTasks() self.gateLight.cancelScheduledTasks() self.lantern.cancelScheduledTasks() self.roofSign.cancelScheduledTasks() self.loadingDock.cancelScheduledTasks() self.mineSideDoor.cancelScheduledTasks() self.mineS2Light.cancelScheduledTasks() self.mineS3Light.cancelScheduledTasks def handle(self): if (self.demoActive.getState() == ACTIVE) : self.simulateActivity() else : self.shutdown() self.waitChange([self.demoActive], int(self.getDelay(40*60*1000))) if (self.demoActive.getState() == ACTIVE) : return True else: self.shutdown() return False class DemoModeListener(java.beans.PropertyChangeListener) : def init(self, simProc, shutdownProc): self.shutdownProc = shutdownProc self.simProc = simProc def propertyChange(self, event): if (event.source.getState() == jmri.Sensor.ACTIVE) : self.shutdownProc() else: self.simProc() return
def init(self): self.debug = sensors.provideSensor("Private").getState() == ACTIVE self.trainPresentSensor = sensors.provideSensor("OS: Freight House") locoNumber = memories.provideMemory("L1 Loco Number").getValue() self.mineTrain = MineTrain() self.mineTrain.init(locoNumber, 1) self.tippleLights = sensors.provideSensor("Tipple Lights") self.bridgeLights = sensors.provideSensor("Lake Cavern Bridge") self.stoppingAtTipple = sensors.provideSensor("Stopping at Tipple") self.stoppingAtLake = sensors.provideSensor("Stopping at Lake") self.tippleSensor = sensors.provideSensor("OS:L1:Tipple") self.leftTunnelSensor = sensors.provideSensor("OS:L1:Left Tunnel") self.frontTunnelSensor = sensors.provideSensor("OS:L1:Front Tunnel") self.rightTunnelSensor = sensors.provideSensor("OS:L1:Right Tunnel") self.backTunnelSensor = sensors.provideSensor("OS:L1:Back Tunnel") self.backCavernSensor = sensors.provideSensor("OS:L1:Back Cavern") self.hoistCavernEntranceSensor = sensors.provideSensor( "OS:L1:Hoist Cavern Entrance") self.hoistCavernEOTSensor = sensors.provideSensor("OS:L1:Hoist EOT") self.hoistCavernSensor = sensors.provideSensor("OS:L1:Hoist Cavern") self.splash = [] self.splash.append( self.mineTrain.loadSoundFile( "preference:resources/sounds/singleSwimmer.wav")) self.splash.append( self.mineTrain.loadSoundFile( "preference:resources/sounds/Splash.wav")) self.splash.append( self.mineTrain.loadSoundFile( "preference:resources/sounds/Splash2.wav")) self.splash.append( self.mineTrain.loadSoundFile( "preference:resources/sounds/Splash3.wav")) self.splash.append( self.mineTrain.loadSoundFile( "preference:resources/sounds/Splash4.wav")) self.rightTunnelSignal = masts.getSignalMast("SM-L1-RT-E") self.hoistCavernEntranceSignal = masts.getSignalMast("SM-L1-HCE-E") self.backTunnelSignal = masts.getSignalMast("SM-L1-E-Back Tunnel") self.raiseHoistSound = jmri.jmrit.Sound( jmri.util.FileUtil.getExternalFilename( "preference:resources/sounds/Short-Short-Long-Signal.wav")) self.lowerHoistSound = jmri.jmrit.Sound( jmri.util.FileUtil.getExternalFilename( "preference:resources/sounds/Short-Long-Signal.wav")) self.t1FHSensor = sensors.provideSensor("OS: T1 Freight House") self.t1DSensor = sensors.provideSensor("OS: T1 Depot") self.t1WTSensor = sensors.provideSensor("OS: T1 Water Tower") self.t1BSensor = sensors.provideSensor("OS: T1 Bridge") self.roofSignOn = sensors.provideSensor( "Mine Building Roof Sign On") # Mine Bldg Roof Sign self.roofSignOff = sensors.provideSensor( "Mine Building Roof Sign Off") # Mine Bldg Roof Sign self.roofSignDim = sensors.provideSensor( "Mine Building Roof Sign Dim") # Mine Bldg Roof Sign self.roofSign = TriStateSensor(self.roofSignDim, self.roofSignOn, self.roofSignOff) self.boilerFire = TriStateSensor( sensors.provideSensor("Winding House Boiler Low"), sensors.provideSensor("Winding House Boiler High"), sensors.provideSensor("Winding House Boiler Off")) self.boilerFire.setState(TriStateSensor.DIM) self.boilerFire.setPeriodicStateChange(0.0, 5.0, 1.0, 1) self.loadingDock = TriStateSensor( sensors.provideSensor("Mine Building Loading Dock Dim"), sensors.provideSensor("Mine Building Loading Dock On"), sensors.provideSensor("Mine Building Loading Dock Off")) self.sideDoor = sensors.provideSensor( "Mine Bldg Side Soor") # Mine Bldg Side Door self.lockerRoom = sensors.provideSensor( "Mine Bldg S2") # Mine Bldg Level 2 - Locker Room self.tipple = sensors.provideSensor("Mine Bldg S3") # Mine Bldg Tipple self.roofSign.setState(TriStateSensor.OFF) self.occupancySensors = [] self.occupancySensors.append(self.t1FHSensor) self.occupancySensors.append(self.t1DSensor) self.occupancySensors.append(self.t1WTSensor) self.occupancySensors.append(self.t1BSensor) self.hoistLevelIndicators = [] self.hoistLevelIndicators.append( sensors.provideSensor("Hoist L4 Indicator")) self.hoistLevelIndicators.append( sensors.provideSensor("Hoist L3 Indicator")) self.hoistLevelIndicators.append( sensors.provideSensor("Hoist L2 Indicator")) self.hoistLevelIndicators.append( sensors.provideSensor("Hoist L1 Indicator")) self.hoistLevelIndicators.append( sensors.provideSensor("Hoist S1 Indicator")) self.hoistLevelIndicators.append( sensors.provideSensor("Hoist S2 Indicator")) self.hoistLevelIndicators.append( sensors.provideSensor("Hoist S3 Indicator")) for i in range(len(self.hoistLevelIndicators)): sen = self.hoistLevelIndicators[i] sen.requestUpdateFromLayout() knownState = sen.getKnownState() print "Known state [" + str(i) + "] is " + str(knownState) rawState = sen.getRawState() print "Raw state [" + str(i) + "] is " + str(rawState) self.hoistCallButtons = [] self.hoistCallButtons.append( sensors.provideSensor("IS Call Hoist To L4")) self.hoistCallButtons.append( sensors.provideSensor("IS Call Hoist To L3")) self.hoistCallButtons.append( sensors.provideSensor("IS Call Hoist To L2")) self.hoistCallButtons.append( sensors.provideSensor("IS Call Hoist To L1")) self.hoistCallButtons.append( sensors.provideSensor("IS Call Hoist To S1")) self.hoistCallButtons.append( sensors.provideSensor("IS Call Hoist To S2")) self.hoistCallButtons.append( sensors.provideSensor("IS Call Hoist To S3")) self.hoistBottomSensor = sensors.provideSensor("Hoist L3 Indicator") self.scheduleTimes = [] self.scheduleTimes.append(memories.provideMemory("Arrives Depot")) self.bridgeLight = sensors.provideSensor("Winding House Bridge") self.sideDoorLight = sensors.provideSensor("Winding House Side Door") self.engineRoomLights = sensors.provideSensor( "Winding House Engine Room") self.engineRoomDim = sensors.provideSensor( "Winding House Engine Room Dim") self.secondFloorLight = sensors.provideSensor( "Winding House 2nd Floor Inside") # self.boilerIntensity = sensors.provideSensor("Winding House Boiler Intensity") # self.boilerFire = sensors.provideSensor("Winding House Boiler Fire") self.level1Light = sensors.provideSensor("Level 1 Light") self.level1LightDim = sensors.provideSensor("Level 1 Light Dim") self.engineRoomLightDimmer = sensors.provideSensor( "Winding House Engine Room Dim") self.currentHoistIdx = -1 self.mineTour = sensors.provideSensor("Mine Tour")
class WindingHouse(jmri.jmrit.automat.AbstractAutomaton): def init(self): self.debug = sensors.provideSensor("Private").getState() == ACTIVE self.trainPresentSensor = sensors.provideSensor("OS: Freight House") locoNumber = memories.provideMemory("L1 Loco Number").getValue() self.mineTrain = MineTrain() self.mineTrain.init(locoNumber, 1) self.tippleLights = sensors.provideSensor("Tipple Lights") self.bridgeLights = sensors.provideSensor("Lake Cavern Bridge") self.stoppingAtTipple = sensors.provideSensor("Stopping at Tipple") self.stoppingAtLake = sensors.provideSensor("Stopping at Lake") self.tippleSensor = sensors.provideSensor("OS:L1:Tipple") self.leftTunnelSensor = sensors.provideSensor("OS:L1:Left Tunnel") self.frontTunnelSensor = sensors.provideSensor("OS:L1:Front Tunnel") self.rightTunnelSensor = sensors.provideSensor("OS:L1:Right Tunnel") self.backTunnelSensor = sensors.provideSensor("OS:L1:Back Tunnel") self.backCavernSensor = sensors.provideSensor("OS:L1:Back Cavern") self.hoistCavernEntranceSensor = sensors.provideSensor( "OS:L1:Hoist Cavern Entrance") self.hoistCavernEOTSensor = sensors.provideSensor("OS:L1:Hoist EOT") self.hoistCavernSensor = sensors.provideSensor("OS:L1:Hoist Cavern") self.splash = [] self.splash.append( self.mineTrain.loadSoundFile( "preference:resources/sounds/singleSwimmer.wav")) self.splash.append( self.mineTrain.loadSoundFile( "preference:resources/sounds/Splash.wav")) self.splash.append( self.mineTrain.loadSoundFile( "preference:resources/sounds/Splash2.wav")) self.splash.append( self.mineTrain.loadSoundFile( "preference:resources/sounds/Splash3.wav")) self.splash.append( self.mineTrain.loadSoundFile( "preference:resources/sounds/Splash4.wav")) self.rightTunnelSignal = masts.getSignalMast("SM-L1-RT-E") self.hoistCavernEntranceSignal = masts.getSignalMast("SM-L1-HCE-E") self.backTunnelSignal = masts.getSignalMast("SM-L1-E-Back Tunnel") self.raiseHoistSound = jmri.jmrit.Sound( jmri.util.FileUtil.getExternalFilename( "preference:resources/sounds/Short-Short-Long-Signal.wav")) self.lowerHoistSound = jmri.jmrit.Sound( jmri.util.FileUtil.getExternalFilename( "preference:resources/sounds/Short-Long-Signal.wav")) self.t1FHSensor = sensors.provideSensor("OS: T1 Freight House") self.t1DSensor = sensors.provideSensor("OS: T1 Depot") self.t1WTSensor = sensors.provideSensor("OS: T1 Water Tower") self.t1BSensor = sensors.provideSensor("OS: T1 Bridge") self.roofSignOn = sensors.provideSensor( "Mine Building Roof Sign On") # Mine Bldg Roof Sign self.roofSignOff = sensors.provideSensor( "Mine Building Roof Sign Off") # Mine Bldg Roof Sign self.roofSignDim = sensors.provideSensor( "Mine Building Roof Sign Dim") # Mine Bldg Roof Sign self.roofSign = TriStateSensor(self.roofSignDim, self.roofSignOn, self.roofSignOff) self.boilerFire = TriStateSensor( sensors.provideSensor("Winding House Boiler Low"), sensors.provideSensor("Winding House Boiler High"), sensors.provideSensor("Winding House Boiler Off")) self.boilerFire.setState(TriStateSensor.DIM) self.boilerFire.setPeriodicStateChange(0.0, 5.0, 1.0, 1) self.loadingDock = TriStateSensor( sensors.provideSensor("Mine Building Loading Dock Dim"), sensors.provideSensor("Mine Building Loading Dock On"), sensors.provideSensor("Mine Building Loading Dock Off")) self.sideDoor = sensors.provideSensor( "Mine Bldg Side Soor") # Mine Bldg Side Door self.lockerRoom = sensors.provideSensor( "Mine Bldg S2") # Mine Bldg Level 2 - Locker Room self.tipple = sensors.provideSensor("Mine Bldg S3") # Mine Bldg Tipple self.roofSign.setState(TriStateSensor.OFF) self.occupancySensors = [] self.occupancySensors.append(self.t1FHSensor) self.occupancySensors.append(self.t1DSensor) self.occupancySensors.append(self.t1WTSensor) self.occupancySensors.append(self.t1BSensor) self.hoistLevelIndicators = [] self.hoistLevelIndicators.append( sensors.provideSensor("Hoist L4 Indicator")) self.hoistLevelIndicators.append( sensors.provideSensor("Hoist L3 Indicator")) self.hoistLevelIndicators.append( sensors.provideSensor("Hoist L2 Indicator")) self.hoistLevelIndicators.append( sensors.provideSensor("Hoist L1 Indicator")) self.hoistLevelIndicators.append( sensors.provideSensor("Hoist S1 Indicator")) self.hoistLevelIndicators.append( sensors.provideSensor("Hoist S2 Indicator")) self.hoistLevelIndicators.append( sensors.provideSensor("Hoist S3 Indicator")) for i in range(len(self.hoistLevelIndicators)): sen = self.hoistLevelIndicators[i] sen.requestUpdateFromLayout() knownState = sen.getKnownState() print "Known state [" + str(i) + "] is " + str(knownState) rawState = sen.getRawState() print "Raw state [" + str(i) + "] is " + str(rawState) self.hoistCallButtons = [] self.hoistCallButtons.append( sensors.provideSensor("IS Call Hoist To L4")) self.hoistCallButtons.append( sensors.provideSensor("IS Call Hoist To L3")) self.hoistCallButtons.append( sensors.provideSensor("IS Call Hoist To L2")) self.hoistCallButtons.append( sensors.provideSensor("IS Call Hoist To L1")) self.hoistCallButtons.append( sensors.provideSensor("IS Call Hoist To S1")) self.hoistCallButtons.append( sensors.provideSensor("IS Call Hoist To S2")) self.hoistCallButtons.append( sensors.provideSensor("IS Call Hoist To S3")) self.hoistBottomSensor = sensors.provideSensor("Hoist L3 Indicator") self.scheduleTimes = [] self.scheduleTimes.append(memories.provideMemory("Arrives Depot")) self.bridgeLight = sensors.provideSensor("Winding House Bridge") self.sideDoorLight = sensors.provideSensor("Winding House Side Door") self.engineRoomLights = sensors.provideSensor( "Winding House Engine Room") self.engineRoomDim = sensors.provideSensor( "Winding House Engine Room Dim") self.secondFloorLight = sensors.provideSensor( "Winding House 2nd Floor Inside") # self.boilerIntensity = sensors.provideSensor("Winding House Boiler Intensity") # self.boilerFire = sensors.provideSensor("Winding House Boiler Fire") self.level1Light = sensors.provideSensor("Level 1 Light") self.level1LightDim = sensors.provideSensor("Level 1 Light Dim") self.engineRoomLightDimmer = sensors.provideSensor( "Winding House Engine Room Dim") self.currentHoistIdx = -1 self.mineTour = sensors.provideSensor("Mine Tour") # self.boilerIntensity.setState(INACTIVE) # self.boilerFire.setState(ACTIVE) def findHoist(self): i = 0 while (self.currentHoistIdx < 0 and i < len(self.hoistLevelIndicators)): if (self.hoistLevelIndicators[i].getState() == ACTIVE): self.currentHoistIdx = i i = i + 1 def turnOn(self, sensor, dim, isDim, indicator): if (self.debug): print "Turning on " + sensor.getUserName( ) + " at " + datetime.fromtimestamp(time.time()).strftime("%I:%M") if (dim is not None): if (isDim): dim.setState(ACTIVE) else: dim.setState(INACTIVE) try: sensor.setState(ACTIVE) self.waitMsec(250) sensor.setState(ACTIVE) self.waitMsec(250) sensor.setState(ACTIVE) except: sensor.setState(jmri.jmrix.nce.NceLight.ON) self.waitMsec(250) sensor.setState(jmri.jmrix.nce.NceLight.ON) self.waitMsec(250) sensor.setState(jmri.jmrix.nce.NceLight.ON) if (self.debug): print "Turned on " + sensor.getUserName( ) + " at " + datetime.fromtimestamp(time.time()).strftime("%I:%M") def turnOffDimmable(self, onSensor, offSensor, dimSensor): if (self.debug): print "Turning off " + sensor.getUserName( ) + " at " + datetime.fromtimestamp(mktime( time.localtime())).strftime("%I:%M") try: onSensor.setState(INACTIVE) offSensor self.waitMsec(250) onSensor.setState(INACTIVE) self.waitMsec(250) onSensor.setState(INACTIVE) except: sensor.setState(jmri.jmrix.nce.NceLight.OFF) self.waitMsec(250) sensor.setState(jmri.jmrix.nce.NceLight.OFF) self.waitMsec(250) sensor.setState(jmri.jmrix.nce.NceLight.OFF) if (self.debug): print "Turned off " + sensor.getUserName( ) + " at " + datetime.fromtimestamp(mktime( time.localtime())).strftime("%I:%M") def turnOff(self, sensor, indicator): if (self.debug): print "Turning off " + sensor.getUserName( ) + " at " + datetime.fromtimestamp(mktime( time.localtime())).strftime("%I:%M") try: sensor.setState(INACTIVE) self.waitMsec(250) sensor.setState(INACTIVE) self.waitMsec(250) sensor.setState(INACTIVE) except: sensor.setState(jmri.jmrix.nce.NceLight.OFF) self.waitMsec(250) sensor.setState(jmri.jmrix.nce.NceLight.OFF) self.waitMsec(250) sensor.setState(jmri.jmrix.nce.NceLight.OFF) if (self.debug): print "Turned off " + sensor.getUserName( ) + " at " + datetime.fromtimestamp(mktime( time.localtime())).strftime("%I:%M") def dimLightAfter(self, departureTime, offset, sensor, dimmer, indicator): xtime = departureTime + timedelta(minutes=offset) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.turnOn, [sensor, dimmer, True, indicator]).start() def turnOffLightAfter(self, departureTime, offset, light, indicator): xtime = departureTime + timedelta(minutes=offset) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.turnOff, [light, indicator]).start() if (self.debug): print "Scheduled turning off " + light.getUserName() def turnOffLightBefore(self, departureTime, offset, light, indicator): xtime = departureTime - timedelta(minutes=offset) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.turnOff, [light, indicator]).start() def turnOnLightBefore(self, arrivalTime, offset, light, dimmer, isDim, indicator): xtime = arrivalTime - timedelta(minutes=offset) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.turnOn, [light, dimmer, isDim, indicator]).start() def turnOnLightAfter(self, arrivalTime, offset, light, dimmer, isDim, indicator): xtime = arrivalTime + timedelta(minutes=offset) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.turnOn, [light, dimmer, isDim, indicator]).start() def scheduleDeparture(self): memVal = memories.provideMemory("Departs Depot").getValue() if (memVal != None): departureTime = datetime.strptime(memVal, "%Y-%m-%d %H:%M:%S.%f") if (self.mineTour.getState() != ACTIVE): self.turnOffLightAfter(departureTime, 5, self.engineRoomDim, None) self.turnOffLightAfter(departureTime, 9, self.bridgeLight, None) self.turnOffLightAfter(departureTime, 11, self.sideDoorLight, None) self.turnOffLightAfter(departureTime, 8, self.engineRoomLights, None) self.turnOnLightAfter(departureTime, 8, self.secondFloorLight, None, False, None) def scheduleArrival(self): memVal = memories.provideMemory("Arrives Depot").getValue() if (memVal != None): arrivalTime = datetime.strptime(memVal, "%Y-%m-%d %H:%M:%S.%f") if (self.mineTour.getState() == ACTIVE): if (self.roofSign.getState() == TriStateSensor.ON): arrivalTime = datetime.fromtimestamp(time.time()) # Schedule a mine tour to begin 1 minute after train arrives ... there are delays in the mine tour function print "Scheduling mine tour" threading.Timer(10, self.mineTourB, [arrivalTime]).start() else: # Turn on winding house lights self.turnOnLightBefore(arrivalTime, 15, self.engineRoomLights, None, False, None) if (java.util.Random().nextInt(100) < 50): self.turnOnLightBefore(arrivalTime, 15, self.engineRoomDim, None, False, None) else: self.turnOffLightBefore(arrivalTime, 15, self.engineRoomDim, None) self.turnOnLightBefore(arrivalTime, 14, self.sideDoorLight, None, False, None) self.turnOnLightBefore(arrivalTime, 13, self.bridgeLight, None, False, None) def setHoistLevel(self, gotoIdx): if (self.mineTour.getState() == ACTIVE): i = 0 self.currentHoistIdx = -1 while (self.currentHoistIdx < 0 and i < len(self.hoistLevelIndicators)): if (self.hoistLevelIndicators[i].getState() == ACTIVE): self.currentHoistIdx = i i = i + 1 print "In setHoistLevel, currentHoistIdx = " + str( self.currentHoistIdx) if (self.currentHoistIdx > 0): if (gotoIdx > self.currentHoistIdx): # Going up self.raiseHoistSound.play() self.waitMsec(8000) elif (gotoIdx < self.currentHoistIdx): # Going down self.lowerHoistSound.play() self.waitMsec(8000) if (self.mineTour.getState() == ACTIVE): self.hoistCallButtons[gotoIdx].setState(ACTIVE) def moveHoist(self, arrivalTime, offset, gotoIdx): delta = timedelta(minutes=(abs(offset))) if (offset > 0): xtime = arrivalTime + delta else: xtime = arrivalTime - delta delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.setHoistLevel, [gotoIdx]).start() print "Hoist scheduled to goto level " + str( gotoIdx) + " after " + str(delay.total_seconds()) + " seconds" def waitBlockOccupied(self, sensor): self.ostate = sensor.getState() self.waitingFor.setValue(sensor.getUserName()) self.waitChange([sensor], 30000) if (self.ostate == sensor.getState()): print "Sensor timed out " + sensor.getUserName() self.waitingFor.setValue("") return def undergroundTour(self): # # Find train by running until it gets to tipple. self.stoppingAtTipple.setState(ACTIVE) self.mineTrain.startTrain(True) self.waitBlockOccupied(self.tippleSensor) if (self.rightTunnelSignal.getAspect() == "Stop"): self.waitMsec(2100) self.mineTrain.stopTrain() self.waitMsec(2000) self.mineTrain.startTrainSlow(False) # Stop at cavern entrance self.waitBlockOccupied(self.hoistCavernEntranceSensor) # # Wait for cage to reach L3 self.stoppingAtTipple.setState(INACTIVE) self.waitSensorActive(self.hoistBottomSensor) # # Wait for tourists to board train self.waitMsec(20000) # Go back to tipple self.stoppingAtTipple.setState(ACTIVE) self.mineTrain.startTrainSlow(True) self.waitBlockOccupied(self.tippleSensor) self.mineTrain.stopTrain() self.waitMsec(10000) # # Go to Lake Cavern self.stoppingAtTipple.setState(INACTIVE) self.stoppingAtLake.setState(ACTIVE) self.mineTrain.startTrainSlow(True) # Turn on bridge lights when we enter tunnel self.waitBlockOccupied(self.rightTunnelSensor) self.bridgeLights.setState(ACTIVE) self.waitBlockOccupied(self.backCavernSensor) if (self.backTunnelSignal.getAspect() == "Stop"): self.waitMsec(1200) self.mineTrain.stopTrain() for i in range(0, 5): splashProb = java.util.Random().nextInt(100) delay = java.util.Random().nextInt(3) if (splashProb > 20): self.splash[i].play() self.waitMsec(2000 * delay) self.mineTrain.startTrainSlow(True) self.waitMsec(3000) self.bridgeLights.setState(INACTIVE) # # wait for tourists to get off train self.waitBlockOccupied(self.hoistCavernEntranceSensor) self.mineTrain.stopTrain() self.waitMsec(20000) # # Move train away from turnout self.mineTrain.startTrainSlow() self.waitBlockOccupied(self.tippleSensor) self.mineTrain.stopTrain() # # Mine tour B takes visitors on a top-down tour of the mine. First going up to the tipple & winding house, # then down to the locker room before going down into the mine. def mineTourB(self, arrivalTime): if (self.roofSign.getState() == TriStateSensor.ON): self.findHoist() self.boilerFire.setState(TriStateSensor.ON) # self.boilerIntensity.setState(ACTIVE) self.roofSign.setState(TriStateSensor.ON) # Roof sign indicates a tour in progress. We don't start another tour (triggered by train arrival) if a tour is # already in progress. #self.mineBuilding.turnOnLightBefore(arrivalTime, 5, self.roofSign, None, False, None) # # Begin tour. Turn on side light and move cage to surface level. Don't keep the side door light on while # the tour is going. self.turnOnLightAfter(arrivalTime, 1, self.sideDoor, None, False, None) self.moveHoist(arrivalTime, 1, 4) # Move hoist to surface to pick up tourists self.turnOffLightAfter(arrivalTime, 4, self.sideDoor, None) # # Go up to tipple level self.turnOnLightAfter(arrivalTime, 5, self.tipple, None, False, None) #self.moveHoist(arrivalTime, 8, 6) # Move hoist to tipple - Go up to tipple to see ore dump self.turnOnLightAfter(arrivalTime, 10, self.bridgeLight, None, False, None) self.turnOffLightAfter(arrivalTime, 12, self.bridgeLight, None) self.turnOffLightAfter(arrivalTime, 12, self.tipple, None) # # Go down to locker level self.turnOnLightAfter(arrivalTime, 14, self.lockerRoom, None, False, None) self.moveHoist(arrivalTime, 15, 5) # Move hoist to locker self.turnOffLightAfter(arrivalTime, 23, self.lockerRoom, None) self.moveHoist(arrivalTime, 25, 1) # Move hoist to mine level 3 - Tour mine self.undergroundTour() #self.moveHoist(arrivalTime, 40, 0) # Move hoist to sump - Return down to thermal spring #self.moveHoist(arrivalTime, 50, 1) # Move hoist to mine level 3 - Back to main level - tram to Lake Cavern self.turnOnLighAfter(arrivalTime, 60, self.level1Light, self.level1LightDim, False, None) self.moveHoist(arrivalTime, 70, 3) # Move hoist to Level 1 - Shower level self.turnOnLightAfter(arrivalTime, 75, self.lockerRoom, None, False, None) self.turnOnLighAfter(arrivalTime, 76, self.level1Light, self.level1LightDim, True, None) self.moveHoist(arrivalTime, 80, 5) # Move hoist to locker self.turnOffLightAfter(arrivalTime, 100, self.lockerRoom, None) self.turnOnLightAfter(arrivalTime, 93, self.sideDoor, None, False, None) self.moveHoist(arrivalTime, 95, 4) # Move hoist to surface self.turnOffLightAfter(arrivalTime, 105, self.sideDoor, None) self.turnOffLightAfter(arrivalTime, 109, self.level1Light, None) self.roofSign.scheduleStateChange(TriStateSensor.OFF, 2) def handle(self): self.debug = sensors.provideSensor("Private").getState() == ACTIVE self.waitSensorChange(self.mineTour.getState(), self.mineTour) if (self.mineTour.getState() == ACTIVE): self.waitMsec(2000) self.scheduleArrival() self.scheduleDeparture() else: self.roofSign.setState(TriStateSensor.OFF) self.scheduleArrival() return True
class DevilsGulchFreightHouse(jmri.jmrit.automat.AbstractAutomaton): def init(self): # self.arrivesMemoryVariable = "Arrives Freight House" self.departsMemoryVariable = "Departs Freight House" self.freightHouse = Building() self.freightHouse.init(self.arrivesMemoryVariable, self.departsMemoryVariable) self.scheduleTimes = [] self.scheduleTimes.append( memories.provideMemory(self.arrivesMemoryVariable)) #self.stove = lights.provideLight("NL120"); #self.platformLights = lights.provideLight("NL121"); #self.officeLight = lights.provideLight("NL122"); #self.dockLight = lights.provideLight("NL123"); #self.platformIndicator = lights.provideLight("IL121"); #self.officeIndicator = lights.provideLight("IL122"); #self.dockIndicator = lights.provideLight("IL123"); #self.platformLightDimmer = lights.provideLight("NL124"); #self.officeLightDimmer = lights.provideLight("NL125"); #self.dockLightDimmer = lights.provideLight("NL126"); self.freightDock = TriStateSensor( sensors.provideSensor("Freight Dock Dim"), sensors.provideSensor("Freight Dock On"), sensors.provideSensor("Freight Dock Off")) self.freightOffice = TriStateSensor( sensors.provideSensor("Freight Office Dim"), sensors.provideSensor("Freight Office On"), sensors.provideSensor("Freight Office Off")) self.freightPlatform = TriStateSensor( sensors.provideSensor("Freight Platform Dim"), sensors.provideSensor("Freight Platform On"), sensors.provideSensor("Freight Platform Off")) self.freightStove = TriStateSensor( None, sensors.provideSensor("Freight Stove"), None) self.sideDoor = sensors.provideSensor( "Mine Bldg Side Soor") # Mine Bldg Side Door self.lockerRoom = sensors.provideSensor( "Mine Bldg S2") # Mine Bldg Level 2 - Locker Room self.tipple = sensors.provideSensor("Mine Bldg S3") # Mine Bldg Tipple def scheduleDeparture(self): memVal = memories.provideMemory(self.departsMemoryVariable).getValue() if (memVal != None): depStr = memVal[0:19] departureTime = datetime.strptime(memVal, "%Y-%m-%d %H:%M:%S.%f") self.freightOffice.scheduleStateChangeAfter( TriStateSensor.DIM, depStr, 3) self.freightDock.scheduleStateChangeAfter(TriStateSensor.DIM, depStr, 6) self.freightPlatform.scheduleStateChangeAfter( TriStateSensor.DIM, depStr, 4) self.freightDock.scheduleStateChangeAfter(TriStateSensor.OFF, depStr, 10) self.freightPlatform.scheduleStateChangeAfter( TriStateSensor.OFF, depStr, 11) self.freightOffice.scheduleStateChangeAfter( TriStateSensor.OFF, depStr, 12) self.freightStove.scheduleStateChangeAfter(TriStateSensor.OFF, depStr, 14) if (java.util.Random().nextInt(10) > 5): self.freightOffice.scheduleStateChangeAfter( TriStateSensor.DIM, depStr, 18) self.freightOffice.scheduleStateChangeAfter( TriStateSensor.OFF, depStr, 22) self.freightDock.scheduleStateChangeAfter( TriStateSensor.DIM, depStr, 19) self.freightDock.scheduleStateChangeAfter( TriStateSensor.OFF, depStr, 22) def scheduleArrival(self): memVal = memories.provideMemory("Arrives Depot").getValue() if (memVal != None): arrStr = memVal[0:19] arrivalTime = datetime.strptime(memVal, "%Y-%m-%d %H:%M:%S.%f") # Station master arrives & turns on office light self.freightOffice.scheduleStateChangeBefore( TriStateSensor.ON, arrStr, 10) self.freightStove.scheduleStateChangeBefore( TriStateSensor.ON, arrStr, 9) self.freightPlatform.scheduleStateChangeBefore( TriStateSensor.DIM, arrStr, 7) self.freightPlatform.scheduleStateChangeBefore( TriStateSensor.ON, arrStr, 3) self.freightDock.scheduleStateChangeBefore(TriStateSensor.DIM, arrStr, 6) self.freightDock.scheduleStateChangeBefore(TriStateSensor.ON, arrStr, 2) def handle(self): self.waitChange(self.scheduleTimes) self.scheduleArrival() self.scheduleDeparture() return True
def init(self): self.shuttingDown = False self.throttle = self.getThrottle( int(memories.provideMemory("L4 Locomotive").getValue()), False) self.activity = memories.provideMemory("S4 Action") self.BOT = sensors.provideSensor("OS:L4:BOT") self.EOT = sensors.provideSensor("OS:L4:Tipple-EOT") self.MineBldg = sensors.provideSensor("OS:L4:Mine Building") self.switch = sensors.provideSensor("S3 Auto") self.l3switch = sensors.provideSensor("L1 Auto") self.l2switch = sensors.provideSensor("L2 Auto") self.mineBldgLoadingDockLight = sensors.provideSensor( "Mine Bldg Loading Dock") self.mineBldgS2Light = sensors.provideSensor("Mine Bldg S2") self.mineBldgS3Light = sensors.provideSensor("Mine Bldg S3") self.windingHouseBridgeLight = sensors.provideSensor( "Winding House Bridge") self.gateLight = lights.provideLight("Tipple Gate Light") self.chuteLight = lights.provideLight("Tipple Chute Light") self.chuteLeft = sensors.provideSensor("Tipple Chute Left") self.chuteRight = sensors.provideSensor("Tipple Chute Right") self.redLantern = lights.provideLight("LL97") self.whiteLantern = lights.provideLight("LL96") self.leftBridgeLight = lights.provideLight("LL92") self.rightBridgeLight = lights.provideLight("LL93") self.tippleLights = lights.provideLight("LL94") self.roofSign = TriStateSensor( sensors.provideSensor("Mine Building Roof Sign Dim"), sensors.provideSensor("Mine Building Roof Sign On"), sensors.provideSensor("Mine Building Roof Sign Off")) self.roofSign.setState(TriStateSensor.DIM) self.whEngineRoom = TriStateSensor( sensors.provideSensor("Winding House Engine Room Dim"), sensors.provideSensor("Winding House Engine Room On"), sensors.provideSensor("Winding House Engine Room Off")) self.boilerFire = TriStateSensor( sensors.provideSensor("Winding House Boiler Low"), sensors.provideSensor("Winding House Boiler High"), sensors.provideSensor("Winding House Boiler Off")) self.level1Light = sensors.provideSensor("Level 1 Light") self.level1LightDim = sensors.provideSensor("Level 1 Light Dim") self.s1Button = sensors.provideSensor("IS Call Hoist To S1") self.s2Button = sensors.provideSensor("IS Call Hoist To S2") self.l3Button = sensors.provideSensor("IS Call Hoist To L3") self.s1Indicator = sensors.provideSensor("Hoist S1 Indicator") self.s2Indicator = sensors.provideSensor("Hoist S2 Indicator") self.l3Indicator = sensors.provideSensor("Hoist L3 Indicator") self.useHoist = sensors.provideSensor("Hoist Motor Enabled") self.loopCount = 0 self.buildingLightDemo = sensors.provideSensor("Building Light Demo") self.random = java.util.Random() self.firstTime = True self.trainMoving = False masts.getSignalMast("Auto Train Indicator Mast").setAspect("Steady") self.whEngineRoom.setPeriodicStateChange(.25, 3.0, 1.0, 0) self.boilerFire.setPeriodicStateChange(.25, 2.0, 5.0, 1) print "S3 Train Init Complete"
class TippleTrain(jmri.jmrit.automat.AbstractAutomaton): def init(self): self.shuttingDown = False self.throttle = self.getThrottle( int(memories.provideMemory("L4 Locomotive").getValue()), False) self.activity = memories.provideMemory("S4 Action") self.BOT = sensors.provideSensor("OS:L4:BOT") self.EOT = sensors.provideSensor("OS:L4:Tipple-EOT") self.MineBldg = sensors.provideSensor("OS:L4:Mine Building") self.switch = sensors.provideSensor("S3 Auto") self.l3switch = sensors.provideSensor("L1 Auto") self.l2switch = sensors.provideSensor("L2 Auto") self.mineBldgLoadingDockLight = sensors.provideSensor( "Mine Bldg Loading Dock") self.mineBldgS2Light = sensors.provideSensor("Mine Bldg S2") self.mineBldgS3Light = sensors.provideSensor("Mine Bldg S3") self.windingHouseBridgeLight = sensors.provideSensor( "Winding House Bridge") self.gateLight = lights.provideLight("Tipple Gate Light") self.chuteLight = lights.provideLight("Tipple Chute Light") self.chuteLeft = sensors.provideSensor("Tipple Chute Left") self.chuteRight = sensors.provideSensor("Tipple Chute Right") self.redLantern = lights.provideLight("LL97") self.whiteLantern = lights.provideLight("LL96") self.leftBridgeLight = lights.provideLight("LL92") self.rightBridgeLight = lights.provideLight("LL93") self.tippleLights = lights.provideLight("LL94") self.roofSign = TriStateSensor( sensors.provideSensor("Mine Building Roof Sign Dim"), sensors.provideSensor("Mine Building Roof Sign On"), sensors.provideSensor("Mine Building Roof Sign Off")) self.roofSign.setState(TriStateSensor.DIM) self.whEngineRoom = TriStateSensor( sensors.provideSensor("Winding House Engine Room Dim"), sensors.provideSensor("Winding House Engine Room On"), sensors.provideSensor("Winding House Engine Room Off")) self.boilerFire = TriStateSensor( sensors.provideSensor("Winding House Boiler Low"), sensors.provideSensor("Winding House Boiler High"), sensors.provideSensor("Winding House Boiler Off")) self.level1Light = sensors.provideSensor("Level 1 Light") self.level1LightDim = sensors.provideSensor("Level 1 Light Dim") self.s1Button = sensors.provideSensor("IS Call Hoist To S1") self.s2Button = sensors.provideSensor("IS Call Hoist To S2") self.l3Button = sensors.provideSensor("IS Call Hoist To L3") self.s1Indicator = sensors.provideSensor("Hoist S1 Indicator") self.s2Indicator = sensors.provideSensor("Hoist S2 Indicator") self.l3Indicator = sensors.provideSensor("Hoist L3 Indicator") self.useHoist = sensors.provideSensor("Hoist Motor Enabled") self.loopCount = 0 self.buildingLightDemo = sensors.provideSensor("Building Light Demo") self.random = java.util.Random() self.firstTime = True self.trainMoving = False masts.getSignalMast("Auto Train Indicator Mast").setAspect("Steady") self.whEngineRoom.setPeriodicStateChange(.25, 3.0, 1.0, 0) self.boilerFire.setPeriodicStateChange(.25, 2.0, 5.0, 1) print "S3 Train Init Complete" def releaseSteam(self): self.setActivityMsg("Blow out Boiler") self.throttle.setF4(True) self.waitMsec(java.util.Random().nextInt(1000) + 1200) self.throttle.setF4(False) self.setActivityMsg("") def forwardWhistle(self): self.throttle.setF2(True) self.waitMsec(1600) self.throttle.setF2(False) self.waitMsec(750) self.throttle.setF2(True) self.waitMsec(1600) self.throttle.setF2(False) def reverseWhistle(self): self.throttle.setF3(not self.throttle.getF3()) self.waitMsec(600) self.throttle.setF3(not self.throttle.getF3()) self.waitMsec(600) self.throttle.setF3(not self.throttle.getF3()) def moveTrainForward(self): if (not self.trainMoving): self.throttle.setF5(False) self.throttle.setF7(False) self.throttle.setF8(False) self.waitMsec(1000) self.forwardWhistle() self.waitMsec(500) self.throttle.setF1(True) self.waitMsec(1000) self.throttle.setIsForward(True) self.throttle.setSpeedSetting(0.04) self.waitMsec(2000) self.throttle.setSpeedSetting(0.1) self.trainMoving = True def moveTrainReverse(self): if (not self.trainMoving): self.throttle.setF5(False) self.throttle.setF7(False) self.throttle.setF8(False) self.waitMsec(1000) self.reverseWhistle() self.waitMsec(500) self.throttle.setF1(True) self.waitMsec(1000) self.throttle.setIsForward(False) self.throttle.setSpeedSetting(0.04) self.waitMsec(1500) self.throttle.setSpeedSetting(0.1) self.trainMoving = True def stopTrain(self): if (self.trainMoving): self.throttle.setF7(True) self.waitMsec(750) self.throttle.setSpeedSetting(0) self.waitMsec(1000) self.throttle.setF1(False) self.waitMsec(1200) self.throttle.setF3(not self.throttle.getF3()) self.waitMsec(1000) self.throttle.setF5(True) self.trainMoving = False def turnOutTippleLights(self): #if (self.redLantern.getState() == ON or self.whiteLantern.getState() == ON) : #self.waitSensorInactive(self.EOT) now = datetime.fromtimestamp(time.time()) self.turnOffLightAfter(now, 0, self.redLantern) self.turnOffLightAfter(now, 0, self.whiteLantern) self.turnOffLightAfter(now, .3, self.tippleLights) self.turnOffLightAfter(now, .5, self.leftBridgeLight) def turnOnTippleLights(self): now = datetime.fromtimestamp(time.time()) self.turnOnLightAfter(now, .1, self.rightBridgeLight) self.turnOnLightAfter(now, .25, self.whiteLantern) self.turnOffLightAfter(now, .4, self.rightBridgeLight) self.turnOnLightAfter(now, .5, self.tippleLights) self.turnOnLightAfter(now, .7, self.leftBridgeLight) def stopAtTipple(self): self.waitSensorActive(self.EOT) self.redLantern.setState(ACTIVE) self.waitMsec(1000) self.stopTrain() self.setActivityMsg("Dumping Ore") if self.random.nextInt(100) < 50: self.animateChutes() # # Wait 2-4 minutes inside tipple before returning to winding house self.waitMsec(self.getDelay(self.random.nextInt(120) + 60) * 1000) self.setActivityMsg("") self.moveTrainForward() def animateChutes(self): self.shuttingDown = self.switch.getState() == INACTIVE if (not self.shuttingDown): self.setActivityMsg("Operating Chutes") self.chuteLight.setState(ON) self.waitMsec(3000) self.gateLight.setState(ON) self.waitMsec(10000) activeChute = self.chuteRight if (self.random.nextInt(100) < 50): activeChute = self.chuteLeft activeChute.setState(ACTIVE) self.waitMsec(30000) activeChute.setState(INACTIVE) self.waitMsec(6000) self.gateLight.setState(OFF) self.waitMsec(3000) self.chuteLight.setState(OFF) self.setActivityMsg("") def runHoist(self): self.roofSign.setState(TriStateSensor.ON) self.whEngineRoom.setState(TriStateSensor.ON) self.waitMsec(1000) self.boilerFire.setState(TriStateSensor.ON) if (self.random.nextInt(100) < 20): self.setActivityMsg("Calling Hoist to L3") self.l3Button.setState(ACTIVE) self.level1Light.setState(ACTIVE) self.level1LightDim.setState(ACTIVE) self.waitSensorActive(self.l3Indicator) else: self.setActivityMsg("Calling Hoist to Surface") self.s1Button.setState(ACTIVE) self.mineBldgLoadingDockLight.setState(ACTIVE) self.waitSensorActive(self.s1Indicator) self.mineBldgLoadingDockLight.setState(INACTIVE) self.level1Light.setState(INACTIVE) self.waitMsec(10000) self.setActivityMsg("Sending Ore to S2") self.s2Button.setState(ACTIVE) self.mineBldgS2Light.setState(ACTIVE) self.waitSensorActive(self.s2Indicator) self.waitMsec(10000) self.mineBldgS2Light.setState(INACTIVE) self.setActivityMsg("") self.boilerFire.setState(TriStateSensor.DIM) self.roofSign.setState(TriStateSensor.ON) self.waitMsec(2000) self.whEngineRoom.setState(TriStateSensor.OFF) self.waitMsec(2000) # # Stop at the hoist to get a load of ore. # If we are returning to the tipple, don't turn the tipple lights off def stopAtHoist(self, returnToTipple): self.waitSensorActive(self.MineBldg) if (returnToTipple): self.waitMsec(2000) else: self.waitMsec(500) self.shuttingDown = self.switch.getState() == INACTIVE if (self.shuttingDown): masts.getSignalMast("Auto Train Indicator Mast").setAspect( "Flashing") self.stopTrain() if (not returnToTipple and self.random.nextInt(100) < 20 and not self.shuttingDown and self.useHoist.getState() == ACTIVE): self.runHoist() # Wait 1-3 minutes inside hoist building if (not returnToTipple): self.turnOnTippleLights() self.setActivityMsg("Loading Ore") self.waitMsec(self.getDelay(self.random.nextInt(120) + 60) * 1000) self.setActivityMsg("") self.moveTrainReverse() self.mineBldgS3Light.setState(INACTIVE) # # Let engineer take a coffee break at the winding house def coffeeBreak(self): self.shuttingDown = self.switch.getState() == INACTIVE if (self.shuttingDown): masts.getSignalMast("Auto Train Indicator Mast").setAspect( "Flashing") self.stopTrain() self.waitMsec(1000) self.throttle.setF0(False) self.waitMsec(1000) self.throttle.setF8(True) delaySecs = self.getDelay(5 * 60) delayMins = delaySecs / float(60.0) delayStr = "%0.1f" % delayMins delayStr = delayStr + " minute Coffee Break" self.setActivityMsg(delayStr) self.waitMsec(delaySecs * 1000) def getDelay(self, seconds): if self.switch.getState() == INACTIVE: duration = 0 else: duration = seconds + self.random.nextGaussian() * (seconds) if (self.buildingLightDemo.getState() != ACTIVE or self.loopCount < 5): duration = duration * .25 #if (self.debug) : #print "Returning delay = " + str(int(duration)) + " seconds (" + str(duration/60.0) + " minutes)" return int(duration) def handle(self): self.loopCount = self.loopCount + 1 print "Tipple Train Loop Count = " + str(self.loopCount) if (self.firstTime): self.setActivityMsg("Starting Shift") else: self.setActivityMsg("") if (self.BOT.getState() != ACTIVE): self.throttle.setF0(True) self.moveTrainForward() self.windingHouseBridgeLight.setState(ACTIVE) stopForWater = self.random.nextInt(100) < 15 returnToTipple = self.random.nextInt(100) < 65 if self.switch.getState() == INACTIVE: stopForWater = False returnToTipple = False if (not returnToTipple): self.turnOutTippleLights() # # Rarely stop when returning to winding house to take on water inside mime bldg. if (not self.firstTime): if (stopForWater): self.waitSensorActive(self.MineBldg) self.setActivityMsg("Filling Water") self.stopTrain() self.waitMsec(4000) self.throttle.setF6(True) self.waitMsec(self.getDelay(2 * 60) * 1000) self.setActivityMsg("") self.throttle.setF6(False) self.waitMsec(5000) self.moveTrainForward() elif (returnToTipple): self.stopAtHoist(True) self.stopAtTipple() self.shuttingDown = self.switch.getState() == INACTIVE if (self.shuttingDown): masts.getSignalMast("Auto Train Indicator Mast").setAspect( "Flashing") self.waitSensorActive(self.BOT) self.setActivityMsg("") # # Wait at BOT, except 1st time through if (not self.firstTime): self.coffeeBreak() if (self.random.nextInt(100) < 10): self.releaseSteam() self.setActivityMsg("") else: self.stopTrain() self.firstTime = False self.throttle.setF8(False) self.waitMsec(self.getDelay(2) * 1000) self.throttle.setF0(True) self.moveTrainReverse() self.mineBldgS3Light.setState(ACTIVE) self.windingHouseBridgeLight.setState(INACTIVE) # # Stop in Mine Building going toward Tipple self.stopAtHoist(False) # # Stop at tipple self.stopAtTipple() if (self.switch.getState() != ACTIVE): self.stopTrain() self.activity.setValue("") self.shuttingDown = self.switch.getState() == INACTIVE if (self.shuttingDown and self.l3switch.getState() == INACTIVE and self.l2switch.getState() == INACTIVE): self.whEngineRoom.cancelScheduledTasks() self.boilerFire.cancelScheduledTasks() masts.getSignalMast("Auto Train Indicator Mast").setAspect( "Not Lit") self.firstTime = True return (not self.shuttingDown) def setActivityMsg(self, msg): self.shuttingDown = self.switch.getState() == INACTIVE if self.shuttingDown: self.activity.setValue("Ending Shift") else: self.activity.setValue(msg) def turnOn(self, sensor): try: sensor.setState(ACTIVE) except: sensor.setState(ON) def turnOff(self, sensor): try: sensor.setState(INACTIVE) except: sensor.setState(OFF) def turnOffLightAfter(self, departureTime, offset, sensor): xtime = departureTime + timedelta(minutes=offset) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.turnOff, [sensor]).start() def turnOnLightAfter(self, arrivalTime, offset, sensor): xtime = arrivalTime + timedelta(minutes=offset) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.turnOn, [sensor]).start()
def init(self): self.debug = sensors.provideSensor("Private").getState() == ACTIVE self.trainPresentSensor = sensors.provideSensor("OS: Freight House") self.t1FHSensor = sensors.provideSensor("OS: T1 Freight House") self.t1DSensor = sensors.provideSensor("OS: T1 Depot") self.t1WTSensor = sensors.provideSensor("OS: T1 Water Tower") self.t1BSensor = sensors.provideSensor("OS: T1 Bridge") self.occupancySensors = [] self.occupancySensors.append(self.t1FHSensor) self.occupancySensors.append(self.t1DSensor) self.occupancySensors.append(self.t1WTSensor) self.occupancySensors.append(self.t1BSensor) self.mineTourSwitch = sensors.provideSensor("Mine Tour") self.scheduleTimes = [] self.scheduleTimes.append(memories.provideMemory("Arrives Depot")) self.stove = lights.provideLight("NL100") #self.platformLights = lights.provideLight("NL101"); #self.waitingRoomLights = lights.provideLight("NL102"); self.officeLight = lights.provideLight("NL103") self.signLights = lights.provideLight("NL104") self.indicatorLights = lights.provideLight("NL105") self.platformLights = TriStateSensor( sensors.provideSensor("Depot Platform Dim"), sensors.provideSensor("Depot Platform On"), sensors.provideSensor("Depot Platform Off")) self.waitingRoomLights = TriStateSensor( sensors.provideSensor("Depot Waiting Room Dim"), sensors.provideSensor("Depot Waiting Room On"), sensors.provideSensor("Depot Waiting Room Off")) #self.roofSign = sensors.provideSensor("Mine Bldg Roof") #self.roofDim = sensors.provideSensor("Mine Bldg Roof Dim") #self.roofIndicator = lights.provideLight("IL145") self.roofSignOn = sensors.provideSensor( "Mine Building Roof Sign On") # Mine Bldg Roof Sign self.roofSignOff = sensors.provideSensor( "Mine Building Roof Sign Off") # Mine Bldg Roof Sign self.roofSignDim = sensors.provideSensor( "Mine Building Roof Sign Dim") # Mine Bldg Roof Sign self.roofSign = TriStateSensor(self.roofSignDim, self.roofSignOn, self.roofSignOff) self.loadingDock = TriStateSensor( sensors.provideSensor("Mine Building Loading Dock Dim"), sensors.provideSensor("Mine Building Loading Dock On"), sensors.provideSensor("Mine Building Loading Dock Off")) # self.waitingRoomLightDimmer = lights.provideLight("NL107") # self.waitingRoomIndicator = lights.provideLight("IL102") # self.platformLightDimmer = lights.provideLight("NL106") # self.platformIndicator = lights.provideLight("IL101") self.waterTower = lights.provideLight("NL83") # Water Tower self.waterSpout = sensors.provideSensor("Water Spout") self.trainOrderEast = masts.getSignalMast("SM Depot East") self.trainOrderWest = masts.getSignalMast("SM Depot West") self.switchStand = lights.provideLight("LL130") self.trainOrderEast.setAspect("Stop") self.waitMsec(2000) self.trainOrderWest.setAspect("Stop") self.waitMsec(2000) self.trainOrderEast.setAspect("Approach") self.waitMsec(1500) self.trainOrderWest.setAspect("Approach") self.waitMsec(2000) self.trainOrderEast.setAspect("Clear") self.waitMsec(2000) self.trainOrderWest.setAspect("Clear") self.waterSpout.setState(INACTIVE) # # Play with locomotive self.locomotive = self.getThrottle(32, False) self.locomotive.setF0(True) #self.locomotive.setF4(True) # # Turn lights on idle locomotives self.locomotive41 = self.getThrottle(41, False) self.locomotive41.setF0(True) # Headlight & Firebox self.locomotive41.setF11(True) # Marker Lights self.locomotive6 = self.getThrottle(6, False) self.locomotive6.setF0(True) # Headlight & Firebox self.locomotive6.setF5(True) # Marker Lights self.locomotive6.setF11(True) # Cab Light self.locomotive6.setIsForward(True) # # Turn the lights in the Combine Car "Red Fox" #512 on self.combine512 = self.getThrottle(512, True) self.combine512.setF0(True) # Turn on marker lights self.eastBound = True
class Depot(jmri.jmrit.automat.AbstractAutomaton): def init(self): self.debug = sensors.provideSensor("Private").getState() == ACTIVE self.trainPresentSensor = sensors.provideSensor("OS: Freight House") self.t1FHSensor = sensors.provideSensor("OS: T1 Freight House") self.t1DSensor = sensors.provideSensor("OS: T1 Depot") self.t1WTSensor = sensors.provideSensor("OS: T1 Water Tower") self.t1BSensor = sensors.provideSensor("OS: T1 Bridge") self.occupancySensors = [] self.occupancySensors.append(self.t1FHSensor) self.occupancySensors.append(self.t1DSensor) self.occupancySensors.append(self.t1WTSensor) self.occupancySensors.append(self.t1BSensor) self.mineTourSwitch = sensors.provideSensor("Mine Tour") self.scheduleTimes = [] self.scheduleTimes.append(memories.provideMemory("Arrives Depot")) self.stove = lights.provideLight("NL100") #self.platformLights = lights.provideLight("NL101"); #self.waitingRoomLights = lights.provideLight("NL102"); self.officeLight = lights.provideLight("NL103") self.signLights = lights.provideLight("NL104") self.indicatorLights = lights.provideLight("NL105") self.platformLights = TriStateSensor( sensors.provideSensor("Depot Platform Dim"), sensors.provideSensor("Depot Platform On"), sensors.provideSensor("Depot Platform Off")) self.waitingRoomLights = TriStateSensor( sensors.provideSensor("Depot Waiting Room Dim"), sensors.provideSensor("Depot Waiting Room On"), sensors.provideSensor("Depot Waiting Room Off")) #self.roofSign = sensors.provideSensor("Mine Bldg Roof") #self.roofDim = sensors.provideSensor("Mine Bldg Roof Dim") #self.roofIndicator = lights.provideLight("IL145") self.roofSignOn = sensors.provideSensor( "Mine Building Roof Sign On") # Mine Bldg Roof Sign self.roofSignOff = sensors.provideSensor( "Mine Building Roof Sign Off") # Mine Bldg Roof Sign self.roofSignDim = sensors.provideSensor( "Mine Building Roof Sign Dim") # Mine Bldg Roof Sign self.roofSign = TriStateSensor(self.roofSignDim, self.roofSignOn, self.roofSignOff) self.loadingDock = TriStateSensor( sensors.provideSensor("Mine Building Loading Dock Dim"), sensors.provideSensor("Mine Building Loading Dock On"), sensors.provideSensor("Mine Building Loading Dock Off")) # self.waitingRoomLightDimmer = lights.provideLight("NL107") # self.waitingRoomIndicator = lights.provideLight("IL102") # self.platformLightDimmer = lights.provideLight("NL106") # self.platformIndicator = lights.provideLight("IL101") self.waterTower = lights.provideLight("NL83") # Water Tower self.waterSpout = sensors.provideSensor("Water Spout") self.trainOrderEast = masts.getSignalMast("SM Depot East") self.trainOrderWest = masts.getSignalMast("SM Depot West") self.switchStand = lights.provideLight("LL130") self.trainOrderEast.setAspect("Stop") self.waitMsec(2000) self.trainOrderWest.setAspect("Stop") self.waitMsec(2000) self.trainOrderEast.setAspect("Approach") self.waitMsec(1500) self.trainOrderWest.setAspect("Approach") self.waitMsec(2000) self.trainOrderEast.setAspect("Clear") self.waitMsec(2000) self.trainOrderWest.setAspect("Clear") self.waterSpout.setState(INACTIVE) # # Play with locomotive self.locomotive = self.getThrottle(32, False) self.locomotive.setF0(True) #self.locomotive.setF4(True) # # Turn lights on idle locomotives self.locomotive41 = self.getThrottle(41, False) self.locomotive41.setF0(True) # Headlight & Firebox self.locomotive41.setF11(True) # Marker Lights self.locomotive6 = self.getThrottle(6, False) self.locomotive6.setF0(True) # Headlight & Firebox self.locomotive6.setF5(True) # Marker Lights self.locomotive6.setF11(True) # Cab Light self.locomotive6.setIsForward(True) # # Turn the lights in the Combine Car "Red Fox" #512 on self.combine512 = self.getThrottle(512, True) self.combine512.setF0(True) # Turn on marker lights self.eastBound = True def scheduleSignalMast(self, arrivalTime, offset, myMast, myAspect): xtime = arrivalTime + timedelta(minutes=offset) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.setSignalMast, [myMast, myAspect]).start() def setSignalMast(self, myMast, myAspect): myMast.setAspect(myAspect) def scheduleTurntableLights(self, arrivalTime, offset, isOn): xtime = arrivalTime + timedelta(minutes=offset) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.sequenceTurntableLights, [isOn]).start() def sequenceTurntableLights(self, isOn): state = jmri.jmrix.nce.NceLight.OFF if (isOn): state = jmri.jmrix.nce.NceLight.ON nextLight = lights.provideLight("NL84") # Turntable 1 nextLight.setState(state) delayMsec = 2000 + java.util.Random().nextInt(2000) self.waitMsec(delayMsec) nextLight = lights.provideLight("NL82") # Turntable 2 nextLight.setState(state) delayMsec = 2000 + java.util.Random().nextInt(2000) self.waitMsec(delayMsec) nextLight = lights.provideLight("NL83") # Water Tower nextLight.setState(state) def turnOn(self, sensor, dim, isDim, indicator): if (self.debug): print "Turning on " + sensor.getUserName( ) + " at " + datetime.fromtimestamp(time.time()).strftime("%I:%M") if (dim is not None and indicator is not None): if (isDim): dim.setState(jmri.jmrix.nce.NceLight.ON) indicator.setTargetIntensity(0.5) else: dim.setState(jmri.jmrix.nce.NceLight.OFF) indicator.setTargetIntensity(1.0) indicator.setState(jmri.jmrix.nce.NceLight.ON) try: sensor.setState(ACTIVE) self.waitMsec(250) sensor.setState(ACTIVE) self.waitMsec(250) sensor.setState(ACTIVE) except: sensor.setState(jmri.jmrix.nce.NceLight.ON) self.waitMsec(250) sensor.setState(jmri.jmrix.nce.NceLight.ON) self.waitMsec(250) sensor.setState(jmri.jmrix.nce.NceLight.ON) def turnOff(self, sensor, indicator): if (self.debug): print "Turning off " + sensor.getUserName( ) + " at " + datetime.fromtimestamp(mktime( time.localtime())).strftime("%I:%M") if (indicator is not None): indicator.setTargetIntensity(0.0) indicator.setState(jmri.jmrix.nce.NceLight.OFF) try: sensor.setState(jmri.jmrix.nce.NceLight.OFF) self.waitMsec(250) sensor.setState(jmri.jmrix.nce.NceLight.OFF) self.waitMsec(250) sensor.setState(jmri.jmrix.nce.NceLight.OFF) except: sensor.setState(INACTIVE) self.waitMsec(250) sensor.setState(INACTIVE) self.waitMsec(250) sensor.setState(INACTIVE) # # level = 0 -> off # level = 50 -> dim # level = 126 -> bright def setCombineLights(self, level): self.combine512.setSpeedSetting(level) # Turn on interior lights self.combine512.setF0(level > 0) def scheduleCombineLights(self, baseTime, offset, level): if (self.debug): print "Scheduling combine lights" if (offset < 0): xtime = baseTime - timedelta(minutes=abs(offset)) else: xtime = baseTime + timedelta(minutes=abs(offset)) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.setCombineLights, [level]).start() if (self.debug): print "Combine lights scheduled for level " + str(level) def setLocomotiveFunction(self, function, state): if (self.debug): print " Setting locomotive function " + str( function) + " to state = " + str(state) if (function == 2): self.locomotive.setF2(True) self.waitMsec(2000) self.locomotive.setF2(False) elif (function == 1): # bell self.locomotive.setF1(state) elif (function == 3): # toot self.locomotive.setF3(not self.locomotive.getF3()) elif (function == 4): # Quill self.locomotive.setF4(not self.locomotive.getF4()) elif (function == 0): # Headlight self.locomotive.setF0(state) elif (function == 9): self.locomotive.setF9(state) elif (function == 10): self.locomotive.setF10(state) elif (function == 11): #Firebox self.locomotive.setF11(state) elif (function == 12): # Cab self.locomotive.setF12(state) elif (function == 16): # Blowdown self.locomotive.setF16(state) elif (function == 21): # Water Fill self.locomotive.setF21(state) if (self.debug): print " Done Setting locomotive function " + str( function) + " to state = " + str(state) def scheduleLocomotive(self, baseTime, offset, function, state): if (self.debug): print "Scheduling locomotive" if (offset < 0): xtime = baseTime - timedelta(minutes=abs(offset)) else: xtime = baseTime + timedelta(minutes=abs(offset)) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.setLocomotiveFunction, [function, state]).start() if (self.debug): print "Locomotive function scheduled " + str(function) def dimLightsAfter(self, departureTime, offset, light, dimmer, indicator): xtime = departureTime + timedelta(minutes=offset) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.turnOn, [light, dimmer, True, indicator]).start() def turnOffLightsAfter(self, departureTime, offset, light, indicator): xtime = departureTime + timedelta(minutes=offset) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.turnOff, [light, indicator]).start() def turnOffLightsBefore(self, departureTime, offset, light, indicator): xtime = departureTime - timedelta(minutes=offset) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.turnOff, [light, indicator]).start() def turnOnLightBefore(self, arrivalTime, offset, light, dimmer, isDim, indicator): xtime = arrivalTime - timedelta(minutes=offset) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.turnOn, [light, dimmer, isDim, indicator]).start() def turnOnLightAfter(self, arrivalTime, offset, light, dimmer, isDim, indicator): xtime = arrivalTime + timedelta(minutes=offset) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.turnOn, [light, dimmer, isDim, indicator]).start() def waterTowerAnimation(self, state): self.waterSpout.setState(state) #self.waitMsec(3000) #print "Activating locomotive fill-water sound" #self.locomotive.setF21(ACTIVE) # Water fill #self.waitMsec(10000) #self.locomotive.setF21(INACTIVE) # Water fill #print "Deactivating locomotive fill-water sound" #self.waterSpout.setState(INACTIVE) #print "Animating water tower complete" def animateWaterTower(self, arrivalTime, offset, state): if (self.debug): print " Scheduling water tower " xtime = arrivalTime + timedelta(minutes=offset) delay = xtime - datetime.fromtimestamp(time.time()) threading.Timer(delay.total_seconds(), self.waterTowerAnimation, [state]).start() def scheduleDeparture(self): memVal = memories.provideMemory("Departs Depot").getValue() if (memVal != None): depStr = memVal[0:19] departureTime = datetime.strptime(memVal, "%Y-%m-%d %H:%M:%S.%f") if (self.eastBound): self.scheduleSignalMast(departureTime, 2, self.trainOrderWest, "Clear") self.scheduleSignalMast(departureTime, 2.2, self.trainOrderEast, "Approach") self.scheduleSignalMast(departureTime, 5, self.trainOrderEast, "Clear") self.scheduleSignalMast(departureTime, 10, self.trainOrderWest, "Not Lit") self.scheduleSignalMast(departureTime, 10.2, self.trainOrderEast, "Not Lit") else: self.scheduleSignalMast(departureTime, 2, self.trainOrderEast, "Clear") self.scheduleSignalMast(departureTime, 2.2, self.trainOrderWest, "Approach") self.scheduleSignalMast(departureTime, 5, self.trainOrderWest, "Clear") self.scheduleSignalMast(departureTime, 10, self.trainOrderWest, "Not Lit") self.scheduleSignalMast(departureTime, 10.2, self.trainOrderEast, "Not Lit") self.eastBound = not self.eastBound self.scheduleLocomotive(departureTime, -0.3, 2, False) # Whistle self.scheduleLocomotive(departureTime, -0.2, 2, False) # Whistle self.scheduleLocomotive(departureTime, 0.0, 1, True) # Bell self.scheduleLocomotive(departureTime, 1.0, 1, False) # Bell self.scheduleLocomotive(departureTime, 1.2, 12, False) # Cab self.scheduleLocomotive(departureTime, 2.0, 10, False) # Class. Light self.scheduleLocomotive(departureTime, 2.2, 0, False) # HeadLight self.turnOffLightsAfter(departureTime, 3, self.signLights, None) self.platformLights.scheduleStateChangeAfter( TriStateSensor.DIM, depStr, 3) self.waitingRoomLights.scheduleStateChangeAfter( TriStateSensor.DIM, depStr, 5.5) # self.dimLightsAfter(departureTime, 3, self.platformLights, self.platformLightDimmer, self.platformIndicator) # self.dimLightsAfter(departureTime, 5.5, self.waitingRoomLights, self.waitingRoomLightDimmer, self.waitingRoomIndicator) if (self.mineTourSwitch.getState() != ACTIVE): self.scheduleTurntableLights(departureTime, 7.5, False) self.turnOffLightsAfter(departureTime, 7, self.indicatorLights, None) # self.turnOffLightsAfter(departureTime, 8, self.platformLights, self.platformIndicator) self.platformLights.scheduleStateChangeAfter( TriStateSensor.OFF, depStr, 8) self.turnOffLightsAfter(departureTime, 9, self.stove, None) # self.turnOffLightsAfter(departureTime, 10, self.waitingRoomLights, self.waitingRoomIndicator) self.waitingRoomLights.scheduleStateChangeAfter( TriStateSensor.OFF, depStr, 10) self.turnOffLightsAfter(departureTime, 11, self.officeLight, None) self.turnOffLightsAfter(departureTime, 12, self.switchStand, None) # self.turnOnLightAfter(departureTime, 6, self.roofSign, self.roofDim, True, self.roofIndicator) self.roofSign.scheduleStateChangeAfter(TriStateSensor.DIM, depStr, 6.0) self.loadingDock.scheduleStateChangeAfter(TriStateSensor.DIM, depStr, 6.6) # self.turnOnLightAfter(departureTime, 6.6, self.loadingDock, self.loadingDockDim, True, self.loadingDockIndicator) #self.turnOffLightsAfter(departureTime, 9.5, self.roofSign, self.roofIndicator) #self.turnOffLightsAfter(departureTime, 10.5, self.loadingDock, self.loadingDockIndicator) self.roofSign.scheduleStateChangeAfter(TriStateSensor.OFF, depStr, 9.5) self.loadingDock.scheduleStateChangeAfter(TriStateSensor.OFF, depStr, 10.5) self.turnOffLightsBefore(departureTime, 3, self.waterTower, None) def scheduleArrival(self): memVal = memories.provideMemory("Arrives Depot").getValue() if (memVal != None): arrStr = memVal[0:19] arrivalTime = datetime.strptime(memVal, "%Y-%m-%d %H:%M:%S.%f") self.scheduleCombineLights(arrivalTime, -5, 50) self.scheduleCombineLights(arrivalTime, -1, 127) self.scheduleCombineLights(arrivalTime, 10, 50) self.scheduleCombineLights(arrivalTime, 11, 0) self.scheduleLocomotive(arrivalTime, -4.4, 10, True) # Class. Light self.scheduleLocomotive(arrivalTime, -4.3, 0, True) # HeadLight self.scheduleLocomotive(arrivalTime, -4.2, 4, True) #Quill self.scheduleLocomotive(arrivalTime, -2.5, 2, False) # Whistle self.scheduleLocomotive(arrivalTime, -1, 1, True) # Bell on self.scheduleLocomotive(arrivalTime, 0, 1, False) # Bell off self.scheduleLocomotive(arrivalTime, 0.2, 3, False) # Brake set. self.scheduleLocomotive(arrivalTime, 0.3, 12, True) # Cab light if (self.mineTourSwitch.getState() != ACTIVE): self.scheduleTurntableLights(arrivalTime, -7, True) # Station master arrives & turns on office light #self.turnOnLightBefore(arrivalTime, 15.5, self.roofSign, self.roofDim, True, self.roofIndicator) #self.turnOnLightBefore(arrivalTime, 16, self.loadingDock, self.loadingDockDim, True, self.loadingDockIndicator) self.roofSign.scheduleStateChangeBefore(TriStateSensor.DIM, arrStr, 15.5) self.loadingDock.scheduleStateChangeBefore(TriStateSensor.DIM, arrStr, 16) self.turnOnLightBefore(arrivalTime, 15, self.officeLight, None, False, None) self.waitingRoomLights.scheduleStateChangeBefore( TriStateSensor.DIM, arrStr, 14) # self.turnOnLightBefore(arrivalTime, 14, self.waitingRoomLights, self.waitingRoomLightDimmer, True, self.waitingRoomIndicator) self.turnOnLightBefore(arrivalTime, 13, self.stove, None, False, None) if (self.eastBound): self.scheduleSignalMast(arrivalTime, -4, self.trainOrderEast, "Stop") self.scheduleSignalMast(arrivalTime, -4.1, self.trainOrderWest, "Approach") else: self.scheduleSignalMast(arrivalTime, -4, self.trainOrderWest, "Stop") self.scheduleSignalMast(arrivalTime, -4.1, self.trainOrderEast, "Approach") self.turnOnLightBefore(arrivalTime, 11, self.switchStand, None, False, None) # self.turnOnLightBefore(arrivalTime, 10, self.platformLights, self.platformLightDimmer, True, self.platformIndicator) self.platformLights.scheduleStateChangeBefore( TriStateSensor.DIM, arrStr, 10) if (self.debug): self.turnOnLightBefore(arrivalTime, 9, self.indicatorLights, None, False, None) # self.turnOnLightBefore(arrivalTime, 5, self.waitingRoomLights, self.waitingRoomLightDimmer, False, self.waitingRoomIndicator) self.waitingRoomLights.scheduleStateChangeBefore( TriStateSensor.ON, arrStr, 5) self.platformLights.scheduleStateChangeBefore( TriStateSensor.ON, arrStr, 4) #self.turnOnLightBefore(arrivalTime, 4, self.platformLights, self.platformLightDimmer, False, self.platformIndicator) self.turnOnLightBefore(arrivalTime, 3, self.signLights, None, False, None) #self.turnOnLightBefore(arrivalTime, 2, self.roofSign, self.roofDim, False, self.roofIndicator) #self.turnOnLightBefore(arrivalTime, 1.8, self.loadingDock, self.loadingDockDim, False, self.loadingDockIndicator) self.roofSign.scheduleStateChangeBefore(TriStateSensor.ON, arrStr, 2.0) self.loadingDock.scheduleStateChangeBefore(TriStateSensor.ON, arrStr, 1.8) self.turnOnLightAfter(arrivalTime, 1.5, self.waterTower, None, False, None) self.animateWaterTower(arrivalTime, 1.6, ACTIVE) self.scheduleLocomotive(arrivalTime, 1.7, 21, True) # Water fill on self.scheduleLocomotive(arrivalTime, 2.9, 21, False) # Water fill off self.animateWaterTower(arrivalTime, 2.3, INACTIVE) if (java.util.Random().nextInt(100) > 50): self.scheduleLocomotive(arrivalTime, 3.4, 16, True) # Blow Down on self.scheduleLocomotive(arrivalTime, 3.6, 16, False) # Blow Down off self.turnOffLightsAfter(arrivalTime, 4.2, self.waterTower, None) def handle(self): self.debug = sensors.provideSensor("Private").getState() == ACTIVE self.waitChange(self.scheduleTimes) self.waitMsec(2000) self.scheduleArrival() self.scheduleDeparture() return True