Last active
February 1, 2026 11:24
-
-
Save jhol-byte/c9ee61b60337455622a7187871280321 to your computer and use it in GitHub Desktop.
FRITZ!Smart Control 440 blueprint (webhook)
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| blueprint: | |
| name: Fritz Dect 440 click template | |
| description: | | |
| Use the FRITZ!Smart Control 440 as 4-buttons control via web hooks. | |
| Two display layers of buttons can be configured in the blueprint and for the first display layer you can also define double-click actions. | |
| In the FritzBox go to | |
| - `Smart Home/Automation` | |
| - add templates `comfort function` / `call URL` (method `GET`) with the follwoing pattern: `http://homeassist:8123/api/webhook/<secret_webhook_id>?command=btn1_1` for every button (layer 1 and layer 2) | |
| - `btn1_2` means button 2 on layer 1 etc., so for first plane `btn1_1`, `btn1_2`, `btn1_3`, `btn1_4` | |
| and assign these templates to the corresponding button of your Fritz 440 with some suitable label. | |
| Version: 2026-02-01 | |
| Info: https://community.home-assistant.io/t/fritz-smart-control-440-blueprint-webhook/981706 | |
| domain: automation | |
| input: | |
| webhook_id: | |
| name: Fritz 440 webhook_id | |
| description: Define one unique webhook_id per Fritz 440 device | |
| selector: | |
| text: | |
| display1_section: | |
| name: Main button action (1. display layer) | |
| collapsed: true | |
| input: | |
| btn1_1_click_action: | |
| name: <btn1_1> action | |
| default: [] | |
| selector: | |
| action: {} | |
| btn1_2_click_action: | |
| name: <btn1_2> action | |
| default: [] | |
| selector: | |
| action: {} | |
| btn1_3_click_action: | |
| name: <btn1_3> action | |
| default: [] | |
| selector: | |
| action: {} | |
| btn1_4_click_action: | |
| name: <btn1_4> action | |
| default: [] | |
| selector: | |
| action: {} | |
| display1_double-click_section: | |
| name: Double-click button action (1. display layer) | |
| collapsed: true | |
| input: | |
| btn1_1_double_click_action: | |
| name: <btn1_1 double-click> action | |
| default: [] | |
| selector: | |
| action: {} | |
| btn1_2_double_click_action: | |
| name: <btn1_2 double-click> action | |
| default: [] | |
| selector: | |
| action: {} | |
| btn1_3_double_click_action: | |
| name: <btn1_3 double-click> action | |
| default: [] | |
| selector: | |
| action: {} | |
| btn1_4_double_click_action: | |
| name: <btn1_4 double-click> action | |
| default: [] | |
| selector: | |
| action: {} | |
| double_click_interval: | |
| name: double-click interval | |
| description: "time interval in sec between clicks" | |
| default: 0.4 | |
| selector: | |
| number: | |
| mode: box | |
| display2_section: | |
| name: Secondary button action (2. display layer) | |
| collapsed: true | |
| input: | |
| btn2_1_click_action: | |
| name: <btn2_1> action | |
| default: [] | |
| selector: | |
| action: {} | |
| btn2_2_click_action: | |
| name: <btn2_2> action | |
| default: [] | |
| selector: | |
| action: {} | |
| btn2_3_click_action: | |
| name: <btn2_3> action | |
| default: [] | |
| selector: | |
| action: {} | |
| btn2_4_click_action: | |
| name: <btn2_4> action | |
| default: [] | |
| selector: | |
| action: {} | |
| alias: Fritz Dect 440 click template | |
| trigger: | |
| - trigger: webhook | |
| allowed_methods: | |
| - GET | |
| local_only: true | |
| webhook_id: !input webhook_id | |
| condition: [] | |
| actions: | |
| - choose: | |
| - conditions: | |
| - condition: template | |
| value_template: "{{ trigger.query.command=='btn1_1' }}" | |
| sequence: | |
| - if: | |
| - condition: template | |
| value_template: "{{ var_double_click_occured }}" | |
| then: | |
| sequence: | |
| !input btn1_1_double_click_action | |
| else: | |
| sequence: | |
| - delay: | |
| seconds: !input double_click_interval | |
| - sequence: | |
| !input btn1_1_click_action | |
| - conditions: | |
| - condition: template | |
| value_template: "{{ trigger.query.command=='btn1_2' }}" | |
| sequence: | |
| - if: | |
| - condition: template | |
| value_template: "{{ var_double_click_occured }}" | |
| then: | |
| sequence: | |
| !input btn1_2_double_click_action | |
| else: | |
| sequence: | |
| - delay: | |
| seconds: !input double_click_interval | |
| - sequence: | |
| !input btn1_2_click_action | |
| - conditions: | |
| - condition: template | |
| value_template: "{{ trigger.query.command=='btn1_3' }}" | |
| sequence: | |
| - if: | |
| - condition: template | |
| value_template: "{{ var_double_click_occured }}" | |
| then: | |
| sequence: | |
| !input btn1_3_double_click_action | |
| else: | |
| sequence: | |
| - delay: | |
| seconds: !input double_click_interval | |
| - sequence: | |
| !input btn1_3_click_action | |
| - conditions: | |
| - condition: template | |
| value_template: "{{ trigger.query.command=='btn1_4' }}" | |
| sequence: | |
| - if: | |
| - condition: template | |
| value_template: "{{ var_double_click_occured }}" | |
| then: | |
| sequence: | |
| !input btn1_4_double_click_action | |
| else: | |
| sequence: | |
| - delay: | |
| seconds: !input double_click_interval | |
| - sequence: | |
| !input btn1_4_click_action | |
| - conditions: | |
| - condition: template | |
| value_template: "{{ trigger.query.command=='btn2_1' }}" | |
| sequence: | |
| !input btn2_1_click_action | |
| - conditions: | |
| - condition: template | |
| value_template: "{{ trigger.query.command=='btn2_2' }}" | |
| sequence: | |
| !input btn2_2_click_action | |
| - conditions: | |
| - condition: template | |
| value_template: "{{ trigger.query.command=='btn2_3' }}" | |
| sequence: | |
| !input btn2_3_click_action | |
| - conditions: | |
| - condition: template | |
| value_template: "{{ trigger.query.command=='btn2_4' }}" | |
| sequence: | |
| !input btn2_4_click_action | |
| variables: | |
| var_double_click_interval: !input double_click_interval | |
| var_double_click_occured: >- | |
| {{ (this.attributes.current == 1) and | |
| ((now() - this.attributes.last_triggered) < timedelta(seconds = var_double_click_interval) ) }} | |
| mode: restart | |
| max_exceeded: silent |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment