genmon/data/controller/Evolution_Liquid_Cooled.json
2026-03-08 20:37:49 -04:00

1520 lines
49 KiB
JSON

{
"controller_name": "Evolution Liquid Cooled (Custom Controller)",
"rated_max_output_power_kw": "48",
"rated_nominal_voltage": 240,
"rated_nominal_rpm" : 1800,
"rated_nominal_freq" : 60,
"nominal_battery_voltage" : 12,
"generator_phase": 1,
"holding_registers": {
"0001": {"length": 2, "text": "Status"},
"0002": {"length": 2, "text": "Alarm"},
"0007": {"length": 2, "text": "RPM"},
"0008": {"length": 2, "text": "Frequency"},
"0009": {"length": 2, "text": "Utility Voltage"},
"000a": {"length": 2, "text": "Battery Voltage"},
"000b": {"length": 4, "text": "Run Hours"},
"000e": {"length": 2, "text": "Generator Time"},
"000f": {"length": 2, "text": "Generator Date"},
"0010": {"length": 2, "text": "Generator Day / Year"},
"0011": {"length": 2, "text": "Threshold Voltage"},
"0012": {"length": 2, "text": "Output Voltage"},
"001a": {"length": 2, "text": "Hours Until Service A Due"},
"001b": {"length": 2, "text": "Service A Due Date"},
"001e": {"length": 2, "text": "Hours Until Service B Due"},
"001f": {"length": 2, "text": "Service B Due Date"},
"0022": {"length": 2, "text": "Inspect Battery Date"},
"002a": {"length": 2, "text": "Firmware / Hardware Version"},
"002c": {"length": 2, "text": "Exercise Time"},
"002d": {"length": 2, "text": "Exercise Interval"},
"002e": {"length": 2, "text": "Exercise Date"},
"002f": {"length": 2, "text": "Low Speed Exercise Enable"},
"0052": {"length": 2, "text": "Digital Inputs"},
"0053": {"length": 2, "text": "Digital Outputs"},
"005d": {"length": 2, "text": "Tank Fuel Level"},
"0054": {"length": 2, "text": "Hours of Protection"},
"0058": {"length": 2, "text": "Hall Effect Sensor"},
"005e": {"length": 4, "text": "Total Run Hours"},
"0208": {"length": 2, "text": "Generator Calibrate Volts"},
"0209": {"length": 2, "text": "Utility Calibrate Volts"},
"020a": {"length": 2, "text": "Param Code"},
"020b": {"length": 2, "text": "Voltage Code"},
"020c": {"length": 2, "text": "Fuel Type"},
"020e": {"length": 2, "text": "Volts per Hertz"},
"0235": {"length": 2, "text": "Gain"},
"0236": {"length": 2, "text": "Two Wire Start"},
"0237": {"length": 2, "text": "Set Target Voltage"},
"0238": {"length": 2, "text": "Warm Up Time"},
"0239": {"length": 2, "text": "Start Up Delay"},
"023a": {"length": 2, "text": "Activation Status"},
"023b": {"length": 2, "text": "Pickup Voltage"},
"023d": {"length": 2, "text": "EEProm Version"},
"023e": {"length": 2, "text": "Exercise Duration"},
"023f": {"length": 2, "text": "Preheat Time"},
"0255": {"length": 2, "text": "Transfer to Utility Delay"},
"0256": {"length": 2, "text": "Cooldown Time"},
"0257": {"length": 2, "text": "AC To Charger Status"},
"005a": {"length": 2, "text": "Target Frequency"},
"0059": {"length": 2, "text": "Target Voltage"},
"01f4": {"length": 10, "text": "Serial Number"}
},
"log_registers": {
"03e8": {
"comment": "The registers in this instance is 03e8. By default, this is read from holding registers.",
"comment2:": " To read from input registers add the field 'reg_type': 'input'",
"reg_type": "holding",
"length": 10,
"text": "Alarm Log",
"iteration": 50,
"step": 5
},
"04e2": {"reg_type": "holding", "length": 8, "text": "Service Log", "iteration": 50, "step": 4},
"012c": {"reg_type": "holding", "length": 8, "text": "Run Log", "iteration": 50, "step": 4}
},
"switch_state": [
{
"reg": "0002",
"type": "object_int_index",
"mask": "ffff",
"object": {
"0": "Auto",
"6": "Manual",
"7": "Off"
},
"default": "Alarm Active",
"title": "Switch State"
}
],
"alarm_active" : [
{
"reg": "0002",
"mask": "ffff",
"value": "1",
"type": "regex",
"comment": "all numbers except 0,6 and 7,",
"regex": "^(?!^0$|^6$|^7$)(^\\d+$)$",
"title": "Alarm Active",
"text": "System In Alarm"
}
],
"alarm_conditions": [
{
"comment": "alarm_conditions are not used unless alarm_active (if present) reports anything",
"reg": "0002",
"type": "object_int_index",
"mask": "ffff",
"object": {
"0": "Auto",
"6": "Manual",
"7": "Off",
"1": "Low Battery",
"2": "High Coolant Temperature",
"3": "Controller Fault",
"5": "Low Fuel Pressure",
"8": "Low Coolant",
"10": "Low Oil Pressure",
"11": "Overcrank",
"12": "Overspeed",
"13": "RPM Sense Loss",
"15": "Change Oil & Filter",
"16": "Inspect Air Filter",
"18": "Very Low Battery",
"20": "Check Battery",
"21": "Underspeed",
"24": "Wiring Error",
"23": "Stopping...",
"25": "Check Engine",
"26": "Missing Cam Pulse",
"27": "Missing Crank Pulse",
"28": "Throttle Failure",
"29": "Over Voltage",
"30": "Under Voltage",
"31": "Service A Due",
"32": "Service B Due",
"34": "CANbus Error",
"35": "Ignition Fault",
"36": "Overload Remove Load",
"37": "Undervoltage Overload",
"38": "Overload",
"39": "Firmware Error-25",
"40": "Fuse Problem",
"41": "Battery Problem",
"42": "Charger Warning",
"43": "Charger Missing AC",
"48": "Ruptured Tank",
"49": "Very Low Fuel Level",
"50": "Low Fuel Level",
"51": "SEEProm Abuse",
"52": "Emergency Stop",
"54": "Bad Hall Calibration",
"55": "Service C Due",
"56": "Very Low Battery",
"120": "WIFI 485 Comms Loss",
"121": "WIFI to Router Comms Loss",
"122": "WIFI Router to Server Comms Loss"
},
"default": "Unknown Alarm Active",
"title": "Alarm Conditions"
}
],
"generator_status" : [
{
"comment":"Returning Unknown will make this not show up in the user interface",
"reg": "0002",
"type": "default",
"title": "Generator Status",
"text": "Unknown"
}
],
"engine_state": [
{
"reg": "0001",
"type": "object_int_index",
"mask": "ffff",
"object": {
"0": "Off - Ready",
"1": "Startup Delay Timer Activated",
"2": "Cranking",
"3": "Running",
"4": "Exercising",
"5": "Cooling Down",
"6": "Running in Warning",
"7": "Running in Alarm",
"8": "Stopped In Alarm",
"9": "Stopped - Start Inhibit Active",
"10": "Stopped with Warning",
"11": "Cranking Paused",
"12": "Running - Warm Up",
"13": "Cranking Warning",
"14": "Cranking Alarm",
"15": "Switched Off",
"22": "Firmware Update in Progress"
},
"default": "Unknown State",
"title": "Engine Status"
}
],
"status" : [
{"title": "Engine",
"comment": "The 'container' modifier will allow the values to be displayed with some hierarchy",
"container": true,
"value" : [
{
"reg": "0012",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Output Voltage",
"units": "V"
},
{
"reg": "0008",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Frequency",
"units": "Hz"
},
{
"reg": "000a",
"mask": "ffff",
"multiplier": 0.1,
"type": "float",
"title": "Battery Voltage",
"units": "V"
},
{
"reg": "0007",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "RPM",
"units": null
},
{
"reg": "0052",
"type": "list",
"separator": ",",
"default": "",
"title": "Active Sensors",
"value": [
{
"reg":"0052",
"mask": "0008",
"type": "bits",
"value": "0008",
"title": "2 Wire Sensor",
"text": "2 Wire Start"
},
{
"reg":"0052",
"mask": "0010",
"type": "bits",
"value": "0010",
"title": "Wiring Error Sensor",
"text": "Wiring Error"
},
{
"reg":"0052",
"mask": "0020",
"type": "bits",
"value": "0020",
"title": "Ruptured Basin Sensor",
"text": "Ruptured Basin"
},
{
"reg":"0052",
"mask": "0040",
"type": "bits",
"value": "0000",
"title": "E-Stop Sensor",
"text": "E-Stop Activated"
},
{
"reg":"0052",
"mask": "0080",
"type": "bits",
"value": "0080",
"title": "Oil psi Sensor",
"text": "Oil below 8 psi"
},
{
"reg":"0052",
"mask": "0100",
"type": "bits",
"value": "0100",
"title": "Coolant Level Sensor",
"text": "Low Coolant"
}
]
},
{
"reg": "0053",
"type": "list",
"separator": ",",
"title": "Active Relays",
"default": "",
"value": [
{
"reg":"0053",
"mask": "0001",
"type": "bits",
"value": "0001",
"title": "Transfer Switch Status",
"text": "Transfer Switch Activated"
},
{
"reg":"0053",
"mask": "0002",
"type": "bits",
"value": "0002",
"title": "Fuel Enrichment Status",
"text": "Fuel Enrichment On"
},
{
"reg":"0053",
"mask": "0004",
"type": "bits",
"value": "0004",
"title": "Starter Status",
"text": "Starter On"
},
{
"reg":"0053",
"mask": "0008",
"type": "bits",
"value": "0008",
"title": "Fuel Relay Status",
"text": "Fuel Relay On"
},
{
"reg":"0053",
"mask": "0010",
"type": "bits",
"value": "0010",
"title": "Battery Charger Status",
"text": "Battery Charger On"
},
{
"reg":"0053",
"mask": "0020",
"type": "bits",
"value": "0020",
"title": "Alarm Status",
"text": "Alarm On"
},
{
"reg":"0053",
"mask": "0040",
"type": "bits",
"value": "0040",
"title": "Bosch Governor Status",
"text": "Bosch Governor On"
},
{
"reg":"0053",
"mask": "0080",
"type": "bits",
"value": "0080",
"title": "Bosch Governor Status",
"text": "Bosch Governor On"
},
{
"reg":"0053",
"mask": "0080",
"type": "bits",
"value": "0080",
"title": "Air/Fuel Relay Status",
"text": "Air/Fuel Relay On"
}
]
}
]
},
{"title": "Line",
"container": true,
"value" : [
{
"reg": "0009",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Utility Voltage",
"units": "V"
},
{
"reg": "0011",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Utility Threshold Voltage",
"units": "V"
},
{
"reg": "023b",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Utility Pickup Voltage",
"units": "V"
}
]
},
{"title": "Misc",
"container": true,
"value" : [
{
"type" : "list",
"separator" : "/",
"title" : "Generator Date",
"value" : [
{
"reg": "000f",
"type": "int",
"mask" : "ff00",
"multiplier" : 0.00390625,
"comment" : "NOTE: 0.00390625 = 1/256 or dividing by 0x100 hex or shifting right by 8 bits",
"title": "Month"
},
{
"reg": "000f",
"type": "int",
"mask" : "00ff",
"title": "Day"
}
]
},
{
"type" : "list",
"separator" : ":",
"title" : "Generator Time",
"value" : [
{
"reg": "000e",
"type": "int",
"mask" : "ff00",
"multiplier" : 0.00390625,
"comment" : "NOTE: 0.00390625 = 1/256 or dividing by 0x100 hex or shifting right by 8 bits",
"title": "Hours"
},
{
"reg": "000e",
"type": "int",
"mask" : "00ff",
"format": "%02d",
"title": "Minutes"
}
]
}
]
}
],
"maintenance": [
{
"reg": "01f4",
"type": "ascii",
"title": "Serial Number"
},
{
"reg":"023a",
"mask": "0001",
"type": "bits",
"value": "0001",
"title": "Activation Status",
"text": "Activated",
"default": "Not Activated"
},
{"title": "Controller Settings",
"container": true,
"value" : [
{
"reg": "0208",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Generator Calibrate Volts",
"units": null
},
{
"reg": "0209",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Utility Calibrate Volts",
"units": null
},
{
"reg": "020a",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Param Code",
"units": null
},
{
"reg": "020b",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Voltage Code",
"units": null
},
{
"reg": "0054",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Hours of Protection",
"units": "h"
},
{
"reg": "020e",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Volts Per Hertz",
"units": null
},
{
"reg": "0235",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Gain",
"units": null
},
{
"reg": "0236",
"mask": "ffff",
"title": "Two Wire Start",
"type": "object_int_index",
"object": {
"0" : "Disable",
"1" : "Enable"
},
"default": "Unknown"
},
{
"reg": "0237",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Set Target Voltage",
"units": "V"
},
{
"reg": "0238",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Warm Up Delay",
"units": "seconds"
},
{
"reg": "0239",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Start Up Delay",
"units": "seconds"
},
{
"reg": "023f",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Preheat Time",
"units": "seconds"
},
{
"reg": "0255",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Transfer to utility Delay",
"units": "seconds"
},
{
"reg": "0256",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Cooldown Time",
"units": "seconds"
},
{
"reg": "0257",
"mask": "ffff",
"title": "AC To Charger Status",
"type": "object_int_index",
"object": {
"0" : "AC Missing",
"1" : "AC Present"
},
"default": "Unknown"
},
{
"reg": "005a",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Target Frequency",
"units": "Hz"
},
{
"reg": "0059",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Target Volts",
"units": "V"
},
{
"reg": "020c",
"mask": "ffff",
"type": "object_int_index",
"object":{
"0": "Liquid Propane",
"1": "Natural Gas",
"2": "Diesel"
},
"default": "Unknown Fuel Type",
"title": "Fuel Type"
}
]
},
{"title": "Exercise",
"container": true,
"value" : [
{
"type" : "list",
"separator" : ":",
"title" : "Exercise Time",
"value" : [
{
"reg": "002c",
"type": "int",
"mask" : "ff00",
"multiplier" : 0.00390625,
"comment" : "NOTE: 0.00390625 = 1/256 or dividing by 0x100 hex or shifting right by 8 bits",
"title": "Hours"
},
{
"reg": "002c",
"type": "int",
"mask" : "00ff",
"format": "%02d",
"title": "Minutes"
}
]
},
{
"type": "list",
"title": "Exercise Day",
"comment": "NOTE: this object is a list, but does not have a 'separator' or a 'format' modifier.",
"comment2": "This will return a list normally, but when paired with the 'exec' you can pass the ",
"comment3": "list items in to the exec string via python formatting, e.g. {}",
"exec": "exec_out = '{}' if '{}' == 'Monthly' else '{}'",
"separator" : null,
"value": [
{
"reg": "002e",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Exercise Day"
},
{
"reg": "002d",
"mask": "ffff",
"type": "object_int_index",
"object":{
"0": "Weekly",
"1": "Biweekly",
"2": "Monthly"
},
"default": "Unknown Mode",
"title": "Exercise Interval"
},
{
"reg": "002e",
"mask": "ffff",
"multiplier": 1,
"type": "object_int_index",
"title": "Exercise Day",
"object" : {
"0": "Sunday",
"1": "Monday",
"2": "Tuesday",
"3": "Wednesday",
"4": "Thursday",
"5": "Friday",
"6": "Saturday"
}
}
]
},
{
"reg": "002d",
"mask": "ffff",
"type": "object_int_index",
"object":{
"0": "Weekly",
"1": "Biweekly",
"2": "Monthly"
},
"default": "Unknown Mode",
"title": "Exercise Interval"
},
{
"reg": "002f",
"mask": "ffff",
"type": "object_int_index",
"object":{
"0": "Disabled",
"1": "Enabled"
},
"default": "Unknown Mode",
"title": "Low Speed Exercise"
},
{
"reg": "023e",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Exercise Duration",
"units": "minutes"
}
]
},
{"title": "Service",
"container": true,
"value" : [
{
"reg": "002a",
"mask": "00ff",
"multiplier": 0.01,
"type": "float",
"title": "Firmware Version",
"units": null
},
{
"reg": "002a",
"mask": "ff00",
"shiftright": 8,
"multiplier": 0.01,
"type": "float",
"title": "Hardware Version",
"units": null
},
{
"reg": "023d",
"mask": "ffff",
"multiplier": 0.01,
"type": "float",
"title": "EEProm Version",
"units": null
},
{
"reg": "005e",
"comment": "divide by 60, 1/60 = 0.166667",
"multiplier": 0.166667,
"type": "float",
"title": "Run Hours",
"units": "h"
},
{
"reg": "001a",
"mask": "ffff",
"comment": "",
"title": "Hours Until Service A Due",
"type":"int",
"units": "hrs"
},
{
"reg": "001b",
"mask": "ffff",
"comment": "register value is number of days since Jan 1,1970. exec must output to the variable 'exec_out'",
"comment2": "The exec string will be formatted (e.g. {}) with the modbus register value.",
"title": "Service A Due Date",
"type":"int",
"exec": "exec_out = datetime.datetime.fromtimestamp((({} + 1) * 86400)).strftime('%m/%d/%Y ')",
"default": "Unknown Service Date"
},
{
"reg": "001e",
"mask": "ffff",
"comment": "",
"title": "Hours Until Service B Due",
"type":"int",
"units": "hrs"
},
{
"reg": "001f",
"mask": "ffff",
"comment": "register value is number of days since Jan 1,1970. exec must output to the variable 'exec_out'",
"comment2": "The exec string will be formatted (e.g. {}) with the modbus register value.",
"title": "Service B Due Date",
"type":"int",
"exec": "exec_out = datetime.datetime.fromtimestamp((({} + 1) * 86400)).strftime('%m/%d/%Y ')",
"default": "Unknown Service Date"
}
]
}
],
"logs":[
{"length": 8, "title": "Run Log", "iteration": 50, "step": 4, "reg": "012c",
"object":{
"inherit" : true,
"type": "list",
"format": "%s/%s/%s %s:%s:%s %s",
"title" : "Run Log Entry",
"value": [
{
"inherit":true,
"mask": "00000000ff000000",
"format": "%02d",
"type": "int",
"shiftright" : 24,
"bounds_regex": "^([0-1][1-2]|[1-9])$",
"title": "Month"
},
{
"inherit":true,
"mask": "00000000000000ff",
"format": "%02d",
"type": "int",
"bounds_regex": "^([3][0-1]|[2][0-9]|[1][0-9]|[1-9])$",
"title": "Day"
},
{
"inherit":true,
"mask": "000000000000ff00",
"format": "%02d",
"type": "int",
"shiftright" : 8,
"title": "Year"
},
{
"inherit":true,
"mask": "000000ff00000000",
"format": "%02d",
"type": "int",
"shiftright" : 32,
"bounds_regex": "^(2[0-3]|[0-1]?[0-9])$",
"title": "Hours"
},
{
"inherit":true,
"mask": "0000ff0000000000",
"format": "%02d",
"type": "int",
"shiftright" : 40,
"bounds_regex": "^([0-9]|[1-5][0-9])$",
"title": "Minutes"
},
{
"inherit":true,
"mask": "0000000000ff0000",
"format": "%02d",
"type": "int",
"shiftright" : 16,
"bounds_regex": "^([0-9]|[1-5][0-9])$",
"title": "Seconds"
},
{
"inherit":true,
"type": "object_int_index",
"mask": "ff00000000000000",
"shiftright" :56,
"object": {
"40": "Switched Off",
"41": "Running Manual",
"42": "Stopped Auto",
"43": "Running Utility Lost",
"44": "Running 2 Wire Start",
"45": "Running Radio Start",
"46": "Running Exercise",
"47": "Stopped Alarm"
},
"default": "Unknown Event",
"title": "Run Event Name"
}
]
}
},
{"length": 10, "title": "Alarm Log", "iteration": 50, "step": 5, "reg": "03e8",
"object":{
"inherit" : true,
"type": "list",
"format": "%s/%s/%s %s:%s:%s %s: Alarm Code %s",
"title" : "Alarm Log Entry",
"value": [
{
"inherit":true,
"mask": "00000000ff0000000000",
"format": "%02d",
"type": "int",
"shiftright" : 40,
"bounds_regex": "^([0-1][1-2]|[1-9])$",
"title": "Month"
},
{
"inherit":true,
"mask": "00000000000000ff0000",
"format": "%02d",
"type": "int",
"shiftright" : 16,
"bounds_regex": "^([3][0-1]|[2][0-9]|[1][0-9]|[1-9])$",
"title": "Day"
},
{
"inherit":true,
"mask": "000000000000ff000000",
"format": "%02d",
"type": "int",
"shiftright" : 24,
"title": "Year"
},
{
"inherit":true,
"mask": "000000ff000000000000",
"format": "%02d",
"type": "int",
"shiftright" : 48,
"bounds_regex": "^(2[0-3]|[0-1]?[0-9])$",
"title": "Hours"
},
{
"inherit":true,
"mask": "0000ff00000000000000",
"format": "%02d",
"type": "int",
"shiftright" : 56,
"bounds_regex": "^([0-9]|[1-5][0-9])$",
"title": "Minutes"
},
{
"inherit":true,
"mask": "0000000000ff00000000",
"format": "%02d",
"type": "int",
"shiftright" : 32,
"bounds_regex": "^([0-9]|[1-5][0-9])$",
"title": "Seconds"
},
{
"inherit":true,
"type": "object_int_index",
"mask": "ff000000000000000000",
"shiftright" : 72,
"object": {
"0": "High Temperature",
"1": "Low Oil Pressure",
"2": "Overcrank",
"3": "Overspeed",
"4": "RPM Sense Loss",
"5": "Underspeed",
"6": "Low Coolant Level",
"8": "Wiring Error",
"9": "Over Voltage",
"10": "Under Voltage",
"11": "Overload",
"12": "Undervoltage Overload",
"13": "Stepper Overcurrent",
"14": "Fuse Problem",
"15": "VSCF Comm Gone",
"16": "VSCF Enable Mismatch",
"17": "VSCF PWM Speed Gone",
"18": "Very Low Battery",
"19": "VSCF Special No Translation",
"20": "Low Battery",
"21": "Exercise Set Error",
"28": "Stopping…",
"29": "Software Error 9",
"30": "Fuel Pressure",
"31": "Battery Problem",
"32": "Charger Warning",
"33": "Charger Missing AC",
"34": "Overload Warning",
"35": "Check Engine",
"36": "DTC Warning",
"37": "VSCF Warning",
"38": "USB Warning",
"39": "Modbus Comms Failure Warning",
"64": "Internal Fault",
"65": "Ignition Fault",
"66": "CANbus Error",
"67": "Missing Cam Pulse",
"68": "Missing Crank Pulse",
"69": "Governor Fault",
"70": "Ruptured Basin",
"71": "Low Fuel",
"72": "E-Stop",
"73": "Hall Calibration Error",
"74": "SEEProm ABuse",
"75": "Download Failure"
},
"default": "Unknown Alarm",
"title": "Alarm Name"
},
{
"inherit":true,
"mask": "ffff",
"format": "%04d",
"type": "int",
"title": "E-Code"
}
]
}
},
{"length": 8, "title": "Service Log", "iteration": 50, "step": 4, "reg": "04e2",
"object":{
"inherit" : true,
"type": "list",
"format": "%s/%s/%s %s:%s:%s %s",
"title" : "Service Log Entry",
"value": [
{
"inherit":true,
"mask": "00000000ff000000",
"format": "%02d",
"type": "int",
"shiftright" : 24,
"bounds_regex": "^([0-1][1-2]|[1-9])$",
"title": "Month"
},
{
"inherit":true,
"mask": "00000000000000ff",
"format": "%02d",
"type": "int",
"bounds_regex": "^([3][0-1]|[2][0-9]|[1][0-9]|[1-9])$",
"title": "Day"
},
{
"inherit":true,
"mask": "000000000000ff00",
"format": "%02d",
"type": "int",
"shiftright" : 8,
"title": "Year"
},
{
"inherit":true,
"mask": "000000ff00000000",
"format": "%02d",
"type": "int",
"shiftright" : 32,
"bounds_regex": "^(2[0-3]|[0-1]?[0-9])$",
"title": "Hours"
},
{
"inherit":true,
"mask": "0000ff0000000000",
"format": "%02d",
"type": "int",
"shiftright" : 40,
"bounds_regex": "^([0-9]|[1-5][0-9])$",
"title": "Minutes"
},
{
"inherit":true,
"mask": "0000000000ff0000",
"format": "%02d",
"type": "int",
"shiftright" : 16,
"bounds_regex": "^([0-9]|[1-5][0-9])$",
"title": "Seconds"
},
{
"inherit":true,
"type": "object_int_index",
"mask": "ff00000000000000",
"shiftright" :56,
"object": {
"22": "Service Schedule B",
"23": "Service Schedule A",
"24": "Inspect Battery",
"25": "Service Schedule C",
"60": "Service B Performed",
"61": "Service A Performed",
"62": "Battery Inspected",
"63": "Reset Maintenance",
"76": "Service C Performed"
},
"default": "Unknown Event",
"title": "Service Event Name"
}
]
}
}
],
"gauges": [
{
"reg": "000a",
"mask": "ffff",
"multiplier": 0.1,
"type": "float",
"title": "Battery Voltage",
"units": "V",
"sensor": "batteryvolts",
"nominal": 12
},
{
"reg": "0009",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Utility Voltage",
"units": "V",
"sensor": "linevolts",
"nominal": 240
},
{
"reg": "0012",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Output Voltage",
"units": "V",
"sensor": "linevolts",
"nominal": 240
},
{
"reg": "0008",
"mask": "ffff",
"multiplier": 0.01,
"type": "float",
"title": "Frequency",
"units": "Hz",
"sensor": "frequency",
"nominal": 60
},
{
"reg": "0007",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "RPM",
"units": null,
"sensor": "rpm",
"nominal": 1800
}
],
"buttons" : [
{
"onewordcommand" : "start",
"title" : "Remote Start",
"command_sequence" : [
{
"reg": "0003",
"value": "0001"
}
]
},
{
"onewordcommand" : "stop",
"title" : "Remote Stop",
"command_sequence" : [
{
"reg": "0003",
"value": "0000"
}
]
},
{
"onewordcommand" : "starttransfer",
"title" : "Remote Star and Transfer",
"command_sequence" : [
{
"reg": "0003",
"value": "0002"
}
]
},
{
"onewordcommand" : "startexercise",
"title" : "Remote Start Exercise",
"command_sequence" : [
{
"reg": "0003",
"value": "0003"
}
]
},
{
"onewordcommand" : "resetalarm",
"title" : "Reset Alarm",
"command_sequence" : [
{
"reg": "0003",
"value": "000d"
}
]
},
{
"onewordcommand" : "auto",
"title" : "Select Auto Mode",
"command_sequence" : [
{
"reg": "0003",
"value": "000f"
}
]
},
{
"onewordcommand" : "off",
"title" : "Select Off Mode",
"command_sequence" : [
{
"reg": "0003",
"value": "0010"
}
]
},
{
"onewordcommand" : "manual",
"title" : "Select Manual Mode",
"command_sequence" : [
{
"reg": "0003",
"value": "000e"
}
]
},
{
"onewordcommand" : "resetmaintwarn",
"title" : "Reset Maintenance Warnings",
"command_sequence" : [
{
"reg": "0003",
"value": "0008"
}
]
},
{
"onewordcommand" : "resetmaintperiods",
"title" : "Reset Maintenance Periods",
"command_sequence" : [
{
"reg": "0003",
"value": "0009"
}
]
},
{
"onewordcommand" : "exerciseduration",
"title" : "Exercise Duration",
"comment": "The command_sequence can be one or more commands",
"command_sequence" : [
{
"comment": "'reg' is the modbus register and is required. The value written to the register is supplied by the user." ,
"comment2": "'input_title' is required. 'length' (number of modbus bytes to write) is 2 by default,but must be 2 or 4 if supplied.",
"comment3": "'bounds_reg' is optional but allows the user interface to bounds check the data before sending it to genmon (highly recommended)",
"comment4": "'tooltip' is optional but allows the user interface to display more information regarding the input.",
"reg": "023e",
"input_title": "Minutes",
"type": "int",
"length": 2,
"bounds_regex":"^(?:([1][2-9])|([2-5][0-9])|([6][0]))$",
"tooltip": "The duration of the exercise cycle. This must be a whole number between 12 and 60 minutes."
}
]
},
{
"onewordcommand" : "startupdelay",
"title" : "Start Up Delay",
"command_sequence" : [
{
"reg": "0239",
"input_title": "Seconds",
"type": "int",
"length": 2,
"bounds_regex":"([5-9]|[1-9][0-9]{1,2}|1[0-4][0-9]{2}|1500)$",
"tooltip": "The delay between the loss of utility power and the cranking of the generator. This must be a whole number between 5 and 1500 seconds."
}
]
},
{
"onewordcommand" : "warmupdelay",
"title" : "Warm Up Delay",
"command_sequence" : [
{
"reg": "0238",
"input_title": "Seconds",
"type": "int",
"length": 2,
"bounds_regex":"^([2-9]|[1-9][0-9]{1,2}|1[0-4][0-9]{2}|1500)$",
"tooltip": "The delay between the start of the generator and the activation of the transfer switch when utility power has been lost. This must be a whole number between 2 and 1500 seconds."
}
]
},
{
"onewordcommand" : "thresholdvolts",
"title" : "Threshold Volts",
"command_sequence" : [
{
"reg": "0011",
"input_title": "Volts",
"type": "int",
"length": 2,
"bounds_regex":"^([0-9]|[1-9][0-9]|[12][0-9]{2}|3[0-3][0-9]|34[0-2])$",
"tooltip": "The utility voltage that denotes an outage. Any utility voltage below this value will trigger the generator to start (After the Start Delay has expired). This must be a whole number between 0 and 342."
}
]
},
{
"onewordcommand" : "pickupvolts",
"title" : "Pickup Volts",
"command_sequence" : [
{
"reg": "023b",
"input_title": "Volts",
"type": "int",
"length": 2,
"bounds_regex":"^(17[5-9]|1[89][0-9]|2[0-9]{2}|3[0-3][0-9]|34[0-2])$",
"tooltip": "The utility voltage that denotes an outage is over.. This must be a whole number between 175 and 342."
}
]
}
],
"fuel": {
"comment":"NOTE: this element will add a fuel gauge in addition to any defined in the gauges array",
"reg": "005d",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Fuel Sensor",
"units": "%",
"sensor": "fuel"
},
"outputvoltage": {
"reg": "0012",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Output Voltage",
"units": "V",
"sensor": "linevolts"
},
"linevoltage": {
"reg": "0009",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Utility Voltage",
"units": "V",
"sensor": "linevolts"
},
"thresholdvoltage": {
"reg": "0011",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Threshold Voltage",
"units": "V",
"sensor": "linevolts"
},
"pickupvoltage": {
"reg": "023b",
"mask": "ffff",
"multiplier": 1,
"type": "int",
"title": "Pickup Voltage",
"units": "V",
"sensor": "linevolts"
},
"run_hours": {
"reg": "005e",
"comment": "divide by 60, 1/60 = 0.166667",
"multiplier": 0.166667,
"type": "float",
"title": "Run Hours",
"units": "h"
},
"datetime": {
"comment": "This entry is for displaying the time in a format similar to how genmon displays the system time of the system running genmon.",
"type" : "list",
"format": "%s %s %s, 20%s %s:%s",
"title" : "Generator Time",
"value" : [
{
"reg": "0010",
"mask": "ff00",
"type": "object_int_index",
"multiplier" : 0.00390625,
"object" : {
"0": "Sunday",
"1": "Monday",
"2": "Tuesday",
"3": "Wednesday",
"4": "Thursday",
"5": "Friday",
"6": "Saturday"
},
"default": "Unknown",
"title": "Day of Week"
},
{
"reg": "000f",
"type": "object_int_index",
"mask" : "ff00",
"multiplier" : 0.00390625,
"object": {
"1": "January",
"2": "February",
"3": "March",
"4": "April",
"5": "May",
"6": "June",
"7": "July",
"8": "August",
"9": "September",
"10": "October",
"11": "November",
"12": "December"
},
"title": "Month"
},
{
"reg": "000f",
"type": "int",
"mask" : "00ff",
"title": "Day"
},
{
"reg": "0010",
"type": "int",
"mask" : "00ff",
"title": "Year"
},
{
"reg": "000e",
"type": "int",
"mask" : "ff00",
"multiplier" : 0.00390625,
"comment" : "NOTE: 0.00390625 = 1/256 or dividing by 0x100 hex or shifting right by 8 bits",
"title": "Hours"
},
{
"reg": "000e",
"type": "int",
"mask" : "00ff",
"format": "%02d",
"title": "Minutes"
}
]
},
"settime":{
"comment": "the settime object, if present can enable writing of the date and time to the controller",
"comment2": "the 'command_sequence' list is required. It defines the registers and what to write to each register",
"comment3": "The hour,minute,month,date,year entries are like the 'exec' entries in that they are python code that",
"comment4": "format the date and time input into the formate expected in the modbus register.",
"comment5": "If multiple entries are in one register command object, the values will be logical OR'ed to create a single value",
"command_sequence": [
{
"reg": "0010",
"comment": "This will take a four digit year and only use the lower two digits as low byte",
"year":"exec_out = abs({} - 2000)"
},
{
"reg": "000f",
"comment": "This will write the day of the month to the lower byte and the month to the upper byte",
"comment2": "The 'day' and 'month' will be OR'ed together to create one value to write to the register",
"comment3": "months s 1-12, day is 1 - 31",
"day": "exec_out = {} & 0x00ff",
"month":"exec_out = ({} << 8) & 0xff00"
},
{
"reg":"000e",
"comment": "This will write the hours to the upper byte and minutes to the lower byte.",
"comment1": "The 'hour' and 'minute' will be OR'ed together to create one value to write to the register",
"comment2": "hours is 0 - 23, minutes is 0 - 59",
"minute": "exec_out = {} & 0x00ff",
"hour": "exec_out = ({} << 8) & 0xff00"
}
]
},
"maintenance_due": [
{
"comment": "This should only return a value if maintenance is due, otherwise evaluate to nothing.",
"comment2": "Service A due alarm",
"reg": "0002",
"mask": "ffff",
"type": "bits",
"value": "001f",
"text": "Yes",
"title": "Maintenance A Due"
},
{
"comment": "Service B due alarm",
"reg": "0002",
"mask": "ffff",
"type": "bits",
"value": "0020",
"text": "Yes",
"title": "Maintenance B Due"
},
{
"comment": "Service A Hours remaining",
"reg": "001a",
"mask": "ffff",
"type": "bits",
"value": "0000",
"text": "Yes",
"title": "Maintenance A Due"
},
{
"comment": "Service B Hours remaining",
"reg": "001e",
"mask": "ffff",
"type": "bits",
"value": "0000",
"text": "Yes",
"title": "Maintenance B Due"
}
]
}