RPushbullet is an R client for the wonderful Pushbullet messaging / notification system.
Pushbullet is an awesome (and
free) little service that acts as a message broker. You sign up, and get
a key to use the API. You then install the “app” on your smartphone or
Chrome browser (and obtain a device id for of these). You can also query
your account with the pbDevices()
function to retrieve
these ids.
Presto. Now you can send messages between them by invoking
pbPost()
.
With a resource file (see below) properly setup, you can just do something like the following
> msg # just an example, can be driven by real simulation results
R1] "DONE after 10000 simulations taking 42.43 minutes reducing RMSE by 7.89 percent"
[>
R> RPushbullet::pbPost("note", title="Simulation complete", body=msg) R
and a message like the image following below should pop up (if messaging directed to the browser):
Another excellent use case was suggested years ago by Karl Broman in this blog post. We can improve on his version a little as one no longer needs to load the package:
options(error = function() {
::pbPost("note", "Error", geterrmessage())
RPushbulletif(!interactive()) stop(geterrmessage())
})
There was one noteworthy follow-up for which I lost the source: it suggested to make the message somewhat saltier by relying on the helpful rfoaas package.
The package is reasonably mature and functional.
Up until release 0.2.0, an external curl
binary was
used. We have since switched to using the curl package.
Given that the Pushbullet API has other nice features, future extensions are certainly possible and encouraged. Interested contributors should file issue tickets first to discuss before going off on pull requests.
A file ~/.rpushbullet.json
can be used to pass the API
key and device identifiers to the package. The content is read upon
package startup, and stored in a package-local environment. The format
of this file is as follows:
{
"key": "...placey your api key here...",
"devices": [
".....device 1 id......",
".....device 2 id......",
".....device 3 id......"
],
"names": [
"...name1...",
"...name2...",
"...name3..."
],
"defaultdevice": "...nameOfYourDefault..."
}
The names
and defaultdevice
fields are
optional. See the main package help page for more details.
You can also create the file programmatically via
cat(jsonlite::toJSON(list(key="..key here..", devices=c("..aa..", "..bb.."))))
and write that content to the file
~/.rpushbullet.json
.
Starting with release 0.3.0, a new helper function
pbSetup()
is also available to create the file.
You can also retrieve the ids of your devices with the
pbGetDevices()
function by calling, say,
str(fromJSON(pbGetDevices()))
. Note that you need to load
one of the packages RJSONIO
or rjson
or
jsonlite
to access the fromJSON()
function.
Pushbullet has recently added channels to their API. These are notification feeds that user can subscribe to, and which allows the developer to create (per-topic) channels for various applications / topics that her users can subscribe to.
Creating a channel is easy: one simply needs to login and visit the
My Channel page.
From there, one can easily create a new channel by clicking the “add
channel” button. There will be a prompt to enter a ‘tag’, a channel
name, as well as a description. The channel_tag
is what is
needed to push posts to the channel. Currently, only the owner of a
channel has permissions to post to that channel, so one will need to
create the channel using the same login one has specified in
~/.rpushbullet.json
in order to use RPushbullet to post to
a channel.
Channels are public: Anyone who knows the channel ‘tag’ can
subscribe and will therefore receive all messages pushed to that
channel. Some users create hard-to-guess channel tags to achieve semi
privacy. This works because it is, currently as of February 2015,
neither possible to list the channels owned by a specific user nor
possible to browse or search for other users’ channels. One method to
generate a hard-to-guess tag is
digest::digest(rnorm(1))
.
Channels can be used by passing a channel
argument to
the pbPost
function. The Pushbullet API identifies a
channel via the supplied channel_tag
value of this
argument. See the Pushes API
documentation for more information.
Dirk Eddelbuettel with contributions by Bill Evans, Mike Birdgeneau, Henrik Bengtsson, Seth Wenchel, Colin Gillespie and Chan-Yub Park.
GPL (>= 2)