はじめに
- Elixir楽しんでいますか
- @QUANONさんの「[Ruby][LINE] ごみ出し日に LINE で通知する」をみまして、私はNervesでぜひやってみようとおもいました
- Line Notifyを使うためのトークン取得は、これまた@QUANONさんの「自分の LINE に Ruby で通知を送る」という記事が詳しいです
- 2021/03/08(月)開催予定のautoracex #Nの成果としておきます
What is Nerves ?
- ElixirのIoTで、ナウでヤングでcoolなすごいやつです
環境構築
- 楽しむためには少しの準備が必要です
- Nervesの準備をしましょう
- @takasehideki 先生の記事がオススメです
Nervesアプリの開発
- ここから先は、Nervesアプリ開発の経験がおアリの前提で書きます
- おいて行かないでくれ〜 これからだよ〜 という方は、@kentaroさんの「ウェブチカでElixir/Nervesに入門する」がオススメです
いつものおなじみごった煮プロジェクトTORIFUKUKaiou/hello_nervesプロジェクトにおしこみます
依存しているHex
今日は何が捨てられるの?
lib/hello_nerves/trash_day.ex
defmodule HelloNerves.TrashDay do
def run do
now = Timex.now() |> Timex.shift(hours: 9)
day_of_week = Date.day_of_week(now)
week_of_month = Timex.week_of_month(now)
do_run(day_of_week, week_of_month)
end
defp do_run(day_of_week, _week_of_month) when day_of_week == 1 or day_of_week == 4 do
msg("可燃ごみ")
|> post()
end
defp do_run(3, week_of_month) when week_of_month == 2 or week_of_month == 4 do
msg("空き缶・空き瓶")
|> post()
end
defp do_run(3, 1) do
msg("不燃ごみ")
|> post()
end
defp do_run(_day_of_week, _week_of_month), do: nil
defp msg(trash), do: "#{trash}の日です。忘れずに捨てましょう!"
defp post(msg), do: HelloNerves.LineNotify.post(msg)
end
-
day_of_week
は曜日で、1が月曜日〜7が日曜日です -
week_of_month
は月の何週目かを表しています - 私が住んでいる地域ではこれらの2つでゴミ収集の内容がきまるので
do_run/2
でパターンを書きました
Lineで通知
lib/hello_nerves/line_notify.ex
defmodule HelloNerves.LineNotify do
@url "https://notify-api.line.me/api/notify"
@token System.get_env("HELLO_NERVES_LINE_NOTIFY_TOKEN")
@headers [Authorization: "Bearer #{@token}"]
def post(msg) do
HTTPoison.post(@url, {:form, [message: msg]}, @headers)
end
end
-
@eielhさんの「HTTPoisonでx-www-form-urlencodedでPOST」を参考にしました
- ありがとうございます!
cronライク
config/config.exs
config :hello_nerves, HelloNerves.Scheduler,
jobs: [
{"1 22 * * *", {HelloNerves.TrashDay, :run, []}}
]
- 今回の記事の肝は上記3つのファイルです
- とはいえ、すでにあるプロジェクトに足したのでいろいろ省略しているところがあります
- 省略しているところは、ごった煮プロジェクトTORIFUKUKaiou/hello_nervesをご参照ください
Wrapping Up
-
config
でゴミ収集日を変更したりできるようにすれば汎用的になるのかもしれませんが、私の家だけで使っているごった煮プロジェクトですので一番簡単な実装方法を採りました - Enjoy Elixir
(最後の最後に)Elixirってなによ?、Nervesってなによ? という方へ
- 2020/12/26時点くらいのスクリーンショット
- Elixirについてもっと知りたい方は下記の本をオススメします
- 手前味噌ですが、毎週月曜日にautoracexというもくもく会を開催しております
-
Slack elixirjp.slack.comの
#autoracex
というチャンネルにおります - わからないことなどお気軽におたずねください
- そのほかconnpassを
Elixir
で検索していただくといろいろなコミュニティがみつかります
-
Slack elixirjp.slack.comの
ありがとナイス!
Nervesが気になったあなたへ
れっつじょいなす(Let's join us)
NervesJP Slackへの参加URL
愉快なfolksたちがあなたの訪れをお待ちしております