2017年1月3日火曜日

Pushbullet+自前デバイスでプッシュ通知を受け取る

Pushbulletを使ってプッシュ通知をスマホ等へ送る例は見当たりますが、逆にプッシュ通知を受け取る例がなかったのでやってみました。

-なんでこんなことを?
ホームオートメーションやりたくなりまして、IFTTTやLINE BOTなどといったスマホへプッシュ通知送れるwebサービスを利用して楽しつつ、やりたいことを実現するためには以下3点の要件を満たす必要がありました。ワガママですね。
  1. Android・iOS・PCのマルチプラットフォーム対応
  2. 自前デバイス(Linux鯖など)からプッシュ通知を送れる
  3. 逆にAndroid等からチャットを送れる
で、たどり着いたのがPushbulletだったのです。

websocketでイベント受信→チャットテキストを取得するデモをnode.jsとpushbullet-bashを組み合わせて書いてみました。ラズパイ3上で動作しました。
スクリプトとフォルダ配置はこんな感じで。
~/.config/pushbulletはpushbullet-bashがAPIキーを参照するのでAPIキーを記述すること。

 ~/
├ .config/pushbullet
└ pushbullet/
      ├ pushbullet-bash/
      └ script/
          ├ pushbullet_websock.js
          └ getLastPush.sh

#! /bin/sh
getIden=$(echo $("$PROGDIR"../pushbullet-bash/pushbullet pushes recent) | grep -o -E '([A-Za-z0-9]{22})')
#iden表示
#echo $getIden
if [ -z $getIden ]; then
#testコマンドオプション-z:文字列長が0ならば真
echo "not pushes receved"
else
#受信したテキスト表示
getBody=$(echo $("$PROGDIR"../pushbullet-bash/pushbullet pull $getIden) | tr '{' '\n' | tr ',' '\n' | grep \"body\" | cut -d'"' -f4)
echo $getBody
fi
view raw getLastPush.sh hosted with ❤ by GitHub
const pushbullet_apikey = '--your pushbullet API key'
var WebSocket = require('ws');
var ws = new WebSocket('wss://stream.pushbullet.com/websocket/'+pushbullet_apikey);
var exec = require('child_process').exec;
ws.on('message', function(data, flags) {
console.log('received: %s', data);
if( data.match("push") ) {
exec('./getLastPush.sh', function(err, stdout, stderr){
if (stdout) { console.log(stdout); }
});
}
});

テキスト送るとこんな感じ。