No more plants
This commit is contained in:
parent
208bf88539
commit
95af086efa
55
src/components/HAssOverview.tsx
Normal file
55
src/components/HAssOverview.tsx
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
import * as React from "react"
|
||||||
|
import { HAssStates } from "../lib/interfaces";
|
||||||
|
import * as styles from "../styles/containers/HomeAssistant.module.css";
|
||||||
|
|
||||||
|
const HASS_REFRESH_INTERVAL = 15 * 60 * 1000;
|
||||||
|
|
||||||
|
const HomeAssistant = ({ hassUrl, token }: { hassUrl: string, token: string }) => {
|
||||||
|
const [states, setStates] = React.useState<HAssStates>({
|
||||||
|
daniel: false,
|
||||||
|
vicki: false,
|
||||||
|
nextbikes: 0
|
||||||
|
});
|
||||||
|
|
||||||
|
const fetchState = async (entityId: string) => {
|
||||||
|
const response = await fetch(`${hassUrl}/api/states/${entityId}`, {
|
||||||
|
method: "GET",
|
||||||
|
headers: {
|
||||||
|
"Authorization": `Bearer ${token}`,
|
||||||
|
"Content-Type": "application/json"
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return await response.json();
|
||||||
|
}
|
||||||
|
|
||||||
|
const pullStates = async () => {
|
||||||
|
const daniel = await fetchState("person.daniel")
|
||||||
|
const vicki = await fetchState("person.vicki")
|
||||||
|
const nextbikes = await fetchState("sensor.nextbikes")
|
||||||
|
|
||||||
|
|
||||||
|
console.log(daniel);
|
||||||
|
console.log(vicki);
|
||||||
|
console.log(nextbikes);
|
||||||
|
setStates({
|
||||||
|
daniel: daniel?.state === "home" ? "Zuhause" : "Unterwegs",
|
||||||
|
vicki: vicki?.state === "home" ? "Zuhause" : "Unterwegs",
|
||||||
|
nextbikes: nextbikes?.state
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
React.useEffect(() => {
|
||||||
|
pullStates()
|
||||||
|
const statesInterval = setInterval(pullStates.bind(this), HASS_REFRESH_INTERVAL);
|
||||||
|
|
||||||
|
return () => clearInterval(statesInterval);
|
||||||
|
}, [])
|
||||||
|
|
||||||
|
return <div className={`container ${styles.container}`}>
|
||||||
|
<span>Daniel: {states.daniel}</span>
|
||||||
|
<span>Vicki: {states.vicki}</span>
|
||||||
|
<span>NextBikes: {states.nextbikes}</span>
|
||||||
|
</div>
|
||||||
|
}
|
||||||
|
|
||||||
|
export default HomeAssistant;
|
@ -73,6 +73,12 @@ export interface PlantState {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface HAssStates {
|
||||||
|
daniel: string|number|boolean;
|
||||||
|
vicki: string|number|boolean;
|
||||||
|
nextbikes: string|number|boolean;
|
||||||
|
}
|
||||||
|
|
||||||
export type SongInfo = {
|
export type SongInfo = {
|
||||||
playbackState: "PLAYING" | "PAUSE" | "STOPPED";
|
playbackState: "PLAYING" | "PAUSE" | "STOPPED";
|
||||||
title?: string;
|
title?: string;
|
||||||
|
@ -7,6 +7,7 @@ import Spotify from "../components/Spotify";
|
|||||||
import PlantState from "../components/PlantState";
|
import PlantState from "../components/PlantState";
|
||||||
import WeatherAndTimeContainer from "../components/WeatherAndTime"
|
import WeatherAndTimeContainer from "../components/WeatherAndTime"
|
||||||
import WeatherRadar from "../components/WeatherRadar";
|
import WeatherRadar from "../components/WeatherRadar";
|
||||||
|
import HomeAssistant from "../components/HAssOverview";
|
||||||
|
|
||||||
function importAll(r) {
|
function importAll(r) {
|
||||||
return r.keys().map(r);
|
return r.keys().map(r);
|
||||||
@ -40,7 +41,7 @@ const IndexPage = () => {
|
|||||||
<WeatherRadar />
|
<WeatherRadar />
|
||||||
<News />
|
<News />
|
||||||
<DVB stopId={secrets.dvb.stopId} />
|
<DVB stopId={secrets.dvb.stopId} />
|
||||||
<Spotify mqtt={secrets.mqtt} Alternative={<PlantState hassUrl={secrets.hass.url} token={secrets.hass.token} plants={["Basilikum", "Chili"]} />} />
|
<Spotify mqtt={secrets.mqtt} Alternative={<HomeAssistant hassUrl={secrets.hass.url} token={secrets.hass.token} />} />
|
||||||
</main>)
|
</main>)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
10
src/styles/containers/HomeAssistant.module.css
Normal file
10
src/styles/containers/HomeAssistant.module.css
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
.container {
|
||||||
|
display: flex;
|
||||||
|
flex-direction: column;
|
||||||
|
justify-content: space-evenly;
|
||||||
|
height: 100%;
|
||||||
|
font-size: 2em;
|
||||||
|
font-weight: bold;
|
||||||
|
line-height: 1.5;
|
||||||
|
padding: 20px;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user