Python module for controlling Broadlink RM2/3 (Pro) remote controls, A1 sensor platforms and SP2/3 smartplugs

Overview

Python control for Broadlink devices

A simple Python API for controlling Broadlink devices. At present, the following devices are supported:

  • Universal remotes: RM home, RM mini 3, RM plus, RM pro, RM pro+, RM4 mini, RM4 pro, RM4C mini, RM4S
  • Smart plugs: SP mini, SP mini 3, SP mini+, SP1, SP2, SP2-BR, SP2-CL, SP2-IN, SP2-UK, SP3, SP3-EU, SP3S-EU, SP3S-US, SP4L-AU, SP4L-EU, SP4L-UK, SP4M, SP4M-US
  • Power strips: MP1-1K3S2U, MP1-1K4S, MP2
  • Wi-Fi controlled switches: MCB1, SC1, SCB1E
  • Environment sensors: A1
  • Alarm kits: S2KIT
  • Light bulbs: LB1, SB800TD

Other devices with Broadlink DNA:

  • Smart plugs: Ankuoo NEO, Ankuoo NEO PRO, BG AHC/U-01, Efergy Ego
  • Outlets: BG 800, BG 900
  • Curtain motors: Dooya DT360E-45/20
  • Thermostats: Hysen HY02B05H

There is currently no support for the cloud API.

Example use

Setup a new device on your local wireless network:

  1. Put the device into AP Mode
  2. Long press the reset button until the blue LED is blinking quickly.
  3. Long press again until blue LED is blinking slowly.
  4. Manually connect to the WiFi SSID named BroadlinkProv.
  5. Run setup() and provide your ssid, network password (if secured), and set the security mode
  6. Security mode options are (0 = none, 1 = WEP, 2 = WPA1, 3 = WPA2, 4 = WPA1/2)
import broadlink

broadlink.setup('myssid', 'mynetworkpass', 3)

Discover available devices on the local network:

import broadlink

devices = broadlink.discover(timeout=5)

You may need to specify local_ip_address or discover_ip_address if discovery does not return any devices.

Using your machine's IP address with local_ip_address

import broadlink

devices = broadlink.discover(timeout=5, local_ip_address='192.168.0.100')

Using your subnet's broadcast address with discover_ip_address

import broadlink

devices = broadlink.discover(timeout=5, discover_ip_address='192.168.0.255')

Obtain the authentication key required for further communication:

devices[0].auth()

Enter learning mode:

devices[0].enter_learning()

Sweep RF frequencies:

devices[0].sweep_frequency()

Cancel sweep RF frequencies:

devices[0].cancel_sweep_frequency()

Check whether a frequency has been found:

found = devices[0].check_frequency()

(This will return True if the RM has locked onto a frequency, False otherwise)

Attempt to learn an RF packet:

found = devices[0].find_rf_packet()

(This will return True if a packet has been found, False otherwise)

Obtain an IR or RF packet while in learning mode:

ir_packet = devices[0].check_data()

(This will return None if the device does not have a packet to return)

Send an IR or RF packet:

devices[0].send_data(ir_packet)

Obtain temperature data from an RM2:

devices[0].check_temperature()

Obtain sensor data from an A1:

data = devices[0].check_sensors()

Set power state on a SmartPlug SP2/SP3/SP4:

devices[0].set_power(True)

Check power state on a SmartPlug:

state = devices[0].check_power()

Check energy consumption on a SmartPlug:

state = devices[0].get_energy()

Set power state for S1 on a SmartPowerStrip MP1:

devices[0].set_power(1, True)

Check power state on a SmartPowerStrip:

state = devices[0].check_power()

Get state on a bulb

state=devices[0].get_state()

Set a state on a bulb

devices[0].set_state(pwr=0)
devices[0].set_state(pwr=1)
devices[0].set_state(brightness=75)
devices[0].set_state(bulb_colormode=0)
devices[0].set_state(blue=255)
devices[0].set_state(red=0)
devices[0].set_state(green=128)
devices[0].set_state(bulb_colormode=1)
Comments
  • Broadlink RM4 PRO is not able to learn or to send RF Signal

    Broadlink RM4 PRO is not able to learn or to send RF Signal

    Unsure if this is the right place to raise this issue, however, I cam across https://github.com/mjg59/python-broadlink/issues/355 which relates to a similar issue except with IR. Currently, I am trying to get my RM4 Pro to work with the HA and having issues bring able to learn RF (IR learns and sends no problem at all) with both python-broadlink and Home assistant. (I also have an issue with it as a sensor (temperature and humidity) - although not that concerned/interested in this side at the moment)

    Current Setup Home Assistant 0.109.3 Broadlink RM4 Pro Added to network using python-broadlink - PASS when I attempt devices[0].host[0] > ‘192.168.1.172’ - PASS devices[0].get_type() > ‘Unknown’ - Cant get the type (so this may be a concern or compatibility issue) devices[0].enter_learning() > AttributeError: device instance has no attribute ‘enter_learning’ _FAIL

    Under Home assistant Added to HA as switch - configuration.yaml switch: platform: broadlink host: 192.168.1.172 mac: 24:df:a7:b9:c0:5a type: rm4_pro timeout: 15 retry: 5 switches: tv_samsung_power: friendly_name: "Samsung TV Power" command_on: IRSTRING command_off: IRSTRING When I run broadlink.learn

    • Red LED comes on
    • I can capture IR without an issue as I did with the Samsung TV Power
    • UNABLE TO CAPTURE ANY RF

    As far as the sensor is concerned sensor: platform: broadlink host: 192.168.1.172 mac: 24:df:a7:b9:c0:5a type: rm4_pro monitored_conditions: temperature humidity Both Temperature and Humidity just show a value of 0

    Do you know if anyone has been successful with the RM4 Pro and RF?

    Another point is that I cant get the RM4 Pro to work with e-control (or broadlink manager) so have not been able to get any RF packets to test it broadlink.send command to see if that works.

    opened by Virtual-Nomad 123
  • "Broadlink RM4c mini" support

    Hello

    I bought "Broadlink RM4c mini" but it doesn't work with python-broadlink

    It see it but don't connect.

    on broadlink_discovery: Discovering... Error authenticating with device : ('192.168.1.6', 80) on broadlink_cli: Traceback (most recent call last): File "./broadlink_cli", line 95, in <module> mac = bytearray.fromhex(values[2]) ValueError: non-hexadecimal number found in fromhex() arg at position 2

    Best regards ArchGalileu

    opened by ArchGalileu 118
  • Add support for S3 Hub and LC-1 (1,2&3 gang) light switches

    Add support for S3 Hub and LC-1 (1,2&3 gang) light switches

    Context

    Added new device

    Proposed change

    Type of change

    • [ ] Dependency upgrade
    • [ ] Bugfix (non-breaking change which fixes an issue)
    • [X] New device
    • [ ] New product id (the device is already supported with a different id)
    • [ ] New feature (which adds functionality to an existing device)
    • [ ] Breaking change (fix/feature causing existing functionality to break)
    • [ ] Code quality improvements to existing code or addition of tests
    • [ ] Documentation

    Additional information

    Here is the implementation hub.py - the sub device ids (did) can be found in the app listed as MAC addresses

    >>> import broadlink
    >>> device = broadlink.hello('192.168.1.99')
    >>> device.auth()
    True
    >>> device.get_state("00000000000000000000a043b0d0783a")
    {'pwr1': 0, 'pwr2': 0, 'plugmode': 0, 'hb_timeout': 180, 'lb_online1': 1}
    >>> device.set_state("00000000000000000000a043b0d0783a",1)
    {'pwr1': 1, 'pwr2': 0, 'plugmode': 0, 'hb_timeout': 180, 'lb_online1': 1}
    >>> device.set_state("00000000000000000000a043b0d0783a",0,1)
    {'pwr1': 0, 'pwr2': 1, 'plugmode': 0, 'hb_timeout': 180, 'lb_online1': 1}
    >>> device.set_state("00000000000000000000a043b0d0783a",None,1)
    {'pwr1': 0, 'pwr2': 1, 'plugmode': 0, 'hb_timeout': 180, 'lb_online1': 1}
    >>> device.get_subdevices()
    [{'did': '00000000000000000000a043b0d06f11', 'pid': '0000000000000000000000001f650000', 'name': 'simpfc_cli', 'offline': 0}, {'did': '00000000000000000000a043b0d0783a', 'pid': '0000000000000000000000001f650000', 'name': 'simpfc_cli', 'offline': 0}, {'did': '00000000000000000000a043b0d06afa', 'pid': '00000000000000000000000020650000', 'name': 'simpfc_cli', 'offline': 0}, {'did': '00000000000000000000a043b0d06963', 'pid': '00000000000000000000000020650000', 'name': 'simpfc_cli', 'offline': 1}, {'did': '00000000000000000000a043b0d0711f', 'pid': '0000000000000000000000001f650000', 'name': 'simpfc_cli', 'offline': 0}, {'did': '00000000000000000000a043b0d06d2a', 'pid': '0000000000000000000000001f650000', 'name': 'simpfc_cli', 'offline': 0}, {'did': '00000000000000000000a043b0d06ed8', 'pid': '0000000000000000000000001f650000', 'name': 'simpfc_cli', 'offline': 0}, {'did': '00000000000000000000a043b0d063df', 'pid': '00000000000000000000000020650000', 'name': 'simpfc_cli', 'offline': 1}]
    
    • This PR fixes issue: fixes #647
    • This PR is related to:
    • Link to documentation pull request:

    Checklist

    • [X] The code change is tested and works locally.
    • [ ] The code has been formatted using Black.
    • [ ] The code follows the Zen of Python.
    • [ ] I am creating the Pull Request against the correct branch.
    • [X] Documentation added/updated.
    feature 
    opened by stevendodd 73
  • Add Support for Broadlink RM4 pro (0x653C)

    Add Support for Broadlink RM4 pro (0x653C)

    Seems like it's not supported for Broadlink RM4 pro (0x653C)

    Originally posted by @lukeclx in https://github.com/mjg59/python-broadlink/issues/472#issuecomment-731774318

    Home Assistant 0.118.3

    opened by lukeclx 49
  • StorageError: The device storage is full while learning and workaround

    StorageError: The device storage is full while learning and workaround

    I recently got a new Broadlink RM mini 3 from Amazon US, the device type is 0x5F36. With python-broadlink, I am able to "learn" a few IR code, it is working fine. After a few codes learned, the device starts to complain "The device storage is full" error. This problem cannot be resolved by resetting the device, and I am pretty desperate at this point.

    On deciding whether I will need to return the device, I realize that: after using enter_learning() function, the device has white indicator on, which means it indeed reads the IR code, but the error only comes when I try to use check_data() function. Further tests indicate that as long as I commented out the check_error() statement, the check_data function can actually correctly reporting IR code.

    So I assume the "learning" functionality is actually writing IR codes into the device's memory, which, from what I see, is very much limited. Since there is no "erase" option given, I assume a lot of users are going to encounter the same problem. And, since most users of python-broadlink only need to read out the IR code instead of really using the learning function, I think it would be great if an option for temporarily disabling the error check for full device storage could be given.

    opened by chazeon 41
  • Add support for Broadlink RM4C mini (0x6539)

    Add support for Broadlink RM4C mini (0x6539)

    Add support for Broadlink RM4C mini (0x6539) https://github.com/mjg59/python-broadlink/pull/411#issuecomment-728289482 https://github.com/home-assistant/core/issues/42983#issuecomment-729802091

    opened by felipediel 40
  • Additional device support

    Additional device support

    Hi all,

    thanks for your work so far on this.

    I want to use it with a Broadlink based heating controller ("Hysen HY02B05H", photo here: http://peter.windridge.org.uk/playing-with-cheap-iot-devices/20171120_163450.jpg ).

    I can .discover() and .auth() the device. The devtype is: 0x4ead.

    (1) Has anyone started working on this device? (2) If not, I need to capture packets from the Android app (which calls a libBLNetwork.so binary). I tried wireshark on Ubuntu but setting promiscuous mode on my laptop doesn't seem to work. I had considered install the Android SDK emulator to run the app on my PC but this seems like a lot of faff. Is there any easier way? (Sorry this question is not directly related to python-broadlink so I don't mind being told to take it elsewhere :))

    My goals are:

    • read room temperature
    • put control in manual mode
    • change temperature

    I have not tried sending the device codes from check_temperature() etc for fear of bricking it...

    Peter

    opened by ptd006 38
  • Do we need to choose between using this library or the official app exclusively?

    Do we need to choose between using this library or the official app exclusively?

    Here my steps that made me think about the question in title of the issue...

    1. I had my devices added to the official app.
    2. I tried to use broadlink_discovery and it was failing the authentication process.
    3. I followed some steps that I found somewhere in old closed issues to remove the devices from the app and reset them.
    4. I ran debug.py and both devices autheticated successfully.
    5. I re-added the devices to the official app and the library stopped working.

    My devices are 0x6026 and 0x62be.

    So my question is: Do we need to choose between using this library or the official app exclusively?

    opened by w35l3y 36
  • Add support for 0x5f36 devices and RM4 series

    Add support for 0x5f36 devices and RM4 series

    These devices require a special header in the payload. The rest is the same.

    Related issues:

    RM 3 Mini (0x5f36) https://github.com/mjg59/python-broadlink/issues/307 https://github.com/mjg59/python-broadlink/issues/308 https://github.com/home-assistant/core/issues/30215 https://github.com/home-assistant/core/issues/23566 https://github.com/lprhodes/homebridge-broadlink-rm/issues/551

    RM4 series https://github.com/mjg59/python-broadlink/issues/301 https://github.com/mjg59/python-broadlink/issues/312

    opened by felipediel 36
  • Update packet count in the authentication step

    Update packet count in the authentication step

    Context

    The counter comes in bytes 0x28 and 0x29 and is used to identify the packet. If the device receives a packet with the same counter, the command is not executed twice. This can be reproduced with the following code:

    d = blk.hello("192.168.0.12")  # Example device
    d.auth()
    d.send_data(b64decode("sv8kAAUGEwYGDAsGBgYGBgUMCwsLBgUGBgYGBgYGBgsLCwYGCwYGDAAAAAA=="))
    
    # Same counter, this command won't be executed.
    d.count -= 1
    d.send_data(b64decode("sv8kAAUGEwYGDAsGBgYGBgUMCwsLBgUGBgYGBgYGBgsLCwYGCwYGDAAAAAA=="))
    

    This is the expected behavior. We are already using this. When the timeout is reached, we send the packet again with the same counter without worrying about commands being executed twice.

    The problem

    When we re-instantiate the controller or restart the application, the counter is lost. So if we try something like this:

    d = blk.hello("192.168.0.12")  # Example device
    d.auth()
    d.send_data(b64decode("sv8kAAUGEwYGDAsGBgYGBgUMCwsLBgUGBgYGBgYGBgsLCwYGCwYGDAAAAAA=="))
    
    # Same device, but we've lost the counter
    d = blk.hello("192.168.0.12")
    d.auth()
    d.send_data(b64decode("sv8kAAUGEwYGDAsGBgYGBgUMCwsLBgUGBgYGBgYGBgsLCwYGCwYGDAAAAAA=="))
    

    The device gets crazy because the counter is wrong and it stops eliminating duplicate packets. So if we send the same packet twice, even with the same counter, the device executes two different commands.

    The code we are sending is an easy way to reproduce the issue. It is a blocking RF code with 255 repetitions. The timeout is reached 3 times, 3 packets are sent and 3 different commands are executed. This wouldn't happen if the counter was persistent, so...

    The solution

    I propose to update the counter when we authenticate to the device, so this information will always be up to date, even if we restart the application.

    Fixes https://github.com/home-assistant/core/issues/41957 Fixes https://github.com/home-assistant/core/issues/37000

    opened by felipediel 35
  • Create SP3S class and improve energy monitoring

    Create SP3S class and improve energy monitoring

    Breaking change

    Create a new SP3S class for these devices. Applications need to use the correct class to support get_energy().

    The problem

    Some SP2 devices (PID starting with 0x27) support get_energy(), but the firmware is different from SP3S, so we need to create another method.

    From: https://github.com/mjg59/python-broadlink/issues/413#issue-693577696 https://github.com/mjg59/python-broadlink/issues/200#issuecomment-409548956

    Proposed changes

    • Create a new class for SP3S with the current get_energy() method (only works for SP3S).
    • Create a new get_energy() method for the SP2 class.

    Need help with tests

    These smart plugs don't support energy monitoring. They respond to sp3s.get_energy() with CommandNotSupportedError and StorageError. This is the behavior we had in the past, so we were catching the exceptions eg here.

    It would be interesting to see how they respond to this new sp2.get_energy() method before the code is merged. So, if anyone has the smart plugs on the list, please help to test this method.

    On your PC:

    # Create a venv (not mandatory, but recommended)
    python3 -m venv venv
    source venv/bin/activate
    
    # Install this branch
    pip3 install git+https://github.com/felipediel/python-broadlink.git@sp3s --force-reinstall
    
    ## Run Python 3
    python3
    

    Now let's see how the device respond to get_energy():

    >>> import broadlink as blk
    >>> d = blk.hello("192.168.0.16")  # Example device
    >>> d.auth()
    >>> d.get_energy()
    

    Thanks in advance!

    opened by felipediel 30
  • How to discover devices in network with different IP

    How to discover devices in network with different IP

    Hi,

    How to detect devices on another network? For example: I am in a network 192.168.1.0/24 and I have a broadlink device on 192.168.1.20 and over this network I have another network with 10.0.0.1/24 where there is a broadlink with address 10.0.0.10.

    What should the function broadlink.discover look like to find both broadlink devices when I am on the network 192.168.1.0 I will add that I can see all devices from 192.168.1.0 as well as from 10.0.0.1

    opened by kalwinskidawid 0
  • Readings for switch SCB1E not divided by 1000

    Readings for switch SCB1E not divided by 1000

    Hi!

    I just installed a SCB1E to power and monitor a small AC unit with HomeAssistant, after powering on (the SCB1E ) i found that the values returned are incorrect (not divided by 1000).

    Wrote a simple script to test the switch directly with python-broadlink and the error is also present:

    import broadlink

    switch = broadlink.switch.sp4(('...', 80), mac=b'...', devtype=42347, timeout=10, name='SCB1E', model='SCB1E', manufacturer='Broadlink', is_locked=False) switch.auth() print(switch.get_state())

    For example the reading when the AC unit is off is:

    {'pwr': 1, 'indicator': 0, 'maxworktime': 0, 'current': 35, 'volt': 223900, 'power': 750, 'totalconsum': 0, 'overload': 0, 'childlock': 0}

    and when it is on:

    {'pwr': 1, 'indicator': 0, 'maxworktime': 0, 'current': 3879, 'volt': 218600, 'power': 833360, 'totalconsum': 30, 'overload': 0, 'childlock': 0}

    The device is being identified as a SP4 by the discover method:

    broadlink.switch.sp4(('...', 80), mac=b'...', devtype=42347, timeout=10, name='SCB1E', model='SCB1E', manufacturer='Broadlink', is_locked=False)

    Trying to use the SP4B class returns the following exception:

    broadlink.exceptions.StorageError: [Errno -5] The device storage is full

    opened by Gongui 0
  • mjg59

    mjg59

    Context

    Proposed change

    Type of change

    • [ ] Dependency upgrade
    • [ ] Bugfix (non-breaking change which fixes an issue)
    • [ ] New device
    • [ ] New product id (the device is already supported with a different id)
    • [ ] New feature (which adds functionality to an existing device)
    • [ ] Breaking change (fix/feature causing existing functionality to break)
    • [ ] Code quality improvements to existing code or addition of tests
    • [ ] Documentation

    Additional information

    • This PR fixes issue: fixes #
    • This PR is related to:
    • Link to documentation pull request:

    Checklist

    • [x] The code change is tested and works locally.
    • [x] The code has been formatted using Black.
    • [x] The code follows the Zen of Python.
    • [x] I am creating the Pull Request against the correct branch.
    • [x] Documentation added/updated.

    Context

    Proposed change

    Type of change

    • [x] Dependency upgrade
    • [ ] Bugfix (non-breaking change which fixes an issue)
    • [x] New device
    • [x] New product id (the device is already supported with a different id)
    • [x] New feature (which adds functionality to an existing device)
    • [ ] Breaking change (fix/feature causing existing functionality to break)
    • [x] Code quality improvements to existing code or addition of tests
    • [ ] Documentation

    Additional information

    • This PR fixes issue: fixes #
    • This PR is related to:
    • Link to documentation pull request:

    Checklist

    • [x] The code change is tested and works locally.
    • [ ] The code has been formatted using Black.
    • [ ] The code follows the Zen of Python.
    • [ ] I am creating the Pull Request against the correct branch.
    • [x] Documentation added/updated.
    opened by PapooHA 0
  • Added support for Luceco Smart! Downlights

    Added support for Luceco Smart! Downlights

    Thank you for creating this project, its been a great help in getting my smart home fully operational.

    This PR adds support for the Luceco Smart Home Downloads.

    They need to be configured as a broadlink device in fast flashing AP mode but this change makes them controllable.

    opened by Crashandburnds 0
  • New BroadLink device -

    New BroadLink device -

    I have purchased one of these lights https://www.bg-home.uk/castra-floodlight which I believe uses a Broadlink chip..

    I have tried using the cli from this repository and it finds the other Broadlink devices on my networks but seems to fail when finding the new device (see image)

    cli_error

    I did log the same issue before I tried using the CLI. This gives a bit more details about the chip type.

    https://github.com/mjg59/python-broadlink/issues/725

    The mac address of the new device also points to being a Broadlink chip as it starts ec:0b:ae:

    Is it possible to get support added? I can try and provide as much technical as I can about the device.

    Thanks

    Rob

    opened by robertdavies 0
Releases(0.18.3)
  • 0.18.3(Nov 20, 2022)

    Changelog

    • Add support for RM4C mini (0x520D) #694
    • Add support for SP4L-US (0x648C) #707
    • Add support for RM4C mate (0x5211) #709
    • Add support for RM4 mini (0x521C) #710
    • Add support for LB1 (0x644B) #717
    • Fix Github actions #727
    Source code(tar.gz)
    Source code(zip)
  • 0.18.2(May 23, 2022)

    Changelog

    • Add support for Broadlink RM4 mini (0x5216) #671
    • Add support for Broadlink RM4 pro (0x520B) #673
    • Add support for SP4L-UK 0xA569 #677
    • Fixing typo in rm4pro device definitions #682
    • Add support for Bestcon RM4C pro (0x5218) #683
    • Add support for Broadlink RM4 TV mate (0x5212) #684
    • Add support for Broadlink RM4 mini (0x520C) #685
    Source code(tar.gz)
    Source code(zip)
  • 0.18.1(Mar 19, 2022)

  • 0.18.0(Oct 17, 2021)

    Breaking changes

    • Rename broadlink.device.device to broadlink.device.Device.
    • Change crc16() to CRC16.calculate()
    • Change hysen.TYPE from "Hysen heating controller" to "HYS".
    • Change hysen.model from "HY02B05H" to "HY02/HY03".
    • Remove local_ip_address option from broadlink.hello()
    • Refactor SUPPORTED_TYPES.

    Before

    SUPPORTED_TYPES = {
        0x0000: (sp1, "SP1", "Broadlink"),
        0x2717: (sp2, "NEO", "Ankuoo"),
        0x2719: (sp2, "SP2-compatible", "Honeywell"),
        0x271A: (sp2, "SP2-compatible", "Honeywell"),
        ...
    }
    

    After

    SUPPORTED_TYPES = {
        sp1: {
            0x0000: ("SP1", "Broadlink"),
        },
        sp2: {
            0x2717: ("NEO", "Ankuoo"),
            0x2719: ("SP2-compatible", "Honeywell"),
            0x271A: ("SP2-compatible", "Honeywell"),
            ...
        }
        ...
    }
    

    Changelog:

    • Change the type and model of the hysen class (#627)
    • Add pull request template (#626)
    • Improve README.md (#625)
    • Fix indentation of README.md (#624)
    • Add support for Broadlink SCB1E (0xA56B) (#623)
    • Fix flake8 tests (#622)
    • Add support for Clas Ohlson SL-2 E14 (0x6065) (#600)
    • Add support for Broadlink RM mini 3 (0x27DC) (#594)
    • Add support for Broadlink SP4L-EU (0xA56C) (#593)
    • Refactor SUPPORTED_TYPES (#592)
    • Remove local_ip_address option from hello() (#591)
    • Add support for Broadlink SP4L-AU (0x757B) (#590)
    • Add support for Broadlink RM mini 3 (0x6507) (#589)
    • Rename the lb27r1 class to lb2 (#586)
    • Improve code quality (#585)
    • Move constants to const.py (#584)
    • Add support for Broadlink SP4L-EU (0xA5D3) (#582)
    • Add support for Broadlink SP4L-CN (0x7568) (#577)
    • Use the absolute position to read the lock status (#575)
    • Improve code quality (#572)
    • Use CamelCase for the Device class (#570)
    • Raise exceptions explicitly (#569)
    • Add support for Broadlink RM4C pro (0x6184) (#568)
    • Segregate CRC16.get_table() from CRC16.calculate() (#567)
    • Encapsulate crc16() to avoid global (#566)
    • Improve CRC-16 function (#565)
    • Make better use of namespaces (#564)
    • Add support for Broadlink LB27 R1 (0xA4F4) (#557)
    • Add support for Broadlink SP4L-UK (0x7587) (#561)
    • Add support for Broadlink SCB2 (0x6494) (#558)
    • Improve the CLI (#555)
    • Add a TROUBLESHOOTING doc with WiFi password notes (#563)
    Source code(tar.gz)
    Source code(zip)
  • 0.17.0(Mar 12, 2021)

Owner
Matthew Garrett
Matthew Garrett
A PYTHON Library for Controlling Motors using SOLO Motor Controllers with RASPBERRY PI, Linux, windows, and more!

A PYTHON Library for Controlling Motors using SOLO Motor Controllers with RASPBERRY PI, Linux, windows, and more!

SOLO Motor Controllers 3 Apr 29, 2022
A rubiks cube timer using a distance sensor and a raspberry pi 4, and possibly the pi pico to reduce size and cost.

distance sensor cube timer A rubiks cube timer using a distance sensor and a raspberry pi 4, and possibly the pi pico to reduce size and cost. How to

null 3 Feb 21, 2022
A Python class for controlling the Pimoroni RGB Keypad for Raspberry Pi Pico

rgbkeypad A Python class for controlling the Pimoroni RGB Keypad for the Raspberry Pi Pico. Compatible with MicroPython and CircuitPython. keypad = RG

Martin O'Hanlon 43 Nov 11, 2022
A script and GUI for controlling stepper motors from an arduino

A script and GUI for controlling stepper motors from an arduino (nema 23 in my case but should work for others in general)

Pip 2 Aug 1, 2022
An embedded application for toy-car controlling based on Raspberry Pi 3 Model B and AlphaBot2-Pi.

An embedded application for toy-car controlling based on Raspberry Pi 3 Model B and AlphaBot2-Pi. This is the source codes of my programming assignmen

StardustDL 4 Oct 19, 2022
This Home Assistant custom component adds support for controlling Midea dehumidiferes on local network.

This is a custom component for Home assistant that adds support for Midea dehumidifier appliances via the local area network. midea-dehumidifier-lan H

Nenad Bogojevic 97 Jan 8, 2023
Controlling fireworks with micropython

Controlling-fireworks-with-micropython How the code works line 1-4 from machine

Montso Mokake 1 Jan 8, 2022
Sensor of Temperature Feels Like for Home Assistant.

Please ⭐ this repo if you find it useful Sensor of Temperature Feels Like for Home Assistant Installation Install from HACS (recommended) Have HACS in

Andrey 60 Dec 25, 2022
A Raspberry Pi Pico plant sensor hub coded in Micropython

plantsensor A Raspberry Pi Pico plant sensor hub coded in Micropython I used: 1x Raspberry Pi Pico - microcontroller 1x Waveshare Pico OLED 1.3 - scre

null 78 Sep 20, 2022
Lenovo Legion 5 Pro 2021 Linux RGB Keyboard Light Controller

Lenovo Legion 5 Pro 2021 Linux RGB Keyboard Light Controller This util allows to drive RGB keyboard light on Lenovo Legion 5 Pro 2021 Laptop Requireme

null 36 Dec 16, 2022
It is a serial communicator(controller, receiver...), communicate with sensor LP20 which is a laser ranger.

Intro It is a serial communicator(controller, receiver...), communicate with sensor LP20 which is a laser ranger. Its datasheet is contained in this r

null 3 Sep 19, 2022
A Home Assistant sensor that tells you what holiday is next

Next Holiday Sensor This sensor tells you what holiday is coming up next. You can use it to set holiday light colors or other scenes. The state of the

Nick Touran 20 Dec 4, 2022
BMP180 sensor driver for Home Assistant used in Raspberry Pi

BMP180 sensor driver for Home Assistant used in Raspberry Pi Custom component BMP180 sensor for Home Assistant. Copy the content of this directory to

747Developments 1 Dec 17, 2021
A simple small scale electric car was build which can be driven by remote control and features a fully autonomous parking procedure.

personal-autonomous-parking-car-raspberry A simple electric car model was build using Raspbery pi. The car has remote control and autonomous operation

Kostas Ziovas 2 Jan 26, 2022
Smart Tech Automation Remote via Kinematics Gesture control for IoT devices

STARK Smart Tech Automation Remote via Kinematics Gesture control for IoT devices View Demo · Report Bug · Request Feature Table of Contents About The

Juseong (Joe) Kim 1 Jan 29, 2022
A module for cross-platform control of the mouse and keyboard in python that is simple to install and use.

PyUserInput PyUserInput is a group project so we've moved the project over to a group organization: https://github.com/PyUserInput/PyUserInput . That

Paul Barton 1k Dec 27, 2022
I made this so I can control my Tapo L510 light bulb and Govee H6159 light strip using the PyP100 module and the Govee public API

TAPO-And-Govee-Controller I made this so I can control my Tapo L510 light bulb and Govee H6159 light strip using the PyP100 module and the Govee publi

James Westhead 0 Nov 23, 2021
A python module for interacting with rolimon's, a roblox value site.

rpi - rolimon's python interaction rpi is an open source python-based rolimon's api wrapper. It provides an end-to-end pipeline in which each componen

Acier 11 Nov 8, 2022
Python module for the qwiic serial control motor driver

Qwiic_SCMD_Py Python module for the qwiic motor driver This python package is a port of the existing SparkFun Serial Controlled Motor Driver Arduino L

SparkFun Electronics 6 Dec 6, 2022