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/pytho[email protected] --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
Tools and documentation to aid in modifying the ADI ADALM Pluto firmware

Pluto firmware modifications This repository contains tools and documentation to aid in modifying the ADI ADALM Pluto firmware. Extraction of the Plut

Daniel Estévez 28 Dec 21, 2022
Keystroke logging, often referred to as keylogging or keyboard capturing

Keystroke logging, often referred to as keylogging or keyboard capturing, is the action of recording the keys struck on a keyboard, typically covertly, so that a person using the keyboard is unaware

Bhumika R 2 Jan 11, 2022
View your medication from Medisafe Cloud in Home Assistant

Medisafe View your medication from Medisafe Cloud in Home Assistant. This integration adds sensors for today's upcoming, taken, skipped, and missed do

Sam Steele 12 Dec 27, 2022
Ha-rpi gpio - Home Assistant Raspberry Pi GPIO Integration

Home Assistant Raspberry Pi GPIO custom integration This is a spin-off from the

Shay Levy 98 Dec 24, 2022
a fork of the OnionShare software better optimized for lower spec lightweight machines and ARM processors

OnionShare-Optimized A fork of the OnionShare software better optimized for lower spec lightweight machines and ARM processors such as Raspberry Pi or

ALTPORT 4 Aug 05, 2021
This Home Assistant custom component adding support for controlling Midea dehumidifiers on local network.

This custom component for Home assistant adds support for Midea dehumidifier appliances via the local area network. homeassistant-midea-dehumidifier-l

Nenad Bogojevic 91 Dec 28, 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
Iec62056-21-mqtt - Publish DSMR P1 telegrams acquired over IEC62056-21 to MQTT

IEC 62056-21 Publish DSMR P1 telegrams acquired over IEC62056-21 to MQTT. -21 is

Marijn Suijten 1 Jun 05, 2022
This allows you to record keyboard and mouse input, and play it back using pynput.

Record and Play with Python! This allows you to record keyboard and mouse input, and play it back (with looping) using pynput. It allows for automatio

George Jensen 45 Jan 02, 2023
Isaac Gym Environments for Legged Robots

Isaac Gym Environments for Legged Robots This repository provides the environment used to train ANYmal (and other robots) to walk on rough terrain usi

Robotic Systems Lab - Legged Robotics at ETH Zürich 372 Jan 08, 2023
Raspberry Pi Pico development platform for PlatformIO

Raspberry Pi Pico development platform for PlatformIO A few words in the beginning Before experimental please Reinstall the platform Version: 1.0.0 Th

Georgi Angelov 160 Dec 23, 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 06, 2022
3D-printable hexagonal mirror array capable of reflecting sunlight into arbitrary patterns

3D-printable hexagonal mirror array capable of reflecting sunlight into arbitrary patterns

Ben Bartlett 2.3k Dec 30, 2022
Simple python3 implementation of microKanren with lots of type annotations for clarity

MicroKanren-py This is (yet another) python implementation of microKanren. It's a reasonably 1:1 translation of the code provided in the paper, but ev

Erik Derohanian 3 Dec 10, 2022
Home Assistant custom integration to fetch data from Powerpal

Powerpal custom component for Home Assistant Component to integrate with powerpal. This repository and integration is not affiliated with Powerpal. Th

Lawrence 32 Jan 07, 2023
This repository hosts the code for Stanford Pupper and Stanford Woofer, Raspberry Pi-based quadruped robots that can trot, walk, and jump.

This repository hosts the code for Stanford Pupper and Stanford Woofer, Raspberry Pi-based quadruped robots that can trot, walk, and jump.

Stanford Student Robotics 1.2k Dec 25, 2022
Doughskript interpreter for converting simple command sequences into executable Arduino C++ code.

Doughskript interpreter for converting simple command sequences into executable Arduino C++ code.

Svjatoslav 2 Jan 11, 2022
Small Robot, with LIDAR and DepthCamera. Using ROS for Maping and Navigation

🤖 RoboCop 🤖 Small Robot, with LIDAR and DepthCamera. Using ROS for Maping and Navigation Made by Clemente Donoso, 📍 Chile 🇨🇱 RoboCop Lateral Fron

Clemente Donoso Krauss 2 Jan 04, 2022
Python module for controlling Broadlink RM2/3 (Pro) remote controls, A1 sensor platforms and SP2/3 smartplugs

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

Matthew Garrett 1.2k Jan 04, 2023
PyLog - Simple keylogger that uses pynput to listen to keyboard input.

Simple keylogger that uses pynput to listen to keyboard input. Outputs to a text file and the terminal. Press the escape key to stop.

1 Dec 29, 2021