Wenn sich der Wert X für Y Minuten nicht geändert hat, dann

Hallo zusammen,

ich bin auf der Suche nach einer App, einer Flow Karte, einem Skript, die/das einen numerischen Wert eines Geräts mehr oder weniger 24/7 überwacht und ich per Push informiert werden kann, wenn der Wert sich für eine definierte Zeit nicht verändert hat.
Es geht nicht darum, dass ein Gerät eventuell nicht erreichbar wird, sondern wirklich nur um die Überwachung eines bestimmten Zahlenwertes.

Man könnte das ganze mehr oder weniger gut auch mit Standard Flow Karten und Variablen realisieren, aber ich möchte es so einfach wie möglich haben.

Hat jemand von Euch eine Idee?

Hi Dirk,

da ist mir nichts bekannt und mit Scripten kenn ich mich nicht aus. Ich würde das auch über Variablen realisieren.

Hallo Dirk,

Das ist grundsätzlich mit der Device Watchdog-App möglich, aber die Triggerkarte mit der genau beschriebenen Funktion gibt es noch nicht.
Ich gehe jedoch davon aus, dass der Entwickler diese gerne in die App integrieren würde.
Die numerischen Werte werden nämlich bereits gezielt überwacht und ausgewertet, siehe z. B. den Thermostat:

Ich würde sagen, frag doch mal in diesem Thread nach:
https://community.homey.app/t/app-pro-shs-device-watchdog-battery-connectivity-staleness-monitoring-for-all-your-devices/157537?u=peter_kawa

Hm… Du könntest doch zu einem definiertem Zeitpunkt X den Wert des Gerätes abfragen jn diesen in einer Variablen speichern.

Dann hast du einen “Startwert”. Den vergleichst du nach z.b. 24 Stunden wieder mit dem dann abgerufenen Ist-Wert.

Was da nicht abgedeckt wäre ist eben wenn sich der Wert zwar geändert hat aber dummerweise nach 24 Stunden zufällig wieder genau dem Startwert entsprechen würde.

Vielen Dank für Eure Antworten.
Ich werde mal im Device Watchdog Topic nachfragen. Zur Not kann ich mir immer noch einen Flow mit Variablen erstellen.

Edit
Der App Entwickler hat meine Anfrage schon mal auf seiner To-Do Liste vermerkt… :+1:

Moin,

mit einem Flow welcher alle x-Minuten oder x-Sekunden ein HomeyScript ausführt sollte das in wenigen Minuten lauffertig sein.

Zuerst benötigt man die Geräte-Id von Homey des Gerätes sowie den Messpunkt (Wert) welchen man vergleichen/überwachen möchte:

const DEVICE_NAME = "GERÄTENAME;

const devices = await Homey.devices.getDevices();

const device = Object.values(devices).find(
  d => d.name === DEVICE_NAME
);

if (!device) {
  console.log("Gerät nicht gefunden");
  return;
}

console.log("Gerät:", device.name);
console.log("ID:", device.id);

for (const [id, cap] of Object.entries(device.capabilitiesObj || {})) {
  console.log(`${id} = ${cap.value}`);
}

Erste Zeile GERÄTENAME mit dem Namen ersetzten wie es in Homey genannt wird. Danach sollte man so etwas erhalten:

Gerät: Mein Testgerät
ID: 07b00a08-XXXX-4333-bf7a-XXXXXXXXXX1f
measure_battery = 100
measure_temperature = 19
measure_temperature.soil = 16
measure_humidity.soil = 95
measure_luminance = 21

Dann eine Flow mit einem Auslöser bei Wenn und dazu bei Dann die Karte HomeyScript Führe Code aus und gib Ja/Nein-Tag zurück. Dort in MyCode einfügen:

// HomeyScript – Änderung eines Gerätewertes erkennen
//
// Du musst nur DEVICE_ID und CAPABILITY eintragen.
//
// Rückgabe:
// true  = Wert hat sich seit dem letzten Lauf verändert
// false = Wert ist unverändert
//
// Beim ersten Lauf wird der aktuelle Wert gespeichert
// und false zurückgegeben.


// --------------------------------------------------
// EINSTELLUNGEN
// --------------------------------------------------

const DEVICE_ID = '07b00a08-XXXX-4333-bf7a-XXXXXXXXXX1f';
const CAPABILITY = 'measure_battery';


// --------------------------------------------------
// GERÄT UND AKTUELLEN WERT AUSLESEN
// --------------------------------------------------

const geraet = await Homey.devices.getDevice({
    id: DEVICE_ID
});

const aktuell = geraet.capabilitiesObj?.[CAPABILITY]?.value;

if (aktuell === undefined || aktuell === null) {
    throw new Error(
        `Capability "${CAPABILITY}" konnte nicht gelesen werden`
    );
}


// --------------------------------------------------
// LETZTEN WERT AUS HOMESCRIPT-SPEICHER LESEN
// --------------------------------------------------

const key = `Wertvergleich_${DEVICE_ID}_${CAPABILITY}`;

const vorher = global.get(key);


// --------------------------------------------------
// AKTUELLEN WERT FÜR NÄCHSTEN LAUF SPEICHERN
// --------------------------------------------------

global.set(key, aktuell);


// --------------------------------------------------
// ERSTER DURCHLAUF
// --------------------------------------------------

if (vorher === undefined) {
    return false;
}


// --------------------------------------------------
// WERT VERGLEICHEN
// --------------------------------------------------

return aktuell !== vorher;

Hier dann noch bei const DEVICE_ID und const CAPABILITY die ermittelten Werte aus dem ersten Script eintragen.

Das HomeyScript gibt bei jedem Lauf true oder false aus. Beim ersten Lauf logischerweise true (also Veränderung) da noch kein Vergleichs-Wert vorhanden. Mit der Ausgabe wenn z.b. true kann man z.b. eine Push bei Veränderung senden.

Hallo,

Wie Du schon selbst geschrieben hast… Ich denke eine Variable und einen Flow der alle x Sekunden den Wert vergleicht, ist wohl tatsächlich die einfachste Möglichkeit und schnell umgesetzt.

So habe ich zB. eine Temperaturüberwachung umgesetzt, die bei einer Änderung zusätzlich noch einen Webhook aufruft.