SmartThings integration - flip a virtual switch to run a command

  • Thanks for the reply - I meant is there any way to parse "on" or "off" in the commands.json in place of where it would be in the command. For example, I have a heyu command to turn lights on that is formatted as such:

    Turn lights on: heyu fon Kitchen
    Turn lights off: heyu foff Kitchen

    What I am hoping is that there is something similar to %1, %2, etc in a batch file so that I can write:

    heyu f%1 Kitchen

    and pass on or off that way, to make the virtual switch work. AFAIK it can only be done with a script, but if there is a simpler way I'd love it since I would only need to edit the json (although a script to parse the on/off along with the device name would be more elegant).

    EDIT: Disregard, I'm going to go with a script after all, my OCD wants the most elegant solution. :D

  • @russ I am trying to trigger a command with parameters, but I I'm running into a wall.

    My script is as follows:

    array=( $1 $2 )
    some_command ${array[1]} ${array[0]}

    I used an array because I needed to reverse the order of the parameters. Now my commands.json has a trigger configured as such:

      {"trigger":"Test","command":"sudo -u pi -H ~/Smartthings/TriggerCMD/Scripts/ first_arg " ","ground":"background","voice":"Test","allowParams": "true"}

    I'm expecting TriggerCMD to pass the "on" or "off" as the second argument, but for some reason, it doesn't seem to be doing so when I test from the website. Am I doing something wrong? I even tried to make a script specifically for the first argument so the only argument needed from TriggerCMD is the on / off, but it still doesn't work.

  • @dctrbanner, I think I found the problem.

    This is what I got when I ran it your way:

    sudo -u pi  ~/Smartthings/TriggerCMD/Scripts/
    sudo: /root/Smartthings/TriggerCMD/Scripts/ command not found

    Notice it's translating the ~ to /root before the command runs as pi.

    This works though:

    {"trigger":"Test","command":"sudo -u pi -H \/home\/pi\/Smartthings\/TriggerCMD\/Scripts\/ first_arg ","ground":"background","voice":"Test","allowParams": "true"},

    This is my test script:

    echo $2 $1 >> /tmp/log.txt

    This is the output:

    $ tail -f /tmp/log.txt
    on first_arg

  • Hello,

    I'm trying to get this setup to put my display to sleep, but the commands don't seem to be reaching SmartThings. If I manually fire the TriggerCMD from my phone browser it works perfectly, but SmartThings doesn't seem to be communicating correctly despite the lack of any error. TriggerCMD also doesn't report receiving any requests except the ones I performed from the browser. I don't think there's an authentication issue since the SmartApp is reading my commands fine. I'm not sure what else to check. Here's a snip from the SmartThings log:

    57bb48b4-bb6a-48d0-8938-e085928b86e6  4:47:54 PM: debug OFF result: [response:done]
    57bb48b4-bb6a-48d0-8938-e085928b86e6  4:47:54 PM: debug Return Code = 200 = Command Succeeded.
    57bb48b4-bb6a-48d0-8938-e085928b86e6  4:47:54 PM: debug In apiPost with data: [token:(token), uri:/api/run/triggerByID, body:trigger=[5c61df9baa745900163af4dd-5c64b9eb3b309f00167a06eb]&params=off]
    57bb48b4-bb6a-48d0-8938-e085928b86e6  4:47:54 PM: debug Off request from child device
    57bb48b4-bb6a-48d0-8938-e085928b86e6  4:47:54 PM: debug ON result: [response:done]
    57bb48b4-bb6a-48d0-8938-e085928b86e6  4:47:54 PM: debug Return Code = 200 = Command Succeeded.
    57bb48b4-bb6a-48d0-8938-e085928b86e6  4:47:54 PM: debug In apiPost with data: [token:(token), uri:/api/run/triggerByID, body:trigger=[5c61df9baa745900163af4dd-5c64b9eb3b309f00167a06eb]&params=on]
    57bb48b4-bb6a-48d0-8938-e085928b86e6  4:47:54 PM: debug On request from child device script_dth_cd2efee0eca44de1d6ceeb8c9ede43c0f5239b6c1e6e37c4e674414c2538f18d@574ae66b

  • @mthiel, just to make sure, I just tested this in my SmartThings app and it worked for me.

    I recommend you try this:

    Go to Marketplace, SmartApps, My Apps, TRIGGERcmd, Next.
    Uncheck all of our commands, and click Done, Save.
    Go to Home, and if you have any TRIGGERcmd switches left, delete them.
    Go to Marketplace, SmartApps, My Apps, TRIGGERcmd, Next again.
    Check the commands you and to be switches.
    Test your switch again.

    BTW, I removed your token from the output you pasted.

  • @russ Thanks for checking! Unfortunately, re-creating the device via the SmartApp didn't make a difference. Turns out MY problem is that I only have one trigger I'm testing on...

    I spent a few hours troubleshooting the SmartApp code and found the root cause around line 249. When a single trigger comes back from the api, the conditional looks like it assumes the type will be a Map, but it actually just returns a List with a single item at index 0. Changing the "devices?.name" and "devices?did" to "devices[0].name" and "devices[0].did" fixes the issue for me. I only realized the problem because the trigger list kept creating devices with brackets around the name, making me expect a typing problem.

    It's working great for me now, hope my digging helps!

  • @mthiel, wow, that's interesting. I'm glad you found that. you send me the code snippet you changed? I want to test it myself, then I'll update the code. Sorry for the trouble, and thank you for finding a fix.

    I was able to reproduce the problem. I tested the change and updated the code. Thanks @mthiel for the fix!

    // deviceList += ["name" : "${roomName} ${devices?.name}", "did" : "${devices?.did}", "type" : "bulb"]  <- this logic doesn't work when there's only 1 command
    // Thanks to mthiel for finding this fix. 
    deviceList += ["name" : "${roomName} ${devices[0].name}", "did" : "${devices[0].did}", "type" : "bulb"]

  • hello guys can you please give me some help

    i have triggercmd installed in my pc so i can open kodi, but i have a 32bit version so thats why (i suppose) i dont have the option to parse a cmd so the smartthings switch knows when its on or off.

    that beeing said when i press the switch it open kodi but it stays on (green), then if i close but manually it stays green forever, if i flip it again it goes off but it opens kodi, cause im not using the script.

    well what i want is, can i switch the smartthings switch to a switch that doesnt stay on, it just pushes and goes back to initial state?

    thanks in advance

  • @putefabio, checkout this post:

    It says you can make a small modification to the SmartThings code to make it so the switch goes back off after you flip it on.

  • thanks a lot for a so quick awnser, that did the trick :)

Log in to reply