103e24e5fa
- Backend: async MQTT service (aiomqtt) to fetch Z2M networkmap via bridge API - Backend: FastAPI router at /api/v1/zigbee with /import and /test-connection - Backend: Pydantic v2 schemas for request/response validation - Backend: coordinator → router → end-device parent_id hierarchy builder - Frontend: ZigbeeImportModal with MQTT config form, Test Connection, Fetch Devices - Frontend: device list grouped by type (coordinator/router/enddevice) with checkboxes - Frontend: ZigbeeCoordinatorNode, ZigbeeRouterNode, ZigbeeEndDeviceNode canvas nodes - Frontend: Zigbee Import button in sidebar alongside Scan Network - Frontend: handleZigbeeAddToCanvas wires selected devices + edges onto canvas - Tests: full unit test suite for parser, hierarchy builder, MQTT mocks - Tests: API endpoint tests for /zigbee/import and /zigbee/test-connection - Tests: Vitest component tests for ZigbeeImportModal - Docs: docs/zigbee-import.md with full usage, MQTT config, troubleshooting guide - Docs: README.md Zigbee2MQTT Import section Co-authored-by: CyberKeys <noreply@openclaw.ai>
33 lines
2.0 KiB
TypeScript
33 lines
2.0 KiB
TypeScript
import { type NodeProps, type Node } from '@xyflow/react'
|
|
import {
|
|
Globe, Router, Network, Server, Layers, Box, Container,
|
|
HardDrive, Cpu, Wifi, Circle, Cctv, Printer, Monitor, PlugZap, Anchor, Package, Flame, Radio, Antenna,
|
|
} from 'lucide-react'
|
|
import { BaseNode } from './BaseNode'
|
|
import type { NodeData } from '@/types'
|
|
|
|
type N = NodeProps<Node<NodeData>>
|
|
|
|
export const IspNode = (props: N) => <BaseNode {...props} icon={Globe} />
|
|
export const RouterNode = (props: N) => <BaseNode {...props} icon={Router} />
|
|
export const FirewallNode = (props: N) => <BaseNode {...props} icon={Flame} />
|
|
export const SwitchNode = (props: N) => <BaseNode {...props} icon={Network} />
|
|
export const ServerNode = (props: N) => <BaseNode {...props} icon={Server} />
|
|
export const ProxmoxNode = (props: N) => <BaseNode {...props} icon={Layers} />
|
|
export const VmNode = (props: N) => <BaseNode {...props} icon={Box} />
|
|
export const LxcNode = (props: N) => <BaseNode {...props} icon={Container} />
|
|
export const NasNode = (props: N) => <BaseNode {...props} icon={HardDrive} />
|
|
export const IotNode = (props: N) => <BaseNode {...props} icon={Cpu} />
|
|
export const ApNode = (props: N) => <BaseNode {...props} icon={Wifi} />
|
|
export const CameraNode = (props: N) => <BaseNode {...props} icon={Cctv} />
|
|
export const PrinterNode = (props: N) => <BaseNode {...props} icon={Printer} />
|
|
export const ComputerNode = (props: N) => <BaseNode {...props} icon={Monitor} />
|
|
export const CplNode = (props: N) => <BaseNode {...props} icon={PlugZap} />
|
|
export const DockerHostNode = (props: N) => <BaseNode {...props} icon={Anchor} />
|
|
export const DockerContainerNode = (props: N) => <BaseNode {...props} icon={Package} />
|
|
export const GenericNode = (props: N) => <BaseNode {...props} icon={Circle} />
|
|
// Zigbee node types
|
|
export const ZigbeeCoordinatorNode = (props: N) => <BaseNode {...props} icon={Network} />
|
|
export const ZigbeeRouterNode = (props: N) => <BaseNode {...props} icon={Radio} />
|
|
export const ZigbeeEndDeviceNode = (props: N) => <BaseNode {...props} icon={Antenna} />
|