2020-03-13 Can I Issue an instruction to XTension with a shell script rathe than with a applescript ?

Michel Angelo michel_angelo at me.com
Sun Apr 5 08:18:08 EDT 2020


Hello. 

Back there on march 13, I had enquired about powering up and down my backup drive in conjunction with automated CCC backups. I had found the way for Xtension to power-up the drive and initiate the CCC backup chain but was failing on the return trail: namely from CCC sting « Backup done to XTension for XTension to power-off the drive. 

Thank you for your solution, which seems rather a tough sell to me. However, given that I have just now succeeded setting up a « Locative » geofencing trigger in my iPhone and succeeded to get XTension to receive and understand the IN and OUT messages (it took me a month), I will try it. 

On his side, Mike Bombich had suggested a direct shell script route with sudo in it, even more complex to me and which I could not get to work (probably a permissions issue which an expert would have solved easily). My workaround was to instruct CCC to issue a post-backup email to me with a special magic sentence in the header and to get the application « Mail », through a mail-action detecting my magic sentence, to run the applescript:

tell application "XTension"
    execute script "Sauvegardes" handler "hPowerDownD2"
end tell

It ends up in a handler of my master backup script in XTension, which is as follows:

on hManPowerDown(theDrive)
	if theDrive = "D2" then set theSwitch to "ClonageD2Switch"
	set valueSwitch to value of theSwitch
	if (valueSwitch) = 1 then
		turnoff theSwitch
	else 
		write log "The switch was already open"
	end if
end hManPowerDown

It may not seem to be very robust as mail actions may be omitted when the mac is asleep but, surprise, surprise, it has worked for me so far without any surprise. 

As an information to listers, the XTension instruction to CCC was reasonably easy, even for me. This is also a handler in my Backup main script in XTension. 

on hTriggerBackup(theSequence, theDrive)
		if ((theSequence = "EachDay") and (theDrive = "D2")) then
			set thePath to the quoted form of "/Applications/Carbon Copy Cloner.app/Contents/MacOS/ccc"
			set theBackUp to the quoted form of "11ClonageD2DeMBP"
			do shell script thePath & " -s" & theBackUp
		else if ((theSequence = "Sat1") and (theDrive = "D2")) then
			set thePath to the quoted form of "/Applications/Carbon Copy Cloner.app/Contents/MacOS/ccc"
			set theBackUp to the quoted form of "21ClonageD2S1DeMBP1"
			do shell script thePath & " -s" & theBackUp
		else if ((theSequence = "SatLast") and (theDrive = "D2")) then
			set thePath to the quoted form of "/Applications/Carbon Copy Cloner.app/Contents/MacOS/ccc"
			set theBackUp to the quoted form of "31ClonageD2S5DeSea1"
			do shell script thePath & " -s" & theBackUp
		else
			-- Do nothing
		end if
end hTriggerBackup

Thanks you James. I was planning to ask a question about Locative because of my inability to follow the instructions in the wiki. Instead, I wonder what to do if my wife refuses (as she currently does) to install and get to work 100% of the time Locative in her iPhone ; and the same question goes for visitors in my home in wintertime when heating is ON. Can I give them little tracking devices to keep in their pocket or car, doing the same job as locative does on an iPhone ?

Thank-you, James. 

— 
Michel Angelo
<michel_angelo at me.com> macOS 10.13.6

On 14 mars 2020 at 15:20, James Sentman <james at sentman.com> has written :

> Of course :)
> 
> There is always more than one way to do something. We just need another way to get an event into XTension. As a first try I would suggest the HTTP/JSON server. You can create an instance of that interface in XTension and add a security “token” to the list at the bottom of the setup window. Then create a new non-dimmable Unit and assign it to the new Json server instance. Give it an address as if it was a real unit something like “BACKUPDONE” but whatever you like is fine, easier if it doesn’t have spaces or special characters or accents or anything as it will be part of the URL in the next step.
> 
> Put your script for turning off the drives into the ON script of that unit. 
> 
> Then in the post flight script in CCC you can do something like this. This is assuming you setup the JSNO server for port 8080, but you can use any port just change it in the curl link below:
> 
> #/bin/sh
> 
> curl “http://localhost:8080/yourTokenFromAbove/BACKUPDONE/on <http://localhost:8080/yourTokenFromAbove/BACKUPDONE/on>”
> 
> You might have to use a fully qualified path for curl now that I think about it. I’m not sure what the path variables are available to the script when it’s running as root so instead of just directly calling curl you should probably use the full path. On my mac here that appears to be the rather odd “/opt/local/bin/curl” calling that directly does work on my machine. If it’s different on other OS versions or something else doesn’t work you can double check it by doing a “which curl” from the terminal and it will show you what it is on your machine for sure.
> 
> That will make a request to that link and if the Address matches it will send an On to the unit you created with that same address and from that Unit’s On Script you can now run any applescripts or turn on or off any other units that you need to. The unit wont ever turn off and that doesn’t matter. You could always add a “turnoff (thisUnit) in 2” to the bottom of it’s On script, but that is unnecessary.
> 
> Let me know if that works or if we need to figure out another way to do it.  I could do a whole shell script helper app for access to XTension, but that would be a larger project and therefore not going to appear as soon as you could get this working.


— 
Michel Angelo
<michel_angelo at me.com> macOS 10.13.6



-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.machomeautomation.com/pipermail/xtensionlist/attachments/20200405/ce786e95/attachment-0001.html>


More information about the XTensionList mailing list