Erlang/Elixir low level MQTT protocol implementation
Branch: master
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
include
lib
src
test
.editorconfig
.gitignore
.travis.yml
LICENSE.md
README.md
mix.exs
mix.lock
rebar.config
rebar.lock

README.md

erlang-mqtt Build Status

MQTT Protocol library for Erlang/Elixir. This library provides the low level building blocks for MQTT.

Protocol

mqtt_packet exposes an encode function and a decode function to convert binaries to MQTT packets as defined in mqtt/include/mqtt_packet.hrl

Client

mqtt_client provides a simple client for MQTT. Currently this client only supports QoS 0 messages.

Example Erlang client usage

ok = application:start(mqtt),

{ok, Connection, false} = mqtt_client:connect(#{
    transport => {tcp, #{host => "localhost"}}
}),

Topic = <<"/test">>,
{ok, [{Topic, 0}]} = mqtt_client:subscribe(Connection, [{topic, 0}]),

ok = mqtt_client:publish(Connection, Topic, <<"Hello">>),
receive
    {mqtt_client, Connection, {publish, Topic, Message, _}} ->
        io:format("Got ~s published on ~s~n", [Message, Topic]
end.

Example Elixir client usage

{:ok, connection, false} = MQTT.Client.connect(%{
    transport: {:tcp, %{host: "localhost"}}
})

topic = "/test"
{:ok, [{^topic, 0}]} = MQTT.Client.subscribe(connection, [{topic, 0}])

:ok = MQTT.Client.publish(connection, topic, "Hello")
receive do
    {:mqtt_client, ^connection, {:publish, ^topic, message, _}} ->
        IO.puts "Got #{message} published on #{topic}"
end

Server

mqtt_server provides a server behaviour for MQTT. A server would implement the mqtt_server behaviour, and would then be able to accept MQTT connections from clients. Currently this server only supports QoS 0 messages.

TODO

Add support for QoS 1 and 2

We need to add support for QoS 1 and 2 messages, this would require implementing a storage module in order to persist messages until they get acknowledged by the broker.