summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDaniel Friesel <derf@finalrewind.org>2017-08-06 16:34:33 +0200
committerDaniel Friesel <derf@finalrewind.org>2017-08-06 16:34:33 +0200
commit006a9ab43bcd8b30352842d3cd44eec2e954fb25 (patch)
treec5d0f644f08fba46c38f8b615b74d05723a5f9b0
Add initial version of mqttsyncdir-subscriber
The config is hardcoded right now, but the basic functionality is working already
-rwxr-xr-xbin/mqttsyncdir-subscriber103
1 files changed, 103 insertions, 0 deletions
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 E<lt>derf@finalrewind.orgE<gt>
+
+=head1 LICENSE
+
+ 0. You just DO WHAT THE FUCK YOU WANT TO.