Control of Jarolift Covers using Broadlink RM Pro

If someone is intrested in controlling jarolift covers (that use keeloq encryption and rolling codes), I have implemented custom component for them that uses broadlink RM Pro device for sending RF signals. Unfortunately there is a proprietary thing that you will need (LSB and MSB Keys) that I cannot publish. But you can find them here: www.bastelbudenbuben.de.

This component you have to put into <config_dir>/custom_components/
jarolift.yaml (5.9 KB)
And this one jarolift.yaml (2.4 KB) into <config_dir>/custom_components/cover/

(Attention: becouse of changes in home assisatnt starting from 0.89 version, you have to create a subfolder jarolift in <config_dir>/custom_components/ folder and copy in this subfolder the bigger file and rename it to init.py and also copy there the smaller file and rename it to cover.py)

YOU MUST rename both files givin them the correct extension .py.

You configuration then must look like:
jarolift:
broadlink_host: 192.168.22.41
MSB: ‘0x12345678’
LSB: ‘0x12345678’

cover:

  • platform: jarolift
    covers:
    • name: ‘Room1’
      group: ‘0x0001’
      serial: ‘0x118ac00’
    • name: ‘Room2’
      group: ‘0x0002’
      serial: ‘0x118ac01’
    • name: ‘All rooms’
      group: ‘0x0003’
      serial: ‘0x118ac00’

For learning you can use yarolift.learn service. Just provide required data like: {“group”:“0x0001”,“serial”:“0x117ac00”}

More information about how jarolift works and encrypted is here: www.bastelbudenbuben.de.

5 Likes

Hello, thank you very much; is possible to get more details in order to generate the LSB and MSB keys?
Regards.

thanks
but how to find lsb and msb keys ??

thanks

Finally make it works but now I am having problems with the cover control with my 4 covers. My config is like this:

cover:

  • platform: jarolift
    covers:
    • name: ‘Room 1’
      group: ‘0x0001’
      serial: ‘0x116ac00’
    • name: ‘Room 2’
      group: ‘0x0002’
      serial: ‘0x116ac01’
    • name: ‘Room 3’
      group: ‘0x0003’
      serial: ‘0x116ac02’
    • name: ‘Room 4’
      group: ‘0x0004’
      serial: ‘0x116ac03’
    • name: ‘All’
      group: ‘0x0005’
      serial: ‘0x116ac00’

I learned all with learn service like this:

{“group”:“0x0001”,“serial”:“0x116ac00”}
{“group”:“0x0002”,“serial”:“0x116ac01”}
{“group”:“0x0003”,“serial”:“0x116ac02”}

The problem now is that the group 0x0003 is mixed with each others; for example, if I try to use only the 0x0001 group using the:
jarolift.send_command {“group”:“0x0001”,“serial”:“0x116ac00”,“button”:“0x2”}
The 0x0003 moves with it.

What I am doing wrong?

Thank you very much.

1 Like

You should consider group number in a bitwise representation, where each position corresponds to the single cover. 3 =11b

1 Like

So you need groups 1,2,4,8 for covers 1 to 4 and group 15 (=1111b) would mean all four covers

2 Likes

Thank you very much for your fast reply Wladi.

Tried with this:

  • platform: jarolift
    covers:
    • name: ‘Room 1’
      group: ‘0x0001’
      serial: ‘0x111ac00’
    • name: ‘Room 2’
      group: ‘0x0002’
      serial: ‘0x111ac01’
    • name: ‘Room 3’
      group: ‘0x0004’
      serial: ‘0x111ac02’
    • name: ‘Room 4’
      group: ‘0x0008’
      serial: ‘0x111ac03’
    • name: ‘All’
      group: ‘0x0015’
      serial: ‘0x111ac00’

And learning with this:

{“group”:“0x0001”,“serial”:“0x111ac00”}
{“group”:“0x0002”,“serial”:“0x111ac01”}
{“group”:“0x0004”,“serial”:“0x111ac02”}
{“group”:“0x0008”,“serial”:“0x111ac03”}

And same happends. Every time that I execute jarolift.send_command {“group”:“0x0001”,“serial”:“0x111ac00”,“button”:“0x2”} cover 1 and 3 moves at same time.

If I execute:
jarolift.send_command {“group”:“0x0002”,“serial”:“0x111ac01”,“button”:“0x2”} cover 2 and 3 moves at same.

All problems happends with 3 one.

I am missing something but, what?

Kind regards.


Edit:

Worked! This is my final config:

  • platform: jarolift
    covers:
    • name: ‘Living Room Left’
      group: ‘0x0001’
      serial: ‘0x106aa01’
    • name: ‘Living Room Right’
      group: ‘0x0002’
      serial: ‘0x106aa02’
    • name: ‘Room 1’
      group: ‘0x0004’
      serial: ‘0x106aa04’
    • name: ‘Room 2’
      group: ‘0x0008’
      serial: ‘0x106aa08’
    • name: ‘Living Room Covers’
      group: ‘0x0003’
      serial: ‘0x106aa01’
    • name: ‘Room Covers’
      group: ‘0x000C’
      serial: ‘0x106aa01’
    • name: ‘All Covers’
      group: ‘0x000F’
      serial: ‘0x106aa01’

Thank you so much!!!

Hi,

Id like to clarify two things please.

  1. are you extracting and using LSB and MSB keys because of the encryption or Rolling Codes?
  2. If for Rolling codes, Can you please provide details on how to capture LSB and MSB.

thanks

@Jalleronline - Can i ask how you captured the LSB and MSB keys please.

thanks

Michael

You can found all the information here:

http://www.bastelbudenbuben.de/2017/04/25/protokollanalyse-von-jarolift-tdef-motoren/

Thanks, I did see that page and tried some translation tools… was hoping there was an english version available… will try to follow that, thanks

Hello guys,
Is it possible to get the same working with Sonoff RF Bridge (Tasmota firmware)?
Has anyone tried this?
Best Regards,
Dominik

And how do i get the serial for each motor?
MSB and LSB is already available.

Serial is not associated to the motor, you can use a random one.
Regards.

And how does the right motor knows to ract to home assistant.
That is the unique number for each motor in my home assistant config?

You can use a random serial but in consecutive way as you can see in the config that I posted here; then, pair every motor with HA jarolift learn command.

Attention: becouse of changes in home assistant starting from 0.89 version, you have to create a subfolder jarolift in <config_dir>/custom_components/ folder and copy in this subfolder (<config_dir>/custom_components/jarolift/) the bigger file and rename it to init.py and also copy there the smaller file and rename it to cover.py.

I use this custom component for over a year now with my jarolift covers. Very nice work!

Thank you. The component works perfectly. I only had to make a small change to __init__.py

I had to replace every occurence of

hass.services.call('broadlink', 'send_packet_'+host.replace('.','_'), {'packet':[packet]})

with

hass.services.call('switch', 'broadlink_send_packet_'+host.replace('.','_'), {'packet':[packet]})

Update: In version 0.92.1 the line now has to be:

hass.services.call('broadlink', 'send', {'packet':[packet], 'host': host})
1 Like

Thank you for your 0.92.1 fix