UNPKG

@parallaxcontrol/node-red-control

Version:

A comprehensive package of Node-RED nodes designed to seamlessly integrate with the Parallax Control Engine, offering enhanced control capabilities for AV Automation.

1,924 lines 56.7 kB
{ "package": "@parallaxcontrol/node-red-control", "version": "1.0.0", "generatedAt": "2025-09-03T13:49:13.712Z", "nodes": [ { "userFriendlyName": "And Gate", "actualNodeType": "and-gate", "aliases": [], "description": "Logic Node: This node acts as an AND gate, outputting true only if all configured inputs are true.", "llmNotes": "\nPurpose:\n- Logical AND gate: outputs true only if all configured inputs are true.\n\nInputs:\n- Accepts msg.payload = {\"Input\": <int>, \"Value\": <bool>}.\n- Required fields: Input (1-based index), Value (boolean).\n- Each Input index (1..numInputs) must provide a Value over time.\n\nOutputs:\n- Number of outputs: 1.\n- Output labels: [\"Output\"].\n- Emits msg.payload = true|false representing the AND of all inputs.\n\nUsage Rules:\n- This node uses \"Virtual Inputs\" meaning it can accept multiple upstream signals as a single input.\n- Always set numInputs to the total number of expected virtual inputs, or upstream signals to combine. For instance, if you are comparing 2 inputs, set numInputs to 2 and connect both upstream signals to this node.\n- Downstream: wire this gate to the consumer (e.g., set-feedback).", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "", "description": "" }, { "name": "numInputs", "canonical": "numInputs", "type": "number", "required": true, "default": 2, "description": "" } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload.Input", "types": [ "any" ] }, { "path": "msg.payload.Value", "types": [ "any" ] }, { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputs": [ { "name": "Output", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 1, "outputsDetail": [ { "index": 0, "label": "Output", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.payload.Input", "msg.payload.Value", "msg.payload" ], "writes": [ "msg.payload.Input", "msg.payload.Value", "msg.payload" ], "jsFile": "and-gate/and-gate.js", "htmlFiles": [ "and-gate/and-gate.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Compare String Text", "actualNodeType": "compare-string-text", "aliases": [], "description": "Serial Node: This node compares the incoming payload value with the configured 'String to Match'. If they are equal, it outputs 'true' otherwise 'false'. The second output is used for error messages. [Expected: msg.payload.Value (string)]", "llmNotes": "", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "", "description": "" }, { "name": "stringToMatch", "canonical": "stringToMatch", "type": "string", "required": true, "default": "", "description": "" } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload.Value", "types": [ "any" ] }, { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 1, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.payload.Value", "msg.payload" ], "writes": [ "msg.payload.Value", "msg.payload" ], "jsFile": "compare-string-text/compare-string-text.js", "htmlFiles": [ "compare-string-text/compare-string-text.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Input Select", "actualNodeType": "input-select", "aliases": [], "description": "Helper Node: This node selects an input for selection on the next logic node. [Expected: User-defined Input (1-based index number)]", "llmNotes": "\nPurpose:\n- Selects a specific virtual input on the downstream node.\n\nInputs:\n- Accepts msg.payload\n- Required fields: Input (1-based index), Value (int).\n\nOutputs:\n- Number of outputs: 1.\n\nUsage Rules:\n- This node selects a \"Virtual Input\" for the downstream node. For example, if you want to select the second virtual input on the relay node, you would set the Input field to 2.\n", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "", "description": "" }, { "name": "input", "canonical": "input", "type": "string", "required": true, "default": "", "description": "", "enum": [ "1", "2", "3", "4", "5" ] } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload", "types": [ "any" ] }, { "path": "msg.payload.Value", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 1, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.payload", "msg.payload.Value" ], "writes": [ "msg.payload", "msg.payload.Value" ], "jsFile": "input-select/input-select.js", "htmlFiles": [ "input-select/input-select.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Inverter Gate", "actualNodeType": "inverter-gate", "aliases": [], "description": "Logic Node: This node inverts a boolean value: Outputs false when the input is true, and true when the input is false. Expects: JSON Object, i.e.: {\"Value\":true}", "llmNotes": "", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "inverter-gate", "description": "" } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload.Value", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 1, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.payload.Value" ], "writes": [], "jsFile": "inverter-gate/inverter-gate.js", "htmlFiles": [ "inverter-gate/inverter-gate.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Or Gate", "actualNodeType": "or-gate", "aliases": [], "description": "Logic Node: This node acts as an OR logic gate, emitting true if any input is true. Note: Drive this signal with the 'Input Select' node. Expects: JSON Object, i.e.: {\"Input\":1,\"Value\":true} LLM Instructions: Logic Node - Use when any one of multiple conditions can trigger an action. NOT for all-conditions-required scenarios (use and-gate) or hardware I/O (use cm4-pro nodes). Outputs true when any input is true.", "llmNotes": "", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "", "description": "" }, { "name": "numInputs", "canonical": "numInputs", "type": "number", "required": true, "default": 2, "description": "" } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload.Input", "types": [ "any" ] }, { "path": "msg.payload.Value", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 1, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.payload.Input", "msg.payload.Value" ], "writes": [ "msg.payload.Input", "msg.payload.Value" ], "jsFile": "or-gate/or-gate.js", "htmlFiles": [ "or-gate/or-gate.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Set Reset Latch", "actualNodeType": "set-reset-latch", "aliases": [], "description": "This node simulates a set/reset latching relay. It has two outputs: the first output returns the current state (true/false), and the second output returns the inverse state. Using the input-select node, send a 1 or a 2 to make your selection. 1 is Set, 2 is Reset. [Expected: msg.input (1 or 2). NOTE: use the input-select node to make selection.]", "llmNotes": "", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "", "description": "" } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload.Input", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] }, { "name": "out2", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 2, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] }, { "index": 1, "label": "out2", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.payload.Input", "msg.input" ], "writes": [], "jsFile": "set-reset-latch/set-reset-latch.js", "htmlFiles": [ "set-reset-latch/set-reset-latch.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Send Single Dictionary", "actualNodeType": "send-single-dictionary", "aliases": [], "description": "Feedback Node: This node creates a dictionary message with specified Join ID, Key, and Type. It supports digital, analog, and serial signal types. Select the appropriate Dictionary Type based on the incoming msg.payload: Digital: Boolean values Analog: Numeric values Serial: String values [Configuration: JoinID (string), Key (string), DictionaryType (DropDown), Input: Accepts msg.payload of associated data type to assignt to the value.] d", "llmNotes": "", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "", "description": "" }, { "name": "joinID", "canonical": "joinID", "type": "string", "required": true, "default": "", "description": "" }, { "name": "key", "canonical": "key", "type": "string", "required": true, "default": "", "description": "" }, { "name": "dictionaryType", "canonical": "dictionaryType", "type": "string", "required": true, "default": "", "description": "" } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 1, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.payload" ], "writes": [ "msg.payload" ], "jsFile": "send-single-dictionary/send-single-dictionary.js", "htmlFiles": [ "send-single-dictionary/send-single-dictionary.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Set Feedback", "actualNodeType": "set-feedback", "aliases": [], "description": "This node sets feedback based on the provided JoinID, Signal Type and input value. [Configuration: User-defined JoinID and SigType] [Expected: msg.payload.Value (Boolean, Number, or String)]", "llmNotes": "", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": null, "description": "" }, { "name": "JoinID", "canonical": "JoinID", "type": "string", "required": true, "default": "", "description": "" }, { "name": "SigType", "canonical": "SigType", "type": "string", "required": true, "default": "", "description": "", "enum": [ "digital", "analog", "serial" ] } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload.Value", "types": [ "any" ] }, { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 1, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.payload.Value", "msg.payload" ], "writes": [ "msg.payload.Value" ], "jsFile": "set-feedback/set-feedback.js", "htmlFiles": [ "set-feedback/set-feedback.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Clear Signal State", "actualNodeType": "clear-signal-state", "aliases": [], "description": "This node clears the state of a signal based on the selected data type. [Expected: User configuration of datatype.", "llmNotes": "", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "", "description": "" }, { "name": "dataType", "canonical": "dataType", "type": "string", "required": true, "default": "", "description": "" } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 1, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [], "writes": [], "jsFile": "clear-signal-state/clear-signal-state.js", "htmlFiles": [ "clear-signal-state/clear-signal-state.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Recall Signal State", "actualNodeType": "recall-signal-state", "aliases": [], "description": "This node allows recalling of stored data based on the selected data type.", "llmNotes": "", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "recall-signal-state", "description": "" }, { "name": "dataType", "canonical": "dataType", "type": "string", "required": true, "default": "", "description": "" } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 1, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.input" ], "writes": [], "jsFile": "recall-signal-state/recall-signal-state.js", "htmlFiles": [ "recall-signal-state/recall-signal-state.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Save Signal State", "actualNodeType": "save-signal-state", "aliases": [], "description": "This node is used to save join states. It will extract the Value for the assocaited JoinID and save it to disk. Put this node prior to setting feedback to the touchpanel. The data will persist through reboot. [Expected: User configuration of datatype. Expected a standard Digital, Analog, Serial or Digial_Dictionary, Analog_Dictionary, or Serial_Dictionary message.", "llmNotes": "", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "", "description": "" } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload.Type", "types": [ "any" ] }, { "path": "msg.payload.JoinID", "types": [ "any" ] }, { "path": "msg.payload.Value", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 1, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.payload.Type", "msg.payload.JoinID", "msg.payload.Value" ], "writes": [], "jsFile": "save-signal-state/save-signal-state.js", "htmlFiles": [ "save-signal-state/save-signal-state.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Bool Toggle", "actualNodeType": "bool-toggle", "aliases": [], "description": "A high trigger on Input1 (SET) causes out1 to go high, and out 2 low. A high trigger on Input2 (RESET) causes out1 low and out2 high. A high trigger on Input3 (TOGGLE) will flip the current state of out1 and out2. [Expected: connect the input-select node to the input of the toggle node. Selections include: 1-Set, 2-Reset, 3-Toggle.", "llmNotes": "", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "", "description": "" } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload.Value", "types": [ "any" ] }, { "path": "msg.payload.Input", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] }, { "name": "out2", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 2, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] }, { "index": 1, "label": "out2", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.payload.Value", "msg.payload.Input" ], "writes": [ "msg.payload.Value" ], "jsFile": "bool-toggle/bool-toggle.js", "htmlFiles": [ "bool-toggle/bool-toggle.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Extract Message Data", "actualNodeType": "extract-message-data", "aliases": [], "description": "This node extracts specific data from a message object based on the selected option.", "llmNotes": "", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "", "description": "" }, { "name": "objectToGet", "canonical": "objectToGet", "type": "string", "required": true, "default": "", "description": "" } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload.Type", "types": [ "any" ] }, { "path": "msg.payload.JoinID", "types": [ "any" ] }, { "path": "msg.payload.Value", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 1, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.payload.Type", "msg.payload.JoinID", "msg.payload.Value" ], "writes": [], "jsFile": "extract-message-data/extract-message-data.js", "htmlFiles": [ "extract-message-data/extract-message-data.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "System Management", "actualNodeType": "system-management", "aliases": [], "description": "This node performs system management tasks based on the selected action. Choose an action from the dropdown menu and the node will execute the corresponding command. Expects: JSON Object, i.e.: {\"Value\": true}", "llmNotes": "", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "", "description": "" }, { "name": "makeSelection", "canonical": "makeSelection", "type": "string", "required": true, "default": "", "description": "" } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload.Value", "types": [ "any" ] }, { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 1, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.payload.Value", "msg.payload" ], "writes": [ "msg.payload.Value", "msg.payload" ], "jsFile": "system-management/system-management.js", "htmlFiles": [ "system-management/system-management.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Message Array", "actualNodeType": "message-array", "aliases": [], "description": "Helper Node: This node sends an array of data of the specified type to the UI for processing. [Expected: msg.payload of type JSON object ie: {\"0\":14,\"1\":92} ]", "llmNotes": "", "category": "", "color": "", "config": [], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 1, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.payload" ], "writes": [ "msg.payload" ], "jsFile": "message-array/message-array.js", "htmlFiles": [ "message-array/message-array.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Cm4 Pro Relay", "actualNodeType": "cm4-pro-relay", "aliases": [], "description": "Use input-select node to trigger relay. Input Selection: 1-Relay On, 2-Relay Off Expects: JSON Object, i.e.: {\"Input\":1,\"Value\":true}", "llmNotes": "", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "", "description": "" }, { "name": "numInputs", "canonical": "numInputs", "type": "number", "required": true, "default": 2, "description": "" } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload.Input", "types": [ "any" ] }, { "path": "msg.payload.Value", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] }, { "name": "out2", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] }, { "name": "out3", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] }, { "name": "out4", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 4, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] }, { "index": 1, "label": "out2", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] }, { "index": 2, "label": "out3", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] }, { "index": 3, "label": "out4", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.payload.Input", "msg.payload.Value" ], "writes": [ "msg.payload.Input", "msg.payload.Value" ], "jsFile": "cm4-pro-relay/cm4-pro-relay.js", "htmlFiles": [ "cm4-pro-relay/cm4-pro-relay.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Cm4 Pro Digital Input", "actualNodeType": "cm4-pro-digital-input", "aliases": [], "description": "This node is triggered on a digital input event. Outputs: JSON Object, i.e.: {\"Input\": 1, \"Value\": true}", "llmNotes": "\n- Purpose:\n- This node represents the digital input events.\n\nInputs:\n- Does not accept any node-red inputs. \n\nOutputs:\n- The node has two outputs which correspond to digital-input port 1 and 2.\n- Emits msg.payload.Value where Value is of type Bool, ie: {\"Input\": <port>, \"Value\": <bool>}.\n\nUsage Rules:\n- IF user wants digital input 1, connect it to the first output.\n- IF user wants digital input 2, connect it to the second output.\n- IF the user wants both ports, use both outputs.\n- Dont add a second node for a second output, use the available outputs. \n\nWiring Examples:\n1. Using BOTH digital inputs (output1 + output2):\n- Both outputs must wire to the SAME downstream node (e.g., the and-gate).\n- JSON shape example how to use both digital inputs:\n\n {\n \"id\": \"node1\",\n \"type\": \"cm4-pro-digital-input\",\n \"name\": \"Digital Inputs\",\n \"x\": 100,\n \"y\": 150,\n \"wires\": [\n [\"node2\"], \n [\"node2\"] \n ]\n }\n", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "", "description": "" } ], "inputs": [], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] }, { "name": "out2", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 2, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] }, { "index": 1, "label": "out2", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": false, "mutates": [], "internals": { "reads": [ "msg.payload.Value" ], "writes": [], "jsFile": "cm4-pro-digital-input/cm4-pro-digital-input.js", "htmlFiles": [ "cm4-pro-digital-input/cm4-pro-digital-input.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Biamp Tesira Connect", "actualNodeType": "biamp-tesira-connect", "aliases": [], "description": "Hardware Node: connects to a Biamp Tesira audio system over the network. Provides the transport layer and communication management needed for control and monitoring of the Tesira DSP nodes. Other Tesira command nodes depend on this connection node to be present", "llmNotes": "", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "", "description": "" }, { "name": "ip", "canonical": "ip", "type": "string", "required": true, "default": "", "description": "" }, { "name": "user", "canonical": "user", "type": "string", "required": false, "default": "admin", "description": "" }, { "name": "pass", "canonical": "pass", "type": "string", "required": false, "default": "", "description": "" } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 1, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.payload" ], "writes": [ "msg.payload" ], "jsFile": "biamp-tesira/biamp-tesira-connect.js", "htmlFiles": [ "biamp-tesira/biamp-tesira-connect.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Biamp Tesira Command", "actualNodeType": "biamp-tesira-command", "aliases": [], "description": "Inject your command. Reference the Tesira Command String Calculator: https://support.biamp.com/Tesira/Control/Tesira_command_string_calculator Expects: msg.payload of type String. Response: standard TTP responses. i.e.: +OK \"value\":\"4.1.0.36\" https://tesira-help.biamp.com/System_Control/Tesira_Text_Protocol/REsponses.htm This node depends on the biamp-tesira-connect node to be present.", "llmNotes": "", "category": "parallax-tesira", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "", "description": "" } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputs": [ { "name": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "outputsCount": 1, "outputsDetail": [ { "index": 0, "label": "out1", "fields": [ { "path": "msg.payload", "types": [ "any" ] } ] } ], "stateful": false, "idempotent": true, "mutates": [], "internals": { "reads": [ "msg.payload" ], "writes": [ "msg.payload" ], "jsFile": "biamp-tesira/biamp-tesira-command.js", "htmlFiles": [ "biamp-tesira/biamp-tesira-command.html" ] }, "exampleFlowlets": [], "testVectors": [] }, { "userFriendlyName": "Av Pro Ac Cx42", "actualNodeType": "av-pro-ac-cx42", "aliases": [], "description": "Hardware Node: connects and controls an AVPro Edge AC-CX42 matrix video switcher. This node provides the required command channel and connection management for downstream control nodes that will control the AVPro unit. It manages the IP connection and general session status for the AVPro switch AV Pro Edge ConferX AC-CX42-AUHD: 4K 4x2 Matrix Switcher CMD v3.00 User Instructions This node accepts input in the form of a msg.payload object that contains the following properties: Expected Input Format: msg.payload.x - a number representing the x value. msg.payload.y - a number representing the y value. msg.payload.z - a number representing the z value. msg.payload.ip - a string representing the IP Address value in standard format: xxx.xxx.xxx.xxx msg.payload.zzzz - a number representing the Port value. msg.payload.xx - a string representing the hex xx value. msg.payload.yy - a string representing the hex yy value. msg.payload.zz - a string representing the hex zz value. Output: The node outputs a full string command based on the input values. How to Use: Pass the input to the node with the desired values. The node will process these values and generate a full string command for the selected command. If the Command does not include variables, any input signal will trigger the command to run.", "llmNotes": "\nPurpose:\n- Controls an AVPro Edge AC-CX42 matrix switcher by generating full command strings for the device.\n\nInputs:\n- Expects msg.payload object with the following possible fields:\n - x (number): generic x parameter.\n - y (number): generic y parameter.\n - z (number): generic z parameter.\n - ip (string): IP address in standard format (xxx.xxx.xxx.xxx).\n - zzzz (number): TCP/IP port.\n - xx (string): hex string value.\n - yy (string): hex string value.\n - zz (string): hex string value.\n- Required fields depend on the selected command (see dropdown).\n\nOutputs:\n- One output: [\"Output\"].\n- Emits msg.payload as a full string command formatted according to the selected command and provided inputs.\n\nUsage Rules:\n- Always provide the parameters required by the chosen command (from the Make Selection dropdown).\n- Do not include undefined or extra fields in msg.payload.\n- If a command does not require variables, any input signal will trigger the command.\n- Wire this node before sending commands to the AVPro Edge device’s connection/session node.\n", "category": "parallax", "color": "#C0C0C0", "config": [ { "name": "name", "canonical": "name", "type": "string", "required": false, "default": "", "description": "" }, { "name": "makeSelection", "canonical": "makeSelection", "type": "string", "required": true, "default": "helpCommand", "description": "" }, { "name": "options", "canonical": "options", "type": "string", "required": false, "default": null, "description": "" } ], "inputs": [ { "name": "default", "fields": [ { "path": "msg.payload.x", "types": [ "any" ] }, { "path": "msg.payload.y", "types": [ "any" ] }, { "path": "msg.payload.z", "types": [ "any" ] }, { "path": "msg.payload.zzzz", "types": [ "any" ] }, { "path": "msg.payload.ip", "types": [ "any" ] }, { "path": "msg.payload.xx", "types": [ "any" ] }, { "path": "msg.payload.yy", "types": [ "any" ] }, { "path": "msg.payload.zz", "types": [ "any" ] }, { "path": "msg.payload", "types": [ "any" ] }, { "path": "msg.payload.", "types": [ "any" ] } ] } ], "outputs": [ { "name": "Output", "fields": [ { "path": "msg.payload", "t