Objects - esphome-econet/esphome-econet GitHub Wiki
Objects
See https://github.com/esphome-econet/econet-docs/blob/main/protocol-documentation/Rheem%20BACnet%20Specification.pdf for a known BACnet object list.
Depending on the object type you can use the following components:
Object type | econet component |
---|---|
Analog | sensor |
Character String | text_sensor |
Binary | sensor to get 0 or 1, text_sensor to get 'Off' or 'On', switch if access is R/W |
Multi-State | sensor to get enum index, text_sensor to get the enum text, number or select if access is R/W |
RAW | on_datapoint_update |
e.g. for WHTRCNFG
which is multi-state R/W you can use:
sensor:
- platform: econet
name: "WHTRCNFG"
sensor_datapoint: WHTRCNFG
text_sensor:
- platform: econet
name: "WHTRCNFG text"
sensor_datapoint: WHTRCNFG
number:
- platform: econet
name: "WHTRCNFG number"
number_datapoint: WHTRCNFG
min_value: 0
max_value: 100
step: 1
mode: box
select:
- platform: econet
name: "WHTRCNFG select"
enum_datapoint: WHTRCNFG
options:
0: "Off"
1: "Eco Mode"
2: "Heat Pump"
3: "High Demand"
4: "Electric"
5: "Vacation"
e.g. for DEFAULTS
(be careful using this since it will clear model number and serial number) which is binary R/W you can have a hidden switch and a button that flips it:
switch:
- platform: econet
id: defaults
switch_datapoint: DEFAULTS
request_mod: none
internal: true
button:
- platform: template
name: "Restore program defaults"
id: restore_program_defaults
entity_category: "config"
on_press:
- switch.turn_on: defaults
- delay: 1s
- switch.turn_off: defaults
For objects that are RAW, e.g. AIRHSTAT
you can follow this example:
econet:
on_datapoint_update:
- sensor_datapoint: AIRHSTAT
datapoint_type: raw
then:
- lambda: |-
ESP_LOGD("main", "on_datapoint_update %s", format_hex_pretty(x).c_str());
id(blower_cfm).publish_state((x[16] << 8) + x[17]);
sensor:
- platform: template
name: "Air Handler CFM"
id: blower_cfm
You can use request_mod
to group requests for some objects together. It defaults to 0. Objects with the same request_mod
will be requested together. This is needed to make sure we get a response especially when requesting large string values. e.g. we can only request up to 2 alarm history objects. Anything more and there is no response. You can use request_mod: none
if there is no need to request some objects. They will still be updated if another device, e.g. thermostat, requests these objects in the bus.
You can use request_once: true
for objects that aren't expected to change, e.g. serial number.
Home Assistant Services
To try out new object strings:
-
Navigate to http://homeassistant.local:8123/developer-tools/event, in the Listen to events enter
esphome.econet_event
and click on start listening. -
In a separate tab navigate to http://homeassistant.local:8123/developer-tools/service and make a read request for the object. e.g.
service: esphome.econet_hpwh_read
data:
datapoint_id: ALARM_BC
- Go to the first tab and you should see an event with the response. e.g.
event_type: esphome.econet_event
data:
datapoint_id: ALARM_BC
type: ENUM_TEXT
value: "0"
value_string: "No"
If you want to write a value you can use the esphome.econet_hpwh_write_float
or esphome.econet_hpwh_write_enum
services.
Water Heater
The following list was obtained with:
curl https://upgrade.rheemcert.com/RH-WIFI-02-01-25.bin | strings -n 8 | grep -E '^[_A-Z0-9]{8}$' | sort -u
and tested on a HPWH:
ALARMH01 : ()
ALARMH20 : ()
ALARMNUM : 65.000000
ALARM_01 : ()
ALARM_20 : ()
ALARM_BC : 0 (No)
ALRMALRT : 0.000000
API_SRVR : (http://api.rheemcert.com:80)
AWMACADR : (CC-XX-XX-XX-XX-XX)
BOOT_CRC : 14115.000000
CNAPSSID : (guest)
CNCONFIG : (1)
CNPSSWRD : (XX)
DEFAULTS : 0 (No)
EE_WRITE : 94.000000
FTFS_CRC : 7267.000000
HRSLOHTR : 0.000000
HRSUPHTR : 0.000000
INSTANCE : 1.000000
LOHTRTMP : 121.259674
MAIN_CNT : 1648.000000
MAXONOFF : 3600.000000
MAXONTIM : 43200.000000
PRGMWCRC : 55562.000000
PRGM_CRC : 29486.000000
PRODLOCA : ()
PRODMODN : ()
PRODSERN : ()
SAFEHILM : 152.000000
SAFELOLM : 103.000000
SECCOUNT : 486523.000000
SHUTDOWN : 0 (No)
SW_VERSN : (WH-HPW5-H6-01-04)
UPHTRTMP : 125.704582
VACADAYS : 7.000000
VACALEFT : 0.000000
VACASAVE : 1.000000
VACATIME : 10000.000000
VACATION : 0 (No)
VACA_NET : 0 (Off)
WFFW_CRC : 42599.000000
WFGTWYAD : ()
WFIPADDR : ()
WHTRCNFG : 1 (Energy Saver)
WHTRCTRL : 1 (Energy Saver)
WHTRENAB : 1 (Enabled)
WHTRMODE : 4 (Off: No Demand)
WHTRSETP : 120.000000
WLSTATUS : (Ready To Connect)
The following list was obtained by decompiling https://play.google.com/store/apps/details?id=com.rheem.contractor looking at com.rheem.bluetooth.data.model.communication.ObjectCommand
and tested on a HPWH:
EXV_SHSP : 8.000000
EXACTUAL : 100.000000
EXVSUPER : 2.433578
ALARMS : 0.000000
ECONTROL : 100.000000
ALRESET : 0 (No)
ALHISCLR : 0 (No)
RESETDEV : 0 (No)
The following was obtained from https://community.hubitat.com/t/rheem-econet-integration-maintained-by-kris-linquist/116913/30
{
"AMBIENTT": 50.82814,
"POWRWATT": 46.138278,
"SUCTIONT": 46.925575,
"DISCTEMP": 50.778808,
"I_RMSVAL": 0.184961,
"EVAPTEMP": 50.30442,
"WHTRCNFG": 1,
"LOHTRTMP": 112.441062,
"UPHTRTMP": 114.267372,
"VACA_NET": 0,
"WHTRMODE": 4,
"TOTALKWH": 72.767707,
"FAN_CTRL": 0,
"COMP_RLY": 0,
"EXACTUAL": 100,
"HRSLOFAN": 36.22084,
"HRS_COMP": 102.196487,
"WHTRENAB": 1,
"WHTRSETP": 120,
"HOTWATER": 100,
"HRSHIFAN": 66.070373,
"PRODDESC": "Heat Pump Water Heater ",
"PRODSERN": "XXXXXXXX ",
"UNITTYPE": 4,
"PRODMODN": "XE80T10H+45U0 ",
"SW_VERSN": "WH-HPW5-H6-01-04",
"SERIAL_N": [
"XXXXXX"
],
"UPELSIZE": 4.5,
"LOELSIZE": 4.5,
"LSDETECT": 0,
"HEATCTRL": 0,
"SHUTOFFV": 0,
"SHUTOVER": 0,
"ANODEA2D": 42405,
"ANODESTS": 2,
"SHUTOPEN": 0,
"SHUTCLOS": 0,
"HRSUPHTR": 2.938611,
"HRSLOHTR": 0.002222,
"DRESOVER": 0,
"ALRMALRT": 0,
"ALARM_01": " ",
"ALARM_02": " ",
"ALARM_03": " ",
"ALARM_04": " ",
}