diff --git a/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/ATTENUATION_LDA602.md b/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/ATTENUATION_LDA602.md
new file mode 100644
index 0000000000..65a59f748b
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/ATTENUATION_LDA602.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/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/a1-[autogen]/docstring.txt b/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/a1-[autogen]/docstring.txt
new file mode 100644
index 0000000000..5e47221917
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/a1-[autogen]/docstring.txt
@@ -0,0 +1,21 @@
+The ATTENUATION_LDA602 node sets or queries the attenuation for the LDA-602 Digital Attenuator.
+
+ When setting the attenuation, the attenuation is then queried to ensure
+ the attenuation was set correctly.
+ The attenuation is rounded to the nearest 0.5 dB.
+
+ This node should also work with compatible LDA attenuators (untested).
+
+ Parameters
+ ----------
+ serial_number: str
+ The serial number (not model number) to connect to.
+ query_set: str
+ Query or set the attenuation?
+ attenuation: str
+ The attenuation to set the LDA to, in dB.
+
+ Returns
+ -------
+ DataContainer
+ TextBlob: The current attenuation value.
diff --git a/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/a1-[autogen]/python_code.txt b/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/a1-[autogen]/python_code.txt
new file mode 100644
index 0000000000..6f37bff80c
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/a1-[autogen]/python_code.txt
@@ -0,0 +1,51 @@
+from flojoy import flojoy, DataContainer, TextBlob
+from typing import Optional, Literal
+from qcodes_contrib_drivers.drivers.Vaunix.LDA import Vaunix_LDA
+import platform
+from numpy import allclose
+from os import path
+
+
+@flojoy(deps={"qcodes-contrib-drivers": "0.18.0"})
+def ATTENUATION_LDA602(
+ serial_number: int = 839,
+ query_set: Literal["query", "set"] = "query",
+ attenuation: float = 10.0,
+ default: Optional[DataContainer] = None,
+) -> TextBlob:
+
+
+ assert (
+ platform.system() == "Windows" and platform.architecture()[0] == "64bit"
+ ), "This node currently supports only 64bit Windows."
+
+ driver_path = path.dirname(__file__)
+
+ assert path.isfile(
+ path.join(driver_path, "VNX_atten64.dll")
+ ), f"Ensure the dll file is placed here: {driver_path}"
+
+ if query_set == "set":
+ assert (
+ 0.0 <= attenuation <= 63.0
+ ), f"The attenuation must be between 0 and 63 (set point: {attenuation})."
+
+ attenuator = Vaunix_LDA("LDA", serial_number, dll_path=driver_path)
+
+ match query_set:
+ case "query":
+ result = round(attenuator.attenuation() * 5, 2)
+ s = f"Set to {round(attenuator.attenuation() * 5, 2)} dB"
+ case "set":
+ attenuator.attenuation(attenuation)
+ result = round(attenuator.attenuation() * 5, 2)
+
+ assert allclose(
+ result, attenuation, rtol=0.1
+ ), f"Resulting attenuation {result} is far from the set point {attenuation}"
+
+ s = f"Set to {result} dB"
+
+ attenuator.close()
+
+ return TextBlob(text_blob=s)
diff --git a/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/appendix/hardware.md b/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/appendix/hardware.md
new file mode 100644
index 0000000000..7f78a555c4
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/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/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/appendix/media.md b/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/appendix/media.md
new file mode 100644
index 0000000000..8bcee9be90
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/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/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/appendix/notes.md b/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/appendix/notes.md
new file mode 100644
index 0000000000..04aded2ec9
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/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/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/examples/EX1/app.json b/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/examples/EX1/app.json
new file mode 100644
index 0000000000..ba5befedf5
--- /dev/null
+++ b/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/examples/EX1/app.json
@@ -0,0 +1,266 @@
+{
+ "rfInstance": {
+ "nodes": [
+ {
+ "width": 192,
+ "height": 192,
+ "id": "ATTENUATION_LDA602-01a70384-a7a8-455e-afc5-58354a065a14",
+ "type": "IO",
+ "data": {
+ "id": "ATTENUATION_LDA602-01a70384-a7a8-455e-afc5-58354a065a14",
+ "label": "set ATTENUATION LDA602",
+ "func": "ATTENUATION_LDA602",
+ "type": "IO",
+ "ctrls": {
+ "serial_number": {
+ "type": "int",
+ "default": 839,
+ "desc": "The serial number to connect to.",
+ "overload": null,
+ "functionName": "ATTENUATION_LDA602",
+ "param": "serial_number",
+ "value": 839
+ },
+ "query_set": {
+ "type": "select",
+ "options": [
+ "query",
+ "set"
+ ],
+ "default": "query",
+ "desc": "Query or set the attenuation.",
+ "overload": null,
+ "functionName": "ATTENUATION_LDA602",
+ "param": "query_set",
+ "value": "set"
+ },
+ "attenuation": {
+ "type": "float",
+ "default": 10,
+ "desc": "The actual set attenuation of the LDA.",
+ "overload": null,
+ "functionName": "ATTENUATION_LDA602",
+ "param": "attenuation",
+ "value": 63
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "TextBlob: The current attenuation value."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "qcodes-contrib-drivers",
+ "v": "0.18.0"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/ATTENUATION_LDA602.py",
+ "selected": false
+ },
+ "position": {
+ "x": -274.44438190773985,
+ "y": -73.26626661266889
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": -274.44438190773985,
+ "y": -73.26626661266889
+ },
+ "dragging": true
+ },
+ {
+ "width": 192,
+ "height": 192,
+ "id": "ATTENUATION_LDA602-9fb837d5-04fa-499b-9690-e6bb317f470b",
+ "type": "IO",
+ "data": {
+ "id": "ATTENUATION_LDA602-9fb837d5-04fa-499b-9690-e6bb317f470b",
+ "label": "query ATTENUATION LDA602",
+ "func": "ATTENUATION_LDA602",
+ "type": "IO",
+ "ctrls": {
+ "serial_number": {
+ "type": "int",
+ "default": 839,
+ "desc": "The serial number to connect to.",
+ "overload": null,
+ "functionName": "ATTENUATION_LDA602",
+ "param": "serial_number",
+ "value": 839
+ },
+ "query_set": {
+ "type": "select",
+ "options": [
+ "query",
+ "set"
+ ],
+ "default": "query",
+ "desc": "Query or set the attenuation.",
+ "overload": null,
+ "functionName": "ATTENUATION_LDA602",
+ "param": "query_set",
+ "value": "query"
+ },
+ "attenuation": {
+ "type": "float",
+ "default": 10,
+ "desc": "The actual set attenuation of the LDA.",
+ "overload": null,
+ "functionName": "ATTENUATION_LDA602",
+ "param": "attenuation",
+ "value": 63
+ }
+ },
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "Any",
+ "multiple": false,
+ "desc": null
+ }
+ ],
+ "outputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "desc": "TextBlob: The current attenuation value."
+ }
+ ],
+ "pip_dependencies": [
+ {
+ "name": "qcodes-contrib-drivers",
+ "v": "0.18.0"
+ }
+ ],
+ "path": "IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/ATTENUATION_LDA602.py",
+ "selected": false
+ },
+ "position": {
+ "x": 130.34293392154294,
+ "y": -72.57866849978348
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 130.34293392154294,
+ "y": -72.57866849978348
+ },
+ "dragging": true
+ },
+ {
+ "width": 384,
+ "height": 288,
+ "id": "TEXT_VIEW-81987d18-dee4-4ad7-97b6-d9e578af8cd9",
+ "type": "VISUALIZERS",
+ "data": {
+ "id": "TEXT_VIEW-81987d18-dee4-4ad7-97b6-d9e578af8cd9",
+ "label": "TEXT VIEW",
+ "func": "TEXT_VIEW",
+ "type": "VISUALIZERS",
+ "ctrls": {},
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized in text format"
+ }
+ ],
+ "path": "VISUALIZERS/DATA_STRUCTURE/TEXT_VIEW/TEXT_VIEW.py",
+ "selected": false
+ },
+ "position": {
+ "x": 491.92005634995985,
+ "y": -121.10237142182902
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 491.92005634995985,
+ "y": -121.10237142182902
+ },
+ "dragging": true
+ },
+ {
+ "width": 384,
+ "height": 288,
+ "id": "TEXT_VIEW-e35abb45-2e39-4860-8788-fa174df6738f",
+ "type": "VISUALIZERS",
+ "data": {
+ "id": "TEXT_VIEW-e35abb45-2e39-4860-8788-fa174df6738f",
+ "label": "TEXT VIEW 1",
+ "func": "TEXT_VIEW",
+ "type": "VISUALIZERS",
+ "ctrls": {},
+ "initCtrls": {},
+ "inputs": [
+ {
+ "name": "default",
+ "id": "default",
+ "type": "TextBlob",
+ "multiple": false,
+ "desc": "the DataContainer to be visualized in text format"
+ }
+ ],
+ "path": "VISUALIZERS/DATA_STRUCTURE/TEXT_VIEW/TEXT_VIEW.py",
+ "selected": false
+ },
+ "position": {
+ "x": 118.78073739813146,
+ "y": -370.56072994021326
+ },
+ "selected": false,
+ "positionAbsolute": {
+ "x": 118.78073739813146,
+ "y": -370.56072994021326
+ },
+ "dragging": true
+ }
+ ],
+ "edges": [
+ {
+ "source": "ATTENUATION_LDA602-01a70384-a7a8-455e-afc5-58354a065a14",
+ "sourceHandle": "default",
+ "target": "ATTENUATION_LDA602-9fb837d5-04fa-499b-9690-e6bb317f470b",
+ "targetHandle": "default",
+ "id": "reactflow__edge-ATTENUATION_LDA602-01a70384-a7a8-455e-afc5-58354a065a14default-ATTENUATION_LDA602-9fb837d5-04fa-499b-9690-e6bb317f470bdefault"
+ },
+ {
+ "source": "ATTENUATION_LDA602-9fb837d5-04fa-499b-9690-e6bb317f470b",
+ "sourceHandle": "default",
+ "target": "TEXT_VIEW-81987d18-dee4-4ad7-97b6-d9e578af8cd9",
+ "targetHandle": "default",
+ "id": "reactflow__edge-ATTENUATION_LDA602-9fb837d5-04fa-499b-9690-e6bb317f470bdefault-TEXT_VIEW-81987d18-dee4-4ad7-97b6-d9e578af8cd9default"
+ },
+ {
+ "source": "ATTENUATION_LDA602-01a70384-a7a8-455e-afc5-58354a065a14",
+ "sourceHandle": "default",
+ "target": "TEXT_VIEW-e35abb45-2e39-4860-8788-fa174df6738f",
+ "targetHandle": "default",
+ "id": "reactflow__edge-ATTENUATION_LDA602-01a70384-a7a8-455e-afc5-58354a065a14default-TEXT_VIEW-e35abb45-2e39-4860-8788-fa174df6738fdefault"
+ }
+ ],
+ "viewport": {
+ "x": 1139.470292881633,
+ "y": 572.2854272048312,
+ "zoom": 1.2136444284334926
+ }
+ }
+}
\ No newline at end of file
diff --git a/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/examples/EX1/example.md b/docs/nodes/IO/INSTRUMENTS/ATTENUATORS/LDA/LDA602/ATTENUATION_LDA602/examples/EX1/example.md
new file mode 100644
index 0000000000..e69de29bb2
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/LOADERS/LOCAL_FILE_SYSTEM/LOCAL_FILE/a1-[autogen]/docstring.txt b/docs/nodes/LOADERS/LOCAL_FILE_SYSTEM/LOCAL_FILE/a1-[autogen]/docstring.txt
index ae310eab3f..b4e8a6d8dd 100644
--- a/docs/nodes/LOADERS/LOCAL_FILE_SYSTEM/LOCAL_FILE/a1-[autogen]/docstring.txt
+++ b/docs/nodes/LOADERS/LOCAL_FILE_SYSTEM/LOCAL_FILE/a1-[autogen]/docstring.txt
@@ -23,4 +23,3 @@ The LOCAL_FILE node loads a local file of a different type and converts it to a
Image for file_type 'image'.
Grayscale from file_type 'Grayscale'.
DataFrame for file_type 'json', 'csv'.
- DataFrame for file_type 'json', 'csv', 'excel', and 'xml'.