Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
app-notes:set-up-snmp [2025/01/23 14:44] – [4. Setting up an LXC container and then implementing Node RED] grayapp-notes:set-up-snmp [2025/07/10 14:29] (current) – [4. Setting up an LXC container and then implementing Node RED] gray
Line 14: Line 14:
  
   * NetModule Wireless Router with wireless connection   * NetModule Wireless Router with wireless connection
-  * NetModule Software [[https://share.netmodule.com/public/system-software/4.8/|4.8.0.x]] or newer+  * NetModule Software [[https://share.netmodule.com/public/system-software/4.9/|4.9.0.102]] or newer
   * A license is required for the LXC container   * A license is required for the LXC container
   * Not available for legacy products NB1600, NB2700, NB3700, NB3710   * Not available for legacy products NB1600, NB2700, NB3700, NB3710
 +
 +**
 +<WRAP center round important 95%>
 +The wiki was tested with router software 4.9.0.102 and the LXC container with Debian armhf bookworn.
 +</WRAP>
 +**
  
 ===== - Set up SNMP on the router ===== ===== - Set up SNMP on the router =====
Line 55: Line 61:
  
   * NetModule manual 4.8.0.103 [[https://share.netmodule.com/public/system-software/4.8/4.8.0.103/NB2800_Manual_4.8.0.103.pdf| Manual PDF]]    * NetModule manual 4.8.0.103 [[https://share.netmodule.com/public/system-software/4.8/4.8.0.103/NB2800_Manual_4.8.0.103.pdf| Manual PDF]] 
 +
 +----
  
 ===== - Setting up the SNMP client side for the query ===== ===== - Setting up the SNMP client side for the query =====
Line 125: Line 133:
 VENDOR-MIB.txt VENDOR-MIB.txt
 </konsole> </konsole>
 +
 +----
  
 ===== - Run some SNMP queries for testing and to see which queries are possible ===== ===== - Run some SNMP queries for testing and to see which queries are possible =====
Line 171: Line 181:
 </konsole> </konsole>
  
 +----
  
 ===== - Setting up an LXC container and then implementing Node RED ===== ===== - Setting up an LXC container and then implementing Node RED =====
Line 179: Line 189:
 ---- ----
  
-* Set up an LXC container / [[app-notes:set-up-lxc]]+      * Set up an LXC container / [[app-notes:set-up-lxc]]
  
 ---- ----
Line 185: Line 195:
 Once the LXC container has been installed, we can install Node-RED. Once the LXC container has been installed, we can install Node-RED.
  
- +For further installation, we need the ''curl'' program and the ''npm'' package on the container. We will then deploy Node-RED on the router using a script.
-For the further installation, we need the ''curl'' program on the container. We will then roll out Node-RED on the router using a script.+
  
 <konsole> <konsole>
Line 201: Line 210:
 root@LXCNAME:/# root@LXCNAME:/#
 </konsole> </konsole>
 +
 +<konsole>
 +root@LXCNAME:/# apt install npm 
 +Reading package lists... Done
 +Building dependency tree... Done
 +Reading state information... Done
 +The following additional packages will be installed:
 +binutils binutils-arm-linux-gnueabihf binutils-common build-essential
 +...
 +x11-utils x11-xserver-utils xdg-user-dirs xdg-utils xz-utils zutty
 +0 upgraded, 614 newly installed, 0 to remove and 0 not upgraded.
 +Need to get 169 MB of archives.
 +After this operation, 684 MB of additional disk space will be used.
 +...
 +done.
 +root@LXCNAME:/#
 +</konsole>
 +
  
 Next, the Node-RED program is installed via a script file. Next, the Node-RED program is installed via a script file.
 +
 +Further information on the installation script can be found at this link.
 +
 + * Node-RED script information [[https://github.com/node-red/linux-installers| github link]] 
 +
 +**
 +<WRAP center round important 70%>
 +Node-RED core is installed in version 4.0.9 and Node.js in version 18.19.0.
 +</WRAP>
 +**
  
 The script command for this: The script command for this:
-''bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered) --node18"''+<code> 
 +bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/ 
 +master/deb/update-nodejs-and-nodered)  
 +</code>
  
 <konsole> <konsole>
Line 215: Line 255:
  
 Are you really sure you want to install as root ? (y/N) ? ''y'' Are you really sure you want to install as root ? (y/N) ? ''y''
 +</konsole>
  
-If I want to see the installation steps, please also say ''yes'' here 
  
 +
 +<konsole>
 +If I want to see the installation steps, please also say ''yes'' here
 Are you really sure you want to do this ? [y/N] ? ''y'' Are you really sure you want to do this ? [y/N] ? ''y''
  
 I don't have a Pi where I install Node-RED on it, so ''no'' here I don't have a Pi where I install Node-RED on it, so ''no'' here
- 
 Would you like to install the Pi-specific nodes ? [y/N] ? ''n'' Would you like to install the Pi-specific nodes ? [y/N] ? ''n''
 +</konsole>
  
 +<konsole>
 Running Node-RED update for user root at /root on debian Running Node-RED update for user root at /root on debian
-Stop Node-RED                       \u2714+  Stop Node-RED                       \u2714
   Remove old version of Node-RED      \u2714   Remove old version of Node-RED      \u2714
-  Remove old version of Node.js       \u2714   20.18.2-1nodesource1 +  Remove old version of Node.js       \u2714   18.19.0+dfsg-6~deb12u2 
-  Install Node 18.20.6-1nodesource1   \u2714   v18.20.  Npm 10.8.2+  Install Node 18.20.6-1nodesource1   \u2714   v18.20.  Npm 10.8.2
   Clean npm cache                     \u2714   Clean npm cache                     \u2714
-  Install Node-RED core               \u2714   4.0.8+  Install Node-RED core               \u2714   4.0.9
   Move global nodes to local          -   Move global nodes to local          -
   Npm rebuild existing nodes          \u2714   Npm rebuild existing nodes          \u2714
   Install extra Pi nodes              -   Install extra Pi nodes              -
   Add shortcut commands               \u2714   Add shortcut commands               \u2714
-  Update systemd script               \u2714 +  Update systemd script               \u2714                                      
-                                       +  Any errors will be logged to   /var/log/nodered-install.log
-Any errors will be logged to   /var/log/nodered-install.log+
 All done. All done.
 </konsole> </konsole>
 +
 +Further settings for the Node-Red interface 
 +
 +The script command for this: 
 +<code>
 +root@LXCNAME:~# node-red admin init
 +</code>
 +
 +<konsole>
 +✔ Settings file · /root/.node-red/settings.js
 +? That file already exists. Are you sure you want to overwrite it? … 
 +▸ Yes
 +▸ No
 +
 +User Security
 +=============
 +? Do you want to setup user security? … 
 +▸ Yes
 +▸ No
 +</konsole>
 +
 +<konsole>
 +✔ Do you want to setup user security? · Yes
 +✔ Username · admin
 +✔ Password · *********
 +? User permissions … 
 +▸ full access
 +▸ read-only access
 +
 +? Add another user? … 
 +▸ Yes
 +▸ No
 +</konsole>
 +
 +<konsole>
 +✔ Do you want to enable the Projects feature? … 
 +▸ Yes
 +▸ No
 +
 +✔ Do you want to enable the Projects feature? · Yes
 +? What project workflow do you want to use? … 
 +▸ manual - you must manually commit changes
 +▸ auto - changes are automatically committed
 +</konsole>
 +
 +<konsole>
 +Editor settings
 +===============
 +? Select a theme for the editor. To use any theme other than "default", you will need to install @node-red-contrib-themes/theme-collection in your Node-RED user directory. … 
 +▸ default
 +* aurora
 +* cobalt2
 +* dark
 +* dracula
 +* espresso-libre
 +* midnight-red
 +* monoindustrial
 +* monokai
 +* oceanic-next
 +* oled
 +* solarized-dark
 +* solarized-light
 +* tokyo-night
 +* zenburn
 +</konsole>
 +
 +<konsole>
 +✔ Select the text editor component to use in the Node-RED Editor … 
 +▸ monaco (default)
 +▸ ace
 +
 +Node settings
 +=============
 +? Allow Function nodes to load external modules? (functionExternalModules) … 
 +▸ Yes
 +▸ No
 +</konsole>
 +
 +
  
 If you want to test the whole thing first, you can start the Node-RED server manually by entering the command ''"node-red-start"'' If you want to test the whole thing first, you can start the Node-RED server manually by entering the command ''"node-red-start"''
Line 251: Line 373:
 </konsole> </konsole>
  
 +If you want this to happen automatically when you start the LXC container, you have to set it up with the command ''"systemctl enable nodered.service"''.
  
 +<konsole>
 +root@LXCNAME:/# systemctl enable nodered.service
 +Created symlink /etc/systemd/system/multi-user.target.wants/nodered.service → /lib/systemd/system/nodered.service.
 +root@LXCNAME:/#
 +</konsole>
 +
 +Once you have stored the systemctl for Node-RED, you still have to restart the container for the service to start.
 +
 +You can access the Node-RED interface via a web browser. Simply enter the IP address of the container and port 1880.
 +
 +The Node-RED interface will then be displayed.
 +
 +{{:pictures:node-red.png?800|}}
 +
 +----
 +
 +
 +===== - Installing further app-nodes via palette management =====
 +
 +For Node-RED, further ''"app nodes"'' need to be installed.
 +
 +On the right side of the web interface, you can install additional nodes for Node-RED.
 +A tab opens under point 1. You can install the nodes under point 2.
 +
 +{{ :app-notes:nodes_install.png?400 |}}
 +
 +A separate window will open for the installation, where you can carry out the installation.
 +The ''“Installation”'' item is responsible for installation. You can search for existing nodes and install them under the search field in item 2.
 +
 +{{:app-notes:snmp_node_install.png?800|}}
 +
 +After installation, the new nodes are available on the left side of the web interface.
 +
 +{{ :app-notes:new_nodes_snmp.png?400 |}}
 +
 +----
 +
 +This SNMP example can be inserted using the Import function.
 +The tab is located on the rights page of the web interface.
 +
 +{{ :app-notes:snmp_import.png?400 |}}
 +
 +A separate window will open again. You can import a file or copy the code directly into the field.
 +
 +{{ :app-notes:code_import.png?800 |}}
 +
 +You can copy the code directly into the field here.
 +
 +<code - snmp_flow.json>
 +[
 +    {
 +        "id": "0f8b45d24400e10c",
 +        "type": "inject",
 +        "z": "d569c6febec62c83",
 +        "name": "",
 +        "props": [
 +            {
 +                "p": "payload"
 +            }
 +        ],
 +        "repeat": "",
 +        "crontab": "",
 +        "once": false,
 +        "onceDelay": 0.1,
 +        "topic": "",
 +        "payload": "",
 +        "payloadType": "date",
 +        "x": 380,
 +        "y": 2920,
 +        "wires": [
 +            [
 +                "610cbd94bd2086d8",
 +                "c404300970958915"
 +            ]
 +        ]
 +    },
 +    {
 +        "id": "610cbd94bd2086d8",
 +        "type": "snmp",
 +        "z": "d569c6febec62c83",
 +        "host": "192.168.1.1",
 +        "version": "2c",
 +        "timeout": 5,
 +        "community": "admin",
 +        "auth": "noAuthNoPriv",
 +        "authprot": "MD5",
 +        "privprot": "DES",
 +        "oids": "1.3.6.1.4.1.31496.10.40.3.0",
 +        "name": "Serial Number 192.168.1.1",
 +        "x": 660,
 +        "y": 2920,
 +        "wires": [
 +            [
 +                "0122e94d25b84f22"
 +            ]
 +        ]
 +    },
 +    {
 +        "id": "c404300970958915",
 +        "type": "snmp walker",
 +        "z": "d569c6febec62c83",
 +        "host": "192.168.1.1",
 +        "version": "2c",
 +        "timeout": 5,
 +        "community": "admin",
 +        "auth": "noAuthNoPriv",
 +        "authprot": "MD5",
 +        "privprot": "DES",
 +        "oids": "1.3.6.1.4.1.31496",
 +        "name": "",
 +        "x": 650,
 +        "y": 3060,
 +        "wires": [
 +            [
 +                "99c7a99a86a6fcc4"
 +            ]
 +        ]
 +    },
 +    {
 +        "id": "0122e94d25b84f22",
 +        "type": "debug",
 +        "z": "d569c6febec62c83",
 +        "name": "Serial Number",
 +        "active": true,
 +        "tosidebar": true,
 +        "console": false,
 +        "tostatus": false,
 +        "complete": "payload",
 +        "targetType": "msg",
 +        "statusVal": "",
 +        "statusType": "auto",
 +        "x": 960,
 +        "y": 2920,
 +        "wires": []
 +    },
 +    {
 +        "id": "99c7a99a86a6fcc4",
 +        "type": "debug",
 +        "z": "d569c6febec62c83",
 +        "name": "debug 2",
 +        "active": true,
 +        "tosidebar": true,
 +        "console": false,
 +        "tostatus": false,
 +        "complete": "false",
 +        "statusVal": "",
 +        "statusType": "auto",
 +        "x": 940,
 +        "y": 3060,
 +        "wires": []
 +    }
 +]
 +</code>
 +
 +After execution, these objects are stored in the flow.
 +
 +{{ :app-notes:snmp_flow.png?800 |}}
 +
 +When this node is executed, the serial number is output by the router under this OID.
 +
 +{{ :app-notes:snmp_debug.png?400 |}}
 +
 +----
 +
 +===== - Receiving SNMP traps in Node-RED =====
 +
 +
 +For SNMP traps, the node ''“snmp-trap-listener”'' must be installed.
 +
 +{{ :app-notes:snmp_trap_install.png?800 |}}
 +
 +On the lens side of the web interface, the nodes are added under ''“Input”''.
 +
 +{{ :app-notes:snmp_trap_flow.png?400 |}}
 +
 +----
 +
 +Insert the node back into the flow using the import function.
 +
 +<code - trap_flow.json>
 +[
 +    {
 +        "id": "f34feb8de1ea8e2b",
 +        "type": "snmp-trap-listener",
 +        "z": "2a7afdf73f55f989",
 +        "port": 162,
 +        "snmpV1": false,
 +        "snmpV2": false,
 +        "snmpV3": true,
 +        "communities": [
 +            {
 +                "community": "admin"
 +            }
 +        ],
 +        "users": [
 +            {
 +                "name": "admin",
 +                "authProtocol": "sha",
 +                "authKey": "admin2025",
 +                "privProtocol": "aes",
 +                "privKey": "admin2025"
 +            }
 +        ],
 +        "ipfilter": "192.168.1.0",
 +        "ipmask": "24",
 +        "x": 370,
 +        "y": 520,
 +        "wires": [
 +            [
 +                "d4affa97afa2f8a9"
 +            ]
 +        ]
 +    },
 +    {
 +        "id": "d4affa97afa2f8a9",
 +        "type": "debug",
 +        "z": "2a7afdf73f55f989",
 +        "name": "Digital DO1",
 +        "active": true,
 +        "tosidebar": true,
 +        "console": false,
 +        "tostatus": false,
 +        "complete": "payload",
 +        "targetType": "msg",
 +        "statusVal": "",
 +        "statusType": "auto",
 +        "x": 630,
 +        "y": 520,
 +        "wires": []
 +    }
 +]
 +</code>
 +
 +After execution, these objects are stored in the flow. 
 +
 +{{ :app-notes:snmp_trap_import.png?800 |}}
 +
 +----
 +
 +Store an SNMP trap event on the router for Dio-out1.
 +
 +{{ :app-notes:snmp_events_trap.png?800 |}}
 +
 +Under tcpdump, make a recording of the SNMP trap when switching from dio-out1.
 +
 +<konsole>
 +$ tcpdump -i any -n  port 162
 +tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
 +listening on any, link-type LINUX_SLL (Linux cooked v1), capture size 262144 bytes
 +00:27:14.842826 IP 192.168.1.1.55303 > 192.168.1.100.162:  F=ap U="admin" [!scoped PDU]aa_86_be_0e_08_24_23_1d_15_aa_40_02_bc_4d_ff_c7_cd_4d_c2_af_9c_e3_37_c8_75_00_ff_a2_07_d9_df_c9_38_ab_27_d8_b0_a2_0f_08_31_cb_eb_2b_f5_53_d4_4e_6e_e6_15_40_9b_75_c8_02_e2_12_a7_48_2e_65_ad_6f_e7_aa_7a_f6_64_71_ef_4f_13_53_27_0c_15_78_fb_16_ef_aa_e0_5c
 +00:27:14.842907 IP 192.168.1.1.55303 > 192.168.1.100.162:  F=ap U="admin" [!scoped PDU]aa_86_be_0e_08_24_23_1d_15_aa_40_02_bc_4d_ff_c7_cd_4d_c2_af_9c_e3_37_c8_75_00_ff_a2_07_d9_df_c9_38_ab_27_d8_b0_a2_0f_08_31_cb_eb_2b_f5_53_d4_4e_6e_e6_15_40_9b_75_c8_02_e2_12_a7_48_2e_65_ad_6f_e7_aa_7a_f6_64_71_ef_4f_13_53_27_0c_15_78_fb_16_ef_aa_e0_5c
 +</konsole>
 +
 +When this node is executed, the SNMP trap is issued by the router under this OID.
 +
 +{{ :app-notes:snmp_trap_debug.png?400 |}}
 +
 +----