NEWS
Tandoor zu Bring
-
Da ich tandoor nutze und Bring als Einkaufslistenapp (wird auch mit Alexa synchronisiert), hab ich mir ein Script erstellt, welches mit die Tandoor items ins Bring holt - ggf. kann das ja noch jemand gebrauchen:
// --- KONFIGURATION --- const tandoorUrl = 'tandoorURL'; const apiToken = 'tandoorAPI-KEY'; const bringListState = 'bring.XXX.saveItem'; // --- Ab hier keine Konfig mehr --- const axios = require('axios'); const syncInterval = 5; // Alle 5 Minuten // --- HAUPTFUNKTION --- async function syncTandoorToBring() { console.log('Tandoor-Sync: Starte Synchronisierung (Bearer-Mode)...'); try { const response = await axios({ method: 'get', url: `${tandoorUrl}/api/shopping-list-entry/`, headers: { 'Authorization': `Bearer ${apiToken}`, 'Accept': 'application/json' }, timeout: 10000 }); // Tandoor liefert Liste oft in .results let data = Array.isArray(response.data) ? response.data : (response.data.results || []); // Nur nicht-erledigte Items filtern const openEntries = data.filter(entry => !entry.completed); if (openEntries.length === 0) { console.log('Tandoor: Keine neuen Einkaufslisten-Einträge gefunden.'); return; } for (const entry of openEntries) { // Logik-Update: Wir prüfen alle Namensfelder von Tandoor let name = ""; if (entry.food_display) { name = entry.food_display; } else if (entry.description) { name = entry.description; } else if (entry.food && entry.food.name) { name = entry.food.name; } else { name = "Unbekannte Zutat"; } let amount = (entry.amount && entry.amount !== 0) ? entry.amount : ""; let unit = entry.unit_display || ""; // Sauber zusammenfügen und unnötige Leerzeichen entfernen let itemName = `${amount} ${unit} ${name}`.replace(/\s+/g, ' ').trim(); console.log(`Tandoor-Sync: Übertrage "${itemName}" zu Bring!`); // 1. In Bring-Adapter schreiben await setStateAsync(bringListState, itemName); // 2. In Tandoor als erledigt markieren await markAsCompleted(entry.id); } console.log('Tandoor-Sync: Synchronisierung abgeschlossen.'); } catch (error) { if (error.response) { console.error(`Tandoor-Sync Fehler (${error.response.status}): ${JSON.stringify(error.response.data)}`); } else { console.error('Tandoor-Sync Netzwerkfehler: ' + error.message); } } } // --- HILFSFUNKTION: ABHAKEN --- async function markAsCompleted(entryId) { try { await axios({ method: 'patch', url: `${tandoorUrl}/api/shopping-list-entry/${entryId}/`, headers: { 'Authorization': `Bearer ${apiToken}`, 'Content-Type': 'application/json' }, data: { completed: true } }); console.log(`Tandoor-Sync: Item ${entryId} in Tandoor abgehakt.`); } catch (error) { console.error(`Tandoor-Sync Update Fehler für ID ${entryId}: ${error.message}`); } } // --- ZEITSTEUERUNG --- schedule(`*/${syncInterval} * * * *`, syncTandoorToBring); // Sofort-Start beim Speichern syncTandoorToBring();```
Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.
Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.
Mit deinem Input könnte dieser Beitrag noch besser werden 💗
Registrieren Anmelden