NEWS
[gelöst]Datenpunkt 0_userdata.0.example_state vorhanden
-
Den Datenpunkt 0_userdata.0.example_state lösche ich selbst weg. Doch wird er wahrscheinlich durch ein Update wieder erzeugt. Da er alle paar Wochen wieder unter den Objekten zu finden ist.
Wie könnte ich mit Blockly prüfen wann er wieder neu angelegt wird? Ich möchte diesen nicht vorhandenen Datenpunkt abfragen und mir eine Nachricht senden wenn dieser neu angelegt wird.Chatgpt sagt für javascript:
const dpId = "0_userdata.0.example_state"; // Ersetze diesen Wert durch den zu überwachenden Datenpunkt const telegramInstance = "telegram.0"; // Instanz des Telegram Adapters // Der Listener reagiert auf jegliche Änderungen an Objekten on('objectChange', (id, obj) => { // Prüfen, ob es sich um den gewünschten Datenpunkt handelt und ob ein Objekt vorhanden ist if (id === dpId && obj) { log("Der Datenpunkt " + dpId + " wurde erstellt oder geändert.", "info"); // Sende eine Telegram-Nachricht sendTo(telegramInstance, { text: "Achtung: Der Datenpunkt " + dpId + " wurde jetzt erstellt!" }); // Optional: Eine Möglichkeit, nur einmal zu reagieren, // indem Du z.B. eine Variable setzt und weitere Reaktionen unterbindest. } });
geht aber nicht.
-
@shadowhunter23 sagte: geht aber nicht.
Versuche es mal so:
const dpId = "0_userdata.0.example_state"; // Ersetze diesen Wert durch den zu überwachenden Datenpunkt const telegramInstance = "telegram.0"; // Instanz des Telegram Adapters on({id: dpId}, () => { log("Der Datenpunkt " + dpId + " wurde erstellt oder geändert."); // Sende eine Telegram-Nachricht sendTo(telegramInstance, { text: "Achtung: Der Datenpunkt " + dpId + " wurde jetzt erstellt!" }); });
-
@paul53
Das Script reagiert nicht auf die erstmalige Erstellung des Datenpunktes, nur auf eine manuelle Änderung. -
@shadowhunter23 sagte: Das Script reagiert nicht auf die erstmalige Erstellung des Datenpunktes
Dann bleibt nur Polling (schedule).
const dpId = "0_userdata.0.example_state"; // Ersetze diesen Wert durch den zu überwachenden Datenpunkt const telegramInstance = "telegram.0"; // Instanz des Telegram Adapters var exists = existsObject(dpId); if(exists) log("Der Datenpunkt " + dpId + " existiert bereits."); schedule('* * * * *', () => { if(!exists && existsObject(dpId)) { exists = true; log("Der Datenpunkt " + dpId + " wurde erstellt."); // Sende eine Telegram-Nachricht sendTo(telegramInstance, { text: "Achtung: Der Datenpunkt " + dpId + " wurde jetzt erstellt!" }); } });
-
// Konfiguration const dpId = "0_userdata.0.example_state"; // Ersetze diesen Wert durch den zu überwachenden Datenpunkt const telegramInstance = "telegram.0"; // Instanz des Telegram Adapters let notified = false; // Flag, um Mehrfachbenachrichtigungen zu vermeiden schedule("* * * * *", function () { // Versuche, das Objekt des Datenpunktes abzurufen let obj = getObject(dpId); // Falls der Datenpunkt existiert und noch keine Benachrichtigung gesendet wurde: if (obj && !notified) { log("Der Datenpunkt " + dpId + " wurde erstellt oder geändert.", "info"); // Sende eine Telegram-Nachricht sendTo(telegramInstance, { text: "Achtung: Der Datenpunkt " + dpId + " wurde jetzt erstellt!" }); notified = true; // Verhindert weitere Benachrichtigungen (optional anpassen) } });
-
@shadowhunter23
getObject(id) erzeugt eine Warnung, wenn das Objekt nicht existiert. Deshalb habe ich existsObject(id) verwendet. -
@paul53
Danke, habs geändert. -
@paul53
Heute admin Adapter Update und der Datenpunkt wurde neu angelegt. Jetzt weiß ich welcher Adapter das immer wieder neu anlegt... -
Bitte erstell ein Issue beim Adapter