Living in Melbourne, one of the best things you could have in your house is air-conditioning/climate control, much needed heating in winter, and much needed cooling in summer. This is why I’ve spent a bit of time making and customising my Sensibo component to what I want it to do. I’ve utilised a few different components to make it all work, but this is how the finished product looks, and it’s fully Alexa compatible, even offering more control than the official skill provided by Sensibo on Alexa.
Most of this is also compatible with any device that utilises the Climate service in HA.
I’ve used the standard built in Sensibo component for the main part. For the on/off switch and to show the inside temperature/humidity I’ve used Amir974’s Switch and Sensor components.
For the Temperature, Fan and Operation selections, I’ve created my own Input Selections as follows:
ac_temp:
name: Temperature
options:
- "18"
- "19"
- "20"
- "21"
- "22"
- "23"
- "24"
- "25"
- "26"
- "27"
initial: "21"
icon: mdi:oil-temperature
ac_fan:
name: Fan Mode
options:
- Low
- Medium
- High
- Auto
initial: Medium
icon: mdi:fan
ac_operation:
name: Operation
options:
- Cool
- Heat
initial: Cool
icon: mdi:hot-tub
Then I set up the following 3 template automations to basically translate and relay the input selections to the climate service:
- alias: "AC Temp"
initial_state: 'on'
trigger:
platform: state
entity_id: input_select.ac_temp
action:
service: climate.set_temperature
data_template:
entity_id: climate.living
temperature: >
{% if is_state('input_select.ac_temp', '18') %}
18
{% elif is_state('input_select.ac_temp', '19') %}
19
{% elif is_state('input_select.ac_temp', '20') %}
20
{% elif is_state('input_select.ac_temp', '21') %}
21
{% elif is_state('input_select.ac_temp', '22') %}
22
{% elif is_state('input_select.ac_temp', '23') %}
23
{% elif is_state('input_select.ac_temp', '24') %}
24
{% elif is_state('input_select.ac_temp', '25') %}
25
{% elif is_state('input_select.ac_temp', '26') %}
26
{% elif is_state('input_select.ac_temp', '27') %}
27
{% endif %}
- alias: "AC Fan Mode"
initial_state: 'on'
trigger:
platform: state
entity_id: input_select.ac_fan
action:
service: climate.set_fan_mode
data_template:
entity_id: climate.living
fan_mode: >
{% if is_state('input_select.ac_fan', 'Low') %}
low
{% elif is_state('input_select.ac_fan', 'Medium') %}
medium
{% elif is_state('input_select.ac_fan', 'High') %}
high
{% elif is_state('input_select.ac_fan', 'Auto') %}
auto
{% endif %}
- alias: "AC Mode"
initial_state: 'on'
trigger:
platform: state
entity_id: input_select.ac_operation
action:
service: climate.set_operation_mode
data_template:
entity_id: climate.living
operation_mode: >
{% if is_state('input_select.ac_operation', 'Cool') %}
cool
{% elif is_state('input_select.ac_operation', 'Heat') %}
heat
{% endif %}
With everything above, you’ll get what I have in the screenshot. The real fun is the Alexa component. First in Home Assistant I have the following under intent_script in the configuration.yaml:
TemperatureIntent:
speech:
type: plain
text: >
It is currently {{ states.sensor.inside_temperature.state }} degrees celsius inside
HumidityIntent:
speech:
type: plain
text: >
The humidity inside is currently at {{ states.sensor.inside_humidity.state }} percent
FanIntent:
action:
- service: input_select.select_option
entity_id: input_select.ac_fan
data_template:
option: '{{ Fan }}'
speech:
type: plain
text: >
AC fan mode set to {{ Fan }}
TempIntent:
action:
- service: input_select.select_option
entity_id: input_select.ac_temp
data_template:
option: '{{ Temperature }}'
speech:
type: plain
text: >
AC temperature set to {{ Temperature }} degrees celsius.
ModeIntent:
action:
- service: input_select.select_option
entity_id: input_select.ac_operation
data_template:
option: '{{ Mode }}'
speech:
type: plain
text: >
AC set to {{ Mode }}.
The first 2 intents just tell me what the inside temperature and humidity are when asked. With the above configuration, every time I ask Alexa to change the temperature or fan, HA changes the input_select which is automated to pass onto Sensibo’s API. I found this to be the quickest and most reliable way to do it, since the Sensibo API can be quite slow at the best of times, and if Alexa goes directly to Sensibo, it times out 9 out of 10 times. This way Alexa’s Sensibo settings are also synced with the input selects in HA.
The Amazon Alexa interaction are as follows:
Intent Schema:
{
"intents": [
{
"intent": "TemperatureIntent"
},
{
"intent": "HumidityIntent"
},
{
"slots": [
{
"name": "Fan",
"type": "Fans"
}
],
"intent": "FanIntent"
},
{
"slots": [
{
"name": "Temperature",
"type": "Temperatures"
}
],
"intent": "TempIntent"
},
{
"slots": [
{
"name": "Mode",
"type": "Modes"
}
],
"intent": "ModeIntent"
}
]
}
Custom Slot Types are as follows:
Utterances as follows:
TemperatureIntent What is the inside temperature
TemperatureIntent What's the inside temperature
TemperatureIntent What is the indoor temperature
TemperatureIntent What's the indoor temperature
HumidityIntent What is the inside humidity
HumidityIntent What's the inside humidity
HumidityIntent What is the indoor humidity
HumidityIntent What's the indoor humidity
FanIntent set the AC fan to {Fan}
TempIntent set the temperature to {Temperature} degrees
ModeIntent turn on {Mode}
It’s also worth noting that the A/C switch is exposed to Alexa via emulated hue, so no need for that to go via the Alexa API, although you could set it up that way. I prefer to say “Alexa, turn on AC” rather than “Alexa, tell Sensibo to turn on AC”.
I hope this is a handy guide for others!