Device::ISY perl library Code
Perl llibrary for interacting with UDI ISY controlers
Status: Beta
Brought to you by:
jchonig
#!/usr/bin/perl -w
# Copyright (c) 2010 Jeffrey C Honig <jch@honig.net>
# XXX - TODO
# Use the class
# Discover ISYs
# Add some docs
# Add user and password
use HTTP::Request;
use LWP::UserAgent;
use XML::Twig;
use Getopt::Long;
use Pod::Usage;
use strict;
sub wget {
my $url = shift;
my $request = HTTP::Request->new(GET => $url);
my $ua = LWP::UserAgent->new;
my $response = $ua->request($request);
return $response->content();
}
my $opt_addr;
my $opt_man = 0;
my $opt_help = 0;
my $opt_verbose = 0;
GetOptions (
'verbose|v' => \$opt_verbose,
'help|?' => \$opt_help,
'man' => \$opt_man,
'isy=s' => \$opt_addr,
) || pod2usage(2);
if ($opt_help) {
pod2usage(1);
}
if ($opt_man) {
pod2usage(-existstatus => 0, -verbose => 2);
}
# Check ennvironment for default address
if (!$opt_addr && exists $ENV{"ISY_ADDR"}) {
$opt_addr = $ENV{"ISY_ADDR"};
}
if (!$opt_addr) {
die "ISY address not specified";
}
my $parser = XML::Twig->new();
my $spec = wget("http://${opt_addr}/services.wsdl");
if ($opt_verbose) {
printf "SERVICES %s\n", $spec;
}
my $twig = $parser->parse($spec);
my $defs = $twig->root->first_child("wsdl:import");
my $location = $defs->{"att"}->{"location"};
printf "LOCATION: %s\n", $location;
if ($location =~ m%.*/([^/]+)$%) {
my $filename = $1;
printf "FILENAME: %s\n", $filename;
my $wsdl = wget("http://${opt_addr}" . $location);
open (OUT, ">$filename");
printf OUT "%s\n", join("\n", split(/\r\n/, $wsdl));
close OUT;
}
exit 0;
__END__