-
-
Notifications
You must be signed in to change notification settings - Fork 12
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
feat: add passive support for GV5121/GV5122/GV5123/GV5125/GV5126 #89
Conversation
key = time_ms + bytes(12) | ||
try: | ||
decrypted = decrypt_data(key, enc_data) | ||
except ValueError: | ||
_LOGGER.warning("Failed to decrypt H512x: %s", hex(data)) | ||
return | ||
model_id = decrypted[2] |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@gh2o model_id
is a guess here. It seems to hold up as I bought multiple of the same device to confirm it, but it would be great if you had some insight here since I feel like I'm poking around in the dark with this one.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I only have the H5122 (single button), and the FW appears to hard-code decrypted[0/1/2/3]
so I'm not entirely sure what the meaning of these bytes are.
One possible hint though is that the FW code does different operations to assign to those bytes. To summarize, it does something like this:
decrypted[0] = ord('1') - 0x30
decrypted[1] = ord('5') - 0x30
decrypted[2] = 8
decrypted[3] = 2
If I had to venture a wild guess, the meaning of the numbers would be:
decrypted[0]
= version (major)decrypted[1]
= version (minor)decrypted[2]
= model IDdecrypted[3]
= number of data bytes following this byte
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Would it make sense to do
"GV5121" in local_name and model_id == 3
instead of or so that if this invariant breaks in the future, we can catch it?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The local name is empty when the scanner is passive
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I bought another motion sensor and 2 button remote. This pattern held true so I think we are ok here at least for now
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great, good to know.
A lot of this is a guess