home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: OtherApp / OtherApp.zip / house290.zip / HOUSE290.EXE / CP290CE.INF (.txt) < prev    next >
OS/2 Help File  |  1999-06-01  |  63KB  |  1,798 lines

  1.  
  2. ΓòÉΓòÉΓòÉ 1. Introduction ΓòÉΓòÉΓòÉ
  3.  
  4. This documentation is specifically for the Communications Engine only. It 
  5. documents the settings of this program, shows how to setup a named pipe to use 
  6. a custom client program and how to access functions inside the Comm Engine to 
  7. control the CP290. If you are not writing your own program for X-10 control, 
  8. consult the Help inside HOUSE/290 for program operation information. 
  9.  
  10. This document is also intended for users to help in troubleshooting in case of 
  11. problems and also for programmers who want to access the functions of the Comm 
  12. Engine to control the CP290 with their own REXX program. 
  13.  
  14. For general operation and troubleshooting, refer to each of the sections below. 
  15.  
  16. Description | Installation | Getting Started | Important Notes | Menu 
  17. Description | Network Operation | Troubleshooting 
  18.  
  19. For function description and programming information, refer to each of  the 
  20. sections below. 
  21.  
  22. Comm Engine Function Description | X10LDLL Function Description 
  23.  
  24.  
  25. ΓòÉΓòÉΓòÉ 2. Description ΓòÉΓòÉΓòÉ
  26.  
  27. HOUSE/290 ver. 2.0 - Shareware. HOUSE/2 - Home Automation & Security for OS/2 
  28. using the CP290 interface by X-10. 
  29.  
  30. HOUSE/290 is an OS/2 version 3.0 and later program to control the home 
  31. automation interface model CP290 made by X-10. HOUSE/290 brings a modern 
  32. graphical user interface to the CP290 and provides a separate REXX-enabled and 
  33. network aware communications engine for this popular X-10 controller. Unlike 
  34. other programs for the CP290, HOUSE/290 will work on Pentium class computers. 
  35.  
  36. The Comm Engine is part of HOUSE/290 and is shareware. Registration is 
  37. available through BMT Micro at www.bmtmicro.com or through the author directly. 
  38. Registration now includes the game Leave-One, a puzzle similar to Pegged. See 
  39. the section How To Register for details. 
  40.  
  41. The HOUSE/290 Communications Engine has the following features: 
  42.  
  43.       Γûá Communicates to the CP290 via an RS-232 serial port. 
  44.  
  45.       Γûá Acts as a fully REXX-enabled server. 
  46.  
  47.       Γûá Launch up to four user defined programs whenever certain X-10 events 
  48.       are detected. 
  49.  
  50.       Γûá Uses named pipe to communicate to H290MAIN.EXE client program or any 
  51.       other custom client programs. Sample source for custom programs is 
  52.       included. 
  53.  
  54.       Γûá Can be controlled over a network (LAN or peer-to-peer) allowing X-10 
  55.       home control through the CP290 from any workstation. 
  56.  
  57.       Γûá Accepts commands like A1 DIM 60 and translates them into X-10 code for 
  58.       the CP290 interface. 
  59.  
  60.       Γûá Full support for all CP290 functions with the exception of graphics 
  61.       upload. 
  62.  
  63.  Note: In order to fully take advantage of the program's features, you must buy 
  64.  the CP290 interface and at least one module. This can be done for around $80 
  65.  total to get you started and it can easily be expanded from that point on. See 
  66.  Internet Links for Home Automation for information on home control devices. 
  67.  
  68.  X-10 devices are available for most international power configurations. Please 
  69.  see Internet Links for Home Automation for information on X-10 representatives 
  70.  around the world. 
  71.  
  72.  
  73. ΓòÉΓòÉΓòÉ 3. Important Notes ΓòÉΓòÉΓòÉ
  74.  
  75. HOUSE/290 is normally started through the H290.EXE executable which displays a 
  76. splash screen and loads the main program (H290MAIN.EXE) and communications 
  77. engine (CP290CE.EXE). If you write your own custom REXX program to access the 
  78. Comm Engine, you may start CP290CE.EXE by itself. To run the Comm Engine alone, 
  79. the following minimum files are required to be present: CP290CE.EXE, CP290.INI, 
  80. CP290CE.HLP, RXASYNC.DLL, X10CPDLL.DLL and REXXUTIL.DLL. 
  81.  
  82. Problem: 
  83.  
  84. You may experience a growth in swap file under the following circumstances: You 
  85. run another Vispro/REXX compiled program at the same time as HOUSE/290 (or Comm 
  86. Engine) AND Object REXX is active. If you repeatedly start and exit HOUSE/290 
  87. while another Vispro/REXX program is running, the swap file keeps growing. You 
  88. may have to start and exit HOUSE/290 (or Comm Engine) 5-10 times before you see 
  89. a growth. The memory is not released until both Vispro/REXX-compiled programs 
  90. are closed. If you close both programs, the swap file will return to it's 
  91. original size. I have been able to duplicate this problem with UPS Monitor for 
  92. OS/2 and the HOUSE/290 main and Comm Engine program. This memory leak may not 
  93. be specific to these programs as the source of the problem points to Object 
  94. REXX. If you use classic REXX, this problem will not occur. 
  95.  
  96.  
  97. ΓòÉΓòÉΓòÉ 4. Getting Started ΓòÉΓòÉΓòÉ
  98.  
  99. This section describes the various ways that HOUSE/290 and the Comm Engine can 
  100. be applied. 
  101.  
  102. Default Operation 
  103.  
  104. Default operation is for operation of the CP290 interface from a single 
  105. computer. HOUSE/290 is set to start-up the Comm Engine in the background. All 
  106. operations can be done through HOUSE/290 and the Comm Engine does in most cases 
  107. not require attention. The Comm Engine can be made visible by accessing the 
  108. windows list (press CRTL-ESC) and showing it by right-clicking on it's name. By 
  109. default, the Comm Engine is automatically closed whenever HOUSE/290 is closed. 
  110.  
  111. Network Operation 
  112.  
  113. For operation over a LAN or peer-to-peer network, HOUSE/290 needs to be 
  114. configured differently. Install the CP290 at one of the workstations or server. 
  115. Install the Comm Engine at the same computer where you installed the CP290. 
  116. Start up the Comm Engine (CP290CE.EXE) separately from HOUSE/290. Leave the 
  117. Comm Engine running so HOUSE/290 can access it. HOUSE/290 can not start-up the 
  118. Comm Engine over a network, it must be done manually. 
  119.  
  120. Install HOUSE/290 on any other computer on the network. Start up H290MAIN.EXE 
  121. and configure it so the Comm Engine does not start automatically. Fill in the 
  122. computer name where HOUSE/290 can find the Comm Engine. After you changed the 
  123. computer name inside H290MAIN.EXE, you must disconnect and then reconnect to 
  124. the Comm Engine. This will establish communications between the two programs. 
  125.  
  126. Operation with your own REXX Program 
  127.  
  128. If you want to use your own REXX programs to access the CP290 functions, simply 
  129. start the Comm Engine and use your REXX program to communicate via the named 
  130. pipe to the Comm Engine. Remember that only one program can access the named 
  131. pipe at one time. See the section on REXX Examples for a sample REXX program. 
  132.  
  133.  
  134. ΓòÉΓòÉΓòÉ 4.1. REXX Examples ΓòÉΓòÉΓòÉ
  135.  
  136. The sample program below shows how to use the Comm Engine's REXX features to 
  137. turn a module on and then off at a certain time. This program is also part of 
  138. the HOUSE/290 distribution and is named TIMEMOD.CMD. More examples are included 
  139. in MODCTRL.CMD which turns on a module as soon as the program is run, and 
  140. RSTCP290.CMD which uploads timer events into the CP290 from a pre-defined file. 
  141.  
  142. These examples require the Comm Engine to be running and connection made to the 
  143. CP290. 
  144.  
  145.  
  146. /* TIMEMOD.CMD - Start Module at a certain time, then turn it off at a certain time. */
  147. /*        Written by A. Schwarz. See http://home.att.net/~ASchw  */
  148. /*        This is an example to show how to access the HOUSE/290 Comm Engine functions. */
  149.  
  150. /* Load X10LDLL.DLL */
  151. call RxFuncAdd 'X10LLoadFuncs', 'X10LDLL', 'X10LLoadFuncs'
  152. call X10LLoadFuncs
  153.  
  154. /* Load REXXUTIL.DLL */
  155. call RxFuncAdd 'SysLoadFuncs', 'RexxUtil', 'SysLoadFuncs'
  156. call SysLoadFuncs
  157.  
  158. pipename = '\PIPE\HOUSE290'  /* single backslashes only when using on single computer */
  159.  
  160. /* Note: If running over a network, precede the pipe name with the computer name as shown below. */
  161. /* pipename = '\\CLIENT527\PIPE\HOUSE290' */  /* note the _two_ backslashes preceding the computer name */
  162.  
  163. SAY ' '
  164. SAY 'This program turns module A1 on and off at a certain time.'
  165. SAY 'The Comm Engine must be running and be connected to'
  166. SAY 'the CP290 for this program to work.'
  167. SAY ' '
  168. SAY 'Press C to continue, any other key to exit...'
  169. PARSE PULL keyhit
  170.  
  171. IF keyhit <> 'c' & keyhit <> 'C' THEN
  172.  EXIT
  173.  
  174. /* Check if pipe is available and connect to it */
  175. rc = CLOpenPipe(pipename)
  176. IF rc = 0 then
  177.  DO
  178.   rc =  CLPeekPipe('0')
  179.   IF Right(rc, 1) = 3 THEN
  180.    SAY 'Connected to Comm Engine.'
  181.   ELSE
  182.    DO
  183.     SAY 'Comm Engine unavailable, closing.'
  184.     rc = CLClosePipe('0')
  185.     SAY 'Press any key to exit...'
  186.     PARSE PULL keyhit
  187.     Signal ExitError1
  188.    END
  189.  END
  190. ELSE
  191.  DO
  192.   SAY 'Comm Engine not available.'
  193.   SAY 'Press any key to exit...'
  194.   PARSE PULL keyhit
  195.   Signal ExitError1
  196.  END
  197.  
  198. Module = 'A1'  /* module house and device code */
  199. TimeOn = '11:29:00'  /* time in HH:MM:SS to turn A1 on */
  200. TimeOff = '11:29:30'  /* time in HH:MM:SS to turn A1 off */
  201. Waitflag = 0  /* Waitflag = 0 wait for ON time, Waitflag = 1 wait for OFF time */
  202.  
  203. SAY ' '
  204. SAY "Waiting to turn " || Module || " on at " || TimeOn
  205. SAY "Press CTRL-Break to Exit..."
  206.  
  207. DO FOREVER
  208.  
  209.    call SysSleep(1)    /* wait one second */
  210.    CurrentTime = TIME()
  211.    IF CurrentTime = TimeOn & Waitflag = 0 THEN
  212.     DO
  213.      temp = '}ID1 ' || Module || " ON 0"  /* turn on module */
  214.      rc = CLWritePipe(temp)  /* write data to pipe */
  215.      Loop = 0
  216.      DO WHILE Loop < 5  /* wait for confirmation */
  217.       call SysSleep(1)    /* wait one second */
  218.       rc = CLPeekPipe('0')  /* peek into pipe */
  219.       PARSE VALUE rc WITH rcPeekNPipe ' ' BytesWait ' ' PipeState
  220.       IF BytesWait > 0 THEN  /* pipe has data */
  221.        DO
  222.         rc = CLReadPipe('0')  /* read pipe */
  223.         IF POS('{0  }ID1', rc) > 0 THEN  /* no error */
  224.          DO
  225.           SAY rc || Module || ' turned on. Waiting to turn off at ' || TimeOff || ' ...'
  226.           Loop = 10
  227.           Waitflag = 1  /* set flag to wait for turn-off */
  228.          END
  229.         ELSE  /* Comm Engine reports errors */
  230.          DO
  231.           SAY 'Direct command ERROR: ' || rc
  232.           Signal ExitError
  233.          END
  234.        END
  235.       Loop = Loop + 1
  236.      END  /* While Loop */
  237.     END /* IF CurrentTime = TimeOn */
  238.  
  239.    IF CurrentTime = TimeOff & Waitflag = 1 THEN
  240.     DO
  241.      temp = '}ID1 ' || Module || " OFF 0"  /* turn off module */
  242.      rc = CLWritePipe(temp)  /* write data to pipe */
  243.      Loop = 0
  244.      DO WHILE Loop < 5  /* wait for confirmation */
  245.       call SysSleep(1)    /* wait one second */
  246.       rc = CLPeekPipe('0')  /* peek into pipe */
  247.       PARSE VALUE rc WITH rcPeekNPipe ' ' BytesWait ' ' PipeState
  248.       IF BytesWait > 0 THEN  /* pipe has data */
  249.        DO
  250.         rc = CLReadPipe('0')  /* read pipe */
  251.         IF POS('{0  }ID1', rc) > 0 THEN  /* no error */
  252.          DO
  253.           SAY rc || "Waiting to turn " || Module || " on at " || TimeOn
  254.           SAY "Press CTRL-Break to Exit..."
  255.           Loop = 10  /* exit the while loop */
  256.           Waitflag = 0  /* set flag to wait for turn-on */
  257.          END
  258.         ELSE  /* Comm Engine reports errors */
  259.          DO
  260.           SAY 'Direct command ERROR: ' || rc
  261.           Signal ExitError
  262.          END
  263.        END
  264.       Loop = Loop + 1
  265.      END  /* While Loop */
  266.     END /* IF CurrentTime = TimeOff */
  267.  
  268. END
  269.  
  270. ExitError:
  271. rc = CLClosePipe('0')
  272.  
  273. ExitError1:
  274. call X10LDropFuncs
  275.  
  276. EXIT
  277.  
  278.  
  279. ΓòÉΓòÉΓòÉ 5. Menu Description ΓòÉΓòÉΓòÉ
  280.  
  281. Describes all menu items available for this program. 
  282.  
  283.  
  284. ΓòÉΓòÉΓòÉ 5.1. FILE - Show Commands ΓòÉΓòÉΓòÉ
  285.  
  286. This selection toggles the Show Commands on and off. If this menu selection is 
  287. checked, every command sent and received from the Comm Engine will be displayed 
  288. on the main window. Only the last 20 commands will be kept in the window. If 
  289. this menu selection is unchecked, no commands will be displayed except when the 
  290. Comm Engine is first started it will display that the pipe has been created. By 
  291. default, the Show Commands is turned off (unchecked). 
  292.  
  293.  
  294. ΓòÉΓòÉΓòÉ 5.2. FILE - Configuration ΓòÉΓòÉΓòÉ
  295.  
  296. Brings up the Comm Engine configuration window. 
  297.  
  298. From that window, you can select the Com Port where the CP290 is connected to. 
  299. If the Auto Connect check box is checked, the Comm Engine will automatically 
  300. connect to the CP290 whenever it is started. By default, Auto Connect is off. 
  301. You can use the command line option to override this setting. 
  302.  
  303. Note:  Communications parameters are fixed for the CP290 at 600 Baud, 8 data 
  304. bits, 1 stop bit and no parity. 
  305.  
  306. If the Minimize on Open check box is checked, the Comm Engine will be minimized 
  307. on start-up. You can go to the windows list (press CTRL-ESC) to show a 
  308. minimized Comm Engine. By default, Minimize on Open is checked. 
  309.  
  310. Data Logging can be enabled by checking the Auto Event Log box. The Log Rate is 
  311. set to one second by default and sets how often the Comm Engine checks for data 
  312. from the CP290 interface. Log File Size sets the maximum log file 
  313. (HOUSE290.LOG) size in kiloBytes. If the file size exceeds this limit, the 
  314. existing log is copied to the file HOUSE290.000 and a new log is started. Any 
  315. existing HOUSE290.000 file will be overwritten. Note that the log only records 
  316. the switch activations originating from the CP290 itself. Other X-10 events are 
  317. not reported by the CP290. 
  318.  
  319. Data Logging must be enabled in order for the Event Actions to work. See FILE - 
  320. Event Actions for details. 
  321.  
  322. The Save button saves all the settings in the CP290CE.INI file and closes the 
  323. window. 
  324.  
  325. Cancel will abort any changes and close the window. Closing the configuration 
  326. window from the system menu is equivalent to canceling changes. 
  327.  
  328.  
  329. ΓòÉΓòÉΓòÉ 5.3. FILE - Event Actions ΓòÉΓòÉΓòÉ
  330.  
  331. This menu selections allows to schedule up to four programs to be launched 
  332. whenever the Comm Engine senses defined X-10 events. 
  333.  
  334. IMPORTANT: The X-10 events must be originating from the CP290, either by 
  335. pressing any of the toggle switches on the CP290 or from a timed event inside 
  336. the CP290. The event actions are therefore limited to the same house code as 
  337. the base house code set in the CP290. External X-10 events like events from a 
  338. keychain remote, are NOT sensed by the CP290. That is a limitation of the 
  339. CP290, not HOUSE/290. 
  340.  
  341. Each of the four event actions can be selected by paging through them using the 
  342. Previous or Next buttons. Each action can be Enabled and you can define a 
  343. house, device and function code which will trigger the action. An action can be 
  344. selected by either typing a program name into the text box or by using the 
  345. Browse button to point to the program. Any executable program may be selected. 
  346. No check for a valid executable file (*.CMD, *.EXE, *.COM, *.BAT) is made, only 
  347. the existence of the file is checked. The command used to start the action is 
  348. simply START. You may precede any start options ahead of the program name by 
  349. simply typing them in. For example, a REXX CMD script may be started with the 
  350. option /C such that the session closes as the REXX program has finished. You 
  351. would enter /C MYREXX.CMD in the text field. To start a REXX program minimized 
  352. you would enter /MIN /C MYREXX.CMD. A presentation program is started with the 
  353. /PM option. The /MIN option will not work with PM applications. Remember to 
  354. keep each option separated by spaces. To find more information on the START 
  355. command, simply type HELP START at an OS/2 command prompt. 
  356.  
  357. If a program requires to be started with optional parameters after the program 
  358. name, then use a REXX CMD file to start it. See the DIAL.CMD example below for 
  359. details. 
  360.  
  361. The defined action is executed when the following criteria is met: 
  362.  
  363.   - Logging is enabled. See FILE - Configuration for details.
  364.   - An X-10 event exactly as defined is detected by the Comm Engine.
  365.   - The defined program exists.
  366.  
  367. The Test button can be used to test launch the displayed program. A prompt will 
  368. ask for confirmation. 
  369.  
  370. The Close button will close the Event Action window and any changes made to the 
  371. settings are automatically saved. 
  372.  
  373. Here is an example how you can apply the Event Action feature. 
  374.  
  375. Some newer computers now have a single button internet access. You can do that 
  376. with OS/2 also. Define one of the event actions to start-up a dialer, start-up 
  377. your e-mail program when a connection is made and fetch the mail and when done, 
  378. disconnect from the internet, all from just pressing one button on the CP290 or 
  379. executing a timed event inside the CP290. 
  380.  
  381. So how is this done? Not all dialers and e-mail clients can be setup for this, 
  382. but I found that Injoy Dialer and PMMail/2 easily provides this. Both programs 
  383. are available at BMT Micro. Inside Injoy, under Misc Options, add PMMail/2 to 
  384. the autostart list and start it at Host Connect. This will start PMMail/2 as 
  385. soon as Injoy is connected to the host. Under Host - Change - OK, setup Injoy 
  386. to timeout in 30 seconds and set the timer to 5 minutes just in case the 
  387. timeout setting does not kick in. These settings are used to disconnect Injoy 
  388. from the internet after the mail has been fetched. Setup PMMail/2 to Fetch Mail 
  389. upon start-up. This setting is under Account - Account Settings and the 
  390. Preferences tab. Whenever Injoy starts up PMMail/2, it will fetch the e-mail 
  391. and the dialer will disconnect after all mail is downloaded. 
  392.  
  393. Now setup one Event Action to startup Injoy whenever  for example A1 ON is 
  394. pressed on the CP290. You will have to startup Injoy through a small REXX 
  395. script included with this distribution (DIAL.CMD). Make sure DIAL.CMD is called 
  396. out in the Event Action window as follows: /C D:\HOUSE290\DIAL.CMD You may have 
  397. to edit the path to DIAL.CMD and the path and default host of Injoy inside 
  398. DIAL.CMD on your system. 
  399.  
  400. That's it. You now can press a single button to fetch your e-mail. No more 
  401. hunting for icons on your desktop. Useful? You decide. It shows what can be 
  402. done with REXX-enablement. Now let your imagination run wild. 
  403.  
  404.  
  405. ΓòÉΓòÉΓòÉ 5.4. FILE - Exit ΓòÉΓòÉΓòÉ
  406.  
  407. Exits the Comm Engine.  If it was online to the CP290 interface, the connection 
  408. is terminated and the pipe to the client program is flushed and closed. 
  409.  
  410.  
  411. ΓòÉΓòÉΓòÉ 5.5. INTERFACE - Connect ΓòÉΓòÉΓòÉ
  412.  
  413. Opens selected com port to communicate to the CP290 interface. A check mark on 
  414. this menu item will indicate connection status. 
  415.  
  416. The Comm Engine can be connected to the CP290 through the built-in pipe. 
  417. HOUSE/290 does that with the Connect CP290 menu command. See the section on 
  418. Comm Engine Function Description for information on how to control the CP290 
  419. interface using your own program. 
  420.  
  421.  
  422. ΓòÉΓòÉΓòÉ 5.6. INTERFACE - Disconnect ΓòÉΓòÉΓòÉ
  423.  
  424. Closes selected com port to disconnect from the CP290 interface. A check mark 
  425. on this menu item will indicate connection status. 
  426.  
  427. The Comm Engine can be disconnected from the CP290 through the built-in pipe. 
  428. HOUSE/290 does that with the Disconnect CP290 menu command. See the section on 
  429. Comm Engine Function Description for information on how to control the CP290 
  430. interface using your own program. 
  431.  
  432.  
  433. ΓòÉΓòÉΓòÉ 5.7. HELP - Help Contents ΓòÉΓòÉΓòÉ
  434.  
  435. Displays the help contents (but uses the OS/2 index feature). Note that help is 
  436. organized in sections and Help Contents brings up the section headings in 
  437. alphabetical order. I find this a more logical way to organize help even if it 
  438. goes against common OS/2 convention. 
  439.  
  440.  
  441. ΓòÉΓòÉΓòÉ 5.8. HELP - Product Information ΓòÉΓòÉΓòÉ
  442.  
  443. Product information. 
  444.  
  445.  
  446. ΓòÉΓòÉΓòÉ 6. Comm Engine Function Description ΓòÉΓòÉΓòÉ
  447.  
  448. This section describes all functions available in CP290CE.EXE and how to use 
  449. them. It is only intended for people who want to write their own client program 
  450. to interface to the Comm Engine. 
  451.  
  452. The Comm Engine acts as a server between the CP290 and H2MAIN.EXE or any other 
  453. client program. It handles CP290 house, device and function code translation by 
  454. accepting commands like A1 ON and translating them to the required hex code for 
  455. the CP290 to understand. These functions and their code format are described in 
  456. the Programmer's manual of the CP290. 
  457.  
  458. Before the Comm Engine functions can be used within your own REXX program, you 
  459. must load X10LDLL.DLL and setup a pipe. See the section on X10LDLL Function 
  460. Description for information on that subject. 
  461.  
  462. The command format for the Comm Engine is as follows: 
  463.  
  464. Note: Curly brackets are used to separate out the various error flags, commands 
  465. and data. This helps in parsing the data and also indicates which way the 
  466. commands are flowing. Opening brackets indicate that the commands flow from the 
  467. Comm Engine to the client and closing brackets indicates the flow from the 
  468. client to the Comm Engine. 
  469.  
  470. Sending command to the Comm Engine: 
  471.  
  472.    }command options
  473.  
  474. The closing curly bracket indicates that the following command is sent from the 
  475. client to the Comm Engine. The command instructs the Comm Engine what operation 
  476. is to be performed on the Comm Engine itself or on the CP290. Sample commands 
  477. are ID0, CONNECT, MINIMIZE etc. 
  478.  
  479. The options contain data to set the CP290 or the Comm Engine. Sample options 
  480. are the actual base house code when setting the CP290 house code or timer 
  481. information like 128 NORM UMTWHFS 14:02 A 1&2&3&4&16 ON 0 when programming the 
  482. CP290 timers. 
  483.  
  484. Receiving command from the Comm Engine: 
  485.  
  486.    {XX }command {Y {data
  487.  
  488. Commands sent out to the client by the Comm Engine are a reply to a command 
  489. received by the Comm Engine. The original command is returned with the reply in 
  490. most cases. Because all commands placed on the pipe will be buffered, and can 
  491. therefore be queued to be processed later, it allows for easier command 
  492. identification. 
  493.  
  494. The XX indicates any possible errors the previous command encountered. For 
  495. example, a zero indicates no error, a one indicates an unsupported command. The 
  496. error field is always padded to two digits and the next closing curly bracket 
  497. is always at position five. 
  498.  
  499. The command following the closing curly bracket is the original command that 
  500. requested this reply. 
  501.  
  502. The value of Y may either be zero or one and represents the CP290 status bit 
  503. value of the ACK MESSAGE. From the Programmers Manual it states: The STATUS bit 
  504. is reset to 0 during power up of the Interface and is set to 1 by download of 
  505. data from the computer (any commands like ID0, ID1, ID2 or ID3). The STATUS bit 
  506. is used to warn the computer that the interface has been powered down. 
  507.  
  508. For more details on the command structure and samples, see each individual 
  509. command as listed below. 
  510.  
  511.    ID0 - Set Base House Code
  512.  
  513.    ID1 - Direct command (instant on /off)
  514.  
  515.    ID2 - Set Interface Clock
  516.  
  517.    ID3 - Event/graphics upload to interface
  518.  
  519.    ID4 - Request Clock and Base House Code
  520.  
  521.    ID5 - Request Timer Events
  522.  
  523.    ID7 - Diagnostics
  524.  
  525.    ID8 - Clear All Timers
  526.  
  527.  
  528.    Comm Engine STATUS
  529.  
  530.    Comm Engine SETPORTCOMx
  531.  
  532.    Comm Engine CONNECT
  533.  
  534.    Comm Engine DISCONNECT
  535.  
  536.    Comm Engine CLOSE
  537.  
  538.    Comm Engine SHOW
  539.  
  540.    Comm Engine MINIMIZE
  541.  
  542.  
  543. ΓòÉΓòÉΓòÉ 6.1. ID0 - Set Base House Code ΓòÉΓòÉΓòÉ
  544.  
  545. This function sets the base house code of the CP290 and it is used to define 
  546. the house code of the 8 buttons on the interface. The command format is as 
  547. follows: 
  548.  
  549.    }ID0 HouseCode
  550.  
  551. HouseCode is any one of the sixteen valid X-10 house codes: A, B, C, D, E, F, 
  552. G, H, I, J, K, L, M, N, O or P. 
  553.  
  554. The Comm Engine will return the following data: 
  555.  
  556.    {XX }ID0 {Y
  557.  
  558. Where:
  559.  
  560.   XX = 0 if there was no error.
  561.   XX = 1 unsupported or illegal command.
  562.   XX = 5 command can't be executed because engine is offline.
  563.   XX = 8 invalid data (house code).
  564.   XX = 11 if the CP290 is not responding.
  565.  
  566.   Y = 0 if the status of the CP290 indicates no data.
  567.   Y = 1 if the status of the CP290 indicates that it has been programmed.
  568.  
  569. Example: Set base house code to A. 
  570.  
  571. Command:
  572.     rc = CLWritePipe( '}ID0 A' )
  573.  
  574. Reply:
  575.     {0  }ID0 {1
  576.  
  577.  
  578. ΓòÉΓòÉΓòÉ 6.2. ID1 - Direct command (instant on/off) ΓòÉΓòÉΓòÉ
  579.  
  580. This function controls the modules through the CP290 interface. Note: The base 
  581. house code set in the CP290 does not limit the control of modules set to that 
  582. particular house code. You can send out a C4 ON to turn module C4 on even 
  583. though the base house code is set to A. The command format is as follows: 
  584.  
  585.    }ID1 data
  586.  
  587. data must be of the following format: HouseDeviceCode X10Command DimPercent The 
  588. HouseDeviceCode is any valid X-10 address like A1 or B16. X10Command can be ON, 
  589. OFF or DIM. The DimPercent is an integer between 0 and 100. Do not include a 
  590. percent character. DimPercent is ignored if the module does not support 
  591. dimming. Each of the three variables are separated by a space from each other. 
  592.  
  593. The Comm Engine will return the following data: 
  594.  
  595.    {XX }ID1 {Y
  596.  
  597. Where:
  598.  
  599.   XX = 0 if there was no error.
  600.   XX = 1 unsupported or illegal command.
  601.   XX = 5 command can't be executed because engine is offline.
  602.   XX = 8 invalid data (house, device, function code or level).
  603.   XX = 11 if the CP290 is not responding.
  604.  
  605.   Y = 0 if the status of the CP290 indicates no data.
  606.   Y = 1 if the status of the CP290 indicates that it has been programmed.
  607.  
  608. Example: Turn on appliance module A1. 
  609.  
  610. Command:
  611.     rc = CLWritePipe( '}ID1 A1 ON 0' )
  612.  
  613. Reply:
  614.     {0  }ID1 {1
  615.  
  616.  
  617. ΓòÉΓòÉΓòÉ 6.3. ID2 - Set Interface Clock ΓòÉΓòÉΓòÉ
  618.  
  619. This function sets the clock of the CP290 according to what the system time is 
  620. set to. The command format is as follows: 
  621.  
  622.    }ID2
  623.  
  624. No data needs to be supplied with the command. 
  625.  
  626. The Comm Engine will return the following: 
  627.  
  628.    {XX }ID2 {Y
  629.  
  630. Where:
  631.  
  632.   XX = 0 if there was no error.
  633.   XX = 1 unsupported or illegal command.
  634.   XX = 5 command can't be executed because engine is offline.
  635.   XX = 11 if the CP290 is not responding.
  636.  
  637.   Y = 0 if the status of the CP290 indicates no data.
  638.   Y = 1 if the status of the CP290 indicates that it has been programmed.
  639.  
  640. Example: Set CP290 time to system time. 
  641.  
  642. Command:
  643.     rc = CLWritePipe( '}ID2' )
  644.  
  645. Reply:
  646.     {0  }ID2 {1
  647.  
  648.  
  649. ΓòÉΓòÉΓòÉ 6.4. ID3 - Event/graphics upload to interface ΓòÉΓòÉΓòÉ
  650.  
  651. This function programs one of the 128 possible timers into the CP290. Each 
  652. timer can be programmed individually. The graphics upload is not supported at 
  653. this time. The command format is as follows: 
  654.  
  655.    }ID3 timer mode weekdays time housecode devicecodes function level
  656.  
  657. The data required to program a timer is as follows: 
  658.  
  659.   timer = 1 through 128 (the timer number).
  660.  
  661.   mode = timer mode. Possible values are: NORM = Normal, SEC = Security,
  662.       TOD = Today, TOM = Tomorrow, CLR = Cleared.
  663.       Normal operation sets the timer to work on a weekly cycle
  664.       at the time and weekdays indicated.
  665.       Security is the same as normal, except that the event time will be
  666.       different each day and varies in a pseudo random pattern up to one hour
  667.       after the time specified.
  668.       Today setting will operate the timer only today and clear the event
  669.       from memory at midnight.
  670.       Tomorrow setting will operate the timer only tomorrow and clear the event
  671.       from memory tomorrow at midnight.
  672.       Cleared setting removes that particular timer from the interface memory.
  673.  
  674.   weekdays = the weekdays the timer will operate in the format UMTWHFS
  675.         where U = SUnday, M = Monday, T = Tuesday, W = Wednesday,
  676.         H = THursday, F = Friday, S = Saturday. Day not used are left out,
  677.         i.e. operating on weekdays only would be MTWHF.
  678.  
  679.   time = hour and minute when timer will operate. Format is HH:MM
  680.       where HH = hours in 24hr format and MM = minutes.
  681.  
  682.   housecode = any valid X-10 house code from A - P for which the timer
  683.         will operate.
  684.  
  685.   devicecode = any valid X-10 device code from 1 - 16 for which the timer
  686.          will operate. Several device codes may be sent separated
  687.          by the ampersand, i.e. 1&2&16
  688.  
  689.   function = module function to perform at given time.
  690.         Possible values are: ON, OFF and DIM.
  691.  
  692.   level = the dim percentage the module is set to at the given time.
  693.       Values are 0 to 100. Do not include the percent symbol.
  694.  
  695. The Comm Engine will return the following data: 
  696.  
  697.    {XX }ID3 timer {Y
  698.  
  699. Where:
  700.  
  701.   XX = 0 if there was no error.
  702.   XX = 1 unsupported or illegal command.
  703.   XX = 5 command can't be executed because engine is offline.
  704.   XX = 8 invalid data (timer number, house, device, function code or level).
  705.   XX = 11 if the CP290 is not responding.
  706.   XX = 18 shareware limit of first 30 timers exceeded. CP290 timer limit
  707.         of 128 timers exceeded if registered version.
  708.  
  709.   timer = 1 through 128 (the timer number).
  710.  
  711.   Y = 0 if the status of the CP290 indicates no data.
  712.   Y = 1 if the status of the CP290 indicates that it has been programmed.
  713.  
  714.   Note: Y is only present if XX = 0.
  715.  
  716. Example: Program timer 4 into the CP290. Timer has to turn off C1 at 11:30pm 
  717. every weekday. 
  718.  
  719. Command:
  720.     rc = CLWritePipe( '}ID3 4 NORM MTWHF 23:30 C 1 OFF 0' )
  721.  
  722. Reply:
  723.     {0  }ID3 4 {1
  724.  
  725.  
  726. ΓòÉΓòÉΓòÉ 6.5. ID4 - Request Clock and Base House Code ΓòÉΓòÉΓòÉ
  727.  
  728. This function requests the clock and base house code settings of the CP290. The 
  729. command format is as follows: 
  730.  
  731.    }ID4
  732.  
  733. No data needs to be supplied with the command. 
  734.  
  735. The Comm Engine will return the following: 
  736.  
  737.    {XX }ID4 {Y 22:58 FRI A
  738.  
  739. Where:
  740.  
  741.   XX = 0 if there was no error.
  742.   XX = 1 unsupported or illegal command.
  743.   XX = 5 command can't be executed because engine is offline.
  744.   XX = 11 if the CP290 is not responding.
  745.  
  746.   Y = 0 if the status of the CP290 indicates no data.
  747.   Y = 1 if the status of the CP290 indicates that it has been programmed.
  748.  
  749. Time, weekday and base house code is attached to the end of this command.
  750.  
  751. Example: Request CP290 time and base house code. 
  752.  
  753. Command:
  754.     rc = CLWritePipe( '}ID4' )
  755.  
  756. Reply:
  757.     {0  }ID4 {1 23:58 FRI A
  758.  
  759. CP290 time is 23:58 (11:58pm), the weekday is
  760. set to Friday and the base house code is A.
  761.  
  762.  
  763. ΓòÉΓòÉΓòÉ 6.6. ID5 - Request Timer Events ΓòÉΓòÉΓòÉ
  764.  
  765. This function reads all 128 timer data from the CP290 at once. Only timer data 
  766. that is valid is returned. Cleared or unrecognized timers are not returned. The 
  767. command format is as follows: 
  768.  
  769.    }ID5
  770.  
  771. No data needs to be supplied with the command. 
  772.  
  773. The Comm Engine will return the following data: 
  774.  
  775.    {XX }ID5 {timer mode weekdays time housecode devicecodes function level
  776.  
  777.  
  778. Where:
  779.  
  780.   XX = 0 if there was no error.
  781.   XX = 1 unsupported or illegal command.
  782.   XX = 5 command can't be executed because engine is offline.
  783.   XX = 11 if the CP290 is not responding.
  784.   XX = 19 Comm Engine is reading data from CP290. Each increment
  785.         corresponds to 100 bytes read and is used to show progress.
  786.   XX = 20 command is still executing, more data to come.
  787.  
  788.   timer = 1 through 128 (the timer number).
  789.  
  790.   mode = timer mode. Possible values are: NORM = Normal, SEC = Security,
  791.       TOD = Today, TOM = Tomorrow.
  792.       Normal operation indicates that the timer works on a weekly cycle
  793.       at the time and weekdays indicated.
  794.       Security is the same as normal, except that the event time will be
  795.       different each day and varies in a pseudo random pattern up to one hour
  796.       after the time specified.
  797.       Today setting will operate the timer only today and clear the event
  798.       from memory at midnight.
  799.       Tomorrow setting will operate the timer only tomorrow and clear the event
  800.       from memory tomorrow at midnight.
  801.       Timer data that can not be identified or timers that are cleared, are not
  802.       returned. You can assume that that particular timer is available.
  803.  
  804.   weekdays = the weekdays the timer will operate in the format UMTWHFS
  805.         where U = SUnday, M = Monday, T = Tuesday, W = Wednesday,
  806.         H = THursday, F = Friday, S = Saturday. Day not used are left out,
  807.         i.e. operating on weekdays only would be MTWHF.
  808.  
  809.   time = hour and minute when timer will operate. Format is HH:MM
  810.       where HH = hours in 24hr format and MM = minutes.
  811.  
  812.   housecode = any valid X-10 house code from A - P for which the timer
  813.         will operate. Only one house code will be returned.
  814.  
  815.   devicecode = any valid X-10 device code from 1 - 16 for which the timer
  816.          will operate. Several device codes may be returned separated
  817.          by the ampersand, i.e. 1&2&16
  818.  
  819.   function = module function to perform at given time.
  820.         Possible values are: ON, OFF and DIM.
  821.  
  822.   level = the dim percentage the module is set to at the given time.
  823.       Values are 0 to 100. Does not include the percent symbol.
  824.  
  825. Example: Request all CP290 timers. 
  826.  
  827. Command:
  828.     rc = CLWritePipe( '}ID5' )
  829.  
  830. Reply:
  831.     {19 }ID5 {1
  832.     {19 }ID5 {2
  833.     {20 }ID5 {1 NORM UMTWHFS 18:20 A 1&2&3&4&16 ON 0
  834.     {20 }ID5 {2 NORM UMTWHFS 23:02 A 1&2&3&4&16 OFF 0
  835.     {20 }ID5 {3 NORM UMTWHFS 18:00 C 1 DIM 80
  836.     {20 }ID5 {4 NORM UMTWHFS 23:30 C 1 OFF 0
  837.     ...
  838.     {20 }ID5 {101 NORM MTWHF 23:30 C 2 OFF 0
  839.     {0  }ID5
  840.  
  841. Each timer is read sequentially from 1 to 128 and the data is
  842. returned for each valid timer. Because of the slow communications
  843. speed and the large amount of data that needs to be read from
  844. the CP290, this process takes a while to complete. The
  845. {19 }ID5 {1 data is an indication of the reading process. Each
  846. increment indicates 100 bytes read from the CP290. Ensure that
  847. your program reads the pipe during this operation or it may
  848. eventually over-run and data is lost. Invalid or cleared timers
  849. are not returned. In the above reply, one can assume that timers
  850. 102 through 128 are available for programming. The command
  851. {0  }ID5 indicates completion of reading timers.
  852.  
  853.  
  854. ΓòÉΓòÉΓòÉ 6.7. ID7 - Diagnostics ΓòÉΓòÉΓòÉ
  855.  
  856. This function performs a diagnostic internal to the CP290 and takes 12 seconds 
  857. to complete. During diagnostics, the CP290 will be unavailable but the Comm 
  858. Engine will queue any other functions. Diagnostics will destroy all timer data 
  859. programmed in the interface. The command format is as follows: 
  860.  
  861.    }ID7
  862.  
  863. No data needs to be supplied with the command. 
  864.  
  865. The Comm Engine will return the following data: 
  866.  
  867.    {XX }ID7 {diagstatus
  868.  
  869. Where:
  870.  
  871.   XX = 0 if there was no error.
  872.   XX = 1 unsupported or illegal command.
  873.   XX = 5 command can't be executed because engine is offline.
  874.   XX = 11 if the CP290 is not responding.
  875.  
  876.   diagstatus = PASSED if the diagnostics passed.
  877.          FAILED if the diagnostics failed.
  878.          ERROR if the CP290 did not respond.
  879.  
  880. Example: Perform CP290 diagnostics. 
  881.  
  882. Command:
  883.     rc = CLWritePipe( '}ID7' )
  884.  
  885. Reply (after 12 seconds):
  886.     {0  }ID7 {PASSED
  887.  
  888.  
  889. ΓòÉΓòÉΓòÉ 6.8. ID8 - Clear All Timers ΓòÉΓòÉΓòÉ
  890.  
  891. This function clears all 128 timers in the CP290. The command format is as 
  892. follows: 
  893.  
  894.    }ID8
  895.  
  896. No data needs to be supplied with the command. 
  897.  
  898. The Comm Engine will return the following data: 
  899.  
  900.    {XX }ID8 {timer CLR
  901.  
  902. Where:
  903.  
  904.   XX = 0 if there was no error.
  905.   XX = 1 unsupported or illegal command.
  906.   XX = 5 command can't be executed because engine is offline.
  907.   XX = 11 if the CP290 is not responding.
  908.   XX = 20 command is still executing, more data to come.
  909.  
  910.   timer = 1 through 128 (the number of timer just cleared).
  911.  
  912. Example: Clear all CP290 timers. 
  913.  
  914. Command:
  915.     rc = CLWritePipe( '}ID8' )
  916.  
  917. Reply:
  918.     {20 }ID8 {1 CLR
  919.     {20 }ID8 {2 CLR
  920.     ...
  921.     {20 }ID8 {128 CLR
  922.     {0  }ID8
  923.  
  924. Because clearing all timers takes more than one minute,
  925. this function returns the timer number it just cleared. This can
  926. be used for a progress indicator. Ensure that your program
  927. reads the pipe during this operation or it may eventually
  928. over-run and data is lost.
  929.  
  930.  
  931. ΓòÉΓòÉΓòÉ 6.9. Comm Engine STATUS ΓòÉΓòÉΓòÉ
  932.  
  933. This function requests the Comm Engine online status and com port setting. The 
  934. command format is as follows: 
  935.  
  936.    }STATUS
  937.  
  938. No data needs to be supplied with the command. 
  939.  
  940. The Comm Engine will return the following data: 
  941.  
  942.    {XX }status portname
  943.  
  944. Where:
  945.  
  946.   XX = 0 if there was no error.
  947.   XX = 1 unsupported or illegal command.
  948.  
  949.   status = ONLINE if online; OFFLINE if offline.
  950.  
  951.   portname = COMx where x = 1 through 8
  952.  
  953. Example: Get status of Comm Engine. 
  954.  
  955. Command:
  956.     rc = CLWritePipe( '}STATUS' )
  957.  
  958. Reply:
  959.     {0  }ONLINE COM2
  960.  
  961.  
  962. ΓòÉΓòÉΓòÉ 6.10. Comm Engine SETPORTCOMx ΓòÉΓòÉΓòÉ
  963.  
  964. This function instructs the Comm Engine to change com port. The Comm Engine 
  965. must be offline for the change to be successful. The command format is as 
  966. follows: 
  967.  
  968.    }SETPORTCOMx
  969.  
  970. where x is the integer 1 through 8. 
  971.  
  972. The Comm Engine will return the following data: 
  973.  
  974.    {XX }command
  975.  
  976. Where:
  977.  
  978.   XX = 0 if there was no error.
  979.   XX = 1 unsupported or illegal command.
  980.   XX = 6 Comm Engine online, cannot change com port.
  981.   XX = 7 invalid com port.
  982.  
  983.   command = SETPORTCOMx (original command as sent out).
  984.  
  985. Example: Set com port of Comm Engine to COM5. 
  986.  
  987. Command:
  988.     rc = CLWritePipe( '}SETPORTCOM5' )
  989.  
  990. Reply:
  991.     {0  }SETPORTCOM5
  992.  
  993.  
  994. ΓòÉΓòÉΓòÉ 6.11. Comm Engine CONNECT ΓòÉΓòÉΓòÉ
  995.  
  996. This function instructs the Comm Engine to connect to the com port. The command 
  997. format is as follows: 
  998.  
  999.    }CONNECT
  1000.  
  1001. No data needs to be supplied with the command. 
  1002.  
  1003. The Comm Engine will return the following data: 
  1004.  
  1005.    {XX }command
  1006.  
  1007. Where:
  1008.  
  1009.   XX = 0 if there was no error.
  1010.   XX = 1 unsupported or illegal command.
  1011.   XX = 2 connect error. RC will be returned in command.
  1012.  
  1013.   command = CONNECT (original command as sent out)
  1014.        or RC if there was an error.
  1015.  
  1016. Example: Connect Com Engine to CP290. 
  1017.  
  1018. Command:
  1019.     rc = CLWritePipe( '}CONNECT' )
  1020.  
  1021. Reply:
  1022.     {0  }CONNECT
  1023.  
  1024.  
  1025. ΓòÉΓòÉΓòÉ 6.12. Comm Engine DISCONNECT ΓòÉΓòÉΓòÉ
  1026.  
  1027. This function instructs the Comm Engine to disconnect from the com port. The 
  1028. command format is as follows: 
  1029.  
  1030.    }DISCONNECT
  1031.  
  1032. No data needs to be supplied with the command. 
  1033.  
  1034. The Comm Engine will return the following data: 
  1035.  
  1036.    {XX }command
  1037.  
  1038. Where:
  1039.  
  1040.   XX = 0 if there was no error.
  1041.   XX = 1 unsupported or illegal command.
  1042.   XX = 3 disconnect error. RC will be returned in command.
  1043.  
  1044.   command = DISCONNECT (original command as sent out)
  1045.               or RC if there was an error.
  1046.  
  1047. Example: Disconnect Com Engine from CP290. 
  1048.  
  1049. Command:
  1050.     rc = CLWritePipe( '}DISCONNECT' )
  1051.  
  1052. Reply:
  1053.     {0  }DISCONNECT
  1054.  
  1055.  
  1056. ΓòÉΓòÉΓòÉ 6.13. Comm Engine CLOSE ΓòÉΓòÉΓòÉ
  1057.  
  1058. This function closes and terminates the Comm Engine. Connection to the CP290 
  1059. will be closed automatically and the pipe is flushed and closed as well. The 
  1060. command format is as follows: 
  1061.  
  1062.    }CLOSE
  1063.  
  1064. No data needs to be supplied with the command. 
  1065.  
  1066. The Comm Engine will not return any data. 
  1067.  
  1068. Example: Terminate Comm Engine. 
  1069.  
  1070. Command:
  1071.     rc = CLWritePipe( '}CLOSE' )
  1072.  
  1073.  
  1074. ΓòÉΓòÉΓòÉ 6.14. Comm Engine SHOW ΓòÉΓòÉΓòÉ
  1075.  
  1076. This function restores the Comm Engine from a minimized state. The command 
  1077. format is as follows: 
  1078.  
  1079.    }SHOW
  1080.  
  1081. No data needs to be supplied with the command. 
  1082.  
  1083. The Comm Engine will return the following data: 
  1084.  
  1085.    {XX }command
  1086.  
  1087. Where:
  1088.  
  1089.   XX = 0 if there was no error.
  1090.   XX = 1 unsupported or illegal command.
  1091.  
  1092.   command = SHOW
  1093.  
  1094.  
  1095. ΓòÉΓòÉΓòÉ 6.15. Comm Engine MINIMIZE ΓòÉΓòÉΓòÉ
  1096.  
  1097. This function minimizes the Comm Engine. The command format is as follows: 
  1098.  
  1099.    }MINIMIZE
  1100.  
  1101. No data needs to be supplied with the command. 
  1102.  
  1103. The Comm Engine will return the following data: 
  1104.  
  1105.    {XX }command
  1106.  
  1107. Where:
  1108.  
  1109.   XX = 0 if there was no error.
  1110.   XX = 1 unsupported or illegal command.
  1111.  
  1112.   command = MINIMIZE
  1113.  
  1114.  
  1115. ΓòÉΓòÉΓòÉ 7. X10LDLL Function Description ΓòÉΓòÉΓòÉ
  1116.  
  1117. Describes all functions available in X10LDLL.DLL and how to use them. 
  1118.  
  1119. Note: This DLL is used to setup a named pipe to communicate with the Comm 
  1120. Engine. The functions listed in this section need to be used only if you want 
  1121. to write your own REXX client program to control the Comm Engine. See the 
  1122. section on Comm Engine Function Description for information on how to control 
  1123. the CP290 interface once the pipe is setup. 
  1124.  
  1125. Description of pipe operation. 
  1126.  
  1127. The Comm Engine uses a named pipe for interprocess communications. This pipe 
  1128. allows two programs to exchange data between each other. These two programs may 
  1129. be on the same computer or they may be on different computers connected through 
  1130. a LAN or peer-to-peer network. 
  1131.  
  1132. To establish connection, the Comm Engine will first create a pipe with the 
  1133. fixed name \PIPE\HOUSE290 and place it into a listening mode. The client 
  1134. program (H290MAIN.EXE or any other custom program) will then have to open the 
  1135. same pipe and peek to check if it connected. From that point on, data can be 
  1136. placed on the pipe by either program. All commands are buffered in the pipe and 
  1137. the client program must check the pipe for available data and read it to 
  1138. prevent buffer overrun and data loss. The buffer size is 4096 bytes in size and 
  1139. if full will not accept any additional data. Currently no error is reported if 
  1140. the buffer is full. 
  1141.  
  1142. If two programs are communicating through a pipe, they have exclusive access to 
  1143. the pipe. A third program can not connect to the same pipe. To free up the 
  1144. pipe, the client program must close the pipe so the Comm Engine can make it 
  1145. available to other programs. If a pipe is closed, all data in the buffer is 
  1146. flushed. 
  1147.  
  1148. For more details on pipe operation and communication to the Comm Engine, see 
  1149. the included sample REXX programs. 
  1150.  
  1151.  
  1152.    X10LLoadFuncs
  1153.  
  1154.    X10LDropFuncs
  1155.  
  1156.    CLReadPipe
  1157.  
  1158.    CLWritePipe
  1159.  
  1160.    CLPeekPipe
  1161.  
  1162.    CLOpenPipe
  1163.  
  1164.    CLClosePipe
  1165.  
  1166.  
  1167. ΓòÉΓòÉΓòÉ 7.1. X10LLoadFuncs ΓòÉΓòÉΓòÉ
  1168.  
  1169. This function loads X10LDLL.DLL to be used within your REXX program. A REXX 
  1170. program using X10LDLL must contain the following two lines to access other 
  1171. functions inside X10LDLL: 
  1172.  
  1173.    CALL RXFuncAdd 'X10LLoadFuncs', 'X10LDLL', 'X10LLoadFuncs'
  1174.    CALL X10LLoadFuncs
  1175.  
  1176. Standard REXX errors are returned for this function, for example: Error 43 - 
  1177. Routine not found if X10LDLL.DLL can't be found. X10LDLL.DLL must be in the 
  1178. current directory or in a directory where the LIBPATH statement points to. 
  1179.  
  1180.  
  1181. ΓòÉΓòÉΓòÉ 7.2. X10LDropFuncs ΓòÉΓòÉΓòÉ
  1182.  
  1183. This function unloads X10LDLL.DLL from memory. A REXX program using X10LDLL 
  1184. must contain the following line to unload X10LDLL: 
  1185.  
  1186.    CALL X10LDropFuncs
  1187.  
  1188.  
  1189. ΓòÉΓòÉΓòÉ 7.3. CLReadPipe ΓòÉΓòÉΓòÉ
  1190.  
  1191. This function reads the contents of the pipe, one entry at a time. The pipe 
  1192. must be open before it can be read. CLPipeRead will first do a DOSPeekNPipe 
  1193. call and then read the pipe if the character count is not zero. CLPeekPipe 
  1194. should be used to check if any data is available before a CLReadPipe command. 
  1195. See CLOpenPipe and CLPeekPipe for details. 
  1196.  
  1197. The command is as follows: 
  1198.  
  1199.    rc = CLReadPipe( '0' )
  1200.  
  1201. The return value rc is made up of the following information: 
  1202.  
  1203.   piperr charcount replypacket
  1204.  
  1205. Piperr is any possible error the read pipe command may have caused. If the 
  1206. character count is zero, the piperr returns the value of DOSPeekNPipe. If the 
  1207. character count is not zero, piperr returns whatever the DosRead returns which 
  1208. can be the following values: 
  1209.  
  1210.  
  1211.   0    NO_ERROR
  1212.   5    ERROR_ACCESS_DENIED
  1213.   6    ERROR_INVALID_HANDLE
  1214.   26    ERROR_NOT_DOS_DISK
  1215.   33    ERROR_LOCK_VIOLATION
  1216.   109   ERROR_BROKEN_PIPE
  1217.   234   ERROR_MORE_DATA
  1218.  
  1219. charcount is the character count of the data just read from the pipe. 
  1220.  
  1221. replypacket is the reply the Comm Engine returns in response to one of the 
  1222. commands as listed under Comm Engine Function Description. 
  1223.  
  1224. Example read from pipe. 
  1225.  
  1226. Command:
  1227.     rc = CLReadPipe( '0' )
  1228.  
  1229. Contents of rc:
  1230.     0 12 {0  }CONNECT
  1231.  
  1232. There were 12 characters read from the pipe which corresponds
  1233. to the data displayed from the opening curly bracket to the T in
  1234. CONNECT. (There are two spaces between the brackets).
  1235.  
  1236.  
  1237. ΓòÉΓòÉΓòÉ 7.4. CLWritePipe ΓòÉΓòÉΓòÉ
  1238.  
  1239. This function writes to the pipe. The pipe must be open before it can be 
  1240. written to. 
  1241.  
  1242. The command is as follows: 
  1243.  
  1244.    rc = CLWritePipe( command )
  1245.  Command contains any of the valid Comm Engine commands as listed under Comm 
  1246. Engine Function Description. 
  1247.  
  1248. The return value rc is the same as what DOSWrite returns and can be the 
  1249. following values: 
  1250.  
  1251.  
  1252.   0     NO_ERROR
  1253.   5     ERROR_ACCESS_DENIED
  1254.   6     ERROR_INVALID_HANDLE
  1255.   19    ERROR_WRITE_PROTECT
  1256.   26    ERROR_NOT_DOS_DISK
  1257.   29    ERROR_WRITE_FAULT
  1258.   33    ERROR_LOCK_VIOLATION
  1259.   109    ERROR_BROKEN_PIPE
  1260.  
  1261. Example write to pipe. 
  1262.  
  1263. Command:
  1264.     rc = CLWritePipe( '}ID1 A1 DIM 50' )
  1265.  
  1266. Contents of rc:
  1267.     0
  1268.  
  1269. This example instructs the Comm Engine to command the
  1270. CP290 to dim module A1 to 50% using the direct command.
  1271.  
  1272.  
  1273. ΓòÉΓòÉΓòÉ 7.5. CLPeekPipe ΓòÉΓòÉΓòÉ
  1274.  
  1275. This function checks if any data is available on the pipe to read. Use this 
  1276. function before a CLReadPipe command. 
  1277.  
  1278. The command is as follows: 
  1279.  
  1280.    rc = CLPeekPipe( '0' )
  1281.  
  1282. The return value rc is made up of the following information: 
  1283.  
  1284.   piperr charcount pipestate
  1285.  
  1286. Piperr is any possible error the DOSPeekNPipe command may have caused. 
  1287. DosPeekNPipe returns the following values: 
  1288.  
  1289.  
  1290.   0     NO_ERROR
  1291.   230    ERROR_BAD_PIPE
  1292.   231    ERROR_PIPE_BUSY
  1293.   233    ERROR_PIPE_NOT_CONNECTED
  1294.  
  1295. charcount is the number of characters available to read from the pipe. 
  1296.  
  1297. pipestate is the state the pipe is currently at. Possible values are: 
  1298.  
  1299.  
  1300.     1 =  the pipe is disconnected.
  1301.     2 =  the pipe is listening for a connection.
  1302.     3 =  the pipe is connected.
  1303.     4 =  the pipe is closing.
  1304.  
  1305. Example peek pipe. 
  1306.  
  1307. Command:
  1308.     rc = CLPeekPipe( '0' )
  1309.  
  1310. Contents of rc:
  1311.     0 12 3
  1312.  
  1313. There are 12 characters available to read
  1314. from the pipe and the pipe is connected.
  1315.  
  1316.  
  1317. ΓòÉΓòÉΓòÉ 7.6. CLOpenPipe ΓòÉΓòÉΓòÉ
  1318.  
  1319. This function opens the pipe to the Comm Engine. 
  1320.  
  1321. The command is as follows if the Comm Engine and the client are running on the 
  1322. same computer: 
  1323.  
  1324.    pipename = '\PIPE\HOUSE290'
  1325.    rc = CLOpenPipe( pipename )
  1326.  
  1327. For network operation, the pipe name must include the computer name where the 
  1328. Comm Engine is running at. In this example, the computer name is CLIENT290 and 
  1329. it must be preceded by two back slashes. 
  1330.  
  1331.    pipename = '\\CLIENT290\PIPE\HOUSE290'
  1332.    rc = CLOpenPipe( pipename )
  1333.  
  1334. This function returns the same values as the API call DosOpen. The values of 
  1335. most interest are: 
  1336.  
  1337.  
  1338.     0    NO_ERROR
  1339.     2    ERROR_FILE_NOT_FOUND
  1340.     3    ERROR_PATH_NOT_FOUND
  1341.     4    ERROR_TOO_MANY_OPEN_FILES
  1342.     5    ERROR_ACCESS_DENIED
  1343.     12    ERROR_INVALID_ACCESS
  1344.     231   ERROR_PIPE_BUSY
  1345.  
  1346. See the example CMD files included for details on how to run a pipe to the Comm 
  1347. Engine. 
  1348.  
  1349.  
  1350. ΓòÉΓòÉΓòÉ 7.7. CLClosePipe ΓòÉΓòÉΓòÉ
  1351.  
  1352. This function closes the pipe to the Comm Engine. 
  1353.  
  1354. The command format is as follows: 
  1355.  
  1356.    rc = CLClosePipe( '0' )
  1357.  
  1358. This function returns the same values as the API call DosClose. The values of 
  1359. most interest are: 
  1360.  
  1361.  
  1362.   0     NO_ERROR
  1363.   2     ERROR_FILE_NOT_FOUND
  1364.   5     ERROR_ACCESS_DENIED
  1365.   6     ERROR_INVALID_HANDLE
  1366.  
  1367. See the example CMD files included for details on how to run a pipe to the Comm 
  1368. Engine. 
  1369.  
  1370.  
  1371. ΓòÉΓòÉΓòÉ 8. Command Line Options ΓòÉΓòÉΓòÉ
  1372.  
  1373. The following command line options are recognized by CP290CE.EXE: 
  1374.  
  1375.   /ComX  Connects to the Com port as specified by X. X ranges from 1 through 8.
  1376.   /Min   Minimizes Comm Engine on start-up.
  1377.  
  1378. If /ComX is specified, the Comm Engine will over-ride the existing com port 
  1379. setting and open the specified port to establish a connection to the CP290. 
  1380.  
  1381. To enter the startup options do the following: 
  1382.  
  1383.       Γûá  For Warp 3.0:  Right-click on the CP290CE icon and select Settings. 
  1384.       Under the Program tab in Optional Parameters enter the startup option. 
  1385.  
  1386.       Γûá  For Warp 4.0:  Right-click on the CP290CE icon and select Properties. 
  1387.       Under the Program tab in Optional Parameters enter the startup option. 
  1388.  
  1389.  Note: These settings can also be changed from the client program H290MAIN.EXE 
  1390.  and through the pipe commands. 
  1391.  
  1392.  
  1393. ΓòÉΓòÉΓòÉ 9. Troubleshooting ΓòÉΓòÉΓòÉ
  1394.  
  1395. CP290 Interface Connection Problems. 
  1396.  
  1397. If you are having problems connecting to the CP290 interface then follow these 
  1398. steps below. 
  1399.  
  1400.       Γûá  Make sure the com port setting in the configuration matches the com 
  1401.       port you use for the interface. 
  1402.  
  1403.       Γûá  Make sure you have all the included files present in your HOUSE290 
  1404.       directory. 
  1405.  
  1406.       Γûá  If you have Ray Gwinn's SIO com drivers, use the included PMLM (Poor 
  1407.       Man's Line Monitor) to monitor data exchange between the Comm Engine and 
  1408.       CP290. Use HOUSE/290 to send out a request to read time for example. The 
  1409.       CP290 should respond with data. You can observe this data with PMLM and 
  1410.       that may help in troubleshooting. 
  1411.  
  1412.       Γûá  If you are using Ray Gwinn's SIO com drivers, check if the baud rate 
  1413.       is locked for the particular com port you are using with the interface. 
  1414.       Unlock it so the Comm Engine can change the baud rate to 600. From the 
  1415.       SIO reference, it states: 
  1416.  
  1417.  
  1418.                Locked Baud Rate
  1419.  
  1420.                Placing a colon and a baud rate following the communications port, eg
  1421.                (COM1:38400,3F8,IRQ4), causes the port to be locked at that baud rate.
  1422.                No program, OS2 or DOS, is allowed to change the baud rate.
  1423.  
  1424.       Γûá  Try the standard COM1 or COM2 ports if you have problems with any 
  1425.       other com ports like COM3 - COM8. Also, remove any serial cable 
  1426.       extensions or adapters and connect the interface directly to the 
  1427.       computer. 
  1428.  
  1429.       Γûá  Try using a different computer or different com port to access the 
  1430.       CP290. 
  1431.  
  1432.       Γûá  Download my X-10 Comm Tester program from my web page. This program 
  1433.       was specifically written to help troubleshooting communications problems 
  1434.       with the CP290 interface. 
  1435.  
  1436.       Γûá  E-mail me and I will try to help you out. (Eventually registering 
  1437.       HOUSE/290 will give me extra incentive too!). 
  1438.  
  1439.  
  1440. ΓòÉΓòÉΓòÉ 10. Installation ΓòÉΓòÉΓòÉ
  1441.  
  1442. Note:  REXX (classic or Object REXX) must be installed on your system for this 
  1443. program to work. REXXUTIL.DLL is required. 
  1444.  
  1445. HOUSE/290 is distributed as a self-installing executable using PillarSoft's SFX 
  1446. Installer. See http://www.pillarsoft.net for more information on that product. 
  1447.  
  1448. When installing HOUSE/290, simply follow the prompts given. 
  1449.  
  1450. Installing this program on your system does not change any of the INI or 
  1451. CONFIG.SYS files. 
  1452.  
  1453. In rare instances, it may be possible that HOUSE/290 may not find the DLL files 
  1454. and abort on start-up. To fix this, simply add the directory where you 
  1455. installed HOUSE/290 to the LIBPATH in your CONFIG.SYS. A reboot is necessary 
  1456. for the changes to take effect. 
  1457.  
  1458. The following files belong to this program: 
  1459.  
  1460.        H290.EXE          Splash screen. Starts the executable main program and 
  1461.                          Comm Engine. 
  1462.  
  1463.        H290MAIN.EXE      The executable main program, also the client for the 
  1464.                          Comm Engine. 
  1465.  
  1466.        CP290CE.EXE       The CP290 Communications Engine, also used as 
  1467.                          REXX-enabled server. 
  1468.  
  1469.        CP290CE.HLP       The CP290 Communications Engine help file. 
  1470.  
  1471.        HOUSE290.HLP      The main help file. 
  1472.  
  1473.        HOUSE290.INI      HOUSE290 configuration file for items like com port, 
  1474.                          battery type and battery installation date. This file 
  1475.                          will be created the first time H290MAIN is run. 
  1476.  
  1477.        HOUSE290.SET      Default module and macro set. This file, if present, 
  1478.                          will automatically load whenever HOUSE290 is started 
  1479.                          up. You can have several of these files with the 
  1480.                          extension SET to keep various module setups. This file 
  1481.                          will be created the first time HOUSE290 is run and you 
  1482.                          save the module setup. 
  1483.  
  1484.        SAMPLE.SET        Sample module set to show how HOUSE/290 can be setup. 
  1485.  
  1486.        HOUSE290.LOG      A log file that contains all the events as sent by the 
  1487.                          CP290 interface. Events are only logged when the 
  1488.                          computer is connected to the interface and logging is 
  1489.                          enabled. This is a text file and you can look at it 
  1490.                          with a text editor. 
  1491.  
  1492.        TMR290.TXT        Timer image file as last programmed to the CP290 
  1493.                          interface. This file contains the timer data in text 
  1494.                          format as last programmed into your CP290 interface. 
  1495.                          This file will be created every time upload is 
  1496.                          successful. 
  1497.  
  1498.        VPIBevel.DLL      Bevel object used for modules and macros. Required by 
  1499.                          H290MAIN.EXE only. 
  1500.  
  1501.        VPIButtn.DLL      Image button object used for button bar. These two 
  1502.                          objects are part of the VPExtras package. Thanks to 
  1503.                          Dion Gillard for creating and releasing these objects 
  1504.                          for free! Required by H290MAIN.EXE only. 
  1505.  
  1506.        VPOBJ.DLL         Dynamic Link Library required by executables. Required 
  1507.                          by H290MAIN.EXE only. 
  1508.  
  1509.        VPUTIL.DLL        Dynamic Link Library required by H290MAIN.EXE only. 
  1510.  
  1511.        RXASYNC.DLL       Dynamic Link Library required for serial 
  1512.                          communications to the CP290 interface. This library of 
  1513.                          serial communications routines is included by 
  1514.                          permission of Crucial Applications (Author: Ian Timms, 
  1515.                          e-mail: itimms@ariel.ucs.unimelb.edu.au). The entire 
  1516.                          serial communications package, including the source 
  1517.                          code for RXASYNC, is available at my home page or 
  1518.                          other major OS/2 sites by the file name RXASYN20.ZIP. 
  1519.                          This DLL has been packed with LXWARP for smaller size. 
  1520.                          Required by CP290CE.EXE only. 
  1521.  
  1522.        X10CHDLL.DLL      Dynamic Link Library required by H2MAIN.EXE only. 
  1523.  
  1524.        X10CPDLL.DLL      Dynamic Link Library required by CP290CE.EXE only. 
  1525.  
  1526.        X10LDLL.DLL       Dynamic Link Library required by the sample REXX or 
  1527.                          custom client programs only. 
  1528.  
  1529.        H2MODULE.DB       External Module database. Use HOUS2UTL to edit. 
  1530.  
  1531.        NORTHA.DAT        Geographical data file for North American locations. 
  1532.  
  1533.        EUROPE.DAT        Geographical data file for European locations. 
  1534.  
  1535.        OTHER.DAT         Geographical data file for other areas of the world 
  1536.                          locations. 
  1537.  
  1538.        REPORT.TXT        Default file name when saving reports to a file. 
  1539.  
  1540.        DIAL.CMD          Sample script to startup Injoy dialer through an X-10 
  1541.                          event. 
  1542.  
  1543.        RSTCP290.CMD      Sample script to restore timers to the CP290. Example 
  1544.                          to show how to access Comm Engine. 
  1545.  
  1546.        TIMEMOD.CMD       Sample script that turns a module on and off at a 
  1547.                          certain time. Example to show how to access Comm 
  1548.                          Engine. 
  1549.  
  1550.        MODCTRL.CMD       Sample script that turns on a module. Example to show 
  1551.                          how to access Comm Engine. 
  1552.  
  1553.        UNINSTAL.CMD      Uninstallation program. Removes HOUSE290 completely 
  1554.                          from your system. 
  1555.  
  1556.        HISTORY.TXT       History of changes to the program. 
  1557.  
  1558.        README.1ST        Program description and installation instructions. 
  1559.  
  1560.        BMTORDER.TXT      Order form to register HOUSE/2 or HOUSE/290 through 
  1561.                          BMT Micro. 
  1562.  
  1563.  To remove this program from your system, close the program and execute 
  1564.  UNINSTAL.CMD from the HOUSE/290 directory. This removes all HOUSE/290 files 
  1565.  and subdirectory where HOUSE/290 was located in. 
  1566.  
  1567.  
  1568. ΓòÉΓòÉΓòÉ 11. Network Operation ΓòÉΓòÉΓòÉ
  1569.  
  1570. HOUSE/290 uses a named pipe to communicate with the Comm Engine and thus allows 
  1571. it to run over a LAN or peer-to-peer network. The requestors on both machines 
  1572. must be running for network operation. 
  1573.  
  1574. To run HOUSE/290 over a network, do the following: 
  1575.  
  1576. Connect the CP290 to one of the peer stations or the server. Install HOUSE/290 
  1577. on that machine and only start-up CP290CE.EXE and configure it for the CP290. 
  1578. It is not necessary to have the Comm Engine set to connect, this can be 
  1579. controlled over the network with the client program H290MAIN.EXE. Install 
  1580. HOUSE/290 on another workstation and only run H290MAIN.EXE. Make sure the Auto 
  1581. Load and Auto Unload options are turned off. Also, check the windows list to 
  1582. make sure CP290CE.EXE is not loaded and minimized on the workstation where you 
  1583. run H290MAIN.EXE. In the settings page of H290MAIN.EXE, enter the computer name 
  1584. where the CP290 is connected to. Do not use any back slashes when entering the 
  1585. name. Now you can connect to the pipe and communicate with the Comm Engine. 
  1586.  
  1587. Only one client (H290MAIN.EXE) can communicate with the Comm Engine at any one 
  1588. time. If you want to use a third workstation to access the Comm Engine, you 
  1589. must disconnect H290MAIN.EXE from the pipe to free up the Comm Engine. 
  1590.  
  1591. It is not necessary to map any drives to the client or server machines unless 
  1592. HOUSE/290 is executed from the remote machine. 
  1593.  
  1594.  
  1595. ΓòÉΓòÉΓòÉ 12. Year 2000 Issues & other Date Problems ΓòÉΓòÉΓòÉ
  1596.  
  1597. HOUSE/290 version 2.0 is now fully Year 2000 compliant. 
  1598.  
  1599. The CP290 interface does not have any Year 2000 problems directly as it accepts 
  1600. the date in the form of a weekday only. 
  1601.  
  1602. Reprogramming of the interface at the beginning of each year may be necessary 
  1603. also if series events are to be executed properly when daylight savings time 
  1604. changes over. When HOUSE/290 is started, it checks to see if the DST dates are 
  1605. correct. If not, it will ask you if you want to adjust them. It will not make 
  1606. adjustments to the preprogrammed series events, you have to redo them manually. 
  1607. Depending on the application of HOUSE/290, you may be better off to disable DST 
  1608. and always use standard time. Make sure the computer is also set to standard 
  1609. time when accessing the interface. 
  1610.  
  1611.  
  1612. ΓòÉΓòÉΓòÉ 13. Shareware Limitation ΓòÉΓòÉΓòÉ
  1613.  
  1614. This shareware program is fully enabled with the exception of the following: 
  1615.  
  1616.       Γûá Registration reminder when exiting. 
  1617.  
  1618.       Γûá Only timers 1 through 30 (out of 128 possible), can be programmed into 
  1619.       the CP290. 
  1620.  
  1621.       Γûá When uploading to the interface, you will be reminded of a possible 
  1622.       limited number of timer uploads. 
  1623.  
  1624.  The registered version has these limitations removed. 
  1625.  
  1626.  
  1627. ΓòÉΓòÉΓòÉ 14. How to Register ΓòÉΓòÉΓòÉ
  1628.  
  1629. Registration is for life-time, you will NOT be re-charged for any future 
  1630. HOUSE/290 versions. Registration also includes the game Leave-One. It's a 
  1631. challenging puzzle similar to Pegged. See my website for a screen shot of this 
  1632. game. 
  1633.  
  1634. If you are a registered user of HOUSE/2 for the CM11A interface, you are 
  1635. entitled to a free, registered version of HOUSE/290. Please send me e-mail to 
  1636. indicate that you would like the registration key. 
  1637.  
  1638. There are two ways you can register HOUSE/290: 
  1639.  
  1640. Send e-mail to ASchw@worldnet.att.net to request my mailing address. You may 
  1641. then send me a check or money order and I will return the registration key. 
  1642. There are two options you can choose from: If you want the HOUSE/290 program 
  1643. only, the cost is $15.00. If you plan to eventually add the newer CM11A to your 
  1644. CP290 controller, you can purchase HOUSE/2 together with HOUSE/290 for the 
  1645. price of $30.00 total. Please indicate which option you like when requesting 
  1646. mailing address. 
  1647.  
  1648. Register through BMT Micro at www.bmtmicro.com. BMT Micro offers a variety of 
  1649. purchasing methods, see the file BMTORDER.TXT for details. A registration key 
  1650. will be sent to you within usually one day of purchasing HOUSE/290. Two options 
  1651. are available: Purchase HOUSE/290 only for $20.00 or purchase HOUSE/2 together 
  1652. with HOUSE/290 for $35.00 total. See the BMT Micro site for more information. 
  1653.  
  1654. Quantity discounts are available. Please e-mail me for details. 
  1655.  
  1656. Registration key and instructions on how to enter the key to enable the 
  1657. registered features will be given out at registration time. 
  1658.  
  1659.  
  1660. ΓòÉΓòÉΓòÉ 15. The Legal Stuff ΓòÉΓòÉΓòÉ
  1661.  
  1662. HOUSE/290 and Comm Engine for the CP290 are copyright programs by A. Schwarz. 
  1663.  
  1664. This program is shareware and not free. You may use it for 30 days. After that, 
  1665. if you continue using it, you must register to obtain a license. See How To 
  1666. Register section on ways to register. 
  1667.  
  1668. The shareware version of this program may be distributed electronically as long 
  1669. as all files are kept together. The shareware version is recognized by the 
  1670. title  Home Automation & Security for OS/2 - Unregistered in the title bar of 
  1671. the main program. 
  1672.  
  1673. The registered version of HOUSE/290 may not be distributed in any way. Only one 
  1674. copy of the registered program (CP290CE.EXE) may be run at one time on a 
  1675. computer. In other words, if you have a laptop and a desktop, you may copy this 
  1676. program onto both computers but only one instance of the CP290CE.EXE program 
  1677. may be run at one time. If there is a possibility that two of these programs 
  1678. may be run at the same time, then you must get a second license. The client 
  1679. program H290MAIN.EXE only may be run on an unlimited number of computers. 
  1680. Contact the author for information on quantity discounts. 
  1681.  
  1682. Registration gives you many benefits. First of all, it ensures that I will 
  1683. continuously update and support this program. Registration will remove all 
  1684. restrictions and registration reminders, I will provide prompt technical 
  1685. support, implement suggestions to program improvements, enhancements and 
  1686. customization (if technically possible but let me add that I can be convinced 
  1687. of a lot, but not everything). 
  1688.  
  1689. RXASYNC.DLL required for serial communications to the CP290 interface, is a 
  1690. library of serial communications routines and is included by permission of 
  1691. Crucial Applications (Author: Ian Timms, e-mail: 
  1692. itimms@ariel.ucs.unimelb.edu.au). The entire serial communications package, 
  1693. including the source code for RXASYNC, is available at my home page or other 
  1694. major OS/2 sites by the file name RXASYN20.ZIP 
  1695.  
  1696. HOUSE/290 is protected using SecureIt. To get more information on this 
  1697. shareware protection program, see http://www.bmtmico.com/catalog/secureit/ 
  1698.  
  1699. DISCLAIMER 
  1700.  
  1701. The author of HOUSE/290 is in no way responsible for any damage this program 
  1702. may cause to computer equipment by running this software on it. Use HOUSE/290 
  1703. at your own risk. 
  1704.  
  1705. The author of HOUSE/290 also assumes no responsibility of damage to property, 
  1706. bodily injury or loss of life as a result of controlling home control devices 
  1707. with the HOUSE/290 software. 
  1708.  
  1709. For safety reason, I DO NOT recommend to use X-10 devices to control coffee 
  1710. pots, space heaters or similar heat-creating appliances. 
  1711.  
  1712. Any trademarks mentioned in this document belong to their respective owners and 
  1713. the author of HOUSE/290 is not connected in any way to these products nor does 
  1714. he endorse any of the products mentioned. 
  1715.  
  1716.  
  1717. ΓòÉΓòÉΓòÉ 16. Support ΓòÉΓòÉΓòÉ
  1718.  
  1719. For HOUSE/2 and HOUSE/290 support, you can contact me directly via e-mail. 
  1720.  
  1721. My e-mail address: 
  1722.  
  1723.   ASchw@worldnet.att.net 
  1724.  
  1725. Visit my home page, "The Warped Code Cellar" at 
  1726.  
  1727.   http://home.att.net/~ASchw 
  1728.  
  1729. for other information and applications for OS/2 like UPS Monitor for APC brand 
  1730. uninterruptible power supplies, Memory Game and Leave One, two 
  1731. speech-navigation-enabled games. Also available new is a HOUSE/2 and X-10 FAQ. 
  1732.  
  1733. Monitor my home page regularly for future upgrades of HOUSE/290. This will be 
  1734. the place where HOUSE/290 upgrades will be available first. 
  1735.  
  1736. This program is also available at the following sites: 
  1737.  
  1738. Internet: 
  1739.  
  1740.   http://home.att.net/~ASchw 
  1741.   http://www.bmtmicro.com 
  1742.   http://hobbes.nmsu.edu 
  1743.   http://www.os2ss.com 
  1744.  
  1745.  
  1746. ΓòÉΓòÉΓòÉ 17. Internet Links for Home Automation ΓòÉΓòÉΓòÉ
  1747.  
  1748. To get more information on home automation, you can visit any of the sites 
  1749. listed here: 
  1750.  
  1751. www.x10.com
  1752. Homepage of X-10.
  1753. This is the manufacturer of X-10 products.
  1754.  
  1755. www.x10.com/x10euro.htm
  1756. Links to European Representatives of X-10.
  1757.  
  1758. www.smarthome.com
  1759. Home Automation System, Inc. Vendor carrying large
  1760. selection of home automation devices. Download
  1761. catalog in PDF format, search for part numbers online.
  1762.  
  1763. www.hwg-telekom.de
  1764. HWG Telekommunikations Systeme GmbH.
  1765. X-10 Representative of Germany, Austria and
  1766. Switzerland. The CM11A is available as
  1767. PowerHaus-II in these countries.
  1768.  
  1769. www.automationplus.com
  1770. Mail order company for home automation devices.
  1771.  
  1772. www.asihome.com
  1773. Mail order company for home automation devices.
  1774.  
  1775. support.tandy.com/support_security/
  1776. Radio Shack Support. Follow the X-10 links.
  1777. Contains FAQ for home automation devices.
  1778.  
  1779. www.hometoys.com
  1780. Mailing lists, newsletters, articles and product reviews
  1781. of home automation products and services.
  1782.  
  1783. www.homecontrols.com
  1784. Large product catalog for home automation devices.
  1785. Also carries 220/230V models for international markets.
  1786.  
  1787. www.hometeam.com
  1788. Information about products and services for home automation.
  1789.  
  1790. www.infinet.com/~dhoehnen/ha/list.html
  1791. Index of home automation related sites.
  1792.  
  1793. www.io.com/~lbs/
  1794. Laser Business Systems Ltd. Home Automation dealer in
  1795. the United Kingdom. Lists controllers and modules for many
  1796. other European countries.
  1797.  
  1798.