docs:blox:blox-wifi-messages

6.6.3 Broadcasting and Receiving messages over WIFI in BLOX firmware

Broadcasting and Receiving messages over WIFI allows you to link multiple BLOX devices together across your local WIFI network. It can also be used to interact with external applications

6.6.3.1 BLOX Communication System Overview

Message Sending and Receiving :

BLOX devices communicate using UDP to send (broadcast) and receive messages. Each message includes a sensor value (analog or digital) and a unique ID Tag you get to set. The tags allows devices to filter whether they need to pay attention to the message

ID Tag-Based Processing:

  • Sending: When BLOX1 sends a message, you tags the sensor value with a specific ID Tag.
  • Receiving: All devices on the network receive the message. However, each BLOX device is configured to act only on messages with specific ID Tags.
    • BLOX2 Example: If BLOX 2 is set up with an IF block to look for a message with a certain ID Tag, it will execute subsequent blocks when a message with that ID Tag is received, using the included sensor value.
    • BLOX3 Example: If BLOX 3 is not set up to listen for that ID Tag, it will ignore the message.

Multiple Listeners:

Multiple BLOX devices can be configured to respond to the same ID Tag, allowing for coordinated actions across devices.

Cross-Platform Compatibility:

The UDP messages can be used with other applications as well. For example, a Python or Node.js script on a computer can send or receive these UDP packets, allowing for integration with external software and systems.

This setup provides a flexible and extensible way to manage inter-device communication and integration with other networked applications.

6.6.3.2 Sending Messages

You can send analog or digital sensor values

Note the matching ID Tags (compared to receiving section below) to identify the outgoing messages

Sending an analog sensor valueSending a digital sensor value

6.6.3.3 Receiving Messages

Received messages are available as “sensors” for use on the other device / devices

Note the matching ID Tags (compared to sending section above) to identify the incoming messages

Receiving analog sensor valueReceiving digital sensor value

6.6.3.4 Monitoring / troubleshooting messages

You can see broadcast messages in the BLOX Serial/USB logs

Messages are broadcast unencrypted for simplicity. This also allows you to very easily monitor and troubleshoot issues, as well as integrate it into other scripts and programs

For example you can listen out for messages / send messages from a computer to help you troubleshoot


6.6.3.4 3rd party integration

You can use your own code to send and receive UDP messages in the format of idtagstring=value on port 49160

Technical Details:

BLOX sends and receives on port 49160

Data is sent as a simple string in the format idtag=value. For analog sensors the value is the numeric value. For digital sensors its 0/1 respectively. Quite simple and easy

For example: Sending via a custom nodejs program

const dgram = require('dgram');

// Create a UDP socket
const client = dgram.createSocket('udp4');

// Enable broadcast on the socket
client.on('listening', function() {
  client.setBroadcast(true);
});

// The message to send
const message = Buffer.from('analog_read_1_blox_2=115'); // construct value dynamically in your own code

// The target port and broadcast address
const PORT = 49160;
const BROADCAST_ADDR = '255.255.255.255';

// Send the message
client.send(message, 0, message.length, PORT, BROADCAST_ADDR, (err) => {
  if (err) {
    console.error(`Error sending message: ${err}`);
  } else {
    console.log('Message broadcasted successfully');
  }
  client.close();
});

For example: Receiving via a custom nodejs program

const dgram = require('dgram');

// Create a UDP socket for the server
const server = dgram.createSocket('udp4');

// Define the port to listen on
const PORT = 49160;

// Event listener for when the server receives a message
server.on('message', (msg, rinfo) => {
  const message = msg.toString();
  const keyValue = message.split('=');

  // Check if the message is in the expected format
  if (keyValue.length === 2 && keyValue[0] === 'analog_read_1_blox_2') {
    const value = keyValue[1];
    console.log(`Received analog_read_1_blox_2 value: ${value}`);
    // do something with the value
  }
});

// Event listener for when the server starts listening
server.on('listening', () => {
  const address = server.address();
  console.log(`Server listening on ${address.address}:${address.port}`);
});

// Bind the server to the port
server.bind(PORT);
docs/blox/blox-wifi-messages.txt · Last modified: 2024/08/28 17:26 by admin