Skip to content

Can't send "Press" to Bot #40

Open

Description

@tojannaon

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

Activity

  1. reestr commented on Jan 16, 2023

    @reestr

    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 ?

  2. dcarrion87 commented on Jan 20, 2023

    @dcarrion87

    @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
    
  3. dcarrion87 commented on Jan 21, 2023

    @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)
    
  4. TForest-UwU commented on Feb 10, 2023

    @TForest-UwU

    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

  5. dcarrion87 commented on Feb 10, 2023

    @dcarrion87

    @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
    
  6. TForest-UwU commented on Feb 10, 2023

    @TForest-UwU

    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

  7. dcarrion87 commented on Feb 10, 2023

    @dcarrion87

    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.

  8. tojannaon commented on Feb 13, 2023

    @tojannaon
    Author

    @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.

  9. TForest-UwU commented on Feb 27, 2023

    @TForest-UwU

    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

  10. reestr commented on Feb 28, 2023

    @reestr

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

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions