From: Dobrica Pavlinusic Date: Sun, 10 Mar 2024 13:14:51 +0000 (+0100) Subject: don't send 0 values X-Git-Url: http://git.rot13.org/?p=air-quality;a=commitdiff_plain;h=HEAD;hp=9f416fec7ff1129ec471f59eb2942a1d968f95f5 don't send 0 values --- diff --git a/ble-mijia.sh b/ble-mijia.sh new file mode 100755 index 0000000..908d63f --- /dev/null +++ b/ble-mijia.sh @@ -0,0 +1,12 @@ +#!/bin/sh -e +mac=A4:C1:38:90:DC:63 +test ! -z "$1" && mac=$1 + +# based on https://ndimension.design.blog/2021/12/16/reading-data-from-xiaomi-mi-temperature-and-humidity-monitor-2-lywsd03mmc/ +# find sensor with: sudo hcitool lescan +# A4:C1:38:D8:3F:9C LYWSD03MMC + +gatttool -b $mac --char-write-req --handle='0x0038' --value="0100" --listen | \ + awk 'BEGIN { OFS=","; ORS="\n" } /value:/ { print "temperature=" strtonum("0x"$7$6) / 100, "humidity=" strtonum("0x"$8), "battery=" strtonum("0x"$10$9) / 1000 ; fflush() }' | \ + xargs -i curl --silent -XPOST 'http://10.60.0.92:8086/write?consistency=any&db=rot13' --data-binary "mijia,dc=trnjanska,mac=$mac {}" + diff --git a/dsm501.pl b/dsm501.pl index e61e2be..0a237a7 100755 --- a/dsm501.pl +++ b/dsm501.pl @@ -6,8 +6,8 @@ use Device::SerialPort; use Time::HiRes; use Data::Dump qw(dump); -my $port = shift @ARGV || '/dev/serial/by-path/pci-0000:00:1a.7-usb-0:5.1.3:1.0-port0'; -my $influx_url = shift @ARGV || 'http://10.13.37.92:8086/write?consistency=any&db=rot13'; +my $port = shift @ARGV || '/dev/serial/by-path/platform-3f980000.usb-usb-0:1.3:1.0-port0'; +my $influx_url = shift @ARGV || 'http://192.168.3.40:8086/write?consistency=any&db=rot13'; my $measurement = $ENV{MEASUREMENT} || 'dsm501'; my $s = new Device::SerialPort( $port ) || die $!; @@ -31,7 +31,7 @@ while (1) { $string =~ s/[\r\n]+$//; $string =~ s/\s/,/g; my $influx = "$measurement,dc=trnjanska $string $t"; - print "$influx\n"; + print "$influx\n" if -e '/dev/shm/air-debug'; system "curl --silent -XPOST '$influx_url' --data-binary '$influx'" } else { warn "SKIP: $string\n"; diff --git a/dust.sh b/dust.sh new file mode 100755 index 0000000..47c9b28 --- /dev/null +++ b/dust.sh @@ -0,0 +1,4 @@ +#!/bin/sh -xe + +cd /nuc/air-quality/ +MEASUREMENT=dust ./dsm501.pl /dev/ttyACM0 diff --git a/iio2mqtt.pl b/iio2mqtt.pl new file mode 100755 index 0000000..50668f0 --- /dev/null +++ b/iio2mqtt.pl @@ -0,0 +1,64 @@ +#!/usr/bin/perl +use warnings; +use strict; + +use Time::HiRes; + +# sudo apt install libiio-utils mosquitto-clients + +my $influx_url = shift @ARGV || 'http://192.168.3.40:8086/write?consistency=any&db=rot13'; + +my $delay = $ENV{DELAY} || 1; + +my $hostname = `hostname -s`; +chomp($hostname); + +while(1) { + + my $t = Time::HiRes::time; + my $t_influx = int( $t * 1_000_000_000 ); + + my $iio = `iio_info`; + + my $device; + my $name; + + my $influx = ''; + + foreach ( split(/\n/, $iio) ) { + if ( m/iio:device\d+:\s+(\S+)/ ) { + $device = $1; + + if ( $influx =~ m/,$/ ) { + $influx =~ s/,$/ $t_influx\n/; + } elsif ( $influx =~ m/ $/ ) { # only device + $influx =~ s/\S+\s$//; + } + $influx .= "iio,dc=trnjanska,host=$hostname,device=$device "; + + } 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"; + + $influx .= "$name=$val,"; + } else { + #warn "# $_\n"; + } + } + + $influx =~ s/,$/ $t_influx/; + system "curl --silent -XPOST '$influx_url' --data-binary '$influx'"; + warn "$influx\n"; + + my $dt = Time::HiRes::time + $delay - $t - 0.01; + if ( $dt > 0 ) { + sleep $dt; + } +} diff --git a/mh-z19b.pl b/mh-z19b.pl index 1d7b894..52e3812 100755 --- a/mh-z19b.pl +++ b/mh-z19b.pl @@ -7,7 +7,7 @@ use Time::HiRes; use Data::Dump qw(dump); my $port = shift @ARGV || '/dev/serial/by-path/platform-3f980000.usb-usb-0:1.5:1.2'; -my $influx_url = shift @ARGV || 'http://10.13.37.92:8086/write?consistency=any&db=rot13'; +my $influx_url = shift @ARGV || 'http://192.168.3.40:8086/write?consistency=any&db=rot13'; my $s = new Device::SerialPort( $port ) || die $!; $s->baudrate(9600); @@ -43,8 +43,8 @@ while (1) { my $co2 = $v[2] * 255 + $v[3]; if ( $v[0] == 0xff && $sum == $checksum ) { my $influx = "mh-z19b,dc=trnjanska co2=$co2 $t"; - print "$influx\n"; - system "curl --silent -XPOST '$influx_url' --data-binary '$influx'"; + print "$influx\n" if -e '/dev/shm/air-debug'; + system "curl --max-time 2 --silent -XPOST '$influx_url' --data-binary '$influx'"; system "mosquitto_pub -h rpi2 -t 'air/mh-z19b/co2' -m $co2"; } else { die "checksum error"; diff --git a/pms3003.pl b/pms3003.pl index 72771f5..e90d1c0 100755 --- a/pms3003.pl +++ b/pms3003.pl @@ -7,7 +7,7 @@ use Time::HiRes; use Data::Dump qw(dump); my $port = shift @ARGV || '/dev/serial/by-path/platform-3f980000.usb-usb-0:1.3:1.0-port0'; -my $influx_url = shift @ARGV || 'http://10.13.37.92:8086/write?consistency=any&db=rot13'; +my $influx_url = shift @ARGV || 'http://192.168.3.40:8086/write?consistency=any&db=rot13'; my $debug = $ENV{DEBUG} || 0; @@ -59,8 +59,8 @@ while (1) { }; $influx =~ s/,$//; $influx .= " $t"; - print "$influx\n"; - system "curl --silent -XPOST '$influx_url' --data-binary '$influx'" + print "$influx\n" if -e '/dev/shm/air-debug'; + system "curl --max-time 2 --silent -XPOST '$influx_url' --data-binary '$influx'" } } diff --git a/system/air-mh-z19b.service b/system/air-mh-z19b.service index 3a351ea..fd6e52e 100644 --- a/system/air-mh-z19b.service +++ b/system/air-mh-z19b.service @@ -5,7 +5,7 @@ Description=Air User=pi ExecStart=/home/pi/air-quality/mh-z19b.pl Restart=always -RestartSec=3s +RestartSec=1s [Install] WantedBy=multi-user.target diff --git a/system/air-mq7.service b/system/air-mq7.service index fb20c10..2175f9c 100644 --- a/system/air-mq7.service +++ b/system/air-mq7.service @@ -5,6 +5,7 @@ Description=Air User=pi ExecStart=/home/pi/air-quality/mq7.sh Restart=on-failure +RestartSec=2s [Install] -WantedBy=multi-user.target +WantedBy=network-online.target diff --git a/system/air-pms3003.service b/system/air-pms3003.service new file mode 100644 index 0000000..a26ce98 --- /dev/null +++ b/system/air-pms3003.service @@ -0,0 +1,11 @@ +[Unit] +Description=Air + +[Service] +User=pi +ExecStart=/home/pi/air-quality/pms3003.pl +Restart=on-failure +RestartSec=2s + +[Install] +WantedBy=network-online.target diff --git a/system/ble-mijia@.service b/system/ble-mijia@.service new file mode 100644 index 0000000..b12201c --- /dev/null +++ b/system/ble-mijia@.service @@ -0,0 +1,11 @@ +[Unit] +Description=Xiomi Mijia %i + +[Service] +User=pi +ExecStart=/home/pi/air-quality/ble-mijia.sh %i +Restart=always +RestartSec=3s + +[Install] +WantedBy=network-online.target diff --git a/system/dust.service b/system/dust.service new file mode 100644 index 0000000..2744a77 --- /dev/null +++ b/system/dust.service @@ -0,0 +1,11 @@ +[Unit] +Description=dust sensor + +[Service] +User=dpavlin +ExecStart=/nuc/air-quality/dust.sh +Restart=always +RestartSec=2s + +[Install] +WantedBy=multi-user.target 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 diff --git a/zph02.pl b/zph02.pl index 44d35ef..10f961e 100755 --- a/zph02.pl +++ b/zph02.pl @@ -7,7 +7,7 @@ use Time::HiRes; use Data::Dump qw(dump); my $port = shift @ARGV || '/dev/serial/by-path/platform-3f980000.usb-usb-0:1.5:1.0'; -my $influx_url = shift @ARGV || 'http://10.13.37.92:8086/write?consistency=any&db=rot13'; +my $influx_url = shift @ARGV || 'http://192.168.3.40:8086/write?consistency=any&db=rot13'; my $s = new Device::SerialPort( $port ) || die $!; $s->baudrate(9600); @@ -43,10 +43,10 @@ while (1) { my $checksum = $v[8]; my $pcnt = $v[3] + ( $v[4] / 100 ); - if ( $v[0] == 0xff && $sum == $checksum ) { + if ( $v[0] == 0xff && $sum == $checksum && $pcnt > 0) { my $influx = "zph02,dc=trnjanska pm25_pcnt=$pcnt $t"; - print "$influx\n"; - system "curl --silent -XPOST '$influx_url' --data-binary '$influx'"; + print "$influx\n" if -e '/dev/shm/air-debug'; + system "curl --max-time 2 --silent -XPOST '$influx_url' --data-binary '$influx'"; system "mosquitto_pub -h rpi2 -t 'air/zph02/pm25' -m $pcnt"; } }