Tuya 120v tube motor, Blinds/cover, TS0601 - TZE204_xtrnjaoz

Hello, I am looking to integrate these new tube motors with home assistant.
I can not seem to find any info on making these work, and am tempted to buy a Tuya hub for integration.

I cant get Home Assistant to show any controls

Signature:

{
  "node_descriptor": {
    "logical_type": 1,
    "complex_descriptor_available": 0,
    "user_descriptor_available": 0,
    "reserved": 0,
    "aps_flags": 0,
    "frequency_band": 8,
    "mac_capability_flags": 142,
    "manufacturer_code": 4417,
    "maximum_buffer_size": 66,
    "maximum_incoming_transfer_size": 66,
    "server_mask": 10752,
    "maximum_outgoing_transfer_size": 66,
    "descriptor_capability_field": 0
  },
  "endpoints": {
    "1": {
      "profile_id": "0x0104",
      "device_type": "0x0051",
      "input_clusters": [
        "0x0000",
        "0x0004",
        "0x0005",
        "0xef00"
      ],
      "output_clusters": [
        "0x000a",
        "0x0019"
      ]
    },
    "242": {
      "profile_id": "0xa1e0",
      "device_type": "0x0061",
      "input_clusters": [],
      "output_clusters": [
        "0x0021"
      ]
    }
  },
  "manufacturer": "_TZE204_xtrnjaoz",
  "model": "TS0601",
  "class": "zigpy.device.Device"
}

I have tried a few different Quirks but was unsuccessful for these cover motors.

With this custom Quirks it mostly works. If I set the configuration state to open, it will open, but not when i use the controls action. Therefor not only do controls not work but I can not set open percentage.

"""Tuya TRV."""

from zigpy.quirks.v2 import EntityPlatform
from zigpy.types import t
from zigpy.zcl.clusters.closures import WindowCovering

from zhaquirks.tuya import TuyaLocalCluster
from zhaquirks.tuya.builder import TuyaQuirkBuilder


class TuyaCoverState(t.enum8):
    """Tuya Cover State enum."""

    Open = 0x00
    Stop = 0x01
    Close = 0x02


class TuyaOpeningMode(t.enum8):
    """Tuya Opening Mode enum."""

    Tilt = 0x00
    Lift = 0x01


class TuyaWorkState(t.enum8):
    """Tuya Work State enum."""

    Standby = 0x00
    Success = 0x01
    Learning = 0x02


class TuyaMotorDirection(t.enum8):
    """Tuya Motor Direction enum."""

    Left = 0x00
    Right = 0x01


class TuyaSetUpperLimit(t.enum8):
    """Tuya Set Upper Limit enum."""

    Stop = 0x00
    Start = 0x01


class TuyaCoveringCluster(WindowCovering, TuyaLocalCluster):
    """Tuya Window Covering Cluster."""


(
    TuyaQuirkBuilder("_TZE200_cpbo62rn", "TS0601")
    .applies_to("_TZE200_libht6ua", "TS0601")
    .applies_to("_TZE204_xtrnjaoz", "TS0601")
    .tuya_enum(
        dp_id=1,
        attribute_name="state",
        enum_class=TuyaCoverState,
        translation_key="state",
        fallback_name="State",
    )
    .tuya_dp(
        dp_id=2,
        ep_attribute=TuyaCoveringCluster.ep_attribute,
        attribute_name=WindowCovering.AttributeDefs.current_position_lift_percentage.name,
        converter=lambda x: 100 - x,
    )
    .tuya_dp(
        dp_id=3,
        ep_attribute=TuyaCoveringCluster.ep_attribute,
        attribute_name=WindowCovering.AttributeDefs.current_position_lift_percentage.name,
        converter=lambda x: 100 - x,
    )
    .tuya_dp(
        dp_id=4,
        ep_attribute=TuyaCoveringCluster.ep_attribute,
        attribute_name=WindowCovering.AttributeDefs.window_covering_mode.name,
        converter=lambda x: WindowCovering.WindowCoveringType.Rollershade
        if x == TuyaOpeningMode.Lift
        else WindowCovering.WindowCoveringType.Shutter,
        dp_converter=lambda x: TuyaOpeningMode.Lift
        if x == WindowCovering.WindowCoveringType.Rollershade
        else TuyaOpeningMode.Tilt,
    )
    .tuya_enum(
        dp_id=7,
        attribute_name="work_state",
        enum_class=TuyaWorkState,
        entity_platform=EntityPlatform.SENSOR,
        translation_key="work_state",
        fallback_name="Work state",
    )
    .tuya_battery(dp_id=13)
    .tuya_enum(
        dp_id=101,
        attribute_name="motor_direction",
        enum_class=TuyaMotorDirection,
        translation_key="motor_direction",
        fallback_name="Motor direction",
    )
    .tuya_enum(
        dp_id=102,
        attribute_name="set_upper_limit",
        enum_class=TuyaSetUpperLimit,
        translation_key="set_upper_limit",
        fallback_name="Set upper limit",
    )
    .adds(TuyaCoveringCluster)
    # 107 is factory reset, but z2m just throws an error saying you can't
    .skip_configuration()
    .add_to_registry()
)

I have the same motor, here is the custom converter for zigbee2mqtt:

const fz = require('zigbee-herdsman-converters/converters/fromZigbee');
const tz = require('zigbee-herdsman-converters/converters/toZigbee');
const exposes = require('zigbee-herdsman-converters/lib/exposes');
const reporting = require('zigbee-herdsman-converters/lib/reporting');
const modernExtend = require('zigbee-herdsman-converters/lib/modernExtend');
const e = exposes.presets;
const ea = exposes.access;
const tuya = require('zigbee-herdsman-converters/lib/tuya');

const definition = {
    fingerprint: [
        {
            modelID: 'TS0601',
            manufacturerName: '_TZE204_xtrnjaoz',
        },
    ],
    model: '_TZE204_xtrnjaoz',
    vendor: 'Moes',
    description: 'Smart Curtain Motor',
    fromZigbee: [tuya.fz.datapoints],
    toZigbee: [tuya.tz.datapoints],
    onEvent: tuya.onEventSetTime,
    configure: tuya.configureMagicPacket,
    exposes: [
      e.cover_position().setAccess('position', ea.STATE_SET),
      e.enum('motor_direction', ea.STATE_SET, ['forward', 'back']).withDescription('Set the motor direction'),
    ],
    meta: {
        tuyaDatapoints: [
          [1, 'state', tuya.valueConverterBasic.lookup({'OPEN': tuya.enum(0), 'STOP': tuya.enum(1), 'CLOSE': tuya.enum(2)})],
          [9, 'position', tuya.valueConverter.coverPositionInverted],
          [8, 'position', tuya.valueConverter.coverPositionInverted],
          [11, 'motor_direction', tuya.valueConverterBasic.lookup({'forward': tuya.enum(0), 'back': tuya.enum(1)})],
        ],
    },
};

module.exports = definition;