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

alt-echonet-lite

v0.3.0

Published

Alternative ECHONET-Lite controller module

Downloads

6

Readme

alt-echonet-lite

ラズパイなどで簡易にECHONET-Lite機器をコントロールするためのモジュールです。 本モジュールには下記のような特徴があります。

  • 制御対象機器をIPアドレスではなく識別番号(EPC83)で指定する
  • Set/Getのエラーリトライを自動で行ってくれる

IPアドレスがDHCPで割当てされ、何かの拍子に変わってしまう環境であったり、426/429/920MHz帯無線(パナソニック社製アドバンス照明などに使用されてます)などを使用していて通信リトライがないと話にならない環境(つまりわが家です)には必要な機能ですが、なぜだかこういったフリーな実装をみないので実装しました。

EPC83の識別番号は付属の sample-search.js を実行することでローカルネットワークにあるECHONET-Lite機器のものを表示することができます。

使い方

本モジュールを読み込んで下記のような感じで使用します。

初期化

const el_factory = require('alt-echonet-lite');

el = new el_factory((info) => {
    // グローバルコールバック
    // get/setでコールバックを指定しない場合は、こちらにコールバックします
    console.log(info);
    const node = 'fe00007700000000000000000000000001';
    if (info.EPC == 0x83 && info.node == node) {
        // EPC83でのノード検索完了
    }
});

Set/Get

const node = 'fe00007700000000000000000000000001';
const instance = 0x029101; // 単機能照明
const epc = 0x80;
const esv = 0x30;

// 指定nodeのインスタンス029101の照明をONする
// コールバックを指定していないので結果はグローバルコールバックする
el.set(node, instance, epc, esv);

// 指定nodeのインスタンス029101の照明の状態を取得する
// このようにget/setで個別コールバックすることも可
el.get(node, instance, epc, (info) => {
    console.log(info);
});

// 全インスタンスの結果を1つの個別コールバックですべて受けることができる
const all_instance = 0x029100;
el.get(node, all_instance, epc, (info) => {
    console.log(info);
});

// 同報要求の結果を1つの個別コールバックですべて受けることができる
el.get(el.multicastAddress, instance, epc, (info) => {
    console.log(info);
});

// 複数のEPCのset/getができる
el.get(node, instance, {0x80, 0xb0}) (info) => {
    console.log(info);
});
el.get(node, instance, [0x80, 0xb0]) (info) => {
    console.log(info);
});
el.set(node, instance, {0x80:0x30, 0xb0:0x40}, info => {
    console.log(info);
})

コールバック

コールバックは、モジュール初期化のnew時に渡すグローバルコールバックと、各get/setで渡す個別コールバックがあります。

いずれのコールバックでも下記のようなオブジェクトを受け取ります。 コールバックは1つのEPCごとに行われますので、2つ以上のEPCが含まれた結果の場合、その回数にわけて1つずつコールバックされます。

また、マルチキャストや全インスタンス宛ての要求でのコールバックはタイムアウトするまでに受け取ったすべての応答についてコールバックされます。

var info = {
    node: 'fe00007700000000000000000000000001', // 送信元識別番号
    instance: 0x029101,                         // 送信元インスタンス
    ESV: 'Get_Res',                             // ESV
    EPC: 0x83,                                  // EPC
    PDC: 17,                                    // PDC
    EDT: [254, 0, 0, ...],                      // EDT
    rinfo: {
        address: '192.168.x.x'                  // 送信元アドレス
    }
};

モジュールは、起動後自動で機器を探索(EPC83のget)にいきますので、機器が返した応答はグローバルコールバックで受け取れます。

エラーの場合は、下記のようなオブジェクトを受け取ります。

var info = {
    node: 'fe00007700000000000000000000000001', // 送信元識別番号
    error: 'timeout'                            // エラー
};

使用環境

以下のような環境で使用しています。

|項目|内容| |:----|:--------------------------------------| |ホスト|Raspberry Pi 3B+ Raspbian Stretch Lite| |ECHONET-Lite機器|パナソニック社製アドバンスリンクモデル x 2系統| ||パナソニック社製IP/JEM-A変換アダプタ HF-JA1-W| ||パナソニック社製AiSEG2| ||大阪ガス社製エネファーム 191-PA09| ||シャープ社製空気清浄機 KI-WF75|