store heartbeat in postgresql
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 4 Oct 2020 15:30:47 +0000 (17:30 +0200)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 4 Oct 2020 15:30:47 +0000 (17:30 +0200)
zc-mqtt

diff --git a/zc-mqtt b/zc-mqtt
index 9706b5b..cb75957 100755 (executable)
--- a/zc-mqtt
+++ b/zc-mqtt
@@ -16,6 +16,8 @@ use Getopt::Long;
 use Pod::Usage;
 use POSIX qw(strftime);
 use File::Slurp;
+use DBD::Pg;
+use Data::Dump qw(dump);
 use autodie;
 
 use lib '.';
@@ -25,6 +27,27 @@ my $queue = "queue";
 
 $|=1; # flush STDOUT
 
+my $dbh = DBI->connect("dbi:Pg:dbname=zc", "dpavlin", "", { RaiseError => 1 });
+my @columns = split(/\n/, <<__COLUMNS__);
+0x01   PN
+0x03   X_axis_angle
+0x04   Y_axis_angle
+0x0c   Sensor_temperature
+0x0d   Power_source_voltage
+0x11   Arming_disarming
+0x17   Signal_strength
+0x18   Sensor_operating_mode
+0x19   Alarm_axis
+__COLUMNS__
+
+my $cols = join(',',  map {      (split(/\t/,$_))[1]   } @columns);
+my @insert_data_ids = map { hex( (split(/\t/,$_))[0] ) } @columns ;
+
+my $sql_placeholders = ',?' x ($#columns+1);
+$sql_placeholders =~ s/^,//;
+
+my $sth = $dbh->prepare(qq{insert into zc ($cols) values ($sql_placeholders)});
+
 my $help;
 my $man;
 my $verbose = 2;
@@ -112,6 +135,11 @@ while (1) {
                        $pending =~ s{$queue/$dir/.pending/}{};
                        rename "$queue/$dir/.pending/$pending", "$queue/$dir/$pending.sent.$pending_function_code";
                }
+
+               my $hash = protocol_decode( $up_down, $msg->message );
+               $sth->execute( map { $hash->{data_id}->{$_} } @insert_data_ids );
+
+
       }
 
       if (defined $count && --$count == 0) {