SAPのすみっこ

SAP業界のすみっこに住んでます。すみっこから小さな声で発信します。

SAP業界のすみっこから小さな声で発信します

【ABAP】暑くなったらカーテンを閉めて扇風機をつける

※当記事は、chillSAP 夏の自由研究2021 の8/1分の記事となります。

 

はじめに

今年で2回目の開催となるchillSAP夏の自由研究。

去年は、子供の見守りアプリを作りました。

 

これが割と好評&今でも運用中ということで、今年も何かIoTっぽいものを作ろうかなと。自由研究だし、動くもの楽しいし。

 

で、思い出したのが、SAP Inside Track 2021で登壇したときにお話ししたIoTのフローのこと。以下の資料の10ページ目〜参照。

 
ステータス(温度、振動など)を監視して、異常値がでたらアクション。
 
このフローは、S/4HANAとSAP IoTの組み合わせで実現していましたが、、、今回はS/4HANAのみでそれっぽいことをやってみようと思います。
 

(余談)去年はこんなこともやりました

 

できたもの

設定温度よりも暑くなったら、カーテンを閉めて、扇風機をつける。

 
 
動画、地味だな。。。
 
(無理矢理それっぽく言いますと)S/4HANA上のビジネスデータ(マスタ/トラン)の値を条件に、外部APIを呼び出してIoT機器を操作する、というデモです。
※今回は、実行条件を選択画面で設定しています
 
倉庫とか、トラックとか、工場とか、想定される業務ケースは皆さんの頭の中でいい感じに想像してください。思い浮かんだものは、たぶん私と同じです。
  

作り方

今回は、ラズパイとかセンサーを一から組み合わせて~というのはせずに、市販のSwitchBotという製品を使いました。 実際に使ったのは、以下の3製品。

 

 

我が家で普段から使用しているものなのですが、こちらがAPI操作可能ということで今回はこれを使いました。 

今回使ったのは、「温度計」「カーテン操作」「プラグ(コンセントON/OFF)」の3つ。スマホの専用アプリからの操作も簡単なので、スマートホーム的なものが好きな方におすすめの製品です(たまにセールやってます)。

 

※今回のNGワード「それ、SwitchBotのアプリでほとんどできるじゃん」

 

以下、作成手順となります

T-CD:STRUSTで証明書の設定

あまり詳しくないのでさらっと。詳しい方、今度教えてください。
api.switch-bot.comの証明書を、T-CD:STRUSTで追加。

f:id:mahko2:20210731000912p:plain

SwitchBotのAPIを調べる

SwitchBot公式にて、製品のAPIが公開されています。Pythonなどでのやってみた系のブログも多いので、そちらもみました。 

 
基本的にはURLでデバイスを指定して、JSON形式で操作内容を制御(スイッチOn/Off)。
※以下、公式より引用 

f:id:mahko2:20210731001549p:plain

 

Postmanでテスト

APIのテスト。今回もPostman様のお世話になります。 
デバイスID取得
まずは、各デバイスのデバイスIDを取得。
  • リクエストメソッド:GET
  • URL:"https://api.switch-bot.com/v1.0/devices"
  • Header:トークンを設定(ピンク色のところ)。トークンはSwitchBotのアプリで確認できる
  • Body:登録しているSwitchBotのデバイス情報が返ってくる。デバイスIDは水色のところ。 f:id:mahko2:20210731002550p:plain
 
温度計から温度取得
次に、温度を取得します。
※製品はこちら↓

 

  • リクエストメソッド:GET
  • URL:"https://api.switch-bot.com/v1.0/devices/<デバイスID(水色)>/status"
  • Header:トークンを設定(ピンク色のところ)。
  • Body:temperatureが温度(黄色箇所)。30℃です。ちなみに湿度が52%。 

f:id:mahko2:20210731003507p:plain

扇風機のスイッチを入れる
次に、扇風機の制御。今回はプラグのON/OFFで制御します。
※製品はこちら↓

 

  • リクエストメソッド:POST
  • URL:"https://api.switch-bot.com/v1.0/devices/<デバイスID(水色)>/commands"

  • Header:トークンを設定(ピンク色のところ)。Content-Typeは"application/json"(赤枠)
  • Body(黄枠):commandが"turnOn"。ここの設定値は公式参照 

f:id:mahko2:20210731004648p:plain

f:id:mahko2:20210731010550p:plain

カーテンを閉める
最後に、カーテンの制御。
※製品はこちら↓

  

  • リクエストメソッド:POST
  • URL:"https://api.switch-bot.com/v1.0/devices/<デバイスID(水色)>/commands"

  • Header:プラグと同じなので省略
  • Body(黄色箇所):commandが"turnOff"。 turnOffで閉める、turnOnで開ける

f:id:mahko2:20210731011353p:plain

 

これでAPIの確認はおしまい

 

ABAP

最後にABAPでAPIを叩きます。
大まかな処理の流れは以下。
  1. 温度を取得
  2. 取得した温度が、選択画面で入力した温度よりも低い場合は何もしない
  3. 取得した温度が、選択画面で入力した温度よりも高い場合はカーテンを閉めて扇風機を付ける
 
APIは「CL_HTTP_REQUEST」 で実行します。この部分は公式ヘルプをみたり、SAP Blogをみたり。あとは叩いてエラーを一つずつ無くしていくと。
細かいところは、そのうちQiitaに、、、(書くつもりはある)。
 
※少しだけすでに書いてある
 
選択画面
いまの温度(28.6)は、SwitchBotの温度計から取得した温度。
「やること」でどの機器を操作するかを制御。
定期ジョブで24時間監視も可能です(ただ、カーテンを開けるのと扇風機を止めるのは未実装ですw)

f:id:mahko2:20210731012421p:plain

取得した温度が、選択画面で入力した温度よりも低い場合

何もしない。

f:id:mahko2:20210731012728p:plain
取得した温度が、選択画面で入力した温度よりも高い場合

「やること」で、ONになっている機器を操作します(API叩きます)

f:id:mahko2:20210731012901p:plain

f:id:mahko2:20210731012934p:plain


ソースコード(抜粋)
※毎度のことながら、最低限の実装。
 
温度取得(GET)

f:id:mahko2:20210731013209p:plain

 
メイン処理

f:id:mahko2:20210731013423p:plain

 
機器の操作(POST)

f:id:mahko2:20210731013509p:plain

 
では、最後にもう一度動画を見てみましょう。

  

地味ですね。

おわりに

ABAPからAPIを叩けるということで、当ブログの無理矢理つなげるシリーズは、無限の可能性を手に入れました。
※無理矢理シリーズとは、、、
 
何の役に立つかはちゃんと考えていませんが、皆さんの息抜きや会話のネタになれば幸いです。
(社内研修とかで遊びでやってみたいな)

f:id:mahko2:20210731031125j:plain