Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Insteon: Add Function to Filter Out Duplicate Received Messages #195

Merged
merged 7 commits into from
May 21, 2013

Conversation

krkeegan
Copy link
Collaborator

This creates a log of recently received messages with a timestamp. Subsequent messages are check to see if they match. If a match is found and if they message was received within the time permitted by the number of remaining hops plus a little wiggle room, the message is dropped.

Fixes issue #169

This creates a log of recently received messages with a timestamp.  Subsequent messages are check to see if they match.  If a match is found and if they message was received within the time permitted by the number of remaining hops plus a little wiggle room, the message is dropped.

Fixes issue hollie#169
Apparently the prior settings were not catching duplicative device commands.  Unfortunately extending the window results in numerous false positives for direct ACK messages.  In order to prevent errors, only alllink related commands are examined for duplicative messages.
Move function which prevented sequential set commands in less than 1 second to BaseObject

Expand the logic of the duplicate message checker.  Attempt to take into account whether the message received requires an ACK.  If an ACK is required, attempt to catch duplicate messages which result from the failure of the device to receive the ACK.
The message window is now calculated based on some basis in reality.  The message window is the amount of time during which no proper message should be received.

This depends on whether the message needs to be ACKed or not.

If a message needs to be ACKed, then no message should be received from the device until:
- All hops left expire
- Max hops + 1 elapses for an ACK to be received
- Max hops - less hops left for a new request to be sent

If no ACK is required then no message should be received from the device until:
-All hops left expire
-Max hops for a PLM message to be received by the device
(since MH is more sensitive to false positives in these types of messages, and since when duplicates occur here they normally occur very fast, we are more conservative for these types of messages)
MH already pauses to all hops_left time to expire.

This adds a pause for messages that require ACKs to be sent to devices.  MH doesn't send the ACKs, they are automatically sent by the PLM.  However, anecdotal evidence suggests that the PLM doesn't abide by collision avoidance, ie it seems to permit a message to be sent immediately after an ACK without concern for allowing the ACK hops to complete.
Resolves one of the three loopholes discovered by @peloy which permitted duplicate messages received in the same pass to be processed.

Hopefully the final fix for hollie#169
krkeegan added a commit that referenced this pull request May 21, 2013
Insteon: Add Function to Filter Out Duplicate Received Messages
@krkeegan krkeegan merged commit d157105 into hollie:master May 21, 2013
@krkeegan krkeegan deleted the fix_issue_169 branch May 21, 2013 04:05
@hollie hollie mentioned this pull request Jun 15, 2013
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant