Room Management with CDF Entities
This guide shows how CDF entities map to room management tasks (like adding devices to rooms, creating scenes, etc.).
Rooms are Groups
In CDF, a room is represented by ESPCDFGroup. Think of it as a container for devices.
// Get all rooms in your home
const home = espCDF.groupStore.getGroupById("home-id");
const rooms = home?.subGroups || [];
// Access a specific room
const livingRoom = espCDF.groupStore.getGroupById("room-id");
Add/Remove Devices to a Room
ObjC example (from your reference):
[self.room addDeviceWithDeviceId:@"devId"];
[self.room removeDeviceWithDeviceId:@"devId"];
CDF example:
const room = espCDF.groupStore.getGroupById("room-id")!;
// Add device to room
await room.addNodes(["device-id"]);
// Remove device from room
await room.removeNodes(["device-id"]);
Update Room Name
ObjC example:
[self.room updateRoomName:@"new_room_name"];
CDF example:
const room = espCDF.groupStore.getGroupById("room-id")!;
await room.updateGroupInfo({ name: "new_room_name" });
Load Devices in a Room
ObjC example:
// ThingSmartRoom manages devices, but you need to load them
NSArray *devices = self.room.deviceList;
CDF example:
const room = espCDF.groupStore.getGroupById("room-id")!;
// Load all devices (nodes) in this room
const nodes = await room.getNodes();
console.log(nodes.length); // Number of devices
Control Devices in a Room
Once you have devices loaded in a room, control them using ESPCDFNode:
const room = espCDF.groupStore.getGroupById("room-id")!;
const nodes = await room.getNodes();
// Control the first device in the room
const firstDevice = nodes[0];
await firstDevice.setMultipleParams({
Light: { Power: true, Brightness: 80 },
});
Create Room Scenes
CDF example:
const room = espCDF.groupStore.getGroupById("room-id")!;
// Create a "Movie Night" scene for this room
const scene = await room.createScene({
name: "Movie Night",
nodes: ["device-id-1", "device-id-2"],
actions: {
"device-id-1": { Light: { Power: true, Brightness: 30 } },
"device-id-2": { Light: { Power: false } },
},
});
// Get all scenes in this room
const scenes = await room.getScenes();
Create Room Automations
CDF example:
const room = espCDF.groupStore.getGroupById("room-id")!;
// Create an automation: turn on lights at sunset
const automation = await room.createAutomation({
name: "Sunset Lights",
enabled: true,
eventType: "daylight",
events: [{ check: { name: "sunset" } }],
actions: [
{ nodeId: "device-id", action: { Light: { Power: true } } },
],
});
// Get all automations in this room
const automations = await room.getAutomations();
Entity Relationship
Home (ESPCDFGroup)
├── Room (ESPCDFGroup - subgroup)
│ ├── Device 1 (ESPCDFNode)
│ ├── Device 2 (ESPCDFNode)
│ ├── Scene (ESPCDFScene)
│ ├── Schedule (ESPCDFSchedule)
│ └── Automation (ESPCDFAutomation)
└── Room 2 (ESPCDFGroup - subgroup)
├── Device 3 (ESPCDFNode)
└── ...
Common Tasks
| Task | Entity | Method |
|---|---|---|
| Get all rooms | ESPCDFGroup | group.getSubGroups() |
| Add device to room | ESPCDFGroup | group.addNodes(["device-id"]) |
| Remove device from room | ESPCDFGroup | group.removeNodes(["device-id"]) |
| Rename room | ESPCDFGroup | group.updateGroupInfo({ name: "..." }) |
| Get devices in room | ESPCDFGroup | group.getNodes() |
| Control device | ESPCDFNode | node.setMultipleParams({...}) |
| Create scene | ESPCDFGroup | group.createScene({...}) |
| Create automation | ESPCDFGroup | group.createAutomation({...}) |
Next Steps
- ESPCDFGroup — Full group API reference
- ESPCDFNode — Full device API reference
- ESPCDFScene — Scene management
- ESPCDFAutomation — Automation management