Skip to content

Commit

Permalink
Fix support for Shelly Pro EM (#273)
Browse files Browse the repository at this point in the history
* Add switch

* First step

* Second step

* Add missing sensor

* Bump version
  • Loading branch information
bieniu committed Sep 14, 2023
1 parent 114584c commit 13e6981
Showing 1 changed file with 137 additions and 43 deletions.
180 changes: 137 additions & 43 deletions python_scripts/shellies_discovery_gen2.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
"""This script adds MQTT discovery support for Shellies Gen2 devices."""
VERSION = "2.18.0"
VERSION = "2.19.0"

ATTR_BATTERY_POWERED = "battery_powered"
ATTR_BINARY_SENSORS = "binary_sensors"
Expand Down Expand Up @@ -229,7 +229,9 @@

TOPIC_COVER = "~status/cover:{cover}"
TOPIC_EMDATA = "~status/emdata:{emeter_id}"
TOPIC_EMDATA1 = "~status/em1data:{emeter_id}"
TOPIC_EMETER = "~status/em:{emeter_id}"
TOPIC_EMETER1 = "~status/em1:{emeter_id}"
TOPIC_EVENTS_RPC = "~events/rpc"
TOPIC_HUMIDITY = "~status/humidity:{sensor}"
TOPIC_INPUT = "~status/input:{relay}"
Expand All @@ -252,22 +254,27 @@
TPL_CLOUD = "{%if value_json.cloud.connected%}ON{%else%}OFF{%endif%}"
TPL_CLOUD_INDEPENDENT = "{%if value_json.connected%}ON{%else%}OFF{%endif%}"
TPL_CURRENT = "{{value_json.current}}"
TPL_EMETER_ACTIVE_POWER = "{{{{value_json.{phase}_act_power}}}}"
TPL_EMETER_APPARENT_POWER = "{{{{value_json.{phase}_aprt_power}}}}"
TPL_EMETER_CURRENT = "{{{{value_json.{phase}_current}}}}"
TPL_EMETER_FREQUENCY = "{{{{value_json.{phase}_freq}}}}"
TPL_EMETER_ACTIVE_POWER = "{{value_json.act_power}}"
TPL_EMETER_PHASE_ACTIVE_POWER = "{{{{value_json.{phase}_act_power}}}}"
TPL_EMETER_APPARENT_POWER = "{{value_json.aprt_power}}"
TPL_EMETER_PHASE_APPARENT_POWER = "{{{{value_json.{phase}_aprt_power}}}}"
TPL_EMETER_PHASE_CURRENT = "{{{{value_json.{phase}_current}}}}"
TPL_EMETER_PHASE_FREQUENCY = "{{{{value_json.{phase}_freq}}}}"
TPL_EMETER_N_CURRENT = "{{value_json.n_current}}"
TPL_EMETER_PHASE_TOTAL_ACTIVE_ENERGY = "{{{{value_json.{phase}_total_act_energy}}}}"
TPL_EMETER_PHASE_TOTAL_ACTIVE_RETURNED_ENERGY = (
"{{{{value_json.{phase}_total_act_ret_energy}}}}"
)
TPL_EMETER_POWER_FACTOR = "{{{{value_json.{phase}_pf}}}}"
TPL_EMETER_POWER_FACTOR = "{{value_json.pf}}"
TPL_EMETER_PHASE_POWER_FACTOR = "{{{{value_json.{phase}_pf}}}}"
TPL_EMETER_TOTAL_ACTIVE_ENERGY = "{{value_json.total_act}}"
TPL_EMETER1_TOTAL_ACTIVE_ENERGY = "{{value_json.total_act_energy}}"
TPL_EMETER_TOTAL_ACTIVE_POWER = "{{value_json.total_act_power}}"
TPL_EMETER_TOTAL_ACTIVE_RETURNED_ENERGY = "{{value_json.total_act_ret}}"
TPL_EMETER1_TOTAL_ACTIVE_RETURNED_ENERGY = "{{value_json.total_act_ret_energy}}"
TPL_EMETER_TOTAL_APPARENT_POWER = "{{value_json.total_aprt_power}}"
TPL_EMETER_TOTAL_CURRENT = "{{value_json.total_current}}"
TPL_EMETER_VOLTAGE = "{{{{value_json.{phase}_voltage}}}}"
TPL_EMETER_PHASE_VOLTAGE = "{{{{value_json.{phase}_voltage}}}}"
TPL_EVENT = "{{%if value_json.params.events.0.id=={input_id}%}}{{{{{{^event_type^:value_json.params.events.0.event}}|to_json}}}}{{%endif%}}"
TPL_FREQUENCY = "{{value_json.freq}}"
TPL_ENERGY = "{{value_json.aenergy.total}}"
Expand Down Expand Up @@ -394,17 +401,27 @@
}
DESCRIPTION_SENSOR_EMETER_CURRENT = {
KEY_DEVICE_CLASS: DEVICE_CLASS_CURRENT,
KEY_ENABLED_BY_DEFAULT: True,
KEY_ENABLED_BY_DEFAULT: False,
KEY_NAME: "EM{emeter_id} current",
KEY_STATE_CLASS: STATE_CLASS_MEASUREMENT,
KEY_STATE_TOPIC: TOPIC_EMETER1,
KEY_SUGGESTED_DISPLAY_PRECISION: 1,
KEY_UNIT: UNIT_AMPERE,
KEY_VALUE_TEMPLATE: TPL_CURRENT,
}
DESCRIPTION_SENSOR_EMETER_PHASE_CURRENT = {
KEY_DEVICE_CLASS: DEVICE_CLASS_CURRENT,
KEY_ENABLED_BY_DEFAULT: False,
KEY_NAME: "Phase {phase} current",
KEY_STATE_CLASS: STATE_CLASS_MEASUREMENT,
KEY_STATE_TOPIC: TOPIC_EMETER,
KEY_SUGGESTED_DISPLAY_PRECISION: 1,
KEY_UNIT: UNIT_AMPERE,
KEY_VALUE_TEMPLATE: TPL_EMETER_CURRENT,
KEY_VALUE_TEMPLATE: TPL_EMETER_PHASE_CURRENT,
}
DESCRIPTION_SENSOR_N_CURRENT = {
KEY_DEVICE_CLASS: DEVICE_CLASS_CURRENT,
KEY_ENABLED_BY_DEFAULT: True,
KEY_ENABLED_BY_DEFAULT: False,
KEY_NAME: "N current",
KEY_STATE_CLASS: STATE_CLASS_MEASUREMENT,
KEY_STATE_TOPIC: TOPIC_EMETER.format(emeter_id=0),
Expand All @@ -414,7 +431,7 @@
}
DESCRIPTION_SENSOR_TOTAL_CURRENT = {
KEY_DEVICE_CLASS: DEVICE_CLASS_CURRENT,
KEY_ENABLED_BY_DEFAULT: True,
KEY_ENABLED_BY_DEFAULT: False,
KEY_NAME: "Total current",
KEY_STATE_CLASS: STATE_CLASS_MEASUREMENT,
KEY_STATE_TOPIC: TOPIC_EMETER.format(emeter_id=0),
Expand Down Expand Up @@ -538,14 +555,24 @@
KEY_VALUE_TEMPLATE: TPL_POWER,
}
DESCRIPTION_SENSOR_EMETER_ACTIVE_POWER = {
KEY_DEVICE_CLASS: DEVICE_CLASS_POWER,
KEY_ENABLED_BY_DEFAULT: True,
KEY_NAME: "EM{emeter_id} active power",
KEY_STATE_CLASS: STATE_CLASS_MEASUREMENT,
KEY_STATE_TOPIC: TOPIC_EMETER1,
KEY_SUGGESTED_DISPLAY_PRECISION: 1,
KEY_UNIT: UNIT_WATT,
KEY_VALUE_TEMPLATE: TPL_EMETER_ACTIVE_POWER,
}
DESCRIPTION_SENSOR_EMETER_PHASE_ACTIVE_POWER = {
KEY_DEVICE_CLASS: DEVICE_CLASS_POWER,
KEY_ENABLED_BY_DEFAULT: True,
KEY_NAME: "Phase {phase} active power",
KEY_STATE_CLASS: STATE_CLASS_MEASUREMENT,
KEY_STATE_TOPIC: TOPIC_EMETER,
KEY_SUGGESTED_DISPLAY_PRECISION: 1,
KEY_UNIT: UNIT_WATT,
KEY_VALUE_TEMPLATE: TPL_EMETER_ACTIVE_POWER,
KEY_VALUE_TEMPLATE: TPL_EMETER_PHASE_ACTIVE_POWER,
}
DESCRIPTION_SENSOR_EMETER_PHASE_TOTAL_ACTIVE_ENERGY = {
KEY_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
Expand All @@ -568,6 +595,16 @@
KEY_VALUE_TEMPLATE: TPL_EMETER_PHASE_TOTAL_ACTIVE_RETURNED_ENERGY,
}
DESCRIPTION_SENSOR_EMETER_TOTAL_ACTIVE_ENERGY = {
KEY_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
KEY_ENABLED_BY_DEFAULT: True,
KEY_NAME: "EM{emeter_id} total active energy",
KEY_STATE_CLASS: STATE_CLASS_TOTAL_INCREASING,
KEY_STATE_TOPIC: TOPIC_EMDATA1,
KEY_SUGGESTED_DISPLAY_PRECISION: 1,
KEY_UNIT: UNIT_WATTH,
KEY_VALUE_TEMPLATE: TPL_EMETER1_TOTAL_ACTIVE_ENERGY,
}
DESCRIPTION_SENSOR_EMETER0_TOTAL_ACTIVE_ENERGY = {
KEY_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
KEY_ENABLED_BY_DEFAULT: True,
KEY_NAME: "Total active energy",
Expand All @@ -578,6 +615,16 @@
KEY_VALUE_TEMPLATE: TPL_EMETER_TOTAL_ACTIVE_ENERGY,
}
DESCRIPTION_SENSOR_EMETER_TOTAL_ACTIVE_RETURNED_ENERGY = {
KEY_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
KEY_ENABLED_BY_DEFAULT: True,
KEY_NAME: "EM{emeter_id} total active returned energy",
KEY_STATE_CLASS: STATE_CLASS_TOTAL_INCREASING,
KEY_STATE_TOPIC: TOPIC_EMDATA1,
KEY_SUGGESTED_DISPLAY_PRECISION: 1,
KEY_UNIT: UNIT_WATTH,
KEY_VALUE_TEMPLATE: TPL_EMETER1_TOTAL_ACTIVE_RETURNED_ENERGY,
}
DESCRIPTION_SENSOR_EMETER0_TOTAL_ACTIVE_RETURNED_ENERGY = {
KEY_DEVICE_CLASS: DEVICE_CLASS_ENERGY,
KEY_ENABLED_BY_DEFAULT: True,
KEY_NAME: "Total active returned energy",
Expand All @@ -598,14 +645,24 @@
KEY_VALUE_TEMPLATE: TPL_EMETER_TOTAL_ACTIVE_POWER,
}
DESCRIPTION_SENSOR_EMETER_APPARENT_POWER = {
KEY_DEVICE_CLASS: DEVICE_CLASS_APPARENT_POWER,
KEY_ENABLED_BY_DEFAULT: True,
KEY_NAME: "EM{emeter_id} apparent power",
KEY_STATE_CLASS: STATE_CLASS_MEASUREMENT,
KEY_STATE_TOPIC: TOPIC_EMETER1,
KEY_SUGGESTED_DISPLAY_PRECISION: 1,
KEY_UNIT: UNIT_VA,
KEY_VALUE_TEMPLATE: TPL_EMETER_APPARENT_POWER,
}
DESCRIPTION_SENSOR_EMETER_PHASE_APPARENT_POWER = {
KEY_DEVICE_CLASS: DEVICE_CLASS_APPARENT_POWER,
KEY_ENABLED_BY_DEFAULT: True,
KEY_NAME: "Phase {phase} apparent power",
KEY_STATE_CLASS: STATE_CLASS_MEASUREMENT,
KEY_STATE_TOPIC: TOPIC_EMETER,
KEY_SUGGESTED_DISPLAY_PRECISION: 1,
KEY_UNIT: UNIT_VA,
KEY_VALUE_TEMPLATE: TPL_EMETER_APPARENT_POWER,
KEY_VALUE_TEMPLATE: TPL_EMETER_PHASE_APPARENT_POWER,
}
DESCRIPTION_SENSOR_EMETER_TOTAL_APPARENT_POWER = {
KEY_DEVICE_CLASS: DEVICE_CLASS_APPARENT_POWER,
Expand Down Expand Up @@ -639,11 +696,19 @@
}
DESCRIPTION_SENSOR_EMETER_POWER_FACTOR = {
KEY_DEVICE_CLASS: DEVICE_CLASS_POWER_FACTOR,
KEY_ENABLED_BY_DEFAULT: True,
KEY_ENABLED_BY_DEFAULT: False,
KEY_NAME: "EM{emeter_id} power factor",
KEY_STATE_CLASS: STATE_CLASS_MEASUREMENT,
KEY_STATE_TOPIC: TOPIC_EMETER1,
KEY_VALUE_TEMPLATE: TPL_EMETER_POWER_FACTOR,
}
DESCRIPTION_SENSOR_EMETER_PHASE_POWER_FACTOR = {
KEY_DEVICE_CLASS: DEVICE_CLASS_POWER_FACTOR,
KEY_ENABLED_BY_DEFAULT: False,
KEY_NAME: "Phase {phase} power factor",
KEY_STATE_CLASS: STATE_CLASS_MEASUREMENT,
KEY_STATE_TOPIC: TOPIC_EMETER,
KEY_VALUE_TEMPLATE: TPL_EMETER_POWER_FACTOR,
KEY_VALUE_TEMPLATE: TPL_EMETER_PHASE_POWER_FACTOR,
}
DESCRIPTION_SENSOR_POWER_FACTOR_COVER = {
KEY_DEVICE_CLASS: DEVICE_CLASS_POWER_FACTOR,
Expand Down Expand Up @@ -737,24 +802,44 @@
KEY_VALUE_TEMPLATE: TPL_FREQUENCY,
}
DESCRIPTION_SENSOR_EMETER_FREQUENCY = {
KEY_DEVICE_CLASS: DEVICE_CLASS_FREQUENCY,
KEY_ENABLED_BY_DEFAULT: False,
KEY_NAME: "EM{emeter_id} frequency",
KEY_STATE_CLASS: STATE_CLASS_MEASUREMENT,
KEY_STATE_TOPIC: TOPIC_EMETER1,
KEY_SUGGESTED_DISPLAY_PRECISION: 0,
KEY_UNIT: UNIT_HERTZ,
KEY_VALUE_TEMPLATE: TPL_FREQUENCY,
}
DESCRIPTION_SENSOR_EMETER_PHASE_FREQUENCY = {
KEY_DEVICE_CLASS: DEVICE_CLASS_FREQUENCY,
KEY_ENABLED_BY_DEFAULT: False,
KEY_NAME: "Phase {phase} frequency",
KEY_STATE_CLASS: STATE_CLASS_MEASUREMENT,
KEY_STATE_TOPIC: TOPIC_EMETER,
KEY_SUGGESTED_DISPLAY_PRECISION: 0,
KEY_UNIT: UNIT_HERTZ,
KEY_VALUE_TEMPLATE: TPL_EMETER_FREQUENCY,
KEY_VALUE_TEMPLATE: TPL_EMETER_PHASE_FREQUENCY,
}
DESCRIPTION_SENSOR_EMETER_VOLTAGE = {
KEY_DEVICE_CLASS: DEVICE_CLASS_VOLTAGE,
KEY_ENABLED_BY_DEFAULT: True,
KEY_ENABLED_BY_DEFAULT: False,
KEY_NAME: "EM{emeter_id} voltage",
KEY_STATE_CLASS: STATE_CLASS_MEASUREMENT,
KEY_STATE_TOPIC: TOPIC_EMETER1,
KEY_SUGGESTED_DISPLAY_PRECISION: 1,
KEY_UNIT: UNIT_VOLT,
KEY_VALUE_TEMPLATE: TPL_VOLTAGE,
}
DESCRIPTION_SENSOR_EMETER_PHASE_VOLTAGE = {
KEY_DEVICE_CLASS: DEVICE_CLASS_VOLTAGE,
KEY_ENABLED_BY_DEFAULT: False,
KEY_NAME: "Phase {phase} voltage",
KEY_STATE_CLASS: STATE_CLASS_MEASUREMENT,
KEY_STATE_TOPIC: TOPIC_EMETER,
KEY_SUGGESTED_DISPLAY_PRECISION: 1,
KEY_UNIT: UNIT_VOLT,
KEY_VALUE_TEMPLATE: TPL_EMETER_VOLTAGE,
KEY_VALUE_TEMPLATE: TPL_EMETER_PHASE_VOLTAGE,
}
DESCRIPTION_SENSOR_VOLTAGE_COVER = {
KEY_DEVICE_CLASS: DEVICE_CLASS_VOLTAGE,
Expand Down Expand Up @@ -1566,31 +1651,27 @@
MODEL_PRO_EM: {
ATTR_NAME: "Shelly Pro EM",
ATTR_MODEL_ID: "SPEM-002CEBEU50",
ATTR_EMETERS: 1,
ATTR_EMETER_PHASES: ["a", "b"],
ATTR_EMETERS: 2,
ATTR_BINARY_SENSORS: {SENSOR_CLOUD: DESCRIPTION_SENSOR_CLOUD},
ATTR_BUTTONS: {BUTTON_RESTART: DESCRIPTION_BUTTON_RESTART},
ATTR_RELAYS: 1,
ATTR_SENSORS: {
SENSOR_ETH_IP: DESCRIPTION_SENSOR_ETH_IP,
SENSOR_LAST_RESTART: DESCRIPTION_SENSOR_LAST_RESTART,
SENSOR_SSID: DESCRIPTION_SENSOR_SSID,
SENSOR_WIFI_IP: DESCRIPTION_SENSOR_WIFI_IP,
SENSOR_WIFI_SIGNAL: DESCRIPTION_SENSOR_WIFI_SIGNAL,
SENSOR_DEVICE_TEMPERATURE: DESCRIPTION_SENSOR_DEVICE_TEMPERATURE,
SENSOR_TOTAL_CURRENT: DESCRIPTION_SENSOR_TOTAL_CURRENT,
SENSOR_TOTAL_ACTIVE_POWER: DESCRIPTION_SENSOR_EMETER_TOTAL_ACTIVE_POWER,
SENSOR_TOTAL_APPARENT_POWER: DESCRIPTION_SENSOR_EMETER_TOTAL_APPARENT_POWER,
SENSOR_TOTAL_ACTIVE_ENERGY: DESCRIPTION_SENSOR_EMETER_TOTAL_ACTIVE_ENERGY,
SENSOR_TOTAT_ACTIVE_RETURNED_ENERGY: DESCRIPTION_SENSOR_EMETER_TOTAL_ACTIVE_RETURNED_ENERGY,
},
ATTR_EMETER_SENSORS: {
SENSOR_ACTIVE_POWER: DESCRIPTION_SENSOR_EMETER_ACTIVE_POWER,
SENSOR_APPARENT_POWER: DESCRIPTION_SENSOR_EMETER_APPARENT_POWER,
SENSOR_CURRENT: DESCRIPTION_SENSOR_EMETER_CURRENT,
SENSOR_POWER_FACTOR: DESCRIPTION_SENSOR_EMETER_POWER_FACTOR,
SENSOR_TOTAL_ACTIVE_ENERGY: DESCRIPTION_SENSOR_EMETER_PHASE_TOTAL_ACTIVE_ENERGY,
SENSOR_TOTAT_ACTIVE_RETURNED_ENERGY: DESCRIPTION_SENSOR_EMETER_PHASE_TOTAL_ACTIVE_RETURNED_ENERGY,
SENSOR_TOTAL_ACTIVE_ENERGY: DESCRIPTION_SENSOR_EMETER_TOTAL_ACTIVE_ENERGY,
SENSOR_TOTAT_ACTIVE_RETURNED_ENERGY: DESCRIPTION_SENSOR_EMETER_TOTAL_ACTIVE_RETURNED_ENERGY,
SENSOR_VOLTAGE: DESCRIPTION_SENSOR_EMETER_VOLTAGE,
SENSOR_FREQUENCY: DESCRIPTION_SENSOR_EMETER_FREQUENCY,
},
ATTR_UPDATES: {
UPDATE_FIRMWARE: DESCRIPTION_UPDATE_FIRMWARE,
Expand All @@ -1616,18 +1697,18 @@
SENSOR_TOTAL_CURRENT: DESCRIPTION_SENSOR_TOTAL_CURRENT,
SENSOR_TOTAL_ACTIVE_POWER: DESCRIPTION_SENSOR_EMETER_TOTAL_ACTIVE_POWER,
SENSOR_TOTAL_APPARENT_POWER: DESCRIPTION_SENSOR_EMETER_TOTAL_APPARENT_POWER,
SENSOR_TOTAL_ACTIVE_ENERGY: DESCRIPTION_SENSOR_EMETER_TOTAL_ACTIVE_ENERGY,
SENSOR_TOTAT_ACTIVE_RETURNED_ENERGY: DESCRIPTION_SENSOR_EMETER_TOTAL_ACTIVE_RETURNED_ENERGY,
SENSOR_TOTAL_ACTIVE_ENERGY: DESCRIPTION_SENSOR_EMETER0_TOTAL_ACTIVE_ENERGY,
SENSOR_TOTAT_ACTIVE_RETURNED_ENERGY: DESCRIPTION_SENSOR_EMETER0_TOTAL_ACTIVE_RETURNED_ENERGY,
},
ATTR_EMETER_SENSORS: {
SENSOR_ACTIVE_POWER: DESCRIPTION_SENSOR_EMETER_ACTIVE_POWER,
SENSOR_APPARENT_POWER: DESCRIPTION_SENSOR_EMETER_APPARENT_POWER,
SENSOR_CURRENT: DESCRIPTION_SENSOR_EMETER_CURRENT,
SENSOR_POWER_FACTOR: DESCRIPTION_SENSOR_EMETER_POWER_FACTOR,
SENSOR_ACTIVE_POWER: DESCRIPTION_SENSOR_EMETER_PHASE_ACTIVE_POWER,
SENSOR_APPARENT_POWER: DESCRIPTION_SENSOR_EMETER_PHASE_APPARENT_POWER,
SENSOR_CURRENT: DESCRIPTION_SENSOR_EMETER_PHASE_CURRENT,
SENSOR_POWER_FACTOR: DESCRIPTION_SENSOR_EMETER_PHASE_POWER_FACTOR,
SENSOR_TOTAL_ACTIVE_ENERGY: DESCRIPTION_SENSOR_EMETER_PHASE_TOTAL_ACTIVE_ENERGY,
SENSOR_TOTAT_ACTIVE_RETURNED_ENERGY: DESCRIPTION_SENSOR_EMETER_PHASE_TOTAL_ACTIVE_RETURNED_ENERGY,
SENSOR_VOLTAGE: DESCRIPTION_SENSOR_EMETER_VOLTAGE,
SENSOR_FREQUENCY: DESCRIPTION_SENSOR_EMETER_FREQUENCY,
SENSOR_VOLTAGE: DESCRIPTION_SENSOR_EMETER_PHASE_VOLTAGE,
SENSOR_FREQUENCY: DESCRIPTION_SENSOR_EMETER_PHASE_FREQUENCY,
},
ATTR_UPDATES: {
UPDATE_FIRMWARE: DESCRIPTION_UPDATE_FIRMWARE,
Expand Down Expand Up @@ -1772,7 +1853,8 @@ def get_switch(relay_id, relay_type, profile):
return topic, payload

relay_name = (
device_config[f"switch:{relay_id}"].get(ATTR_NAME) or f"Relay {relay_id}"
device_config.get(f"switch:{relay_id}", {}).get(ATTR_NAME)
or f"Relay {relay_id}"
)
payload = {
KEY_NAME: relay_name,
Expand Down Expand Up @@ -1880,10 +1962,14 @@ def get_sensor(
sensor_id=None,
):
"""Create configuration for Shelly sensor entity."""
if emeter_id is not None:
if emeter_id is not None and emeter_phase is not None:
topic = encode_config_topic(
f"{disc_prefix}/sensor/{device_id}-{emeter_id}-{emeter_phase}-{sensor}/config"
)
elif emeter_id is not None and emeter_phase is None:
topic = encode_config_topic(
f"{disc_prefix}/sensor/{device_id}-{emeter_id}-{sensor}/config"
)
elif cover_id is not None:
topic = encode_config_topic(
f"{disc_prefix}/sensor/{device_id}-cover-{cover_id}-{sensor}/config"
Expand Down Expand Up @@ -1920,9 +2006,12 @@ def get_sensor(
)
unique_id = f"{device_id}-{relay_id}-{sensor}".lower()
sensor_name = f"{switch_name} {description[KEY_NAME]}"
elif emeter_id is not None:
elif emeter_id is not None and emeter_phase is not None:
unique_id = f"{device_id}-{emeter_id}-{emeter_phase}-{sensor}".lower()
sensor_name = description[KEY_NAME].format(phase=emeter_phase.upper())
elif emeter_id is not None and emeter_phase is None:
unique_id = f"{device_id}-{emeter_id}-{sensor}".lower()
sensor_name = description[KEY_NAME].format(emeter_id=emeter_id)
elif sensor_id is not None:
unique_id = f"{device_id}-{sensor_id}-{sensor}".lower()
sensor_name = device_config[f"{sensor}:{sensor_id}"][ATTR_NAME] or description[
Expand All @@ -1948,7 +2037,7 @@ def get_sensor(
if expire_after:
payload[KEY_EXPIRE_AFTER] = expire_after

if emeter_id is not None:
if emeter_id is not None and emeter_phase is not None:
payload[KEY_VALUE_TEMPLATE] = description[KEY_VALUE_TEMPLATE].format(
phase=emeter_phase
)
Expand Down Expand Up @@ -2208,11 +2297,16 @@ def configure_device():
config[topic] = payload

for emeter_id in range(emeters):
for phase in emeter_phases:
if emeter_phases:
for phase in emeter_phases:
for sensor, description in emeter_sensors.items():
topic, payload = get_sensor(
sensor, description, emeter_id=emeter_id, emeter_phase=phase
)
config[topic] = payload
else:
for sensor, description in emeter_sensors.items():
topic, payload = get_sensor(
sensor, description, emeter_id=emeter_id, emeter_phase=phase
)
topic, payload = get_sensor(sensor, description, emeter_id=emeter_id)
config[topic] = payload

for relay_id in range(relays):
Expand Down

0 comments on commit 13e6981

Please sign in to comment.