LinuxMCE Forums

General => Developers => Topic started by: ddamron on December 20, 2007, 11:56:32 pm

Title: Can I do this?
Post 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

Title: Re: Can I do this?
Post by: ddamron on December 21, 2007, 12:33:53 am
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
Title: Re: Can I do this?
Post by: ddamron on December 21, 2007, 04:24:56 am
K, I'm frustrated.
Here's my code for 2 simple routines:
Code: [Select]
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.
Title: Re: Can I do this?
Post by: ddamron on December 21, 2007, 04:37:36 am
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
Title: Re: Can I do this?
Post by: Matthew on December 21, 2007, 04:48:03 pm
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).
Title: Re: Can I do this?
Post by: ddamron on December 22, 2007, 12:27:54 am
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..
Code: [Select]
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

Code: [Select]
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
Title: Re: Can I do this?
Post by: ddamron on December 24, 2007, 10:29:22 am
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