Repository: zigpy/zha-device-handlers

Issue:
[Device Support Request] LEDVANCE/Osram Gardenpole RGBW-Lightify
**Is your feature request related to a problem? Please describe.**
It's currently not possible to set the power on state on LEDVANCE/(Osram) Gardenpole Lights.

**Describe the solution you'd like**
To add the 0x01 (save_defaults) command in the 0xfc01 cluster to store the default state.
(This seems like the way for pretty much all LEDVANCE/Osram lights that exist.)

**Device signature**
```
{
  "node_descriptor": "<Optional byte1=1 byte2=64 mac_capability_flags=142 manufacturer_code=48042 maximum_buffer_size=64 maximum_incoming_transfer_size=0 server_mask=0 maximum_outgoing_transfer_size=0 descriptor_capability_field=3>",
  "endpoints": {
    "3": {
      "profile_id": 49246,
      "device_type": "0x0210",
      "in_clusters": [
        "0x0000",
        "0x0003",
        "0x0004",
        "0x0005",
        "0x0006",
        "0x0008",
        "0x0300",
        "0x1000",
        "0xfc0f"
      ],
      "out_clusters": [
        "0x0019"
      ]
    }
  },
  "manufacturer": "OSRAM",
  "model": "Gardenpole RGBW-Lightify",
  "class": "zigpy.device.Device"
}
```

**Additional context**
The "save_defaults" command already seems to be well-implemented for two models, so I guess the same thing should work for this too.



Discussion:

Resolving patch:
diff --git a/zhaquirks/osram/gardenpolesrgbw.py b/zhaquirks/osram/gardenpolesrgbw.py
new file mode 100644
--- /dev/null
+++ b/zhaquirks/osram/gardenpolesrgbw.py
@@ -0,0 +1,74 @@
+"""Osram RGBW Gardenpoles."""
+from zigpy.profiles import zll
+from zigpy.quirks import CustomDevice
+from zigpy.zcl.clusters.general import (
+    Basic,
+    Groups,
+    Identify,
+    LevelControl,
+    OnOff,
+    Ota,
+    Scenes,
+)
+from zigpy.zcl.clusters.lighting import Color
+from zigpy.zcl.clusters.lightlink import LightLink
+
+from . import OSRAM, OsramLightCluster
+from ..const import (
+    DEVICE_TYPE,
+    ENDPOINTS,
+    INPUT_CLUSTERS,
+    MODELS_INFO,
+    OUTPUT_CLUSTERS,
+    PROFILE_ID,
+)
+
+
+class GardenpoleRGBW(CustomDevice):
+    """Osram Gardenpole RGBW-Lightify."""
+
+    signature = {
+        # <SimpleDescriptor endpoint=3 profile=49246 device_type=528
+        # device_version=2 input_clusters=[0, 3, 4, 5, 6, 8, 768, 4096, 64527]
+        # output_clusters=[25]>
+        MODELS_INFO: [(OSRAM, "Gardenpole RGBW-Lightify")],
+        ENDPOINTS: {
+            3: {
+                PROFILE_ID: zll.PROFILE_ID,
+                DEVICE_TYPE: zll.DeviceType.EXTENDED_COLOR_LIGHT,
+                INPUT_CLUSTERS: [
+                    Basic.cluster_id,
+                    Identify.cluster_id,
+                    Groups.cluster_id,
+                    Scenes.cluster_id,
+                    OnOff.cluster_id,
+                    LevelControl.cluster_id,
+                    Color.cluster_id,
+                    LightLink.cluster_id,
+                    OsramLightCluster.cluster_id,
+                ],
+                OUTPUT_CLUSTERS: [Ota.cluster_id],
+            }
+        },
+    }
+
+    replacement = {
+        ENDPOINTS: {
+            3: {
+                PROFILE_ID: zll.PROFILE_ID,
+                DEVICE_TYPE: zll.DeviceType.EXTENDED_COLOR_LIGHT,
+                INPUT_CLUSTERS: [
+                    Basic.cluster_id,
+                    Identify.cluster_id,
+                    Groups.cluster_id,
+                    Scenes.cluster_id,
+                    OnOff.cluster_id,
+                    LevelControl.cluster_id,
+                    Color.cluster_id,
+                    LightLink.cluster_id,
+                    OsramLightCluster,
+                ],
+                OUTPUT_CLUSTERS: [Ota.cluster_id],
+            }
+        }
+    }


Test patch: