70 lines
2.3 KiB
Python
70 lines
2.3 KiB
Python
# This script turns the off power to the layout after
|
|
# a specified time has passed with no activity. ('Activity'
|
|
# means a change in state of a sensor used as a block
|
|
# occupancy detector.) It's a sort of idle timeout for
|
|
# track power. It is intended to be run from the startup
|
|
# menu.
|
|
#
|
|
# The timeout is set at the top, in minutes.
|
|
#
|
|
# Author: Steve Rawlinson, 2016
|
|
# Part of the JMRI distribution
|
|
|
|
import time
|
|
import jmri
|
|
|
|
# Edit this:
|
|
timeOutInMinutes = 30
|
|
debug = False
|
|
|
|
|
|
class AutoLayoutPowerOff(jmri.jmrit.automat.AbstractAutomaton) :
|
|
|
|
|
|
def init(self) :
|
|
# set the timeout
|
|
self.timeout = timeOutInMinutes
|
|
# get the set of sensors in use as block occupancy detectors
|
|
self.blockset = blocks.getNamedBeanSet()
|
|
self.blockOccupancySensors = []
|
|
for b in self.blockset :
|
|
s = b.getSensor()
|
|
if s != None :
|
|
self.blockOccupancySensors.append(s)
|
|
|
|
|
|
def handle(self):
|
|
|
|
if debug :
|
|
print "AutoLayoutPowerOff: starting up"
|
|
|
|
# get the current power state
|
|
self.powerState = powermanager.getPower()
|
|
if debug :
|
|
if self.powerState != jmri.PowerManager.ON :
|
|
print "AutoLayoutPowerOff: Layout power is off, sleeping until it comes on"
|
|
|
|
# If the power is off, do nothing, checking every minute
|
|
while powermanager.getPower() != jmri.PowerManager.ON :
|
|
time.sleep(60)
|
|
|
|
if debug :
|
|
print "AutoLayoutPowerOff: Layout Power is on"
|
|
|
|
while True : # we break out after the timeout
|
|
if debug :
|
|
print "AutoLayoutPowerOff: monitoring activity on", len(self.blockOccupancySensors), "sensors"
|
|
startTime = time.time()
|
|
self.waitChange(self.blockOccupancySensors, self.timeout * 60 * 1000)
|
|
stopTime = time.time()
|
|
if stopTime - startTime > self.timeout * 60 :
|
|
print "AutoLayoutPowerOff: timeout waiting for activity, turning layout power OFF"
|
|
powermanager.setPower(jmri.PowerManager.OFF)
|
|
return True # start again
|
|
else :
|
|
if debug :
|
|
print "AutoLayoutPowerOff: activity detected at", stopTime
|
|
|
|
|
|
AutoLayoutPowerOff().start()
|