Flow für Notification mit Gutmeldung

Hallo,

ich habe seit ein paar Monaten die Pflanzenüberwachung von FYTA im Einsatz inkl. der Homey-Integration. Bisher hatte ich 4 Pflanzen-Sensoren und für die Info, dass ich gießen soll, einen Advanced Flow mit Notification. Dabei hab ich folgende Anforderung umgesetzt:

  1. Pflanze muss gegossen werden → Push-Benachrichtigung und Aufgabe in Todoist
  2. Pflanze wurde gegossen → Push-Benachrichtigung und Aufgabe abschließen

Die Alarmierung habe ich mir per Variable gemerkt. Dafür brauche ich bisher eine Variable je Pflanze. Der Flow sieht für 1 Pflanze so aus:

Das funktioniert bisher auch prima.

Problem

Das skaliert für mich nicht richtig, da ich jetzt 5 weitere Sensoren installiert habe und das ganze in einem Flow 9x haben werde. Es gibt also folgende Herausforderungen:

  • Je neuer Pflanze muss eine weitere Variable angelegt werden
  • Die Variablen sind fest an Pflanzen gebunden
  • Wenn ein Sensor umzieht zu einer anderen Pflanze, passen die Alarmtexte nicht mehr. Dort steht bisher immer auch der Ort (z.B. Pflanze neben Fernseher).

Lösungsansatz

Ich habe mir ein Homeyscript gebaut, welches alle Pflanzen die Gegossen werden müssen ausliest und ein JSON-Array zurückgibt. Aber: das Problem der persistenten Zuordnung zu einer Variable wg. Notification + Aufgabe ist nicht gelöst. Außerdem hab ich noch keine Idee, wie ich das JSON in Advanced Flow sinnvoll auswerte. Ich könnte quasi eine Schleife bauen und den Flow mit Tag aufrufen, der dann je Pflanze einmal läuft. Mein bisheriges Homeyscript sieht so aus:

// Get all devices and filter for those with a battery
let myPlants = Object.values(await Homey.devices.getDevices()).filter(
  device => device.capabilities.includes('status_moisture')
);

console.log(`Plants in Homey: ${myPlants.length}`);

// Find all devices with a battery level of 10% or less
let myPlantsLowMoisture = myPlants.filter(
  device => {
    let moisture = device.capabilitiesObj.status_moisture.value;
    console.log(`-> ${device.name} = ${device.capabilitiesObj.status_moisture.value}`);
    return moisture !== null && moisture.includes("low");
  }
);

console.log(`Plants with low moisture = ${myPlantsLowMoisture.length}`);

// Prepare the notification message
let message = [] ;
if (myPlantsLowMoisture.length > 0) {
  myPlantsLowMoisture.forEach(device => {
    message.push(`${device.name}`);
  });
}

let messageJSON = JSON.stringify(message) ;
console.log(`${messageJSON}`);

// Create a flow tag for the message
await tag('Plants Low Moisture', message);

// This return value is for confirmation and is not used in the flow
return 'Script executed successfully and created the "Plants Low Moisture" tag.';

Frage

Hat jemand eine Idee, wie ich den Flow so dynamisch bauen kann, dass ich die Benachrichtigung+Aufgabenerstellung nur 1x habe und mir trotzdem merken kann, dass ich alarmiert habe? Wäre ein virtuelles Device (Device Capabilities) eine Lösung?

Bin für jeden Tipp dankbar :slight_smile:

Viele Grüße,
David