npm.io
0.1.6 • Published 1 month ago

@bobfrankston/devdefs

Licence
MIT
Version
0.1.6
Deps
2
Size
10 kB
Vulns
0
Weekly
0

@bobfrankston/devdefs

Shared base class and MAC utilities for LAN device protocol libraries.

DeviceBase

Common state and transport plumbing for LAN-controlled smart devices. Subclasses add protocol-specific commands.

Property Type Description
mac string MAC address (lowercase, colon-separated aa:bb:cc:dd:ee:ff)
ip string Current IP address
port number UDP port (set by subclass)
power boolean On/off state
label string User-assigned name
online boolean Whether device is responding
lastSeen number Timestamp of last message (Date.now())
rssi number WiFi signal strength (dBm)
fwVersion string Firmware version (getter/setter — LxDevice decodes from numeric)
static MaxBrightness 100 Shared brightness scale
Getter Type Description
brightness number Brightness 0-100 (subclass reads protocol-specific field)
Method Description
setPower(on) Set power on/off
setBrightness(level) Set brightness 0-100
setWhite(temp, brightness?) Set white color temperature
requestState() Request current state (async — response via events)
setTransport(transport) Attach a UdpTransport
markSeen() Set lastSeen = Date.now(), online = true
requireTransport() Throw if no transport (protected, for subclass send paths)
requireIP() Throw if no IP (protected, for subclass send paths)

Constructor normalizes MAC from any format (colons, dashes, bare, upper/lower) to lowercase colon-separated.

MAC Utilities

import { mac12, macmac } from '@bobfrankston/devdefs';

mac12('AA:BB:CC:DD:EE:FF');    // → 'aabbccddeeff'
mac12('aa-bb-cc-dd-ee-ff');    // → 'aabbccddeeff'
mac12('aabbccddeeff');         // → 'aabbccddeeff'

macmac('aabbccddeeff');        // → 'AA:BB:CC:DD:EE:FF'
macmac('aabbccddeeff', '-');   // → 'AA-BB-CC-DD-EE-FF'

Usage

DeviceBase is abstract — subclasses must implement brightness, setPower, setBrightness, setWhite, and requestState.

import { DeviceBase, mac12 } from '@bobfrankston/devdefs';

class MyDevice extends DeviceBase {
    dimming: number = 0;

    constructor(mac: string, ip?: string) {
        super(mac, ip, 12345);
    }

    get brightness() { return this.dimming; }
    setPower(on: boolean) { /* protocol send */ }
    setBrightness(level: number) { /* protocol send */ }
    setWhite(temp: number, brightness?: number) { /* protocol send */ }
    requestState() { /* protocol send */ }
}

Packages using devdefs

Keywords