mirror of
https://github.com/ckaczor/HomeMonitor.git
synced 2026-01-14 01:25:38 -05:00
134 lines
4.8 KiB
Vue
134 lines
4.8 KiB
Vue
<script lang="ts" setup>
|
|
import { ref } from 'vue';
|
|
import { subHours } from 'date-fns';
|
|
import { createIndoorStore } from '@/stores/indoorStore';
|
|
import { ConvertCToF } from '@/temperatureConverter';
|
|
import { ConvertMillibarToInchesOfMercury } from '@/pressureConverter';
|
|
import ValueChart from '../components/ValueChart.vue';
|
|
import TimeRange from '@/components/TimeRange.vue';
|
|
import TimeSpan from '@/models/time-span';
|
|
|
|
const indoorStore = createIndoorStore('charts');
|
|
|
|
const ready = ref(false);
|
|
|
|
const end = ref(new Date());
|
|
const start = ref(subHours(end.value, 24));
|
|
const timeSpan = ref(TimeSpan.Last24Hours);
|
|
|
|
const mainTemperatureSeries = ref({ name: 'Upstairs', data: [] as number[][] });
|
|
const basementTemperatureSeries = ref({ name: 'Downstairs', data: [] as number[][] });
|
|
|
|
const mainHumiditySeries = ref({ name: 'Upstairs', data: [] as number[][] });
|
|
const basementHumiditySeries = ref({ name: 'Downstairs', data: [] as number[][] });
|
|
|
|
const mainPressureSeries = ref({ name: 'Upstairs', data: [] as number[][] });
|
|
const basementPressureSeries = ref({ name: 'Downstairs', data: [] as number[][] });
|
|
|
|
const load = () => {
|
|
ready.value = false;
|
|
|
|
indoorStore.getReadingValueHistoryGrouped(start.value, end.value, 15).then((groupedReadingsList) => {
|
|
mainTemperatureSeries.value.data.length = 0;
|
|
basementTemperatureSeries.value.data.length = 0;
|
|
|
|
mainHumiditySeries.value.data.length = 0;
|
|
basementHumiditySeries.value.data.length = 0;
|
|
|
|
mainPressureSeries.value.data.length = 0;
|
|
basementPressureSeries.value.data.length = 0;
|
|
|
|
groupedReadingsList.forEach((groupedReadings) => {
|
|
const date = new Date(groupedReadings.bucket).getTime();
|
|
|
|
if (groupedReadings.name === 'main') {
|
|
mainTemperatureSeries.value.data.push([date, ConvertCToF(groupedReadings.averageTemperature)]);
|
|
mainHumiditySeries.value.data.push([date, groupedReadings.averageHumidity]);
|
|
mainPressureSeries.value.data.push([date, ConvertMillibarToInchesOfMercury(groupedReadings.averagePressure)]);
|
|
} else if (groupedReadings.name === 'basement') {
|
|
basementTemperatureSeries.value.data.push([date, ConvertCToF(groupedReadings.averageTemperature)]);
|
|
basementHumiditySeries.value.data.push([date, groupedReadings.averageHumidity]);
|
|
basementPressureSeries.value.data.push([date, ConvertMillibarToInchesOfMercury(groupedReadings.averagePressure)]);
|
|
}
|
|
});
|
|
|
|
ready.value = true;
|
|
});
|
|
};
|
|
|
|
load();
|
|
</script>
|
|
|
|
<template>
|
|
<v-container
|
|
fluid
|
|
class="container">
|
|
<TimeRange
|
|
:time-span="timeSpan"
|
|
:start="start"
|
|
:end="end"
|
|
@change="
|
|
(value) => {
|
|
timeSpan = value.timeSpan;
|
|
start = value.start;
|
|
end = value.end;
|
|
|
|
load();
|
|
}
|
|
"
|
|
@refresh="load"></TimeRange>
|
|
<div class="content">
|
|
<v-row
|
|
dense
|
|
align="start">
|
|
<v-col
|
|
sm="6"
|
|
cols="12">
|
|
<ValueChart
|
|
:ready="ready"
|
|
type="line"
|
|
title="Temperature"
|
|
unit="°F"
|
|
group="indoor"
|
|
:series="[mainTemperatureSeries, basementTemperatureSeries]"></ValueChart>
|
|
</v-col>
|
|
<v-col
|
|
sm="6"
|
|
cols="12">
|
|
<ValueChart
|
|
:ready="ready"
|
|
type="line"
|
|
title="Humidity"
|
|
unit="%"
|
|
group="indoor"
|
|
:series="[mainHumiditySeries, basementHumiditySeries]"></ValueChart>
|
|
</v-col>
|
|
<v-col
|
|
sm="6"
|
|
cols="12">
|
|
<ValueChart
|
|
:ready="ready"
|
|
type="line"
|
|
title="Pressure"
|
|
unit='"'
|
|
group="indoor"
|
|
:y-axis-decimal-points="1"
|
|
:series="[mainPressureSeries, basementPressureSeries]"></ValueChart>
|
|
</v-col>
|
|
</v-row>
|
|
</div>
|
|
</v-container>
|
|
</template>
|
|
|
|
<style scoped>
|
|
.container {
|
|
height: 100%;
|
|
background-color: #fafafa;
|
|
padding: 0;
|
|
}
|
|
|
|
.content {
|
|
padding: 10px;
|
|
}
|
|
</style>
|