@Juergen-Sußner - hier ist der Script "ALEXA -> Todoist" mit der Erweiterung, das in Todoist erledigte Punkte in der Alexa auch abgehakt werden wenn erledigt. Eine volle zwei Richtung Synchronisierung ist es zwar nicht, aber mir reicht es so um nicht alles doppelt einzukaufen oder die hälfte zu vergessen....
const axios = require('axios');
// Todoist API-Konfiguration
const todoistProjectId = '12345678'; // Todoist-Projekt-ID
const todoistToken = 'xXxXxXxXxXxXxXxXxXxXxXxX'; // Todoist-API-Token
let previousList = [];
// 1. Überwachen der Änderungen in der Alexa-Liste
on({ id: 'alexa2.0.Lists.Testliste.json', change: 'any' }, function (obj) { // Hier die entsprechende Liste eintragen
try {
console.log('Änderung in der Alexa Liste erkannt.');
// Alexa-Liste als JSON parsen
const currentList = JSON.parse(obj.state.val);
console.log('Alexa-Liste erfolgreich geparst.');
if (currentList && currentList.length > 0) {
console.log(`Alexa-Liste enthält ${currentList.length} Einträge.`);
// Neues Item zur Todoist-Liste hinzufügen, wenn die Liste gewachsen ist
if (previousList.length < currentList.length) {
const newItem = currentList.find(item => !previousList.some(prevItem => prevItem.id === item.id));
if (newItem) {
console.log(`Neues Item erkannt: "${newItem.value}" mit ID: ${newItem.id}`);
addTaskToTodoist(newItem.value);
}
}
// Aktualisiere die vorherige Liste
previousList = currentList;
} else {
console.log('Alexa-Liste ist leer oder nicht verfügbar.');
}
} catch (e) {
console.error('Fehler beim Parsen der Alexa-Liste:', e.message || e);
}
});
// 2. Periodische Synchronisierung mit Todoist (alle 1 Minute)
schedule('*/1 * * * *', function () {
console.log("Todoist-Aufgaben werden abgefragt...");
// Abrufen der aktiven Todoist-Aufgaben
axios.get(`https://api.todoist.com/rest/v2/tasks`, {
headers: {
'Authorization': `Bearer ${todoistToken}`
}
})
.then(response => {
const activeTasks = response.data.map(task => task.content); // Extrahiere die Inhalte der aktiven Aufgaben
console.log('Aktive Todoist-Aufgaben erfolgreich abgerufen.');
// Vergleich der aktiven Todoist-Aufgaben mit der Alexa-Liste
syncAlexaWithTodoist(activeTasks);
})
.catch(error => {
console.error('Fehler beim Abrufen der Todoist-Aufgaben:', error.message || error.response.data);
});
});
// 3. Hilfsfunktion zum Hinzufügen von Aufgaben zu Todoist
function addTaskToTodoist(itemValue) {
const todoistData = {
content: itemValue,
project_id: todoistProjectId
};
axios.post('https://api.todoist.com/rest/v2/tasks', todoistData, {
headers: {
'Content-Type': 'application/json',
'Authorization': `Bearer ${todoistToken}`
}
})
.then(response => {
console.log(`Item "${itemValue}" erfolgreich zu Todoist hinzugefügt.`);
})
.catch(error => {
console.error('Fehler beim Hinzufügen zu Todoist:', error.message || error);
});
}
// 4. Hilfsfunktion zur Synchronisierung der Alexa-Liste mit Todoist
function syncAlexaWithTodoist(activeTasks) {
const alexaList = JSON.parse(getState('alexa2.0.Lists.Testliste.json').val);
alexaList.forEach(item => {
if (!activeTasks.includes(item.value)) {
// Markiere das Item in Alexa als "completed", wenn es nicht mehr in Todoist aktiv ist
const completeState = `alexa2.0.Lists.Testliste.items.${item.id}.completed`;
setState(completeState, true, function(err) {
if (err) {
console.error(`Fehler beim Setzen von "completed" für "${item.value}" in Alexa:`, err.message || err);
} else {
console.log(`Item "${item.value}" in Alexa erfolgreich als "completed" markiert.`);
}
});
}
});
}