LinuxMCE Forums
General => Developers => Topic started by: ddamron on December 20, 2007, 11:56:32 pm
-
I'm trying to store configuration data into my device.
I've added devicedata[56]{string} (Configuration) to my template
I've a lot of information to store... like to store it as XML.
cmd = command.new(blah)
devicedata_[56] = XMLString
SendCommand(cmd)
Which Command (or event) should I use to populate this devicedata string?
Will this push to the database?
Is there a limit on the length of my XMLString?
and is there any problems when I have to CHANGE this information (I don't think so)
Thanks,
Dan
-
Ok, I think I found something here..
Aaron.B,
Your previous post sparked a possibility...
I had to read it THREE times carefully... lol
Command:SetDeviceData #765 EDIT: wrong command, it's supposed to be #246
devdata[2](int) - the Device to set
devdata[52](int) - the devicedata field (56) ## I want to set devicedata(56) in the child.. can I do this without defining it in the template?
devdata[5](string) - Value to Assign (my configuration info)
Am I correct in assuming command 765 WILL push the data in devdata[5] into the database as (the value of) devdata[52] which I would set to 56 (Configuration)?
I'm getting frustrated here.. been working on the SAME 3 problem for 5 days now
If this is all OK, can I use this to set the STATE? I can't figure out the devdata for state, (if it exists)
Thanks, Dan
-
K, I'm frustrated.
Here's my code for 2 simple routines:
def testinit()
#First, lets try to save configuration information to the child.
#from me[127], to General Info Plugin[4], priority 1, type=1, ID = 765
#
cmd = Command.new(127,4,1,1, 765)
cmd.params_[2] = '40' # the device to set (40 is my office light)
cmd.params_[52] = '56' # the devicedata field [56] is Configuration
cmd.params_[5] = 'Testing' #Value to assign...
SendCommand(cmd)
end
def testinit2()
#ok, seems like testinit worked.. lets attempt to read the data back.
teststring = device_.childdevices_[40].devdata_[56]
log('Device 40s config:' + teststring)
end
I call testinit, all seems fine.
I call testinit2, and I get an error.
-
OK, I'm a dummy.
765 is the WRONG command.
it's #246..
I think I got it working... ready to strangle myself.
;D ;D ;D ;D
-
cmd = command.new(blah)
devicedata_[56] = XMLString
SendCommand(cmd)
(...)
Is there a limit on the length of my XMLString?
If you're storing the XMLString in the device as just a blob, you can compress the ASCII XML quite a lot if it's relatively large. (un/compress in LMCE on retreive/store).
-
Ok, I've run into a 'gotcha'
Hopefully someone can shed some light on this.
I have successfully stored devdata[59] (configuration) to a Light Switch (child of mine)
BUT:
It seems that the data I write is not available until I do a RELOAD..
Here's my routines.. pretty straight forward..
Problem is, I need to be able to WRITE the data and READ it back again..
def setdeviceconfig(insteonid, configurestring)
@deviceid = $children[insteonid]
@cmdfrom = device_.devid_
@cmdto = 4 #general info plugin
@priority = 1
@type=1 #command
@cmdid = 246
#set up command..
@cmd = Command.new(@cmdfrom, @cmdto, @priority, @type, @cmdid)
@cmd.params_[2] = @deviceid.to_s
@cmd.params_[52] = '59' # Configuration
@cmd.params_[5] = configurestring
SendCommand(@cmd)
log('Configuration Saved - will be available on next reload')
end
def getdeviceconfig(insteonid)
@deviceid = $children[insteonid]
begin
@configstring = device_.childdevices_[@deviceid].devdata_[59].to_s
# the above line fails if the data was just written - must do a quick reload first
rescue
log('Device ID = ' + @deviceid.to_s)
log($red + 'Error - Child has no configuration'+ $grey)
log('Setting initial value of ""')
setdeviceconfig(insteonid, '')
@configstring = ''
end
...
end
I guess the first question is :
Am I reading the data correctly? using 'device_.childdevices_[@devid].devdata_[59]'
Dan
-
I got this figured out. I'm locking this topic...
That is how you do it.
FYI, when you 'add' a devdata via code, it DOES show up in the child device... just not in the template...
Dan