Elixir and E-Robot for Android by Tamás Barta

14Dec/1341

E-Robot 1.17 is available

What is new

  • New expression: Operators / Convert to number
  • Open file action: new optional parameter to open file with the specified application
  • Variables: variable expressions are handled as named expressions and when variable value is needed then the expression is evaluated again and again
  • Auto Wi-Fi scans from 4.4 when Wi-Fi is off and Wi-Fi-based location detection is enabled
  • Execute command shortcut: "show please wait popup" parameter
  • Android 4.2/4.4 fixes on rooted devices: ADB state, Data romaing state, Change input method, Change locale, Change NFC state, Change GPS state
  • Detects and disables too many command executions to avoid slowing downs caused by wrong commands
  • Other fixes
Comments (41) Trackbacks (0)
  1. Hi, i just installed e-robot and like it very much but i can´t find an option to delay an action.
    What i need is that Bluetooth gets deactivated if it loses connection to my Headset after a few seconds, i need a delay because sometimes i loose connection to my Headset when i walk around in my House and the distance is to big and right now e-robot deactivates BT instantly. Is it possible to setup e-robot to wait 30 seconds and then deactivate BT only if the Headset is not connected again?

  2. Hi,

    You can use the Other / Wait action for that.

  3. Wow that was fast. 🙂

    Sorry but i´m new to e-robot, how do i use the wait command in my seup? I´ve setup the event BT ACL disconnetcted and the Action is Change BT state off. I´m not sure how to use the wait command in this setup.

  4. Ok found it.

    I just saw that e-robot kept my phone from getting in to deep sleep, is it because one of my commands checks if maps is in foreground? The perfomance tab shows that focus changed 6000 times so it seems that e-robot is checking this constantly.

  5. Ok, it won’t be as easy as I expected first because this “only if the Headset is not connected again” condition is a bit problematic.
    You should create two commands before to detect connected and disconnected states.

    1. So create a command with event BT ACL connected and add an action to Set variable “aclConnected” = logical true
    2. Create an command with event BT ACL dicconnected and add an action to Set variable “aclConnected” = logical false
    3. Now edit your command:
    – Add a Wait action to your command: time in milliseconds: 30000, while: keep it empty, max checks, keep it 0.
    – Click on the Wait action and select “Move up” to move it before Change BT state.
    – Click on Change BT state and select “Set condition”, click on the pencil icon next to “And operator” and select “Change expression” and then Constans / Variable, enter the name “aclConnected”.

    I hope it is clearer now E-Robot could work.

    • It seems to work this way, but i have to set the variables vice versa, true for disconnected and false for connected, or is there something i have to change in the condition? Seems like the action is triggered when the condition(the variable in this command) is true, found no option to change the condition in “variable = false”
      Have i overloked something?

      • Oh I wrote wrong, you want to turn off when not connected. So if “aclConnected” is true when connected then you have to add to following condition to the action: Not operator(Variable(“aclConnected”)):

        – click on action and select “Change condition”
        – click on the pencil next to “Variable” and select “Change expression”
        – select Operators / Not operator
        – click on pencil and select Variable

  6. I´m not sure if i understand the part with the Variable correct, i set an action with Other/Set Variable, e-robot aks me for a name, i put in “aclConnected”, but where do i set logical true?

    Sorry to bother you.

  7. Do you plan to change the way we have to setup an delayed action in future versions? I think Llama has an very easy to use option where an delayed command is only executed if the event that starts an action is still true. Would love such an option in e-robot and i´m sure i´m not the only one to dumb to understand how to set it up in e-robot… 😉

    • There is a big difference I think. Commands in E-Robots are triggered by events not by conditions, and the event doesn’t have a value so can’t be true or false, it happens once, that is all. For example: “Account is created” event happens when a new account is created. But there is no expression like “is account created?”, when? which account? …

      I feel that you can configure E-Robot the same way you think (at least I think :)): when acl disconnected “wait 30 seconds and then deactivate BT only if the Headset is not connected”. If you see the command you have to the exactly these steps. The only problem with this solution is that it cannot be detected if headset is connected (I don’t know any) that is why you have to listener for events to determine it.

  8. Thank you very much for your help, i set everything up but left my Headset in the car so i can´t test right now if it works. Great app and great Dev, gladly bought the pro key.

  9. I’m just getting started with E-Robot and am having some issues with setting up an orientation event to trigger a screen on. I see the parameters are direction, degree, pitch, and roll; but I don’t understand how to set these parameters? … [I’d be happy to post this to a forum somewhere, but I can’t seem to find any forums or tutorials anywhere on the web for E-Robot (other than brief intro at this site)??]

    • What is the situation when you want to turn screen on? There are a Device turned over and turned back events which uses orientation events inside but that event is too difficult and low level to be usable. So I think it would be better for me to create new events which are easily usable. That is why I ask what you want exactly.

      • Hey Tamas, thanks for the quick reply… My situation is this: While on my home wifi only, I have e-robot set to turn my screen on and off using the proximity sensor (i.e., a wave of the hand turns it on and off). It works great–too great actually. I find that I sometimes inadvertently turn off the screen while I am using my phone. So, I thought that I would set the phone to turn on and off using the proximity sensor, AND add a condition that the phone must be close to upright (I rarely would use the phone in a perfectly vertical orientation; it is usually at an angle in my hand or on a flat table top).

        Thanks in advance for your guidance. I am really impressed with the app. I have Tasker as well, but I find that the tasks I set in E-robot seem more responsive and reliable.

  10. Hi Barta, thanks again for your help, everything is working now, including the delayed BT-off command.
    But the battery drain is huge, i lost 44% over 6 hours at night, with Llama, AutomateIt or Tasker it´s normally about 3-4 % if i use nearly the same commands and tasks. The foreground check is holding my Nexus 5 awake, is there some other way to setup e-robot if i for example want to turn on gps when maps starts?

    • Hi. I don’t think there is other way to detect if an application starts. But you can do the following to get much better performance. Create two or one command(s) which listens for screen turns off/on. If screen turns off disable the robot command which check focus and when screen turns on enable it again. In this case it won’t do anything when you don’t use your phone.

      There is a Performance screen where you can see which event/action executes, how many times and how many cpu time uses. It could be useful to detect which command has poor performance and why.

  11. Is it possible to do something like this with E-Robot: if it is 9:30 p.m. or later, and I am at home (identified by cell towers or GPS), and I plug in my phone to a wall charger, run an Elixir profile to silence the phone other than the ringer (or have E-Robot turn off al sounds other than ringer and vibrate)? I saw in posts above that there are no “conditions” in E-Robot, just events. So, I’m concerned that if I plug in my phone at 9:40 p.m. at home, then E-Robot won’t trigger because it’s not 9:30 but after 9:30. And let’s say all works and the Elixir profile is triggered, what happens in the morning when I unplug? I would have to write another Command to check for 5:00 a.m. and unplugged? Thanks.

    • Hi. Your mistake is than not the time is the event here but plugging/unplugging. So you want the following in E-Robot language: When “External power is connected” (event) then silence the phone (actions) but only if it is 9:30 or later (condition 1) and I’m at home (condition 2). I think setting this event and settings actions are easy, the only tricky thing is how to set conditions. I try to explain it in a few steps and I hope it helps to understand E-Robot better.

      You could set conditions for the event or for the actions. Setting conditions for the event is a very good solution only if you want only one event. In this case set the following condition: “And operator(Is time(21:30, 05:00), Is in location(Home))”.

      It do exactly what you want. But what if you plugged your phone at 9:00pm (command isn’t executed that time) and it is 9:30pm now. Do you want E-Robot to silence your phone? In this case “External power is connected” event occurred earlier. The solution is easy, just add a 1-day repeated “Alarm” event at 9:30pm to your command. In this case your command will be executed at 9:30pm every day. But you don’t want that, you should set a bit different condition to this event: “And operator(Is in location(Home), Is battery charging)”. This means that silence the phone at 9:30pm if I’m at home and battery is charging.

      But setting to different but similar condition to events is not very user-friendly. If you have multiple events it would be simpler if you set condition for the action. But if you have multiple actions then you should configure the same condition for every action. It isn’t easy neither. There are two easier ways:

      1. Go to the Variable page and create a new variable from condition and give it a name. Let’s call it “chargeCond”. After that you can add a simple “Variable value(chargeCond)” condition to all of your actions. This solution is useful if you want to use different conditions for different actions.

      2. Add a “Break command” action as the first action to your command and set a negated condition for that: Not operator(And operator(Is time(21:30, 05:00), Is in location(Home))). This means if time isn’t between 21:30 and 05:00 or you aren’t at home then break command, doesn’t continue execute actions.

      I wrote a lot but the result is easy, the command:

      When: External power is connected OR It is 9:30 pm
      Then: Doesn’t do anything if it isn’t night or I’m not at home
      Otherwise: Silence the phone (set stream volumes to 0)

      If you would like to reset your phone into normal state then yes, you have to create a new command with inverted events and conditions.

    • One more thought. Sometimes I think I will add state-based commands to E-Robot as an addition to event-based commands. But I always conclude that while event-based commands are consistent state-based commands are not and have lot of problems. In your example it is easy to understand what E-Robot do: when time is 9:30pm or you plug your device then the command executes if conditions are true. If you set media volume at 10:00pm because you want to watch a film then no problem, E-Robot won’t turn it back until you unplug and plug again your phone.

      If there were state-based command then it would look like: When time is between 9:30pm and 05:00am and you are at home and phone is plugged then KEEP phone silent. In this case the state conditions should be reevaluated again and again (worse performance) and what should it do if detects that volume state doesn’t match the command? It will silent the phone to keep the states true. This is the first problem.

      The second problem that you would be able to create inconsistent commands. For example the same command what with state that keep the phone loud. The conditions are the same but the results are inconsistent. What should a program do in this case? Such problems don’t exist in event-based commands.

      What do you think about it?

      • Thanks. This is very helpful. I do need to get the triggers straight and remember about those conditions. I keep forgetting about them. On the state based commands, you might not want to over complicate E-Robot that much.

  12. Seems like i was wrong with the foreground check keeping my device awake, elixir2(another great app from you ;)) tells me that e-robot is responsible for about 5000 nlp wakelocks, nlp is used for locations isn’t it? I’m using cells for the detection of my location, is it maybe possible that I need to deactivate the other location options in the settings of e-robot or do you know some other way to get rid of those nlp wakelocks?

  13. I have another issue I’m trying to work around. I’m using elixir profiles triggered by E-Robot commands. I also set up E-Robot locations, including home. I generally check by cell towers. When I’m home, GPS is off by profile. I had to pick up my stepson nearby tonight and I turned on GPS manually. I must have been accessing cell towers in and out of my location because E-Robot would fire a command and turn on my home profile again, which turned off GPS. How can I avoid this? My prior automation app allowed me to turn on a profile for a specified period of time upon selecting a profile. I cannot figure out a way to do this with E-Robot and Elixir. I could just use Elixir to select profiles manually, but then I lose the benefit of E-Robot ‘s automation. I’ve tried a lot of automation apps and my prior one seems to be the only one that let’s me turn on a profile for a specified period of time. I was thinking if I could configure E-Robot to turn off rules for a specific time if I selected the GPS profile in Elixir, but I don’t think Elixer can trigger E-Robot and then turn right the rules back on. Any suggestions to avoid accidental command firings like this? Thanks.

    • Hi,

      You can create commands in E-Robot which enables/disables other commands. You can execute it from an Elixir profile using the “Start shortcut” action by selecting E-Robot and then execute the specified command. If you have a rooted device you can disable E-Robot and when you need again reenable it.

      You can create a command which disable other commands, waits for the specified time and reenables them again. The only problem I see now is that there is no method to enter a waiting time easily but editing the command before execute.

      >I was thinking if I could configure E-Robot to turn off rules for a specific time if I selected the GPS profile in Elixir, but I don’t think Elixer can trigger E-Robot and then turn right the rules back on

      So create a command for a profile which disables other commands and create an other command for your other profile which reenables them. You can execute it from Elixir profiles with Start shortcut action.

      • That’s a good idea. I do have a rooted device. The idea is not a fully automated option because I would have to turn E-Robot back on manually, but it should work to use an Elixir profile to turn E-Robot off and then manually turn it back on later. Thanks!

      • I tried your suggestion. The one drawback is that when Elixir disables E-Robot, the icon on my desktop disappears. Not a fatal issue, but if I use this suggestion, and if I need E-Robot available on my desktop, I will to add it back manually.

        By the way, the other day you mentioned state-based triggers rather than just event-based triggers. I said I didn’t think it was a good idea, but I might have changed my mind. I was in a movie today where I obviously want vibrate on. However, the movie appt overlapped a recurring appt I left in the calendar (the recurring one ending earlier than the movie). I have a Meeting End command. E-Robot ran it before the end of the move appt in the calendar. If E-Robot would test the state of the calendar and see that an appt is still pending, then it probably wouldn’t I have triggered the meeting end command. I believe state-based triggers are how my other (soon to be former) profiles/triggers app works (it was still on vibrate until after the end of the movie). There may be a way around this. I’m still learning all the nuances of E-Robot. But, this is something to consider. I thought about turning off the meeting end command when the meeting starts, but that won’t work because E-Robot would never know when to trigger the meeting end command. I will ponder further, though. Thanks.

        • > The one drawback is that when Elixir disables E-Robot, the icon on my desktop disappears

          Have you tried to disable only commands? Not the whole E-Robot?

          > E-Robot would never know when to trigger the meeting end command

          There is a “Calendar event stopped” event. Isn’t is good for this purpose?

          • I think I rambled too much and didn’t make myself clear.

            > The one drawback is that when Elixir disables E-Robot, the icon on my desktop disappears
            > Have you tried to disable only commands? Not the whole E-Robot?
            > E-Robot would never know when to trigger the meeting end command
            > There is a “Calendar event stopped” event. Isn’t is good for this purpose?

            Here is my situation. Movie calendar event from 1 until 4. Weekly meeting from 2 until 3. I didn’t delete the weekly meeting from the calendar so the “calendar event end” event triggered at the end of the weekly meeting at 3 and changed my sound profile to “Normal” which isn’t a good thing because I was in the movie until 3. The issue is overlapping appointments where calendar event ends triggers twice, once when the first appt ends and once when the second appt ends. I want the “silent” profile to remain in effect until the second appt ends. That’s one issue. I can’t turn off “calendar end” when a calendar events starts because then E-Robot wouldn’t know when the calendar event ends and to turn back on my sound profile.

            The other relates to my comment that going in and out of my home location turned GPS on and off. There is no way to turn on a profile for a specified period of time. You suggested that I use Elixir to disable E-Robot from triggering. As far as I know, Elixir can’t disable E-Robot commands. It has to disable the entire app. When it is disabled, it wipes out the icon on my desktop.

            Thanks.

  14. This is an amazing app. I have added quite a few commands and I’m really excited. I want to turn on (wake up) the phone when a volume button (+/-) is pressed. I’m unable to achieve this. Please help me achieve this. I tried connecting the event “Media Button Pressed” to the action “Turn screen on”. But it is not working.


Leave a comment

No trackbacks yet.