class SpsMqttBridge

Public Class Methods

new(mqtt: {address: 'mqtt', port: '1883'}, sps:{host: 'sps', address: host, port: '59000'}, sps2:{address: 'sps', port: '59000'}) click to toggle source
# File lib/sps_mqtt_bridge.rb, line 15
def initialize(mqtt: {address: 'mqtt', port: '1883'}, 
   sps:{host: 'sps', address: host, port: '59000'}, 
               sps2:{address: 'sps', port: '59000'})
  @mqtt, @sps, @sps2 = mqtt, sps, sps2
end

Public Instance Methods

mqtt_to_sps(topic: ' click to toggle source
# File lib/sps_mqtt_bridge.rb, line 21
def mqtt_to_sps(topic: '#')

  MQTT::Client.connect(@mqtt[:address], @mqtt[:port]) do |client|

    client.get(topic) do |t, message|
      SPSPub.notice [t, message].join(': '), 
                              address: @sps[:address], port: @sps[:port]
    end
  end
end
sps_to_http(topic: ' { |ipaddr| ... } click to toggle source
# File lib/sps_mqtt_bridge.rb, line 54
def sps_to_http(topic: '#', url: '', timeout: 5, \
                                           http_auth: ["user", "password"])

  sps = SPSSub.new(host: @sps[:address], port: @sps[:port])

  sps.subscribe(topic: topic) do |message,t|
 
    begin
      
      Timeout::timeout(timeout){

        ipaddr = url[/https?:\/\/([^\/]+)/,1]
        ip_address = block_given? ? yield(ipaddr) || ipaddr : ipaddr
        full_url = url.sub(/(https?:\/\/)([^\/]+)/,'\1' + ip_address).\
                                    sub('$topic', t).sub('$msg', message)

        buffer = open(full_url, read_timeout: timeout,\
                    http_basic_authentication: http_auth).read

      }
    rescue Timeout::Error => e
      
      puts 'connection timed out'
      
    rescue OpenURI::HTTPError => e
      
      puts '400 bad request'
      
    end

  end
end
sps_to_mqtt(topic: ' click to toggle source
# File lib/sps_mqtt_bridge.rb, line 32
def sps_to_mqtt(topic: '#')

  SPSSub.new(host: @sps[:address], port: @sps[:port]).\
                                       subscribe(topic: topic) do |message,t|

    MQTT::Client.connect(@mqtt[:address], @mqtt[:port]) do |client|
      client.publish(t, message)
    end

  end
end
sps_to_sps(topic: ' click to toggle source
# File lib/sps_mqtt_bridge.rb, line 44
def sps_to_sps(topic: '#')

  SPSSub.new(host: @sps[:address], port: @sps[:port]).\
                                       subscribe(topic: topic) do |message,t|

    SPSPub.notice [t, message].join(': '), 
                                 address: @sps2[:address], port: @sps2[:port]
  end
end