[ゴミの日通知]　Power Automate，LINE NotifyでPCスリープ状態でも定期通知

# 経緯
pythonやcronを使って定期実行を試みたもののPCがスリープ状態では実行できない。AWSやMicrosoft Azureなどを使うと実現できるが，通知回数によっては料金が発生する。自分の環境で無料でできる方法はないかと探したところこの方法に至った。

# こんな人におすすめ
- PCがスリープ状態でも定期的に通知を送りたい
- クラウドコンピューティングサービス（AWSやMicrosoft Azureなど）を使うと料金が発生する不安がある
- 有償のMicrosoft 365が使えるアカウントを持っている
- LINEアカウントを持っている

# 実現の流れ
1. Power Automateで時間指定と変数の初期化
2. Power Automateで条件分岐
3. LINE Notifyでアクセストークン発行
4. Power Automateに通知の部分を付け足す

# Power Automateで時間指定と変数の初期化
:::note info
「フローの実行時間と頻度の決定」「現在の曜日と日数を取得」
:::
1. **[作成]** → **[スケジュール済みクラウド フロー]**

    >![スクリーンショット 2024-05-04 224546.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/6e00ea43-84bb-06b4-2912-6a619bf6a9a3.jpeg)
    >>

2.  **[フロー名]** free → **[開始日]** free → **[繰り返し間隔]** 1日 → **[作成]**
    >この部分は後から編集可なので，そこまで慎重にならなくても大丈夫です。
    ![スクリーンショット 2024-05-04 224716.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/5beba0b4-9f03-945c-9eb8-0c899d0041c9.jpeg)
    >>
    
3. **[Recurrence]** → **[パラメーター]** → **[Time Zone]** (UTC+09:00)大阪,札幌,東京 → **[Start line]** free，最後のZを消す
    >最後のZを消すことでTime Zoneが反映されます。
    ![スクリーンショット 2024-05-04 224805.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/980a1cd9-f59c-6852-9e5c-043257d9e63c.jpeg)
    >>

4. **[Recurrenceの下の＋]** → **[アクションを追加]** → **[ランタイム]** 組み込み → **[Variable]** → **[変数を初期化する]**

    >![スクリーンショット 2024-05-04 224936.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/6853f6fe-825d-ca47-9b17-9ab1d3202706.jpeg)
    >>

5. **[Name]** 曜日 → **[Type]** Integer → **[Value]** dayOfWeek(addHours(utcNow(),9,'yyyy/MM/dd HH:mm')) → **[更新]**
    
    >dayOfWeek()：曜日を取得します。
    addHours(utcNow(),9,'yyyy/MM/dd HH:mm')：9時間遅らせて日本時間にします。
    ![スクリーンショット 2024-05-06 151627.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/3d9affa6-8dd5-cdf9-cc58-5ca9bc3173f7.png)
    ![スクリーンショット 2024-05-04 225507.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/6a1853ae-472e-6a8b-c96a-a8bbe5824386.png)
    上記で取得される曜日の結果は以下の様になります。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/febd95f2-4fb2-fe53-04c7-0498417441f6.png)
    >>

6. 上記の4,5と同じ手順で **変数を初期化する** の下に **変数を初期化する1** を追加する
    >[Name] 日数，[Value] dayOfMonth(addHours(utcNow(),9,'yyyy/MM/dd HH:mm'))にしてください。
    dayOfMonth()：日数を取得します。
    addHours(utcNow(),9,'yyyy/MM/dd HH:mm')：9時間遅らせて日本時間にします。
    ![スクリーンショット 2024-05-04 225638.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/f18be787-9dd9-1118-da47-fe5ff055668b.png)
    ![スクリーンショット 2024-05-04 225655.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/5eb96904-491e-11ac-9bf0-afb658758d3f.png)
    上記で取得される起動日の結果は **「１〜３１」** のいずれかになります。
    週数と日数の関係は以下のようになります。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/b88173f3-4e8f-3a50-d4ed-79d33348086f.png)

# Power Automateで条件分岐
:::note info
これから，条件分岐によって通知する第〇曜日を決めていきます。今回は以下の条件に基づいて分岐していきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/cbb4edf4-95bb-42ae-8f21-87b2b407d2e0.png)

以下最終形。

![最終形 2024-05-04 230623.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/70a97c4e-7890-d8d3-99f7-083174bbe0ed.png)

:::


1. **[変数を初期化する1の下の＋]** → **[アクションの追加]** → **[Control]** → **[条件]**
    >![スクリーンショット 2024-05-04 225736.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/fc91e335-5d62-95c0-5086-c20ec6b7c663.jpeg)
    >>

2. **[ANDの部分をORに変える]** → **[雷のマーク]** → **[曜日]** → **[is equal to]** → **[2]** → **[＋New item]** → **[雷のマーク]** → **[曜日]**　→　**[is equal to]** → **[5]**
    >これで，毎週火曜日(2)と金曜日(5)に任意の処理を行ってくれます。
    ![スクリーンショット 2024-05-06 183851.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/ab54c266-e2da-9a3c-629b-8c139012a967.png)
    >>
    
3. 1，2と同様の手順で**条件1を追加**（以下の図を参考)
    >場所：条件→False→条件1
    ただし，**AND**のままでいいです。
    毎週月曜日(1)に任意の処理を行ってくれます。
    ![スクリーンショット 2024-05-04 230221.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/946c2371-dd42-dac6-b085-e0c4a05808c2.png)
    >>

4. 1，2と同様の手順で**条件2を追加**（以下の図を参考)
    >場所：条件→False→条件1→True→条件2
    ORに変えずに，必ず**AND**のままにしてください。
    毎月第3月曜日に任意の処理を行ってくれます。(曜日が1 ＆ 日数が15以上21以下)
    ![スクリーンショット 2024-05-04 230212.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/1b5e7f5e-f1e7-6227-053f-e5fd4cf87602.png)
    >>

5. 1，2と同様の手順で**条件3を追加**（以下の図を参考)
    >場所：条件→False→条件1→False→条件3
    ただし，**AND**のままでいいです。
    毎週水曜日(3)に任意の処理を行ってくれます。
    ![スクリーンショット 2024-05-04 230410.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/0bf57f7f-6d1e-3407-600e-50804c8bfc80.png)
    >>

6. 1，2と同様の手順で**条件4を追加**（以下の図を参考)
    >場所：条件→False→条件1→False→条件3→True→条件4
    ORに変えずに，必ず**AND**のままにしてください。
    毎月第1水曜日に任意の処理を行ってくれます。(曜日が3 ＆ 日数が1以上7以下)
    ![スクリーンショット 2024-05-04 230446.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/e3a401ef-307b-199b-f048-422487fbdb0f.png)
    >>

7. 1，2と同様の手順で**条件5を追加**（以下の図を参考)
    >場所：条件→False→条件1→False→条件3→True→条件4→False→条件5
    ORに変えずに，必ず**AND**のままにしてください。
    毎月第3水曜日に任意の処理を行ってくれます。(曜日が3 ＆ 日数が15以上21以下)
    ![スクリーンショット 2024-05-04 230525.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/ad6b152c-fdd9-4db9-af44-1dca53476411.png)


# LINENotifyでアクセストークンの発行
:::note info
「LINE Notify アクセストークンの発行」と検索すれば詳しいやり方を説明してくれているサイトがたくさん見つかるのと思うので，その手順に従って発行してください。
ーー私が参考にさせて頂いたサイトーー
[LINE Notifyのトークンを取得方法・備忘録](https://qiita.com/chivi_dump/items/a62a7b8c32e6ea894a09)
:::

# Power Automateに通知の部分を付け足す
:::note info
先ほど作成したPower AutomateにLineへ通知される部分を付け足していきます。

以下最終形。

![スクリーンショット 2024-05-05 165423.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/2294b760-e3de-c669-8085-2c42bd1679ed.png)
:::

1. **[条件→Trueの下の＋]** → **[アクションの追加]** → **[HTTP]**
    >![スクリーンショット 2024-05-05 170033.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/5ae49ccd-ee75-23f1-1eac-15b8bb01623b.jpeg)
    >>

2. **[パラメーター]** → **[URL]** https://notify-api.line.me/api/notify → **[Method]** POST → **[Header]** Content-Type：application/x-www-form-urlencoded，Authorization：Bearer LINE Notifyトークン → **[Body]** message=今日は燃やすごみの日です
    >＊ BearerとLINE Notifyトークンの間は必ず**半角スペース**を空けてください。
    ＊ 緑のマークの隣を押すと名前の変更ができます。ここでは「毎週火・金曜日」に変更しています。
    ＊ 二つ目の隠れている部分は各ごみの分別方法のurlを添付しています。良かったら，webサイトから「燃やすごみ分別」などと調べてそのurlを添付してみてください。
    ![スクリーンショット 2024-05-05 165637.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/1fca09c9-5294-18fd-bbfd-9f31bd508d69.png)
    >>

3. **[毎週火・金曜日を右クリック]** → **[アクションのコピー]** → **[任意の場所(下記に記入)で＋]** → **[アクションの貼り付け]** → **[毎週火・金曜日を毎週月曜日に通知する内容へと編集]**
    >場所：条件→False→条件1→true→毎週月曜日
    ![スクリーンショット 2024-05-05 165723.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/9ea623ef-3ddb-ed10-3183-97c12ab6df1f.png)
    >>
    
4. 3と同様の手順で**毎月第3回目月曜日**を追加
    >場所：条件→False→条件1→True→条件2→毎月第3回目月曜日
    ![スクリーンショット 2024-05-05 165712.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/82dd6159-af5a-853b-4c53-f471410f5243.png)
    >>

5. 3と同様の手順で**毎月第1回目水曜日**を追加
    >場所：条件→False→条件1→False→条件3→True→条件4→True→毎月第1回目水曜日
    ![スクリーンショット 2024-05-05 165734.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/c89bb717-eec8-2e14-0d75-a6c90650b848.png)
    >>
    
6. 3と同様の手順で**毎月第3回目水曜日**を追加
    >場所：条件→False→条件1→False→条件3→True→条件4→False→条件5→True→毎月第3回目水曜日
    ![スクリーンショット 2024-05-05 165741.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/4a09e66a-53e9-5780-0299-05b8d16ed231.png)
    >>

7. 3と同様の手順で**何もない日**を追加
    >場所：二箇所あります。
    条件→False→条件1→False→条件3→True→条件4→False→条件5→False→何もない日
    条件→False→条件1→False→条件3→False→何もない日
    ![スクリーンショット 2024-05-05 165754.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3784558/6bda99d3-2ddb-71f0-0856-c3b43ddabda0.png)
    
# 最後に
以上で終了です。
テストで実行できたら，RecurrenceのStart lineを現在の時間から5分程度**後**に変えて，PCを閉じてみてください。指定した時間に通知が来たら成功です!!