| Author |  | 
      
        | lizaoreo Groupie
 
  
 
 Joined: February 11 2013
 Location: United States
 Online Status: Offline
 Posts: 75
 | 
          I'm trying to use ph_run with a trigger to change a variable in a MySQL database.  I already have a trigger on status change for all my devices that updates their icon for the control center.
           | Posted: September 14 2013 at 13:00 | IP Logged |   |  
           | 
 |  
 I'm trying to add a command to use the MySQL.exe (command line utility) to update a database with their status as well.  I think it's the quotes that are getting me.
 
 ph_run('"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql.exe" -u user -pPassword homedb -e "UPDATE homedb_status SET `Status`=~'Off~' WHERE `PHID`='BCKPRCHLGT';"')
 
 The query when I type it from a command line (and it does work):
 mysql.exe -u user -pPassword homedb -e "UPDATE homedb_status SET `Status`='On' WHERE `PHID`='BCKPRCHLGT';"
 
 Not sure where I'm going wrong with it.
 
 Also, while I'm asking for help :)
 How can I have the PHID and Status auto fill in with variables?  I'm sure there are some I can use from the trigger, I believe LOCAL10 does that status (right?).  Is there a list somewhere of all the values for the TEMP variables that a trigger fills in?
 | 
       
        | Back to Top |     | 
       
       
        |  | 
        | grif091 Super User
 
  
 
 Joined: March 26 2008
 Location: United States
 Online Status: Offline
 Posts: 1357
 | 
          Some of the single quotes are not standard single quotes.  Some of the single quotes are what applications like Word use.  They are sloped and I don't think they will work.  In the ph_run look at the quotes around the word Status and PHID compared to other single quotes.
           | Posted: September 14 2013 at 13:45 | IP Logged |   |  
           | 
 |  
 Edited by grif091 - September 14 2013 at 13:46
 
 __________________
 Lee G
 | 
       
        | Back to Top |     | 
       
       
        |  | 
        | lizaoreo Groupie
 
  
 
 Joined: February 11 2013
 Location: United States
 Online Status: Offline
 Posts: 75
 | 
          Yeah, I had to do that for the MySQL Query to work.  It's how the examples were done and until I copied it didn't work.
           | Posted: September 14 2013 at 14:33 | IP Logged |   |  
           | 
 |  | 
       
        | Back to Top |     | 
       
       
        |  | 
        | BeachBum Super User
 
  
  
 Joined: April 11 2007
 Location: United States
 Online Status: Offline
 Posts: 1880
 | 
          To answer your question about TEMPS. I stick this in the equation to find out what I’m looking for.
           | Posted: September 17 2013 at 08:01 | IP Logged |   |  
           | 
 |  
 "TEMPS " + "|" + ph_getvar_s(2,1) + "|" + ph_getvar_s(2,2) + "|" + ph_getvar_s(2,3) + "|" + ph_getvar_s(2,4) + "|" + ph_getvar_s(2,5) + "|" + ph_getvar_s(2,6) + "|" + ph_getvar_s(2,7) + "|" + ph_getvar_s(2,8) + "|" + ph_getvar_s(2,9) + "|" + ph_getvar_s(2,10) + "|"
 
 Dave also posted this….
 For the Insteon Device Chg trigger:
 
 Code:
 
 TEMP1     ID of Trigger
 TEMP2     0
 TEMP3     Insteon CMD 2
 TEMP4     Type of trigger
 1 = Direct Command from PH PLC
 2 = Group Cleanup from PH PLC
 3 = Group Broadcast from PH PLC
 4 = Direct Command from device
 5 = Group Broadcast from device
 6 = Group Cleanup from device
 TEMP5     The address of the sending device
 TEMP6     20 = Direct type command
 21 = Broadcast type command
 TEMP7     The address of the receiving device
 TEMP8     The Group number for group type commands, 1 otherwise
 TEMP9     Insteon CMD 1
 TEMP10     ID of Receiving device
 
 
 __________________
 Pete - X10 Oldie
 | 
       
        | Back to Top |     | 
       
       
        |  | 
        | lizaoreo Groupie
 
  
 
 Joined: February 11 2013
 Location: United States
 Online Status: Offline
 Posts: 75
 | 
          Thanks, now I just gotta figure out these quotes :-)
           | Posted: September 17 2013 at 10:31 | IP Logged |   |  
           | 
 |  | 
       
        | Back to Top |     | 
       
       
        |  | 
        | dhoward Admin Group
 
  
  
 Joined: June 29 2001
 Location: United States
 Online Status: Offline
 Posts: 4447
 | 
          lizaoreo,
           | Posted: September 17 2013 at 10:45 | IP Logged |   |  
           | 
 |  
 Took a quick look and you need to escape the single quotes around BCKPRCHLGT like this:
 
 
 
| Code: 
 
    
    | 
      
       | ph_run('"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql.exe" -u user -pPassword homedb -e "UPDATE homedb_status SET `Status`=~'Off~' WHERE `PHID`=~'BCKPRCHLGT~';"') |  |  |  
 That was the only error I found...it seems like you have the right idea.  In PowerHome, strings can be enclosed in either single or double quotes (they can be used interchangeably but the opening must match the closing).  If you must enclose single quotes within single quotes, then the tilde character must be used to "escape" the inner single quote (sometimes multiple tildes are required depending upon the indirection level like ~~').  Of course, the same applies to double quotes as well.
 
 Give the above a try and see if that helps or not.
 
 Dave.
 
 | 
       
        | Back to Top |       | 
       
       
        |  | 
        | lizaoreo Groupie
 
  
 
 Joined: February 11 2013
 Location: United States
 Online Status: Offline
 Posts: 75
 | 
          Hmm, still not getting it to update.  Is there a log somewhere to see how PH is parsing
           | Posted: September 17 2013 at 12:45 | IP Logged |   |  
           | 
 |  it?
 
 This is my latest attempt after tweaking it around a bit to see what would happen:
 
 
 
| Code: 
 
    
    | 
      
       | ph_run("~"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql.exe~" -u user - pPassword homedb -e ~"UPDATE homedb_status SET `Status`='Off' WHERE
 `PHID`='BCKPRCHLGT';~"")
 |  |  |  
 Also tried escaping the single quotes around Off and BCKPRCHLGT.  No go :(
 
 EDIT: Oh, and I did try what you posted as well of course ;)
 
 Edited by lizaoreo - September 17 2013 at 12:47
 | 
       
        | Back to Top |     | 
       
       
        |  | 
        | dhoward Admin Group
 
  
  
 Joined: June 29 2001
 Location: United States
 Online Status: Offline
 Posts: 4447
 | 
          Hmmm...Im not sure what the problem would be.  As a quick test just to test the escape elements, I ran this:
           | Posted: September 17 2013 at 14:26 | IP Logged |   |  
           | 
 |  
 
 
| Code: 
 
    
    | 
      
       | ph_run("~"notepad.exe~" ~"pwrhome.ini~"") |  |  |  
 and it brought up the pwrhome.ini file just fine so the escaped double quotes should be working.  You can always nest single quotes within double quotes without escaping (and vice versa) so that shouldnt be causing you a problem either.  Im also pretty sure you said that running just
 
 
 
| Code: 
 
    
    | 
      
       | "C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql.exe" -u user - p Password homedb -e "UPDATE homedb_status SET `Status`='Off' WHERE
 `PHID`='BCKPRCHLGT';"
 |  |  |  
 from the command line works just fine.  Im wondering if saved the working command line text to a batch file and then trying to ph_run the batch file will yield any results.
 
 Dave.
 
 | 
       
        | Back to Top |       | 
       
       
        |  | 
        | lizaoreo Groupie
 
  
 
 Joined: February 11 2013
 Location: United States
 Online Status: Offline
 Posts: 75
 | 
          
           | Posted: September 17 2013 at 14:58 | IP Logged |   |  
           | 
 |  
| dhoward wrote: 
 
    
    | 
      
       | Im wondering if saved the working command line text to a batch file and then trying to ph_run the
 batch file will yield any results.
 |  |  |  
 Oh! I hadn't thought to try that
  I'll give it a shot when I get home. If it works, I'll make a PowerShell script
 to take care it.  I'm using PowerShell scripts to populate
 my other databases, don't know why it didn't occur to me to
 do it with PowerHome too
   | 
       
        | Back to Top |     | 
       
       
        |  | 
        | lizaoreo Groupie
 
  
 
 Joined: February 11 2013
 Location: United States
 Online Status: Offline
 Posts: 75
 | 
          
           | Posted: September 18 2013 at 10:21 | IP Logged |   |  
           | 
 |  
| dhoward wrote: 
 
    
    | 
      
       | Hmmm...Im not sure what the problem would be.  As a quick test just to test the escape
 elements, I ran this:
 
 
 
| Code: 
 
    
    | 
      
       | ph_run("~"notepad.exe~" ~"pwrhome.ini~"") |  |  |  
 and it brought up the pwrhome.ini file just fine so the
 escaped double quotes should be working.
 
 |  |  |  
 Okay, this is goofy, it wouldn't run the bat file.  So I
 tried what you did above and it wouldn't do that either.
 I'm thinking I've got something goofy going on
 specifically with my stuff.  All this time the code might
 have been right
   
 I double checked and PowerHome is running as "user" which
 is my generic local admin account I use for everything on
 this computer, so it has full admin rights.  Not sure
 what else to check that would prevent running a program
 
   | 
       
        | Back to Top |     | 
       
       
        |  | 
        | lizaoreo Groupie
 
  
 
 Joined: February 11 2013
 Location: United States
 Online Status: Offline
 Posts: 75
 | 
          *facepalm*  I'm doing it wrong.  I thought I could just
           | Posted: September 18 2013 at 14:12 | IP Logged |   |  
           | 
 |  enter the formula into the Macro/Formula box on the menu
 bar area and hit run and it'd run the formula.  That's why
 it isn't working, I can't believe I did that.
 
 Okay, I shall try this again, with a bit better knowledge
 O.o
 | 
       
        | Back to Top |     | 
       
       
        |  | 
        | lizaoreo Groupie
 
  
 
 Joined: February 11 2013
 Location: United States
 Online Status: Offline
 Posts: 75
 | 
          Yeah, what I tried above
           | Posted: September 18 2013 at 14:16 | IP Logged |   |  
           | 
 |  
 
| Code: 
 
    
    | 
      
       | ph_run("~"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql.exe~" -u user -pPassword homedb -e ~"UPDATE homedb_status SET `Status`='Off' WHERE `PHID`='BCKPRCHLGT';~"")
 |  |  |  
 worked fine when I put it in and triggered the trigger. I feel like a real fool now
   
 
 EDIT: and the final product for those interested:
 
 
| Code: 
 
    
    | 
      
       | ph_run("~"C:\Program Files\MySQL\MySQL Server 5.6\bin\mysql.exe~" -u user -pPassword homedb -e ~"UPDATE homedb_status SET `Status`='[LOCAL10]' WHERE `PHID`='[TEMP10]';~"")
 |  |  |  
 I was initially going to have it change the status value (0-255) to just say On or Off, but that seemed like
 extra work I didn't want to do and it's easy to do it as it pulls it into the page later, I'm doing it already
 with my HVAC data.
 
 Thanks for the assist Dave
  
 Edited by lizaoreo - September 18 2013 at 14:40
 | 
       
        | Back to Top |     | 
       
       
        |  | 
        | dhoward Admin Group
 
  
  
 Joined: June 29 2001
 Location: United States
 Online Status: Offline
 Posts: 4447
 | 
          lizaoreo,
           | Posted: September 18 2013 at 15:39 | IP Logged |   |  
           | 
 |  
 Glad you got it figured out.  After your previous post of even trying to launch notepad didnt work I wasnt sure what to try next.
 
 Honest mistake though because you CAN actually run a formula from the Macro/Formula box.  Normally, it wants a macroID to execute.  But...if the first character is a double quote, you can execute a raw formula.  This double quote is not expected to have a closing quote and has nothing to do with the formula except to say that the characters following it is a raw formula.
 
 You can also "queue" a raw formula by changing that first character to a single quote.  Not as useful as the double quote because it doesnt give you a window with the result but if you should need to "queue" the formula rather execute it outright, the single quote will do it.
 
 Dave.
 
 | 
       
        | Back to Top |       | 
       
       
        |  | 
        | lizaoreo Groupie
 
  
 
 Joined: February 11 2013
 Location: United States
 Online Status: Offline
 Posts: 75
 | 
          Yeah, when your simple notepad example didn't work, I knew
           | Posted: September 18 2013 at 16:46 | IP Logged |   |  
           | 
 |  I had to be doing something wrong.  I then tried a plain
 old ph_insteon("BDRM2LGT",17,255) and when that didn't do
 anything, I knew whatever I was doing in the run box wasn't
 working
   
 Cool, good to know, that'll make testing formulas a little
 easier in the future.
 | 
       
        | Back to Top |     | 
       
       
        |  | 
        | BeachBum Super User
 
  
  
 Joined: April 11 2007
 Location: United States
 Online Status: Offline
 Posts: 1880
 | 
          Good info Dave but that is why I never run formulas from the formula box. My 1st post was because of that. I do all my testing from a test macro sandbox.
           | Posted: September 18 2013 at 22:36 | IP Logged |   |  
           | 
 |  
 __________________
 Pete - X10 Oldie
 | 
       
        | Back to Top |     | 
       
       
        |  |