あなたのラズベリーパイ温度を保存するためにADonisjs APIを構築する方法
11383 ワード
導入
私は家でいくつかのラズベリーパイ装置を持っています、そして、私は定期的に彼らの温度センサーからデータを集めて、Postgresデータベースにそのデータを格納することができたかったです.その後、私はいくつかの分析のためにそのデータを使用することができましたMaterialize .
このチュートリアルでは、adonisjsを使用して、センサーからデータを収集し、次の画像に示すようにPostgresデータベースに格納する簡単なAPIを構築します.
これは、多数のラズベリーPi装置の温度データを集めるのに用いられることができます.
必要条件
始める前に、以下のようにインストールされていることを確認する必要があります.
アドニス社とは
adonisjsはノードです.フルスタックのWebアプリケーションと一緒にRESTful APIを作成するために使用されるJSフレームワーク.これは、任意のプラットフォームに展開できるWebアプリケーションを構築するための素晴らしいツールです.それはLaravelのように感じますが、それはノードに基づいています.PHPよりむしろ.
あなたはadonisjs、心配していない場合は、まだ従うことができるだろう!しかし、adonisjsについてもっと知りたいなら、ここでこのチュートリアルをチェックしてください.
AdonisJS for Beginners
Adonisjsをインストールする方法
adonisjsをインストールするには、次のコマンドを実行する必要があります.
npm init adonis-ts-app@latest raspberry-pi-adonisjs-app
一度実行すると、プロジェクト構造を選択するように求められます.あなたはAPI、Webアプリケーション、および最小限の可能なADonisJSアプリの間で選択することができます:CUSTOMIZE PROJECT
❯ Select the project structure … Press <ENTER> to select
❯ api (Tailored for creating a REST API server)
web (Traditional web application with server-rendered templates)
slim (A smallest possible AdonisJS application)
このチュートリアルでは、APIオプションで行きましょう!矢印キーを使用してWebを選択し、Enterキーを押します.その後、プロジェクトの名前を選択するように求められます
raspberry-pi-adonisjs-app
しかし、別の名前を選択して自由に感じる.次に、Enterキーを押して、残りの設定にyesと答えます.
❯ Enter the project name · raspberry-pi-adonisjs-app
❯ Setup eslint? (y/N) · y
❯ Configure webpack encore for compiling front-end assets? (y/N) › y
これが完了したら、新しいプロジェクトディレクトリに切り替えます.cd raspberry-pi-adonisjs-app
そしてそこに一度、Webサーバを起動します.node ace serve --watch
The ace
コマンドはartisan
laravelコマンドこれはadonisjsコマンドを実行するためのコマンドラインインターフェイスです.The node ace serve
コマンドはウェブサーバを起動し、コードの変更を監視します.ACEコマンドの全てをチェックするには、次のコマンドを実行します.
node ace
.インストール
ラーヴォエル雄弁に似て、ADonisjsはormを提供します.orlはlucidと呼ばれ、今日使用されます.
明快なレコードのORM、クエリビルダ、移行、種子、工場が付属しています.
Lucidをインストールするには、次のコマンドを実行します.
npm i @adonisjs/lucid
一度完了すると、簡単な設定を行う必要があります.Lucidの設定
Lucidを設定するには、以下のACEコマンドを実行する必要があります.
node ace configure @adonisjs/lucid
使用するデータベースドライバを選択するように求められます.ここでは、PostgreSQLを選択してください!次に、設定手順を表示する場所を選択するように求められます.選んだ
In the terminal
, 必要な環境変数を出力します..env
ファイル.確認してください
DB_DATABASE
and DB_USERNAME
and DB_PASSWORD
あなたの変数.env
データベースに接続できるようにファイルを指定します.モードと移行を加えます
モデルと移行を追加するには、次のコマンドを実行します
node ace make:model Sensor -m
これにより、新しいモデルとマイグレーションが作成されます.CREATE: database/migrations/1639847090390_sensors.ts
CREATE: app/Models/Sensor.ts
移行ファイルを開き、ファイルを更新します.import BaseSchema from '@ioc:Adonis/Lucid/Schema'
export default class Sensors extends BaseSchema {
protected tableName = 'sensors'
public async up () {
this.schema.createTable(this.tableName, (table) => {
table.increments('id')
table.string('device')
table.string('temperature')
table.string('timestamp')
/**
* Uses timestamptz for PostgreSQL and DATETIME2 for MSSQL
*/
table.timestamp('created_at', { useTz: true })
table.timestamp('updated_at', { useTz: true })
})
}
public async down () {
this.schema.dropTable(this.tableName)
}
}
我々は基本的には、データの記録されたときに、デバイスの名前、温度、タイムスタンプを格納する3つの余分な列を追加しました.移行を実行するには、次のコマンドを実行します.
node ace migration:run
指定した列を使用してデータベースにセンサーテーブルを作成します.コントローラの作成
次に、コントローラを作成します.これは、我々が我々のPostgresデータベースにラズベリーパイデータを保存できる機能を加えるところです.
再び、我々は使用しています
ace
新しいコントローラを作成するコマンドnode ace make:controller SensorsController
これによりコントローラファイルが作成されます.app/Controllers/Http/SensorsController.ts
次に、必要なルートを作成しましょう!メソッドの追加
我々のRaspberry PI装置からデータを保存するためにこのAPIを使用するつもりで、我々はちょうど我々のコントローラに一つの方法を加えます.
お気に入りのテキストエディタで
SensorsController.ts
ファイルを追加し、次のメソッドを追加しますimport Route from '@ioc:Adonis/Core/Route'
import Database from '@ioc:Adonis/Lucid/Database'
// import { HttpContextContract } from '@ioc:Adonis/Core/HttpContext'
export default class SensorsController {
public async store ({ request }) {
let name = 'raspberry-1';
if (request.qs().name != null) {
name = request.qs().name;
}
let timestamp = '2021-11-21 19:52:49';
if (request.qs().timestamp != null) {
timestamp = request.qs().timestamp;
}
let temperature = '41.1';
if (request.qs().temperature != null) {
temperature = request.qs().temperature;
}
console.log(name, timestamp, temperature)
await Database
.insertQuery()
.table('sensors')
.insert({ device: name, timestamp: timestamp, temperature: temperature})
return {
message: 'Successfully added sensor data'
}
}
})
ここで注意することはいくつかあります.import
ステートメントはRoute
and Database
から@ioc:Adonis/Core/Route
and @ioc:Adonis/Lucid/Database
パッケージ.await
キーワードを使用してデータベースクエリの終了を待機します.request.qs()
メソッドからクエリ文字列パラメータを取得するために使用します.そのようにすれば、ラズベリーpiデバイスによって送られた名前、タイムスタンプ、および温度を得ることができます.ADonisjsルートの作成
あなたのルートファイルは
start/routes.ts
. そこに我々のアプリケーションのURLを指定することができますし、さまざまなコントローラやメソッドにそれらをマップ!我々はまだ準備ができていません、しかし、我々は我々が以下のルートを必要とするということを知っています:
GET /temperature
: このルートは、ラズベリーパイデバイスによって送られたデータを格納します.start/routes.ts
そして、以下の内容を持つように更新します.import Route from '@ioc:Adonis/Core/Route'
Route.get('/temperature', 'SensorsController.store')
認証の追加
このチュートリアルのために、APIが私のネットワーク上でローカルに動いていて、どんな敏感なデータも持っていないので、私は完全な認証を実装していないでしょう.
しかし、この手順をさらに実行したい場合は、次の手順を実行します.
AdonisJS Authentication Docs
Raspberry PI装置へのcron仕事の追加
我々はコントローラとルートを持っている今、我々は、APIにデータを送信し、我々のデータベースに格納するラズベリーパイデバイスにcronジョブを追加することができます.
毎分実行する小さなbashスクリプトを作りましょう.
#!/bin/bash
# AdonisJS API URL - Make sure to change this to your API URL
api_url="http://localhost:3333/temperature"
# Specify the name of the Raspberry Pi device:
name="raspberry-1"
if [[ -z ${NAME} ]] ; then
name="raspberry"
fi
# Get the temperature from the Raspberry Pi device:
function temperature(){
temperature=$(/opt/vc/bin/vcgencmd measure_temp | tr -d temp=\'C)
echo ${temperature}
}
# Get the current time
function timestamp(){
time=$(date +%s)
echo ${time}
}
echo ${name},$(timestamp),$(temperature)
curl -X GET "${api_url}?name=${name}-${i}×tamp=$(timestamp)&temperature=$(temperature)"
あなたのadonisjs APIにURLを変えるようにしてください.あなたが同じラズベリーパイでこれを実行しているならば、あなたはそれを残すことができますlocalhost
, そうでなければ、あなたはAPIを実行しているデバイスのIPを使用できます.スクリプトを保存する
temperature.sh
実行可能にします:chmod +x temperature.sh
次に、あなたの編集crontab
:sudo crontab -e
次の行をあなたのcrontab
:* * * * * /home/pi/temperature.sh
スクリプトは毎分スクリプトを実行し、データをAPIに送ります.結論
このチュートリアルのコードは、次のとおりです.
AdonisJS API - Raspberry Pi Temperature
このチュートリアルの2番目の部分として、APIによって収集されたデータについてのストリーミングSQLクエリを実行するには、Materializeを使用します.次の設定を行います.
adonisjsについてもっと知りたいなら、ここでこのチュートリアルをチェックアウトすることをお勧めします.
Learn Materialize by running streaming SQL on your nginx logs
希望がこれを助ける!
Reference
この問題について(あなたのラズベリーパイ温度を保存するためにADonisjs APIを構築する方法), 我々は、より多くの情報をここで見つけました https://dev.to/bobbyiliev/how-to-build-adonisjs-api-to-store-your-raspberry-pi-temperature-5c6aテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol