175 lines
8.5 KiB
Python
175 lines
8.5 KiB
Python
#
|
|
# This script will populate the tables with many default entries for a Signal LCC node.
|
|
# It will populate:
|
|
# 'inactive' sensors matching the logic cell default values
|
|
# sensors for masts and rules
|
|
# turnouts for direct lamp testing
|
|
# and more
|
|
# it will create the sensors if they don't exist
|
|
# once created or found AND the user name is blank, it adds the username
|
|
#
|
|
# Ken Cameron, October 2022
|
|
#
|
|
# Usage:
|
|
# run the script via the Scripting->Run Script...
|
|
# open Scripting->Script Entry
|
|
# enter createSignalLCCNodeDefaults('your_node_address','your_node_name_prefix')
|
|
# or you can call the individual parts if you only want one or more parts created
|
|
|
|
import jmri
|
|
|
|
def createSignalLCCNodeDefaults( nodeAddr, nodeNamePrefix ) :
|
|
print "processing node: " + nodeAddr + " " + nodeNamePrefix
|
|
createSignalLCCPortDefaults( nodeAddr, nodeNamePrefix )
|
|
createSignalLCCLogicDefaults( nodeAddr, nodeNamePrefix )
|
|
createSignalLCCMastDefaults( nodeAddr, nodeNamePrefix )
|
|
createSignalLCCTrackDefaults( nodeAddr, nodeNamePrefix )
|
|
createSignalLCCLampDefaults( nodeAddr, nodeNamePrefix )
|
|
createSignalLCCPowerDefaults( nodeAddr, nodeNamePrefix )
|
|
print "finished node: " + nodeAddr + " " + nodeNamePrefix
|
|
|
|
def createSignalLCCPortDefaults( nodeAddr, nodeNamePrefix ) :
|
|
print "Creating default port values: " + nodeAddr + " " + nodeNamePrefix
|
|
nParts = nodeAddr.split( '.')
|
|
nBase = str(nParts[0]) + "." + str(nParts[1]) + "." + str(nParts[2]) + "." + str(nParts[3]) + "." + str(nParts[4]) + "." + str(nParts[5])
|
|
baseAddr = 0x00
|
|
idx = 0
|
|
while idx < 8 :
|
|
addr = baseAddr + (12 * idx)
|
|
idx = idx + 1
|
|
# create command defaults
|
|
ii = 0
|
|
while ii < 6 :
|
|
addr2 = addr + ii
|
|
ii = ii + 1
|
|
active = "{0}.{1:02X}.{2:02X}".format(nBase, addr2 >> 8, addr2 & 0xFF)
|
|
s = sensors.provideSensor("MS" + active)
|
|
if (s.getUserName() == None) :
|
|
s.setUserName(nodeNamePrefix + " Port " + str(idx) + " Cmd " + str(ii) + " Default")
|
|
s.setAuthoritative(False)
|
|
# create indicator defaults
|
|
ii = 0
|
|
while ii < 6 :
|
|
addr2 = addr + 6 + ii
|
|
ii = ii + 1
|
|
active = "{0}.{1:02X}.{2:02X}".format(nBase, addr2 >> 8, addr2 & 0xFF)
|
|
s = sensors.provideSensor("MS" + active)
|
|
if (s.getUserName() == None) :
|
|
s.setUserName(nodeNamePrefix + " Port " + str(idx) + " Ind " + str(ii) + " Default")
|
|
s.setAuthoritative(False)
|
|
print "Finished default port values: " + nodeAddr + " " + nodeNamePrefix
|
|
|
|
def createSignalLCCLogicDefaults( nodeAddr, nodeNamePrefix ) :
|
|
print "Creating default logix cell values: " + nodeAddr + " " + nodeNamePrefix
|
|
nParts = nodeAddr.split( '.')
|
|
nBase = str(nParts[0]) + "." + str(nParts[1]) + "." + str(nParts[2]) + "." + str(nParts[3]) + "." + str(nParts[4]) + "." + str(nParts[5])
|
|
baseAddr = 0xA0
|
|
idx = 0
|
|
while idx < 32 :
|
|
addr = baseAddr + (8 * idx)
|
|
idx = idx + 1
|
|
# create V1 defaults
|
|
active = "{0}.{1:02X}.{2:02X}".format(nBase, addr >> 8, (addr + 0) & 0xFF)
|
|
inactive = "{0}.{1:02X}.{2:02X}".format(nBase, addr >> 8, (addr + 1) & 0xFF)
|
|
s = sensors.provideSensor("MS" + active + ";" + inactive)
|
|
if (s.getUserName() == None) :
|
|
s.setUserName(nodeNamePrefix + " Logic " + str(idx) + " V1 Default")
|
|
s.setKnownState(INACTIVE)
|
|
s.setAuthoritative(False)
|
|
# create V2 defaults
|
|
active = "{0}.{1:02X}.{2:02X}".format(nBase, addr >> 8, (addr + 2) & 0xFF)
|
|
inactive = "{0}.{1:02X}.{2:02X}".format(nBase, addr >> 8, (addr + 3) & 0xFF)
|
|
s = sensors.provideSensor("MS" + active + ";" + inactive)
|
|
if (s.getUserName() == None) :
|
|
s.setUserName(nodeNamePrefix + " Logic " + str(idx) + " V2 Default")
|
|
s.setKnownState(INACTIVE)
|
|
s.setAuthoritative(False)
|
|
# create action defaults
|
|
ii = 0
|
|
while ii < 4 :
|
|
ii = ii + 1
|
|
active = "{0}.{1:02X}.{2:02X}".format(nBase, addr >> 8, (addr + 3 + ii) & 0xFF)
|
|
s = sensors.provideSensor("MS" + active)
|
|
if (s.getUserName() == None) :
|
|
s.setUserName(nodeNamePrefix + " Logic " + str(idx) + " Action " + str(ii) + " Default")
|
|
s.setKnownState(INACTIVE)
|
|
s.setAuthoritative(False)
|
|
print "Finished default logix cell values: " + nodeAddr + " " + nodeNamePrefix
|
|
|
|
def createSignalLCCMastDefaults( nodeAddr, nodeNamePrefix ) :
|
|
print "Creating default mast values: " + nodeAddr + " " + nodeNamePrefix
|
|
nParts = nodeAddr.split( '.')
|
|
nBase = str(nParts[0]) + "." + str(nParts[1]) + "." + str(nParts[2]) + "." + str(nParts[3]) + "." + str(nParts[4]) + "." + str(nParts[5])
|
|
baseAddr = 0x01A0
|
|
idxMast = 0
|
|
while idxMast < 8 :
|
|
idxRule = 0
|
|
while idxRule < 8 :
|
|
addr = baseAddr + (32 * idxMast) + ( 3 * idxRule) + 8 # skip TC, other script handles that.
|
|
setter = "{0}.{1:02X}.{2:02X}".format(nBase, addr >> 8, (addr + 0) & 0xFF)
|
|
active = "{0}.{1:02X}.{2:02X}".format(nBase, addr >> 8, (addr + 1) & 0xFF)
|
|
inactive = "{0}.{1:02X}.{2:02X}".format(nBase, addr >> 8, (addr + 2) & 0xFF)
|
|
s = sensors.provideSensor("MS" + setter)
|
|
if (s.getUserName() == None) :
|
|
s.setUserName(nodeNamePrefix + " Mast " + str(idxMast + 1) + " Rule " + str(idxRule + 1) + " Setter Default")
|
|
# s.setKnownState(INACTIVE)
|
|
s.setAuthoritative(False)
|
|
s = sensors.provideSensor("MS" + active + ";" + inactive)
|
|
if (s.getUserName() == None) :
|
|
s.setUserName(nodeNamePrefix + " Mast " + str(idxMast + 1) + " Rule " + str(idxRule + 1) + " Default")
|
|
s.setAuthoritative(False)
|
|
idxRule = idxRule + 1
|
|
idxMast = idxMast + 1
|
|
print "Finished default mast values: " + nodeAddr + " " + nodeNamePrefix
|
|
|
|
def createSignalLCCTrackDefaults( nodeAddr, nodeNamePrefix ) :
|
|
print "Creating default Track values: " + nodeAddr + " " + nodeNamePrefix
|
|
nParts = nodeAddr.split( '.')
|
|
nBase = str(nParts[0]) + "." + str(nParts[1]) + "." + str(nParts[2]) + "." + str(nParts[3]) + "." + str(nParts[4]) + "." + str(nParts[5])
|
|
baseAddr = 0x0060
|
|
idxTrack = 0
|
|
# Track Circuits
|
|
while idxTrack < 8 :
|
|
addr = baseAddr + (8 * idxTrack)
|
|
setter = "{0}.{1:02X}.{2:02X}".format(nBase, addr >> 8, (addr + 0) & 0xFF)
|
|
s = sensors.provideSensor("MS" + setter)
|
|
if (s.getUserName() == None) :
|
|
s.setUserName(nodeNamePrefix + " TC " + str(idxTrack + 1) + " Default")
|
|
s.setAuthoritative(False)
|
|
idxTrack = idxTrack + 1
|
|
print "Finished default Track values: " + nodeAddr + " " + nodeNamePrefix
|
|
|
|
def createSignalLCCLampDefaults( nodeAddr, nodeNamePrefix ) :
|
|
print "Creating default Lamp values: " + nodeAddr + " " + nodeNamePrefix
|
|
nParts = nodeAddr.split( '.')
|
|
nBase = str(nParts[0]) + "." + str(nParts[1]) + "." + str(nParts[2]) + "." + str(nParts[3]) + "." + str(nParts[4]) + "." + str(nParts[5])
|
|
baseAddr = 0x02A2
|
|
idxLamp = 0
|
|
while idxLamp < 16 :
|
|
addr = baseAddr + (2 * idxLamp)
|
|
active = "{0}.{1:02X}.{2:02X}".format(nBase, addr >> 8, (addr + 0) & 0xFF)
|
|
inactive = "{0}.{1:02X}.{2:02X}".format(nBase, addr >> 8, (addr + 1) & 0xFF)
|
|
s = turnouts.provideTurnout("MT" + active + ";" + inactive)
|
|
if (s.getUserName() == None) :
|
|
s.setUserName(nodeNamePrefix + " Direct Lamp " + str(idxLamp + 1) + " Default")
|
|
s.setAuthoritative(False)
|
|
idxLamp = idxLamp + 1
|
|
print "Finished default lamp values: " + nodeAddr + " " + nodeNamePrefix
|
|
|
|
def createSignalLCCPowerDefaults( nodeAddr, nodeNamePrefix ) :
|
|
print "Creating default Power values: " + nodeAddr + " " + nodeNamePrefix
|
|
nParts = nodeAddr.split( '.')
|
|
nBase = str(nParts[0]) + "." + str(nParts[1]) + "." + str(nParts[2]) + "." + str(nParts[3]) + "." + str(nParts[4]) + "." + str(nParts[5])
|
|
baseAddr = 0x02A0
|
|
setter = "{0}.{1:02X}.{2:02X}".format(nBase, baseAddr >> 8, (baseAddr + 0) & 0xFF)
|
|
s = sensors.provideSensor("MS" + setter)
|
|
if (s.getUserName() == None) :
|
|
s.setUserName(nodeNamePrefix + " Power OK Default")
|
|
s.setAuthoritative(False)
|
|
setter = "{0}.{1:02X}.{2:02X}".format(nBase, baseAddr >> 8, (baseAddr + 1) & 0xFF)
|
|
s = sensors.provideSensor("MS" + setter)
|
|
if (s.getUserName() == None) :
|
|
s.setUserName(nodeNamePrefix + " Power Not OK Default")
|
|
s.setAuthoritative(False)
|
|
print "Finished default Power values: " + nodeAddr + " " + nodeNamePrefix
|