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

52 lines
1.6 KiB
Python

# Receives and parses loconet messages from the SIGM20 signal logic board.
#
#
import jmri
import java
# Set the intended LocoNet connection by its name.
# It's usual "L".
connectionName = "L"
class SIGNM20receiver(jmri.jmrix.loconet.LocoNetListener):
def message(self, msg):
# check for a match in the first three bytes
if ( msg.getElement(0) != 0xE4 ) : return
if ( msg.getElement(1) != 0x09 ) : return
if ( msg.getElement(2) != 0x05 ) : return
# Extract the content
a2 = msg.getElement(2)
a3 = msg.getElement(3)
a4 = msg.getElement(4)
a5 = msg.getElement(5)
a6 = msg.getElement(6)
a7 = msg.getElement(7)
a8 = msg.getElement(8)
signalNumber = (a3 | (a2 << 7) ) + 1
print ("accepted message with ", a3, a4, a5, a8, signalNumber)
signalName = "IH"+str(signalNumber)
print ("signal name ", signalName)
signal = signals.getSignalHead(signalName)
# if the signal hasn't been defined, return
if (signal == None) : return
print ("signal user name ", signal.getUserName())
# set the appearance based on the speed in a6
if a6 > 0x10 : signal.setAppearance(GREEN)
else : signal.setAppearance(RED)
print ("appearance now ", signal.getAppearance())
# do something with that content
# create the LocoNet listener
lnListener = SIGNM20receiver()
# install the LocoNet listener
tc = jmri.jmrix.SystemConnectionMemoManager.getConnection(connectionName, jmri.jmrix.loconet.LocoNetSystemConnectionMemo).getLnTrafficController()
tc.addLocoNetListener(0xFF, lnListener)