aboutsummaryrefslogtreecommitdiff
path: root/plot-log-plotly.pl
diff options
context:
space:
mode:
Diffstat (limited to 'plot-log-plotly.pl')
-rw-r--r--plot-log-plotly.pl52
1 files changed, 52 insertions, 0 deletions
diff --git a/plot-log-plotly.pl b/plot-log-plotly.pl
new file mode 100644
index 0000000..27992af
--- /dev/null
+++ b/plot-log-plotly.pl
@@ -0,0 +1,52 @@
+#!/usr/bin/env perl
+use strict;
+use warnings;
+use 5.026;
+use Path::Tiny;
+
+use Chart::Plotly;
+use Chart::Plotly::Plot;
+use Chart::Plotly::Trace::Scatter;
+
+my @rows = path($ARGV[0])->lines_utf8({chomp=>1});
+
+my @column_names = qw(humidity temperature battery);
+my %data_for_src;
+for my $row (@rows) {
+ my %data;my $src;
+ ($data{dt},$src,@data{@column_names}) =
+ $row =~ m{
+ \A \s*
+ ( \d{4}-\d{2}-\d{2} \s+ \d{2}:\d{2}:\d{2} )
+ \s+
+ (?: [0-9a-f:]+ ):([0-9a-f]+) # only take the last byte of the MAC, it's enough
+ \s+
+ ( [0-9.]+ )
+ \s+
+ ( [0-9.]+ )
+ \s+
+ ( [0-9.]+ )
+ \s* \z
+ }x or next;
+ for my $column ('dt',@column_names) {
+ push $data_for_src{$src}->{$column}->@*, $data{$column}
+ }
+}
+
+my %plots;
+for my $column (@column_names) {
+ my $plot = Chart::Plotly::Plot->new(
+ layout => { title => $column },
+ );
+ for my $src (sort keys %data_for_src) {
+ my $trace = Chart::Plotly::Trace::Scatter->new(
+ x => $data_for_src{$src}->{dt},
+ y => $data_for_src{$src}->{$column},
+ name => $src,
+ );
+ $plot->add_trace($trace);
+ }
+ $plots{$column} = $plot;
+}
+
+Chart::Plotly::show_plot(@plots{@column_names});