Nessuna descrizione http://j1x-huginn.herokuapp.com

mqtt_agent.rb 3.2KB

    # encoding: utf-8 require "mqtt" module Agents class MqttAgent < Agent description <<-MD The MQTT agent allows both publication to an MQTT topic and subscription to an MQTT topic. Setup your own broker (http://jpmens.net/2013/09/01/installing-mosquitto-on-a-raspberry-pi/) or connect to a cloud service (www.cloudmqtt.com). MQTT is a generic transport protocol for machine to machine communication. You can do things like: * Publish to [RabbitMQ](http://www.rabbitmq.com/mqtt.html) * Run [OwnTracks, a location tracking tool](http://owntracks.org/) for iOS and Android * Subscribe to your home automation setup like [Ninjablocks](http://forums.ninjablocks.com/index.php?p=/discussion/661/today-i-learned-about-mqtt/p1) or [TheThingSystem](http://thethingsystem.com/dev/supported-things.html) Simply choose a topic (think email subject line) to publish/listen to, and configure your service. Hints: Many services run mqtts (mqtt over SSL) often with a custom certificate. You'll want to download their cert and install it locally, specifying the ```certificate_path``` configuration. Example configuration: <pre><code>{ 'uri' => 'mqtts://user:pass@locahost:8883' 'ssl' => :TLSv1, 'ca_file' => './ca.pem', 'cert_file' => './client.crt', 'key_file' => './client.key', 'topic' => 'huginn' } </code></pre> Subscribe to CloCkWeRX's TheThingSystem instance (thethingsystem.com), where temperature and other events are being published. <pre><code>{ 'uri' => 'mqtt://kcqlmkgx:sVNoccqwvXxE@m10.cloudmqtt.com:13858' 'topic' => 'the_thing_system/demo' } </code></pre> Subscribe to all topics <pre><code>{ 'uri' => 'mqtt://kcqlmkgx:sVNoccqwvXxE@m10.cloudmqtt.com:13858' 'topic' => '/#' } </code></pre> Find out more detail on [subscription wildcards](http://www.eclipse.org/paho/files/mqttdoc/Cclient/wildcard.html) MD def validate_options # unless options['uid'].present? && # options['expected_update_period_in_days'].present? # errors.add(:base, "expected_update_period_in_days and uid are required") # end end def working? !recent_error_logs? end def default_options { 'uri' => 'mqtts://user:pass@locahost:8883', 'ssl' => :TLSv1, 'ca_file' => './ca.pem', 'cert_file' => './client.crt', 'key_file' => './client.key', 'topic' => 'huginn' } end def mqtt_client client = MQTT::Client.new(options['uri']) if options['ssl'] client.ssl = options['ssl'].to_sym client.ca_file = options['ca_file'] client.cert_file = options['cert_file'] client.key_file = options['key_file'] end client end def receive(incoming_events) mqtt_client.connect do |c| incoming_events.each do |event| c.publish(options['topic'], payload) end end end def check mqtt_client.connect do |c| c.get(options['topic']) do |topic,message| create_event :payload => { 'topic' => topic, 'message' => message, 'time' => Time.now.to_i } end end end end end