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

99 lines
3.9 KiB
Python

# This script scans all LocoNet slots and creates report about the slot status, slots used for the consists
# including the details about the consist. It also flags all non-zero speed slots.
# The CSV report with all above information is created in the TEMP directory as well.
# Author: steambigboy, copyright 2022
# Part of the JMRI distribution
import jmri
import java
import java.util
import array
import csv
# change numSlots=number of slots accordingly DCS50=11; DCS51=21, DB150=23, DCS100=121
numSlots = 121
class SampleLnStats(jmri.jmrit.automat.AbstractAutomaton) :
arr = []
def init(self):
myLocoNetConnection = jmri.InstanceManager.getList(jmri.jmrix.loconet.LocoNetSystemConnectionMemo).get(0);
self.slotManager = myLocoNetConnection.getSlotManager()
nowSlotsUsed = self.slotManager.getInUseCount()
MySystemPrefix = self.slotManager.getSystemPrefix()
MyUserName = self.slotManager.getUserName()
CS = self.slotManager.getCommandStationType()
print "Command Station:", CS, "User Name:", MyUserName, "Prefix:", MySystemPrefix
print "Number of slots in use: ", nowSlotsUsed
for x in range(1, numSlots):
slrec = []
self.LocoNetSlot = self.slotManager.slot(x)
LnSlot = self.LocoNetSlot.locoAddr()
SlotN = self.slotManager.slot(x)
LnSpeed = self.LocoNetSlot.speed()
slrec.append(x)
slrec.append(LnSlot)
slrec.append(LnSpeed)
self.arr.append(slrec)
if(LnSpeed == 0):
LnSflag = "OK"
else:
LnSflag = "Warning non zero speed"
LnslotStatus = self.LocoNetSlot.slotStatus()
if(LnslotStatus == 0):
LnSStatus = "Free"
elif(LnslotStatus == 16):
LnSStatus = "Common"
elif(LnslotStatus == 32):
LnSStatus = "Idle"
else:
LnSStatus = "In Use"
LnConsistStatus = self.LocoNetSlot.consistStatus()
if(LnConsistStatus == 8):
LnCStat = "TOP"
LnCS = "check TOP Address of consist"
elif(LnConsistStatus == 64):
LnCStat = "Subconsist"
LnCStatus = "check subconsist of slot #"
LnCS = LnCStatus + str(LnSpeed)
elif(LnConsistStatus == 72):
LnCStat = "Midconsist"
LnCStatus = "check subconsist of slot #"
LnCS = LnCStatus + str(LnSpeed)
else:
LnCStat = "0"
LnCS = ""
LnSpeedStep = self.LocoNetSlot.decoderType()
if(LnSpeedStep == 0):
LnSStep = "28_SS"
elif(LnSpeedStep == 1):
LnSStep = "28_Trinary"
elif(LnSpeedStep == 2):
LnSStep = "14_SS"
elif(LnSpeedStep == 3):
LnSStep = "128_SS"
elif(LnSpeedStep == 4):
LnSStep = "28_SS_ADV"
elif(LnSpeedStep == 7):
LnSStep = "128_SS_ADV"
slrec.append(LnSStatus)
slrec.append(LnCStat)
slrec.append(LnSStep)
slrec.append(LnSflag)
slrec.append(LnCS)
print "Address in slot #", x, "is:", LnSlot, "at speed:", LnSpeed, "with slot status:", LnSStatus, "consist status:", LnCStat, "speed step mode", LnSStep, LnSflag, LnCS
fields = ['slot', 'address', 'speed', 'status', 'consist', 'speed_steps', 'non zero warning', 'consist details']
rows = self.arr
# please write your own file location
filename = "C:\Temp\LocoNet_slot_status.csv"
with open(filename, 'wb') as csvfile:
# creating a csv writer object
csvwriter = csv.writer(csvfile)
# writing the fields
csvwriter.writerow(fields)
# writing the data rows
csvwriter.writerows(rows)
return
a = SampleLnStats()
a.start()