From: Dobrica Pavlinusic Date: Sun, 21 Feb 2021 08:29:50 +0000 (+0000) Subject: send iio sensors to mqtt X-Git-Url: http://git.rot13.org/?p=air-quality;a=commitdiff_plain;h=c9bfa79f7249f0963798648a565243e4a3e63161;hp=43acc200a049d872b7ce48df7bfb0a5c80818eb6 send iio sensors to mqtt --- diff --git a/iio2mqtt.pl b/iio2mqtt.pl new file mode 100755 index 0000000..a9dce9f --- /dev/null +++ b/iio2mqtt.pl @@ -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 index 0000000..95ebc8a --- /dev/null +++ b/system/iio2mqtt.service @@ -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