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

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