---
name: "ownet"
section: "1"
platform: "linux"
package: "libownet-dev"
version: "3.2p3+dfsg1-2+deb10u1"
release: "Debian 10 (Buster)"
platforms: ["linux"]
url: "https://new.carta.tech/ownet"
---

# ownet(1)

easy C-language 1-wire interface to the owserver protocol

## NAME

**ownet** , **(libownet)** - easy C-language 1-wire interface to the owserver protocol

## SYNOPSIS

**libownet** library to link with your program

### Handle

**OWNET\_HANDLE**\
 Handle to each owserver connection

### Initialization

**OWNET\_HANDLE OWNET\_init( const char \*** *owserver\_tcp\_address\_and\_port* **)**\
 Associate an  **owserver (1)** tcp/ip address with a handle.

### Directory listing

**int OWNET\_dirlist( OWNET\_HANDLE** *owserver\_handle* **, const char \*** *onewire\_path* **, char \*\*** *comma\_separated\_list* **)**\
 Create a comma-separated list of directory elements.

**int OWNET\_dirprocess( OWNET\_HANDLE** *owserver\_handle* **, const char \*** *onewire\_path* **, void (\*** *dirfunc* **) (void \*, const char \*), void \*** *passed\_on\_value* **)**\
 **void** *dirfunc* **( void \*** *passed\_on\_value* **, const char \*** *directory\_element* **)**\
 Apply function  *dirfunc* to each directory element, along with an arbitrary passed\_on\_value.

### Get data

**int OWNET\_read( OWNET\_HANDLE** *owserver\_handle* **, const char \*** *onewire\_path* **, const char \*\*** *return\_string* **)**\
 Read a value (of specified size) from a 1-wire device.

**int OWNET\_lread( OWNET\_HANDLE** *owserver\_handle* **, const char \*** *onewire\_path* **, const char \*\*** *return\_string* **, size\_t** *size* **, off\_t** *offset* **)**\
 Read a value (of specified size and offset) from a 1-wire device.

**int OWNET\_present( OWNET\_HANDLE** *owserver\_handle* **, const char \*** *onewire\_path* **)**\
 Check if a 1-wire device is present.

### Set data

**int OWNET\_put( OWNET\_HANDLE** *owserver\_handle* **, const char \*** *onewire\_path* **, const char \*** *value\_string* **, size\_t** *size* **)**\
 Write a value (of specified size) to a 1-wire device.

**int OWNET\_lwrite( OWNET\_HANDLE** *owserver\_handle* **, const char \*** *onewire\_path* **, const char \*** *value\_string* **, size\_t** *size* **, off\_t** *offset* **)**\
 Write a value (of specified size and offset) to a 1-wire device.

### Close

**void OWNET\_close( OWNET\_HANDLE** *owserver\_handle* **)**\
 Close the connection to a particular owserver.

**void OWNET\_closeall( void )**\
 Close all open owserver connections.

**void OWNET\_finish( void )**\
 Close all open owserver connections and free all memory.

### Temperature scale

**void OWNET\_set\_temperature\_scale( char** *temperature\_scale* **)**\
 **char OWNET\_get\_temperature\_scale( void )**\
 Set and retrieve the temperature scale used for all communications.

### Device format

**void OWNET\_set\_device\_format( const char \*** *device\_format* **)**\
 **const char \* OWNET\_get\_device\_format( void )**\
 Set and retrieve the 1-wire device serial number format used for all communications.

## FUNCTIONS

### OW\_init

*OW\_init\_string* offers the full flexibility of the **owfs (1)** and **owhttpd (1)** command line.

- *Arguments*

  Can be as simple as jus the device name, a full parameter specification. One or more device names (includes tcp, serial, usb...) and command line switches. See **owfs (1)** for full syntax.

- *Returns*

  0 for success. -1 on error and *errno* will be set. *OW\_finish* does not need to be called if *OW\_init* fails.

- *Sequence*

  One of the *init* functions must be called before accessing the 1-wire bus. *OW\_finish* is optional.

### OW\_init\_args

*OW\_init\_args* offers the full flexibility of the **owfs (1)** and **owhttpd (1)** command line.

- *Arguments*

  One or more device names (includes tcp, serial, usb...) and command line switches. See **owfs (1)** for full syntax. Unlike *OW\_init\_string* the arguments are in argv/argc format.

- *Returns*

  0 for success. -1 on error and *errno* will be set. *OW\_finish* does not need to be called if *OW\_init* fails.

- *Sequence*

  One of the *init* functions must be called before accessing the 1-wire bus. *OW\_finish* is optional.

### OW\_get

*OW\_get* is used to get directory listings and file contents. The results are put in a dynamically allocated buffer.

- *Arguments*

  *path* is the path to the directory or file (property). *\*buffer* returns a pointer to a buffer containing the directory (comma separated) or value. *buffer\_length* returns the length of the value/string in *buffer*

- *Returns*

  number of bytes on success. -1 on error (and *errno* is set).

- *Sequence*

  One of the *init* functions must be called before accessing the 1-wire bus. *OW\_finish* is optional.

- *Important note*

  *buffer* is allocated ( with malloc ) by *OW\_get* but must be freed in your program. See **malloc (3)** and **free (3)**

### OW\_lread

*OW\_lread* is used to read 1-wire memory chips. Think of it as a combination of *lseek* and *read* It allows random-access to the memory, specifying location and length. Unlike *OW\_get* directories cannot be obtained and the buffer must be pre-allocated rather than allocated by the routine. *buffer* must be at least *size* length.

- *Arguments*

  *path* is the path to the file (property). *buffer* is the (pre-allocated) memory area where the value will be placed. *size* is the length of bytes requested. *offset* is the position in file to start reading.

- *Returns*

  number of bytes on success. -1 on error (and *errno* is set).

- *Sequence*

  One of the *init* functions must be called before accessing the 1-wire bus. *OW\_finish* is optional.

### OW\_put

*OW\_put* is an easy way to write to 1-wire chips.

- *Arguments*

  *path* is the path to the file (property). *buffer* is the value to be written. *buffer\_length* is the length of the value *buffer.* *Returns* number of bytes on success. -1 on error (and *errno* is set).

- *Sequence*

  One of the *init* functions must be called before accessing the 1-wire bus. *OW\_finish* is optional.

### OW\_lwrite

*OW\_lwrite* is the companion of *OW\_lread.* It allows writing to arbitrary positions in 1-wire memory. Think of it as a combination of *lseek* and *write.* *buffer* must be at least *size* length.

- *Arguments*

  *path* is the path to the file (property). *buffer* is the data to be written. *size* is the length of bytes to be written. *offset* is the position in file to start writing.

- *Returns*

  number of bytes on success. -1 on error (and *errno* is set).

- *Sequence*

  One of the *init* functions must be called before accessing the 1-wire bus. *OW\_finish* is optional.

### OW\_finish

*OW\_finish* cleans up the *OWFS* 1-wire routines, releases devices and memory.

- *Arguments*

  None.

- *Returns*

  None

- *Sequence*

  *OW\_finish* is optional since cleanup is automatic on program exit.

## DESCRIPTION

### 1-Wire

*1-wire* is a wiring protocol and series of devices designed and manufactured by Dallas Semiconductor, Inc. The bus is a low-power low-speed low-connector scheme where the data line can also provide power.

Each device is uniquely and unalterably numbered during manufacture. There are a wide variety of devices, including memory, sensors (humidity, temperature, voltage, contact, current), switches, timers and data loggers. More complex devices (like thermocouple sensors) can be built with these basic devices. There are also 1-wire devices that have encryption included.

The 1-wire scheme uses a single  *bus master* and multiple *slaves* on the same wire. The bus master initiates all communication. The slaves can be  individually discovered and addressed using their unique ID.

Bus masters come in a variety of configurations including serial, parallel, i2c, network or USB adapters.

### OWFS design

*OWFS* is a suite of programs that designed to make the 1-wire bus and its devices easily accessible. The underlying principle is to create a virtual filesystem, with the unique ID being the directory, and the individual properties of the device are represented as simple files that can be read and written.

Details of the individual slave or master design are hidden behind a consistent interface. The goal is to  provide an easy set of tools for a software designer to create monitoring or control applications. There  are some performance enhancements in the implementation, including data caching, parallel access to bus  masters, and aggregation of device communication. Still the fundamental goal has been ease of use, flexibility and correctness rather than speed.

### libowcapi

**libowcapi (1)** is an encapsulation of the full **libow** library for C programs.

**libowcapi (1)** allows a C program to use *OWFS* principles (consistent naming scheme, multiple adapters, devices, and compatibility) directly from a C program. There are analogous modules for other programming languages:

- *C*

  libowcapi

- *perl*

  owperl

- *php*

  owphp

- *python*

  owpython

- *tcl*

  owtcl

## EXAMPLE

/\* Simple directory listing -- no error checking \*/\
 \#include \<ownetapi.h\>\
 char \* buf;\
 size\_t s ;\
 OWNET\_init("localhost:4304");\
 OWNET\_dirlist("/",&buf,&s) ;\
 printf("Directory %s0,buf);\
 free(buf);\
 OWNET\_finish() ;

## SEE ALSO

### Programs

**owfs (1) owhttpd (1) owftpd (1) owserver (1)** **owdir (1) owread (1) owwrite (1) owpresent (1)** **owtap (1)**

### Configuration and testing

**owfs (5) owtap (1) owmon (1)**

### Language bindings

**owtcl (3) owperl (3) owcapi (3)**

### Clocks

**DS1427 (3) [DS1904(3)](/DS1904/3.md) DS1994 (3) DS2404 (3) DS2404S (3) DS2415 (3) DS2417 (3)**

### ID

**DS2401 (3) DS2411 (3) DS1990A (3)**

### Memory

**DS1982 (3) DS1985 (3) DS1986 (3) DS1991 (3) DS1992 (3) DS1993 (3) DS1995 (3) DS1996 (3) DS2430A (3) DS2431 (3) DS2433 (3) DS2502 (3) DS2506 (3) DS28E04 (3) DS28EC20 (3)**

### Switches

**DS2405 (3) DS2406 (3) DS2408 (3) DS2409 (3) DS2413 (3) DS28EA00 (3)**

### Temperature

**DS1822 (3) DS1825 (3) DS1820 (3) DS18B20 (3) DS18S20 (3) DS1920 (3) DS1921 (3) DS1821 (3) DS28EA00 (3) DS28E04 (3)**

### Humidity

**DS1922 (3)**

### Voltage

**DS2450 (3)**

### Resistance

**DS2890 (3)**

### Multifunction (current, voltage, temperature)

**DS2436 (3) DS2437 (3) DS2438 (3) DS2751 (3) DS2755 (3) DS2756 (3) DS2760 (3) DS2770 (3) DS2780 (3) DS2781 (3) DS2788 (3) DS2784 (3)**

### Counter

**DS2423 (3)**

### LCD Screen

**LCD (3) DS2408 (3)**

### Crypto

**DS1977 (3)**

### Pressure

**DS2406 (3) -- TAI8570**

## AVAILABILITY

http://www.owfs.org

## AUTHOR

Paul Alfille (paul.alfille@gmail.com)
