[Android General] brandall:
Creating Useful Variables | SPLITS | SETS | FLASH | LISTS | CLEARING & MORE!

What you will learn

Variable Splits

Variable Sets

Variable List

Variable Clear (Good housekeeping)

Flash Variables

Writing to a text file

Exit Tasks

The Meaning of Life

Overview

When creating your own profiles and tasks, there will be conditions that you will use over and over again. Checking that the device isn’t on silent before playing any notifications would be a good example. Another may be location based, such that you want your device automatically on silent IF you are at work.

Profile Aim

I will walk you through how to set up your own most commonly used variables so you can see how they are created and ways in which you can use them.

Simple Preparation

Make yourself a cup of tea.

Profile and Task Explanation

Let’s start out with a very basic context of ‘being on the phone’. This will prove useful to you in many future profiles such as ones that toggle your data connection. For example, if you have a battery saving profile that is triggered when your battery level drops below 25% and its first action is to switch the phone from 3g preferred to 2g only, you really don’t want this talking place if you are on the phone at the time – it will cut you off! There is no built in variable to use within an IF statement for ‘phone in use’, but there is a context we can use, so let’s create a variable using that.

From the main Tasker screen, select ‘New’ and ‘Event’. Select ‘Phone’ and ‘Phone Offhook’. Press the ‘?’ at the top of the screen to read a description of when this context will apply – For all intents and purposes; it’s when you are on the phone.

Leave the priority as normal and select ‘Done’. The Task Selection list will be displayed, select ‘New Task’ from the top, name it ‘InCall’, give it a relevant icon, add a STOP entry (+, Tasker, Stop) and select ‘Done’ and ‘apply’ out of Tasker to ensure that your work so far is saved if anything goes wrong.

Go back into Tasker and select ‘Tasks’ and from the list select your created task ‘InCall’. Now, in the future it may be that you wish Tasker to perform some actions when you are on the phone, but for now, all we are interested in is creating a variable we can use when the condition of ‘being on the phone’ is true!

Click the + and select ‘Variable’ and ‘Variable Set’. In the name field we want to call it something memorable, so let’s go for %INCALL (always must be capitals). So, we know this task we are creating will be triggered when a phone call is taking place, so in the ‘To’ field put the number ‘2’. Select ‘Done’ which will return you to the task screen. Click on + and select ‘Alert’, ‘Flash’ and in the ‘Text’ field type %INCALL. Press ‘Done’.

In the task, press and hold the original ‘Stop’ action you created and drag it down to position number 3. Your task should then be:

#1 Variable Set (with the description showing)

#2 Flash (with %INCALL showing)

#3 Stop

Press the ‘Test’ button which will simulate the task being triggered (you are on the phone) and on the screen should appear the number ‘2’. Every time you now are on the phone, Tasker will set the variable you have just created %INCALL to a value of 2.

Let’s imagine in another task you are creating, you’ve just selected an action to change the phone to 2g only. This would result in the radio turning off briefly and would end a call if you were on one. In that circumstance, you would use the variable we’ve just created to only switch to 2g IF %INCALL ‘does not = 2’. This way, if you were on the phone and %INCALL = 2, Tasker would skip that action. Sorted?

Q) But hold on… %INCALL has been set to 2 when I just pressed ‘Test’, will it automatically change from 2 when I finish the call?

A) Good question! NO! We need to do this ourselves…

From the main screen, click on ‘New’ and select ‘Event’. Click on ‘Phone’ and select ‘Phone Idle’ (read the ? if you want an explanation). Leave the ‘Priority’ as normal and select ‘Done’. Select ‘New Task’ when the selection list is displayed, name it CallEnd, select the same icon as InCall (to keep things tidy), add your Stop action and save out of Tasker to preserve what you’ve done.

Going back into the task CallEnd, we know we need to change the value of the variable we created %INCALL to something else other than ‘2’. Select +, Variable, Variable Set. In the name field put %INCALL and in the ‘To’ field put the number ‘1’. Press Done. As you did above, add in an Alert, Flash, %INCALL action and make sure the actions are in the same order as we did in the task InCall. Press the ‘Test’ button and you’ll see the number 1 flash up on the screen.

We now have the variable %INCALL to use whenever we need to consider the phone’s state and is ready to use in any IF statement to ensure an action will only take place IF %INCALL = 1 (I’m not on the phone). Sorted!

Q) But hold on… Why did you use the values 1 and 2? Why not 1 and 0 or another option?

A) I always avoid using zero when applying a value to a variable. The simple reason is that when you start creating more complex tasks, you may well wish to add %COMPLEX-TASK to %VERY-COMPLEX-TASK. Adding ‘zero’ to something will not make a change and therefore I always give my created variables a value of 1 or above.

There are other options such as setting %INCALL to 1 when we are in a call and then ‘Variable Clearing’ it when the call is ended. This would result in %INCALL having no value applied to it when no phone call was taking place. Tasker has the option to check for this in an IF statement – you can say IF %INCALL ‘is not set’. Conversely, there is an option to ask IF %INCALL ‘is set’. I prefer to always use a value; the reason being that a variable that hasn’t populated correctly will also contain nothing. At any point I can ‘Variable Flash’ any of my created variables and see that it has a value and know therefore it is working (it may be the wrong value of course – but at least you’ll know!).

Ok, let’s move on. Drag the ‘Flash’ actions below the ‘Stop’ action, as there’s no need for them to appear on the screen every time the phone is used and save back to the main screen. Let’s move on to something that works on the same basis, but is a little more complicated.

You may have read about using cell towers to trigger location based profiles, such as automatically sending your wife a text when you leave the locality of the office, IF the %TIME is greater than 5pm - but there are other ways you can let Tasker know where you are or aren’t.

The obvious choice would be the SSID (wireless name) of the wireless router you are connected to. We can easily set up our own variables so that %IM-AT-HOME is set to a value of 2 when Tasker becomes connected to the SSID of your home wireless BELKIN23456 (for example). The same can be done for other locations such as work. When it’s no longer connected, it sets %IM-AT-WORK back to 1.

Having such variables are useful within IF statements of other tasks. If you have a battery preserving profile that is set to turn off WiFi after a certain period, you may not want it to do this when you are near your charger at home. So, having an IF statement within the action of ‘set wireless off’ IF %IM-AT-HOME ‘does not = 2’ would stop the disconnection.

These variables are also useful for triggering other profiles, such as your work or home profile. My device is currently set up to sync every 30 minutes (using Tasker) and therefore within 30 minutes, Tasker will know if I am at home/work/parents/gym etc etc and can apply any specific actions/profiles accordingly.

Let’s say I’m at the gym. I always listen to music on my device when I’m there, so I don’t want any notifications coming through the headset and interrupting the playback or deafening me! I therefore want Tasker to put the phone to vibrate only. This is very easily done.

The triggering context will be Tasker spotting the variable %ATGYM (we will create shortly) has been set to a value of 2. Let’s set that up - Click on New and select Event. Select variable and variable set. In the Variable field, type %ATGYM and enter the value as 2. Click done and select New Task, naming it GymProfile, select an icon and add in a quick Stop action before saving and returning.

Back in the task GymProfile, click on + and select Audio and Silent Mode. Select vibrate and press Done. Drag the action up to position #1 and select Done. Job done!

Q) But hold on… When did it realise I was in the gym and change %ATGYM to = 2?

A) It didn’t! We need to create that profile now.

Now, this is where it’s going to start getting a little bit tricky, but I will explain it as simply as I can (apologies if I patronise). Unfortunately, the current version of Tasker does not have %SSID as an inbuilt variable. We therefore have to get this from somewhere else.

Create a new task and call it SSID, choose your icon and add a quick stop action in before exiting to preserve. Back in the task, we need to have a look at the data held inside another variable that contains the SSID. This variable is %WIFII (which stands for WiFi Information (I assume!)). You’ll need to be connected to a wireless network to be able to follow along with the next steps. If you’re not or can’t be right now, again I’ll try and explain the best I can.

There are a few ways to view the data stored in a variable. We used variable flash above, but as the name suggests, this doesn’t stay on the screen for long enough to study. We are going to write the data to a basic text file on the root of the SDcard. In the task SSID, press +, File, Write File. In the ‘File’ field, type SSID.txt and in the ‘Text’ field type %WIFII. Do not tick the ‘Append’ checkbox. Press done and drag this write file action into position #1 above the stop. Press Test. You’ll notice when you press ‘Test’ a button will appear that says ‘Kill All’. This will appear and disappear very quickly in a small task such as this, but if it remains, it may suggest you have done something wrong and the task has gone into a loop or is trying to resolve itself. The other alternative is that another profile/task is running, so don’t be too eager to press Kill until you’ve checked!

Assuming that worked without issue, in a file explorer navigate to the root of your storage card and locate the file we created SSID.txt. You have just learnt that if you try and write to a file that doesn’t already exist, Tasker will create it. The ‘Append’ tick box in the write file action gives you the option to overwrite the file if unticked, or add more data to the bottom of the existing file if it is ticked (appended). Open up the text file and you should see something like this:

>>>CONNECTION<<<

BELKIN45678

Mac: 00:1b(the remainder of your Mac address)

IP: 192(the remainder of your IP address)

Sig: 8

Spd: 54Mbps

Congratulations, you’ve just written your first data file using Tasker! In future, you can easily pull any data/RSS feed from the Internet under the option +, Net, HTTP GET using the ‘Output File’ field at the bottom.

Let’s carry on – So, we have the above data, but we only want the SSID out of it, which in this example is ‘BELKIN45678’. As usual, there is more than one way of doing this, but I want to show you variable splits, so that is how we shall proceed.

Back in the task SSID, we want to ‘split’ apart the data above that is held in %WIFII. It’s good practice to transfer this data to your own created variable to start with, for a few reasons that I won’t go into now! Let’s do that – hit +, variable and variable set. In the ‘Name’ field type %SSIDD which will standard for 'SSID data'. In the ‘To’ field, type %WIFII and press done. Drag this to position #1 and whilst you’re at it, drag the Write File action below the stop as we don’t need that again. What we’ve just told Tasker to do, is transfer any data that is held in %WIFII to %SSIDD. ‘Flashing %SSIDD would show you this if you wanted.

We have to decide where to ‘split’ the data in order to just leave us with the SSID we are after. When doing variable splits, it’s important to put as much information in the ‘split’ field as possible as this is how Tasker will dissect the data. For example, if we asked Tasker to split the data at the letter ‘S’ it will do so and create a number of split variables for each time it encounters the letter ‘S’ and create them in order in %SSIDD1, %SSIDD2, %SSIDD3 and so on and so forth for the number of times it encounters and splits at the letter ‘S’.

Looking at the example above, you would end up with a split at ‘Sig: 8’ which would populate one of the created variables (%SSIDD23 for example) as ‘ig: 8’ as after the ‘8’ it will encounter another ‘S’ at the start of ‘Spd’. So, let’s see where we want to split the data. Before the SSID, we have >>>CONNECTION<<< so, we’ll use that! Now we have to look at where we want the split to stop – after the SSID it lists the Mac address, so we’ll stop the split at ‘Mac:’. Let’s do it…

In the task SSID, hit +, Variable, Variable Split. First it asks for the name of the variable we want to dissect, so type %SSIDD (we transferred the data from %WIFII remember?). In the ‘Splitter field’ type ‘<<<’, leave the ‘Delete Base’ box unchecked and press done. Drag this action to position #2 under the original variable set. To see what the first split is going to do to %SSIDD, insert a +,variable, variable list action into position #3 (above stop). A variable list action will show on the screen ALL of the current user created variables that are populated. Your task should look like this:

#1 Variable Set %SSIDD to %WIFII

#2 Variable Split %SSIDD - Splitter <<<.

#3 Variable List

#4 Stop

Press Test.

For a short while on the screen the list of variables will show you that we now have %SSIDD’parts’.

NOTE: If the screen has just flashed up a load of variables that you have created in the past and not ‘cleared’ and you can’t see any %SSIDD# entries, you’ll need to clear these. You can either do this manually but using individual ‘variable clear’ actions and typing the names of all of the variables you see, or you can leave the ‘Name’ field blank in the variable clear action and it will clear ALL of your created variables. Be warned; If some of your existing profiles trigger from %A-VARIABLE ‘is not set’ then they will start!

The original %SSIDD remains and as we won’t need the full data set again, go into the variable split action and tick ‘Delete Base’ and press Test again. Doing that ‘cleared’ %SSIDD and you should see now that %SSIDD2 starts at your SSID with more data on the end and %SSIDD1 is the data before the split of ‘<<<’. Let’s insert a variable clear action for %SSIDD1 in position #3 (before we list) as we don’t need this. Pressing test again you’ll see that all that remains is %SSIDD2. As discussed above, let’s split that at ‘Mac:’ where our SSID ends. Insert that variable split into position #4, ticking ‘delete base’ as we won’t need the original. Your task should now look like this:

#1 Variable Set %SSIDD to %WIFII

#2 Variable Split %SSIDD - Splitter <<<. (with delete base ticked)

#3 Variable Clear - %SSIDD1

#4 Variable Split %SSIDD2 – Splitter Mac:

#5 Variable List

#6 Stop

Press Test.

Listed on the screen I hope you’ll see that %SSIDD21 now shows nothing but your SSID!? Job done! We’ll continue on to use that again in a moment, but first we need to do some housekeeping and clear up our mess to make sure there are no ‘variable parts’ that have been left - these can build up over time. Pressing test again, you’ll see that a variable %SSIDD22 was created – insert a variable clear action in position #5 to take care of that – Tidy files, tidy mind… The last thing to tidy up would be the fact that our SSID is stored in the variable %SSIDD21 – that’s hardly memorable is it…? So let’s transfer it to %SSID by doing a variable set ‘Name’ %SSID to %SSIDD21 and that only leaves us to variable clear %SSIDD21 as it’s no longer needed.

Your final task should look like this:

#1 Variable Set %SSIDD to %WIFII

#2 Variable Split %SSIDD - Splitter <<<. (with delete base ticked)

#3 Variable Clear - %SSIDD1

#4 Variable Split %SSIDD2 – Splitter Mac: (with delete base ticked)

#5 Variable Set %SSID to %SSIDD21

#6 Variable Clear %SSIDD21

#7 Stop

#8 Variable List

Action #8 below Stop, will never be ‘actioned’ but I tend to always leave such things there for testing purposes, so if ever something goes wrong, or you need to adapt a profile, your ‘testing actions’ are still there waiting to be dragged up and back into ‘action’!

So, let’s recap. By running the task SSID, we will extract the current SSID we are connected to. We can use this SSID to trigger location profiles.

Q) But hold on… What triggers this task? It’s great that it can get the SSID I’m connected to, but when does it start?

A) Well spotted! We need a context to trigger this.

In the main screen, click on New and State. Select WiFi Connected and leave all of the fields blank.

Q) But hold on… There’s a field there for SSID! Why did we just do all of the above if we can just stick in that box!? Do you actually know what you’re talking about?!

A) Well, that’s a little bit rude, but yes, honest, I do.

Admittedly, there are many different ways to get a desired result when setting up profiles and tasks in Tasker. The above was good (hopefully) for educational purposes, but the main reason that what we’ve done is useful, is because the extracted SSID (%SSID) can now be used in any IF statement in any action. Just because this particular context can identify an individual SSID, doesn’t mean that you can reference it elsewhere in Tasker… As a further example, the same can be said for mobile data – as a triggering context, there are 2g, 3g, 4g etc ‘connected to’ tick boxes, but no such specific conditions when looking at the inbuilt variables. I hope that made sense?

Where were we? Oh yes, so we’ve left all of the fields blank in the Wifi Connected context. Select done and select New Task naming it WIFIOC, which will stand for WiFi is on AND connected. To clarify again, this context triggers when WiFi is CONNECTED to a network – NOT when WiFi is ‘just’ switched on…

In the task we want to set variables depending on SSID. From the context above, we know that when this task triggers, WiFi must be connected to a preferred network – but which one? To complete this task, you’ll need the SSIDs of all of your preferred networks. With WiFi switched on, these will be detailed in the Android settings menu/settings/Wireless & networkds/Wi-Fi settings. We are going to use an IF statement for each one of these; the number depending on how many preferred networks you regularly connect to, or more importantly, which of these you may wish to trigger a profile….

We are going to create memorable variable names for each place such as %WIFIHOME, %WIFIWORK, where you connect to a wireless network. So, let’s assume you are connected to your home wireless which has the SSID of BELKIN45678. Select +, select variable and variable set ‘Name’ %WIFIHOME to ‘2’ and then tick the IF box – and using our created variable above %SSID ‘matches’ BELKIN45678 and select done. There! Tasker will now know that you are at home when %WIFIHOME is set to a value of 2! Sorted!

You need to repeat this individual action for every preferred SSID you want to use:

#1 Variable Set %WIFIHOME to 2 IF %SSID ‘matches’ XXXXXX

#2 Variable Set %WIFIWORK to 2 IF %SSID ‘matches’ XXXXXX

#3 Variable Set %WIFIGYM to 2 IF %SSID ‘matches’ XXXXXX

#4 Variable Set %WIFIBLAR-BLAR-BLAR to 2 IF %SSID ‘matches’ XXXXXX

Etc, etc…

In action #2 above you’ll see that %WIFIGYM has been set to 2 and this will trigger the profile we ran through way back when at the beginning… Although I think I called it %ATGYM back then, but hey, you know what I mean!

Q) But hold on…

A) Jesus, what now?

Q) This task was triggered by WiFi being connected but it doesn’t check the SSID, so how does it know which one to set to 2 IF it hasn’t checked?

A) Well spotted… Before Tasker can start deciding which %WIFI-BLAR it sets to a value of 2, it needs to extract the SSID (%SSID) from %WIFII – that was done in the task we created ‘SSID’

So, we need that to run before we ask Tasker to check IF the SSID matches any of our locations. As usual, there are a number of ways to do this. We could tag the above actions onto the end of the task SSID and get rid of WIFIOC completely, or alternatively, we could just run the task first…

In the task WIFIOC, select +, Tasker, Perform Task. Click on the magnifying glass and select the task SSID. Drag the slider along to increase the priority to a very important 9. Select done and drag this action up to position #1. This now means that every time WiFi is on and connected it will run the task WIFIOC which will immediately kick off the task SSID in action #1. Action #2 uses an IF statement involving the results from the task SSID and therefore it’s essential that it has run first prior to action #2. Giving it a priority 9 as we did, tells Tasker it is more important to run that task than continue with the current one, which will be set to 5 as standard (we haven’t changed it).

Now, I hold my hands up here and tell you that I don’t honestly know if this means that Tasker waits for SSID to finish before continuing with action #2 in WIFIOC. Just to be sure, let’s add something else into action #2. Select +,Tasker, Wait and drag the slider (or use the +) to 5 seconds. Drag this action up to position #2 directly after the perform task (SSID) action. However Tasker exactly handles the higher priority task, 5 seconds is more than enough for it to have extracted the SSID it is currently connected to and be ready to compare it to all of the IF statements from action #3 downwards!

WOW, I really have written loads… I hope you are still with me!? Let’s recap: The context triggers by WiFi being on and connected. That runs the task WIFIOC to determine your location by the SSID which is discovered in action #1 when we tell it to run the task SSID. Assuming that we are in the gym at the time, it’ll change %WIFIGYM to a value of 2 and the profile you set up which looks for this profile (sorry, I think I called the variable %ATGYM originally, but it’s easily changed!) being set to a value of 2, will trigger the task GymProfile!

Q) But hold on… this has set my device to silent, but what happens when I leave the gym? Will Tasker know and turn the ringer volume back on?

A) Nope! We need to deal with that…

When you set up a triggering context, you normally choose between an ‘event’ or a ‘state’. Generally speaking, an event trigger can be described as something that takes place in an instance; such as a ‘received text’. Although the text may remain unread and in the inbox, the instance of receiving it has passed and therefore so has the ‘event’. A ‘state’ may be different in that it continues to be active – a good example would be when the battery is ‘less than’ 25%. This is still the case at 24,23,22% etc etc and so the ‘state’ remains true. In this type of context, we can (usually) add something called an Exit Task, which is purposely triggered when the ‘state’ is no longer active.

I explain the above, as this is applicable to the trigger we used of WiFi being on and connected. The profile will remain active in Tasker until the WiFi is no longer connected to a preferred network (not OFF, just NOT CONNECTED remember?) and this is perfect for us to use, as if we are no longer connected to the gym wireless… we must have left the gym! See where I’m going with this?

In the main Tasker screen, click the visible task WIFIOC. This should bring up a menu list, one option of which will be to ‘add exit’. Select it and give the new task a name WIFINOC and icon etc as usual. The purpose of this task is to set any of the above %WIFIBLAR location variables back to 1 as we are no longer connected to ANY preferred network, so therefore cannot be in any of those locations (obviously yes, the connection could have gone down, but apart from that). So, add in all of the necessary variable set actions changing %WIFIGYM, %WIFIHOME etc etc to a value of 1. Job done.

Q) But hold on… Isn’t my device still on silent from the gym profile?

A) YES! But this guide is getting way too long, so I’ll wrap it up here by pointing you in the right direction.

When you leave the imaginary gym, let’s assume you want your phone to be in a ‘normal’ state, volume high, silly ringtone, brightness up, mobile data on etc etc – You need to create this ‘Normal’ task/profile yourself and have it triggered (Tasker/Perform Task) at the end of the above Exit Task. That normal profile will then take over whenever you are ‘between places’.

Finally, don’t forget you could perform the ‘normal’ task only IF certain conditions were true, like the day of the week or the time. Below that perform task you could have another one that tries to perform a weekend profile for example? If the conditions weren’t true for performing the ‘normal’ action then Tasker will ignore it and go to the next one….These changes in profiles from normal to gym to work etc will end up becoming more entwined as you increase the number of your profiles/tasks and the conditions that apply to them. They all should have a 1 for off and 2 for on and end up triggering a relevant other when their conditions no longer apply...

I fear I’m waffling…. and have somewhat gone around the houses, as you would normally start creating a masterpiece with a triggering context and go from there, but hey, my busy typing fingers decided differently...

Hope this has helped you? Any questions, please feel free to post and if you are feeling super knowledgable now, take a look at the Data and Sync tutorial in my signature which this is loosely based upon…

The thanks meter is the only way I know this was useful to you! :eek: