1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Node-RedとPushoverでApple Watchに情報を表示させる

Last updated at Posted at 2022-01-05

##目標
53783D56-1459-489D-A518-6E4570BB8AC6.png

数字171とアーチ状のゲージがPushoverコンプリケーションです。

私の通常使いでは、数字を今日使った電気代、ゲージを24時間時計にしています。

(今日は八割方暮れたけど、この時間でエアコンかけてて171円なら普通かな)

#目次
1.必要なもの
2.手順
3.おまけ
4.おわりに

#1. 必要なもの

  • Node-Red
  • Pushover
  • Apple watch
  • iPhone
  • Raspberry Pi

#2. 手順

###Pushoverの導入
https://pushover.net/

Pushoverというアプリを使えば、iPhoneやApple Watchに通知を送信できます。Androidにも対応しています。

また、Apple Watchのコンプリケーションとしても使え、ある程度の量の文字や数値情報をApple Wacthに表示できます。
今回はそちらの機能を使います。

コンプリケーションの詳細は次を参照してください。

Pushoverは買い切りアプリ(ダウンロードと試用は無料、試用期間後の継続使用は一度だけアプリ内課金)ですが、使用できる通知は1か月あたり最大10,000件となっているので、通知頻度には注意してください。(執筆時)

なお、Pushoverの使用状況はPushoverのサイトで確認できます。

image.png

まずはPushoverアプリをiPhoneとApple Watchにインストールし、必要となるUser KeyとAPI Tokenuser keyをPushoverサイトで取得します。

このPushoverのkeyを取得するところまでは、次の@BlueRayiさんの解説に詳しく書かれています。

Pushoverアプリをインストールし、User KeyとAPI Tokenuser keyを取得できたら、iPhoneでApple WatchのコンプリケーションをPushoverに変更しておきます。

次のような形状のコンプリケーションが選べるフェイスを選んでください。

B8A5765D-7207-4CC0-AACF-15C85D44298F.png

86E17C8A-A40D-44F6-975E-8DAD04C404DA.png

あとはPushoverアプリやiPhoneの通知などを設定してください。それほど難しくはないはずです。

###Node-Redの設定

次はNode-Redの設定です。

Raspberry Piに最新のNode-Redが入っていなければインストールしておきます。

pushover用のノードがあるので、そちらをインストールしていきましょう。

まず、Node-Redのパレット検索でnode-red-contrib-pushoverを見つけ、インストールします。

ABC0D316-6B1F-4D12-8488-837D258B8325.jpeg

時計アイコン付きの青いgrancesノードがパレットで選べるようになったらインストール完了です。

image.png

次に、パレットからワークスペース上にgrancesノードをドラッグして置きます。

30EF7AB1-17E5-40EA-81E6-5FD40902C5C6.jpeg

このgrancesノードをダブルクリックし、設定画面を開きます。

Untitled-1 copy 2.jpg

さらにKeys欄右の鉛筆ボタンからプロパティ設定画面に入ります。

UserTokenに、先ほど取得したUser KeyAPI Tokenの値をそれぞれ入力します。

image.png

入力したら適当なNameを付けて保存します。

次に、injectノードを挿入しワイヤーで接続します。このinjectノードの設定は変更しません。

Screen Shot 2022-01-05 at 9.07.17.png

両者の間にchangeノードを挿入します。
3つのノードがワイヤーで繋がりましたか?

Screen Shot 2022-01-05 at 9.16.55.png

chngeノードを設定します。

image.png

node-red-contrib-pushoverのヘルプにあるように、msg.countに整数値(制限不明)、psg.percentに0〜100までの整数値を入れることができます。ここではそれぞれ定数111,99を代入しています。(文字列でも大丈夫でした)

Apple Watchの画面上では、msg.countが数値、msg.percentがゲージにそれぞれ対応します。

9DC43D80-4359-4A42-A855-60E6D7CD8641.jpeg

デプロイボタンを押してデプロイしてから、injectノードタイムスタンプ)左側のボタンを押してノードを動かしてみます。

Screen Shot 2022-01-05 at 9.20.34.png

エラーは出ていないようですね。Apple Watchにはちゃんと送信されているでしょうか?

2FE10EC4-CCDA-4968-854D-D1D151EF9F84.png

chngeノードに設定した値が反映されました!ゴール!

タイミングによっては反映まで遅延があるようです。通知オフを解除した朝の起きがけなどは更新されていないことが多いです。

#3. おまけ

追加でいじってみましょう。

###余計なものをgranceノードに送らないようにする

changeノードの部分をfunctionノードに置き換えてみます。

7A41CC4E-7427-45C6-9FD0-71C9E3765725.jpeg

1C06B79C-6DE4-4A33-8F5F-1112963C1EEB.jpeg

こうすることで、msgのプロパティがcountpercent(と_msgig)に制限され、多くのノードをつなげた時に余計なデータをgranceノードに送って挙動を妨げる心配がなくなります。

この例では、injectノードからmsg.payloadにタイムスタンプの数値が送られてきますが、functionノードで無視されるわけです。

###更新頻度に制限をかける

メッセージの流量を制限します。ここでは、30分あたり4件以上の通知は破棄するように設定します。

まずdelayノードを追加します。

82D1712B-3367-44EB-A7F9-79C75AEAFE19.jpeg

このdelayノードを設定します。

42845ED2-0E49-414D-B268-F2155F097158.jpeg

前述の通りPushoverの月当たりの通知量に制限があるので、このようなリミッターは付けておくべきでしょう。テストの時はバイパスをお忘れなく。

###さらに遊んでみる

次に、changeノードを挿入します。

image.png

挿入したChangeノードを設定します。

DCB9462E-5A6B-4EF3-B412-9D47B6C2C132.jpeg

ここには数値ではなく計算式を入れてやります。

msg.mycountには、ある日付から今までの日数を計算する式を入力します。ちなみに$ceil()は切り上げ関数です。

msg.mycount
$ceil(($millis()-$toMillis("1998-06-19T09:00:00.00Z"))/86400000)		

msg.mypercentには、ある日付から今までの年数を計算する式を入力します。$floor()は切り捨て関数です。

msg.mypercent
$floor(($millis()-$toMillis("1998-06-19T09:00:00.00Z"))/31536000000)

代入する値はJSONata形式を指定してください。

image.png

なお、日付は某有名人の方の生年月日を使わせていただきました。

次に、injectノードの設定を毎日9時に変更します。これで毎日9時にApple Watch宛に新しいデータが送信されます。

image.png

また、functionノードで、changeノードで設定した変数を受け取れるよう書き換えます。

C98F6BC7-E0F7-4CBB-9FE6-D2ABBAA9602E.jpeg

msg.countにmsg.mycount、msg.percentにmsg.mpercentの値を代入しています。

デプロイしてみましょう。
さてどうなるでしょうか。

EB52B806-38CF-481E-9D5D-7E0F742BEFF9.png

おっと、このコンプリケーションでは4桁以上の数字は表示しきれないようです。
ではフェイスを変えて再チャレンジ。

47AEF205-4C2F-4BDA-A0D2-D0488ED041BD.png

できましたね。
先ほど設定した通り、数値は設定日からの経過日、ゲージは経過年(最大100年)を表します。

changeノードの日付を自分の誕生日にすれば、マイ「人生100年メメントモリ時計」の完成です。

#4. おわりに

それにしても広瀬すずさん若い!

最後まで読んでいただき、ありがとうございました。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?