mirror of
https://github.com/KevinMidboe/infra-map.git
synced 2026-01-10 19:26:02 +00:00
88 lines
2.0 KiB
TypeScript
88 lines
2.0 KiB
TypeScript
import { env } from '$env/dynamic/private';
|
|
import type { Entity } from '$lib/interfaces/homeassistant';
|
|
|
|
function buildHomeassistantRequest() {
|
|
const url = env.HOMEASSISTANT_URL || '';
|
|
const token = env.HOMEASSISTANT_TOKEN || '';
|
|
|
|
const options = {
|
|
method: 'GET',
|
|
headers: {
|
|
Authorization: `Bearer ${token}`,
|
|
'Content-Type': 'application/json'
|
|
}
|
|
};
|
|
|
|
return { url, options };
|
|
}
|
|
|
|
const attributes = {
|
|
current_stage: null,
|
|
print_status: null,
|
|
bed_temperature: null,
|
|
nozzle_temperature: null,
|
|
total_usage: null,
|
|
nozzle_type: null,
|
|
nozzle_size: null,
|
|
print_bed_type: null,
|
|
current_layer: null,
|
|
total_layer_count: null,
|
|
print_progress: null,
|
|
print_length: null,
|
|
print_weight: null,
|
|
sd_card_status: null,
|
|
speed_profile: null,
|
|
wi_fi_signal: null,
|
|
end_time: null,
|
|
cover_image: null,
|
|
pick_image: null,
|
|
camera: null
|
|
};
|
|
|
|
interface PrinterState {
|
|
[key: string]: {
|
|
value: string;
|
|
unit?: string;
|
|
picture?: string;
|
|
};
|
|
}
|
|
|
|
function printerState(data: object) {
|
|
const state: PrinterState = {};
|
|
|
|
const keys = Object.keys(attributes);
|
|
for (let i = 0; i < keys.length; i++) {
|
|
const k = keys[i];
|
|
const value = data?.filter((el) => el.entity_id.includes(k))[0];
|
|
|
|
if (!value) continue;
|
|
state[k] = { value: value.state };
|
|
|
|
if (value?.attributes?.unit_of_measurement)
|
|
state[k]['unit'] = value.attributes.unit_of_measurement;
|
|
|
|
if (value?.attributes?.entity_picture) state[k]['picture'] = value.attributes.entity_picture;
|
|
}
|
|
|
|
return state;
|
|
}
|
|
|
|
async function fetchHassStates() {
|
|
const { url, options } = buildHomeassistantRequest();
|
|
return fetch(url, options).then((resp) => resp.json());
|
|
}
|
|
|
|
export async function fetchP1P(): Promise<PrinterState> {
|
|
try {
|
|
let hassStates = await fetchHassStates();
|
|
|
|
hassStates = hassStates.filter(
|
|
(el: Entity) => el.attributes.friendly_name?.toLowerCase()?.includes('p1p') === true
|
|
);
|
|
return printerState(hassStates);
|
|
} catch (error) {
|
|
console.log('ERROR! from fetchP1P:', error);
|
|
return Promise.reject(null);
|
|
}
|
|
}
|