paulsheldon / SmartThings-PS

My SmartThings
GNU General Public License v3.0
61 stars 195 forks source link

Adding getSpecText to configButtonsPage #14

Closed myclue closed 4 years ago

myclue commented 4 years ago

I find it useful to see the SpecText for each button on the configButtonsPage so I know in advance which button press sequence I'm editing. Looking at the existing code, it didn't seem like I could reuse getSpecText() so I created getSpecTextConfig(i) and replicated with some tweaks.

I edited chooseButton() to say:

                    for (i in 1..state.buttonCount) {
                        href "configButtonsPage", title: "Button ${i}"+"\n${getSpecTextConfig(i)}", state: getDescription(i) != "Tap to configure" ? "complete" : null, description: getDescription(i), params: [pbutton: i]

and then added

def getSpecTextConfig(i) {
    if (state.buttonType == "Lutron Pico") {
        switch (i) {
            case 1: return "Top Button"; break
            case 2: return "Bottom Button"; break
            case 3: return "Middle Button"; break
            case 4: return "Up Button"; break
            case 5: return "Down Button"; break
        }
    }
    return "Not Specified By Device"
}

Is there a more eloquent way of reusing getSpecText() instead?

paulsheldon commented 4 years ago

Off the top of my head you could try

def getSpecText(currentButton) {

 currentButton==null ? state.currentButton : currentButton

if (state.buttonType == "Lutron Pico") {
    switch (currentButton) {
        case 1: return "Top Button"; break
        case 2: return "Bottom Button"; break
        case 3: return "Middle Button"; break
        case 4: return "Up Button"; break
        case 5: return "Down Button"; break
    }
}

From: puzzles312 notifications@github.com Sent: 31 January 2020 02:33 To: paulsheldon/SmartThings-PS SmartThings-PS@noreply.github.com Cc: Subscribed subscribed@noreply.github.com Subject: [paulsheldon/SmartThings-PS] Adding getSpecText to configButtonsPage (#14)

I find it useful to see the SpecText for each button on the configButtonsPage so I know in advance which button press sequence I'm editing. Looking at the existing code, it didn't seem like I could reuse getSpecText() so I created getSpecTextConfig(i) and replicated with some tweaks.

I edited chooseButton() to say:

                for (i in 1..state.buttonCount) {
                    href "configButtonsPage", title: "Button ${i}"+"\n${getSpecTextConfig(i)}", state: getDescription(i) != "Tap to configure" ? "complete" : null, description: getDescription(i), params: [pbutton: i]

and then added

def getSpecTextConfig(i) { if (state.buttonType == "Lutron Pico") { switch (i) { case 1: return "Top Button"; break case 2: return "Bottom Button"; break case 3: return "Middle Button"; break case 4: return "Up Button"; break case 5: return "Down Button"; break } } return "Not Specified By Device" }

Is there a more eloquent way of reusing getSpecText() instead?

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub https://github.com/paulsheldon/SmartThings-PS/issues/14?email_source=notifications&email_token=ABG3CHL6FXLIG4H42DYCDA3RAOEWHA5CNFSM4KOALUH2YY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4IKAQGEA , or unsubscribe https://github.com/notifications/unsubscribe-auth/ABG3CHJDU5RIKLTAH5M4YUTRAOEWHANCNFSM4KOALUHQ . https://github.com/notifications/beacon/ABG3CHONJOYGGB52AED2LXLRAOEWHA5CNFSM4KOALUH2YY3PNVWWK3TUL52HS4DFUVEXG43VMWVGG33NNVSW45C7NFSM4IKAQGEA.gif

myclue commented 4 years ago

Thanks!

Here are my complete edits to add the getSpecText on the configButtonsPage while minimizing maintenance requirements for getSpecText by adding an optional parameter. I've added WS200+, WD200+, and Zen27 to the list of devices.

            section("Step 2: Configure Buttons for Selected Device") {
                if (state.buttonCount < 1) {
                    paragraph "The selected button device did not report the number of buttons it has. Please specify in the Advanced Config section below."
                } else {
                    for (i in 1..state.buttonCount) {
                        href "configButtonsPage", title: "Button ${i}"**+"\n${getSpecText(i)}"**, state: getDescription(i) != "Tap to configure" ? "complete" : null, description: getDescription(i), params: [pbutton: i]
def getSpecText(currentButton) {
    currentButton=(currentButton==null ? state.currentButton : currentButton)
    if (state.buttonType == "Lutron Pico") {
        switch (currentButton) {
            case 1: return "Top Button"; break
            case 2: return "Bottom Button"; break
            case 3: return "Middle Button"; break
            case 4: return "Up Button"; break
            case 5: return "Down Button"; break
        }
    }
    if (state.buttonType == "Hue Dimmer") {
        switch (currentButton) {
            case 1: return "On Button"; break
            case 2: return "Up Button"; break
            case 3: return "Down Button"; break
            case 4: return "Off Button"; break
        }
    }
    if (state.buttonType == "Cube Controller") {
        switch (currentButton) {
           case 1: return "Shake Cube"; break
           case 2: return "Flip Cube 90 Degrees"; break
           case 3: return "Flip Cube 180 Degrees"; break
           case 4: return "Slide Cube"; break
           case 5: return "Knock Cube"; break
           case 6: return "Rotate Cube Right"; break
           case 7: return "Rotate Cube Left"; break
        }
    }
    if (state.buttonType == "Aeon Minimote") {
        switch (currentButton) {
            case 1: return "Top Left Button"; break
            case 2: return "Top Right Button"; break
            case 3: return "Lower Left Button"; break
            case 4: return "Lower Right"; break
        }
    }
    if (state.buttonType.contains("WD100+ Dimmer")) {
        switch (currentButton) {
            case 1: return "Double-Tap Upper Paddle"; break
            case 2: return "Double-Tap Lower Paddle"; break
            case 3: return "Triple-Tap Upper Paddle"; break
            case 4: return "Triple-Tap Lower Paddle"; break
            case 5: return "Press & Hold Upper Paddle\n(See user guide for quirks)"; break
            case 6: return "Press & Hold Lower Paddle\n(See user guide for quirks)"; break
            case 7: return "Single Tap Upper Paddle\n(See user guide for quirks)"; break
            case 8: return "Single Tap Lower Paddle\n(See user guide for quirks)"; break
        }
    }
    if (state.buttonType.contains("WS100+ Switch")) {
        switch (currentButton) {
            case 1: return "Double-Tap Upper Paddle"; break
            case 2: return "Double-Tap Lower Paddle"; break
            case 3: return "Triple-Tap Upper Paddle"; break
            case 4: return "Triple-Tap Lower Paddle"; break
            case 5: return "Press & Hold Upper Paddle"; break
            case 6: return "Press & Hold Lower Paddle"; break
            case 7: return "Single Tap Upper Paddle"; break
            case 8: return "Single Tap Lower Paddle"; break
        }
    }
    if (state.buttonType.contains("WD200+ Dimmer")) {
        switch (currentButton) {
            case 1: return "Double-Tap Upper Paddle"; break
            case 2: return "Double-Tap Lower Paddle"; break
            case 3: return "Triple-Tap Upper Paddle"; break
            case 4: return "Triple-Tap Lower Paddle"; break
            case 5: return "Press & Hold Upper Paddle\n(See user guide for quirks)"; break
            case 6: return "Press & Hold Lower Paddle\n(See user guide for quirks)"; break
            case 7: return "Single Tap Upper Paddle\n(See user guide for quirks)"; break
            case 8: return "Single Tap Lower Paddle\n(See user guide for quirks)"; break
            case 9: return "4X-Tap Upper Paddle"; break
            case 10: return "4X-Tap Lower Paddle"; break
            case 11: return "5X-Tap Upper Paddle"; break
            case 12: return "5X-Tap Lower Paddle"; break
        }
    }
    if (state.buttonType.contains("WS200+ Switch")) {
        switch (currentButton) {
            case 1: return "Double-Tap Upper Paddle"; break
            case 2: return "Double-Tap Lower Paddle"; break
            case 3: return "Triple-Tap Upper Paddle"; break
            case 4: return "Triple-Tap Lower Paddle"; break
            case 5: return "Press & Hold Upper Paddle\n(See user guide for quirks)"; break
            case 6: return "Press & Hold Lower Paddle\n(See user guide for quirks)"; break
            case 7: return "Single Tap Upper Paddle\n(See user guide for quirks)"; break
            case 8: return "Single Tap Lower Paddle\n(See user guide for quirks)"; break
            case 9: return "4X-Tap Upper Paddle"; break
            case 10: return "4X-Tap Lower Paddle"; break
            case 11: return "5X-Tap Upper Paddle"; break
            case 12: return "5X-Tap Lower Paddle"; break
        }
    }
    if (state.buttonType.contains("Inovelli")) {           
        switch (currentButton) {
            case 1: return "NOT OPERATIONAL - DO NOT USE"; break
            case 2: return "2X Tap Upper Paddle = Pushed\n2X Tap Lower Paddle = Held"; break
            case 3: return "3X Tap Upper Paddle = Pushed\n3X Tap Lower Paddle = Held"; break
            case 4: return "4X Tap Upper Paddle = Pushed\n4X Tap Lower Paddle = Held"; break
            case 5: return "5X Tap Upper Paddle = Pushed\n5X Tap Lower Paddle = Held"; break
            case 6: return "Hold Upper Paddle = Pushed\nHold Lower Paddle = Held"; break
            case 7: if (state.buttonType.contains("Red")) { return "1x Tap Config Button"; break; }

        }
    }
    if (state.buttonType.contains("Zen27")) {
        switch (currentButton) {
            case 1: return "1 x up"; break
            case 2: return "1 x down"; break
            case 3: return "2 x up"; break
            case 4: return "2 x down"; break
            case 5: return "3 x up"; break
            case 6: return "3 x down"; break
            case 7: return "4 x up"; break
            case 8: return "4 x down"; break
            case 9: return "5 x up"; break
            case 10: return "5 x down"; break
        }
    }
    if (state.buttonType.contains("ZRC-90")) {
        switch (currentButton) {
            case 1: return "Tap or Hold Button 1"; break
            case 2: return "Tap or Hold Button 2"; break
            case 3: return "Tap or Hold Button 3"; break
            case 4: return "Tap or Hold Button 4"; break
            case 5: return "Tap or Hold Button 5"; break
            case 6: return "Tap or Hold Button 6"; break
            case 7: return "Tap or Hold Button 7"; break
            case 8: return "Tap or Hold Button 8"; break
            case 9: return "2X Tap Button 1\nHold Not Available"; break
            case 10: return "2X Tap Button 2\nHold Not Available"; break
            case 11: return "2X Tap Button 3\nHold Not Available"; break
            case 12: return "2X Tap Button 4\nHold Not Available"; break
            case 13: return "2X Tap Button 5\nHold Not Available"; break
            case 14: return "2X Tap Button 6\nHold Not Available"; break
            case 15: return "2X Tap Button 7\nHold Not Available"; break
            case 16: return "2X Tap Button 8\nHold Not Available"; break
        }
    }
    return "Not Specified By Device"
}
paulsheldon commented 4 years ago

Thanks I’ll add that to the next release and maybe just add an option to turn it on/off in options page

From: puzzles312 notifications@github.com Sent: 31 January 2020 19:34 To: paulsheldon/SmartThings-PS SmartThings-PS@noreply.github.com Cc: Paul Sheldon paulsheldon1966@gmail.com; Comment comment@noreply.github.com Subject: Re: [paulsheldon/SmartThings-PS] Adding getSpecText to configButtonsPage (#14)

Thanks!

Here are my complete edits to add the getSpecText on the configButtonsPage while minimizing maintenance requirements for getSpecText by adding an optional parameter. I've added WS200+, WD200+, and Zen27 to the list of devices.

        section("Step 2: Configure Buttons for Selected Device") {
            if (state.buttonCount < 1) {
                paragraph "The selected button device did not report the number of buttons it has. Please specify in the Advanced Config section below."
            } else {
                for (i in 1..state.buttonCount) {
                    href "configButtonsPage", title: "Button ${i}"**+"\n${getSpecText(i)}"**, state: getDescription(i) != "Tap to configure" ? "complete" : null, description: getDescription(i), params: [pbutton: i]

def getSpecText(currentButton) { currentButton=(currentButton==null ? state.currentButton : currentButton) if (state.buttonType == "Lutron Pico") { switch (currentButton) { case 1: return "Top Button"; break case 2: return "Bottom Button"; break case 3: return "Middle Button"; break case 4: return "Up Button"; break case 5: return "Down Button"; break } } if (state.buttonType == "Hue Dimmer") { switch (currentButton) { case 1: return "On Button"; break case 2: return "Up Button"; break case 3: return "Down Button"; break case 4: return "Off Button"; break } } if (state.buttonType == "Cube Controller") { switch (currentButton) { case 1: return "Shake Cube"; break case 2: return "Flip Cube 90 Degrees"; break case 3: return "Flip Cube 180 Degrees"; break case 4: return "Slide Cube"; break case 5: return "Knock Cube"; break case 6: return "Rotate Cube Right"; break case 7: return "Rotate Cube Left"; break } } if (state.buttonType == "Aeon Minimote") { switch (currentButton) { case 1: return "Top Left Button"; break case 2: return "Top Right Button"; break case 3: return "Lower Left Button"; break case 4: return "Lower Right"; break } } if (state.buttonType.contains("WD100+ Dimmer")) { switch (currentButton) { case 1: return "Double-Tap Upper Paddle"; break case 2: return "Double-Tap Lower Paddle"; break case 3: return "Triple-Tap Upper Paddle"; break case 4: return "Triple-Tap Lower Paddle"; break case 5: return "Press & Hold Upper Paddle\n(See user guide for quirks)"; break case 6: return "Press & Hold Lower Paddle\n(See user guide for quirks)"; break case 7: return "Single Tap Upper Paddle\n(See user guide for quirks)"; break case 8: return "Single Tap Lower Paddle\n(See user guide for quirks)"; break } } if (state.buttonType.contains("WD200+ Dimmer")) { switch (currentButton) { case 1: return "Double-Tap Upper Paddle"; break case 2: return "Double-Tap Lower Paddle"; break case 3: return "Triple-Tap Upper Paddle"; break case 4: return "Triple-Tap Lower Paddle"; break case 5: return "Press & Hold Upper Paddle\n(See user guide for quirks)"; break case 6: return "Press & Hold Lower Paddle\n(See user guide for quirks)"; break case 7: return "Single Tap Upper Paddle\n(See user guide for quirks)"; break case 8: return "Single Tap Lower Paddle\n(See user guide for quirks)"; break case 9: return "4X-Tap Upper Paddle"; break case 10: return "4X-Tap Lower Paddle"; break case 11: return "5X-Tap Upper Paddle"; break case 12: return "5X-Tap Lower Paddle"; break } } if (state.buttonType.contains("WS100+ Switch")) { switch (currentButton) { case 1: return "Double-Tap Upper Paddle"; break case 2: return "Double-Tap Lower Paddle"; break case 3: return "Triple-Tap Upper Paddle"; break case 4: return "Triple-Tap Lower Paddle"; break case 5: return "Press & Hold Upper Paddle"; break case 6: return "Press & Hold Lower Paddle"; break case 7: return "Single Tap Upper Paddle"; break case 8: return "Single Tap Lower Paddle"; break } } if (state.buttonType.contains("Inovelli")) {
switch (currentButton) { case 1: return "NOT OPERATIONAL - DO NOT USE"; break case 2: return "2X Tap Upper Paddle = Pushed\n2X Tap Lower Paddle = Held"; break case 3: return "3X Tap Upper Paddle = Pushed\n3X Tap Lower Paddle = Held"; break case 4: return "4X Tap Upper Paddle = Pushed\n4X Tap Lower Paddle = Held"; break case 5: return "5X Tap Upper Paddle = Pushed\n5X Tap Lower Paddle = Held"; break case 6: return "Hold Upper Paddle = Pushed\nHold Lower Paddle = Held"; break case 7: if (state.buttonType.contains("Red")) { return "1x Tap Config Button"; break; }

    }
}
if (state.buttonType.contains("Zen27")) {
    switch (currentButton) {
        case 1: return "1 x up"; break
        case 2: return "1 x down"; break
        case 3: return "2 x up"; break
        case 4: return "2 x down"; break
        case 5: return "3 x up"; break
        case 6: return "3 x down"; break
        case 7: return "4 x up"; break
        case 8: return "4 x down"; break
        case 9: return "5 x up"; break
        case 10: return "5 x down"; break
    }
}
if (state.buttonType.contains("ZRC-90")) {
    switch (currentButton) {
        case 1: return "Tap or Hold Button 1"; break
        case 2: return "Tap or Hold Button 2"; break
        case 3: return "Tap or Hold Button 3"; break
        case 4: return "Tap or Hold Button 4"; break
        case 5: return "Tap or Hold Button 5"; break
        case 6: return "Tap or Hold Button 6"; break
        case 7: return "Tap or Hold Button 7"; break
        case 8: return "Tap or Hold Button 8"; break
        case 9: return "2X Tap Button 1\nHold Not Available"; break
        case 10: return "2X Tap Button 2\nHold Not Available"; break
        case 11: return "2X Tap Button 3\nHold Not Available"; break
        case 12: return "2X Tap Button 4\nHold Not Available"; break
        case 13: return "2X Tap Button 5\nHold Not Available"; break
        case 14: return "2X Tap Button 6\nHold Not Available"; break
        case 15: return "2X Tap Button 7\nHold Not Available"; break
        case 16: return "2X Tap Button 8\nHold Not Available"; break
    }
}
return "Not Specified By Device"

}

— You are receiving this because you commented. Reply to this email directly, https://github.com/paulsheldon/SmartThings-PS/issues/14?email_source=notifications&email_token=ABG3CHPL46FPRYWJVLBLHW3RAR4I7A5CNFSM4KOALUH2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEKPX62I#issuecomment-580878185 view it on GitHub, or https://github.com/notifications/unsubscribe-auth/ABG3CHNSCDQNZ5KUBT5FODTRAR4I7ANCNFSM4KOALUHQ unsubscribe. https://github.com/notifications/beacon/ABG3CHMG2WXSZCYAQ3YJGLLRAR4I7A5CNFSM4KOALUH2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEKPX62I.gif

paulsheldon commented 4 years ago

These are now incorporated in next release

myclue commented 4 years ago

Thanks for adding the new devices.
I didn't see the additional information on the Step 2: Configure Buttons for Selected Devices, so I had to re-add code to def chooseButton() on my local version after pulling your latest release.

                    for (i in 1..state.buttonCount) {
                        href "configButtonsPage", title: "Button ${i}" + "\n" + "${getSpecText(i)}", state: getDescription(i) != "Tap to configure" ? "complete" : null, description: getDescription(i), params: [pbutton: i]

You mentioned maybe adding this to an options page so it could be toggled per user, though I'm not sure how to find an options page.

paulsheldon commented 4 years ago

I thought I had done that, I’ll check now and come back to you

From: puzzles312 notifications@github.com Sent: 11 May 2020 19:18 To: paulsheldon/SmartThings-PS SmartThings-PS@noreply.github.com Cc: Paul Sheldon paulsheldon1966@gmail.com; State change state_change@noreply.github.com Subject: Re: [paulsheldon/SmartThings-PS] Adding getSpecText to configButtonsPage (#14)

Thanks for adding the new devices. I didn't see the additional information on the Step 2: Configure Buttons for Selected Devices, so I had to re-add code to def chooseButton() on my local version after pulling your latest release.

                for (i in 1..state.buttonCount) {
                    href "configButtonsPage", title: "Button ${i}" + "\n" + "${getSpecText(i)}", state: getDescription(i) != "Tap to configure" ? "complete" : null, description: getDescription(i), params: [pbutton: i]

You mentioned maybe adding this to an options page so it could be toggled per user, though I'm not sure how to find an options page.

— You are receiving this because you modified the open/close state. Reply to this email directly, view it on GitHub https://github.com/paulsheldon/SmartThings-PS/issues/14#issuecomment-626870185 , or unsubscribe https://github.com/notifications/unsubscribe-auth/ABG3CHNQJNZFA53EG662KX3RRA6OPANCNFSM4KOALUHQ . https://github.com/notifications/beacon/ABG3CHKFK7TP34YCTI4OWLTRRA6OPA5CNFSM4KOALUH2YY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGOEVOUPKI.gif