npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

opniz-server

v0.0.6

Published

opniz server

Downloads

36

Readme

opniz Server

❗ このプロジェクトは現在アルファ版です。

opnizとはM5StackデバイスをNode.js(JavaScript / TypeScript)からobnizライクに実装できるオープンソースフレームワークです。
Node.js SDKおよびArduinoライブラリがあり、WebSocketで相互通信を行います。

しくみとしてはM5StackデバイスおよびNode.js SDK間にてJSON形式のRPCメッセージをやりとりし、相互に定義されたメソッドを呼び合います。

overview

opniz Serverはopniz Node.js SDKやopnizデバイスからのJSON RPCメッセージを中継するWebSocketサーバです。
opniz Serverを介すことでWebSocketクライアント同士の接続(opnizデバイス、ブラウザ、Node.js SDK等)を行えます。

server-local

クラウド環境(PaaS、FaaS等)でも動作するため、たとえば手元のPCで動作させたopniz Node.js SDKからインターネット越しの環境にあるopnizデバイスを制御するといったことも可能です。

server-global

インストール方法

npm install opniz-server

使い方

ポート番号を指定するだけでサーバが起動します。

const { OpnizServer } = require("opniz-server")

const port = 3000

const server = new OpnizServer(port)

opnizクライアントからはopniz Serverのアドレス、ポート番号に加え、opniz Serverを経由して接続したいopnizデバイスと共通のID(任意の文字列)を指定し接続します。
IDは合言葉のようなものでopniz Serverにて同じIDを使用して接続しているopnizクライアント同士をマッチングします。

以下はNode.js SDKのサンプルコードです。
opniz Serverを経由して接続したopnizデバイスのヒープメモリサイズを1秒おきに取得します。

// Node.js SDK Client

const { Opniz } = require("opniz")

const address = "127.0.0.1" // opniz Serverのアドレスを指定
const port = 3000           // opniz Serverのポート番号を指定
const id = "1234-5678"      // opniz Serverを経由して接続したいopnizデバイスで指定したIDと同じ任意の文字列を指定
const opniz = new Opniz.Esp32({ address, port, id }) // opnizインスタンス生成



; (async () => {
	while (!(await opniz.connect())) { console.log("connect...") } // opniz Serverを経由してopnizデバイスへ接続
	
	setInterval(async () => {
		console.log(await opniz.getFreeHeap()) // opnizデバイスのヒープメモリーサイズを取得して表示
	}, 1000)
})()

以下はopnizデバイス(Arduino Library)のサンプルコードです。
Node.js SDKと同様にopniz Serverのアドレス、ポート番号と、Node.js SDKと同じ値となる任意のIDを指定し接続します。

// Arduino Library Client

#include <OpnizEsp32.h>
#include <lib/WiFiConnector.h>

const char* ssid = "<SSID>";         // Wi-FiのSSIDに書き換え
const char* password = "<PASSWORD>"; // Wi-Fiのパスワードに書き換え
WiFiConnector wifiConnector(ssid, password); // Wi-Fi接続ヘルパーインスタンス生成

const char* address = "192.168.0.1"; // opniz Serverのアドレスを指定
const uint16_t port = 3000;          // opniz Serverのポート番号を指定
const String id = "1234-5678";       // opniz Serverを経由して接続したいNode.js SDKで指定したIDと同じ任意の文字列を指定
Opniz::Esp32* opniz = new Opniz::Esp32(address, port, id); // opnizインスタンス生成



void setup() {
    wifiConnector.connect(); // Wi-Fi接続
    opniz->connect();        // opniz Serverを経由してNode.js SDKへ接続
}

void loop() {
    opniz->loop();         // opnizメインループ
    wifiConnector.watch(); // Wi-Fi接続監視
}

Herokuへデプロイ

クラウド環境へのデプロイの一例として、Herokuへのデプロイコードは以下のようになります。
ポート番号をprocess.env.PORTと指定することがポイントです。

const { OpnizServer } = require("opniz-server")

const port = process.env.PORT

const server = new OpnizServer(port)

API

opniz Serverではopnizクライアントからのイベントが発生したタイミングで任意の制御を行えるAPIを用意しています。

onconnection / onconnect

onconnectiononconnectにてopnizクライアントからの接続情報を取得できます。
onconnectionはopnizクライアントからopniz Serverへアクセスしたタイミングで呼び出されます。
その後IDが一致するopnizクライアント同士の接続が完了したタイミングでonconnectが呼び出されます。

パラメータのopnizIdはopnizクライアントにて指定されたIDです。
socketprimarysecondaryはSocket.IOのSocketオブジェクトです。

const { OpnizServer } = require("opniz-server")

const port = 3000

const server = new OpnizServer(port)

// opnizクライアントからopniz Serverへのアクセス時に呼び出し
server.onconnection = (opnizId, socket) => {
	console.log(opnizId, socket.id)
}

// IDが一致するopnizクライアント同士の接続完了時に呼び出し
server.onconnect = (opnizId, primary, secondary) => {
	console.log(opnizId, primary.id, secondary.id)
}

onrequest / onresponse

onrequestonresponseにてopnizクライアントからのリクエスト/レスポンスをハンドリングできます。
payloadが生データとなり、srcが送信元、dist送信先のSocket.IOのSocketオブジェクトです。
これによりログを取得したりpayloadの書き換えが行えます。

const { OpnizServer } = require("opniz-server")

const port = 3000

const server = new OpnizServer(port)

// opnizクライアントからのリクエストをハンドリング
server.onrequest = async (payload, src, dist) => {
	console.log(payload)
	return payload
}

// opnizクライアントからのレスポンスをハンドリング
server.onresponse = async (payload, src, dist) => {
	console.log(payload)
	return payload
}

ドキュメント

TypeDoc

関連リポジトリ

ライセンス

MIT