74 lines
2.5 KiB
Python
74 lines
2.5 KiB
Python
# Provides an example of listening to a Reporter, and
|
|
# printing information about a piece of rolling stock
|
|
# generated by the operations code.
|
|
#
|
|
# Based on ReporterFormater.py
|
|
#
|
|
# Author: Bob Jacobsen, copyright 2006
|
|
# Author: Paul Bender, copyright 2015
|
|
# Part of the JMRI distribution
|
|
#
|
|
# The Reporter names is hardcoded in the example near the bottom.
|
|
# Change those to something that makes sense for your layout
|
|
#
|
|
|
|
import jmri
|
|
import java
|
|
import java.beans
|
|
|
|
# First, define the listener class. This gets messages
|
|
# from the reporter, uses the reports to look up equipment
|
|
# in the RollingStockManager, and then prints the rolling
|
|
# stock's ID and destination.
|
|
#
|
|
class ReporterOperations(java.beans.PropertyChangeListener):
|
|
def propertyChange(self, event):
|
|
if (event.propertyName == "currentReport") :
|
|
# new report, format and store
|
|
self.report = event.newValue
|
|
if (event.newValue!=None):
|
|
self.value = self.format(self.report)
|
|
print self.value
|
|
return
|
|
|
|
def start(self, reporterName ) :
|
|
# connect the object to the reporter, and start to work
|
|
jmri.InstanceManager.getDefault(jmri.ReporterManager).provideReporter(reporterName).addPropertyChangeListener(self)
|
|
self.cm = jmri.InstanceManager.getDefault(jmri.jmrit.operations.rollingstock.cars.CarManager)
|
|
self.em = jmri.InstanceManager.getDefault(jmri.jmrit.operations.rollingstock.engines.EngineManager)
|
|
return
|
|
|
|
def stop(self) :
|
|
# Cease operation.
|
|
# You can call start() again if desired.
|
|
jmri.InstanceManager.getDefault(jmri.ReporterManager).getReporter(reporterName).removePropertyChangeListener(self)
|
|
return
|
|
|
|
def format(self, inputString) :
|
|
# First check if this is a car
|
|
rs = self.cm.getByRfid(inputString.toString())
|
|
if (rs == None) :
|
|
#not a car, see if it is an engine
|
|
rs = self.em.getByRfid(inputString.toString())
|
|
|
|
#check to see if this IdTag is associated with any rolling stock.
|
|
if (rs == None) :
|
|
result = "Unknown Rolling Stock for IdTag " + inputString.toString()
|
|
else :
|
|
dest = rs.getDestination()
|
|
if (dest==None):
|
|
dest = "No Destination"
|
|
result = rs.toString() + " " + dest.toString()
|
|
return (result)
|
|
|
|
# End of the definition of the ReporterOperations class
|
|
|
|
#########################################################
|
|
|
|
# Below here is an example of the use of this class.
|
|
# Modify if to use names appropriate for your layout.
|
|
m = ReporterOperations()
|
|
m.start("FR1")
|
|
# To stop this, you can later say
|
|
# m.stop()
|