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

57 lines
1.9 KiB
Python

# Trigger the LocoNet Find Transponder interaction
#
# The DCC address being found is hard-coded into this sample script
#
# After sending the LocoNet Find message, the script also
# commands a few DCC packets to be sent. This is in case
# the command station is not currently addressing the
# decoder, e.g. if it's not currently on a throttle. Transponding
# decoders only reply when they receive a DCC packet addressed
# to them.
#
# Created by Bob Jacobsen 2014
#
# A find request to (long)433 should send E5 09 40 03 31 00 00 00 61
# and the hardware should return E5 09 00 03 31 00 20 00 01
#
# For (short)10: E5 09 40 7D 0A 00 00 00 24
# and reply: E5 09 40 7D 0A 00 20 00 44
import jmri
import java
import javax.swing
# set the intended LocoNet connection by its index; when you have just 1 connection index = 0
connectionIndex = 0
class LnFindTransponder(jmri.jmrit.automat.AbstractAutomaton) :
# handle() will only execute once here, to run a single test
def handle(self):
self.long = True
self.address = 433
m = jmri.jmrix.loconet.LocoNetMessage(9)
m.setOpCode( 0xE5)
m.setElement(1,0x09)
m.setElement(2,0x40)
if (self.long) :
m.setElement(3,self.address/128)
m.setElement(4,self.address&0x7F)
else :
m.setElement(3,0x7D)
m.setElement(4,self.address)
m.setElement(5,0x00)
m.setElement(6,0x00)
m.setElement(7,0x00)
jmri.InstanceManager.getList(jmri.jmrix.loconet.LocoNetSystemConnectionMemo).get(connectionIndex).getLnTrafficController().sendLocoNetMessage(m)
# now force sending of null packets to same address
c = jmri.InstanceManager.getDefault(jmri.CommandStation)
c.sendPacket(jmri.NmraPacket.oneBytePacket(self.address, self.long, 0x08),4) # reserved instruction
return 0
LnFindTransponder().start()