e9ba122aff4f68fcd595780c89a151c4dac4bcf5
[air-quality] / iio2mqtt.pl
1 #!/usr/bin/perl
2 use warnings;
3 use strict;
4
5 use Time::HiRes;
6
7 # sudo apt install libiio-utils mosquitto-clients
8
9 my $influx_url = shift @ARGV || 'http://10.13.37.92:8086/write?consistency=any&db=rot13';
10
11 my $hostname = `hostname -s`;
12 chomp($hostname);
13
14 while(1) {
15
16         my $t = Time::HiRes::time;
17         my $t_influx = int( $t * 1_000_000_000 );
18
19         my $iio = `iio_info`;
20
21         my $device;
22         my $name;
23
24         my $influx = '';
25
26         foreach ( split(/\n/, $iio) ) {
27                 if ( m/iio:device\d+:\s+(\S+)/ ) {
28                         $device = $1;
29
30                         if ( $influx =~ m/,$/ ) {
31                                 $influx =~ s/,$/ $t_influx\n/;
32                         }
33                         $influx .= "iio,dc=trnjanska,host=$hostname,device=$device ";
34
35                 } elsif ( m/(\S+):\s+\(input\)/ ) {
36                         $name = $1;
37                 } elsif ( m/attr\s+0:\s+input\svalue: (\d+[\.\d]+)/ ) {
38                         my $val = $1;
39                         if ( $val !~ m/\d+\.\d+/ ) {
40                                 $val = $val / 1000;
41                         }
42                         my $topic = "iio/$hostname/$device/$name";
43                         #print "$topic $val\n";
44                         system "mosquitto_pub -h rpi2 -t $topic -m $val";
45
46                         $influx .= "$name=$val,";
47                 } else {
48                         #warn "# $_\n";
49                 }
50         }
51
52         $influx =~ s/,$/ $t_influx/;
53         system "curl --silent -XPOST '$influx_url' --data-binary '$influx'";
54         warn "$influx\n";
55
56         sleep Time::HiRes::time + 1 - $t;
57 }