New app - device handler UI

I’ve been trying to use the custom capability integration to migrate some of my device handler but not only this does not work but removing existing capability does not remove UI elements in the new app. My understanding is that in the new app, each capability would have it’s own set of UI and thus, removing them should remove them in the UI but that does not seems to be the case. Can someone tell me what I am missing here?

metadata {
definition(name: “Aeon Labs Smart Switch 6 Gen5 (jbisson)”, namespace: “jbisson”, author: “Jonathan Bisson”, mnmn: “SmartThingsCommunity”) {

   // Base on https://community.smartthings.com/t/new-z-wave-fingerprint-format/48204
    fingerprint mfr: "0086", prod: "0103", model: "0060" // Aeon brand
      fingerprint mfr: "0086", prod: "0003", model: "004B" // Foxx Project (UK)
    fingerprint mfr: "0134", prod: "0259", model: "0096" // AT&T rebrand
    fingerprint type: "1001", cc: "5E,25,26,33,70,27,32,81,85,59,72,86,7A,73", ccOut: "5A,82"
}

tiles(scale: 2) {
    multiAttributeTile(name: "mainPanel", type: "lighting", width: 6, height: 4, canChangeIcon: true) {
        tileAttribute("device.switch", key: "PRIMARY_CONTROL") {
            attributeState "on", label: '${name}', action: "switch.off", icon: "st.Appliances.appliances17", backgroundColor: "#00a0dc", nextState: "turningOff"
            attributeState "off", label: '${name}', action: "switch.on", icon: "st.Appliances.appliances17", backgroundColor: "#ffffff", nextState: "turningOn"
            attributeState "turningOn", label: '${name}', action: "switch.off", icon: "st.Appliances.appliances17", backgroundColor: "#00a0dc", nextState: "turningOff"
            attributeState "turningOff", label: '${name}', action: "switch.on", icon: "st.Appliances.appliances17", backgroundColor: "#ffffff", nextState: "turningOn"
        }
        tileAttribute("statusText3", key: "SECONDARY_CONTROL") {
            attributeState "statusText3", label: '${currentValue}'
        }
    }
    standardTile("deviceMode", "deviceMode", canChangeIcon: true, canChangeBackground: false, width: 2, height: 2) {
        state "energy", label: 'energy', action: "momentary", icon: "http://mail.lgk.com/aeonv6orange.png"
        state "momentary", label: 'momentary', action: "nightLight", icon: "http://mail.lgk.com/aeonv6white.png"
        state "nightLight", label: 'NightLight', action: "energy", icon: "http://mail.lgk.com/aeonv6blue.png"
    }

    valueTile("energy", "device.energy", width: 2, height: 1, decoration: "flat") {
        state "default", label: '${currentValue} kWh'
    }

    valueTile("amperage", "device.amperage", width: 2, height: 1, decoration: "flat") {
        state "default", label: '${currentValue} A'
    }

    valueTile("voltage", "device.voltage", width: 4, height: 1, decoration: "flat") {
        state "default", label: '${currentValue} v'
    }

    valueTile("currentEnergyCostTxt", "currentEnergyCostTxt", width: 2, height: 1, decoration: "flat") {
        state "default", label: 'Energy Cost (Current):'
    }

    valueTile("currentEnergyCostHour", "currentEnergyCostHour", width: 1, height: 1, decoration: "flat") {
        state "default", label: 'Per\nHour\n$${currentValue}'
    }

    valueTile("currentEnergyCostWeek", "currentEnergyCostWeek", width: 1, height: 1, decoration: "flat") {
        state "default", label: 'Per\nWeek\n$${currentValue}'
    }

    valueTile("currentEnergyCostMonth", "currentEnergyCostMonth", width: 1, height: 1, decoration: "flat") {
        state "default", label: 'Per\nMonth\n$${currentValue}'
    }

    valueTile("currentEnergyCostYear", "currentEnergyCostYear", width: 1, height: 1, decoration: "flat") {
        state "default", label: 'Per\nYear\n$${currentValue}'
    }

    valueTile("cumulativeEnergyCostTxt", "cumulativeEnergyCostTxt", width: 2, height: 1, decoration: "flat") {
        state "default", label: 'Energy Cost (Cumulative)\nSince ${currentValue}:'
    }

    valueTile("cumulativeEnergyCostHour", "cumulativeEnergyCostHour", width: 1, height: 1, decoration: "flat") {
        state "default", label: 'Per\nHour \n$${currentValue}'
    }

    valueTile("cumulativeEnergyCostWeek", "cumulativeEnergyCostWeek", width: 1, height: 1, decoration: "flat") {
        state "default", label: 'Per\nWeek\n$${currentValue}'
    }

    valueTile("cumulativeEnergyCostMonth", "cumulativeEnergyCostMonth", width: 1, height: 1, decoration: "flat") {
        state "default", label: 'Per\nMonth\n$${currentValue}'
    }

    valueTile("cumulativeEnergyCostYear", "cumulativeEnergyCostYear", width: 1, height: 1, decoration: "flat") {
        state "default", label: 'Per\nYear \n$${currentValue}'
    }

    controlTile("levelSliderControl", "device.brightnessLevel", "slider", width: 2, height: 1) {
        state "level", action: "switch level.setLevel"
    }

    valueTile("levelSliderTxt", "device.brightnessLevel", decoration: "flat") {
        state "brightnessLevel", label: '${currentValue} %'
    }

    standardTile("refresh", "device.switch", decoration: "flat", width: 2, height: 2) {
        state "default", label: "", action: "refresh.refresh", icon: "st.secondary.refresh"
    }

    standardTile("reset", "device.energy", decoration: "flat", width: 2, height: 2) {
        state "default", label: 'reset', action: "reset", icon: "st.secondary.refresh-icon"
    }

    standardTile("configure", "device.power", inactiveLabel: false, decoration: "flat", width: 1, height: 1) {
        state "configure", label: '', action: "configuration.configure", icon: "st.secondary.configure"
    }

    valueTile("deviceInfo", "deviceInfo", decoration: "flat", width: 6, height: 2) {
        state "default", label: '${currentValue}', action: "getDeviceInfo"
    }

    main(["mainPanel", "voltage", "amperage"])
    details(["mainPanel", "deviceMode", "amperage", "voltage",
             "currentEnergyCostTxt", "currentEnergyCostHour", "currentEnergyCostWeek", "currentEnergyCostMonth", "currentEnergyCostYear",
             "cumulativeEnergyCostTxt", "cumulativeEnergyCostHour", "cumulativeEnergyCostWeek", "cumulativeEnergyCostMonth", "cumulativeEnergyCostYear",
             "levelSliderControl", "levelSliderTxt", "configure", "refresh", "reset", "deviceInfo"])
}

}

preferences {
input title: “”, description: “Aeon Smart Switch 6 (gen5) v${clientVersion()}”, displayDuringSetup: true, type: “paragraph”, element: “paragraph”

input name: "switchDisabled", type: "bool", title: "Disable2 switch on/off\n", defaultValue: "false", displayDuringSetup: true, required: true
input name: "refreshInterval", type: "number", title: "Refresh interval \n\nSet the refresh time interval (seconds) between each report [Default (300)].\n", displayDuringSetup: true, required: true
input name: "switchAll", type: "enum", title: "Respond to switch all?\n", description: "How does switch respond to the 'Switch All' command", options: ["Disabled", "Off Enabled", "On Enabled", "On and Off Enabled"], defaultValue: "On and Off Enabled", displayDuringSetup: true, required: false
input name: "deviceModeSettings", type: "enum", title: "Device mode?\n", options: ["Energy", "Momentary", "NightLight"], defaultValue: "Energy", displayDuringSetup: true, required: false
input name: "forceStateChangeOnReport", type: "bool", title: "Force state change when receiving a report ? If true, you'll always get notification even if report data doesn't change.\n", defaultValue: "false", displayDuringSetup: true, required: true
input name: "secureInclusionOverride", type: "bool", title: "Is this device in secure inclusive mode?\n", defaultValue: "false", displayDuringSetup: true, required: true

input name: "onlySendReportIfValueChange", type: "bool", title: "Only send report if value change (either in terms of wattage or a %)\n", defaultValue: "false", displayDuringSetup: true, required: true
input title: "", description: "The next two parameters are only functional if the 'only send report' is set to true.", type: "paragraph", element: "paragraph", displayDuringSetup: true, required: true

input name: "minimumChangeWatts", type: "number", title: "Minimum change in wattage for a report to be sent (0 - 60000) [Default (25)].\n", range: "0..60000", displayDuringSetup: true, required: true
input name: "minimumChangePercent", type: "number", title: "Minimum change in percentage for a report to be sent (0 - 100) [Default (5)]\n", range: "0..100", displayDuringSetup: true, required: true

input name: "costPerKwh", type: "decimal", title: "Cost per kWh (Used for energy cost /per kWh) [Default (0.12)]\n", displayDuringSetup: true, required: true

input name: "includeWattInReport", type: "bool", title: "Include energy meter (W) in report?\n", defaultValue: "true", displayDuringSetup: true, required: true
input name: "includeVoltageInReport", type: "bool", title: "Include voltage (V) in report?\n", defaultValue: "true", displayDuringSetup: true, required: true
input name: "includeCurrentInReport", type: "bool", title: "Include current (A) in report?\n", defaultValue: "true", displayDuringSetup: true, required: true
input name: "includeCurrentUsageInReport", type: "bool", title: "Include current usage (kWh) in report?\n", defaultValue: "true", displayDuringSetup: true, required: true

input title: "", description: "Logging", type: "paragraph", element: "paragraph"
input name: "isLogLevelTrace", type: "bool", title: "Show trace log level ?\n", defaultValue: "false", displayDuringSetup: true, required: true
input name: "isLogLevelDebug", type: "bool", title: "Show debug log level ?\n", defaultValue: "true", displayDuringSetup: true, required: true

}

Have you added the vid ?

When I was tyring the custom capability, yes, I did but once I noticed that nothing was changing form a UI perspective, I started to remove some of the stuff in the device handler but I coudln’t get any UI changes within the new app, thus this thread. (Why it wasn’t working with the custom capability is another problem which I’ll try to cover in another thread) but it’s not clear to me why there are UI elements now despite the fact that this device handler has barely no capability anymore.

Is there any caching issue going on?

Yes, my understanding is this is exactly the issue.

Yes there is. Clearing the app cache helps but I usually update the device name in the IDE as that does the job too.

Yes things are just weird. I use @orangebucket momentary code and the UI is a mess, not his fault.
Everytime I experiement with the DTH or use another one and go back to his the UI retains all the old features of the previous UI even though they are not in the current DTH.
I have 6 options for Pressed, Double pressed and Held right now for a momentary and they won’t go away.
I’ll try clearing the cache.

Edit:
Well that didn’t work. I decided to change another momentary to Grahams DTH and now my next virtual momentary has a remote icon as well with 18 choices for keypresses! Where the heck is the system picking up this code?