Owtcl(TCL)
πΈ Owtcl πΈ
okay bestie, welcome to the Owtcl(TCL) manual page β yes that's the manual name, it's giving "Tcl extension that talks to 1-wire stuff" and honestly? iconic. sit down, grab a boba, we're doing this π
β¨ NAME β¨
Owtcl β OWFS library access commands for Tcl. that's it, that's the name, slay.
β¨ SYNOPSIS β¨
package require ow
ow option ?arg ...?
::OW::init interface ?interface ...? ?arg ...?
::OW::finish
::OW::isconnect
::OW::get ?path? ?arg ...?
::OW::put path ?value?
::OW::isdirectory path
::OW::isdir path
::OW::exists path
β¨ DESCRIPTION β¨
π 1-Wire
so 1-wire is a wiring protocol AND a whole family 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. one wire doing the absolute most, we love a multitasker π
every single device gets uniquely and unalterably numbered during manufacture. no takebacks, no edits, the number is forever. there's a whole buffet of devices β memory, sensors (humidity, temperature, voltage, contact, current), switches, timers, data loggers. and if you want to get fancy, more complex devices (like thermocouple sensors) can be built out of these basic devices. some 1-wire devices even have encryption baked in π
the scheme uses a single bus master and multiple slaves on the same wire. the bus master initiates all communication, main character energy fr. 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. so many vibes, so many options π¦
ποΈ OWFS design
OWFS is a suite of programs designed to make the 1-wire bus and its devices easily accessible. the underlying principle is to create a virtual filesystem, where the unique ID is the directory, and the individual properties of the device are represented as simple files that you can read and write. literally the cutest abstraction, no cap.
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 too, including data caching, parallel access to bus masters, and aggregation of device communication. but the fundamental goal has always been ease of use, flexibility and correctness rather than speed. periodt.
π§ owtcl
owtcl (3) is a Tcl extension that provides an interface to OWFS. the underlying interface to the 1-wire bus is identical to owfs (1) (filesystem view) and owhttpd (1) web server interface. only the top layer has been modified to return native Tcl data. glow up complete β¨
β¨ COMMANDS β¨
performs one of several operations, depending on option. the legal options (which may be abbreviated) are:
ow openarg ... β connect to a 1-wire adapter orowserver. arg ... defines a way of connection to the 1-wire bus. the full set of initialization args is extensive. they correspond roughly to the command line args ofowfs(1),owhttpd(1) andowftpd(1).ow closeβ close connection to 1-wire bus orowserver. bye bestie π«Άow version?-list? β return version of theowtclandowlib/ow openedβ return1if connected to 1-wire adapter orowserver, otherwise0.ow error levelvalue β set debug options. seeowfs(5).ow error printvalue β set debug options. seeowfs(5).ow getpath ?-list? β returns contents of OWFS directory as the list if path contains name OWFS directory. if path is name of OWFS file, returns of contents of this file. for files*.ALLreturns a values list.ow putpath value β puts value in OWFS file indicated in path. for files*.ALLuse a value list.ow isdirectorypath β if path is the directory return1. otherwise return0.ow isdirpath β synonym ofow isdirectoryow setpath β creates a new ow-like command with root in the path. a new command allows optionsget,put,isdirectory,isdirandset. nesting commands, we love recursion vibes π
β¨ LOW-LEVEL COMMANDS β¨
the following low-level commands are possible:
::OW::initinterface ?interface ...? ?arg ...? β connect to 1-wire adapter orowserver. interface and arg ... defines a way of connection to the 1-wire bus. the full set of initialization options is extensive. they correspond roughly to the command line options ofowfs(1),owhttpd(1) andowftpd(1).::OW::finishβ close connection to 1-wire bus orowserver.::OW::isconnectβ return1if connected to 1-wire adapter orowserver, otherwise0.::OW::get?path? ?-list? β returns contents of OWFS directory as the list if path contains name OWFS directory. if path is name of OWFS file, returns of contents of this file. for files*.ALLreturns a values list. if path is not defined, contents of root OWFS directory come back.::OW::putpath ?value? β puts value in OWFS file indicated in path. for files*.ALLuse a value list. if value is not defined, puts a empty string.::OW::isdirectorypath β if path is the directory β return1. otherwise return0.::OW::isdirpath β synonym of::OW::isdirectory::OW::existspath β if path is exists β return1. otherwise return0.
β¨ EXAMPLE β¨
okay here's the whole thing in action, it's giving tutorial but make it cute:
package require ow
ow open -d /dev/ttyS0 -t 60
set save_templow [ow get /28.86BF80000000/templow]
ow put /28.86BF80000000/templow 10
set room_sensor [ow set /28.86BF80000000]
$room_sensor put temphigh 50
set room_temp [$room_sensor set temperature]
set current_temp [$room_temp get]
ate that. no crumbs. π
β¨ 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) 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 β¨
β¨ AUTHOR β¨
Serg Oskin (serg@oskin.ru) β king behavior honestly π
and that's the whole page bestie! this came out of theTclmanual, dated 20/January/2005, filed underOwtcl(TCL). go forth and talk to your 1-wire devices, you've got this πβ¨ππ¦πΈπ π«Ά
π¦ where this page comes from
- alpine 3.24: owfs-doc 3.2_p4-r1 Β· GPL-2.0-only
- fedora 43: owfs-devel 3.2p4-13.fc43 Β· GPL-2.0-only
- fedora 43: owfs-devel 3.2p4-13.fc43 Β· GPL-2.0-only
- fedora 43: owfs-tcl 3.2p4-13.fc43 Β· GPL-2.0-only
- fedora 44: owfs-devel 3.2p4-15.fc44 Β· GPL-2.0-only
- fedora 44: owfs-devel 3.2p4-15.fc44 Β· GPL-2.0-only
- fedora 44: owfs-tcl 3.2p4-15.fc44 Β· GPL-2.0-only
- nixos 26.05: libow 3.2p4
- nixpkgs unstable: libow 3.2p4
- Copyright (c) 2003-2004 Paul H Alfille, MD
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash on : a language model's rewrite of the original, under its terms