python-host icon indicating copy to clipboard operation
python-host copied to clipboard

Can't send "Press" to Bot

Open tojannaon opened this issue 3 years ago • 10 comments

Current Situation

Although the same Bot can be controlled successfully via the app no response occurs when using sudo python switchbot.py. Note that the device is discovered and connects just fine. It's just that nothing happens on the Bot (no Press).

After many hours of trying various methods to send this command via BLE I have come to the conclusion that this recent firmware has changed the command structure as even this simple script will not work:

https://gist.github.com/mugifly/a29f34df7de8960d72245fcb124513c7

Logs

pi@raspberrypi:/python-host $ sudo python switchbot.py
Usage: "sudo python switchbot.py [mac dev_type cmd]" or "sudo python switchbot.py"
Scanning...
Scan timeout.
(' 0', [u'd9:31:3b:81:03:56', 'Bot', 'Press'])
Input the device number to control:0
[u'd9:31:3b:81:03:56', 'Bot', 'Press']
Preparing to connect.
Connection successful.
Complete

Configuration

Bot firmware version 6.3

Environment

  • OS: Raspbian
  • Software: Jessie
  • Node: v10.19.0
  • npm: 6.13.4

Additional Context

No response

tojannaon avatar Aug 09 '22 19:08 tojannaon

I seem to have this same issue. I've never been able to try an earlier firmware to confirm if that works, my switchbot turned up with 6.3 installed. Did you ever find a workaround for it @tojannaon ?

reestr avatar Jan 16 '23 12:01 reestr

@tojannaon @reestr

Can you guys can any commands to send including on/off?

I'm on bot version 5.0 and I just get invalid handle errors from gatt.

# gatttool -t random -b XX:XX:XX:XX:XX:XX --char-write-req -a 0x0016 -n 570101
Characteristic Write Request failed: Invalid handle

# gatttool -t random -b XX:XX:XX:XX:XX:XX --char-write-req -a 0x0016 -n 570102
Characteristic Write Request failed: Invalid handle

dcarrion87 avatar Jan 20 '23 13:01 dcarrion87

@reestr try this project instead: https://github.com/Danielhiversen/pySwitchbot

I was only able to get it working through that project.

E.g.:

from switchbot import Switchbot
from bleak import BleakScanner
import asyncio

async def main():
  ble_device = await BleakScanner.find_device_by_address("MAC ADDRESS", timeout=20)
  device = Switchbot(ble_device)
  await device.press()

if __name__ == "__main__":
  asyncio.run(main())

You can also set change mode with:

await device.set_switch_mode()
await device.set_long_press(7)

dcarrion87 avatar Jan 21 '23 00:01 dcarrion87

Hello,

i have the same issue as @tojannaon, however i the software @dcarrion87 provided gives me this error

Traceback (most recent call last): File "", line 1, in ModuleNotFoundError: No module named 'switchbot'

I have cloned the git through git clone however i cant seem to find a solution to both these problems.

I am using switchbot version 6.3 and a raspberry pi 3 on the raspbian OS

TForest-UwU avatar Feb 10 '23 07:02 TForest-UwU

@TForest-UwU have you:

pip install PySwitchbot

Also you'll need these pip packages too. But they should come down with that one ^

async_timeout>=4.0.1
bleak>=0.17.0
bleak-retry-connector>=2.9.0
cryptography>=38.0.3
boto3>=1.20.24
requests>=2.28.1

dcarrion87 avatar Feb 10 '23 10:02 dcarrion87

Yes i retried it and it seemed i also had a outdated pip installation, however the program fails to build cryptography with this error

note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for cryptography Failed to build cryptography ERROR: Could not build wheels for cryptography, which is required to install pyproject.toml-based projects

the rest of the packages seem to all have installed correctly

TForest-UwU avatar Feb 10 '23 12:02 TForest-UwU

Create a virtual environment first and work in there so you don't mess with your system wide pip packages.

python -m venv venv
. venv/bin/activate

Then do your pip things.

You might need to do some googling of that error to make sure you have build-essentials, upgrade pip version, downgrade setuptools if necessary etc... (I've not be doing this from raspbian).

Maybe apt-get install build-essentials and a pip3 install --upgrade pip might get you going.

dcarrion87 avatar Feb 10 '23 12:02 dcarrion87

@reestr Sorry for not chiming in earlier. I ended up having to bail as the Switchbot folks felt that the Bluetooth LE dongle that I was using (expensive and state-of-the-art) was somehow not compatible (even though it works for other applications). I didn't have another to try and wasn't about to purchase one in case there actually were other issues causing the problem.

tojannaon avatar Feb 13 '23 18:02 tojannaon

If anyone is still having issues check out https://github.com/TForest-UwU/Switchy

I found out that atleast for me this api does not send the command properly, but it does connect nicely. I then found another api that does the exact opposite, so i combined then into a working program

TForest-UwU avatar Feb 27 '23 10:02 TForest-UwU

@TForest-UwU - thank you for following up with this, despite reporting an error after each press of the switch, it works as expected! :-)

reestr avatar Feb 28 '23 21:02 reestr