From 393ff37b2c8bb586076c99b13894859220c3e9bc Mon Sep 17 00:00:00 2001 From: Astro Date: Wed, 13 Oct 2021 21:43:23 +0200 Subject: [PATCH] radiobert: add dump1090, feed to collectd for grafana --- hosts/radiobert/collectd-adsb.rb | 27 ++++++++++++++++++++++ hosts/radiobert/default.nix | 39 +++++++++++++++++++++++++++++++- 2 files changed, 65 insertions(+), 1 deletion(-) create mode 100644 hosts/radiobert/collectd-adsb.rb diff --git a/hosts/radiobert/collectd-adsb.rb b/hosts/radiobert/collectd-adsb.rb new file mode 100644 index 00000000..2eb57bf2 --- /dev/null +++ b/hosts/radiobert/collectd-adsb.rb @@ -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 diff --git a/hosts/radiobert/default.nix b/hosts/radiobert/default.nix index c620a3dc..75634491 100644 --- a/hosts/radiobert/default.nix +++ b/hosts/radiobert/default.nix @@ -137,8 +137,45 @@ in Type "gauge" - ''; + 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 '' + + Exec "${config.services.collectd.user}" "${pkgs.ruby}/bin/ruby" "-I${libDir}" "${./collectd-adsb.rb}" + + ''; environment.systemPackages = with pkgs; [ libraspberrypi