メインコンテンツまでスキップ

Ambient から MiniViz へ移行する

このページは、すでに Ambient(ambidata.io)へデータを送っているデバイスを MiniViz に切り替えるためのガイドです。 同じセンサー値を MiniViz へ送るために必要な、最小限のコード変更を示します。

変わること​

項目AmbientMiniViz
エンドポイント
POST https://ambidata.io/api/v2/channels/{channelId}/data
POST https://api.miniviz.net/api/project/{project_id}
認証リクエストボディの writeKey
  • Authorization: Bearer {token} ヘッダー
  • ?token={token} クエリ
管理単位デバイスごとに1チャネルプロジェクト1つ。label_key でデバイスを区別(例: "label_key": "living-room")
値d1〜d8(8個固定)payload の任意キー(最大8キー、400バイト)
時刻created(省略可、文字列またはミリ秒)timestamp(必須、UNIX時間のミリ秒)
一括送信/dataarray で複数件を送信可能なし。1リクエスト1件
リクエスト例
{
  "writeKey": "WRITE_KEY",
  "d1": 25.0,
  "d2": 55.0
}
{
  "timestamp": 1731129600000,
  "label_key": "living-room",
  "payload": {
    "temperature": 25.0,
    "humidity": 55.0
  }
}
最短送信間隔チャネルごとに5秒(1日3,000件まで、平均28.8秒ペース)プロジェクトごとに60秒(Free)/ 15秒(Pro)
  • 変更の中心はリクエストボディです。
  • writeKey は Authorization ヘッダーに移ります。
  • timestamp と label_key が加わります。
  • d1 / d2 は temperature / humidity のような名前のキーに変えます。
  • 数値は数値のままでも、Ambient の Arduino ライブラリが送るような "25.0" という文字列でも送信できます。

参考リンク​

手順​

  1. MiniViz でプロジェクトを作成し、プロジェクトIDとトークンをコピーします。クイックスタート を参照してください。
  2. payload のキーを決めます(例: temperature、humidity)。
  3. 送信関数を MiniViz 版に置き換えます。サンプルコードはこのページの末尾にあります。
  4. 1件送信して、データベース画面で受信を確認します。

注意点​

送信間隔と過去データ
  • 送信間隔はプランごとに決まっています(Free 60秒 / Pro 15秒)。この間隔に合わせて調整してください。
  • 間隔はデバイス単位ではなくプロジェクト単位です。複数デバイスを1プロジェクトで使う場合は、合計の送信頻度がこの間隔に収まるように設計してください。
  • 間隔が短すぎる送信は Retry-After 付きの 429 で拒否されます。
  • /dataarray に相当する一括投入はありません。
キーの決め方
  • payload のキーは自由です。d1 / d2 は temperature / humidity のような名前にするとグラフが見やすくなります。同じ項目を別名で送ると別項目になるため、変更は移行後のデータだけに適用してください。
  • label_key は A-Z、a-z、0-9、-、_、.、:、@、/ の128文字までです。日本語のチャネル名は使えないため、ambient-ch12345 のように指定します。

サンプルコード​

Python​

どちらも素の HTTP POST なので、変わるのは URL・ヘッダー・ボディだけです。追加ライブラリは不要です。 MiniViz 側は専用ライブラリを使わない前提で、HTTP クライアントは任意のものを使えます。 公式の ambient ライブラリを使っている場合の「変更前」は am.send({"d1": temperature, "d2": humidity}) です。

変更前(Ambient)

import time
import requests

response = requests.post(
f"https://ambidata.io/api/v2/channels/{CHANNEL_ID}/data",
json={"writeKey": WRITE_KEY, "d1": temperature, "d2": humidity},
timeout=10,
)

変更後(MiniViz・URLトークン)

import time
import requests

PROJECT_ID = "MINIVIZ_PROJECT_ID"
TOKEN = "MINIVIZ_API_TOKEN"
LABEL_KEY = "ambient-ch12345" # ASCII のみ、128文字まで


def send_to_miniviz(temperature, humidity):
response = requests.post(
f"https://api.miniviz.net/api/project/{PROJECT_ID}?token={TOKEN}",
json={
"timestamp": int(time.time() * 1000),
"label_key": LABEL_KEY,
"payload": {
"temperature": temperature,
"humidity": humidity,
},
},
timeout=10,
)
response.raise_for_status()
return response.json()


if __name__ == "__main__":
while True:
temperature, humidity = 25.0, 55.0 # センサー読み取りに置き換える
send_to_miniviz(temperature, humidity)
time.sleep(60) # Ambient は5秒可、無料プランは60秒必要

変更後(MiniViz・Authorizationヘッダー)

import time
import requests

PROJECT_ID = "MINIVIZ_PROJECT_ID"
TOKEN = "MINIVIZ_API_TOKEN"
LABEL_KEY = "ambient-ch12345" # ASCII のみ、128文字まで


def send_to_miniviz(temperature, humidity):
response = requests.post(
f"https://api.miniviz.net/api/project/{PROJECT_ID}",
headers={"Authorization": f"Bearer {TOKEN}"},
json={
"timestamp": int(time.time() * 1000),
"label_key": LABEL_KEY,
"payload": {
"temperature": temperature,
"humidity": humidity,
},
},
timeout=10,
)
response.raise_for_status()
return response.json()


if __name__ == "__main__":
while True:
temperature, humidity = 25.0, 55.0 # センサー読み取りに置き換える
send_to_miniviz(temperature, humidity)
time.sleep(60) # Ambient は5秒可、無料プランは60秒必要

ヘッダーとクエリのどちらか一方を使います。両方送る場合は同じ値を指定してください。

リクエストの詳細と payload の制約は API リファレンス を参照してください。