AnonymousNovember 24, 2010 at 12:32 amPost count: 6
I am writing my own interface to the EZIOxx devices using an Insteon PLM and I recently found out that some simplehomenet devices have 2 different memory sizes and starting locations. So my question is, assuming I have the serial number of the device, how can I identify the devices memory size. I believe there are only 2 starting memory locations so if I know either the memory size or the starting location I can assume the other.
But what calls do I make to the device, to identify which base address to use. I saw another post that referred to using peek and poke commands but it didn’t provided specifics. So readers digest question is how do you identify the device base memory address if you only have the serial number.
And if its not too much trouble one other question… Im trying to keep track of the relay states. The problem is the 0x0250 event Im recieving appears to be sending just a bit mask. Cmd1 indicates On or Off but Cmd2 is a mask of the relay states not the relay that just changed state. Is there a way to have the EZIOxx send which relay changed state instead of a mask of all the relays current state. I cant find a way to reliably Id the relay whos state changed.
And is there a way to turn on a relay without having to know the state of the other relays. The Insteon command table doc says Cmd1=0x45 Cmd2=Relay# should turn on that relay but it appears that the EZIOxx’s treat Cmd2 as a bit mask and not the relay number. For example if I was to send a Cmd1=0x45 Cmd2=0x03 it would turn on relays 1 & 2 not relay 3.
I would have to query the device to find out what relays were On and create a mask before I can send my On command. With Insteon intercommand delays at 400ms it really kills the ability to make rapid changes. Any way to directly control the relays without needing to know the state of the other relays.AnonymousNovember 24, 2010 at 1:34 amPost count: 1001
Neither the serial number nor the PLM revision number is useful in determining PLM memory size. Smarthome came up with an algorithm that works. It is somewhat roundabout but is now being used by the UDI ISY product to make that determination with success. The premise of this technique is that the memory model in the PLM wraps the memory address if outside the valid range.
Step 1 – retrieve the current data from locations 0FFF, 1FFF and 3FFF using Set MSB Peek commands and save the values.
Step 2 – write an 01 into 0FFF, an 02 into 1FFF and 03 into 3FFF using Set MSB Peek Poke commands.
Step 3 – read the current values from locations 0FFF, 1FFF and 3FFF, using Set MSB Peek commands.
If the data returned is 01 02 03 then all three addresses were valid and the PLM has large memory. The first link record address is 3FF8.
If the data returned is 03 03 03 then 1FFF and 3FFF do not exist and the PLM has small memory. The first link record address is 0FF8.
Step 4 – restore the saved values from step 1 using Set MSB Peek Poke, restoring in the same sequence as the data was retrieved.
The sequence of data addresses read and written is important.
If this is a Broadcast message being sent because one of the relays changed state there is no way to determine from the message which relay state change generated the Broadcast message. By Querying the relay states in the beginning and comparing the last saved state bit pattern to the new state bit pattern is the only way to know which relay was changed.
Yes, you can turn on/off a specific relay without affecting the state of the other relays. Output On 0x45 turns On the relay number specified in cmd2 field. The cmd2 relay number value ranges from 0-7 for relays 1-8. Output Off 0x46 turns Off the relay number specified in cmd2. The cmd2 relay number ranges from 0-7 for relays 1-8. Cmd2 for these commands is NOT a bit mask but the actual relay number relative to zero. The cmd2 value in the ACK response is a bit map of the current relays which are On.AnonymousNovember 24, 2010 at 2:27 amPost count: 6
Wow, may I say that is one of …..Whoops sorry….. THE ONLY fast and concise reply to a post about insteon I’ve gotten on any WEB board or from the Insteon support desk. Thank You! I can say I do not have any questions. Your answered everything with clear details.
Its just a shame that it will take around 9 commands at ~500ms per command to Id the device. Or ~3 Seconds of wasted time.AnonymousNovember 24, 2010 at 2:46 amPost count: 1001
Glad the information is useful. You are right about that technique being slow. It would be nice to have a single command to obtain that information but no such luck. Products have been struggling with this question for a long time. The EZSrve saves the Set MSB value of 0F or 3F which is all that is really necessary to access the link database. Powerhome2 has a user defined value in the GUI that can be adjusted as needed. The ISY determines the size once when an SHN device is added to the device inventory. Not too bad if it only needs to be done once.
Post again if we can add anything additional. The EZIOxx family of devices uses the same command set so what works for an EZIO2X4 also works for an EZIO8SA. Of course the number of Inputs and Outputs vary but the base command set is the same across the EZIOxx product line.AnonymousDecember 13, 2010 at 3:44 amPost count: 6
I have implemented the mem check as you described. One of my testers has an EZIO2X4 and a EZIO40, both devices report the 3FFF memory size and Report the Engine Revision as 2, but if I look for link records they are not there. I do find the link records at 0FFF. So Im a bit confused, because the device(s) act like it has a large memory based on the 1 2 3 method you detailed. Are you familure with these devcies? Are the link records at 3FFF or 0FFF?
Also the revision returned is 2 but if I send an Extended 0x2F It fails to send the Extended reply with the link record every time. I can get the link record by using the Peek 0x28 0x2B method but not the i2 command 0x2F.
Any Ideas on where Im going wrong or what my misunderstanding might be?
JimAnonymousDecember 13, 2010 at 4:02 amPost count: 1001
What wrote the link records you are finding at 0FF8? That is a valid memory address but there would have to be some 1500+ active links for active link records to be found there. It sounds like what ever wrote the link records at FF8 does not recognize the actual size of the device memory.
Many devices that indicate an I2 engine DO NOT support the Extended 2F ALDB command.
What are the firmware revision levels of the EZIO2X4 and EZIO4O?AnonymousDecember 13, 2010 at 5:13 amPost count: 1001
The technique I use to verify where the hardware is expecting to find link records is to first factory reset the device. Then use the Set button method to create a link from say Input 1 of the EZIO2X4 to some responder. Now display the link records. If the algorithm indicates a large memory I would expect to find the hardware wrote the Set button link record at 3FF8.AnonymousDecember 13, 2010 at 4:21 pmPost count: 6
Ok thanks, I will try it tonight, it is possible that something in my code wrote the link records incorrectly. My beta tester said the simplehomenet utility showed the records correctly but I better re verify everything.
JimAnonymousDecember 13, 2010 at 4:53 pmPost count: 1001
What memory size option was specified in the SHN Utility when the link records were displayed, Small or Large. It sounds like the Small option was used (the default) which would be consistent with not finding link records at 3FF8 (Large option under SHN Utility).
I have not seen a case where the memory size algorithm failed to show the correct PLM memory size. The Set button method of creating a link record is an absolute test. The internal PLM is writing the link record in this case and will write it at the location associated with the top of the memory installed. The SHN Utility can be used to verify the link record location. For a large memory device the SHN Utility will show the link record with the Large option and no link records with the Small option (assuming a Factory reset preceded the Set button link to insure all link database memory has been erased).
For a device that has the small memory the SHN Utility will display the link record using either the Small option (Set MSB 0F) or the Large option (Set MSB 3F) as the device memory will wrap the Set MSB 3F value back to 0F.
It would be good to know the revision level of the EZIO2X4 and EZIO4O. Since the tester is using the SHN Utility, simply go to the EZIOxx tab, enter the appropriate EZIO Model and enter the Insteon address of the device. The firmware level will be displayed below the Insteon ID field.
- You must be logged in to reply to this topic.