Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix support for Shelly Pro EM #273

Merged
merged 5 commits into from
Sep 14, 2023
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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
Loading