Insteon PLM Ruby Code 355

From LinuxMCE
Revision as of 01:30, 6 January 2008 by Ddamron (Talk | contribs)

(diff) ←Older revision | view current revision (diff) | Newer revision→ (diff)
Jump to: navigation, search
#### Written by Dan Damron
#### #355 Process Initialize ####
$red = 0x1b.chr + '[31m'
$green = 0x1b.chr + '[32m'
$yellow = 0x1b.chr + '[33m'
$blue = 0x1b.chr + '[34m'
$purple = 0x1b.chr + '[35m'
$aqua = 0x1b.chr + '[36m'
$grey = 0x1b.chr + '[37m'
$redBack = 0x1b.chr + '[41m'
$greenBack = 0x1b.chr + '[42m'
$yellowBack = 0x1b.chr + '[43m'
$blueBack = 0x1b.chr + '[44m'
$purpleBack = 0x1b.chr + '[45m'
$aquaBack = 0x1b.chr + '[46m'
$greyBack = 0x1b.chr + '[47m'
$blackBack = 0x1b.chr + '[48m'
$remoteLinkRecord = ''
#$remoteRecordReady = 0
$configstring = ''
$configparams = []
$childdatabases = {}
$newdevices = {}
$plmdatabase = []
$plmlastrecord = true
$log = ''
$cmdTo = ''
$cmdFrom = ''
$cmdPriority = ''
$cmdType = ''
$cmdID = ''
$cmdParams = {}
$children = {}
$recvbuff = ''
$wAIT = false
$currentCmd = {}
$flagsBroadcastMessage = 128
$flagsDirectMessage = 0
$flagsAckDirectMessage = 32
$flagsNackDirectMessage = 160
$flagsGroupBroadcaseMessage = 192
$flagsGroupCleanupDirectMessage = 64
$flagsGroupAckDirectMessage =96
$flagsGroupNackDirectMessage = 224
$cmdqueue = []
$currentcmd = 0 # to save state of command when receiving more data.
$resetNext = 0 # used in Process IDLE to trap stalled responses.
$savedstate = nil
$dcequeue = []
$rerun = false
$reported = false
$X10HouseCodes = {
  '6', 'A',
  'E', 'B', 
  '2', 'C', 
  'A', 'D', 
  '1', 'E', 
  '9', 'F', 
  '5', 'G', 
  'D', 'H', 
  '7', 'I', 
  'F', 'J', 
  '3', 'K', 
  'B', 'L', 
  '0', 'M', 
  '8', 'N', 
  '4', 'O', 
  'C', 'P'}
$X10UnitCodes = {
  '6', '1', 
  'E', '2', 
  '2', '3', 
  'A', '4', 
  '1', '5', 
  '9', '6', 
  '5', '7', 
  'D', '8', 
  '7', '9', 
  'F', '10', 
  '3', '11', 
  'B', '12', 
  '0', '13', 
  '8', '14', 
  '4', '15', 
  'C', '16'}
$X10CommandCodes = {
  '6', 'All Lights Off', 
  'E', 'Status = off',
  '2', 'On', 
  'A', 'Pre-Set Dim',
  '1', 'All Lights On', 
  '9', 'Hail Ack',
  '5', 'Bright', 
  'D', 'Status=on',
  '7', 'Extended Code',
  'F', 'Status Request',
  '3', 'Off', 
  'B', 'Pre-set Dim', 
  '0', 'All Units Off', 
  '8', 'Hail Request', 
  '4', 'Dim', 
  'C', 'Extended Data(analog)'}
$responseString = '<' + '/' + 'Response>'

############################## TEST Code below #################################
# testing Reading a devices Database
#	Common Insteon Device Memory Locations:
#	0x0001 EESize - MSB of size of EEPROM chip in device
#	0x0002 EEVersion - Firmware Revision number
#	0x0020 EEOnLevel - Preset On-Level for lighting control
#	0x0021 EERampRate - Ramp Rate for Lighting Control
#	0x0030 EEX10BaseHouse - Base X10 House Code for device
#	0x0031 EEX10BaseUnit - Base X10 Unit Code for device
#	
#	ALDB/L
#	Starts at the top of external serial eeprom and grows downward.
#	most limited-memory INSTEON devices, top of memory is 0x0FFF
#	Each Record is 8 bytes long, so the first record starts at
#	0x0FF8, the second record starts at 0x0FF0
#
#	ALDB/L Record Format:
#	Record Control:	1 byte
#	Group:		1 Byte
#	ID:		3 Bytes HB MB LB
#	Data1:		1 Byte Link-specific data (eg. On-Level)
#	Data2:		1 Byte Link specific data (eg. Ramp Rates)
#	Data3:		1 Byte Link specific data (normally unused)
#
#	Record Control Byte Bitmap:
#	7: 1=Record in use, 0=Record is available
#	6: 1=Controller of ID, 0=Responder of ID
#	5: Product Dependant
#	4: Product Dependant
#	3: Product Dependant
#	2: Product Dependant
#	1: 1=Record has been used before, 0=High water mark (last record)
#	0: Reserved
#PLM cat 03 subcat 05
# param = {'Command' => 'StLnk',
#'Parameter1' => '01', #Link code 0x01=controller
#'Parameter2' => '8F' #All Link Group
#}
#$cmdqueue << param
# param = {'Command' => 'CancelLnk'}
#$cmdqueue << param
#SndIns()
#
#Lets try the Assign to ALL-Link Group ### SUCCESS!!!
#param = {'Command' => 'SndIns',
#'Parameter1' => '0A', #HB
#'Parameter2' => '8F', #MB
#'Parameter3' => '5A', #LB
#'Parameter4' => '0F', #Flags
#'Parameter5' => '01', #Cmd1
#'Parameter6' => '8F' #Cmd2
#}
#
#
#param = {'Command' => 'MngLnk',
#'Parameter1' => '00', # Control Code 
#'Parameter2' => 'C2', #All Link Record Flags AKA Record Control Byte
#'Parameter3' => '01', #All Link Group
#'Parameter4' => '0A', #HB
#'Parameter5' => '97', #MB
#'Parameter6' => '0B', #LB
#'Parameter7' => '01', #Link Data 1 ON-Level
#'Parameter8' => '01', #Link Data 2 Ramp Rate
#'Parameter9' => '00'} #Link Data 3 not used
#$cmdqueue << param
#
#
## Test Device: LampLinc ID:0A.97.0B
# Assign Test device to Group
#param = {'Command' => 'SndIns',
#'Parameter1' => '0A', #HB
#'Parameter2' => '97', #MB
#'Parameter3' => '0B', #LB
#'Parameter4' => '0F', #Flags
#'Parameter5' => '01', #Cmd1
#'Parameter6' => '01' #Cmd2
#}
#$cmdqueue << param
#
#
############################## Real Code below #################################
log('MY DEVICE:' + device_.devid_.to_s)

#################################################
#What I need to do and the order I need to do it.
#done	read PLM database
#done	get child devices
#done	read child devices configuration
#done1	all child devices in the PLM database?
#done	if not, add their ID to the PLM database (new group numbers?)
#	get the status of each (child) device
#	compare the Database delta with the value stored in the configuration
#		Different?
#			read the child database 
#			update configuration
#			check devices links to see if any are new
#			new link found, what to do?? send a message?
#				create new child device?
#				PING the new device and back to 1
###
# easiest way?.. create hash for PLM records
# 		create hash for child devices is needed 
#		(not needed if DBDelta is same)


#reset the PLM
$timeout = 3
#param = {'Command' => 'RstPLM'}
#$cmdqueue << param
#SndIns()

#put IM in monitor mode..
param = {'Command' => 'SetCfg', 'Parameter1' => '40'}
$cmdqueue << param
SndIns()
mainStart()




##children found... get the status of each child...
#$children.keys.each{|c|
#	if c.length > 2 #filter out X10 for now
#	  	#pack insteon message here, and send it out!
#		# receive message in parsemessage and relay commands back in it.
#		insteonID = c.chomp.split('.')
#		param = {'Command' => 'SndIns', 
#		'Parameter1' => insteonID[0], 
#		'Parameter2' => insteonID[1],
#		'Parameter3' => insteonID[2],
#		'Parameter4' => '0F', #flags
#		'Parameter5' => '19', #Status Request
#		'Parameter6' => '00'} #not used.
#		$cmdqueue << param
## below gets the device Cat/SubCat/Firmware
#		param = {'Command' => 'SndIns', 
#		'Parameter1' => insteonID[0], 
#		'Parameter2' => insteonID[1],
#		'Parameter3' => insteonID[2],
#		'Parameter4' => '0F', #flags
#		'Parameter5' => '10', #PING
#		'Parameter6' => '00'} #not used.
#		$cmdqueue << param
#
#	end
#	}