add teslamate widget

This commit is contained in:
Florian 2024-11-05 15:06:02 +01:00
parent 6fd2b6b6dc
commit 1fb9a56362
5 changed files with 60 additions and 0 deletions

View File

@ -959,5 +959,10 @@
"tasks7d": "Tasks Due This Week", "tasks7d": "Tasks Due This Week",
"tasksOverdue": "Overdue Tasks", "tasksOverdue": "Overdue Tasks",
"tasksInProgress": "Tasks In Progress" "tasksInProgress": "Tasks In Progress"
},
"teslamate": {
"car_name": "Car name",
"odometer": "Odometer",
"battery_level": "Battery level"
} }
} }

View File

@ -115,6 +115,7 @@ const components = {
tandoor: dynamic(() => import("./tandoor/component")), tandoor: dynamic(() => import("./tandoor/component")),
tautulli: dynamic(() => import("./tautulli/component")), tautulli: dynamic(() => import("./tautulli/component")),
technitium: dynamic(() => import("./technitium/component")), technitium: dynamic(() => import("./technitium/component")),
teslamate: dynamic(() => import("./teslamate/component")),
tdarr: dynamic(() => import("./tdarr/component")), tdarr: dynamic(() => import("./tdarr/component")),
traefik: dynamic(() => import("./traefik/component")), traefik: dynamic(() => import("./traefik/component")),
transmission: dynamic(() => import("./transmission/component")), transmission: dynamic(() => import("./transmission/component")),

View File

@ -0,0 +1,32 @@
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
import useWidgetAPI from "utils/proxy/use-widget-api";
export default function Component({ service }) {
const { widget } = service;
const { data: statusData, error: statusError } = useWidgetAPI(widget, "status");
if (statusError) {
return <Container service={service} error={statusError ?? 'error'} />;
}
if (!statusData) {
return (
<Container service={service}>
<Block label="teslamate.car_name" />
<Block label="teslamate.odometer" />
<Block label="teslamate.battery_level" />
</Container>
);
}
return (
<>
<Container service={service}>
<Block label="teslamate.car_name" value={statusData.car_name} />
<Block label="teslamate.odometer" value={`${statusData.odometer} kms`} />
<Block label="teslamate.battery_level" value={`${statusData.battery_level}%`} />
</Container>
</>
);
}

View File

@ -0,0 +1,20 @@
import genericProxyHandler from "utils/proxy/handlers/generic";
import { asJson } from "utils/proxy/api-helpers";
const widget = {
api: "{url}/api/v1/cars/{car_id}/{endpoint}",
proxyHandler: genericProxyHandler,
mappings: {
status: {
endpoint: "status",
map: (data) => ({
car_name: asJson(data).data.car.car_name,
odometer: asJson(data).data.status.odometer,
battery_level: asJson(data).data.status.battery_details.battery_level,
}),
},
},
};
export default widget;

View File

@ -123,6 +123,7 @@ import xteve from "./xteve/widget";
import urbackup from "./urbackup/widget"; import urbackup from "./urbackup/widget";
import romm from "./romm/widget"; import romm from "./romm/widget";
import zabbix from "./zabbix/widget"; import zabbix from "./zabbix/widget";
import teslamate from "./teslamate/widget"
const widgets = { const widgets = {
adguard, adguard,
@ -236,6 +237,7 @@ const widgets = {
tandoor, tandoor,
tautulli, tautulli,
technitium, technitium,
teslamate,
tdarr, tdarr,
traefik, traefik,
transmission, transmission,