@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.
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 |
brightness | number | Brightness 0-100 (subclass reads protocol-specific field) |
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');
mac12('aa-bb-cc-dd-ee-ff');
mac12('aabbccddeeff');
macmac('aabbccddeeff');
macmac('aabbccddeeff', '-');
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) { }
setBrightness(level: number) { }
setWhite(temp: number, brightness?: number) { }
requestState() { }
}
Packages using devdefs