diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/AC_CURRENT_USB4065.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/AC_CURRENT_USB4065.md
new file mode 100644
index 0000000000..d5691a0693
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/AC_CURRENT_USB4065.md
@@ -0,0 +1,57 @@
+
+[//]: # (Custom component imports)
+
+import DocString from '@site/src/components/DocString';
+import PythonCode from '@site/src/components/PythonCode';
+import AppDisplay from '@site/src/components/AppDisplay';
+import SectionBreak from '@site/src/components/SectionBreak';
+import AppendixSection from '@site/src/components/AppendixSection';
+
+[//]: # (Docstring)
+
+import DocstringSource from '!!raw-loader!./a1-[autogen]/docstring.txt';
+import PythonSource from '!!raw-loader!./a1-[autogen]/python_code.txt';
+
+{DocstringSource}
+{PythonSource}
+
+
+
+
+
+[//]: # (Examples)
+
+## Examples
+
+import Example1 from './examples/EX1/example.md';
+import App1 from '!!raw-loader!./examples/EX1/app.json';
+
+
+
+
+ {App1}
+
+
+
+
+
+
+
+
+[//]: # (Appendix)
+
+import Notes from './appendix/notes.md';
+import Hardware from './appendix/hardware.md';
+import Media from './appendix/media.md';
+
+## Appendix
+
+
+
+
+
+
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/a1-[autogen]/docstring.txt b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..6e4a8b0dfd
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/a1-[autogen]/docstring.txt
@@ -0,0 +1,28 @@
+The AC_CURRENT_USB4065 node reads the AC current from a USB-4065.
+
+ The USB-4065 is a NI (National Instruments) multimeter. It is possible that
+ the node will work with other NI DMMs (digital multimeters) such as the
+ 4070 and 4080 series.
+
+ This instrument will likely only be compatible with Windows systems due to
+ NI driver availablity. To use the instrument you must install the runtime:
+
+ https://www.ni.com/en/support/downloads/drivers/download.ni-dmm.html
+
+ You must also find the address/resource name for the instrument. You can
+ find this using the NI MAX programming which can be downloaded when
+ installing the drivers.
+
+ Parameters
+ ----------
+ NI_address: str
+ The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').
+ digits: str
+ The accuracy of the reading in digits. Lower values are faster.
+ current_limit: str
+ The maximum current to allow, in Amps.
+
+ Returns
+ -------
+ DataContainer
+ Scalar: The AC current reading.
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/a1-[autogen]/python_code.txt b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/a1-[autogen]/python_code.txt
new file mode 100644
index 0000000000..a1a49734fd
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/a1-[autogen]/python_code.txt
@@ -0,0 +1,27 @@
+from flojoy import flojoy, DataContainer, Scalar
+from flojoy.connection_manager import DeviceConnectionManager
+from typing import Optional, Literal
+import nidmm
+
+
+@flojoy(deps={"nidmm": "1.4.6"})
+def AC_CURRENT_USB4065(
+ NI_address: str = "Dev1",
+ digits: Literal["4.5", "5.5", "6.5"] = "5.5",
+ current_limit: Literal["0.01", "0.1", "0.5", "3"] = "3",
+ default: Optional[DataContainer] = None,
+) -> Scalar:
+
+
+ connection = DeviceConnectionManager.get_connection(NI_address)
+ session = connection.get_handle()
+
+ session.configure_measurement_digits(
+ nidmm.Function.AC_CURRENT,
+ range=float(current_limit),
+ resolution_digits=float(digits),
+ )
+
+ reading = session.read()
+
+ return Scalar(c=reading)
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/appendix/hardware.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/appendix/hardware.md
new file mode 100644
index 0000000000..7f78a555c4
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/appendix/hardware.md
@@ -0,0 +1 @@
+This node does not require any peripheral hardware to operate. Please see INSTRUMENTS for nodes that interact with the physical world through connected hardware.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/appendix/media.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/appendix/media.md
new file mode 100644
index 0000000000..8bcee9be90
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/appendix/media.md
@@ -0,0 +1 @@
+No supporting screenshots, photos, or videos have been added to the media.md file for this node.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/appendix/notes.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/appendix/notes.md
new file mode 100644
index 0000000000..04aded2ec9
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/appendix/notes.md
@@ -0,0 +1 @@
+No theory or technical notes have been contributed for this node yet.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/examples/EX1/app.json b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/examples/EX1/app.json
new file mode 100644
index 0000000000..ede8f608e3
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/examples/EX1/app.json
@@ -0,0 +1,454 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "type": "IO",
+ "data": {
+ "id": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "label": "CONNECTION USB4065",
+ "func": "CONNECTION_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "CONNECTION_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "desc": "Optional: None"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/CONNECTION_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 4.704499736461486,
+ "y": -114.58793327290465
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 4.704499736461486,
+ "y": -114.58793327290465
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06b",
+ "type": "VISUALIZERS",
+ "data": {
+ "id": "BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06b",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZERS",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": true
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "VISUALIZERS/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 789.5089067672151,
+ "y": -337.92011150709266
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 789.5089067672151,
+ "y": -337.92011150709266
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "type": "VISUALIZERS",
+ "data": {
+ "id": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "label": "BIG NUMBER 1",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZERS",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": true
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "VISUALIZERS/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 788.5306367510525,
+ "y": -17.717544827417925
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 788.5306367510525,
+ "y": -17.717544827417925
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "AC_CURRENT_USB4065-01f8cd65-f159-48d8-941a-f78f4cf89895",
+ "type": "IO",
+ "data": {
+ "id": "AC_CURRENT_USB4065-01f8cd65-f159-48d8-941a-f78f4cf89895",
+ "label": "AC CURRENT USB4065",
+ "func": "AC_CURRENT_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "AC_CURRENT_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "5.5",
+ "desc": "The accuracy of the reading in digits. Lower values are faster.",
+ "overload": null,
+ "functionName": "AC_CURRENT_USB4065",
+ "param": "digits",
+ "value": "5.5"
+ },
+ "current_limit": {
+ "type": "select",
+ "options": [
+ "0.01",
+ "0.1",
+ "0.5",
+ "3"
+ ],
+ "default": "3",
+ "desc": "The maximum current to allow, in Amps.",
+ "overload": null,
+ "functionName": "AC_CURRENT_USB4065",
+ "param": "current_limit",
+ "value": "3"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Scalar: The AC current reading."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/AC_CURRENT_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 409.98201629627056,
+ "y": 4.911279697871066
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 409.98201629627056,
+ "y": 4.911279697871066
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "AC_VOLTAGE_USB4065-75a4399f-a1b3-4cfe-b110-3cea79bce7eb",
+ "type": "IO",
+ "data": {
+ "id": "AC_VOLTAGE_USB4065-75a4399f-a1b3-4cfe-b110-3cea79bce7eb",
+ "label": "AC VOLTAGE USB4065",
+ "func": "AC_VOLTAGE_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "AC_VOLTAGE_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "5.5",
+ "desc": "The accuracy of the reading in digits. Lower values are faster.",
+ "overload": null,
+ "functionName": "AC_VOLTAGE_USB4065",
+ "param": "digits",
+ "value": "5.5"
+ },
+ "voltage_limit": {
+ "type": "select",
+ "options": [
+ "0.2",
+ "2",
+ "20",
+ "300"
+ ],
+ "default": "20",
+ "desc": "The maximum voltage to allow, in Volts.",
+ "overload": null,
+ "functionName": "AC_VOLTAGE_USB4065",
+ "param": "voltage_limit",
+ "value": "20"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Scalar: The AC voltage reading."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/AC_VOLTAGE_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 411.59905358626946,
+ "y": -327.4361310374542
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 411.59905358626946,
+ "y": -327.4361310374542
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "sourceHandle": "default",
+ "target": "AC_VOLTAGE_USB4065-75a4399f-a1b3-4cfe-b110-3cea79bce7eb",
+ "targetHandle": "default",
+ "id": "reactflow__edge-CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1default-AC_VOLTAGE_USB4065-75a4399f-a1b3-4cfe-b110-3cea79bce7ebdefault"
+ },
+ {
+ "source": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "sourceHandle": "default",
+ "target": "AC_CURRENT_USB4065-01f8cd65-f159-48d8-941a-f78f4cf89895",
+ "targetHandle": "default",
+ "id": "reactflow__edge-CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1default-AC_CURRENT_USB4065-01f8cd65-f159-48d8-941a-f78f4cf89895default"
+ },
+ {
+ "source": "AC_CURRENT_USB4065-01f8cd65-f159-48d8-941a-f78f4cf89895",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "targetHandle": "default",
+ "id": "reactflow__edge-AC_CURRENT_USB4065-01f8cd65-f159-48d8-941a-f78f4cf89895default-BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085decdefault"
+ },
+ {
+ "source": "AC_VOLTAGE_USB4065-75a4399f-a1b3-4cfe-b110-3cea79bce7eb",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06b",
+ "targetHandle": "default",
+ "id": "reactflow__edge-AC_VOLTAGE_USB4065-75a4399f-a1b3-4cfe-b110-3cea79bce7ebdefault-BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06bdefault"
+ }
+ ],
+ "viewport": {
+ "x": 1139.470292881633,
+ "y": 572.2854272048312,
+ "zoom": 1.2136444284334926
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/examples/EX1/example.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/examples/EX1/example.md
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/AC_VOLTAGE_USB4065.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/AC_VOLTAGE_USB4065.md
new file mode 100644
index 0000000000..83b8367608
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/AC_VOLTAGE_USB4065.md
@@ -0,0 +1,57 @@
+
+[//]: # (Custom component imports)
+
+import DocString from '@site/src/components/DocString';
+import PythonCode from '@site/src/components/PythonCode';
+import AppDisplay from '@site/src/components/AppDisplay';
+import SectionBreak from '@site/src/components/SectionBreak';
+import AppendixSection from '@site/src/components/AppendixSection';
+
+[//]: # (Docstring)
+
+import DocstringSource from '!!raw-loader!./a1-[autogen]/docstring.txt';
+import PythonSource from '!!raw-loader!./a1-[autogen]/python_code.txt';
+
+{DocstringSource}
+{PythonSource}
+
+
+
+
+
+[//]: # (Examples)
+
+## Examples
+
+import Example1 from './examples/EX1/example.md';
+import App1 from '!!raw-loader!./examples/EX1/app.json';
+
+
+
+
+ {App1}
+
+
+
+
+
+
+
+
+[//]: # (Appendix)
+
+import Notes from './appendix/notes.md';
+import Hardware from './appendix/hardware.md';
+import Media from './appendix/media.md';
+
+## Appendix
+
+
+
+
+
+
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/a1-[autogen]/docstring.txt b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..2ff2bb5615
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/a1-[autogen]/docstring.txt
@@ -0,0 +1,28 @@
+The AC_VOLTAGE_USB4065 node reads the AC voltage from a USB-4065.
+
+ The USB-4065 is a NI (National Instruments) multimeter. It is possible that
+ the node will work with other NI DMMs (digital multimeters) such as the
+ 4070 and 4080 series.
+
+ This instrument will likely only be compatible with Windows systems due to
+ NI driver availablity. To use the instrument you must install the runtime:
+
+ https://www.ni.com/en/support/downloads/drivers/download.ni-dmm.html
+
+ You must also find the address/resource name for the instrument. You can
+ find this using the NI MAX programming which can be downloaded when
+ installing the drivers.
+
+ Parameters
+ ----------
+ NI_address: str
+ The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').
+ digits: str
+ The accuracy of the reading in digits. Lower values are faster.
+ voltage_limit: str
+ The maximum voltage to allow, in Volts.
+
+ Returns
+ -------
+ DataContainer
+ Scalar: The AC voltage reading.
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/a1-[autogen]/python_code.txt b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/a1-[autogen]/python_code.txt
new file mode 100644
index 0000000000..8768ea1972
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/a1-[autogen]/python_code.txt
@@ -0,0 +1,27 @@
+from flojoy import flojoy, DataContainer, Scalar
+from flojoy.connection_manager import DeviceConnectionManager
+from typing import Optional, Literal
+import nidmm
+
+
+@flojoy(deps={"nidmm": "1.4.6"})
+def AC_VOLTAGE_USB4065(
+ NI_address: str = "Dev1",
+ digits: Literal["4.5", "5.5", "6.5"] = "5.5",
+ voltage_limit: Literal["0.2", "2", "20", "300"] = "20",
+ default: Optional[DataContainer] = None,
+) -> Scalar:
+
+
+ connection = DeviceConnectionManager.get_connection(NI_address)
+ session = connection.get_handle()
+
+ session.configure_measurement_digits(
+ nidmm.Function.AC_VOLTS,
+ range=float(voltage_limit),
+ resolution_digits=float(digits),
+ )
+
+ reading = session.read()
+
+ return Scalar(c=reading)
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/appendix/hardware.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/appendix/hardware.md
new file mode 100644
index 0000000000..7f78a555c4
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/appendix/hardware.md
@@ -0,0 +1 @@
+This node does not require any peripheral hardware to operate. Please see INSTRUMENTS for nodes that interact with the physical world through connected hardware.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/appendix/media.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/appendix/media.md
new file mode 100644
index 0000000000..8bcee9be90
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/appendix/media.md
@@ -0,0 +1 @@
+No supporting screenshots, photos, or videos have been added to the media.md file for this node.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/appendix/notes.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/appendix/notes.md
new file mode 100644
index 0000000000..04aded2ec9
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/appendix/notes.md
@@ -0,0 +1 @@
+No theory or technical notes have been contributed for this node yet.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/examples/EX1/app.json b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/examples/EX1/app.json
new file mode 100644
index 0000000000..ede8f608e3
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/examples/EX1/app.json
@@ -0,0 +1,454 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "type": "IO",
+ "data": {
+ "id": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "label": "CONNECTION USB4065",
+ "func": "CONNECTION_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "CONNECTION_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "desc": "Optional: None"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/CONNECTION_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 4.704499736461486,
+ "y": -114.58793327290465
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 4.704499736461486,
+ "y": -114.58793327290465
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06b",
+ "type": "VISUALIZERS",
+ "data": {
+ "id": "BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06b",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZERS",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": true
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "VISUALIZERS/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 789.5089067672151,
+ "y": -337.92011150709266
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 789.5089067672151,
+ "y": -337.92011150709266
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "type": "VISUALIZERS",
+ "data": {
+ "id": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "label": "BIG NUMBER 1",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZERS",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": true
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "VISUALIZERS/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 788.5306367510525,
+ "y": -17.717544827417925
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 788.5306367510525,
+ "y": -17.717544827417925
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "AC_CURRENT_USB4065-01f8cd65-f159-48d8-941a-f78f4cf89895",
+ "type": "IO",
+ "data": {
+ "id": "AC_CURRENT_USB4065-01f8cd65-f159-48d8-941a-f78f4cf89895",
+ "label": "AC CURRENT USB4065",
+ "func": "AC_CURRENT_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "AC_CURRENT_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "5.5",
+ "desc": "The accuracy of the reading in digits. Lower values are faster.",
+ "overload": null,
+ "functionName": "AC_CURRENT_USB4065",
+ "param": "digits",
+ "value": "5.5"
+ },
+ "current_limit": {
+ "type": "select",
+ "options": [
+ "0.01",
+ "0.1",
+ "0.5",
+ "3"
+ ],
+ "default": "3",
+ "desc": "The maximum current to allow, in Amps.",
+ "overload": null,
+ "functionName": "AC_CURRENT_USB4065",
+ "param": "current_limit",
+ "value": "3"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Scalar: The AC current reading."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_CURRENT_USB4065/AC_CURRENT_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 409.98201629627056,
+ "y": 4.911279697871066
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 409.98201629627056,
+ "y": 4.911279697871066
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "AC_VOLTAGE_USB4065-75a4399f-a1b3-4cfe-b110-3cea79bce7eb",
+ "type": "IO",
+ "data": {
+ "id": "AC_VOLTAGE_USB4065-75a4399f-a1b3-4cfe-b110-3cea79bce7eb",
+ "label": "AC VOLTAGE USB4065",
+ "func": "AC_VOLTAGE_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "AC_VOLTAGE_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "5.5",
+ "desc": "The accuracy of the reading in digits. Lower values are faster.",
+ "overload": null,
+ "functionName": "AC_VOLTAGE_USB4065",
+ "param": "digits",
+ "value": "5.5"
+ },
+ "voltage_limit": {
+ "type": "select",
+ "options": [
+ "0.2",
+ "2",
+ "20",
+ "300"
+ ],
+ "default": "20",
+ "desc": "The maximum voltage to allow, in Volts.",
+ "overload": null,
+ "functionName": "AC_VOLTAGE_USB4065",
+ "param": "voltage_limit",
+ "value": "20"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Scalar: The AC voltage reading."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/AC_VOLTAGE_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 411.59905358626946,
+ "y": -327.4361310374542
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 411.59905358626946,
+ "y": -327.4361310374542
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "sourceHandle": "default",
+ "target": "AC_VOLTAGE_USB4065-75a4399f-a1b3-4cfe-b110-3cea79bce7eb",
+ "targetHandle": "default",
+ "id": "reactflow__edge-CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1default-AC_VOLTAGE_USB4065-75a4399f-a1b3-4cfe-b110-3cea79bce7ebdefault"
+ },
+ {
+ "source": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "sourceHandle": "default",
+ "target": "AC_CURRENT_USB4065-01f8cd65-f159-48d8-941a-f78f4cf89895",
+ "targetHandle": "default",
+ "id": "reactflow__edge-CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1default-AC_CURRENT_USB4065-01f8cd65-f159-48d8-941a-f78f4cf89895default"
+ },
+ {
+ "source": "AC_CURRENT_USB4065-01f8cd65-f159-48d8-941a-f78f4cf89895",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "targetHandle": "default",
+ "id": "reactflow__edge-AC_CURRENT_USB4065-01f8cd65-f159-48d8-941a-f78f4cf89895default-BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085decdefault"
+ },
+ {
+ "source": "AC_VOLTAGE_USB4065-75a4399f-a1b3-4cfe-b110-3cea79bce7eb",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06b",
+ "targetHandle": "default",
+ "id": "reactflow__edge-AC_VOLTAGE_USB4065-75a4399f-a1b3-4cfe-b110-3cea79bce7ebdefault-BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06bdefault"
+ }
+ ],
+ "viewport": {
+ "x": 1139.470292881633,
+ "y": 572.2854272048312,
+ "zoom": 1.2136444284334926
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/examples/EX1/example.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/AC_VOLTAGE_USB4065/examples/EX1/example.md
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/CONNECTION_USB4065.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/CONNECTION_USB4065.md
new file mode 100644
index 0000000000..3ebadba6e8
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/CONNECTION_USB4065.md
@@ -0,0 +1,57 @@
+
+[//]: # (Custom component imports)
+
+import DocString from '@site/src/components/DocString';
+import PythonCode from '@site/src/components/PythonCode';
+import AppDisplay from '@site/src/components/AppDisplay';
+import SectionBreak from '@site/src/components/SectionBreak';
+import AppendixSection from '@site/src/components/AppendixSection';
+
+[//]: # (Docstring)
+
+import DocstringSource from '!!raw-loader!./a1-[autogen]/docstring.txt';
+import PythonSource from '!!raw-loader!./a1-[autogen]/python_code.txt';
+
+{DocstringSource}
+{PythonSource}
+
+
+
+
+
+[//]: # (Examples)
+
+## Examples
+
+import Example1 from './examples/EX1/example.md';
+import App1 from '!!raw-loader!./examples/EX1/app.json';
+
+
+
+
+ {App1}
+
+
+
+
+
+
+
+
+[//]: # (Appendix)
+
+import Notes from './appendix/notes.md';
+import Hardware from './appendix/hardware.md';
+import Media from './appendix/media.md';
+
+## Appendix
+
+
+
+
+
+
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/a1-[autogen]/docstring.txt b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..f03c50bd32
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/a1-[autogen]/docstring.txt
@@ -0,0 +1,11 @@
+The CONNECTION_MDO3XXX node connects Flojoy to a
+
+ Parameters
+ ----------
+ NI_address: str
+ The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').
+
+ Returns
+ -------
+ DataContainer
+ Optional: None
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/a1-[autogen]/python_code.txt b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/a1-[autogen]/python_code.txt
new file mode 100644
index 0000000000..1d210debfd
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/a1-[autogen]/python_code.txt
@@ -0,0 +1,17 @@
+from flojoy import flojoy, DataContainer, NIDevice
+from flojoy.connection_manager import DeviceConnectionManager
+from typing import Optional
+import nidmm
+
+
+@flojoy(deps={"nidmm": "1.4.6"})
+def CONNECTION_USB4065(
+ NI_address: str = "Dev1",
+ default: Optional[DataContainer] = None,
+) -> Optional[DataContainer]:
+
+
+ session = nidmm.Session(NI_address)
+ DeviceConnectionManager.register_connection(NIDevice(NI_address), session)
+
+ return None
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/appendix/hardware.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/appendix/hardware.md
new file mode 100644
index 0000000000..7f78a555c4
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/appendix/hardware.md
@@ -0,0 +1 @@
+This node does not require any peripheral hardware to operate. Please see INSTRUMENTS for nodes that interact with the physical world through connected hardware.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/appendix/media.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/appendix/media.md
new file mode 100644
index 0000000000..8bcee9be90
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/appendix/media.md
@@ -0,0 +1 @@
+No supporting screenshots, photos, or videos have been added to the media.md file for this node.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/appendix/notes.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/appendix/notes.md
new file mode 100644
index 0000000000..04aded2ec9
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/appendix/notes.md
@@ -0,0 +1 @@
+No theory or technical notes have been contributed for this node yet.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/examples/EX1/app.json b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/examples/EX1/app.json
new file mode 100644
index 0000000000..7ee5bc2698
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/examples/EX1/app.json
@@ -0,0 +1,266 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "type": "IO",
+ "data": {
+ "id": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "label": "CONNECTION USB4065",
+ "func": "CONNECTION_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "CONNECTION_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "desc": "Optional: None"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/CONNECTION_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 4.704499736461486,
+ "y": -114.58793327290465
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 4.704499736461486,
+ "y": -114.58793327290465
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "type": "VISUALIZERS",
+ "data": {
+ "id": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "label": "BIG NUMBER 1",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZERS",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": true
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "VISUALIZERS/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 779.8328146881206,
+ "y": -134.05091491913146
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 779.8328146881206,
+ "y": -134.05091491913146
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESISTANCE_USB4065-be7ec375-8dda-4e2a-b1e9-4b25945441d3",
+ "type": "IO",
+ "data": {
+ "id": "RESISTANCE_USB4065-be7ec375-8dda-4e2a-b1e9-4b25945441d3",
+ "label": "RESISTANCE USB4065",
+ "func": "RESISTANCE_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "RESISTANCE_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "5.5",
+ "desc": "The accuracy of the reading in digits. Lower values are faster.",
+ "overload": null,
+ "functionName": "RESISTANCE_USB4065",
+ "param": "digits",
+ "value": "4.5"
+ },
+ "resist_limit": {
+ "type": "select",
+ "options": [
+ "100",
+ "1000",
+ "1e4",
+ "1e5",
+ "1e6",
+ "1e7",
+ "1e8"
+ ],
+ "default": "1e8",
+ "desc": "The maximum resistance to allow, in Volts.",
+ "overload": null,
+ "functionName": "RESISTANCE_USB4065",
+ "param": "resist_limit",
+ "value": "100"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Scalar: The DC voltage reading."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/RESISTANCE_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 383.1035717255011,
+ "y": -122.14124419049455
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 383.1035717255011,
+ "y": -122.14124419049455
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "sourceHandle": "default",
+ "target": "RESISTANCE_USB4065-be7ec375-8dda-4e2a-b1e9-4b25945441d3",
+ "targetHandle": "default",
+ "id": "reactflow__edge-CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1default-RESISTANCE_USB4065-be7ec375-8dda-4e2a-b1e9-4b25945441d3default"
+ },
+ {
+ "source": "RESISTANCE_USB4065-be7ec375-8dda-4e2a-b1e9-4b25945441d3",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "targetHandle": "default",
+ "id": "reactflow__edge-RESISTANCE_USB4065-be7ec375-8dda-4e2a-b1e9-4b25945441d3default-BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085decdefault"
+ }
+ ],
+ "viewport": {
+ "x": 1139.470292881633,
+ "y": 572.2854272048312,
+ "zoom": 1.2136444284334926
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/examples/EX1/example.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/examples/EX1/example.md
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/DC_CURRENT_USB4065.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/DC_CURRENT_USB4065.md
new file mode 100644
index 0000000000..8dbe2a1ac8
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/DC_CURRENT_USB4065.md
@@ -0,0 +1,57 @@
+
+[//]: # (Custom component imports)
+
+import DocString from '@site/src/components/DocString';
+import PythonCode from '@site/src/components/PythonCode';
+import AppDisplay from '@site/src/components/AppDisplay';
+import SectionBreak from '@site/src/components/SectionBreak';
+import AppendixSection from '@site/src/components/AppendixSection';
+
+[//]: # (Docstring)
+
+import DocstringSource from '!!raw-loader!./a1-[autogen]/docstring.txt';
+import PythonSource from '!!raw-loader!./a1-[autogen]/python_code.txt';
+
+{DocstringSource}
+{PythonSource}
+
+
+
+
+
+[//]: # (Examples)
+
+## Examples
+
+import Example1 from './examples/EX1/example.md';
+import App1 from '!!raw-loader!./examples/EX1/app.json';
+
+
+
+
+ {App1}
+
+
+
+
+
+
+
+
+[//]: # (Appendix)
+
+import Notes from './appendix/notes.md';
+import Hardware from './appendix/hardware.md';
+import Media from './appendix/media.md';
+
+## Appendix
+
+
+
+
+
+
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/a1-[autogen]/docstring.txt b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..22e1235007
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/a1-[autogen]/docstring.txt
@@ -0,0 +1,28 @@
+The DC_CURRENT_USB4065 node reads the DC current from a USB-4065.
+
+ The USB-4065 is a NI (National Instruments) multimeter. It is possible that
+ the node will work with other NI DMMs (digital multimeters) such as the
+ 4070 and 4080 series.
+
+ This instrument will likely only be compatible with Windows systems due to
+ NI driver availablity. To use the instrument you must install the runtime:
+
+ https://www.ni.com/en/support/downloads/drivers/download.ni-dmm.html
+
+ You must also find the address/resource name for the instrument. You can
+ find this using the NI MAX programming which can be downloaded when
+ installing the drivers.
+
+ Parameters
+ ----------
+ NI_address: str
+ The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').
+ digits: str
+ The accuracy of the reading in digits. Lower values are faster.
+ current_limit: str
+ The maximum current to allow, in Amps.
+
+ Returns
+ -------
+ DataContainer
+ Scalar: The DC current reading.
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/a1-[autogen]/python_code.txt b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/a1-[autogen]/python_code.txt
new file mode 100644
index 0000000000..aa895ded68
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/a1-[autogen]/python_code.txt
@@ -0,0 +1,27 @@
+from flojoy import flojoy, DataContainer, Scalar
+from flojoy.connection_manager import DeviceConnectionManager
+from typing import Optional, Literal
+import nidmm
+
+
+@flojoy(deps={"nidmm": "1.4.6"})
+def DC_CURRENT_USB4065(
+ NI_address: str = "Dev1",
+ digits: Literal["4.5", "5.5", "6.5"] = "5.5",
+ current_limit: Literal["0.01", "0.1", "1", "3"] = "3",
+ default: Optional[DataContainer] = None,
+) -> Scalar:
+
+
+ connection = DeviceConnectionManager.get_connection(NI_address)
+ session = connection.get_handle()
+
+ session.configure_measurement_digits(
+ nidmm.Function.DC_CURRENT,
+ range=float(current_limit),
+ resolution_digits=float(digits),
+ )
+
+ reading = session.read()
+
+ return Scalar(c=reading)
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/appendix/hardware.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/appendix/hardware.md
new file mode 100644
index 0000000000..7f78a555c4
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/appendix/hardware.md
@@ -0,0 +1 @@
+This node does not require any peripheral hardware to operate. Please see INSTRUMENTS for nodes that interact with the physical world through connected hardware.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/appendix/media.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/appendix/media.md
new file mode 100644
index 0000000000..8bcee9be90
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/appendix/media.md
@@ -0,0 +1 @@
+No supporting screenshots, photos, or videos have been added to the media.md file for this node.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/appendix/notes.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/appendix/notes.md
new file mode 100644
index 0000000000..04aded2ec9
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/appendix/notes.md
@@ -0,0 +1 @@
+No theory or technical notes have been contributed for this node yet.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/examples/EX1/app.json b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/examples/EX1/app.json
new file mode 100644
index 0000000000..269fc5f34e
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/examples/EX1/app.json
@@ -0,0 +1,456 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "type": "IO",
+ "data": {
+ "id": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "label": "CONNECTION USB4065",
+ "func": "CONNECTION_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "CONNECTION_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "desc": "Optional: None"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/CONNECTION_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 4.704499736461486,
+ "y": -114.58793327290465
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 4.704499736461486,
+ "y": -114.58793327290465
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06b",
+ "type": "VISUALIZERS",
+ "data": {
+ "id": "BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06b",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZERS",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": true
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "VISUALIZERS/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 789.5089067672151,
+ "y": -337.92011150709266
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 789.5089067672151,
+ "y": -337.92011150709266
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "DC_VOLTAGE_USB4065-faabd48b-f783-4ebe-90ec-6a060dad2fbb",
+ "type": "IO",
+ "data": {
+ "id": "DC_VOLTAGE_USB4065-faabd48b-f783-4ebe-90ec-6a060dad2fbb",
+ "label": "DC VOLTAGE USB4065",
+ "func": "DC_VOLTAGE_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "DC_VOLTAGE_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "5.5",
+ "desc": "The accuracy of the reading in digits. Lower values are faster.",
+ "overload": null,
+ "functionName": "DC_VOLTAGE_USB4065",
+ "param": "digits",
+ "value": "5.5"
+ },
+ "voltage_limit": {
+ "type": "select",
+ "options": [
+ "0.1",
+ "1",
+ "10",
+ "100",
+ "300"
+ ],
+ "default": "10",
+ "desc": "The maximum voltage to allow, in Volts.",
+ "overload": null,
+ "functionName": "DC_VOLTAGE_USB4065",
+ "param": "voltage_limit",
+ "value": "10"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Scalar: The DC voltage reading."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/DC_VOLTAGE_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 387.584587312525,
+ "y": -281.5498028061119
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 387.584587312525,
+ "y": -281.5498028061119
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "type": "VISUALIZERS",
+ "data": {
+ "id": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "label": "BIG NUMBER 1",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZERS",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": true
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "VISUALIZERS/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": true
+ },
+ "position": {
+ "x": 788.5306367510525,
+ "y": -17.717544827417925
+ },
+ "selected": true,
+ "positionAbsolute": {
+ "x": 788.5306367510525,
+ "y": -17.717544827417925
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "DC_CURRENT_USB4065-ec7b293a-827e-4d89-86bf-5db062fda09e",
+ "type": "IO",
+ "data": {
+ "id": "DC_CURRENT_USB4065-ec7b293a-827e-4d89-86bf-5db062fda09e",
+ "label": "DC CURRENT USB4065",
+ "func": "DC_CURRENT_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "DC_CURRENT_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "5.5",
+ "desc": "The accuracy of the reading in digits. Lower values are faster.",
+ "overload": null,
+ "functionName": "DC_CURRENT_USB4065",
+ "param": "digits",
+ "value": "4.5"
+ },
+ "current_limit": {
+ "type": "select",
+ "options": [
+ "0.01",
+ "0.1",
+ "1",
+ "3"
+ ],
+ "default": "3",
+ "desc": "The maximum current to allow, in Amps.",
+ "overload": null,
+ "functionName": "DC_CURRENT_USB4065",
+ "param": "current_limit",
+ "value": "3"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Scalar: The DC current reading."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/DC_CURRENT_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 383.63040645462985,
+ "y": 31.065737308753683
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 383.63040645462985,
+ "y": 31.065737308753683
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "sourceHandle": "default",
+ "target": "DC_VOLTAGE_USB4065-faabd48b-f783-4ebe-90ec-6a060dad2fbb",
+ "targetHandle": "default",
+ "id": "reactflow__edge-CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1default-DC_VOLTAGE_USB4065-faabd48b-f783-4ebe-90ec-6a060dad2fbbdefault",
+ "selected": false
+ },
+ {
+ "source": "DC_VOLTAGE_USB4065-faabd48b-f783-4ebe-90ec-6a060dad2fbb",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06b",
+ "targetHandle": "default",
+ "id": "reactflow__edge-DC_VOLTAGE_USB4065-faabd48b-f783-4ebe-90ec-6a060dad2fbbdefault-BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06bdefault"
+ },
+ {
+ "source": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "sourceHandle": "default",
+ "target": "DC_CURRENT_USB4065-ec7b293a-827e-4d89-86bf-5db062fda09e",
+ "targetHandle": "default",
+ "id": "reactflow__edge-CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1default-DC_CURRENT_USB4065-ec7b293a-827e-4d89-86bf-5db062fda09edefault"
+ },
+ {
+ "source": "DC_CURRENT_USB4065-ec7b293a-827e-4d89-86bf-5db062fda09e",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "targetHandle": "default",
+ "id": "reactflow__edge-DC_CURRENT_USB4065-ec7b293a-827e-4d89-86bf-5db062fda09edefault-BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085decdefault"
+ }
+ ],
+ "viewport": {
+ "x": 1139.470292881633,
+ "y": 572.2854272048312,
+ "zoom": 1.2136444284334926
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/examples/EX1/example.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/examples/EX1/example.md
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/DC_VOLTAGE_USB4065.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/DC_VOLTAGE_USB4065.md
new file mode 100644
index 0000000000..6cada942e4
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/DC_VOLTAGE_USB4065.md
@@ -0,0 +1,57 @@
+
+[//]: # (Custom component imports)
+
+import DocString from '@site/src/components/DocString';
+import PythonCode from '@site/src/components/PythonCode';
+import AppDisplay from '@site/src/components/AppDisplay';
+import SectionBreak from '@site/src/components/SectionBreak';
+import AppendixSection from '@site/src/components/AppendixSection';
+
+[//]: # (Docstring)
+
+import DocstringSource from '!!raw-loader!./a1-[autogen]/docstring.txt';
+import PythonSource from '!!raw-loader!./a1-[autogen]/python_code.txt';
+
+{DocstringSource}
+{PythonSource}
+
+
+
+
+
+[//]: # (Examples)
+
+## Examples
+
+import Example1 from './examples/EX1/example.md';
+import App1 from '!!raw-loader!./examples/EX1/app.json';
+
+
+
+
+ {App1}
+
+
+
+
+
+
+
+
+[//]: # (Appendix)
+
+import Notes from './appendix/notes.md';
+import Hardware from './appendix/hardware.md';
+import Media from './appendix/media.md';
+
+## Appendix
+
+
+
+
+
+
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/a1-[autogen]/docstring.txt b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..d448a9fc7c
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/a1-[autogen]/docstring.txt
@@ -0,0 +1,28 @@
+The DC_VOLTAGE_USB4065 node reads the DC voltage from a USB-4065.
+
+ The USB-4065 is a NI (National Instruments) multimeter. It is possible that
+ the node will work with other NI DMMs (digital multimeters) such as the
+ 4070 and 4080 series.
+
+ This instrument will likely only be compatible with Windows systems due to
+ NI driver availablity. To use the instrument you must install the runtime:
+
+ https://www.ni.com/en/support/downloads/drivers/download.ni-dmm.html
+
+ You must also find the address/resource name for the instrument. You can
+ find this using the NI MAX programming which can be downloaded when
+ installing the drivers.
+
+ Parameters
+ ----------
+ NI_address: str
+ The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').
+ digits: str
+ The accuracy of the reading in digits. Lower values are faster.
+ voltage_limit: str
+ The maximum voltage to allow, in Volts.
+
+ Returns
+ -------
+ DataContainer
+ Scalar: The DC voltage reading.
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/a1-[autogen]/python_code.txt b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/a1-[autogen]/python_code.txt
new file mode 100644
index 0000000000..c4e8508e73
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/a1-[autogen]/python_code.txt
@@ -0,0 +1,27 @@
+from flojoy import flojoy, DataContainer, Scalar
+from flojoy.connection_manager import DeviceConnectionManager
+from typing import Optional, Literal
+import nidmm
+
+
+@flojoy(deps={"nidmm": "1.4.6"})
+def DC_VOLTAGE_USB4065(
+ NI_address: str = "Dev1",
+ digits: Literal["4.5", "5.5", "6.5"] = "5.5",
+ voltage_limit: Literal["0.1", "1", "10", "100", "300"] = "10",
+ default: Optional[DataContainer] = None,
+) -> Scalar:
+
+
+ connection = DeviceConnectionManager.get_connection(NI_address)
+ session = connection.get_handle()
+
+ session.configure_measurement_digits(
+ nidmm.Function.DC_VOLTS,
+ range=float(voltage_limit),
+ resolution_digits=float(digits),
+ )
+
+ reading = session.read()
+
+ return Scalar(c=reading)
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/appendix/hardware.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/appendix/hardware.md
new file mode 100644
index 0000000000..7f78a555c4
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/appendix/hardware.md
@@ -0,0 +1 @@
+This node does not require any peripheral hardware to operate. Please see INSTRUMENTS for nodes that interact with the physical world through connected hardware.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/appendix/media.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/appendix/media.md
new file mode 100644
index 0000000000..8bcee9be90
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/appendix/media.md
@@ -0,0 +1 @@
+No supporting screenshots, photos, or videos have been added to the media.md file for this node.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/appendix/notes.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/appendix/notes.md
new file mode 100644
index 0000000000..04aded2ec9
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/appendix/notes.md
@@ -0,0 +1 @@
+No theory or technical notes have been contributed for this node yet.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/examples/EX1/app.json b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/examples/EX1/app.json
new file mode 100644
index 0000000000..269fc5f34e
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/examples/EX1/app.json
@@ -0,0 +1,456 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "type": "IO",
+ "data": {
+ "id": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "label": "CONNECTION USB4065",
+ "func": "CONNECTION_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "CONNECTION_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "desc": "Optional: None"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/CONNECTION_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 4.704499736461486,
+ "y": -114.58793327290465
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 4.704499736461486,
+ "y": -114.58793327290465
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06b",
+ "type": "VISUALIZERS",
+ "data": {
+ "id": "BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06b",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZERS",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": true
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "VISUALIZERS/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 789.5089067672151,
+ "y": -337.92011150709266
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 789.5089067672151,
+ "y": -337.92011150709266
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "DC_VOLTAGE_USB4065-faabd48b-f783-4ebe-90ec-6a060dad2fbb",
+ "type": "IO",
+ "data": {
+ "id": "DC_VOLTAGE_USB4065-faabd48b-f783-4ebe-90ec-6a060dad2fbb",
+ "label": "DC VOLTAGE USB4065",
+ "func": "DC_VOLTAGE_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "DC_VOLTAGE_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "5.5",
+ "desc": "The accuracy of the reading in digits. Lower values are faster.",
+ "overload": null,
+ "functionName": "DC_VOLTAGE_USB4065",
+ "param": "digits",
+ "value": "5.5"
+ },
+ "voltage_limit": {
+ "type": "select",
+ "options": [
+ "0.1",
+ "1",
+ "10",
+ "100",
+ "300"
+ ],
+ "default": "10",
+ "desc": "The maximum voltage to allow, in Volts.",
+ "overload": null,
+ "functionName": "DC_VOLTAGE_USB4065",
+ "param": "voltage_limit",
+ "value": "10"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Scalar: The DC voltage reading."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/DC_VOLTAGE_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 387.584587312525,
+ "y": -281.5498028061119
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 387.584587312525,
+ "y": -281.5498028061119
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "type": "VISUALIZERS",
+ "data": {
+ "id": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "label": "BIG NUMBER 1",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZERS",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": true
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "VISUALIZERS/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": true
+ },
+ "position": {
+ "x": 788.5306367510525,
+ "y": -17.717544827417925
+ },
+ "selected": true,
+ "positionAbsolute": {
+ "x": 788.5306367510525,
+ "y": -17.717544827417925
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "DC_CURRENT_USB4065-ec7b293a-827e-4d89-86bf-5db062fda09e",
+ "type": "IO",
+ "data": {
+ "id": "DC_CURRENT_USB4065-ec7b293a-827e-4d89-86bf-5db062fda09e",
+ "label": "DC CURRENT USB4065",
+ "func": "DC_CURRENT_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "DC_CURRENT_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "5.5",
+ "desc": "The accuracy of the reading in digits. Lower values are faster.",
+ "overload": null,
+ "functionName": "DC_CURRENT_USB4065",
+ "param": "digits",
+ "value": "4.5"
+ },
+ "current_limit": {
+ "type": "select",
+ "options": [
+ "0.01",
+ "0.1",
+ "1",
+ "3"
+ ],
+ "default": "3",
+ "desc": "The maximum current to allow, in Amps.",
+ "overload": null,
+ "functionName": "DC_CURRENT_USB4065",
+ "param": "current_limit",
+ "value": "3"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Scalar: The DC current reading."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_CURRENT_USB4065/DC_CURRENT_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 383.63040645462985,
+ "y": 31.065737308753683
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 383.63040645462985,
+ "y": 31.065737308753683
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "sourceHandle": "default",
+ "target": "DC_VOLTAGE_USB4065-faabd48b-f783-4ebe-90ec-6a060dad2fbb",
+ "targetHandle": "default",
+ "id": "reactflow__edge-CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1default-DC_VOLTAGE_USB4065-faabd48b-f783-4ebe-90ec-6a060dad2fbbdefault",
+ "selected": false
+ },
+ {
+ "source": "DC_VOLTAGE_USB4065-faabd48b-f783-4ebe-90ec-6a060dad2fbb",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06b",
+ "targetHandle": "default",
+ "id": "reactflow__edge-DC_VOLTAGE_USB4065-faabd48b-f783-4ebe-90ec-6a060dad2fbbdefault-BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06bdefault"
+ },
+ {
+ "source": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "sourceHandle": "default",
+ "target": "DC_CURRENT_USB4065-ec7b293a-827e-4d89-86bf-5db062fda09e",
+ "targetHandle": "default",
+ "id": "reactflow__edge-CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1default-DC_CURRENT_USB4065-ec7b293a-827e-4d89-86bf-5db062fda09edefault"
+ },
+ {
+ "source": "DC_CURRENT_USB4065-ec7b293a-827e-4d89-86bf-5db062fda09e",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "targetHandle": "default",
+ "id": "reactflow__edge-DC_CURRENT_USB4065-ec7b293a-827e-4d89-86bf-5db062fda09edefault-BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085decdefault"
+ }
+ ],
+ "viewport": {
+ "x": 1139.470292881633,
+ "y": 572.2854272048312,
+ "zoom": 1.2136444284334926
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/examples/EX1/example.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DC_VOLTAGE_USB4065/examples/EX1/example.md
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/DIODE_USB4065.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/DIODE_USB4065.md
new file mode 100644
index 0000000000..95453f3866
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/DIODE_USB4065.md
@@ -0,0 +1,57 @@
+
+[//]: # (Custom component imports)
+
+import DocString from '@site/src/components/DocString';
+import PythonCode from '@site/src/components/PythonCode';
+import AppDisplay from '@site/src/components/AppDisplay';
+import SectionBreak from '@site/src/components/SectionBreak';
+import AppendixSection from '@site/src/components/AppendixSection';
+
+[//]: # (Docstring)
+
+import DocstringSource from '!!raw-loader!./a1-[autogen]/docstring.txt';
+import PythonSource from '!!raw-loader!./a1-[autogen]/python_code.txt';
+
+{DocstringSource}
+{PythonSource}
+
+
+
+
+
+[//]: # (Examples)
+
+## Examples
+
+import Example1 from './examples/EX1/example.md';
+import App1 from '!!raw-loader!./examples/EX1/app.json';
+
+
+
+
+ {App1}
+
+
+
+
+
+
+
+
+[//]: # (Appendix)
+
+import Notes from './appendix/notes.md';
+import Hardware from './appendix/hardware.md';
+import Media from './appendix/media.md';
+
+## Appendix
+
+
+
+
+
+
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/a1-[autogen]/docstring.txt b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..940460f3e6
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/a1-[autogen]/docstring.txt
@@ -0,0 +1,28 @@
+The DIODE_USB4065 node reads the voltage drop across a diode.
+
+ The USB-4065 is a NI (National Instruments) multimeter. It is possible that
+ the node will work with other NI DMMs (digital multimeters) such as the
+ 4070 and 4080 series.
+
+ This instrument will likely only be compatible with Windows systems due to
+ NI driver availablity. To use the instrument you must install the runtime:
+
+ https://www.ni.com/en/support/downloads/drivers/download.ni-dmm.html
+
+ You must also find the address/resource name for the instrument. You can
+ find this using the NI MAX programming which can be downloaded when
+ installing the drivers.
+
+ Parameters
+ ----------
+ NI_address: str
+ The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').
+ digits: str
+ The accuracy of the reading in digits. Lower values are faster.
+ voltage_limit: str
+ The maximum voltage to allow, in Volts.
+
+ Returns
+ -------
+ DataContainer
+ Scalar: The DC voltage reading.
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/a1-[autogen]/python_code.txt b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/a1-[autogen]/python_code.txt
new file mode 100644
index 0000000000..e1295085aa
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/a1-[autogen]/python_code.txt
@@ -0,0 +1,27 @@
+from flojoy import flojoy, DataContainer, Scalar
+from flojoy.connection_manager import DeviceConnectionManager
+from typing import Optional, Literal
+import nidmm
+
+
+@flojoy(deps={"nidmm": "1.4.6"})
+def DIODE_USB4065(
+ NI_address: str = "Dev1",
+ digits: Literal["4.5", "5.5", "6.5"] = "5.5",
+ voltage_limit: Literal["3.5", "10"] = "10",
+ default: Optional[DataContainer] = None,
+) -> Scalar:
+
+
+ connection = DeviceConnectionManager.get_connection(NI_address)
+ session = connection.get_handle()
+
+ session.configure_measurement_digits(
+ nidmm.Function.DIODE,
+ range=float(voltage_limit),
+ resolution_digits=float(digits),
+ )
+
+ reading = session.read()
+
+ return Scalar(c=reading)
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/appendix/hardware.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/appendix/hardware.md
new file mode 100644
index 0000000000..7f78a555c4
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/appendix/hardware.md
@@ -0,0 +1 @@
+This node does not require any peripheral hardware to operate. Please see INSTRUMENTS for nodes that interact with the physical world through connected hardware.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/appendix/media.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/appendix/media.md
new file mode 100644
index 0000000000..8bcee9be90
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/appendix/media.md
@@ -0,0 +1 @@
+No supporting screenshots, photos, or videos have been added to the media.md file for this node.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/appendix/notes.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/appendix/notes.md
new file mode 100644
index 0000000000..04aded2ec9
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/appendix/notes.md
@@ -0,0 +1 @@
+No theory or technical notes have been contributed for this node yet.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/examples/EX1/app.json b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/examples/EX1/app.json
new file mode 100644
index 0000000000..39063c25f1
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/examples/EX1/app.json
@@ -0,0 +1,594 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "type": "IO",
+ "data": {
+ "id": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "label": "CONNECTION USB4065",
+ "func": "CONNECTION_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "CONNECTION_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "desc": "Optional: None"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/CONNECTION_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": -407.4314234630916,
+ "y": -63.38316705720263
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -407.4314234630916,
+ "y": -63.38316705720263
+ },
+ "dragging": true
+ },
+ {
+ "width": 96,
+ "height": 96,
+ "id": "LOOP-fdac3e37-4b37-49f0-976b-38ac4759268f",
+ "type": "LOGIC_GATES",
+ "data": {
+ "id": "LOOP-fdac3e37-4b37-49f0-976b-38ac4759268f",
+ "label": "LOOP",
+ "func": "LOOP",
+ "type": "LOGIC_GATES",
+ "ctrls": {
+ "num_loops": {
+ "type": "int",
+ "default": -1,
+ "desc": "number of times to iterate through body nodes, default is \"-1\" meaning infinity.",
+ "overload": null,
+ "functionName": "LOOP",
+ "param": "num_loops",
+ "value": 25
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "body",
+ "id": "body",
+ "type": "Any",
+ "desc": null
+ },
+ {
+ "name": "end",
+ "id": "end",
+ "type": "Any",
+ "desc": null
+ }
+ ],
+ "path": "LOGIC_GATES/LOOPS/LOOP/LOOP.py",
+ "selected": true
+ },
+ "position": {
+ "x": 227.6964774956631,
+ "y": -20.121881497152287
+ },
+ "selected": true,
+ "positionAbsolute": {
+ "x": 227.6964774956631,
+ "y": -20.121881497152287
+ },
+ "dragging": true
+ },
+ {
+ "width": 96,
+ "height": 96,
+ "id": "APPEND-adc5b868-3b2c-41f1-9ec8-ae0a411b1a22",
+ "type": "LOGIC_GATES",
+ "data": {
+ "id": "APPEND-adc5b868-3b2c-41f1-9ec8-ae0a411b1a22",
+ "label": "APPEND",
+ "func": "APPEND",
+ "type": "LOGIC_GATES",
+ "ctrls": {},
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "primary_dp",
+ "id": "primary_dp",
+ "type": "OrderedPair|Matrix|DataFrame|Scalar|Vector",
+ "multiple": false,
+ "desc": "Input that ends up \"on top\" of the resulting DataContainer."
+ },
+ {
+ "name": "secondary_dp",
+ "id": "secondary_dp",
+ "type": "OrderedPair|Matrix|DataFrame|Scalar|Vector",
+ "multiple": false,
+ "desc": "Input that ends up \"on the bottom\" of the resulting DataContainer."
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Matrix|DataFrame|Vector",
+ "desc": null
+ }
+ ],
+ "path": "LOGIC_GATES/LOOPS/APPEND/APPEND.py",
+ "selected": false
+ },
+ "position": {
+ "x": 735.3226087858226,
+ "y": -250.41039060991284
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 735.3226087858226,
+ "y": -250.41039060991284
+ },
+ "dragging": true
+ },
+ {
+ "width": 208,
+ "height": 96,
+ "id": "FEEDBACK-dd1c23ff-8f91-4892-9f1c-8d4b91c50aa2",
+ "type": "GENERATORS",
+ "data": {
+ "id": "FEEDBACK-dd1c23ff-8f91-4892-9f1c-8d4b91c50aa2",
+ "label": "FEEDBACK",
+ "func": "FEEDBACK",
+ "type": "GENERATORS",
+ "ctrls": {
+ "referred_node": {
+ "type": "NodeReference",
+ "default": null,
+ "desc": "The node ID to capture the result from.",
+ "overload": null,
+ "functionName": "FEEDBACK",
+ "param": "referred_node",
+ "value": "APPEND-adc5b868-3b2c-41f1-9ec8-ae0a411b1a22"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "desc": null
+ }
+ ],
+ "path": "GENERATORS/SIMULATIONS/FEEDBACK/FEEDBACK.py",
+ "selected": false
+ },
+ "position": {
+ "x": 438.29263845094783,
+ "y": -163.366406533838
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 438.29263845094783,
+ "y": -163.366406533838
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "LINE-6977d433-f342-4c5a-9035-43961641c18c",
+ "type": "VISUALIZERS",
+ "data": {
+ "id": "LINE-6977d433-f342-4c5a-9035-43961641c18c",
+ "label": "LINE",
+ "func": "LINE",
+ "type": "VISUALIZERS",
+ "ctrls": {},
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|DataFrame|Matrix|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly Line visualization of the input data"
+ }
+ ],
+ "path": "VISUALIZERS/PLOTLY/LINE/LINE.py",
+ "selected": false
+ },
+ "position": {
+ "x": 973.9903536635177,
+ "y": -319.7488298823558
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 973.9903536635177,
+ "y": -319.7488298823558
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "DIODE_USB4065-83689859-e7b8-42d1-ab55-b5c7130633c9",
+ "type": "IO",
+ "data": {
+ "id": "DIODE_USB4065-83689859-e7b8-42d1-ab55-b5c7130633c9",
+ "label": "DIODE USB4065",
+ "func": "DIODE_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "DIODE_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "5.5",
+ "desc": "The accuracy of the reading in digits. Lower values are faster.",
+ "overload": null,
+ "functionName": "DIODE_USB4065",
+ "param": "digits",
+ "value": "4.5"
+ },
+ "voltage_limit": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "10"
+ ],
+ "default": "10",
+ "desc": "The maximum voltage to allow, in Volts.",
+ "overload": null,
+ "functionName": "DIODE_USB4065",
+ "param": "voltage_limit",
+ "value": "3.5"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Scalar: The DC voltage reading."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/DIODE_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": -116.51249844926463,
+ "y": -66.10396672338652
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -116.51249844926463,
+ "y": -66.10396672338652
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "DIODE_USB4065-f3d001ec-a80f-4216-886b-a260672a36e3",
+ "type": "IO",
+ "data": {
+ "id": "DIODE_USB4065-f3d001ec-a80f-4216-886b-a260672a36e3",
+ "label": "DIODE USB4065 1",
+ "func": "DIODE_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "DIODE_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "5.5",
+ "desc": "The accuracy of the reading in digits. Lower values are faster.",
+ "overload": null,
+ "functionName": "DIODE_USB4065",
+ "param": "digits",
+ "value": "4.5"
+ },
+ "voltage_limit": {
+ "type": "select",
+ "options": [
+ "3.5",
+ "10"
+ ],
+ "default": "10",
+ "desc": "The maximum voltage to allow, in Volts.",
+ "overload": null,
+ "functionName": "DIODE_USB4065",
+ "param": "voltage_limit",
+ "value": "3.5"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Scalar: The DC voltage reading."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/DIODE_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 451.32763370126673,
+ "y": -431.75316643155406
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 451.32763370126673,
+ "y": -431.75316643155406
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06b",
+ "type": "VISUALIZERS",
+ "data": {
+ "id": "BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06b",
+ "label": "BIG NUMBER",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZERS",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": true
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "VISUALIZERS/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 942.0359776564547,
+ "y": -618.7319046543057
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 942.0359776564547,
+ "y": -618.7319046543057
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "LOOP-fdac3e37-4b37-49f0-976b-38ac4759268f",
+ "sourceHandle": "body",
+ "target": "FEEDBACK-dd1c23ff-8f91-4892-9f1c-8d4b91c50aa2",
+ "targetHandle": "default",
+ "id": "reactflow__edge-LOOP-fdac3e37-4b37-49f0-976b-38ac4759268fbody-FEEDBACK-dd1c23ff-8f91-4892-9f1c-8d4b91c50aa2default"
+ },
+ {
+ "source": "FEEDBACK-dd1c23ff-8f91-4892-9f1c-8d4b91c50aa2",
+ "sourceHandle": "default",
+ "target": "APPEND-adc5b868-3b2c-41f1-9ec8-ae0a411b1a22",
+ "targetHandle": "primary_dp",
+ "id": "reactflow__edge-FEEDBACK-dd1c23ff-8f91-4892-9f1c-8d4b91c50aa2default-APPEND-adc5b868-3b2c-41f1-9ec8-ae0a411b1a22primary_dp"
+ },
+ {
+ "source": "APPEND-adc5b868-3b2c-41f1-9ec8-ae0a411b1a22",
+ "sourceHandle": "default",
+ "target": "LINE-6977d433-f342-4c5a-9035-43961641c18c",
+ "targetHandle": "default",
+ "id": "reactflow__edge-APPEND-adc5b868-3b2c-41f1-9ec8-ae0a411b1a22default-LINE-6977d433-f342-4c5a-9035-43961641c18cdefault"
+ },
+ {
+ "source": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "sourceHandle": "default",
+ "target": "DIODE_USB4065-83689859-e7b8-42d1-ab55-b5c7130633c9",
+ "targetHandle": "default",
+ "id": "reactflow__edge-CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1default-DIODE_USB4065-83689859-e7b8-42d1-ab55-b5c7130633c9default"
+ },
+ {
+ "source": "DIODE_USB4065-83689859-e7b8-42d1-ab55-b5c7130633c9",
+ "sourceHandle": "default",
+ "target": "LOOP-fdac3e37-4b37-49f0-976b-38ac4759268f",
+ "targetHandle": "default",
+ "id": "reactflow__edge-DIODE_USB4065-83689859-e7b8-42d1-ab55-b5c7130633c9default-LOOP-fdac3e37-4b37-49f0-976b-38ac4759268fdefault"
+ },
+ {
+ "source": "LOOP-fdac3e37-4b37-49f0-976b-38ac4759268f",
+ "sourceHandle": "body",
+ "target": "DIODE_USB4065-f3d001ec-a80f-4216-886b-a260672a36e3",
+ "targetHandle": "default",
+ "id": "reactflow__edge-LOOP-fdac3e37-4b37-49f0-976b-38ac4759268fbody-DIODE_USB4065-f3d001ec-a80f-4216-886b-a260672a36e3default"
+ },
+ {
+ "source": "DIODE_USB4065-f3d001ec-a80f-4216-886b-a260672a36e3",
+ "sourceHandle": "default",
+ "target": "APPEND-adc5b868-3b2c-41f1-9ec8-ae0a411b1a22",
+ "targetHandle": "secondary_dp",
+ "id": "reactflow__edge-DIODE_USB4065-f3d001ec-a80f-4216-886b-a260672a36e3default-APPEND-adc5b868-3b2c-41f1-9ec8-ae0a411b1a22secondary_dp"
+ },
+ {
+ "source": "DIODE_USB4065-f3d001ec-a80f-4216-886b-a260672a36e3",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06b",
+ "targetHandle": "default",
+ "id": "reactflow__edge-DIODE_USB4065-f3d001ec-a80f-4216-886b-a260672a36e3default-BIG_NUMBER-4f55667b-079e-4735-aa52-3bb18be8e06bdefault"
+ }
+ ],
+ "viewport": {
+ "x": 1139.470292881633,
+ "y": 572.2854272048312,
+ "zoom": 1.2136444284334926
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/examples/EX1/example.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/DIODE_USB4065/examples/EX1/example.md
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/RESISTANCE_USB4065.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/RESISTANCE_USB4065.md
new file mode 100644
index 0000000000..ecb35fce7d
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/RESISTANCE_USB4065.md
@@ -0,0 +1,57 @@
+
+[//]: # (Custom component imports)
+
+import DocString from '@site/src/components/DocString';
+import PythonCode from '@site/src/components/PythonCode';
+import AppDisplay from '@site/src/components/AppDisplay';
+import SectionBreak from '@site/src/components/SectionBreak';
+import AppendixSection from '@site/src/components/AppendixSection';
+
+[//]: # (Docstring)
+
+import DocstringSource from '!!raw-loader!./a1-[autogen]/docstring.txt';
+import PythonSource from '!!raw-loader!./a1-[autogen]/python_code.txt';
+
+{DocstringSource}
+{PythonSource}
+
+
+
+
+
+[//]: # (Examples)
+
+## Examples
+
+import Example1 from './examples/EX1/example.md';
+import App1 from '!!raw-loader!./examples/EX1/app.json';
+
+
+
+
+ {App1}
+
+
+
+
+
+
+
+
+[//]: # (Appendix)
+
+import Notes from './appendix/notes.md';
+import Hardware from './appendix/hardware.md';
+import Media from './appendix/media.md';
+
+## Appendix
+
+
+
+
+
+
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/a1-[autogen]/docstring.txt b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..703559d466
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/a1-[autogen]/docstring.txt
@@ -0,0 +1,31 @@
+The RESISTANCE_USB4065 node reads the two-wire resistance from a USB-4065.
+
+ The four-wire resistance is more accurate than two-wire and can be measured
+ with the FOUR_WIRE_RESIST_USB4065 node.
+
+ The USB-4065 is a NI (National Instruments) multimeter. It is possible that
+ the node will work with other NI DMMs (digital multimeters) such as the
+ 4070 and 4080 series.
+
+ This instrument will likely only be compatible with Windows systems due to
+ NI driver availablity. To use the instrument you must install the runtime:
+
+ https://www.ni.com/en/support/downloads/drivers/download.ni-dmm.html
+
+ You must also find the address/resource name for the instrument. You can
+ find this using the NI MAX programming which can be downloaded when
+ installing the drivers.
+
+ Parameters
+ ----------
+ NI_address: str
+ The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').
+ digits: str
+ The accuracy of the reading in digits. Lower values are faster.
+ resist_limit: str
+ The maximum resistance to allow, in Volts.
+
+ Returns
+ -------
+ DataContainer
+ Scalar: The DC voltage reading.
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/a1-[autogen]/python_code.txt b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/a1-[autogen]/python_code.txt
new file mode 100644
index 0000000000..6d6bbb1e3a
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/a1-[autogen]/python_code.txt
@@ -0,0 +1,27 @@
+from flojoy import flojoy, DataContainer, Scalar
+from flojoy.connection_manager import DeviceConnectionManager
+from typing import Optional, Literal
+import nidmm
+
+
+@flojoy(deps={"nidmm": "1.4.6"})
+def RESISTANCE_USB4065(
+ NI_address: str = "Dev1",
+ digits: Literal["4.5", "5.5", "6.5"] = "5.5",
+ resist_limit: Literal["100", "1000", "1e4", "1e5", "1e6", "1e7", "1e8"] = "1e8",
+ default: Optional[DataContainer] = None,
+) -> Scalar:
+
+
+ connection = DeviceConnectionManager.get_connection(NI_address)
+ session = connection.get_handle()
+
+ session.configure_measurement_digits(
+ nidmm.Function.TWO_WIRE_RES,
+ range=float(resist_limit),
+ resolution_digits=float(digits),
+ )
+
+ reading = session.read()
+
+ return Scalar(c=reading)
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/appendix/hardware.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/appendix/hardware.md
new file mode 100644
index 0000000000..7f78a555c4
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/appendix/hardware.md
@@ -0,0 +1 @@
+This node does not require any peripheral hardware to operate. Please see INSTRUMENTS for nodes that interact with the physical world through connected hardware.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/appendix/media.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/appendix/media.md
new file mode 100644
index 0000000000..8bcee9be90
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/appendix/media.md
@@ -0,0 +1 @@
+No supporting screenshots, photos, or videos have been added to the media.md file for this node.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/appendix/notes.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/appendix/notes.md
new file mode 100644
index 0000000000..04aded2ec9
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/appendix/notes.md
@@ -0,0 +1 @@
+No theory or technical notes have been contributed for this node yet.
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/examples/EX1/app.json b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/examples/EX1/app.json
new file mode 100644
index 0000000000..7ee5bc2698
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/examples/EX1/app.json
@@ -0,0 +1,266 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "type": "IO",
+ "data": {
+ "id": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "label": "CONNECTION USB4065",
+ "func": "CONNECTION_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "CONNECTION_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "desc": "Optional: None"
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/CONNECTION_USB4065/CONNECTION_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 4.704499736461486,
+ "y": -114.58793327290465
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 4.704499736461486,
+ "y": -114.58793327290465
+ },
+ "dragging": true
+ },
+ {
+ "width": 380,
+ "height": 293,
+ "id": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "type": "VISUALIZERS",
+ "data": {
+ "id": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "label": "BIG NUMBER 1",
+ "func": "BIG_NUMBER",
+ "type": "VISUALIZERS",
+ "ctrls": {
+ "suffix": {
+ "type": "str",
+ "default": null,
+ "desc": "any suffix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "suffix",
+ "value": ""
+ },
+ "prefix": {
+ "type": "str",
+ "default": null,
+ "desc": "any prefix to show with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "prefix",
+ "value": ""
+ },
+ "title": {
+ "type": "str",
+ "default": null,
+ "desc": "title of the plot, default = \"BIG_NUMBER\"",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "title",
+ "value": ""
+ },
+ "relative_delta": {
+ "type": "bool",
+ "default": true,
+ "desc": "whether or not to show the relative delta from the last run along with big number",
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "relative_delta",
+ "value": true
+ },
+ "scientific_notation": {
+ "type": "bool",
+ "default": false,
+ "desc": null,
+ "overload": null,
+ "functionName": "BIG_NUMBER",
+ "param": "scientific_notation",
+ "value": true
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "OrderedPair|Scalar|Vector",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized"
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Plotly",
+ "desc": "the DataContainer containing the Plotly big number visualization"
+ }
+ ],
+ "path": "VISUALIZERS/PLOTLY/BIG_NUMBER/BIG_NUMBER.py",
+ "selected": false
+ },
+ "position": {
+ "x": 779.8328146881206,
+ "y": -134.05091491913146
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 779.8328146881206,
+ "y": -134.05091491913146
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "RESISTANCE_USB4065-be7ec375-8dda-4e2a-b1e9-4b25945441d3",
+ "type": "IO",
+ "data": {
+ "id": "RESISTANCE_USB4065-be7ec375-8dda-4e2a-b1e9-4b25945441d3",
+ "label": "RESISTANCE USB4065",
+ "func": "RESISTANCE_USB4065",
+ "type": "IO",
+ "ctrls": {
+ "NI_address": {
+ "type": "str",
+ "default": "Dev1",
+ "desc": "The NI instrument address for the instrument (e.g. 'Dev0', 'Dev1').",
+ "overload": null,
+ "functionName": "RESISTANCE_USB4065",
+ "param": "NI_address",
+ "value": "Dev1"
+ },
+ "digits": {
+ "type": "select",
+ "options": [
+ "4.5",
+ "5.5",
+ "6.5"
+ ],
+ "default": "5.5",
+ "desc": "The accuracy of the reading in digits. Lower values are faster.",
+ "overload": null,
+ "functionName": "RESISTANCE_USB4065",
+ "param": "digits",
+ "value": "4.5"
+ },
+ "resist_limit": {
+ "type": "select",
+ "options": [
+ "100",
+ "1000",
+ "1e4",
+ "1e5",
+ "1e6",
+ "1e7",
+ "1e8"
+ ],
+ "default": "1e8",
+ "desc": "The maximum resistance to allow, in Volts.",
+ "overload": null,
+ "functionName": "RESISTANCE_USB4065",
+ "param": "resist_limit",
+ "value": "100"
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Scalar",
+ "desc": "Scalar: The DC voltage reading."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "nidmm",
+ "v": "1.4.6"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/RESISTANCE_USB4065.py",
+ "selected": false
+ },
+ "position": {
+ "x": 383.1035717255011,
+ "y": -122.14124419049455
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 383.1035717255011,
+ "y": -122.14124419049455
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1",
+ "sourceHandle": "default",
+ "target": "RESISTANCE_USB4065-be7ec375-8dda-4e2a-b1e9-4b25945441d3",
+ "targetHandle": "default",
+ "id": "reactflow__edge-CONNECTION_USB4065-33140410-b4f4-4e67-8613-7559b997c8e1default-RESISTANCE_USB4065-be7ec375-8dda-4e2a-b1e9-4b25945441d3default"
+ },
+ {
+ "source": "RESISTANCE_USB4065-be7ec375-8dda-4e2a-b1e9-4b25945441d3",
+ "sourceHandle": "default",
+ "target": "BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085dec",
+ "targetHandle": "default",
+ "id": "reactflow__edge-RESISTANCE_USB4065-be7ec375-8dda-4e2a-b1e9-4b25945441d3default-BIG_NUMBER-58ecefea-6da3-4e07-b581-b9796f085decdefault"
+ }
+ ],
+ "viewport": {
+ "x": 1139.470292881633,
+ "y": 572.2854272048312,
+ "zoom": 1.2136444284334926
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/examples/EX1/example.md b/docs/nodes/IO/INSTRUMENTS/MULTIMETERS/NI/USB_4065/BASIC/RESISTANCE_USB4065/examples/EX1/example.md
new file mode 100644
index 0000000000..e69de29bb2
diff --git a/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/REPLACE_SUBSET/a1-[autogen]/python_code.txt b/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/REPLACE_SUBSET/a1-[autogen]/python_code.txt
index 5ad01e7d45..1d2b394b25 100644
--- a/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/REPLACE_SUBSET/a1-[autogen]/python_code.txt
+++ b/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/REPLACE_SUBSET/a1-[autogen]/python_code.txt
@@ -6,7 +6,7 @@ from flojoy import flojoy, Vector, Array
def REPLACE_SUBSET(
default: Vector, indices: Array, values: Array, length: int = 1
) -> Vector:
-
+
# unwrap the indices first
indices = array(indices.unwrap(), dtype=int)
# unwrap the values next
diff --git a/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_DELETE/a1-[autogen]/python_code.txt b/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_DELETE/a1-[autogen]/python_code.txt
index 73d4e39b0a..91f99894a0 100644
--- a/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_DELETE/a1-[autogen]/python_code.txt
+++ b/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_DELETE/a1-[autogen]/python_code.txt
@@ -4,7 +4,7 @@ from flojoy import flojoy, Vector, Array
@flojoy
def VECTOR_DELETE(default: Vector, indices: Array, length: int = 1) -> Vector:
-
+
# unwrap the indices first
indices = array(indices.unwrap(), dtype=int)
diff --git a/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_INDEXING/a1-[autogen]/python_code.txt b/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_INDEXING/a1-[autogen]/python_code.txt
index 4b322d17e6..873aa60acc 100644
--- a/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_INDEXING/a1-[autogen]/python_code.txt
+++ b/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_INDEXING/a1-[autogen]/python_code.txt
@@ -7,6 +7,7 @@ def VECTOR_INDEXING(
index: int = 0,
) -> Scalar:
+
assert (
len(default.v) > index
), "The index parameter must be less than the length of the Vector."
diff --git a/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_INSERT/a1-[autogen]/docstring.txt b/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_INSERT/a1-[autogen]/docstring.txt
index 1130a7e589..c8ac816d43 100644
--- a/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_INSERT/a1-[autogen]/docstring.txt
+++ b/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_INSERT/a1-[autogen]/docstring.txt
@@ -18,4 +18,3 @@ The VECTOR_INSERT node inserts a value to the Vector at the
-------
Vector
The new vector that contains the inserted value
-
diff --git a/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_INSERT/a1-[autogen]/python_code.txt b/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_INSERT/a1-[autogen]/python_code.txt
index 938f608f5e..7c3e7123ca 100644
--- a/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_INSERT/a1-[autogen]/python_code.txt
+++ b/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_INSERT/a1-[autogen]/python_code.txt
@@ -4,7 +4,7 @@ from flojoy import flojoy, Vector
@flojoy
def VECTOR_INSERT(default: Vector, index: int = 0, value: int = 0) -> Vector:
-
+
assert (
len(default.v) > index
), "The index parameter must be less than the length of the Vector."
diff --git a/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_SUBSET/a1-[autogen]/python_code.txt b/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_SUBSET/a1-[autogen]/python_code.txt
index fec8c7c2bb..0c1090d122 100644
--- a/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_SUBSET/a1-[autogen]/python_code.txt
+++ b/docs/nodes/TRANSFORMERS/VECTOR_MANIPULATION/VECTOR_SUBSET/a1-[autogen]/python_code.txt
@@ -4,7 +4,7 @@ from flojoy import flojoy, Vector, Array
@flojoy
def VECTOR_SUBSET(default: Vector, indices: Array, length: int = 1) -> Vector:
-
+
# unwrap the indices first
indices = array(indices.unwrap(), dtype=int)