Skip to content
ggodart edited this page Jan 2, 2021 · 1 revision

iButton_Item

See original

SYNOPSIS

        $v_iButton_connect = new Voice_Cmd "[Connect,Disconnect] to the iButton bus";
        if ($state = said $v_iButton_connect) {
          if ($state eq 'Connect') {
            print_log &iButton::connect($config_parms{iButton_serial_port});
            print_log &iButton::connect($config_parms{iButton_2_serial_port});
          }
          else {
            print_log &iButton::disconnect;
            print_log &iButton::disconnect, $config_parms{iButton_2_serial_port};
          }
        }

        $ib_bruce  = new iButton '010000012345ef';
        speak 'Hi Bruce'  if ON  eq state_now $ib_bruce;
        speak 'Later'     if OFF eq state_now $ib_bruce;

        $ib_relay1 = new iButton '12000000123456ff', undef, 'A';
        $ib_relay2 = new iButton '12000000123456ff', undef, 'B';
        $v_iButton_relay1    = new Voice_Cmd "Turn relay1 [on,off]";
        if ($state = said $v_iButton_relay1) {
           print_log "Setting iButton relay1 to $state";
           set $ib_relay1 $state;
        }

        $ib_temp1  = new iButton '1000000029a14f', $config_parms{iButton_2_serial_port};
        $ib_temp2  = new iButton '1000000029f5d6';
        my @ib_temps = ($ib_temp1, $ib_temp2);

        $v_iButton_readtemp  = new Voice_Cmd "Read the iButton temperature [1,2]";
        if ($state = said $v_iButton_readtemp) {
           my $b = $ib_temps[$state-1];
           my $temp = read_temp $b;
           print_log "Temp for sensor $state: $temp F";
           logit("$config_parms{data_dir}/iButton_temps.log",  "$state: $temp");
        }
        if ($New_Second and !($Minute % 5)) {
           run_voice_cmd 'Read the iButton temperature 1' if $Second == 11;
           run_voice_cmd 'Read the iButton temperature 2' if $Second == 22;
        }

DESCRIPTION

This is used to query and/or control an iButton device

For more information on iButton see the hardware section

This uses the iButton perl modules from: http://www.lothar.com/tech/iButtons/

INHERITS

Generic_Item

INI PARAMETERS

ibutton_serial_port=COM4

METHODS

Method Description
new($id, $port, $channel) If $port is not specified, the port of the first iButton::connect will be used. $channel (used for switches like the DS2406) defaults to A
set($state) Sets the item to the specified state.
state() Returns the last state that was received or sent
state_now Returns the state that was received or sent in the current pass.
state_log Returns a list array of the last max_state_log_entries (mh.ini parm) time_date stamped states.
read_temp Returns the temperature of temperature devices.
read_switch Reads iButton switch data
read_windspeed Reads iButton weather station wind speed
read_dir Reads iButton weather station wind direction

In addition to the above, all of the methods provided by the Hardware/iButton/Device.pm module are available (documented in mh/lib/site/Hardware/iButton/Device.pm).

These functions are also part of the iButton module, but not associated with an object:

Function Description
scan($family, $port) Returns a object list of iButton devices that match $family
scan_report($family, $port) Returns a report of iButton devices that match $family
monitor($family, $port) Checks the one wire bus for iButton activity
connect($port) Connect to the one wire bus. Note you can now have multiple iButton interfaces on multiple COM ports.
disconnect Disconnect to the one wire bus

Note, all of these functions take an optional $port parm (required for connect). If not specified, the port of the first connect record will be used.

The $id required when creating new iButton_Item is the 16 hex character (64 bit) iButton id that is unique to every device. This is often printed on the larger devices. If not, you can use:

        $v_iButton_list      = new Voice_Cmd "List all the iButton buttons";
        print_log &iButton::scan_report if said $v_iButton_list;

The last 2 characters are CRC bits and are optional. If missing (i.e. you only specify the first 14 characters), mh will calculate it.

The first 2 characters are the iButton family type. Here is a list of family types:

         Field Index:
          ------------
          (1) Family code in hex
          (2) Number of regular memory pages
          (3) Length of regular memory page in bytes
          (4) Number of status memory pages
          (5) Length of status memory page in bytes
          (6) Max communication speed (0 regular, 1 Overdrive)
          (7) Memory type (see below)
          (8) Part number in iButton package
          (9) Part number in non-iButton package
          (10) Brief descriptions

          (1)   (2)  (3)  (4)  (5)  (6)  (7)   (8)   (9)   (10)
          -------------------------------------------------------
          01,    0,   0,   0,   0,   1,   0, DS1990A,DS2401,Unique Serial Number
          02,    0,   0,   0,   0,   0,   0, DS1991,DS1205, MultiKey iButton
          04,   16,  32,   0,   0,   0,   1, DS1994,DS2404,4K-bit NVRAM with Clock
          05,    0,   0,   0,   0,   0,   0, DS2405,,Single Addressable Switch
          06,   16,  32,   0,   0,   0,   1, DS1993,DS2403,4K-bit NVRAM
          08,    4,  32,   0,   0,   0,   1, DS1992,DS2402,1K-bit NVRAM
          09,    4,  32,   1,   8,   1,   2, DS1982,DS2502,1K-bit EPROM
          0A,   64,  32,   0,   0,   1,   1, DS1995,DS2416,16K-bit NVRAM
          0B,   64,  32,  40,   8,   1,   3, DS1985,DS2505,16K-bit EPROM
          0C,  256,  32,   0,   0,   1,   1, DS1996,DS2464,64K-bit NVRAM
          0F,  256,  32,  64,   8,   1,   3, DS1986,DS2506,64K-bit EPROM
          10,    0,   0,   0,   0,   0,   0, DS1920,DS1820,Temperature iButton with Trips
          11,    2,  32,   1,   8,   0,   2, DS1981,DS2501,512-bit EPROM
          12,    4,  32,   1,   8,   0,   4, DS2407,,Dual Addressable Switch
          13,   16,  32,  34,   8,   0,   3, DS1983,DS2503,4K-bit EPROM
          14,    1,  32,   0,   0,   0,   5, DS1971,DS2430A,256-bit EEPROM, plus
          64-bit
          OTP
          15,    0,   0,   0,   0,   1,   0, DS87C900,,Lock Processor
          16,    0,   0,   0,   0,   0,   0, DS1954,,Crypto iButton
          18,    4,  32,   0,   0,   1,   6, DS1963S,4K-bit Transaction iButton with
          SHA
          1A,   16,  32,   0,   0,   1,   6, DS1963,,4K-bit Transaction iButton
          1C,    4,  32,   0,   0,   1,   6, DS2422,,1K-bit EconoRAM with Counter
          Input
          1D,   16,  32,   0,   0,   1,   6, DS2423,,4K-bit EconoRAM with Counter
          Input
          1F,    0,  32,   0,   0,   0,   0, DS2409,,One-Wire Net Coupler
          20,    3,   8,   0,   0,   1,   9, DS2450,,Quad A-D Converter
          21,   16,  32,   0,   0,   1,   8, DS1921,,Temperature Recorder iButton
          23,   16,  32,   0,   0,   1,   7, DS1973,DS2433,4K-bit EEPROM
          22                                 DS1822 temperature button
          40,   16,  32,   0,   0,   0,   1, DS1608,,Battery Pack Clock

AUTHOR

UNK

SEE ALSO

None

Clone this wiki locally