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
Skykettle ha - Redmond SkyKettle integration for Home Assistant

Redmond SkyKettle integration for Home Assistant This integration allows to cont

Alexey 'Cluster' Avdyukhin 48 Jan 06, 2023
FHEM Connector for FHT Heating devices

home-assistant-fht from: https://github.com/Rsclub22 FHEM Connector for FHT Heating devices (connected via FHEM) Requires FHEM to work You can find FH

5 Dec 01, 2022
Hotplugger: Real USB Port Passthrough for VFIO/QEMU!

Hotplugger: Real USB Port Passthrough for VFIO/QEMU! Welcome to Hotplugger! This app, as the name might tell you, is a combination of some scripts (py

DARKGuy (Alemar) 66 Nov 24, 2022
HA-Edge-Connector - HA Edge Connector For Python

HA-Edge-Connector 1. Required a. Smartthings Hub & Homeassistant must be in same

chals 21 Dec 29, 2022
A script for performing OTA update over BLE on ESP32

A script for performing OTA update over BLE on ESP32

Felix Biego 18 Dec 15, 2022
MicroPython driver for 74HC595 shift registers

MicroPython 74HC595 A MicroPython library for 74HC595 8-bit shift registers. There's both an SPI version and a bit-bang version, each with a slightly

Mike Causer 17 Nov 29, 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

36 Dec 16, 2022
Code and build instructions for Snap, a simple Raspberry Pi and LED machine to show you how expensive the electricyty is at the moment

Code and build instructions for Snap, a simple Raspberry Pi and LED machine to show you how expensive the electricyty is at the moment. On row of LEDs shows the cost of the hour, the other row the co

Johan Jonk Stenström 3 Sep 08, 2022
A 3rd party Moonraker component to create timelapse of 3D prints.

A 3rd party Moonraker component to create timelapse of 3D prints.

Mainsail-Crew 166 Dec 26, 2022
The software that powers the sPot: a 4th generation

This code is meant to accompany this project in which a Spotify client is built into an iPod "Classic" from 2004. Everything is meant to run on a Raspberry Pi Zero W.

Guy Dupont 683 Dec 28, 2022
Electrolux Pure i9 robot vacuum integration for Home Assistant.

Home Assistant Pure i9 This repository integrates your Electrolux Pure i9 robot vacuum with the smart home platform Home Assistant. The integration co

Niklas Ekman 15 Dec 22, 2022
Python library to manipulate Ingenico mobile payment device like iCT220 or iWL220 equipped with Telium Manager. RS232/USB.

Python library to manipulate Ingenico mobile payment device like iCT220 or iWL220 equipped with Telium Manager. RS232/USB.

TAHRI Ahmed R. 72 Dec 24, 2022
ENC28J60 Ethernet chip driver for MicroPython (RP2)

micropy-ENC28J60 ENC28J60 Ethernet chip driver for MicroPython v1.17 (RP2) Rationale ENC28J60 is a popular and cheap module for DIY projects. At the m

11 Nov 16, 2022
A dashboard for Raspberry Pi to display environmental weather data, rain radar, weather forecast, etc. written in Python

Weather Clock for Raspberry PI This project is a dashboard for Raspberry Pi to display environmental weather data, rain radar, weather forecast, etc.

Markus Geiger 1 May 01, 2022
A Home Assistant integration for Solaredge inverters

A Home Assistant integration for Solaredge inverters. Supports multiple inverters chained through RS485.

Seth 50 Dec 23, 2022
A flexible data historian based on InfluxDB, Grafana, MQTT and more. Free, open, simple.

Kotori Telemetry data acquisition and sensor networks for humans. Documentation: https://getkotori.org/ Source Code: https://github.com/daq-tools/koto

83 Nov 26, 2022
Detic ros - A simple ROS wrapper for Detic instance segmentation using pre-trained dataset

Detic ros - A simple ROS wrapper for Detic instance segmentation using pre-trained dataset

Hirokazu Ishida 12 Nov 19, 2022
A Fast, Easy, and User Friendly way to control Robotics Actuators.

T-Motor Controller A Fast, Easy, and User Friendly way to control Robotics Actuators. View Demo · Report Bug · Request Feature Table of Contents About

26 Aug 23, 2022
Inykcal is a software written in python for selected E-Paper displays.

Inykcal is a software written in python for selected E-Paper displays. It converts these displays into useful information dashboards. It's open-source, free for personal use, fully modular and user-f

Ace 727 Jan 02, 2023
Windhager myComfort custom component for Home Assistant

Windhager myComfort custom component for Home Assistant

5 Apr 27, 2022