Community discussions

MikroTik App
 
User avatar
dasiu
Trainer
Trainer
Topic Author
Posts: 232
Joined: Fri Jan 30, 2009 11:41 am
Location: Reading, UK
Contact:

PUSHOVER - ready MikroTik script to send messages

Fri Jun 29, 2018 12:19 am

I've just written a script (function) to send the Pushover messages directly from MikroTik, not using e-mail but direct API (faster). Just run once on bootup to "install" the functions:
:global urlEncode do={
  :local output ""
  :local input [:toarray $1]
  :if ([:len $input] > 0) do={
    :local input1 [:tostr [:pick $input 0]]
    :local conversion {" "="%20";"!"="%21";"\""="%22";"#"="%23";"\$"="%24";"%"="%25";"&"="%26";"'"="%27";"-"="%2D";"("="%28";")"="%29";"*"="%2A";"+"="%2B";","="%2C";"/"="%2F";":"="%3A";";"="%3B";"<"="%3C";">"="%3E";"="="%3D";"?"="%3F";"@"="%40";"["="%5B";"]"="%5D";"{"="%7B";"}"="%7D"};
    :for i from=0 to=([:len $input1] - 1) do={ 
      :local char [:pick $input1 $i]
      :if ([:typeof ($conversion->[:tostr $char])]!="nothing") do={:set $char ($conversion->[:tostr $char]);}
      :set output ($output . $char)
    }
    :set output [:tostr $output]
    :set output [:toarray $output]
  }
  :return $output
}

:global pushover do={
:global urlEncode;
  :if ([:typeof $message]!="nothing") do={
    :local api "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    :local user "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    :local urlmessage [$urlEncode $message];
    :local string "token=$api&user=$user&message=$urlmessage";
    :if ([:typeof $title]!="nothing") do={:set $string ($string . "&title=$[$urlEncode $title]");}
    :if ([:typeof $priority]!="nothing") do={:set $string ($string . "&priority=$priority");}
    :if ([:typeof $sound]!="nothing") do={:set $string ($string . "&sound=$sound");}
    /tool fetch mode=https url="https://api.pushover.net/1/messages.json" http-method=post http-data="$string";
  }
}
Of course, in "api" and "user" variables I have my keys from Pushover (you need to create application in the Pushover panel). Then I can just do:
$pushover message="This is a simple Pushover message."
Or more advanced:
:local title "Important message from router $[/system identity get name]";                              
:local message "Just writing to inform you that my temperature is $[/system health get temperature] degrees Celsius!" 
$pushover title=$title message=$message priority=1 sound="tugboat"
I used the urlEncode function written by few people in this thread.
 
cantanko
newbie
Posts: 28
Joined: Mon Apr 05, 2010 12:53 am

Re: PUSHOVER - ready MikroTik script to send messages

Wed Apr 03, 2019 9:12 pm

Thank you for this - it's proven to be a very helpful chunk of code!
 
danielcada
just joined
Posts: 2
Joined: Sat Jan 27, 2018 10:02 am

Re: PUSHOVER - ready MikroTik script to send messages

Tue Mar 03, 2020 7:16 pm

Works well on FW 6.45.5 including getting PUSHOVER from NETWATCH.

On FW 6.46.4 works only to send PUSHOVER manualy runing script, but doesn't work to send PUSHOVER from NETWATCH.

Any suggestion?
 
dreamind
just joined
Posts: 6
Joined: Thu Apr 18, 2013 9:15 pm

Re: PUSHOVER - ready MikroTik script to send messages

Wed Apr 15, 2020 2:15 am

If you set keep-result=no on the fetch command in the script it works.

Also make sure you set the policy to something like policy=read,write,test on scripts that you want to run from netwatch.
 
Belikearu
just joined
Posts: 1
Joined: Mon Dec 30, 2019 5:53 am

Re: PUSHOVER - ready MikroTik script to send messages

Wed Apr 15, 2020 2:37 am

How do you exactly do this? pasting the script on the winbox terminal? and what about the API Keys?
Would you mind elaborating this one? thankyou

Who is online

Users browsing this forum: No registered users and 15 guests