In your automation your action is hvac_mode: auto
but in your blueprint you’ve made it hvac_mode: 'off'
what happens if you make them the same?
That doesn’t change a thing. I’ve updated my samples to reflect this.
The action is invalid because it has no service call
action:
entity_id: !input target_climate
type: set_hvac_mode
hvac_mode: auto
It needs to call climate.set_hvac_mode.
action:
- service: climate.set_hvac_mode
data:
entity_id: !input target_climate
hvac_mode: auto
The original automation used a Device-based action that employs a device_id
. However, when converted to a blueprint, it’s simpler to use a traditional service call which doesn’t need a device_id
.
you’re missing a target:
declaration from target_climate
Both of the selectors are Entity Selectors. Had they been Target Selectors then, yes, the blueprint would need to use target
.
input:
open_window_sensor:
name: Open Window Sensor
selector: #<------ Entity selector
entity: #<------
domain: sensor
target_climate:
name: Climate Device
selector: #<------ Entity selector
entity: #<------
domain: climate
I’ve changed the action to include a service call, but I still get a similar parsing error:
Invalid blueprint: extra keys not allowed @ data['blueprint']['action']. Got [OrderedDict([('service', 'climate.set_hvac_mode'), ('data', OrderedDict([('entity_id', Input(name='target_climate')), ('hvac_mode', 'auto')]))])]
extra keys not allowed @ data['blueprint']['trigger']. Got OrderedDict([('platform', 'state'), ('entity_id', Input(name='open_window_sensor')), ('from', 'True'), ('to', 'False')])
Post the YAML code that includes the service call.
That would be
action:
service: climate.set_hvac_mode
data:
entity_id: !input target_climate
hvac_mode: auto
But the error indicates problems in the trigger and action section…
Is there some reason that prevents you from posting the entire blueprint automation?
I realize you posted the original version above, but it’s helpful to see the modified version in its entirety.
Besides always having the complet actual blueprint is really a good idea.
If you are using the Version from your first post, the indentation is not correct.
Try this:
blueprint:
name: Tado open window detection
description: turns the Tado off when open window is detected
domain: automation
input:
open_window_sensor:
name: Open Window Sensor
selector:
entity:
domain: sensor
target_climate:
name: Climate Device
selector:
entity:
domain: climate
trigger:
platform: state
entity_id: !input open_window_sensor
from: 'True'
to: 'False'
action:
entity_id: !input target_climate
type: set_hvac_mode
hvac_mode: auto
With the correct service call and indentation.
blueprint:
name: Tado open window detection
description: turns the Tado off when open window is detected
domain: automation
input:
open_window_sensor:
name: Open Window Sensor
selector:
entity:
domain: sensor
target_climate:
name: Climate Device
selector:
entity:
domain: climate
trigger:
platform: state
entity_id: !input open_window_sensor
from: 'True'
to: 'False'
action:
service: climate.set_hvac_mode
data:
entity_id: !input target_climate
hvac_mode: auto
Be advised that if you intend to share this blueprint with others, it employs an unusual convention for the window sensor. Normally, it would be binary_sensor with on
and off
states. You are using a sensor with True
and False
states.
Aaaah! that’s the problem. Action and trigger need to be on the same level as blueprint.
About the sensor: I writing this for the tado integration and their open window sensor is not a binary sensor. It’s a regular sensor with ‘True’ and ‘False’ as states.
Also, I need to look at templating so I can handle opening and closing in one blueprint.
Thanks for the help and Happy Newyear
In that case, I suggest you consider limiting the Entity Selector’s choices to the Tado integration. All you need is to add integration: tado
to the selector. There’s an example in the documentation.
It can be done like this:
trigger:
platform: state
entity_id: !input open_window_sensor
action:
service: climate.set_hvac_mode
data:
entity_id: !input target_climate
hvac_mode: "{{ 'off' if trigger.to_state.state == 'True' else 'auto' }}"
I assume you want hvac_mode to be off
when the Tado sensor is True
and auto
when it’s False
? Or is it the opposite?
About the integration selector: I already saw that in the documentation, but thanks for the tip. It would be nice if I could filter the sensors on name ending on _open_window
, but I don’t think that’s possible.
Thanks for the template and all the help. It’s a bit frustrating that the error message is not really helpful, but now I’m ready go wild with blueprints
It’s possible.
No, I did not
Sadly i have a similar cryptic error with this blueprint:
blueprint:
name: Toggle Targets
description: A script that toggles selected targets with a delay.
domain: script
input:
targets:
name: Targets
description: The devices to toggle.
selector:
entity: {}
speed:
name: Speed
description: The delay between toggles.
selector:
entity:
domain: input_number
switch:
name: Switch
description: The on/off switch.
selector:
boolean: {}
sequence:
- repeat:
while:
- '{{states(!input switch) == "on"}}'
sequence:
- service: script.toggle_targets
target:
entity_id: '{{ !input targets }}'
- delay: '{{ states(!input speed) | float }}'
Invalid blueprint: extra keys not allowed @ data[‘blueprint’][‘sequence’]. Got [{‘repeat’: {‘while’: [‘{{states(!input switch) == “on”}}’], ‘sequence’: [{‘service’: ‘script.toggle_targets’, ‘target’: {‘entity_id’: ‘{{ !input targets }}’}}, {‘delay’: ‘{{ states(!input speed) | float }}’}]}}]
sequence:
Needs to be same indent level as
blueprint:
If you had them, so would variable:
and on automation blueprints action
, trigger:
, and condition:
.
@lodewijk
Perhaps could you click solution on this post, because this was also the problem on your blueprint, and clicking solution would help others as they find this post.
Also you can’t put !inputs into templates like that. They need to be variables.
But of course you know all this because I answered ALL of this for you on Discord 3 hours before I’m replying here…
How many places did you ask the same question and not look for responses, blu?
Discord.