nix-config/hosts/radiobert/sbs2json.rb

68 lines
1.3 KiB
Ruby

#!/usr/bin/env ruby
require 'socket'
require 'webrick'
require 'json'
TIMEOUT = 60
data = {}
Thread.new do
server = WEBrick::HTTPServer.new :Port => 8080
server.mount_proc "/data.json" do |req, res|
res.status = 200
res['Content-Type'] = 'application/json'
res.body = data.values.to_json
end
server.start
end
sock = TCPSocket.new "radiobert.serv.zentralwerk.org", 30003
while line = sock.gets
begin
fields = line.chomp.split(/,/)
msg_type = fields[1].to_i
values = {
:hex => fields[4].downcase,
:last => Time.now.to_i
}
case msg_type
when 1
values[:flight] = fields[10]
when 3
unless fields[14].empty? or fields[15].empty?
values[:lat] = fields[14].to_f
values[:lon] = fields[15].to_f
end
unless fields[11].empty?
values[:altitude] = fields[11].to_i
end
when 4
unless fields[12].empty?
values[:speed] = fields[12].to_i
end
unless fields[13].empty?
values[:track] = fields[13].to_i
end
end
old_value = data[values[:hex]]
if old_value
old_value.merge! values
else
data[values[:hex]] = values
end
data.delete_if { |hex, values|
Time.now.to_i >= values[:last] + TIMEOUT
}
rescue
STDERR.puts $!
end
end