From 006a9ab43bcd8b30352842d3cd44eec2e954fb25 Mon Sep 17 00:00:00 2001 From: Daniel Friesel Date: Sun, 6 Aug 2017 16:34:33 +0200 Subject: Add initial version of mqttsyncdir-subscriber The config is hardcoded right now, but the basic functionality is working already --- bin/mqttsyncdir-subscriber | 103 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100755 bin/mqttsyncdir-subscriber diff --git a/bin/mqttsyncdir-subscriber b/bin/mqttsyncdir-subscriber new file mode 100755 index 0000000..6efe5aa --- /dev/null +++ b/bin/mqttsyncdir-subscriber @@ -0,0 +1,103 @@ +#!/usr/bin/env perl + +use strict; +use warnings; +use 5.020; + +our $VERSION = '0.00'; + +use File::Path qw(make_path); +use File::Slurp qw(write_file); +use Net::MQTT::Simple; + +# proof of concept -- a proper config parser will be implemented later +my $outdir = '/tmp/mqttsyncdir-subscriber'; +my $server = '172.23.225.193'; + +my %config = ( + 'sensor/+/am_rh' => { + freshness => 600, + norm_factor => 0.1, + }, + 'sensor/+/am_temp' => { + freshness => 600, + norm_factor => 0.1, + }, + 'sensor/+/temperature' => { + freshness => 600, + }, + 'host/+/temperature/+' => { + freshness => 600, + norm_factor => 0.001, + }, +); + +my %subscription; + +for my $name ( keys %config ) { + $subscription{$name} = sub { + my ( $topic, $message ) = @_; + my $basedir = "${outdir}/${topic}"; + + $basedir =~ s{ / [^/]+ $ }{}x; + + if ( exists $config{$name}{norm_factor} ) { + $message *= $config{$name}{norm_factor}; + } + + if ( not -e $basedir ) { + make_path($basedir); + } + + write_file( "${outdir}/${topic}", $message ); + }; +} + +my $mqtt = Net::MQTT::Simple->new($server); +$mqtt->subscribe(%subscription); + +while (1) { + $mqtt->tick(30); + + # TODO handle freshness +} + +$mqtt->run(%subscription); + +__END__ + +=head1 NAME + +=head1 SYNOPSIS + +=head1 VERSION + +=head1 DESCRIPTION + +=head1 OPTIONS + +=over + +=back + +=head1 EXIT STATUS + +=head1 CONFIGURATION + +None. + +=head1 DEPENDENCIES + +=over + +=back + +=head1 BUGS AND LIMITATIONS + +=head1 AUTHOR + +Copyright (C) 2017 by Daniel Friesel Ederf@finalrewind.orgE + +=head1 LICENSE + + 0. You just DO WHAT THE FUCK YOU WANT TO. -- cgit v1.2.3