diff --git a/frontend/src/components/RoomCard.vue b/frontend/src/components/RoomCard.vue index 3156ef22470c25496943329d39aca58af3e859aa..76d1ac01c11bb1425483237e1a7a9f7a06fd3ebc 100644 --- a/frontend/src/components/RoomCard.vue +++ b/frontend/src/components/RoomCard.vue @@ -1,5 +1,5 @@ <template> - <RouterLink :to="`/rooms/${room}`" class="room-card"> + <RouterLink :to="`/rooms/${encodeURIComponent(room)}`" class="room-card"> <div class="card-content"> <h3>{{ room }}</h3> </div> diff --git a/frontend/src/router/index.ts b/frontend/src/router/index.ts index 9bc21d2b0035313022ead7e36fce89e75fcedee7..acc846fe60b1dcc046298900150459f36d8be1e9 100644 --- a/frontend/src/router/index.ts +++ b/frontend/src/router/index.ts @@ -39,6 +39,12 @@ const router = createRouter({ name: 'charts', component: ChartView }, + { + path: '/rooms/:room', + name: 'RoomChart', + component: () => import('../views/ChartView.vue'), + props: true + }, { path: '/about', name: 'about', diff --git a/frontend/src/views/ChartView.vue b/frontend/src/views/ChartView.vue index 8bb71567909a1131f3639946cf7ee7002edff36d..e0ec4d4128abeea2766c4f586b7296d67ed3ddaf 100644 --- a/frontend/src/views/ChartView.vue +++ b/frontend/src/views/ChartView.vue @@ -1,7 +1,69 @@ <template> - <MyChart /> + <div class="chart-view"> + <h2>Daten für Raum: {{ room }}</h2> + + <ChartCard + title="CO₂ Verlauf" + :labels="labels" + :data="co2Data" + borderColor="#ff6384" + /> + + <!-- Debug-Ausgabe --> + <pre>Labels: {{ labels }}</pre> + <pre>CO₂: {{ co2Data }}</pre> + </div> </template> -<script setup lang="ts"> -import MyChart from '@/components/Chart.vue' +<script lang="ts"> +import { defineComponent, ref, onMounted } from 'vue' +import { useRoute } from 'vue-router' +import ChartCard from '../components/ChartCard.vue' + +export default defineComponent({ + name: 'ChartView', + components: { ChartCard }, + setup() { + const route = useRoute() + const room = decodeURIComponent(route.params.room as string) + + const labels = ref<string[]>([]) + const co2Data = ref<number[]>([]) + + onMounted(async () => { + try { + const url = `http://localhost:8000/api/room_data_range?room=${encodeURIComponent(room)}&start=-7d&stop=now()` + const response = await fetch(url) + + if (!response.ok) { + throw new Error(`HTTP-Fehler: ${response.status}`) + } + + const json = await response.json() + const entries = Object.entries(json.data).sort( + ([a], [b]) => new Date(a).getTime() - new Date(b).getTime() + ) + + const labelsArray = entries.map(([timestamp]) => + new Date(timestamp).toLocaleTimeString([], { hour: '2-digit', minute: '2-digit' }) + ) + + const co2DataArray = entries.map(([, values]) => values.co2) + + labels.value = labelsArray + co2Data.value = co2DataArray + } catch (err) { + console.error('⌠Fehler beim Laden der Daten:', err) + } + }) + + return { room, labels, co2Data } + } +}) </script> + +<style scoped> +.chart-view { + padding: 2rem; +} +</style>