43 lines
1.5 KiB
Python
43 lines
1.5 KiB
Python
# set up listener(s) for a sensor to control the "Held" state of a signal
|
|
# sensor active sets signal to released, inactive sets to held
|
|
# only fires on sensor change
|
|
#
|
|
# we use this at MWOT to allow a push-button to release a train and
|
|
# start an AutoDispatcher2 run
|
|
# based on SignalHeadFromSensors.py
|
|
#
|
|
# Author: Steve Todd, copyright 2014
|
|
# Part of the JMRI distribution
|
|
|
|
import jmri
|
|
import java
|
|
import java.beans
|
|
|
|
from org.slf4j import LoggerFactory
|
|
|
|
# Define one sensor listener.
|
|
class HoldSignalForSensorListener(java.beans.PropertyChangeListener):
|
|
def setup(self, sensor, signal) :
|
|
if (sensor == None) : return
|
|
logger.debug("setting " + sensor + " to hold/release " + signal)
|
|
self.signal = signals.getSignalHead(signal)
|
|
sensors.provideSensor(sensor).addPropertyChangeListener(self)
|
|
return
|
|
def propertyChange(self, event):
|
|
if (event.newValue == ACTIVE) :
|
|
logger.debug("release " + self.signal.getSystemName())
|
|
self.signal.setHeld(False) #release when sensor goes high
|
|
else :
|
|
logger.debug("hold " + self.signal.getSystemName())
|
|
self.signal.setHeld(True) # hold when sensor goes low
|
|
return
|
|
|
|
####################################################################
|
|
logger = LoggerFactory.getLogger("jmri.jmrit.jython.exec.HoldSignalForSensor")
|
|
|
|
#set up each sensor to signalhead connection, repeat as needed.
|
|
# note: signalhead must already exist
|
|
HoldSignalForSensorListener().setup("LS1001","HIY152cw")
|
|
HoldSignalForSensorListener().setup("LS1002","HIY155cw")
|
|
|