Git Product home page Git Product logo

luamqtt's Introduction

luamqtt - Pure-lua MQTT v3.1.1 and v5.0 client

License Build Status Coverage Status Mentioned in Awesome MQTT

forthebadge

MQTT ( http://mqtt.org/ ) client library for Lua. MQTT is a popular network communication protocol working by "publish/subscribe" model.

This library is written in pure-lua to provide maximum portability.

Features

  • Full MQTT v3.1.1 client-side support
  • Full MQTT v5.0 client-side support
  • Several long-living MQTT clients in one script thanks to ioloop

Documentation

See https://xhaskx.github.io/luamqtt/

Source Code

https://github.com/xHasKx/luamqtt

Dependencies

The only main dependency is a luasocket to establishing TCP connection to the MQTT broker.

On Lua 5.1 and Lua 5.2 it also depends on LuaBitOp (bit) library to perform bitwise operations. It's not listed in package dependencies, please install it manually like this:

luarocks install luabitop

luasec (SSL/TLS)

To establish secure network connection (SSL/TSL) to MQTT broker you also need luasec module, please install it manually like this:

luarocks install luasec

This stage is optional and may be skipped if you don't need the secure network connection (e.g. broker is located in your local network).

Lua versions

It's tested to work on Debian 9 GNU/Linux with Lua versions:

  • Lua 5.1 ... Lua 5.3 (i.e. any modern Lua version)
  • LuaJIT 2.0.0 ... LuaJIT 2.1.0 beta3
  • It may also work on other Lua versions without any guarantees

Also I've successfully run it under Windows and it was ok, but installing luarock-modules may be a non-trivial task on this OS.

Installation

luarocks install luamqtt

LuaRocks page

Examples

Here is a short version of examples/simple.lua:

-- load mqtt library
local mqtt = require("mqtt")

-- create MQTT client
local client = mqtt.client{ uri = "test.mosquitto.org", clean = true }

-- assign MQTT client event handlers
client:on{
    connect = function(connack)
        if connack.rc ~= 0 then
            print("connection to broker failed:", connack)
            return
        end

        -- connection established, now subscribe to test topic and publish a message after
        assert(client:subscribe{ topic="luamqtt/#", qos=1, callback=function()
            assert(client:publish{ topic = "luamqtt/simpletest", payload = "hello" })
        end})
    end,

    message = function(msg)
        assert(client:acknowledge(msg))

        -- receive one message and disconnect
        print("received message", msg)
        client:disconnect()
    end,
}

-- run ioloop for client
mqtt.run_ioloop(client)

More examples placed in examples/ directory. Also checkout tests in tests/spec/mqtt-client.lua

Also you can learn MQTT protocol by reading tests/spec/protocol-make.lua and tests/spec/protocol-parse.lua tests

Connectors

Connector is a network connection layer for luamqtt. There is a three standard connectors included:

The luasocket or luasocket_ssl connector will be used by default, if not specified, according secure=true/false option per MQTT client.

In simple terms, connector is a set of functions to establish a network stream (TCP connection usually) and send/receive data through it. Every MQTT client instance may have their own connector.

And it's very simple to implement your own connector to make luamqtt works in your environment.

Bugs & contributing

Please file a GitHub issue if you found any bug.

And of course, any contribution are welcome!

Tests

To run tests in this git repo you need busted:

busted -e 'package.path="./?/init.lua;./?.lua;"..package.path' tests/spec/*.lua

There is a script to run all tests for all supported lua versions, using hererocks:

./tests/run-for-all-lua-versions.sh

Code coverage

Code coverage may be collected using luacov.

To collect code coverage stats - install luacov using luarocks and then execute:

# collect stats during tests
busted -v -e 'package.path="./?/init.lua;./?.lua;"..package.path;require("luacov.runner")(".luacov")' tests/spec/*.lua

# generate report into luacov.report.out file
luacov

MQTT version

Currently supported is:

Both protocols has full control packets support.

TODO

  • more examples
  • check some packet sequences are right
  • coroutines and other asyncronous approaches based on some event loop
  • [DONE] more permissive args for some methods
  • [DONE] several clients in one process
  • [DONE] MQTT 5.0

LICENSE

Standard MIT License, see LICENSE file for full text

luamqtt's People

Contributors

xhaskx avatar cmur2 avatar

Watchers

James Cloos avatar achelics avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.