# emqtt **Repository Path**: yeon/emqtt ## Basic Information - **Project Name**: emqtt - **Description**: Erlang MQTT Client which both support MQTTv3 and MQTTv5 - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-11-29 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README emqtt ===== Erlang MQTT v5.0 Client compatible with MQTT v3.0 Build ----- $ make Build with websocket dependencies --------------------------------- $ export WITH_WS=true $ make Getting started --------------- rebar.config ```erlang {deps, [{emqtt, {git, "https://github.com/emqx/emqtt", {tag, "v1.0.0"}}}]}. ``` Here is the simple usage of `emqtt` library. ``` erlang ClientId = <<"test">>. {ok, ConnPid} = emqtt:start_link([{clientid, ClientId}]). {ok, _Props} = emqtt:connect(ConnPid). Topic = <<"guide/#">>. QoS = 1. {ok, _Props, _ReasonCodes} = emqtt:subscribe(ConnPid, {Topic, QoS}). {ok, _PktId} = emqtt:publish(ConnPid, <<"guide/1">>, <<"Hello World!">>, QoS). %% If the qos of publish packet is 0, `publish` function would not return packetid. ok = emqtt:publish(ConnPid, <<"guide/2">>, <<"Hello World!">>, 0). %% Recursively get messages from mail box. Y = fun (Proc) -> ((fun (F) -> F(F) end)((fun(ProcGen) -> Proc(fun() -> (ProcGen(ProcGen))() end) end))) end. Rec = fun(Receive) -> fun()-> receive {publish, Msg} -> io:format("Msg: ~p~n", [Msg]), Receive(); _Other -> Receive() after 5 -> ok end end end. (Y(Rec))(). %% If you don't like y combinator, you can also try named function to recursively get messages in erlang shell. Receive = fun Rec() -> receive {publish, Msg} -> io:format("Msg: ~p~n", [Msg]), Rec(); _Other -> Rec() after 5 -> ok end end. Receive(). {ok, _Props, _ReasonCode} = emqtt:unsubscribe(ConnPid, <<"guide/#">>). ok = emqtt:disconnect(ConnPid). ``` Not only the `clientid` can be passed as parameter, but also a lot of other options can be passed as parameters. Here is the options which could be passed into emqtt:start_link/1. ``` erlang -type(option() :: {name, atom()} | {owner, pid()} | {msg_handler, msg_handler()} | {host, host()} | {hosts, [{host(), inet:port_number()}]} | {port, inet:port_number()} | {tcp_opts, [gen_tcp:option()]} | {ssl, boolean()} | {ssl_opts, [ssl:ssl_option()]} | {ws_path, string()} | {connect_timeout, pos_integer()} | {bridge_mode, boolean()} | {clientid, iodata()} | {clean_start, boolean()} | {username, iodata()} | {password, iodata()} | {proto_ver, v3 | v4 | v5} | {keepalive, non_neg_integer()} | {max_inflight, pos_integer()} | {retry_interval, timeout()} | {will_topic, iodata()} | {will_payload, iodata()} | {will_retain, boolean()} | {will_qos, qos()} | {will_props, properties()} | {auto_ack, boolean()} | {ack_timeout, pos_integer()} | {force_ping, boolean()} | {properties, properties()}). ``` ## License Apache License Version 2.0 ## Author EMQ X Team.