# Exmqttc [](https://beta.hexfaktor.org/github/timbuchwaldt/exmqttc) [](https://travis-ci.org/timbuchwaldt/exmqttc) [](http://inch-ci.org/github/timbuchwaldt/exmqttc)
Elixir wrapper for the emqttc library.
emqttc must currently be installed manually as it is not available on hex (yet).
## Installation
The package can be installed by adding `exmqttc` and `emqttc` to your list of dependencies in `mix.exs`:
```elixir
def deps do
[{:exmqttc, "~> 0.5"}, {:emqttc, github: "emqtt/emqttc"}]
end
```
## Usage
Create a callback module:
```elixir
defmodule MyClient do
require Logger
use Exmqttc.Callback
def init(_params) do
{:ok, []}
end
def handle_connect(state) do
Logger.debug "Connected"
{:ok, state}
end
def handle_disconnect(state) do
Logger.debug "Disconnected"
{:ok, state}
end
def handle_publish(topic, payload, state) do
Logger.debug "Message received on topic #{topic} with payload #{payload}"
{:ok, state}
end
end
```
You can keep your own state and return it just like with `:gen_server`.
Start the MQTT connection process by calling `start_link/3`:
```elixir
{:ok, pid} = Exmqttc.start_link(MyClient, [], [host: '127.0.0.1'], params)
```
The third argument is a list of emqtt connection options, supporting the following options
- `host`: Connection host, charlist, default: `'localhost'`
- `port`: Connection port, integer, default 1883
- `client_id`: Binary ID for client, automatically set to UUID if not specified
- `clean_sess`: MQTT cleanSession flag. `true` disables persistent sessions on the server
- `keepalive`: Keepalive timer, integer
- `username`: Login username, binary
- `password`: Login password, binary
- `will`: Last will, keywordlist, sample: `[qos: 1, retain: false, topic: "WillTopic", payload: "I died"]`
- `connack_timeout`: Timeout for connack package, integer, default 60
- `puback_timeout`: Timeout for puback package, integer, default 8
- `suback_timeout`: Timeout for suback package, integer, default 4
- `ssl`: List of ssl options
- `auto_resub`: Automatically resubscribe to topics, boolean, default: `false`
- `reconnect`: Automatically reconnect on lost connection, integer (), default `false`
Params are passed to the init function of your callback module.
You can publish messages to the given PID:
```elixir
Exmqttc.publish(pid, "test", "foo")
```
`publish/4` also supports passing in QOS and retain options:
```elixir
Exmqttc.publish(pid, "test", "foo", qos: 2, retain: true)
```
Further docs can be found at [https://hexdocs.pm/exmqttc](https://hexdocs.pm/exmqttc).