Domoticz. Мониторинг сетевых устройств при помощи perl скрипта
Добавим в систему запуск perl-скрипта, который будет запускаться 3 раза в минуту по crontab и проверять online\offline состояние устройства.
Для, для корректной работы, требуются статичные IP-адреса для опрашиваемых устройств. Ну, или прописанные в роутере имена для них.
Переходим в Настройка>Оборудование и добавляем новое устройство Dummy
Затем создаём виртуальный датчик с типом Переключатель
Переходим во вкладку Настройка>Устройства и запоминаем idx нового переключателя (30)
Теперь подготовим сервер для работы с perl-скриптами
Не забываем сделать скрипт исполняемым
Пример использования отслеживания сетевых устройств для управления фасадным освещением.
ВНИМАНИЕ!!! В скрипте не прописаны логин\пароль для авторизации на сервере Domoticz. Поэтому, в случае, если вы обезопасились, и настроили авторизацию в вебморду через логин и пароль, скрипт может благополучно не работать!
Прописываем в настройках Domoticz "Локальные сети (без имени\пароля) и радуемся. Ну или курим API. Кто выкурит, напишите в комментах, добавлю в скрипт.
Для, для корректной работы, требуются статичные IP-адреса для опрашиваемых устройств. Ну, или прописанные в роутере имена для них.
Переходим в Настройка>Оборудование и добавляем новое устройство Dummy
Затем создаём виртуальный датчик с типом Переключатель
Переходим во вкладку Настройка>Устройства и запоминаем idx нового переключателя (30)
Теперь подготовим сервер для работы с perl-скриптами
sudo apt-get install libjson-perl libdatetime-perl libwww-perlСоздаём скрипт в ping-phones.pl в /home/pi/domoticz/scripts/nano /home/pi/domoticz/scripts/ping-phones.plИ добавляем туда следующее содержимое#!/usr/bin/perl
use v5.14;
use LWP::Simple; # From CPAN
use JSON qw( decode_json ); # From CPAN
use Data::Dumper; # Perl core module
use strict; # Good practice
use warnings; # Good practice
use utf8;
use feature qw< unicode_strings >;
# Configuration section, please update to your values
my $domoticz = "127.0.0.1:8080"; # ip and port of your Domoticz server
my $domo_cmd = "http://$domoticz/json.htm?type=devices&filter=all&used=true&order=Name";
# Array of (device idx, IP)
my %IP=(30=>'10.0.0.40', # redmi3s
31=>'10.0.0.41', # redmi4a
32=>'10.0.0.42'); # asusz00sd
my $debug=0;
# Get the JSON url
my $json = get( $domo_cmd );
die "Could not get $domo_cmd!" unless defined $json;
# Decode the entire JSON
my $decoded = JSON->new->utf8(0)->decode( $json );
my @results = @{ $decoded->{'result'} };
#Put JSON switch and status in a Table
my @tab;
foreach my $f ( @results ) {
if ($f->{"SwitchType"}) {
$tab[$f->{"idx"}]=$f->{"Status"};
}
}
# Now we go all over the IP to check if they are alive
foreach my $k (keys %IP) {
my $ip=$IP{$k};
my $res=system("sudo ping $ip -w 3 2>&1 > /dev/null");
#print $k." ".$res."\n";
if (($res==0)&&($tab[$k] eq 'Off')) {
#If device answered to ping and device status is Off, turn it On in Domoticz
if ($debug) {print "$k is On\n"};
`curl -s "http://$domoticz/json.htm?type=command¶m=switchlight&idx=$k&switchcmd=On"`;
} elsif (($res!=0)&&($tab[$k] eq 'On')) {
#If device did NOT answer to ping and device status is On, turn it Off in Domoticz
if ($debug) {print "$k is Off\n"};
`curl -s "http://$domoticz/json.htm?type=command¶m=switchlight&idx=$k&switchcmd=Off"`;
} else {
if ($debug) {print "do nothing: $k is ".$tab[$k]."\n";}
}
}Заполняем Configuration section, а именно настройки подключения к серверу и idx и IP-адреса устройств.Не забываем сделать скрипт исполняемым
sudo chmod +x /home/pi/domoticz/scripts/ping-phones.plОсталось добавить в crontab задание на запуск скрипта каждую минутуcrontab -e
*/1 * * * * /home/pi/domoticz/scripts/ping-phones.pl 2>&1 >> /dev/nullВыполнение скрипта, для проверки 3 устройств занимает 5-7 секунд. Поэтому для каждого типа устройств (камеры, мобильные телефоны, рабочие станции) я создал по отдельному скрипту, и прописал запуск в crontab с различными интервалами.Пример использования отслеживания сетевых устройств для управления фасадным освещением.
ВНИМАНИЕ!!! В скрипте не прописаны логин\пароль для авторизации на сервере Domoticz. Поэтому, в случае, если вы обезопасились, и настроили авторизацию в вебморду через логин и пароль, скрипт может благополучно не работать!
Прописываем в настройках Domoticz "Локальные сети (без имени\пароля) и радуемся. Ну или курим API. Кто выкурит, напишите в комментах, добавлю в скрипт.
Комментарии (10)