mirror of
https://github.com/ckaczor/HomeMonitor.git
synced 2026-01-13 17:22:54 -05:00
Add wind and pressure to kiosk
This commit is contained in:
1
WebDisplay/components.d.ts
vendored
1
WebDisplay/components.d.ts
vendored
@@ -17,6 +17,7 @@ declare module 'vue' {
|
|||||||
IndoorSummary: typeof import('./src/components/IndoorSummary.vue')['default']
|
IndoorSummary: typeof import('./src/components/IndoorSummary.vue')['default']
|
||||||
LongPressButton: typeof import('./src/components/LongPressButton.vue')['default']
|
LongPressButton: typeof import('./src/components/LongPressButton.vue')['default']
|
||||||
NationalDays: typeof import('./src/components/NationalDays.vue')['default']
|
NationalDays: typeof import('./src/components/NationalDays.vue')['default']
|
||||||
|
PressureTrendArrow: typeof import('./src/components/PressureTrendArrow.vue')['default']
|
||||||
RouterLink: typeof import('vue-router')['RouterLink']
|
RouterLink: typeof import('vue-router')['RouterLink']
|
||||||
RouterView: typeof import('vue-router')['RouterView']
|
RouterView: typeof import('vue-router')['RouterView']
|
||||||
TimeRange: typeof import('./src/components/TimeRange.vue')['default']
|
TimeRange: typeof import('./src/components/TimeRange.vue')['default']
|
||||||
|
|||||||
@@ -1,28 +1,10 @@
|
|||||||
<script setup lang="ts">
|
<script setup lang="ts">
|
||||||
import { useWeatherStore } from '@/stores/weatherStore';
|
import { useWeatherStore } from '@/stores/weatherStore';
|
||||||
import { ConvertPascalToInchesOfMercury } from '@/pressureConverter';
|
|
||||||
import { ShortenWindDirection } from '@/windFormatter';
|
import { ShortenWindDirection } from '@/windFormatter';
|
||||||
|
import PressureTrendArrow from './PressureTrendArrow.vue';
|
||||||
|
|
||||||
const weatherStore = useWeatherStore();
|
const weatherStore = useWeatherStore();
|
||||||
weatherStore.start();
|
weatherStore.start();
|
||||||
|
|
||||||
const rotationClass = (pressureDifference: number | undefined) => {
|
|
||||||
if (!pressureDifference) {
|
|
||||||
return '';
|
|
||||||
} else if (Math.abs(pressureDifference) <= 1.0) {
|
|
||||||
return '';
|
|
||||||
} else if (pressureDifference > 1.0 && pressureDifference <= 2.0) {
|
|
||||||
return 'up-low';
|
|
||||||
} else if (pressureDifference > 2.0) {
|
|
||||||
return 'up-high';
|
|
||||||
} else if (pressureDifference < -1.0 && pressureDifference >= -2.0) {
|
|
||||||
return 'down-low';
|
|
||||||
} else if (pressureDifference < -2.0) {
|
|
||||||
return 'down-high';
|
|
||||||
}
|
|
||||||
|
|
||||||
return '';
|
|
||||||
};
|
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<template>
|
<template>
|
||||||
@@ -65,13 +47,10 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td className="weather-current-header">Pressure</td>
|
<td className="weather-current-header">Pressure</td>
|
||||||
<td colspan="3">
|
<td colspan="3">
|
||||||
{{ weatherStore.current?.Pressure && ConvertPascalToInchesOfMercury(weatherStore.current?.Pressure)?.toFixed(2) }}"
|
{{ weatherStore.current?.Pressure && (weatherStore.current?.Pressure / 100).toFixed(2) }} mbar
|
||||||
<span
|
<PressureTrendArrow
|
||||||
class="pressure-trend-arrow"
|
class="pressure-trend-arrow"
|
||||||
:class="rotationClass(weatherStore.current?.PressureDifferenceThreeHour)"
|
:pressureDifference="weatherStore.current?.PressureDifferenceThreeHour" />
|
||||||
:title="'3 Hour Change: ' + weatherStore.current?.PressureDifferenceThreeHour?.toFixed(1)">
|
|
||||||
➜
|
|
||||||
</span>
|
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
<tr>
|
<tr>
|
||||||
@@ -115,25 +94,6 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
.pressure-trend-arrow {
|
.pressure-trend-arrow {
|
||||||
display: inline-block;
|
scale: 1.25;
|
||||||
position: relative;
|
|
||||||
left: 6px;
|
|
||||||
transform: scale(1.25);
|
|
||||||
}
|
|
||||||
|
|
||||||
.down-high {
|
|
||||||
transform: rotate(60deg) scale(1.25);
|
|
||||||
}
|
|
||||||
|
|
||||||
.down-low {
|
|
||||||
transform: rotate(25deg) scale(1.25);
|
|
||||||
}
|
|
||||||
|
|
||||||
.up-high {
|
|
||||||
transform: rotate(-60deg) scale(1.25);
|
|
||||||
}
|
|
||||||
|
|
||||||
.up-low {
|
|
||||||
transform: rotate(-25deg) scale(1.25);
|
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|||||||
52
WebDisplay/src/components/PressureTrendArrow.vue
Normal file
52
WebDisplay/src/components/PressureTrendArrow.vue
Normal file
@@ -0,0 +1,52 @@
|
|||||||
|
<script lang="ts" setup>
|
||||||
|
const props = defineProps(['pressureDifference']);
|
||||||
|
|
||||||
|
function rotationClass(pressureDifference: number | undefined) {
|
||||||
|
if (!pressureDifference) {
|
||||||
|
return '';
|
||||||
|
} else if (Math.abs(pressureDifference) <= 1.0) {
|
||||||
|
return '';
|
||||||
|
} else if (pressureDifference > 1.0 && pressureDifference <= 2.0) {
|
||||||
|
return 'up-low';
|
||||||
|
} else if (pressureDifference > 2.0) {
|
||||||
|
return 'up-high';
|
||||||
|
} else if (pressureDifference < -1.0 && pressureDifference >= -2.0) {
|
||||||
|
return 'down-low';
|
||||||
|
} else if (pressureDifference < -2.0) {
|
||||||
|
return 'down-high';
|
||||||
|
}
|
||||||
|
|
||||||
|
return '';
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<template>
|
||||||
|
<span
|
||||||
|
class="pressure-trend-arrow"
|
||||||
|
:class="rotationClass(props.pressureDifference)"
|
||||||
|
:title="'3 Hour Change: ' + props.pressureDifference.toFixed(1)">
|
||||||
|
➜
|
||||||
|
</span>
|
||||||
|
</template>
|
||||||
|
|
||||||
|
<style scoped>
|
||||||
|
.pressure-trend-arrow {
|
||||||
|
display: inline-block;
|
||||||
|
}
|
||||||
|
|
||||||
|
.down-high {
|
||||||
|
transform: rotate(60deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.down-low {
|
||||||
|
transform: rotate(25deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.up-high {
|
||||||
|
transform: rotate(-60deg);
|
||||||
|
}
|
||||||
|
|
||||||
|
.up-low {
|
||||||
|
transform: rotate(-25deg);
|
||||||
|
}
|
||||||
|
</style>
|
||||||
@@ -4,8 +4,10 @@
|
|||||||
import { useLaundryStore } from '@/stores/laundryStore';
|
import { useLaundryStore } from '@/stores/laundryStore';
|
||||||
import { usePowerStore } from '@/stores/powerStore';
|
import { usePowerStore } from '@/stores/powerStore';
|
||||||
import { useHomeAssistantStore } from '@/stores/homeAssistantStore';
|
import { useHomeAssistantStore } from '@/stores/homeAssistantStore';
|
||||||
|
import { ShortenWindDirection } from '@/windFormatter';
|
||||||
import CalendarAgenda from '@/components/CalendarAgenda.vue';
|
import CalendarAgenda from '@/components/CalendarAgenda.vue';
|
||||||
import LongPressButton from '@/components/LongPressButton.vue';
|
import LongPressButton from '@/components/LongPressButton.vue';
|
||||||
|
import PressureTrendArrow from '@/components/PressureTrendArrow.vue';
|
||||||
|
|
||||||
const weatherStore = useWeatherStore();
|
const weatherStore = useWeatherStore();
|
||||||
weatherStore.start();
|
weatherStore.start();
|
||||||
@@ -63,6 +65,19 @@
|
|||||||
v-if="weatherStore.current">
|
v-if="weatherStore.current">
|
||||||
{{ weatherStore.current?.Humidity?.toFixed(0) + '%' }}
|
{{ weatherStore.current?.Humidity?.toFixed(0) + '%' }}
|
||||||
</div>
|
</div>
|
||||||
|
<div
|
||||||
|
class="kiosk-wind text-center pb-3"
|
||||||
|
v-if="weatherStore.current">
|
||||||
|
{{ weatherStore.current?.WindSpeed?.toFixed(0) + ' ' + ShortenWindDirection(weatherStore.current?.WindDirection) }}
|
||||||
|
</div>
|
||||||
|
<div
|
||||||
|
class="kiosk-pressure text-center pb-3"
|
||||||
|
v-if="weatherStore.current">
|
||||||
|
<span>
|
||||||
|
{{ (weatherStore.current?.Pressure! / 100).toFixed(0) }}
|
||||||
|
</span>
|
||||||
|
<PressureTrendArrow :pressureDifference="weatherStore.current?.PressureDifferenceThreeHour" />
|
||||||
|
</div>
|
||||||
<div
|
<div
|
||||||
class="kiosk-generation text-center pt-4"
|
class="kiosk-generation text-center pt-4"
|
||||||
v-if="powerStore.current">
|
v-if="powerStore.current">
|
||||||
@@ -170,7 +185,7 @@
|
|||||||
|
|
||||||
display: grid;
|
display: grid;
|
||||||
grid-template-columns: repeat(2, 50%);
|
grid-template-columns: repeat(2, 50%);
|
||||||
grid-template-rows: repeat(6, auto) 1fr;
|
grid-template-rows: repeat(7, auto) 1fr;
|
||||||
grid-column-gap: 0px;
|
grid-column-gap: 0px;
|
||||||
grid-row-gap: 0px;
|
grid-row-gap: 0px;
|
||||||
|
|
||||||
@@ -178,6 +193,7 @@
|
|||||||
'kiosk-time kiosk-time'
|
'kiosk-time kiosk-time'
|
||||||
'kiosk-date kiosk-date'
|
'kiosk-date kiosk-date'
|
||||||
'kiosk-temperature kiosk-humidity'
|
'kiosk-temperature kiosk-humidity'
|
||||||
|
'kiosk-wind kiosk-pressure'
|
||||||
'kiosk-generation kiosk-consumption'
|
'kiosk-generation kiosk-consumption'
|
||||||
'kiosk-washer kiosk-dryer'
|
'kiosk-washer kiosk-dryer'
|
||||||
'kiosk-garage-door kiosk-house-alarm';
|
'kiosk-garage-door kiosk-house-alarm';
|
||||||
@@ -218,6 +234,16 @@
|
|||||||
grid-area: kiosk-humidity;
|
grid-area: kiosk-humidity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.kiosk-wind {
|
||||||
|
font-size: 2rem;
|
||||||
|
grid-area: kiosk-wind;
|
||||||
|
}
|
||||||
|
|
||||||
|
.kiosk-pressure {
|
||||||
|
font-size: 2rem;
|
||||||
|
grid-area: kiosk-pressure;
|
||||||
|
}
|
||||||
|
|
||||||
.kiosk-generation {
|
.kiosk-generation {
|
||||||
grid-area: kiosk-generation;
|
grid-area: kiosk-generation;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user