モチベ
クリスマスプレゼントとして、Google Home Miniをゲットしたので、Splatoon2のステージ情報を教えてもらえるようにした。色々なところでコケたけど、できたので報告します。
完成イメージ
Google Home miniに「ステージ情報教えて」と言うと、IFTTTがfirebaseのリアルタイムDBに書き込むので、そのタイミングでnode.jsが動いて、ステージ情報を教えてくれる。
環境
ラズパイゼロW
Google home mini
こんだけ
準備
作ったプログラムが動作したのを確認した後にこれ書いているので、うまくいかないかも。すまん。
pi@raspberrypi:~/Documents$mkdir google-home
pi@raspberrypi:~/Documents$cd google-home
npmとnode.jsとかの取得
pi@raspberrypi:~/Documents/google-home$sudo apt-get install -y nodejs npm
pi@raspberrypi:~/Documents/google-home$sudo npm cache clean
pi@raspberrypi:~/Documents/google-home$sudo npm install npm n -g
pi@raspberrypi:~/Documents/google-home$sudo n lts
pi@raspberrypi:~/Documents/google-home$npm init
pi@raspberrypi:~/Documents/google-home$sudo apt-get install libavahi-libdnssd-dev
pi@raspberrypi:~/Documents/google-home$sudo apt-get install libavahi-compat-libdnssd-dev
google-home-notifierとfirebaseとかの取得
pi@raspberrypi:~/Documents/google-home$npm install google-home-notifier
pi@raspberrypi:~/Documents/google-home$curl -sL https://deb.nodesource.com/setup_7.x | sudo -E bash -
pi@raspberrypi:~/Documents/google-home$sudo apt-get install git-core libnss-mdns
pi@raspberrypi:~/Documents/google-home$npm install firebase
ステージ情報の取得
PHPを使って、スプランプってとこでステージ情報を取得できる。
このプログラムを2時間おきに実行して、テキストsplatoon2_stage_now.txtに書き込んでおく。
<?php
$data=splatoon2_stage_info();
echo $data;
$fp=fopen("/home/pi/Documents/php/splatoon2_stage_now.txt","w");
fwrite($fp,$data);
fclose($fp);
function splatoon2_stage_info(){
$url="https://spstage2.splamp.info/now?timezone=jst";
$json=file_get_contents($url);
$ary=json_decode($json,true);
print_r($ary);
$str=null;
$str="レギュラーのステージ情報です\n";
$str.=$ary['result']['regular'][0]['maps']['0']['name']."と\n";
$str.=$ary['result']['regular'][0]['maps']['1']['name']."です\n";
$str.="次にガチマッチのステージ情報です\n";
$str.=$ary['result']['ranked'][0]['rule']['name']."で\n";
$str.=$ary['result']['ranked'][0]['maps']['0']['name']."と\n";
$str.=$ary['result']['ranked'][0]['maps']['1']['name']."です\n";
$str.="次にリーグマッチのステージ情報です\n";
$str.=$ary['result']['league'][0]['rule']['name']."で\n";
$str.=$ary['result']['league'][0]['maps']['0']['name']."と\n";
$str.=$ary['result']['league'][0]['maps']['1']['name']."です\n";
return $str;
}
?>
実行結果
レギュラーのステージ情報です
エンガワ河川敷と
ザトウマーケットです
次にガチマッチのステージ情報です
ガチアサリで
Bバスパークと
モズク農園です
次にリーグマッチのステージ情報です
ガチヤグラで
ホッケふ頭と
タチウオパーキングです
node.js周り
ラズパイに常駐させるためにforeverを入れる。configの伏せてある部分は各自の用意をしてください。(参考参照)
pi@raspberrypi:~/Documents/google-home$sudo npm install forever -g
pi@raspberrypi:~$forever start test.js
var firebase=require("firebase");
var googlehome=require("google-home-notifier");
var fs = require('fs');
var language="ja";
googlehome.device('リビング',language);
googlehome.ip('192.168.1.254');
// Initialize Firebase
var config = {
apiKey: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
authDomain: "XXXXXXXXXXXXXXXXXXXXXXXX.firebaseapp.com",
databaseURL: "https://XXXXXXXXXXXXXXXX.firebaseio.com",
projectId: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX",
storageBucket: "XXXXXXXXXXXXXXXXXXXXXXXXX.appspot.com",
messagingSenderId: "XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
};
firebase.initializeApp(config);
//jsonからvalueに一致する値取得
const getJsonData = (value, json) => {
for (var word in json) if (value == word) return json[word];
return json["default"];
}
//database更新時
const path = "/";
const key = "word";
const db = firebase.database();
db.ref(path).on("value", function(changedSnapshot) {
//値取得
const value = changedSnapshot.child(key).val();
if (value) {
console.log(value);
googlehome.notify((fs.readFileSync('/home/pi/Documents/php/splatoon2_stage_turf.txt')).toString(),function(res){
console.log(res);
});
}
});
余談
時間が無くてあんまり詳しく書けてないのは申し訳ない。自分が見たサイトは下記にあるので参考にしてください。実行すると、通常よりぎこちない日本語で発声されるのですが、それはこのへんに書いてあるらしいです。(よくわからなかった)
参考
スプランプ
Raspberry Pi に google-home-notifier を入れた時に躓いたメモ
Raspberry PiにNode.jsとnpmの最新版をインストールする
Google Home開発入門 / google-home-notifier解説
GoogleHomeスピーカーに外部からプッシュして自発的に話してもらいます
node.js node.jsスクリプトをforeverでデーモン化する
Node.jsの標準モジュール(https)でAPIを叩く(GETのみ)
Google Home、IFTTT、Firebase、Node.js、irMagicianを使ってシーリングライトを音声操作する
新着メールを知らせてくれるGoogle Home
Google Homeにセンサーの値を言ってもらう
Google HomeにつぶやくとTwitterでつぶやくやつ、IFTTTですぐできた。
google-home-notifier