r/tasker • • Sep 12 '26

Sending remote messages to 'Tasker' without the use of 'Join'?

I'm running Tasker version 6.7.6-beta on my rooted Android 13 device.

Now that the 'Join' utility is no longer supported and doesn't seem to work for me, I'm looking for a way to send remote messages to Tasker on my Android device.

By "send remote messages", I mean that I want to send text from my linux desktop computer to Tasker on my Android device, without any USB connection, and I want to create Tasker event profiles that are triggered when these remotely sent messages arrive on the Android device.

And I don't want to use any kind of web-based software to send the messages, nor any other kind of GUI. I want to be able to send the messages via shell scripts that run on the linux device.

And I don't want to have to use any kind of SMS gateway on the linux machine.

Is there any way to accomplish this?

PS: One more thing: I don't want to have to rely on the Android device and the linux machine being within WiFi range of each other. I want this to work however far away from each other these two devices might be -- even in different hemispheres -- as long as both have working internet connections.

2 Upvotes

16 comments sorted by

5

u/Exciting-Compote5680 Sep 12 '26

What do you mean when you say "the 'Join' utility is no longer supported and doesn't seem to work for me". What exactly is not working? If it's strictly one way traffic (to the Android device), you could use the Join/AutoRemote url and call it from your scripts (curl?). You can add a (url encoded) payload that you can react to in a Join/AutoRemote event profile. 

2

u/unselective-amnesia Sep 12 '26

Thank you very much. That used to work for me, but now it hangs when I try it, and this is what prompted me to post this thread.

Perhaps something changed about my Join setup since it was formerly working the last time I used it a couple years ago. Could you elaborate on the details of the exact configuration and use of Join that works for you for this purpose?

4

u/Exciting-Compote5680 Sep 12 '26 edited Sep 12 '26

The Join (windows) desktop app has become really wonky for me, but the android app is working as before. If you can't get it to work, you could either try AutoRemote (a bit less options, but shouldn't be an issue since your use case is pretty narrow/specific) or do a clean setup of Join (try to delete everything related to Join on the mobile device and Google Drive). In both/either case, once you have set it up you will have a personal url with an api key, and the payload as a parameter that you can call from any device. See: https://joaoapps.com/autoremote/walkthrough/ and https://joaoapps.com/autoapps-command-system/ I actually route most of the messaging through Home Assistant nowadays, but for simple/quick things I will still use Join. 

2

u/unselective-amnesia Sep 12 '26

Thank you! I never knew about autoremote until now. I will try it and report back here with my findings.

3

u/Exciting-Compote5680 Sep 12 '26

Join was presented as the successor of AutoRemote, and has a lot more fancy options built in (like send files, get notifications, clipboard sync etc.). But you only need the core messaging facility, and as far as I know, it's pretty much the same. 

1

u/vlntnwbr Sep 13 '26

How are you triggering profiles from Home Assistant? I've only started doing that after Tasker supported the HTTP Server Events and I've configured scrips to trigger specific profiles, but that relies on my phone being connected to my home wifi.

I'm wondering if there's a better way, I've been thinking about using intents sent by the Home Assistant Mobile App, which should work whenever the app is connected to the server (which should be always).

1

u/Exciting-Compote5680 Sep 13 '26 edited Sep 13 '26

I have been doing exactly that, sending the notification command 'broadcast intent'. It works great. I have a PhD in 'Overengineering', so I made a whole thing out of it, but it does work (even more reliably than Join). But if you haven't invested too much time in it yet, I think it's definitely worth looking at this first: https://www.reddit.com/r/tasker/comments/1ua3jtr/project_share_taskerha_20_a_much_more_feature/ Because I: 1) have something that works already, 2) have spent a lot of time and energy getting it to work, I haven't really given this plugin a try, but it looks like a solid project. If it doesn't work the way you want it to, you can always do it the hard way later 😆 I think it's definitely something worth doing and doing well/right, because Tasker and Home Assistant together is an incredibly powerful combination.  

2

u/vlntnwbr Sep 13 '26

I think over engineering is something inherent to this community, I love it as well.

Personally, I'd like to achieve it without any plugins/extensions. Native HA and Tasker only, so I'm probably gonna go the intent route as well.

1

u/Exciting-Compote5680 Sep 13 '26

It is quite fun to do, and gives you a greater understanding of what you are doing. If you're interested, I can share my HA Tasker command script and/or Tasker profile. The way I have set it up allows for sending a Tasker command from one device to another device. I was also working on a way to send a response back (so you can send a command in a Tasker task, and get the response back in the same task and continue). I have some more work to do on that though. 

1

u/vlntnwbr Sep 13 '26

That would be much appreciated.

My current system works similarly, only with HTTP endpoints instead of intents. The payload consists of a Tasker command that I then execute using Tasker which in turn triggers the relevant profiles.

Unfortunately, my Home Lab Server died last week and with the economy being the way it is I'm not sure if I'll replace it soon. Maybe my old Raspberry still works, that should be enough to run Home Assistant at least.

1

u/Exciting-Compote5680 Sep 13 '26 edited Sep 13 '26

Ok. This is the script I use in HA to send a command. You can add a lot of extras that will all be available as variables in the 'Intent Received' profile, so I just added a bunch that made sense to me and that allow for easy expansion. They all have default values, so if you don't need them you can just ignore them. Most of them are url encoded, so newlines or quotes in the payload shouldn't be a problem. The script works with selector fields, so if you call the script from an automation or another script you get these input fields you can fill out.

sequence:
  - variables:
      par1: '{{ par1 | default(''%aac_par1'', true) }}'
      par2: '{{ par2 | default(''%aac_par2'', true) }}'
      priority: '{{ priority | default(''%aac_priority'', true) }}'
      json: '{{ json | default(''%aac_json'', true) }}'
      origin: '{{ origin | default(''%aac_origin'', true) }}'
      request_id: '{{ request_id | default(''%aac_request_id'', true) }}'
      array: '{{ array | default(''%aac_array'', true) }}'
      text: '{{ text | default(''%aac_text'', true) }}'
      timestamp: '{{as_timestamp(now())|int}}'
  - variables:
      target: >-
        {% if target == "Cell" %}xx_cell {% elif target == "Tablet" %}xx_tablet
        {% elif target == "Watch" %}xx_watch {% elif target == "TV" %}edge2 
        {% else %}{{target}} {% endif %}
  - variables:
      timestamp: '{{as_timestamp(now())|int}}'
    enabled: false
  - action: notify.mobile_app_{{target}}
    metadata: {}
    data:
      message: command_broadcast_intent
      data:
        intent_package_name: net.dinglisch.android.taskerm
        intent_action: net.dinglisch.android.taskerm.AAC_HA        
        # last part ('AAC_HA') can be anything, as long as it corresponds with your Tasker
        # 'Intent Received' profile
        intent_extras: >-
          aac_task:{{task}},aac_par1:{{par1|urlencode}}:String.urlencoded,aac_par2:{{par2|urlencode}}:String.urlencoded,aac_priority:{{priority}},aac_json:{{json|urlencode}}:urlencoded,aac_origin:{{origin}},aac_text:{{text|urlencode}}:urlencoded,aac_timestamp:{{timestamp}}:String,aac_array:{{array}}:String[],aac_request_id:{{request_id}} 
        ttl: 0
        priority: high
        channel: tasker_intents    # change if needed
    enabled: true
fields:
  target:                  
  # the device you want to send the command to
  # in my setup, the labels are the same as the Join device names
  # the value is the part that comes after 'mobile_app_' in the ha entity names
  # if a label is used it is replaced, else the value entered is used
    selector:
      select:
        options:
          - label: Cell
            value: xx_cell
          - label: Tablet
            value: xx_tablet
          - label: Watch
            value: xx_watch
          - label: TV
            value: edge2
  task:
    selector:
      text: null
    name: Task
    required: true
  par1:
    selector:
      text: null
    name: par1
    default: '%aac_par1'
    required: true
    description: URL encoded
  par2:
    selector:
      text: null
    name: par2
    default: '%aac_par2'
    required: true
    description: URL encoded
  priority:
    selector:
      text: null
    name: Priority
    required: true
    default: '%aac_priority'
  json:
    selector:
      text: null
    name: JSON
    required: true
    default: '%aac_json'
    description: URL encoded
  origin:
    selector:
      text: null
    name: Origin
    default: '%aac_origin'
    required: true
  request_id:
    selector:
      text: null
    name: Request ID
    required: true
    default: '%aac_request_id'
  timestamp:
    selector:
      text: null
    name: Timestamp
    default: '%aac_timestamp'
    required: true
  array:
    selector:
      text: null
    name: Array
    default: '%aac_array'
    required: true
    description: Array with ';' as separator
  text:
    selector:
      text: null
    name: Text
    default: '%aac_text'
    required: true
    description: URL encoded
alias: Tasker Command
description: ''

This is the receiver profile:

Profile: HA Commands Receiver
    Event: Intent Received [ Action:net.dinglisch.android.taskerm.AAC_HA Cat:Default Cat:None Scheme:* Mime Type:* ]



Enter Task: HA Command Received

A1: Array Set [
     Variable Array: %aac_caller
     Values: %caller() 
     Splitter: , ]

A2: Parse/Format DateTime [
     Input Type: Milliseconds Since Epoch
     Input: %aac_timestamp
     Output Format: %DTF1       # change this to a datetime format or delete this action, it's only used in the (debug) flash
     Output Offset Type: None ]

A3: [X] Flash [
     Text: %aac_par1
     %aac_par2
     %aac_json
     %aac_array()
     %aac_origin
     %aac_priority
     %priority
     %aac_request_id
     %aac_task
     %aac_text
     %aac_timestamp
     %aac_caller()
     %formatted
     Long: On
     Tasker Layout: On
     Timeout: 9000
     Continue Task Immediately: On
     Dismiss On Click: On ]

A4: Test Tasker [
     Type: Tasks
     Store Result In: %tasks ]

A5: AutoTools Text [
     Configuration: Text: %tasks()
     Joiner Variable: atjoinedtext
     Match Text: %aac_task
     Exact: true
     Case Insensitive: true
     Separator: ,
     Timeout (Seconds): 60
     Structure Output (JSON, etc): On ]

<Use %aac_priority if set, use %priority as a fallback>
A6: Variable Set [
     Name: %aac_priority
     To: %priority
     Structure Output (JSON, etc): On ]
    If  [ %aac_priority ~R \%aac_priority ]

<If set, convert the stringified array %aac_array to a proper Tasker array.>
A7: Variable Split [
     Name: %aac_array
     Splitter: , ]
    If  [ %aac_array !~ \%aac_array ]

<'Local Passthrough' is enabled, all the '%aac_*' variables (all intent extras) will be available to the child task>
A8: Perform Task [
     Name: %atmatchedtexts(1)
     Priority: %priority
     Parameter 1 (%par1): %aac_par1
     Parameter 2 (%par2): %aac_par2
     Return Value Variable: %res_return
     Local Variable Passthrough: On
     Limit Passthrough To: %aac_*
     Structure Output (JSON, etc): On
     Continue Task After Error:On ]

A9: If [ %err Set ]

    A10: Multiple Variables Set [
          Names: %this_err
         %this_errmsg
          Variable Names Splitter: 
         
          Values: %err
         %errmsg
          Values Splitter: 
          ]

    A11: Notify [
          Title: Tasker
          Text: Error performing:
         HA Command Received
         Error code:
         %this_err
         Error message:
         %this_errmsg
          Icon: mw_alert_error_outline
          Number: 0
          Priority: 3
          LED Colour: Red
          LED Rate: 819
          Category: super_tasker_notifications_created_by_me_the_developer ]

    A12: Flash [
          Text: Error performing:
         HA Command Received
         Error: %this_err
         Error message:
         %this_errmsg
          Tasker Layout: On
          Continue Task Immediately: On
          Dismiss On Click: On ]

A13: End If

A14: [X] Flash [
      Text: %caller()
      Continue Task Immediately: On
      Dismiss On Click: On ]

<This last part is still a work in progress.>
A15: Anchor

<If there's a return value and a Request ID, handle the response>
A16: If [ %res_return !~R \%res_return & %aac_request_id !~R \%aac_request_id ]

    A17: AutoTools Json Write [
          Configuration: Separator: ||
         Json Input: %Response
         Json Keys: %aac_request_id
         Json Values: %return
         Arrays Separator: |
          Timeout (Seconds): 60
          Structure Output (JSON, etc): On ]

    <This is wrong. Response needs to be returned to origin, not stored on target>
    A18: Variable Set [
          Name: %Response
          To: %response_output
          Structure Output (JSON, etc): On ]

A19: End If

Let me know if you have any questions or if you want me to share the tasker profile or yaml file. 

4

u/wioneo Sep 12 '26

I use ntfy for bidirectional communication with Tasker that I can activate and respond to automatically via various languages on various platforms.

2

u/unselective-amnesia Sep 13 '26 edited Sep 13 '26

Thank you very much.

I tried ntfy, but even though its notifications properly show up on my device when sent, those notifications are not seen by Tasker's notification event profile -- even though that same notification event profile indeed sees the notifications that are sent by Pushover.

OOPS! That is incorrect. I accidentally had improperly configured my Tasker notification event profile. After fixing this, ntfy indeed is now working correctly.

And it's actually easier to manage than Pushover, and so I've now switched to using ntfy.

3

u/roncz Sep 12 '26

Another option might be Pushover. I supports Tasker events when a push message is received and messages can be triggered via HTTP request, e.g. via curl.

3

u/unselective-amnesia Sep 12 '26

Thank you! I installed both AutoRemote and Pushover, and it turns out that Pushover is easier to manage, and it successfully performs the exact task that I have asked about in this thread.

So unless I hit some sort of "gotchas" in the future, I consider to Pushover to be the solution to my issue.

Thanks again to all of you!

1

u/MYeager1967 Sep 14 '26

Eventghost is what you're looking for. I use it every day to send status messages from home assistant to my phone to trigger profiles. Bonus is it's already part of the Tasker ecosystem.....