diff --git a/.gitignore b/.gitignore index 379c748..7fe66ca 100644 --- a/.gitignore +++ b/.gitignore @@ -35,3 +35,4 @@ Thumbs.db # generated broker credentials + data (not committed) /docker/mosquitto/config/passwd /docker/mosquitto/data/ +/.claude/ diff --git a/app/Livewire/Rooms/Index.php b/app/Livewire/Rooms/Index.php new file mode 100644 index 0000000..cbad63c --- /dev/null +++ b/app/Livewire/Rooms/Index.php @@ -0,0 +1,25 @@ +with(['devices.entities.state']) + ->orderBy('sort')->orderBy('name') + ->get(); + + return view('livewire.rooms.index', ['rooms' => $rooms]); + } +} diff --git a/app/Livewire/Rooms/Show.php b/app/Livewire/Rooms/Show.php new file mode 100644 index 0000000..b7a3da5 --- /dev/null +++ b/app/Livewire/Rooms/Show.php @@ -0,0 +1,45 @@ +room = $room; + } + + #[On('echo-private:home,.DeviceStateChanged')] + public function onDeviceStateChanged(): void {} + + public function toggleEntity(int $entityId): void + { + $entity = Entity::query() + ->whereHas('device', fn ($q) => $q->where('room_id', $this->room->id)) + ->with('device', 'state') + ->find($entityId); + + if ($entity === null || ! in_array($entity->type, ['switch', 'light'], true)) { + return; + } + + app(DeviceCommandService::class)->toggle($entity); + } + + public function render() + { + $this->room->load(['devices' => fn ($q) => $q->orderBy('name'), 'devices.entities.state']); + + return view('livewire.rooms.show'); + } +} diff --git a/lang/de/rooms.php b/lang/de/rooms.php new file mode 100644 index 0000000..3203c92 --- /dev/null +++ b/lang/de/rooms.php @@ -0,0 +1,10 @@ + 'Alle Räume im Überblick.', + 'empty' => 'Noch keine Räume.', + 'no_devices' => 'Keine Geräte in diesem Raum.', + 'online' => 'online', + 'lights' => 'Licht an', + 'open' => 'offen', +]; diff --git a/lang/en/rooms.php b/lang/en/rooms.php new file mode 100644 index 0000000..92b0f98 --- /dev/null +++ b/lang/en/rooms.php @@ -0,0 +1,10 @@ + 'All rooms at a glance.', + 'empty' => 'No rooms yet.', + 'no_devices' => 'No devices in this room.', + 'online' => 'online', + 'lights' => 'lights on', + 'open' => 'open', +]; diff --git a/resources/views/components/sidebar.blade.php b/resources/views/components/sidebar.blade.php index 1a1e2f6..fa6b724 100644 --- a/resources/views/components/sidebar.blade.php +++ b/resources/views/components/sidebar.blade.php @@ -2,7 +2,7 @@ $groups = [ 'nav.section_overview' => [ ['key' => 'dashboard', 'icon' => 'dashboard', 'route' => 'dashboard', 'lock' => false], - ['key' => 'rooms', 'icon' => 'rooms', 'route' => null, 'lock' => false], + ['key' => 'rooms', 'icon' => 'rooms', 'route' => 'rooms.index', 'active' => 'rooms.*', 'lock' => false], ['key' => 'devices', 'icon' => 'devices', 'route' => 'devices.index', 'active' => 'devices.*', 'lock' => false], ], 'nav.section_persons' => [ diff --git a/resources/views/livewire/rooms/index.blade.php b/resources/views/livewire/rooms/index.blade.php new file mode 100644 index 0000000..1c313de --- /dev/null +++ b/resources/views/livewire/rooms/index.blade.php @@ -0,0 +1,40 @@ +
{{ __('rooms.empty') }}
{{ __('rooms.no_devices') }}