I bought an Tasmota Athom IR Controller to control my IR only Trane RunTru Heatpump. Having no details about what IR Protocol this heat pump communicates with, I started to thinker with it and found it’s using the GREE protocol, so off to a good start. However, I couldn’t get much info about how its iFeel protocol works (using the "Command": "iFeel Report", "SensorTemp": 18 to heat pump unit actually shuts it down, so I had to reverse engineer it and now that everything is working I thought of sharing it with the community.
First I needed some helpers. These are the ones I defined (I as don’t have the blades swinging, I didn’t define them but the principle is the same)
(those were taken from .storage as there are no way to see helpers defined from the GUI from what I can see)
"key": "input_boolean",
"data": {
"items": [
{
"id": "hvac_power",
"name": "HVAC Power"
},
{
"id": "hvac_light",
"name": "HVAC Light"
},
{
"id": "hvac_ifeel",
"name": "HVAC iFeel"
}
]
"key": "input_number",
"data": {
"items": [
{
"id": "hvac_temperature",
"min": 16.0,
"max": 30.0,
"name": "HVAC Temperature",
"step": 1.0,
"mode": "slider"
}
]
"key": "input_select",
"data": {
"items": [
{
"id": "hvac_mode",
"name": "HVAC Mode",
"options": [
"Heat",
"Cool",
"Dry",
"Fan"
]
},
{
"id": "hvac_fan",
"name": "HVAC Fan",
"options": [
"Auto",
"1",
"2",
"3",
"4",
"5"
]
}
]
Next is the Automation that triggers when any of these input change. Change HVAC-IR with whatever you named yours
alias: HVAC - Settings changed
description: ""
triggers:
- trigger: state
entity_id:
- input_number.hvac_temperature
- input_boolean.hvac_light
- input_boolean.hvac_power
- input_select.hvac_fan
- input_select.hvac_mode
- input_boolean.hvac_ifeel
conditions: []
actions:
- action: mqtt.publish
metadata: {}
data:
evaluate_payload: false
qos: 0
retain: false
topic: cmnd/HVAC-IR/IRhvac
payload: >-
{"Vendor":"GREE","Power":"{{ states('input_boolean.hvac_power') }}",
"Mode":"{{ states('input_select.hvac_mode') }}",
"FanSpeed":"{{ states('input_select.hvac_fan') }}",
"Temp":"{{ states('input_number.hvac_temperature')|int }}",
"Light":"{{ states('input_boolean.hvac_light') }}",
"iFeel":"{{ states('input_boolean.hvac_ifeel') }}"
}
mode: single
And last is the Automation that triggers when my living room thermostat temperature changes (the device I use for the iFeel temperature) and every 10 minutes (which is the interval my remote uses)
alias: HVAC - iFeel changed
description: ""
triggers:
- trigger: state
entity_id:
- climate.neviweb130_climate_salon
attribute: current_temperature
- trigger: time_pattern
minutes: "10"
conditions:
- condition: state
entity_id: input_boolean.hvac_ifeel
state:
- "on"
actions:
- action: mqtt.publish
metadata: {}
data:
evaluate_payload: false
qos: 0
retain: false
topic: cmnd/HVAC-IR/IRsend
payload: >-
{% set nst = namespace(temp = state_attr("climate.neviweb130_climate_salon", "current_temperature")|int(20)) %}
{% set nsl = namespace(list=[]) %}
{% for bit in range(0, 8) %}
{% set nsl.list = nsl.list + ["630", (nst.temp / 2**bit) | int | bitwise_and(1) | iif ("1680","550")] %}
{% endfor %}
0,5980,3015,{{ nsl.list | join(",")}},630,1680,630,550,630,1680,630,550,630,550,630,1680,630,550,630,1680,630
mode: single
That’s it. By turning on the iFeel button, the heat pump will try to match the temperature in my living room, otherwise, it uses its own temperature sensor.
I’ve also set other Automations that change the set point and turn the panel light on/off (off at night and on during the day), but these only changes the input_ variables so they don’t need any explanation.
If you have any suggestions to improve upon it, don’t hesitate to share ![]()