mirror of
https://github.com/eclipse/paho.mqtt-sn.embedded-c.git
synced 2025-12-15 16:36:52 +01:00
@@ -1,35 +1,38 @@
|
|||||||
# MQTT-SN Transparent / Aggregating Gateway
|
# MQTT-SN Transparent / Aggrigating Gateway
|
||||||
|
|
||||||
**MQTT-SN** requires a MQTT-SN Gateway which acts as a protocol converter to convert **MQTT-SN messages to MQTT messages**. MQTT-SN client over SensorNetwork can not communicate directly with MQTT broker (TCP/IP).
|
**MQTT-SN** requires a MQTT-SN Gateway which acts as a protocol converter to convert **MQTT-SN messages to MQTT messages**. MQTT-SN client over SensorNetwork can not communicate directly with MQTT broker(TCP/IP).
|
||||||
This Gateway can be configured to run as a transparent or aggregating gateway in the file *gateway.conf*.
|
This Gateway can run as a transparent or aggrigating Gateway by specifying the gateway.conf.
|
||||||
|
|
||||||
### **Step 1: Build the gateway**
|
### **step1. Build the gateway**
|
||||||
````
|
````
|
||||||
$ git clone https://github.com/eclipse/paho.mqtt-sn.embedded-c
|
$ git clone -b experiment https://github.com/eclipse/paho.mqtt-sn.embedded-c
|
||||||
$ cd paho.mqtt-sn.embedded-c/MQTTSNGateway
|
$ cd paho.mqtt-sn.embedded-c/MQTTSNGateway
|
||||||
$ make
|
$ make [SENSORNET={udp6|xbee}]
|
||||||
$ make install
|
$ make install
|
||||||
$ make clean
|
$ make clean
|
||||||
````
|
````
|
||||||
MQTT-SNGateway, MQTT-SNLogmonitor and *.conf files are copied into **../** directory.
|
By default, a gateway for UDP is built.
|
||||||
|
In order to create a gateway for UDP6 or XBee, SENSORNET argument is required.
|
||||||
|
|
||||||
|
MQTT-SNGateway, MQTT-SNLogmonitor and *.conf files are copied into ../ directory.
|
||||||
If you want to install the gateway into specific directories, enter a command line as follows:
|
If you want to install the gateway into specific directories, enter a command line as follows:
|
||||||
````
|
````
|
||||||
$ make install INSTALL_DIR=/path/to/your_directory CONFIG_DIR=/path/to/your_directory
|
$ make install INSTALL_DIR=/path/to/your_directory CONFIG_DIR=/path/to/your_directory
|
||||||
````
|
````
|
||||||
|
|
||||||
|
|
||||||
|
### **step2. Execute the Gateway.**
|
||||||
|
|
||||||
### **Step 2: Execute the Gateway.**
|
````
|
||||||
|
$ cd ../
|
||||||
````
|
|
||||||
$ cd ../
|
|
||||||
$ ./MQTT-SNGateway [-f Config file name]
|
$ ./MQTT-SNGateway [-f Config file name]
|
||||||
````
|
````
|
||||||
|
|
||||||
|
|
||||||
### How to change the configuration of the gateway
|
### **How to Change the configuration of the gateway**
|
||||||
Example for **gateway.conf**:
|
**../gateway.conf** Contents are follows:
|
||||||
|
|
||||||
<pre><dev>
|
<pre><dev>
|
||||||
|
|
||||||
# config file of MQTT-SN Gateway
|
# config file of MQTT-SN Gateway
|
||||||
#
|
#
|
||||||
@@ -40,7 +43,7 @@ BrokerSecurePortNo=8883
|
|||||||
|
|
||||||
#
|
#
|
||||||
# When AggregatingGateway=YES or ClientAuthentication=YES,
|
# When AggregatingGateway=YES or ClientAuthentication=YES,
|
||||||
# All clients must be specified by the ClientList File
|
# All clients must be specified by the ClientList File
|
||||||
#
|
#
|
||||||
|
|
||||||
ClientAuthentication=NO
|
ClientAuthentication=NO
|
||||||
@@ -78,45 +81,25 @@ ApiMode=2
|
|||||||
# LOG
|
# LOG
|
||||||
ShearedMemory=NO;
|
ShearedMemory=NO;
|
||||||
|
|
||||||
</dev></pre>
|
</dev></pre>
|
||||||
|
|
||||||
**Broker config**
|
**BrokerName** to specify a domain name of the Broker, and **BrokerPortNo** is a port No of the Broker. **BrokerSecurePortNo** is for TLS connection.
|
||||||
* *BrokerName* - Domain name/ IP address of the MQTT broker
|
**MulticastIP** and **MulticastPortNo** is a multicast address for GWSEARCH messages. Gateway is waiting GWSEARCH and when receiving it send GWINFO message via MulticastIP address. Clients can get the gateway address (Gateway IP address and **GatewayPortNo**) from GWINFO message by means of std::recvfrom().
|
||||||
* *BrokerPortNo* - Port of the MQTT broker
|
Client should know the MulticastIP and MulticastPortNo to send a SEARCHGW message.
|
||||||
* *LoginID* - Username for login at the broker
|
**GatewayId** is used by GWINFO message.
|
||||||
* *Password* - Password for login at the broker
|
**KeepAlive** is a duration of ADVERTISE message in seconds.
|
||||||
|
when **AggregatingGateway** or **ClientAuthentication** is **YES**, All clients which connect to the gateway must be declared by a **ClientsList** file.
|
||||||
|
Format of the file is ClientId and SensorNetwork Address. e.g. IP address and Port No etc, in CSV. more detail see clients.conf.
|
||||||
|
When **QoS-1** is **YES**, QoS-1 PUBLISH is available. All clients which send QoS-1 PUBLISH must be specified by Client.conf file.
|
||||||
|
When **PredefinedTopic** is **YES**, **Pre-definedTopicId**s specified by **PredefinedTopicList** are effective. This file defines Pre-definedTopics of the clients. In this file, ClientID,TopicName and TopicID are declared in CSV format.
|
||||||
|
When **Forwarder** is **YES**, Forwarder Encapsulation Message is available. Connectable Forwarders must be declared by a **ClientsList** file.
|
||||||
|
|
||||||
|
|
||||||
**Broker config for TLS**
|
### ** How to monitor the gateway from remote. **
|
||||||
* *BrokerSecurePortNo* - TLS Port of the MQTT broker
|
|
||||||
* *RootCAfile* - Path to the root CA file
|
|
||||||
* *RootCApath* - Path to the CA certificates
|
|
||||||
* *CertsFile* - Path to the certificate
|
|
||||||
* *PrivateKey* - Path to the private key
|
|
||||||
|
|
||||||
**Gateway config**
|
Uncomment line32 in MQTTSNGWDefined.h.
|
||||||
* *MulticastIP* - UDP multicast IP address of the gateway
|
|
||||||
* *MulticastPortNo* - UDP multicast port of the gateway
|
|
||||||
* *GatewayId* - ID of the gateway (for advertising)
|
|
||||||
* *GatewayName* - Name of the gateway (for advertising)
|
|
||||||
* *KeepAlive* - Connection timeout
|
|
||||||
* *AggregatingGateway* - If 'YES', all clients which want to connect to the gateway must be declared inside of *clients.conf*
|
|
||||||
* *ClientAuthentication* - If 'YES', all clients which want to connect to the gateway must be declared inside of *clients.conf*
|
|
||||||
* *ClientsList* - path/to/your/custom_clients.conf
|
|
||||||
* *PredefinedTopic* - If 'YES', then predefined topics specified by *predefinedTopic.conf* are effective
|
|
||||||
* *PredefinedTopicList* - path/to/your/custom_predefinedTopic.conf
|
|
||||||
* *QoS-1* - If 'YES', QoS-1 PUBLISH is available. All clients which send QoS-1 PUBLISH must be declared inside of *clients.conf*
|
|
||||||
* *Forwarder* - If 'YES', then Forwarder Encapsulation Message is available. Connectable forwarders must be declared in *clients.conf*.
|
|
||||||
|
|
||||||
Multicast address is used for GWSEARCH messages. The Gateway is waiting GWSEARCH and when receiving it,
|
`//#define RINGBUFFER // print out Packets log into shared memory./"`
|
||||||
it sends GWINFO message via MulticastIP address. Clients can get the gateway address (Gateway IP address
|
|
||||||
and GatewayPortNo) from GWINFO message by means of std::recvfrom(). Client should know the MulticastIP and
|
|
||||||
MulticastPortNo to send a SEARCHGW message.
|
|
||||||
|
|
||||||
### How to monitor the gateway from remote
|
|
||||||
|
|
||||||
Uncomment line32 in MQTTSNGWDefined.h:
|
|
||||||
|
|
||||||
`//#define RINGBUFFER // print out Packets log into shared memory.`
|
|
||||||
````
|
````
|
||||||
$ make
|
$ make
|
||||||
$ make install
|
$ make install
|
||||||
@@ -125,9 +108,9 @@ $ make clean
|
|||||||
restart the gateway.
|
restart the gateway.
|
||||||
open ssh terminal and execute LogMonitor.
|
open ssh terminal and execute LogMonitor.
|
||||||
|
|
||||||
````
|
`$ ./MQTT-SNLogmonitor`
|
||||||
$ ./MQTT-SNLogmonitor
|
|
||||||
````
|
|
||||||
|
|
||||||
Now you can get the Log on your terminal.
|
Now you can get the Log on your terminal.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -346,7 +346,6 @@ int UDPPort6::open(const char* ipAddress, uint16_t uniPortNo, const char* broadc
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//TODO: test if unicast is working too....
|
|
||||||
int UDPPort6::unicast(const uint8_t* buf, uint32_t length, SensorNetAddress* addr)
|
int UDPPort6::unicast(const uint8_t* buf, uint32_t length, SensorNetAddress* addr)
|
||||||
{
|
{
|
||||||
char destStr[INET6_ADDRSTRLEN+10];
|
char destStr[INET6_ADDRSTRLEN+10];
|
||||||
@@ -391,8 +390,6 @@ int UDPPort6::unicast(const uint8_t* buf, uint32_t length, SensorNetAddress* add
|
|||||||
WRITELOG("errno in UDPPort::unicast(sendto): %d, %s\n",status,strerror(status));
|
WRITELOG("errno in UDPPort::unicast(sendto): %d, %s\n",status,strerror(status));
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITELOG("unicast sendto %s, port: %d length = %d\n", destStr,port,status);
|
|
||||||
|
|
||||||
return status;
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user