|
/Users/cpanrun/depot/main/contrib-patched/perl/CPAN/src/OWNet/blib/lib/OWNet.pm |
OWNet Light weight access to owserver
OWNet is an easy way to access owserver and thence the 1-wire bus.
Dallas Semiconductor's 1-wire system uses simple wiring and unique addresses for it's interesting devices. The One Wire File System is a suite of programs that hides 1-wire details behind a file system metaphor. owserver connects to the 1-wire bus and provides network access.
OWNet is a perl module that connects to owserver and allows reading, writing and listing the 1-wire bus.
Then the following perl program prints the temperature:
use OWNet ; print OWNET::read( "localhost:3000" , "/10.67C6697351FF/temperature" ) ."\n" ;
There is the alternative object oriented form:
use OWNet ; my $owserver = OWNET->new( "localhost:4304" ) ; print $owserver->read( "/10.67C6697351FF/temperature" ) ."\n" ;
my $owserver = OWNet -> new( address ) ;
read( address, path ) $owserver -> read( path )
write( address, path, value ) $owserver -> write( path, value )
dir( address, path ) $owserver -> dir( path )
present( address, path ) $owserver -> present( path )
TCP/IP address of owserver. Valid forms:
Temperature scale can also be specified in the address. Same syntax as the other OWFS programs:
Device display format (1-wire unique address) can also be specified in the address, with the general form of -ff[.]i[[.]c] (family id crc):
Warning messages will only be display if verbose flag is specified in address
owfs-type path to an item on the 1-wire bus. Valid forms:
New value for a device property. Used by write.
Create a new OWNet object -- corresponds to an owserver.
Error (and undef return value) if:
Read the value of a 1-wire device property. Returns the (scalar string) value of the property.
Error (and undef return value) if:
Set the value of a 1-wire device property. Returns ``1'' on success.
Error (and undef return value) if:
Test if a 1-wire device exists.
Error (and undef return value) if:
Return a comma-separated list of the entries in path. Entries are equivalent to ``fully qualified names'' -- full path names.
Error (and undef return value) if:
OWFS is a suite of programs that allows easy access to Dallas Semiconductor's 1-wire bus and devices. OWFS provides a consistent naming scheme, safe multplexing of 1-wire traffice, multiple methods of access and display, and network access. The basic OWFS metaphor is a file-system, with the bus beinng the root directory, each device a subdirectory, and the the device properties (e.g. voltage, temperature, memory) a file.
1-wire is a protocol allowing simple connection of inexpensive devices. Each device has a unique ID number (used in it's OWFS address) and is individually addressable. The bus itself is extremely simple -- a data line and a ground. The data line also provides power. 1-wire devices come in a variety of packages -- chips, commercial boxes, and iButtons (stainless steel cans). 1-wire devices have a variety of capabilities, from simple ID to complex voltage, temperature, current measurements, memory, and switch control.
Connection to the 1-wire bus is either done by bit-banging a digital pin on the processor, or by using a bus master -- USB, serial, i2c, parallel. The heavy-weight OWFS programs: owserver owfs owhttpd owftpd and the heavy-weight perl module OW all link in the full OWFS library and can connect directly to the bus master(s) and/or to owserver.
OWNet is a light-weight module. It connects only to an owserver, does not link in the OWFS library, and should be more portable..
OWNet can be used in either a classical (non-object-oriented) manner, or with objects. The object stored the ip address of the owserver and a network socket to communicate. OWNet will use persistent tcp connections for the object form -- potentially a performance boost over a slow network.
owserver is a separate process that must be accessible on the network. It allows multiple clients, and can connect to many physical 1-wire adapters and 1-wire devices. It's address must be discoverable -- either set on the command line, or at it's default location, or by using Bonjour (zeroconf) service discovery.
An example owserver invocation for a serial adapter and explicitly the default port:
owserver -d /dev/ttyS0 -p 4304
use OWNet ;
# Create owserver object
my $owserver = OWNet->new('localhost:4304 -v -F') ; #default location, verbose errors, Fahrenheit degrees
# my $owserver = OWNet->new() ; #simpler, again default location, no error messages, default Celsius
#print directory
print $owserver->dir('/') ;
#print temperature from known device (DS18S20, ID: 10.13224366A280)
print "Temperature: ".$owserver->read('/uncached/10.13224366A280/temperature') ;
# Now for some fun -- a tree of everything:
sub Tree($$) {
my $ow = shift ;
my $path = shift ;
print "$path\t" ;
# first try to read
my $value = $ow->read($path) ;
if ( defined($value) ) {
print "$value\n";
return ;
}
# not readable, try as directory
my $dirstring = $ow->dir($path) ;
if ( defined($dirstring) ) {
print "<directory>\n" ;
my @dir = split /,/ , $ow->dir($path) ;
foreach (@dir) {
Tree($ow,$_) ;
}
return ;
}
# can't read, not directory print "<write-only>\n" ; return ; }
Tree( $owserver, '/' ) ;
Bounjour details for owserver at:
Paul H Alfille paul.alfille @ gmail . com
Support for proper timeout using the ``select'' function seems broken in perl. This might leave the routines vulnerable to network timing errors.
Copyright (c) 2007 Paul H Alfille. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
|
/Users/cpanrun/depot/main/contrib-patched/perl/CPAN/src/OWNet/blib/lib/OWNet.pm |