Open alexanderloy opened 3 years ago
if you want to use password you can make some minor code change to the python code
Example password = 'testpassword'
Steps 1) get the CRC32 4 byte hexadecimal value for your password ( you can use an online tool like this https://crc32.online/) 2) testpassword = 9dcb7360 3) Modify this part of the code ....
if act == 'Turn On':
con.sendline('char-write-cmd ' + cmd_handle + ' 570101')
elif act == 'Turn Off':
con.sendline('char-write-cmd ' + cmd_handle + ' 570102')
elif act == 'Press':
con.sendline('char-write-cmd ' + cmd_handle + ' 570100')
to this...
if act == 'Turn On':
con.sendline('char-write-cmd ' + cmd_handle + ' 5711' + '9dcb7360' +'01')
elif act == 'Turn Off':
con.sendline('char-write-cmd ' + cmd_handle + ' 5711' + '9dcb7360' +'02')
elif act == 'Press':
con.sendline('char-write-cmd ' + cmd_handle + ' 5711' + '9dcb7360')
static byte bArrayPressPass[] = {0x57, 0x11, NULL, NULL, NULL, NULL};
static byte bArrayOnPass[] = {0x57, 0x11, NULL , NULL, NULL, NULL, 0x01};
static byte bArrayOffPass[] = {0x57, 0x11, NULL, NULL, NULL, NULL, 0x02};
static byte bArrayGetSettingsPass[] = {0x57, 0x12, NULL, NULL, NULL, NULL};
static byte bArrayHoldSecsPass[] = {0x57, 0x1F, NULL, NULL, NULL, NULL, 0x08, NULL };
//static byte bArrayBotModePass[] = {0x57, 0x13, 0x64, NULL, NULL, NULL, NULL, NULL}; // Other github documentation shows this to be the array for setting mode with password (firmware 4.5, 4.6)
static byte bArrayBotModePass[] = {0x57, 0x13, NULL, NULL, NULL, NULL, 0x64, NULL}; // The proper array to use for setting mode with password (firmware 4.9)
These implementations from SwitchBot-MQTT-BLE-ESP32 suggests that second bit should be 0x11 not 0x01 when controlling bots with password. I only tested press signal, but other implementation seems plausible.
Thus, the correct code should be the following:(I haven't tested the python implementation yet. Tell me if this is wrong)
if act == 'Turn On':
con.sendline('char-write-cmd ' + cmd_handle + ' 5711' + '9dcb7360' +'01')
elif act == 'Turn Off':
con.sendline('char-write-cmd ' + cmd_handle + ' 5711' + '9dcb7360' +'02')
elif act == 'Press':
con.sendline('char-write-cmd ' + cmd_handle + ' 5711' + '9dcb7360')
static byte bArrayPressPass[] = {0x57, 0x11, NULL, NULL, NULL, NULL}; static byte bArrayOnPass[] = {0x57, 0x11, NULL , NULL, NULL, NULL, 0x01}; static byte bArrayOffPass[] = {0x57, 0x11, NULL, NULL, NULL, NULL, 0x02}; static byte bArrayGetSettingsPass[] = {0x57, 0x12, NULL, NULL, NULL, NULL}; static byte bArrayHoldSecsPass[] = {0x57, 0x1F, NULL, NULL, NULL, NULL, 0x08, NULL }; //static byte bArrayBotModePass[] = {0x57, 0x13, 0x64, NULL, NULL, NULL, NULL, NULL}; // Other github documentation shows this to be the array for setting mode with password (firmware 4.5, 4.6) static byte bArrayBotModePass[] = {0x57, 0x13, NULL, NULL, NULL, NULL, 0x64, NULL}; // The proper array to use for setting mode with password (firmware 4.9)
These implementations from SwitchBot-MQTT-BLE-ESP32 suggests that second bit should be 0x11 not 0x01 when controlling bots with password. I only tested press signal, but other implementation seems plausible.
Thus, the correct code should be the following:(I haven't tested the python implementation yet. Tell me if this is wrong)
if act == 'Turn On': con.sendline('char-write-cmd ' + cmd_handle + ' 5711' + '9dcb7360' +'01') elif act == 'Turn Off': con.sendline('char-write-cmd ' + cmd_handle + ' 5711' + '9dcb7360' +'02') elif act == 'Press': con.sendline('char-write-cmd ' + cmd_handle + ' 5711' + '9dcb7360')
yep, my bad. should be 11 not 01
That small change also assumes you use the same password for all bots
@spinachpasta @devWaves If you would like to submit a PR, you can.
@donavanbecker I'm not using this implementation since I use my ESP32 code, I just happen to be browsing and mentioned a quick fix
The sample I provided would overwrite the default no-password option and isn't setup for dynamics password so it would take a bit more work for a full PR
Switchbot allows you to set a Password, could you add this so a password can be used?