fluent-plugin-serialport
Fluentdのプラグインを書いてみました.
SerialPortrからながれてくるデータをそのままfluentdにinputする
pluginです.
in_serialport.rb
id:tagomoris さんの記事を参考に作成しました.
http://github.com/katsyoshi/fluent-plugin-serialportに公開してあります.
module Fluent class SerialPortInput < Input Plugin.register_input('serial_input', self) config_param :data, :string, :default => "" config_param :delimiter, :string, :default => ',' config_param :eol, :string, :default => $/ config_param :com_port, :string config_param :baud_rate, :integer def initialize require 'serialport' super end def configure(conf) super end def start @serial = SerialPort.new(@com_port, @baud_rate, 8, 1, SerialPort::NONE) @thread = Thread.new do ary = [] loop do unless @serial.closed? begin d = @serial.readline(@eol) data = {} if @data.empty? data = {:default => d} else d = d.split(@delimiter) @data.split(",").each do |x| dd = d.shift if dd =~ /^(0x)|(\d+)/ if dd =~ /\./ dd = dd.strip.to_f else dd = dd.strip.to_i end end data[x.strip.to_sym] = dd end end Engine.emit("serial.#{device}", Engine.now, data) rescue => e STDERR.puts caller(), e break end end end end end def shutdown @serial.close @thread.join end private def average(ary) ary.inject(:+).to_f/ary.size.to_f end def device File.basename(@com_port).gsub(/\./,"_") end end end
設定例
ここでは,設定例について書きます.
入力は以下の例となっています.
<source> type serial_input com_port /path/to/serial/port baud_rate 9600 data device, sensor, value delimiter , </source>
typeは,serial_inputとなります(これでいいの?).com_portはシリアルポートの
絶対パス,baud_rateは転送速度,dataはシリアルポートから流れてくるデータの
タイトル(なくてもok),delimiterは流れてくるデータの区切文字(なくてもok)と
なっています.
さいごに
簡単にserialportからfluentdに投げるpluginを書いてみました.
自分で見ててソースがいけてないので,だれかお願いします.
ヽ('ω')ノ三ヽ('ω')ノ