@bobfrankston/devdefs
v0.1.5
Published
Shared base class for LAN device libraries (Wiz, LIFX, etc.)
Maintainers
Readme
@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
- @bobfrankston/wzlan — Wiz LAN protocol
- @bobfrankston/lxlan — LIFX LAN protocol
