1.. zephyr:code-sample:: mqtt-sn-publisher 2 :name: MQTT-SN publisher 3 :relevant-api: mqtt_sn_socket 4 5 Send MQTT-SN PUBLISH messages to an MQTT-SN gateway. 6 7Overview 8******** 9 10`MQTT <http://mqtt.org/>`_ (MQ Telemetry Transport) is a lightweight 11publish/subscribe messaging protocol optimized for small sensors and 12mobile devices. 13 14MQTT-SN can be considered as a version of MQTT which is adapted to 15the peculiarities of a wireless communication environment. While MQTT 16requires a reliable TCP/IP transport, MQTT-SN is designed to be usable 17on any datagram-based transport like UDP, ZigBee or even a plain UART 18(with an additional framing protocol). 19 20The Zephyr MQTT-SN Publisher sample application is an MQTT-SN v1.2 21client that sends MQTT-SN PUBLISH messages to an MQTT-SN gateway. 22It also SUBSCRIBEs to a topic. 23See the `MQTT-SN v1.2 spec`_ for more information. 24 25.. _MQTT-SN v1.2 spec: https://www.oasis-open.org/committees/download.php/66091/MQTT-SN_spec_v1.2.pdf 26 27The source code of this sample application can be found at: 28:zephyr_file:`samples/net/mqtt_sn_publisher`. 29 30Requirements 31************ 32 33- Linux machine 34- MQTT-SN gateway, like Eclipse Paho 35- Mosquitto server: any version that supports MQTT v3.1.1. This sample 36 was tested with mosquitto 1.6. 37- Mosquitto subscriber 38- LAN for testing purposes (Ethernet) 39 40Build and Running 41***************** 42 43Currently, this sample application only supports static IP addresses. 44Open the :file:`prj.conf` file and set the IP addresses according 45to the LAN environment. 46 47You will also need to start an MQTT-SN gateway. With Paho, you can either 48build it from source - see `PAHO MQTT-SN Gateway`_ - or run an unofficial 49docker image, like `kyberpunk/paho`_. 50 51.. _PAHO MQTT-SN Gateway: https://www.eclipse.org/paho/index.php?page=components/mqtt-sn-transparent-gateway/index.php 52.. _kyberpunk/paho: https://hub.docker.com/r/kyberpunk/paho 53 54On your Linux host computer, open 3 terminal windows. At first, start mosquitto: 55 56.. code-block:: console 57 58 $ sudo mosquitto -v -p 1883 59 60Then, in another window, start the gateway, e.g. by using docker: 61 62.. code-block:: console 63 64 $ docker run -it -p 10000:10000 -p 10000:10000/udp --name paho -v $PWD/gateway.conf:/etc/paho/gateway.conf:ro kyberpunk/paho 65 66Then, locate your zephyr directory and type: 67 68.. zephyr-app-commands:: 69 :zephyr-app: samples/net/mqtt_sn_publisher 70 :board: native_sim_64 71 :goals: run 72 :compact: 73 74Optionally, use any MQTT explorer to connect to your broker. 75 76Sample output 77============= 78 79This is the applications output: 80 81.. code-block:: console 82 83 WARNING: Using a test - not safe - entropy source 84 *** Booting Zephyr OS build zephyr-v3.2.0-279-gc7fa387cea81 *** 85 [00:00:00.000,000] <inf> net_config: Initializing network 86 [00:00:00.000,000] <inf> net_config: IPv4 address: 172.18.0.20 87 [00:00:00.000,000] <inf> mqtt_sn_publisher_sample: MQTT-SN sample 88 [00:00:00.000,000] <inf> mqtt_sn_publisher_sample: Network connected 89 [00:00:00.000,000] <inf> mqtt_sn_publisher_sample: Waiting for connection... 90 [00:00:00.000,000] <inf> mqtt_sn_publisher_sample: Connecting client 91 [00:00:00.510,000] <inf> net_mqtt_sn: Decoding message type: 5 92 [00:00:00.510,000] <inf> net_mqtt_sn: Got message of type 5 93 [00:00:00.510,000] <inf> net_mqtt_sn: MQTT_SN client connected 94 [00:00:00.510,000] <inf> mqtt_sn_publisher_sample: MQTT-SN event EVT_CONNECTED 95 [00:00:01.020,000] <inf> net_mqtt_sn: Decoding message type: 19 96 [00:00:01.020,000] <inf> net_mqtt_sn: Got message of type 19 97 [00:00:10.200,000] <inf> mqtt_sn_publisher_sample: Publishing timestamp 98 [00:00:10.200,000] <inf> net_mqtt_sn: Registering topic 99 2f 75 70 74 69 6d 65 |/uptime 100 [00:00:10.200,000] <inf> net_mqtt_sn: Can't publish; topic is not ready 101 [00:00:10.710,000] <inf> net_mqtt_sn: Decoding message type: 11 102 [00:00:10.710,000] <inf> net_mqtt_sn: Got message of type 11 103 [00:00:10.710,000] <inf> net_mqtt_sn: Publishing to topic ID 14 104 [00:00:20.400,000] <inf> mqtt_sn_publisher_sample: Publishing timestamp 105 [00:00:20.400,000] <inf> net_mqtt_sn: Publishing to topic ID 14 106 107This is the output from the MQTT-SN gateway: 108 109.. code-block:: console 110 111 20221024 140210.191 CONNECT <--- ZEPHYR 0C 04 04 01 00 3C 5A 45 50 48 59 52 112 20221024 140210.192 CONNECT ===> ZEPHYR 10 12 00 04 4D 51 54 54 04 02 00 3C 00 06 5A 45 50 48 59 52 113 20221024 140210.192 CONNACK <=== ZEPHYR 20 02 00 00 114 20221024 140210.192 CONNACK ---> ZEPHYR 03 05 00 115 116 20221024 140210.643 SUBSCRIBE 0001 <--- ZEPHYR 0C 12 00 00 01 2F 6E 75 6D 62 65 72 117 20221024 140210.648 SUBSCRIBE 0001 ===> ZEPHYR 82 0C 00 01 00 07 2F 6E 75 6D 62 65 72 00 118 20221024 140210.660 SUBACK 0001 <=== ZEPHYR 90 03 00 01 00 119 20221024 140210.661 SUBACK 0001 ---> ZEPHYR 08 13 00 00 0D 00 01 00 120 121 20221024 140220.338 REGISTER 0002 <--- ZEPHYR 0D 0A 00 00 00 02 2F 75 70 74 69 6D 65 122 20221024 140220.348 REGACK 0002 ---> ZEPHYR 07 0B 00 0E 00 02 00 123 124 20221024 140220.848 PUBLISH <--- ZEPHYR 0C 0C 00 00 0E 00 00 31 30 32 30 30 125 20221024 140220.850 PUBLISH ===> ZEPHYR 30 0E 00 07 2F 75 70 74 69 6D 65 31 30 32 30 30 126 127 20221024 140230.539 PUBLISH <--- ZEPHYR 0C 0C 00 00 0E 00 00 32 30 34 30 30 128 20221024 140230.542 PUBLISH ===> ZEPHYR 30 0E 00 07 2F 75 70 74 69 6D 65 32 30 34 30 30 129