-なんでこんなことを?
ホームオートメーションやりたくなりまして、IFTTTやLINE BOTなどといったスマホへプッシュ通知送れるwebサービスを利用して楽しつつ、やりたいことを実現するためには以下3点の要件を満たす必要がありました。ワガママですね。
- Android・iOS・PCのマルチプラットフォーム対応
- 自前デバイス(Linux鯖など)からプッシュ通知を送れる
- 逆にAndroid等からチャットを送れる
websocketでイベント受信→チャットテキストを取得するデモをnode.jsとpushbullet-bashを組み合わせて書いてみました。ラズパイ3上で動作しました。
スクリプトとフォルダ配置はこんな感じで。
~/.config/pushbulletはpushbullet-bashがAPIキーを参照するのでAPIキーを記述すること。
~/
├ .config/pushbullet
└ pushbullet/
├ pushbullet-bash/
└ script/
├ pushbullet_websock.js
└ getLastPush.sh
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#! /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 |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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); } | |
}); | |
} | |
}); |
テキスト送るとこんな感じ。
おしおし、websocketでpushbulletから通知もらって、そこからチャットの内容取りにいけた。これでPC・android・iOS+自前のデバイスで双方向にチャットのやりとりできる。 pic.twitter.com/hbrXesk8pK
— エン.129 (@en129) 2017年1月3日