@@ -936,11 +936,17 @@ void SetupMQTTClient() {
936936 if (MainsMeter.Type ) {
937937 MQTTclient.announce (" Mains Import Active Energy" , " sensor" , optional_payload);
938938 MQTTclient.announce (" Mains Export Active Energy" , " sensor" , optional_payload);
939+ MQTTclient.announce (" Mains Energy L1" , " sensor" , optional_payload);
940+ MQTTclient.announce (" Mains Energy L2" , " sensor" , optional_payload);
941+ MQTTclient.announce (" Mains Energy L3" , " sensor" , optional_payload);
939942 }
940943
941944 if (EVMeter.Type ) {
942945 MQTTclient.announce (" EV Import Active Energy" , " sensor" , optional_payload);
943946 MQTTclient.announce (" EV Export Active Energy" , " sensor" , optional_payload);
947+ MQTTclient.announce (" EV Energy L1" , " sensor" , optional_payload);
948+ MQTTclient.announce (" EV Energy L2" , " sensor" , optional_payload);
949+ MQTTclient.announce (" EV Energy L3" , " sensor" , optional_payload);
944950 // set the parameters for and MQTTclient.announce other sensor entities:
945951 optional_payload = MQTTclient.jsna (" device_class" ," power" ) + MQTTclient.jsna (" unit_of_measurement" ," W" ) + MQTTclient.jsna (" state_class" ," measurement" );
946952 MQTTclient.announce (" EV Charge Power" , " sensor" , optional_payload);
@@ -1110,6 +1116,13 @@ void mqttPublishData() {
11101116 mqtt_pub_int (MQTT_SLOT_MAINS_POWER_L1, " /MainsPowerL1" , MainsMeter.Power [0 ], false , now_s);
11111117 mqtt_pub_int (MQTT_SLOT_MAINS_POWER_L2, " /MainsPowerL2" , MainsMeter.Power [1 ], false , now_s);
11121118 mqtt_pub_int (MQTT_SLOT_MAINS_POWER_L3, " /MainsPowerL3" , MainsMeter.Power [2 ], false , now_s);
1119+ // Zero-value guard: suppress per-phase energy when meter hasn't reported it
1120+ if (MainsMeter.EnergyPhase [0 ] > 0 )
1121+ mqtt_pub_int (MQTT_SLOT_MAINS_ENERGY_L1, " /MainsEnergyL1" , MainsMeter.EnergyPhase [0 ], false , now_s);
1122+ if (MainsMeter.EnergyPhase [1 ] > 0 )
1123+ mqtt_pub_int (MQTT_SLOT_MAINS_ENERGY_L2, " /MainsEnergyL2" , MainsMeter.EnergyPhase [1 ], false , now_s);
1124+ if (MainsMeter.EnergyPhase [2 ] > 0 )
1125+ mqtt_pub_int (MQTT_SLOT_MAINS_ENERGY_L3, " /MainsEnergyL3" , MainsMeter.EnergyPhase [2 ], false , now_s);
11131126 }
11141127 if (EVMeter.Type ) {
11151128 mqtt_pub_int (MQTT_SLOT_EV_L1, " /EVCurrentL1" , EVMeter.Irms [0 ], false , now_s);
@@ -1123,6 +1136,12 @@ void mqttPublishData() {
11231136 mqtt_pub_int (MQTT_SLOT_EV_POWER_L1, " /EVPowerL1" , EVMeter.Power [0 ], false , now_s);
11241137 mqtt_pub_int (MQTT_SLOT_EV_POWER_L2, " /EVPowerL2" , EVMeter.Power [1 ], false , now_s);
11251138 mqtt_pub_int (MQTT_SLOT_EV_POWER_L3, " /EVPowerL3" , EVMeter.Power [2 ], false , now_s);
1139+ if (EVMeter.EnergyPhase [0 ] > 0 )
1140+ mqtt_pub_int (MQTT_SLOT_EV_ENERGY_L1, " /EVEnergyL1" , EVMeter.EnergyPhase [0 ], false , now_s);
1141+ if (EVMeter.EnergyPhase [1 ] > 0 )
1142+ mqtt_pub_int (MQTT_SLOT_EV_ENERGY_L2, " /EVEnergyL2" , EVMeter.EnergyPhase [1 ], false , now_s);
1143+ if (EVMeter.EnergyPhase [2 ] > 0 )
1144+ mqtt_pub_int (MQTT_SLOT_EV_ENERGY_L3, " /EVEnergyL3" , EVMeter.EnergyPhase [2 ], false , now_s);
11261145 }
11271146 mqtt_pub_int (MQTT_SLOT_ESP_TEMP, " /ESPTemp" , TempEVSE, false , now_s);
11281147 mqtt_pub_str (MQTT_SLOT_MODE, " /Mode" , AccessStatus == OFF ? " Off" : AccessStatus == PAUSE ? " Pause" : Mode > 3 ? " N/A" : StrMode[Mode], true , now_s);
0 commit comments