Triggers 如何触发Zoneminder拨打陆地电话线

Triggers 如何触发Zoneminder拨打陆地电话线,triggers,alarm,phone-call,modem,zoneminder,Triggers,Alarm,Phone Call,Modem,Zoneminder,您需要通过调制解调器将电脑连接到地面线路 安装wvdial并对其进行配置,然后测试它是否响铃 然后修改以访问该页面的调制解调器搜索,例如触发器 在主目录中运行该脚本 此外,我还发现,由于调制解调器比较老式,所以在Linux中不受很好的支持。例如,WinModem很便宜,因为它们在Windows软件中执行低级操作以节省硬件,因此我的旧PC的PCI调制解调器在当前的Linux中不再受支持,即,我必须找到一个硬件驱动的调制解调器,例如Trendnet TFM 561u。这是在2013年12月14日我的

您需要通过调制解调器将电脑连接到地面线路

安装wvdial并对其进行配置,然后测试它是否响铃

然后修改以访问该页面的调制解调器搜索,例如触发器

在主目录中运行该脚本

此外,我还发现,由于调制解调器比较老式,所以在Linux中不受很好的支持。例如,WinModem很便宜,因为它们在Windows软件中执行低级操作以节省硬件,因此我的旧PC的PCI调制解调器在当前的Linux中不再受支持,即,我必须找到一个硬件驱动的调制解调器,例如Trendnet TFM 561u。这是在2013年12月14日我的Mint系统上开箱即用的,显示为/dev/ttyACM0

#!/usr/bin/perl -w

use strict;

use lib ("/opt/zm/share/perl/5.14.2");

use ZoneMinder;

$| = 1;

# mDbgInit( "myscript", level=>0, to_log=>0, to_syslog=>0, to_term=>1 );

my $dbh = DBI->connect( "DBI:mysql:database=".ZM_DB_NAME.";host=".ZM_DB_HOST, ZM_DB_USER, ZM_DB_PASS );

my $sql = "select M.*, max(E.Id) as LastEventId from Monitors as M left join Events as E on M.Id = E.MonitorId where M.Function != 'None' group by (M.Id)";
my $sth = $dbh->prepare_cached( $sql ) or die( "Can't prepare '$sql': ".$dbh->errstr() );

my $res = $sth->execute() or die( "Can't execute '$sql': ".$sth->errstr() );
my @monitors;
while ( my $monitor = $sth->fetchrow_hashref() ) 
{
    push( @monitors, $monitor );
}

while( 1 ) {
    foreach my $monitor ( @monitors ) {
        next if ( !zmMemVerify( $monitor ) );

        my $lei = eval {               # avoid...
            $monitor->{LastEventId};   # ...aborting
        };                             # ...this script
        warn $@ if $@;                 # ...if there is no
        if( ! $lei ) {                 # ...LastEventId
        next;                          # ...e.g. for a clean start
        }                              # ...after clearing out database.

        my $last_event_id = zmHasAlarmed( $monitor, $lei );


        if ( $last_event_id ) {
            if ( $monitor->{Name} ne "monitor-1" && $monitor->{Name} ne "monitor-2" )  {
                my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime();
                if ( $hour > 23 || $hour < 7 ) {
                    $monitor->{LastEventId} = $last_event_id;
                    print( "Monitor ".$monitor->{Name}." has alarmed \n" );
                    my $cmd .= "echo ";
                    $cmd .= "\"";
                    $cmd .= "Garage Alarm: ".$monitor->{Name};
                    $cmd .= "\"";
                    $cmd .=  ' | mail -s `curl ifconfig.me` myemailaddress@gmail.com';
                    system ($cmd);
                    system('wvdial');
                }
            } 
        }
    }
    sleep( 1 );
}
这是我第一次尝试修改Perl。这将是艰难的

第一个系统$cmd通过电子邮件发送给我myemailaddress@gmail.com您需要自己设置此选项,以使邮件与当前URL一起工作,以防其最近发生更改

第二个系统“wvdial”响了我的电话

如您所见,监视器1和监视器2被忽略

如您所见,它在晚上11点之后到早上7点之前启用

我的/etc/wvdial.conf文件与此类似:-

[Dialer Defaults]
Init1 = ATZ
Init2 = ATQ0 V1 E1 S0=0 &C1 &D2 +FCLASS=0
Modem Type = USB Modem
Phone = 123456789
ISDN = 0
Password = <Your Password>
New PPPD = yes
Username = <Your Login Name>

Modem = /dev/ttyACM0
Baud = 460800
Dial Command = ATDT
Auto Reconnect = off
Dial Attempts = 1

你是把它作为一个教程发布给其他用户还是你有一个实际的问题?这是两周的挣扎,浓缩成半小时的解决方案+解释。你应该把你的教程发布在某个博客上。看起来很有趣。