radiobert: add dump1090, feed to collectd for grafana

This commit is contained in:
Astro 2021-10-13 21:43:23 +02:00
parent da2f38ccfd
commit 393ff37b2c
2 changed files with 65 additions and 1 deletions

View File

@ -0,0 +1,27 @@
#!/usr/bin/env ruby
require 'open-uri'
require 'json'
require 'distance'
HOSTNAME = IO::readlines("/proc/sys/kernel/hostname").join.chomp
INTERVAL = 10
POS = [ 51.08102, 13.72806 ]
loop do
planes = JSON.parse URI.open("http://localhost:8080/data.json").read
planes.each do |plane|
flight = plane["flight"].strip
next if flight.empty?
alt = plane["altitude"].to_i
speed = plane["speed"].to_i
dist = GIS::Distance::new(POS[0], POS[1], plane["lat"].to_f, plane["lon"].to_f).distance
puts "PUTVAL \"#{HOSTNAME}/dump1090-altitude/current-#{flight}\" interval=#{INTERVAL} N:#{alt}"
puts "PUTVAL \"#{HOSTNAME}/dump1090-speed/current-#{flight}\" interval=#{INTERVAL} N:#{speed}"
puts "PUTVAL \"#{HOSTNAME}/dump1090-distance/current-#{flight}\" interval=#{INTERVAL} N:#{dist}"
end
sleep INTERVAL
end

View File

@ -137,8 +137,45 @@ in
Type "gauge"
</Key>
</URL>
'';
users.users.dump1090 = {
isSystemUser = true;
group = "dump10190";
};
users.groups.dump1090 = {};
systemd.tmpfiles.rules = [
"d /tmp/dump1090 0755 dump1090 dump1090 -"
];
systemd.services.dump1090 = {
wantedBy = [ "multi-user.target" ];
serviceConfig = {
ExecStart = "${pkgs.dump1090_sdrplus}/bin/dump1090 --aggressive --net";
User = "dump1090";
Group = "dump1090";
ProtectSystem = "full";
ProtectHome = true;
WorkingDirectory = "/tmp/dump1090";
WritablePaths = "/tmp/dump1090";
};
};
# TODO: `services.collectd.plugins.exec` is already defined by pi-sensors
# (https://github.com/NixOS/nixpkgs/pull/141551)
services.collectd.extraConfig =
let
distanceRb = pkgs.fetchurl {
url = "https://github.com/djberg96/gis-distance/raw/main/lib/gis/distance.rb";
sha256 = "1m9zzikcl5pzad66r8vnlj2p2hbbcqb8vdcf34nrhyd4mg1wkgkh";
};
libDir = pkgs.runCommandNoCC "libdir" {} ''
mkdir $out
cp ${distanceRb} $out/distance.rb
'';
in ''
<Plugin exec>
Exec "${config.services.collectd.user}" "${pkgs.ruby}/bin/ruby" "-I${libDir}" "${./collectd-adsb.rb}"
</Plugin>
'';
environment.systemPackages = with pkgs; [
libraspberrypi