send iio sensors to mqtt
authorDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 21 Feb 2021 08:29:50 +0000 (08:29 +0000)
committerDobrica Pavlinusic <dpavlin@rot13.org>
Sun, 21 Feb 2021 08:29:50 +0000 (08:29 +0000)
iio2mqtt.pl [new file with mode: 0755]
system/iio2mqtt.service [new file with mode: 0644]

diff --git a/iio2mqtt.pl b/iio2mqtt.pl
new file mode 100755 (executable)
index 0000000..a9dce9f
--- /dev/null
@@ -0,0 +1,40 @@
+#!/usr/bin/perl
+use warnings;
+use strict;
+
+use Time::HiRes;
+
+# sudo apt install libiio-utils mosquitto-clients
+
+my $hostname = `hostname -s`;
+chomp($hostname);
+
+while(1) {
+
+       my $t = Time::HiRes::time;
+
+       my $iio = `iio_info`;
+
+       my $device;
+       my $name;
+
+       foreach ( split(/\n/, $iio) ) {
+               if ( m/iio:device\d+:\s+(\S+)/ ) {
+                       $device = $1;
+               } elsif ( m/(\S+):\s+\(input\)/ ) {
+                       $name = $1;
+               } elsif ( m/attr\s+0:\s+input\svalue: (\d+[\.\d]+)/ ) {
+                       my $val = $1;
+                       if ( $val !~ m/\d+\.\d+/ ) {
+                               $val = $val / 1000;
+                       }
+                       my $topic = "iio/$hostname/$device/$name";
+                       #print "$topic $val\n";
+                       system "mosquitto_pub -h rpi2 -t $topic -m $val";
+               } else {
+                       #warn "# $_\n";
+               }
+       }
+
+       sleep Time::HiRes::time + 1 - $t;
+}
diff --git a/system/iio2mqtt.service b/system/iio2mqtt.service
new file mode 100644 (file)
index 0000000..95ebc8a
--- /dev/null
@@ -0,0 +1,11 @@
+[Unit]
+Description=iio2mqtt
+
+[Service]
+User=dpavlin
+ExecStart=/home/dpavlin/air-quality/iio2mqtt.pl
+Restart=always
+RestartSec=2s
+
+[Install]
+WantedBy=multi-user.target