### Link
https://www.emos-shop.de/gosmart-zigbee-steckdose-ip-3010s
### Databa…se entry
{"id":49,"type":"Router","ieeeAddr":"0xa4c13825b39dd093","nwkAddr":63026,"manufId":4417,"manufName":"_TZ3000_npg02xft","powerSource":"Mains (single phase)","modelId":"TS011F","epList":[1,242],"endpoints":{"1":{"profId":260,"epId":1,"devId":266,"inClusterList":[3,4,5,6,1794,2820,57344,57345,0],"outClusterList":[25,10],"clusters":{"genBasic":{"attributes":{"65503":"m��0\u0017","65506":54,"65508":0,"65534":0,"modelId":"TS011F","manufacturerName":"_TZ3000_npg02xft","powerSource":1,"zclVersion":3,"appVersion":192,"stackVersion":0,"hwVersion":1,"dateCode":""}},"genOnOff":{"attributes":{"32768":0,"onOff":1,"onTime":0,"offWaitTime":0,"tuyaBacklightMode":1,"moesStartUpOnOff":0,"tuyaBacklightSwitch":1}},"manuSpecificTuya3":{"attributes":{"53248":0,"53249":0,"53250":0,"53251":0,"53252":0,"53253":0,"powerOnBehavior":0,"switchType":0}},"haElectricalMeasurement":{"attributes":{"rmsVoltage":237,"rmsCurrent":53,"activePower":8,"acCurrentDivisor":1000,"acCurrentMultiplier":1}},"seMetering":{"attributes":{"currentSummDelivered":0,"divisor":100,"multiplier":1}}},"binds":[{"cluster":6,"type":"endpoint","deviceIeeeAddress":"0x048727fffe1ea89a","endpointID":1},{"cluster":2820,"type":"endpoint","deviceIeeeAddress":"0x048727fffe1ea89a","endpointID":1},{"cluster":1794,"type":"endpoint","deviceIeeeAddress":"0x048727fffe1ea89a","endpointID":1}],"configuredReportings":[{"cluster":2820,"attrId":1285,"minRepIntval":5,"maxRepIntval":3600,"repChange":5},{"cluster":2820,"attrId":1288,"minRepIntval":5,"maxRepIntval":3600,"repChange":50},{"cluster":2820,"attrId":1291,"minRepIntval":5,"maxRepIntval":3600,"repChange":10},{"cluster":1794,"attrId":0,"minRepIntval":5,"maxRepIntval":3600,"repChange":257}],"meta":{}},"242":{"profId":41440,"epId":242,"devId":97,"inClusterList":[],"outClusterList":[33],"clusters":{},"binds":[],"configuredReportings":[],"meta":{}}},"appVersion":192,"stackVersion":0,"hwVersion":1,"dateCode":"","zclVersion":3,"interviewCompleted":true,"interviewState":"SUCCESSFUL","meta":{"configured":332242049},"lastSeen":1765487924363}
### Zigbee2MQTT version
2.7.1 (unknown)
### External converter
```JavaScript
import * as tuya from 'zigbee-herdsman-converters/lib/tuya';
import * as fz from 'zigbee-herdsman-converters/converters/fromZigbee';
import * as reporting from 'zigbee-herdsman-converters/lib/reporting';
import * as utils from 'zigbee-herdsman-converters/lib/utils';
import * as globalStore from 'zigbee-herdsman-converters/lib/store';
const fzLocal = {
TS011F_electrical_measurement: {
...fz.electrical_measurement,
convert: (model, msg, publish, options, meta) => {
const result = (fz.electrical_measurement.convert(model, msg, publish, options, meta) ) ?? {};
const lookup = {
power: "activePower",
current: "rmsCurrent",
voltage: "rmsVoltage",
};
// Wait 5 seconds before reporting a 0 value as this could be an invalid measurement.
// https://github.com/Koenkk/zigbee2mqtt/issues/16709#issuecomment-1509599046
if (result) {
for (const key of ["power", "current", "voltage"]) {
if (key in result) {
const value = result[key];
clearTimeout(globalStore.getValue(msg.endpoint, key));
if (value === 0) {
const configuredReporting = msg.endpoint.configuredReportings.find(
(c) => c.cluster.name === "haElectricalMeasurement" && c.attribute.name === lookup[key],
);
const time = (configuredReporting ? configuredReporting.minimumReportInterval : 5) * 2 + 1;
globalStore.putValue(
msg.endpoint,
key,
setTimeout(() => {
const payload = {[key]: value};
// Device takes a lot of time to report power 0 in some cases. When current == 0 we can assume power == 0
// https://github.com/Koenkk/zigbee2mqtt/discussions/19680#discussioncomment-7868445
if (key === "current") {
payload.power = 0;
}
publish(payload);
}, time * 1000),
);
delete result[key];
}
}
}
}
// Device takes a lot of time to report power 0 in some cases. When the state is OFF we can assume power == 0
// https://github.com/Koenkk/zigbee2mqtt/discussions/19680#discussioncomment-7868445
if (meta.state.state === "OFF") {
result.power = 0;
}
return result;
},
}
}
export default {
// Note: below you will find the TS011F_plug_2 and TS011F_plug_3. These are identified via a fingerprint and
// thus preferred above the TS011F_plug_1 if the fingerprint matches
zigbeeModel: ["TS011F"],
model: "TS011F_plug_1",
description: "Smart plug (with power monitoring)",
vendor: "Tuya",
whiteLabel: [
{vendor: "LELLKI", model: "TS011F_plug"},
{vendor: "Neo", model: "NAS-WR01B"},
{vendor: "BlitzWolf", model: "BW-SHP15"},
{vendor: "BlitzWolf", model: "BW-SHP13"},
{vendor: "MatSee Plus", model: "PJ-ZSW01"},
{vendor: "MODEMIX", model: "MOD037"},
{vendor: "MODEMIX", model: "MOD048"},
{vendor: "Coswall", model: "CS-AJ-DE2U-ZG-11"},
{vendor: "Aubess", model: "TS011F_plug_1"},
tuya.whitelabel("BSEED", "FK86ZEUSK1W", "Wall-mounted electrical socket", ["_TZ3000_4ux0ondb"]),
tuya.whitelabel("Nous", "A1Z", "Smart plug (with power monitoring)", ["_TZ3000_2putqrmw", "_TZ3000_ksw8qtmt"]),
tuya.whitelabel("Moes", "Moes_plug", "Smart plug (with power monitoring)", ["_TZ3000_yujkchbz"]),
tuya.whitelabel("Moes", "ZK-EU", "Smart wallsocket (with power monitoring)", ["_TZ3000_ss98ec5d"]),
tuya.whitelabel("Elivco", "LSPA9", "Smart plug (with power monitoring)", ["_TZ3000_okaz9tjs"]),
tuya.whitelabel("PSMART", "T440", "Smart wallsocket (with power monitoring)", ["_TZ3000_y4ona9me"]),
tuya.whitelabel("Nous", "A6Z", "Outdoor smart socket", ["_TZ3000_266azbg3"]),
tuya.whitelabel("Nedis", "ZBPO130FWT", "Outdoor smart plug (with power monitoring)", ["_TZ3000_3ias4w4o"]),
tuya.whitelabel("Nous", "A9Z", "Smart ZigBee Socket", ["_TZ3210_ddigca5n"]),
tuya.whitelabel("Girier", "JR-ZPM01", "Smart Plug", ["_TZ3000_ww6drja5"]),
tuya.whitelabel("Nous", "A7Z", "Smart ZigBee Socket", ["_TZ3210_rwmitwj4"]),
tuya.whitelabel("Zbeacon", "TS011F_plug_1", "Smart plug (with power monitoring)", ["Zbeacon"]),
// This is the new device - and the only change of this converter:
tuya.whitelabel("EMOS", "IP-3010S", "Outdoor smart plug (with power monitoring)", ["_TZ3000_npg02xft"]),
],
ota: true,
extend: [
tuya.modernExtend.tuyaOnOff({
electricalMeasurements: true,
electricalMeasurementsFzConverter: fzLocal.TS011F_electrical_measurement,
powerOutageMemory: true,
indicatorMode: true,
childLock: true,
onOffCountdown: true,
}),
],
configure: async (device, coordinatorEndpoint) => {
await tuya.configureMagicPacket(device, coordinatorEndpoint);
const endpoint = device.getEndpoint(1);
await reporting.bind(endpoint, coordinatorEndpoint, ["genOnOff", "haElectricalMeasurement", "seMetering"]);
await reporting.rmsVoltage(endpoint, {change: 5});
await reporting.rmsCurrent(endpoint, {change: 50});
if (!["_TZ3000_0zfrhq4i", "_TZ3000_okaz9tjs", "_TZ3000_typdpbpg", "_TZ3000_ww6drja5", "Zbeacon"].includes(device.manufacturerName)) {
// Gives INVALID_DATA_TYPE error for _TZ3000_0zfrhq4i (as well as a few others in issue 20028)
// https://github.com/Koenkk/zigbee2mqtt/discussions/19680#discussioncomment-7667035
await reporting.activePower(endpoint, {change: 10});
}
await reporting.currentSummDelivered(endpoint);
const acCurrentDivisor = device.manufacturerName === "_TZ3000_typdpbpg" ? 2000 : 1000;
endpoint.saveClusterAttributeKeyValue("haElectricalMeasurement", {
acCurrentDivisor,
acCurrentMultiplier: 1,
});
endpoint.saveClusterAttributeKeyValue("seMetering", {
divisor: 100,
multiplier: 1,
});
utils.attachOutputCluster(device, "genOta");
device.save();
},
}
```
### What does/doesn't work with the external definition?
Had to add a new device for the missing "GoSmart Zigbee-Steckdose IP-3010S", which is a whitelabelled version of Tuya TS011F_plug_1.
Since the energy and current readings were totally off, I needed to adjust this converter to my needs.
The code is a copy of this issue with only one line added (line 90): https://github.com/Koenkk/zigbee2mqtt/discussions/19680
You can use this image for the new device:

### Notes
software_build_id: `undefined`
date_code: ``
endpoints:
```json
{"1":{"clusters":{"input":["genIdentify","genGroups","genScenes","genOnOff","seMetering","haElectricalMeasurement","57344","manuSpecificTuya3","genBasic"],"output":["genOta","genTime"]}},"242":{"clusters":{"input":[],"output":["greenPower"]}}}
```