Bubba8291 / homebridge-sharkiq

A Homebridge plugin to connect your Shark Vacuum to homebridge.
Apache License 2.0
9 stars 1 forks source link

Add support for additional SharkIQ Robot #10

Closed CMD-SRC closed 1 year ago

CMD-SRC commented 1 year ago

Is your feature request related to a problem? Please describe: Add support for SharkIQ Robot Model: RV1001AE, the app does not currently work with it.

Describe the solution you'd like: I can run troubleshooting or diagnostics if you need, to help gain support for this model.

Describe alternatives you've considered: N/A

Additional context: N/A

Bubba8291 commented 1 year ago

I researched the vacuum a bit. It says it can be used with the app. What are it's limitations within the app for your model?

hillaker commented 1 year ago

I don't mean to put words in @CMD-SRC's mouth, but I suspect that by app, they meant HomeBridge. My two vacuums (models AV1102ARUS and US1100S1US) both work with SharkIQ in python (and show up in the SharkClean app), but do not show up in HomeBridge.

Bubba8291 commented 1 year ago

@hillaker @CMD-SRC Ah okay.

Are you using the European server? Someone else messaged me about this issue. The thing that stood out was that they were using the European SharkClean server.

hillaker commented 1 year ago

@Bubba8291 I’m not, I’m in the United States. It’s been a while since I’ve developed, but I’m not seeing anything error-wise in the logs (even with HomeBridge in debug mode). Is there a way to get the plug-in to output even more output? I can dig into my installation and see if there’s any other potential issues.

Bubba8291 commented 1 year ago

@hillaker In SharkIQ python, please run this and tell me what the format is of the value.

from sharkiq import get_ayla_api

USERNAME = 'me@email.com'
PASSWORD = '$7r0nkP@s$w0rD'

ayla_api = get_ayla_api(USERNAME, PASSWORD)
ayla_api.sign_in()

shark_vacs = ayla_api.get_devices()
shark = shark_vacs[0]
print(shark.properties_full['Device_Serial_Num'])

The result for mine is my device model number followed by 6 spaces then my device serial number. Example: UR250BEXUS 123456789AB

I am wondering if there is a different format displayed based on the model. But what I am probably going to do is change the required value to be the DSN instead since it appears to be consistent..

hillaker commented 1 year ago

@Bubba8291: My format looks much different than yours. Repeating letters (X, Y, Z, A) are stripped out values-- the rest of the message is ad-hoc. I have 2 robots, so I used the following code:

from sharkiq import get_ayla_api, OperatingModes, Properties, PowerModes
USERNAME = 'my@email.com'
PASSWORD = 'AVerySecureAndDefinitelyRealPassword'
ayla_api = get_ayla_api(USERNAME, PASSWORD)
ayla_api.sign_in()
shark_vacs = ayla_api.get_devices()
shark = shark_vacs[0]
print(shark.properties_full['Device_Serial_Num'])
shark = shark_vacs[1]
print(shark.properties_full['Device_Serial_Num'])`

And received back:

{'type': 'Property', 'name': 'GET_Device_Serial_Num', 'base_type': 'string', 'read_only': True, 'direction': 'output', 'scope': 'user', 'data_updated_at': '2023-10-28T00:39:13Z', 'key': YYYYYYYYY, 'device_key': XXXXXXXXX, 'product_name': 'Winston', 'track_only_changes': True, 'display_name': 'Device Serial Number', 'host_sw_version': False, 'time_series': False, 'derived': False, 'app_type': None, 'recipe': None, 'value': '', 'generated_from': 'AYLA::device', 'generated_at': None, 'denied_roles': [], 'ack_enabled': False, 'retention_days': 30, 'ack_status': None, 'ack_message': None, 'acked_at': None}

{'type': 'Property', 'name': 'GET_Device_Serial_Num', 'base_type': 'string', 'read_only': True, 'direction': 'output', 'scope': 'user', 'data_updated_at': '2023-10-27T14:06:17Z', 'key': ZZZZZZZZ, 'device_key': AAAAAAAAAA, 'product_name': 'Tom', 'track_only_changes': True, 'display_name': 'Device Serial Number', 'host_sw_version': False, 'time_series': False, 'derived': False, 'app_type': None, 'recipe': None, 'value': '', 'generated_from': 'AYLA::device', 'generated_at': None, 'denied_roles': [], 'ack_enabled': False, 'retention_days': 30, 'ack_status': None, 'ack_message': None, 'acked_at': None}

I did notice that if I instead:

print(shark.vac_model_number)

I get some mixed output:

AV1102ARUS
None

And vac_serial_number behaves similarly:

print(shark.vac_serial_number)

outputs:

K15QTXXXXXXX <partially redacted>
None

Happy to try other commands that would be helpful. thank you for looking into this!

Edited to add that a my SharkClean app doesn't know the device serial numbers without scanning, and doesn't appear to sync between phones.

Bubba8291 commented 1 year ago

@CMD-SRC @hillaker

Pushed out an update. v1.1.2 uses the vacuum's device serial numbers (DSN) instead of the vacuum serial number.

This should work for everyone since the way DSNs are received from the API is consistent. It also saves us the trouble on figuring out why the GET_Device_Serial_Num property is different for everyone.

Let me know if the problem is still persisting.

hillaker commented 1 year ago

@Bubba8291 this fixed it for me! both my robots now show up, and I was able to confirm my ability to control one of them through HomeBridge. Thank you!

Bubba8291 commented 1 year ago

Glad to hear that it works! Closing issue.

Bubba8291 commented 1 year ago

@CMD-SRC Sorry I closed the issue without hearing from you. Please let me know if you are still having issues and we can repoen it :)