【成功しました】PowerBI のリアルタイムデータセットにM5Stackから直接データをぶん投げてみた

# この記事について
前回の失敗記事を踏まえてになります。
前回記事：[Power BI のストリーミングデータセットにAPI使って直接データぶん投げてみて失敗した話](https://qiita.com/rnakamuramartiny/items/b63d3b759a277a77884a)

# 前回の失敗した理由
文末に書いてある通り、PostしているJson形式に誤りがあったためです。
Pythonなどから投げるときは、こちらの「Raw」という部分の通りに送る必要があります。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/94929e19-0796-85b2-9047-0d2ed48db8f1.png)

# Postmanだと・・・
こんな感じです。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/269159/d55a620f-c5af-9a26-f733-ec3423ccc428.png)
ちなみに、戻り値は返ってきません。

# では、これをM5Stackではどうやるのか
私の環境は M5Cloudを使用しているため、MicroPython形式で書いています。


``` Python:main.py
from m5stack import *
import time
import ujson
import urequests
import machine

lcd.setCursor(0, 0)
lcd.setColor(lcd.WHITE)
lcd.font(lcd.FONT_DejaVu24)
lcd.clear()

class powerbi:
    def __init__(self):
        self.rtc = machine.RTC()
        self.rtc.ntp_sync('ntp.nict.jp', update_period=3600)
        # PowerBI ストリーミングデータセットのURLを入れる
        self.posturl = ''

    def timeset(self):
        timedata = self.rtc.now()
        prm_year = '{:0=4}'.format(timedata[0])
        prm_month = '{:0=2}'.format(timedata[1])
        prm_day = '{:0=2}'.format(timedata[2])
        prm_hour = '{:0=2}'.format(timedata[3])
        prm_minute = '{:0=2}'.format(timedata[4])
        prm_second = '{:0=2}'.format(timedata[5])
        self.datetime =  prm_year + "-" \
                +   prm_month + "-" \
                +   prm_day + "T" \
                +   prm_hour + ":" \
                +   prm_minute + ":" \
                +   prm_second + "Z"
  
    def postpowerbi(self,btn):
        self.btn = btn
        pbheaders = {
            'Content-Type' :'application/json'
        }

        if "A" in self.btn:
            body = [
                {
                    "datetime" : self.datetime,
                    "A" : 1,
                    "B" : 0,
                    "C" : 0
                }
            ]
            body_json = ujson.dumps(body).encode("utf-8")

        elif "B" in self.btn:
            body = [
                {
                    "datetime" : self.datetime,
                    "A" : 0,
                    "B" : 1,
                    "C" : 0
                }
            ]
            body_json = ujson.dumps(body).encode("utf-8")

        elif "C" in self.btn:
            body = [
                {
                    "datetime" : self.datetime,
                    "A" : 0,
                    "B" : 0,
                    "C" : 1
                }
            ]
            body_json = ujson.dumps(body).encode("utf-8")

        else:
            test = "aaa"

        res = urequests.post(
            self.posturl,
            data=body_json,
            headers=pbheaders
        )

        res.close()

PowerBI = powerbi()

while True:
    PowerBI.timeset()
    if buttonA.wasPressed():
        PowerBI.postpowerbi("A")
    if buttonB.wasPressed():
        PowerBI.postpowerbi("B")
    if buttonC.wasPressed():
        PowerBI.postpowerbi("C")
    time.sleep(0.5)
```

# 結果・・・
こうなりました！
<blockquote class="twitter-tweet"><p lang="ja" dir="ltr"><a href="https://twitter.com/hashtag/m5stack?src=hash&amp;ref_src=twsrc%5Etfw">#m5stack</a> のボタンで<a href="https://twitter.com/hashtag/powerbi?src=hash&amp;ref_src=twsrc%5Etfw">#powerbi</a> のストリーミングデータセットにAPI投げて<br>投票みたいなことができるガジェットを作ってみた（笑）<br><br>まぁなんに使うんかわからんけど。。。 <a href="https://t.co/EtYAoxjabD">pic.twitter.com/EtYAoxjabD</a></p>&mdash; りなたむ@steed400 (@R_t_A_n_M) <a href="https://twitter.com/R_t_A_n_M/status/1077112475609313281?ref_src=twsrc%5Etfw">December 24, 2018</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script> 

# まとめ
・いろいろ使うときはちゃんと調べてからやろう！
・一つ一つロジックを確実に確認しながら作ったほうが後々楽！
・モノづくりたのしい！

# 次やりたいこと
センサーデータを直接投げてみようかなと考えてます♪