Rademacher Homepilot in Home Assistant

Good to hear, will update later.
Hm, I actually only own the shutter motors, since the other products are so expensive, I also manage groups via Home Assistant, the Homepilot for me is just responsible for sending out the commands to the actual motors.
As for sensors, you might want to take a look at Rest Sensors. Keep in mind that those will only update 2-3x a minute (you can specify a different scan_interval though) so I don’t know how well that would work with things like door sensors or other stuff where you’d normally want immediate feedback.

I can take a look into your sensors if you want to, but I’ll need the JSON of each device.
Taking a look at what you’ve posted - does the timestamp value of your contact sensor only change when you open/close the door?
But even then, you wouldn’t catch a scenario where the door is opened for a few seconds and then closed again :thinking:

I want to see rain and temperature at first. So 3 times per minute are still fine for me.
For doors I will install aqara as well.

I added the JSON to my last post. Many thanks for your support :slight_smile:

Kinda hacked together, could you give them a try?

sensor:
  - platform: rest
    name: 'Temperatur'
    resource: 'http://[Homepilot IP]/devices/1010020'
    value_template: '{{ float(value_json["payload"]["device"]["capabilities"][24]["value"]) }}'
    scan_interval: 20
    device_class: temperature
binary_sensor:
  - platform: rest
    name: 'Regensensor'
    resource: 'http://[Homepilot IP]/devices/1010020'
    value_template: '{{ value_json["payload"]["device"]["capabilities"][71]["RAIN_DETECTION_MEA"] }}'
    scan_interval: 20
    device_class: moisture

@groovesurfer maybe this solution works for you as well?

You´re amazing. Both are working. Great Job.

1 Like

At the moment I try to group blinds with the help of examples from this site:

Hard work for me :smile:

Hm, I don’t know if that’s really worth it, I just set them up as regular cover groups, super easy:


Template covers are meant to be used for really custom setups, but since the Rademacher ones can be controlled with REST I don’t see the need :slightly_smiling_face:
1 Like

Unfortunately it doesn’t work for me.
Here my sensor.yaml:

  - platform: rest
    name: 'Rolladen Terrassentüre'
    resource: 'http://192.168.10.99/devices/1'
    value_template: '{{ 100 - float(value_json["payload"]["device"]["capabilities"][32]["value"]) }}'
    scan_interval: 20
  - platform: rest
    name: 'Rolladen Wohnzimmer'
    resource: 'http://192.168.10.99/devices/2'
    value_template: '{{ 100 - float(value_json["payload"]["device"]["capabilities"][32]["value"]) }}'
    scan_interval: 20
  - platform: rest
    name: 'Rolladen Esszimmer rechts'
    resource: 'http://192.168.10.99/devices/3'
    value_template: '{{ 100 - float(value_json["payload"]["device"]["capabilities"][32]["value"]) }}'
    scan_interval: 20
  - platform: rest
    name: 'Rolladen Esszimmer links'
    resource: 'http://192.168.10.99/devices/4'
    value_template: '{{ 100 - float(value_json["payload"]["device"]["capabilities"][32]["value"]) }}'
    scan_interval: 20

cover.yaml:

  • platform: template
  covers:
    terrassentuere: # Change this to sth. that matches your setup
      device_class: shutter
      friendly_name: "Rolladen Terrassentüre" # Change this too
      position_template: "{{ states('sensor.Terrassentüre') }}" # make sure to use the correct sensor name here
      open_cover:
        - service: rest_command.belt_winder_up
          data:
            did: 1 # This is the Device ID also used in sensor.yaml
      close_cover:
        - service: rest_command.belt_winder_down
          data:
            did: 1 # This is the Device ID also used in sensor.yaml
      stop_cover:
        - service: rest_command.belt_winder_stop
          data:
            did: 1 # This is the Device ID also used in sensor.yaml
      set_cover_position:
        - service: rest_command.belt_winder_set_position
          data_template:
            did: 1 # This is the Device ID also used in sensor.yaml
            position: "{{position}}"
    
    wohnzimmer: # Change this to sth. that matches your setup
      device_class: shutter
      friendly_name: "Rolladen Wohnzimmer" # Change this too
      position_template: "{{ states('sensor.Terrassentüre') }}" # make sure to use the correct sensor name here
      open_cover:
        - service: rest_command.belt_winder_up
          data:
            did: 2 # This is the Device ID also used in sensor.yaml
      close_cover:
        - service: rest_command.belt_winder_down
          data:
            did: 2 # This is the Device ID also used in sensor.yaml
      stop_cover:
        - service: rest_command.belt_winder_stop
          data:
            did: 2 # This is the Device ID also used in sensor.yaml
      set_cover_position:
        - service: rest_command.belt_winder_set_position
          data_template:
            did: 2 # This is the Device ID also used in sensor.yaml
            position: "{{position}}"    
            
    esszimmer_rechts: # Change this to sth. that matches your setup
      device_class: shutter
      friendly_name: "Rolladen Essazimmer rechts" # Change this too
      position_template: "{{ states('sensor.Essazimmer rechts') }}" # make sure to use the correct sensor name here
      open_cover:
        - service: rest_command.belt_winder_up
          data:
            did: 3 # This is the Device ID also used in sensor.yaml
      close_cover:
        - service: rest_command.belt_winder_down
          data:
            did: 3 # This is the Device ID also used in sensor.yaml
      stop_cover:
        - service: rest_command.belt_winder_stop
          data:
            did: 3 # This is the Device ID also used in sensor.yaml
      set_cover_position:
        - service: rest_command.belt_winder_set_position
          data_template:
            did: 3 # This is the Device ID also used in sensor.yaml
            position: "{{position}}"  
            
    esszimmer_links: # Change this to sth. that matches your setup
      device_class: shutter
      friendly_name: "Rolladen Essazimmer links" # Change this too
      position_template: "{{ states('sensor.Essazimmer links') }}" # make sure to use the correct sensor name here
      open_cover:
        - service: rest_command.belt_winder_up
          data:
            did: 4 # This is the Device ID also used in sensor.yaml
      close_cover:
        - service: rest_command.belt_winder_down
          data:
            did: 4 # This is the Device ID also used in sensor.yaml
      stop_cover:
        - service: rest_command.belt_winder_stop
          data:
            did: 4 # This is the Device ID also used in sensor.yaml
      set_cover_position:
        - service: rest_command.belt_winder_set_position
          data_template:
            did: 4 # This is the Device ID also used in sensor.yaml
            position: "{{position}}"  

http://192.168.10.99/devices/1

	
error_description	"OK"
error_code	0
payload	
device	
capabilities	
0	
name	"CURR_POS_CFG"
value	"100"
min_value	"0"
max_value	"100"
step_size	"1"
read_only	false
timestamp	1605308011
1	
name	"POS_UP_CMD"
read_only	false
timestamp	-1
2	
name	"VERSION_CFG"
value	"1.4-1"
read_only	false
timestamp	1605308011
3	
name	"INC_CMD"
read_only	false
timestamp	-1
4	
name	"PROD_CODE_DEVICE_LOC"
value	"14234511"
read_only	false
timestamp	-1
5	
name	"GOTO_VENTIL_POS_CMD"
read_only	false
timestamp	-1
6	
name	"REACHABILITY_EVT"
value	"true"
read_only	true
timestamp	1605308011
7	
name	"RESET_WO_PAIR_CMD"
read_only	false
timestamp	-1
8	
name	"NAME_DEVICE_LOC"
value	"Terrassentüre"
read_only	false
timestamp	-1
9	
name	"PROT_ID_DEVICE_LOC"
value	"400bea_1"
read_only	false
timestamp	-1
10	
name	"INTF_ID_DEVICE_LOC"
value	"3"
read_only	false
timestamp	-1
11	
name	"GOTO_DAWN_POS_CMD"
read_only	false
timestamp	-1
12	
name	"VENTIL_POS_MODE_CFG"
value	"false"
read_only	false
timestamp	1605308011
13	
name	"ICONSET_LOC"
value	"iconset15"
read_only	false
timestamp	-1
14	
name	"DEVICE_TYPE_LOC"
value	"2"
read_only	false
timestamp	-1
15	
name	"ICONSET_INV_LOC"
value	"false"
read_only	false
timestamp	-1
16	
name	"SUN_POS_CFG"
value	"65"
min_value	"0"
max_value	"100"
step_size	"1"
read_only	false
timestamp	1605308011
17	
name	"RMT_STOP_PAIR_CMD"
read_only	false
timestamp	-1
18	
name	"VOICE_CONTROLLED_LOC"
value	""
read_only	false
timestamp	-1
19	
name	"DUSK_AUTO_CFG"
value	"false"
read_only	false
timestamp	1605308011
20	
name	"REQ_STATUS_CMD"
read_only	false
timestamp	-1
21	
name	"AUTO_MODE_CFG"
value	"true"
read_only	false
timestamp	1605308011
22	
name	"VENTIL_POS_CFG"
value	"100"
min_value	"0"
max_value	"100"
step_size	"1"
read_only	false
timestamp	1605308011
23	
name	"DAWN_AUTO_CFG"
value	"false"
read_only	false
timestamp	1605308011
24	
name	"RESET_FULL_CMD"
read_only	false
timestamp	-1
25	
name	"PUSH_CMD"
read_only	false
timestamp	-1
26	
name	"PAIRING_CONFIRMED_LOC"
value	"true"
read_only	false
timestamp	-1
27	
name	"ID_DEVICE_LOC"
value	"1"
read_only	false
timestamp	-1
28	
name	"PROTOCOL_ID_CFG"
value	"400bea"
read_only	false
timestamp	-1
29	
name	"RMT_START_PAIR_CMD"
read_only	false
timestamp	-1
30	
name	"SUN_PROG_ACTIVE_EVT"
value	"false"
read_only	true
timestamp	1605308011
31	
name	"GOTO_DUSK_POS_CMD"
read_only	false
timestamp	-1
32	
name	"GOTO_POS_CMD"
min_value	"0"
max_value	"100"
step_size	"1"
read_only	false
timestamp	-1
33	
name	"SUN_START_CMD"
read_only	false
timestamp	-1
34	
name	"SUN_STOP_CMD"
read_only	false
timestamp	-1
35	
name	"SUN_AUTO_CFG"
value	"false"
read_only	false
timestamp	1605308011
36	
name	"STOP_CMD"
value	"false"
read_only	false
timestamp	-1
37	
name	"VIS_DEVICE_LOC"
value	"true"
read_only	false
timestamp	-1
38	
name	"OBSTACLE_DET_EVT"
value	"false"
read_only	true
timestamp	1605308011
39	
name	"RMT_START_UNPAIR_CMD"
read_only	false
timestamp	-1
40	
name	"BLOCK_DET_EVT"
value	"false"
read_only	true
timestamp	1605308011
41	
name	"POS_DOWN_CMD"
read_only	false
timestamp	-1
42	
name	"DESCR_DEVICE_LOC"
value	"Ihre Gerätebeschreibung"
read_only	false
timestamp	-1
43	
name	"TIME_AUTO_CFG"
value	"false"
read_only	false
timestamp	1605308011
44	
name	"PING_CMD"
read_only	false
timestamp	-1
45	
name	"DEC_CMD"
read_only	false
timestamp	-1
scenes	[]

Any ideas?

Hey,

please use the example in the first post again. The mistake is the sensor name, go into Developer Tools - States and start typing to find “terassen…”
You’ll see that the sensor name is most likely sensor.terassenture instead of sensor.Terassentüre.
I think that should do the trick.

I changed now the sensor name to the correct name like in the developer Tools, but still the same issue:

- platform: template
  covers:
    terrassentuere: # Change this to sth. that matches your setup
      device_class: shutter
      friendly_name: "Rolladen Terrassentüre" # Change this too
      position_template: "{{ states('cover.terrassentuere') }}" # make sure to use the correct sensor name here
      open_cover:
        - service: rest_command.belt_winder_up
          data:
            did: 1 # This is the Device ID also used in sensor.yaml
      close_cover:
        - service: rest_command.belt_winder_down
          data:
            did: 1 # This is the Device ID also used in sensor.yaml
      stop_cover:
        - service: rest_command.belt_winder_stop
          data:
            did: 1 # This is the Device ID also used in sensor.yaml
      set_cover_position:
        - service: rest_command.belt_winder_set_position
          data_template:
            did: 1 # This is the Device ID also used in sensor.yaml
            position: "{{position}}"
    
    wohnzimmer: # Change this to sth. that matches your setup
      device_class: shutter
      friendly_name: "Rolladen Wohnzimmer" # Change this too
      position_template: "{{ states('cover.wohnzimmer') }}" # make sure to use the correct sensor name here
      open_cover:
        - service: rest_command.belt_winder_up
          data:
            did: 2 # This is the Device ID also used in sensor.yaml
      close_cover:
        - service: rest_command.belt_winder_down
          data:
            did: 2 # This is the Device ID also used in sensor.yaml
      stop_cover:
        - service: rest_command.belt_winder_stop
          data:
            did: 2 # This is the Device ID also used in sensor.yaml
      set_cover_position:
        - service: rest_command.belt_winder_set_position
          data_template:
            did: 2 # This is the Device ID also used in sensor.yaml
            position: "{{position}}"    
            
    esszimmer_rechts: # Change this to sth. that matches your setup
      device_class: shutter
      friendly_name: "Rolladen Essazimmer rechts" # Change this too
      position_template: "{{ states('cover.esszimmer_rechts') }}" # make sure to use the correct sensor name here
      open_cover:
        - service: rest_command.belt_winder_up
          data:
            did: 3 # This is the Device ID also used in sensor.yaml
      close_cover:
        - service: rest_command.belt_winder_down
          data:
            did: 3 # This is the Device ID also used in sensor.yaml
      stop_cover:
        - service: rest_command.belt_winder_stop
          data:
            did: 3 # This is the Device ID also used in sensor.yaml
      set_cover_position:
        - service: rest_command.belt_winder_set_position
          data_template:
            did: 3 # This is the Device ID also used in sensor.yaml
            position: "{{position}}"  
            
    esszimmer_links: # Change this to sth. that matches your setup
      device_class: shutter
      friendly_name: "Rolladen Essazimmer links" # Change this too
      position_template: "{{ states('cover.esszimmer_links') }}" # make sure to use the correct sensor name here
      open_cover:
        - service: rest_command.belt_winder_up
          data:
            did: 4 # This is the Device ID also used in sensor.yaml
      close_cover:
        - service: rest_command.belt_winder_down
          data:
            did: 4 # This is the Device ID also used in sensor.yaml
      stop_cover:
        - service: rest_command.belt_winder_stop
          data:
            did: 4 # This is the Device ID also used in sensor.yaml
      set_cover_position:
        - service: rest_command.belt_winder_set_position
          data_template:
            did: 4 # This is the Device ID also used in sensor.yaml
            position: "{{position}}"  

You’re setting the position of cover.terrassentuere to the position of cover.terassentuere which won’t work out. You have to use the sensor here.
Try

position_template: "{{ states('sensor.rolladen_terassenture') }}"

Again, please look up the correct name in the Developer Tools.

There is no sensor in the developer tools with terrassenture. Only the cover.terrassenture

This is the sensor in the sensor.yaml you’ll need to use.
Did you add sensor: !include sensor.yaml to your configuration.yaml?

Oh sorry, my mistakte. sensor.yaml was not included. But now I include it, reboot, and the sensor “sensor.rolladen_terrassentuere” was shown and I include it in the cover.yaml. But unfortunately same issue. The down button is still grayed out. The other buttons works good. Also the slider works (I can open and close the covers). Only the up arrow is with no function. Strange…
In my lovelace I use the following:

- title: Rolläden
    path: rolladen
    badges: []
    cards:
      - type: entities
        entities:
          - entity: cover.wohnzimmer
          - entity: cover.terrassentuere
            secondary_info: position
          - entity: cover.esszimmer_links
          - entity: cover.esszimmer_rechts
        title: Rolläden
        state_color: false

There are the cover.xxx entities. Are this correct? The sensor.xxx didn´t show arrows…

What’s the state of the sensor?
Go to dev tools - States, check the sensor, then move the cover to any other position, reload after 1 minute and check again

The state of the sensor.rolladen_terrassentuere is unknown. cover.terrassentuere is open.
The slider works between 0 (closed) - 100 (open). The cover.terrassentuere state is always open.

The controls are working, that’s good. However the reason the arrow is greyed out is that the sensor is misconfigured - having the state “unknown” indicates that there’s something wrong.
Check out the Logs (Configuration - Logs), there’s probably a related error.
The sensor is using the REST API to extract the position from the Homepilot every 20s.
The Data you’ve pasted indicates that the sensor.yaml example I put up in the first post should be working - take a look at the value_template: Every pair of [ ] is telling HA to take a look a into the nested data deep enough so we get the position.
Go to your homepilots setup and enter a description for each shutter. Then, go to the /devices/1,2,3,… and find out which one contains the description/name you’ve assigned (you can use CTRL+F to search)
The URL of the correct one should be the one you put into the sensor.yaml

Again, looking at the json-ish data you’ve posted, this should work.

  - platform: rest
    name: 'Rolladen Terrassentüre'
    resource: 'http://192.168.10.99/devices/1'
    value_template: '{{ 100 - float(value_json["payload"]["device"]["capabilities"][0]["value"]) }}'
    scan_interval: 20

If that still doesn’t do it, you can DM me in german as well, maybe I’m just bad at expressing myself :upside_down_face:

Is this possible with password secured Home Pilot as well? If I use http://[Homepilot IP]/devices/1 in a signed in browser I get the result, but not in another not logged in browser. So I wonder how and if HA is later able to send the commands and pull the states?

How do you or how to manage this?

I’m not using authentication since the Homepilot is seperated from the Internet in a seperate network.
Can you give the authentication/username/password options a try? https://www.home-assistant.io/integrations/rest/#configuration-variables

Tried a lot this afternoon. But I’m not that familiar with such things.

Homepilt is secured only with a PW, not with User/PW. In Homebride, I had to handover the hashed PW, so I did it this way as well via

If the Home Assistant instance in the resource variable is protected by an API password, you can append ?api_password=YOUR_PASSWORD to the resource URL to authenticate

and with plain pw. Both does not work. Same for

The REST sensor supports HTTP authentication and customized headers.
password: test1

hashed and plain.

Without pw set on hompilot it is working. Only to be on that safe side. :wink:

So I’m not sure, how this is secured, as only with PW and how to hand over this in the REST call. The iobroker is doing someting with before_login and saltedpw:
https://github.com/homecineplexx/ioBroker.homepilot20/blob/b968a42a14a8ef17e7b2dc0f286eb60047626419/main.js#L397

Thanks for the link!
Taking a look at it shows that you need to authenticate to get a cookie, then make the call with the cookie attached.
This should be possible to implement using shell commands for the hashing etc., however I’m not really keen on investing my free time into that. If you want to give it a shot go ahead though :slight_smile:
I’ve done something similar to mute DECT phones with the Fritz!Box API.
For me it’s just not worth the added security. The only thing it prevents is someone else accessing your HomePilot locally.
You can make a few firewall rules within your router so that only Home Assistant can talk to the HomePilot when you’re done setting it up, block all other traffic to and from it.

I haven’t found the need to go into the UI for basically anything.
Another reason to lock down the device is that there’s an SSH server running on this thing listening on port 22 (Rademacher is holding the credentials to that, you don’t have any access there), so there’s that as well.