@haus-automatisierung
ChatGPT Link
hier mal ein erster Wurf. Gefüttert mit den Docs aus Github, die auch bei der API genutzt werden und ein paar angepassten Anweisungen.
// edit: Mit 3 Anweisungen zu diesem Ergebnis:
// Anwesenheitserkennung für verschiedene User anhand von boolean-Datenpunkten
// Liste der zu überwachenden Datenpunkte für jeden User
const userPresenceDataPoints = {
user1: ['geofence.user1', 'wlan.user1'],
user2: ['geofence.user2', 'wlan.user2'],
// Weitere User und deren Datenpunkte hier hinzufügen
};
// Funktion zur Überprüfung der Anwesenheit eines Users
async function isUserPresent(user, dataPoints) {
for (let dp of dataPoints) {
let state = await getStateAsync(dp);
if (state && state.val === true) {
return true;
}
}
return false;
}
// Funktion zur Überprüfung und Erstellung eines Datenpunkts
async function checkAndCreateDataPoint(user) {
const dpPath = `userdata.0.${user}.presence`;
const dpObj = await getObjectAsync(dpPath);
if (!dpObj) {
await setObjectAsync(dpPath, {
type: 'state',
common: {
name: `${user} Presence`,
type: 'boolean',
role: 'indicator',
read: true,
write: true,
},
native: {},
});
}
return dpPath;
}
// Anwesenheitsprüfung für alle User
async function checkAllUsersPresence() {
for (let user in userPresenceDataPoints) {
let isPresent = await isUserPresent(user, userPresenceDataPoints[user]);
const dpPath = await checkAndCreateDataPoint(user);
await setStateAsync(dpPath, isPresent);
console.log(`${user} ist ${isPresent ? 'anwesend' : 'abwesend'}`);
}
}
// Starte die Anwesenheitsprüfung alle 17 Sekunden
setInterval(checkAllUsersPresence, 17000);
habs nicht ausprobiert, aber schaut brauchbar aus.