Files
JIMRI/jython/AutoLayoutPowerOff.py
2026-06-17 14:00:51 +02:00

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()