@LotF I’m only just learning how to write an external converter myself but here is what I can suggest.
You need to add a ‘deviceAddCustomCluser’ section to the extend section and list the cluster and attributes for it to show in the exposes and dev console tabs. If you get that right you will be able to set and read values for those cluster attributes.
You also need to add a converter (enumLookup or binary or numeric etc) if you want those values to be read or sent as part of the mqtt messages.
I don’t have the device so I can’t test anything but here is a sample external converter that might get you part of the way. I’ve entered the values from that very helpful device manual.
This partial external converter has added custom clusters for both 0xfd00 and 0xfd03. All the attributes are listed for 0xfd00 but I’ve only listed the first attribute for 0xfd03. I’ve included one enum converter for switch type attribute. If that works it might be enough for you and you can add the others only if you need them.
Note: I’m hoping this external converter for the zga004 will take precedence over the default definition but I’m not sure how that all works. I’ve only ever played with external converters for devices that aren’t built-in to zigbee2mqtt.
const {
commandsLevelCtrl,
commandsOnOff,
commandsWindowCovering,
deviceEndpoints,
deviceTemperature,
electricityMeter,
identify,
onOff,
windowCovering,
deviceAddCustomCluster,
binary,
enumLookup,
numeric,
} = require('zigbee-herdsman-converters/lib/modernExtend');
const definitions = [
{
zigbeeModel: ['ZGA004'],
model: 'ZGA004',
vendor: 'Aeotec',
description: 'Pico shutter',
extend: [
deviceEndpoints({endpoints: {'1': 1, '2': 2, '3': 3, '4': 4, '5': 5}}),
deviceTemperature(),
identify(),
windowCovering({controls: ['lift', 'tilt']}),
commandsWindowCovering({legacyAction: false, endpointNames: ['3']}),
commandsOnOff({endpointNames: ['4', '5']}),
commandsLevelCtrl({endpointNames: ['4', '5']}),
deviceAddCustomCluster('manuSpecificAeotecSwitchType', {
ID: 0xfd00,
manufacturerCode: 0x1310,
attributes: {
switchType: {ID: 0x0000, type: 0x30}, // ENUM8
switchActions: {ID: 0x0010, type: 0x30}, // ENUM8
controls: {ID: 0x0011, type: 0x30}, // ENUM8
groupID: {ID: 0x0012, type: 0x21}, // UINT16
},
commands: {},
commandsResponse: {},
}),
enumLookup({
name: 'switch_type',
lookup: {toggle: 0, momentary: 1, 'into_auto_recognise_mode': 4},
cluster: 'manuSpecificAeotecSwitchType',
attribute: 'switchType',
description: 'Choose the switch type',
zigbeeCommandOptions: {manufacturerCode: 0x1310},
access: 'STATE_SET',
}),
deviceAddCustomCluster('manuSpecificAeotecWindowConfig', {
ID: 0xfd03,
manufacturerCode: 0x1310,
attributes: {
operatingModes: {ID: 0x0001, type: 0x20}, // UINT8
},
commands: {},
commandsResponse: {},
}),
],
},
];
module.exports = definitions;