npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

api-m77-raspberry-wifi-node-nmcli

v1.4.4

Published

API to interact with the functionality of the m77-raspberry-wifi-node-nmcli module

Downloads

50

Readme

Si quieres ver el documento en español, por favor consulta el archivo README_es.md

My natural language is Spanish. All texts have been translated with Google Translator.


api-m77-raspberry-wifi-node-nmcli

This is the new integration of the new module to configure WiFi networks from nodejs

In current versions of Raspberry OS wpa_cli is no longer used, instead all network configuration is done through nmcli. For this reason the package m77-raspberry-wifi-node is no longer used, therefore the package api-m77-raspberry-wifi-node is not used either*

node.js server with express that creates an API with the functionalities of the module m77-raspberry-wifi-node-nmcli, with which you can configure the Wi-Fi network of Raspberry Pi that uses nmcli.

For developers who need to create a frontend with the functionalities of the m77-raspberry-wifi-node-nmcli module, it will be much easier to implement it as a backend.

Because?

As with my previous contributions. Because I have benefited a lot from the work of other people and organizations that offer development modules and I want to give something back to the community.

I hope you find it very useful and recommend it so that it reaches more developers :-)

Install

From git

git clone https://github.com/mangos77/api-m77-raspberry-wifi-node.git
cd api-m77-raspberry-wifi-node
npm install

From npm

mkdir api-m77-raspberry-wifi-node-nmcli && cd api-m77-raspberry-wifi-node-nmcli && npm install api-m77-raspberry-wifi-node-nmcli --no-save && mv node_modules/api-m77-raspberry-wifi-node/* ./ && rm -rf node_modules && npm install

Set up

It is very simple to configure the package, it will be done in two files:

package.json

It is optional and only to modify the execution scripts to pass environment variables, such as the port for each type of execution:

"scripts": {
    "dev": "PORT=8081 NODE_ENV=development node src/index",
    "start": "PORT=8080 NODE_ENV=production node src/index"
},

src/config.js

In this file you will find the configuration of all the operation for the execution of the API

There are two blocks to configure depending on whether the execution is development or production:

const config = () => {
    const config_dev = {}
    const config_prod = {}
}

If running in production mode, the environment variable NODE_ENV=production is taken config_prod will overwrite the values ​​of config_dev

The values ​​to adjust are:

  • port: By default the environment variable PORT is taken, otherwise 8081, but you can set the desired value
  • allowHosts: In a simple array that can contain: domain names, IP addresses or iface=[Wifi interface]. This is to provide security by only accepting API calls towards a given url, for example if you only want the API to be accessible from http://127.0.0.1:8081 or http://localhost then the fix should be ['localhost', '127.0.0.1']. In the case of iface, the API will obtain the associated IP address automatically.
  • wifi_config: JSON object that will set the default values ​​in the API calls and are based on the parameters of the init() method of [m77-raspberry-wifi-node-nmcli](https:/ /github.com/mangos77/m77-raspberry-wifi-node-nmcli) (device, debugLevel)

Example:

const config_dev = {
    name: pkjson.name,
    version: pkjson.version,
    production: false,
    port: process.env.PORT || 8081,
    allowHosts: ['localhost', '127.0.0.1', 'iface=eth0'],
    wifi_config: { debugLevel: 2 }
}

const config_prod = {
    production: true,
    port: process.env.PORT || 8080,
    allowHosts: ['localhost', '127.0.0.1'],
    wifi_config: { debugLevel: 0 }
}

Documentation

In the docs folder you will find postman_collection.json: Postman collection to be imported and used

Endpoints WiFi

The available endpoints are:


In order to understand all the responses of each endpoint, it can be of great help to see the documentation of the module on which this api is based [m77-raspberry-wifi-node-nmcli](https://github.com /mangos77/m77-raspberry-wifi-node-nmcli)

GET /api/wifi/list_interfaces

List the available Wifi interfaces

  • No parameters required

IMPORTANT NOTE All of the following endpoints optionally can be submitted with the following parameters in the URL (device and debugLevel).

These values ​​have a higher priority than those specified in config.js -> wifi_config and are used to give greater control of the actions if required.


GET /api/wifi/status

Wifi interface status

URL parameters:

  • withConnectionInfo - (Optional) If you want to see additional connection information - Default false

GET /api/wifi/saved_networks

List of saved WiFi networks


GET /api/wifi/scan

List of all Wi-Fi networks available within range of the device, ordered by their power, but always the network to which it is connected first.


DELETE /api/wifi/remove_all_networks

Delete all saved networks


DELETE /api/wifi/remove_network

Delete the specified network

URL parameters:

  • ssid - (Required) The ssid to remove from saved networks

POST /api/wifi/connect

Establish connection with a Wi-Fi network

  • Requires sending data in the body of the request:
{
    "ssid": "mangos77",
    "psk": "ABCDE12345",
    "bssid": "",
    "ipaddress": "192.168.1.50",
    "netmask": "255.255.255.0",
    "gateway": "192.168.1.1",
    "dns": ["8.8.8.8", "192.168.1.1"],
    "hidden": false,
    "timeout": 30
}
  • ssid - (Required) The ssid of the network you want to connect to
  • psk - (Required) Network password. Empty string if this is an open network
  • bssid - (Optional) Used to set the connection to a bssid of the ssid, one of its uses is when the same ssid is in more than one band
  • ipaddress - (Optional) Statically establish the IP address of the connection (*)
  • netmask - (Optional) Statically set the netmask (*)
  • gateway - (Optional) Statically establish the gateway (*)
  • dns - (Optional) Statically establish the DNS of the connection, these must be in an array (*)
  • hidden - (Optional) Define if it is a hidden network
  • timeout - (Optional) Define maximum connection waiting time in seconds - Default 60

If you want to statically set ipaddress, netmask, gateway or dns; all of these parameters are required


PUT /api/wifi/reconnect

Try to reconnect to one of the saved Wi-Fi networks

  • Requires sending data in the body of the request:
{
    "ssid": "mangos77",
    "timeout": 30
}
  • ssid - (Required) The ssid of the saved network you want to reconnect to
  • timeout - (Optional) Define maximum time in seconds to wait for reconnection - Default 60

PUT /api/wifi/disconnect

Disconnect the Wifi that is connected to the device

Endpoints Ethernet

GET /api/ethernet/list_interfaces

Enlista las interfaces ethernet disponibles

  • No requiere parámetros

GET /api/ethernet/status

Status de la interfaz Ethernet

  • No requiere parámetros

POST /api/ethernet/set_connection

Set the Ethernet connection parameters

  • Requires sending data in the request body:
{
    "ipaddress": "192.168.1.50",
    "netmask": "255.255.255.0",
    "gateway": "192.168.1.1",
    "dns": ["8.8.8.8", "192.168.1.1"],
    "timeout": 30
}
  • ipaddress - (Optional) Set the static IP address of the connection (*)
  • netmask - (Optional) Set the static network mask (*)
  • gateway - (Optional) Set the static gateway (*)
  • dns - (Optional) Set the static DNS of the connection, these must be in an array (*)
  • timeout - (Optional) Define the maximum connection wait time in seconds - Default 60

If you want to set ipaddress, netmask, gateway or dns statically; all these parameters are required


Extra information

Run the server from boot

You can install pm2 to manage startup, number of instances, etc.

Host the frontend

  • Upload your frontend to the public directory (I haven't tried it yet)
  • You can install and configure NGINX as a web server

Redirect to port 80

By default, it is not possible for you to set port 80 for execution since ports lower than 1024 are only accessible by the user root or *sudo.

But you can fix it with:

  • iptables: sudo iptables -A PREROUTING -t nat -p tcp --dport 80 -j REDIRECT --to-port 8081
  • You can create a proxy redirect with NGINX

Response codes Wifi

This is the list of all the response codes and what function they are associated with, if it is an error code (either in the responses the value of success indicates whether it was successful or an error).

This can be used to adapt the response texts as required in developments and/or translate them in the implementation.

| Code | Err | Function | Description | |:------:|:---:|:-------------------|:------------| | 1001 | | list_interfaces | Wi-Fi interfaces found on the system | 2001 | X | list_interfaces | There are no Wi-Fi interfaces in the system | 1011 | | status | Got interface status | 2011 | X | status | Failed to get the status of interface | 1021 | | saved_networks | List of saved Wi-Fi networks | 2021 | X | saved_networks | It was not possible to obtain the list of saved Wi-Fi networks in inteface | 1031 | | scan | List of scanned Wi-Fi networks was obtained | 2031 | X | scan | It was not possible to obtain the list of the scanned Wi-Fi networks in inteface | 1041 | | remove_all_networks | All Wi-Fi networks removed | 1051 | | remove_network | Wi-Fi network has been removed on the system | 2051 | X | remove_network | Wi-Fi network is not in saved networks | 1061 | | connect | The Wi-Fi network has been successfully configured on interface | 2061 | X | connect | Could not connect to SSID on interface | 2062 | X | connect | The static ipaddress is not valid | 2063 | X | connect | The static netmask is not valid | 2064 | X | connect | The static gateway is not valid | 2065 | X | connect | One or more static dns are not valid | 2066 | X | connect | To set a custom address parameters; ipaddress, netmask, gateway and dns are required | 1071 | | reconnect | The Wi-Fi network has been successfully reconnected on interface | 2071 | X | reconnect | Could not reconnect to SSID on interface, because the Wi-Fi network is not in those previously saved in the system | 1091 | | disconnect | You have been disconnected from the Wi-Fi network | 2091 | X | disconnect | There is no connection established to disconnect | 2092 | X | disconnect | It was not possible to disconnect from the network | 2093 | X | disconnect | An error occurred when obtaining the data of the connected Wi-Fi network to be able to disconnect | 1101 | | init | Interface has been found on the system | 2101 | X | init | The interface does not exist. Please execute the listInterfaces() method to get the list of available Wifi interfaces and set in init() method

Response codes ethernet

| Code | Err | Function | Description | |:------:|:---:|:----------------|:------------| | 1002 | | list_interfaces | Ethernet interfaces found on the system | 2002 | X | list_interfaces | There are no ethernet interfaces in the system | 1012 | | status | Got ethernet interface status | 2013 | X | status | Failed to get the status of ethernet interface | 1062 | | setConnection | The ethernet interface has been successfully configured | 2067 | X | setConnection | Ethernet interface cable is not plugged in | 2068 | X | setConnection | Could not connect to ethernet interface | 2062 | X | setConnection | The static ipaddress is not valid | 2063 | X | setConnection | The static netmask is not valid | 2064 | X | setConnection | The static gateway is not valid | 2065 | X | setConnection | One or more static dns are not valid | 2066 | X | setConnection | To set a custom address parameters; ipaddress, netmask, gateway and dns are required | 1102 | | init | Ethernet interface has been found on the system | 2102 | X | init | The ethernet interface does not exist. Please execute the listInterfaces() method to get the list of available ethernet interfaces and set in init() method

I hope it helps you and please tell me about any errors or comments :-)