NAME Plack::App::MQTT - Plack Application to provide AJAX to MQTT bridge VERSION version 1.112330 SYNOPSIS use Plack::App::MQTT; my $app = Plack::App::MQTT->new(host => 'mqtt.example.com', allow_publish => 1)->to_app; # Or mount under /mqtt namespace, subscribe only use Plack::Builder; builder { mount '/mqtt' => Plack::App::MQTT->new(); }; DESCRIPTION This module is a Plack application that provides an AJAX to MQTT bridge. It can be used on its own or combined with Plack::Builder to provide an AJAX MQTT interface for existing Plack applications (such as Catalyst, Dancer, etc applications). This distribution includes an example application "eg/mqttui.psgi" that can be used for testing by running: MQTT_SERVER=127.0.0.1 plackup eg/mqttui.psgi then accessing, for example: http://127.0.0.1:5000/?topic=test http://127.0.0.1:5000/?topic=test&mxhr=1 The former provides a simple long poll interface (that will often miss messages - I plan to fix this) and the later provides a more reliable "multipart/mixed" interface using the library. METHODS "new(%params)" Constructs a new "Plack::App::MQTT" object. The supported parameters are: "host" The server host. Defaults to 127.0.0.1. "port" The server port. Defaults to 1883. "timeout" The timeout for responses from the server. "keep_alive_timer" The keep alive timer. "client_id" Sets the client id for the client overriding the default which is "Net::MQTT::Message[NNNNN]" where NNNNN is the process id. "allow_publish" If set to true, then the '/pub' requests will be allowed. Otherwise they will result in a '403 forbidden' response. The default is false. "mqtt" This attribute can be used to provide an AnyEvent::MQTT instance. If it is not supplied an instance is created using the "host", "port", etc. parameters. If it is supplied those parameters are ignored. "call($env)" This method routes HTTP requests to "/pub", "/sub" and "/submxhr" to the "publish($env, $req, $topic)", "subscribe($env, $req, $topic)", or "submxhr($env, $req, $topic)" methods respectively. If the topic fails the "is_valid_topic($topic)" test then a 403 error is returned. If the request is '/pub' then a 403 error is returned unless the "allow_publish" parameter was passed a true value to the constructor. "is_valid_topic($topic)" This helper method returns true if the topic is valid. If the "topic_regexp" parameter was passed to the constructor, then the topic is valid if it matches that expression. Otherwise any topic is valid. "return_404([$message])" This helper method constructs a 404 response with the given message or 'not found' if no message is supplied. "return_403([$message])" This helper method constructs a 403 response with the given message or 'forbidden' if no message is supplied. "publish($env, $req, $topic)" This method processes HTTP requests to "/pub". It requires "topic" and "message" parameters and returns the JSON '{ success: 1 }' when the message has been published. "subscribe($env, $req, $topic)" This method processes HTTP requests to "/sub". It requires a "topic" parameter and returns the next MQTT message received on that topic as a JSON record for the form: { type: 'mqtt_message', message: 'message', topic: 'topic' } TODO: need to add per-client backlog to avoid missing messages "submxhr($env, $req, $topic)" This method processes HTTP requests to "/submxhr". It requires a "topic" parameter and returns a 'multipart/mixed' response with a series of JSON records for the form: { type: 'mqtt_message', message: 'message', topic: 'topic' } API This is an early release and the API is very likely to change in subsequent releases. DISCLAIMER This is not official IBM code. I work for IBM but I'm writing this in my spare time (with permission) for fun. AUTHOR Mark Hindess COPYRIGHT AND LICENSE This software is copyright (c) 2011 by Mark Hindess. This is free software; you can redistribute it and/or modify it under the same terms as the Perl 5 programming language system itself.