Добавим в систему запуск 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. Кто выкурит, напишите в комментах, добавлю в скрипт.
Добрый вечер. все сделал по инструкции. после последнего действия "crontab -e
ОтветитьУдалить*/1 * * * * /home/pi/domoticz/scripts/ping-phones.pl 2>&1 >> /dev/null" вывалилась ошибка
Какая ошибка? Проверьте путь к phones.pl
Удалитьpi@raspberrypi:~ $ crontab -e
ОтветитьУдалитьno crontab for pi - using an empty one
GNU nano 3.2 /tmp/crontab.pbCBqv/crontab
# Edit this file to introduce tasks to be run by cron.
#
# Each task to run has to be defined through a single line
# indicating with different fields when the task will be run
# and what command to run for the task
#
# To define the time you can provide concrete values for
# minute (m), hour (h), day of month (dom), month (mon),
# and day of week (dow) or use '*' in these fields (for 'any').
#
# Notice that tasks will be started based on the cron's system
# daemon's notion of time and timezones.
#
# Output of the crontab jobs (including errors) is sent through
# email to the user the crontab file belongs to (unless redirected).
#
# For example, you can run a backup of all your user accounts
# at 5 a.m every week with:
# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
Добавьте строчку с запуском скрипта в конец. Затем ctrl+x и Y для сохранения
УдалитьИзвините, не понял как.
ОтветитьУдалить# at 5 a.m every week with:
Удалить# 0 5 * * 1 tar -zcf /var/backups/home.tgz /home/
#
# For more information see the manual pages of crontab(5) and cron(8)
#
# m h dom mon dow command
*/1 * * * * /home/pi/domoticz/scripts/ping-phones.pl 2>&1 >> /dev/null
все равно не получается... вписываю свои idx и ip адреса 3-ех устройств
ОтветитьУдалитьнабираю "crontab -e"
выскакивает уже сохраненная строка "*/1 * * * * /home/pi/domoticz/scripts/ping-phones.pl 2>&1 >> /dev/null"
нажимаю CTRL+X, далее сохранить Y и выхожу
Максим, буду благодарен, если ответите...
ОтветитьУдалитьНапишите на kryonat@mail.ru
Удалитьвсе сделал по инструкции, с андроидами все работает, а вот айфоны причем 3 штуки в заблокированном режиме уходят в оффлайн и их не видно, но стоит разблокировать устройство их видно, не пойму как исправить
ОтветитьУдалить