2

Чем прочитать данные из  SNMP и записать в БД MySQL?

Собственно, вопрос названии темы. Есть некоторое оборудование с датчиками температуры и атмосферного давления, инфа отдаётся по SNMP. Требуется значения датчиков получать по крону и записывать в базу данных. Нашёл Perl-скрипт, который, судя по описанию, должен это делать. Создал базу, пользователя, предоставил привилегии, в изначальном скрипте подставил нужные значения, но он завершается с ошибкой can't execute request. Сам скрипт:


#!/usr/bin/perl

use strict;

use warnings;

use DBI;

use Net::SNMP;

# Параметры подключения с базе

my $database_login = 'pogoda';

my $database_passwd = 'Pogoda123';

my $database_name = 'pogoda';

# Подключаемся к базе

my $dbh = DBI -> connect("DBI:mysql:$database_name;host=localhost;", $database_login, $database_passwd) || die $DBI::errstr;

# Что будем оправшивать

my $snmp_host = '10.10.35.100'; # IP или hostname

my $snmp_community = 'public'; # SNMP Community

#Температура

my $snmp_oid_temperature = 'iso.3.6.1.4.1.17095.1.2.9.0'; # OID для опроса

#Атмосферное давление

my $snmp_oid_pressure = 'iso.3.6.1.4.1.17095.1.2.17.0'; # OID для опроса

# Пытаемся читать значение

# В -varbindlist должна быть ссылка на массив OID'ов

# В $result будет ссылка на хэш вида: OID => Значение

my $snmp_session = Net::SNMP->session(

-hostname => $snmp_host,

-community => $snmp_community,

-version => 1, # Явно указываем версию протокола

) or die "can't connect";

my $result = $snmp_session->get_request(-varbindlist => [$snmp_oid_temperature,$snmp_oid_pressure]) or die "can't execute request\n";

# Печатаем результат

print "$result->{$snmp_oid_temperature}\n$result->{$snmp_oid_pressure}\n";

# Пишем значения в базу

$dbh -> do("INSERT INTO netping1 SET temperature=\"$result->{$snmp_oid_temperature}\", pressure=\"$result->{$snmp_oid_pressure}\"") || die $DBI::errstr;


Т.к. я не ни разу не программист, не могу понять почему скрипт не отрабатывает. Что не так со скриптом? Ошибку в синтаксисе perl -c не нашёл. Все дополнения Perl, на которые он ругался, доустановлены.


Или существуют ли другие способы решить исходную задачу?