Zugriff auf alle Sensorwerte im Zeitverlauf

Funktionsbeschreibung
Die Idee wäre, den Zugriff auf frühere Werte eines Sensors in einer Szene zu ermöglichen.
Konkrete Beispiele:

  1. Wenn in den letzten 10 Minuten in einem meiner Räume eine Bewegung erkannt wurde, dann etwas tun.
  2. Wenn mein Raum beleuchtet ist, aber seit 15 Minuten keine Bewegung mehr erkannt wurde, dann den Raum ausschalten.

Diese Beispiele sind mit einem „Warten“ + „Letzten Wert abrufen“ nicht umsetzbar, da man Ereignisse verpassen würde.

Schließlich würde dies ermöglichen, Widgets im Dashboard hinzuzufügen, die einen Verlauf der Sensorwerte anzeigen :smiley:

Könntest du bei der Funktionsanfrage etwas genauer sein? ^^

Ich denke, wir sprechen hier nur von Szenen, dann müsste man wirklich präzisieren, was diese Funktionsanfrage bedeutet, zum Beispiel verstehe ich Beispiel 1 nicht.

Modus 1: Einen Wert über einen Zeitraum vergleichen.
Beispiel: Bewegung in allen Werten der letzten 10 Minuten erkannt (relativer Zeit also).

Modus 2: Einen Wert zu einem bestimmten Datum (oder relativer Zeit) vergleichen.
Beispiel: Temperatur vor 10 Minuten 17°C, oder es waren 17°C um 15:30 Uhr und es sind 18°C um 16:45 Uhr (ohne den Block „warten“ zu verwenden).

Ok, ich sehe

Jetzt müssen wir überlegen, welche funktionale Form das annehmen könnte :slight_smile:

@lmilcent Lust, uns ein paar funktionale Spezifikationen zu machen? Ein kleines Mockup mit einer Erklärung der Funktionsweise reicht aus. Ich nutze https://whimsical.com/ für meine Mockups.

Was für Inhalte erwartest du (kurz)?

Eine hochrangige Beschreibung, ein Flussdiagramm, eine „falsche“ Benutzeroberfläche?

Eine rein nutzerorientierte Beschreibung der erwarteten Funktionsweise (textuell) + ein Mockup :slight_smile: Bei der Beschreibung muss es wirklich konkret sein: Was passiert in der UI?

Ein Beispiel für eine funktionale Spezifikation, die ich für die Multi-User-Funktion erstellt hatte:

Danke, ich werde mich darum kümmern!

Es wird etwas Zeit in Anspruch nehmen, aber ich werde dieses Thema aktualisieren, sobald ich eine erste Version habe :slight_smile:

Ok cool :slight_smile: Für mich ist der „Spezifikations“-Teil der größte Teil der Arbeit bei einer Entwicklung, daher hilft es wirklich, wenn es klare Spezifikationen gibt, was man will!

Oh, das ist mir durchaus bewusst, es ist viel einfacher und schneller, etwas bereits Präzises und Eingrenztes zu entwickeln, als in alle Richtungen zu gehen!
Leider zähle ich die Stunden nicht, die ich an ungerahmten Projekten mit einer Pseud Idee als Projektbasis verbracht habe…

@pierre-gilles, ist dieses Mockup schon aussagekräftig?

(öffentlicher Zugriff) Mockup: Zustand zu einem bestimmten Zeitpunkt abrufen.

Funktionale Spezifikation

  • « Letzten Zustand abrufen » wird zu « Zustand abrufen »
  • Der Zustand eines Geräts kann auf verschiedene Arten abgerufen werden:
    1. Letzter Wert
    2. Relativer Zeitpunkt (Vor …)
    3. Nach Datum
    4. Über einen Zeitraum

Details der genannten Möglichkeiten

1. Letzter Wert

Genau das, was derzeit gemacht wird, und recht aussagekräftig :wink:

2. Relativer Zeitpunkt

Hier geht es darum, sagen zu können: Ich möchte den Wert von vor 10 Minuten vergleichen (basierend auf der Ausführungszeit der Szene).

Man kann zwei Werte im Abstand von 10 Minuten vergleichen, ohne darauf zu warten!

Wenn die Szene um 12:00 Uhr ausgeführt wird und der Benutzer « vor 10 Minuten » ausgewählt hat, wird der Wert mit dem von 11:50:00 Uhr verglichen (±30 Sekunden, um einen Wert zu finden). Wenn zwischen 11:49:30 Uhr und 11:50:30 Uhr kein Wert gefunden wird, schlägt der Test fehl.

3. Nach Datum

Das ist ein bisschen ähnlich wie relativer Zeitpunkt, aber man kann ein genaues Datum ohne besondere Einschränkungen angeben. Man kann also Werte im Abstand von mehreren Tagen oder sogar Monaten vergleichen.
Man kann sich hier vorstellen, einen Vergleich mit einem « Referenzwert » an einem bestimmten Datum durchzuführen.

Achtung hier: Der Benutzer muss gewarnt werden, wenn er ein Datum wählt, für das kein Wert existiert.

4. Über einen Zeitraum

Ich finde das ist das Interessanteste: Der Benutzer kann einen Wert mit allen Werten vergleichen, die während eines bestimmten Zeitraums abgerufen wurden.

Beispiele:

  • Man kann überprüfen, ob ein Bewegungssensor in den letzten 10 Minuten eine Bewegung erkannt hat (basierend auf der Ausführungszeit der Szene).
  • Man kann überprüfen, ob eine Steckdose in den letzten 30 Minuten einen bestimmten Sofortleistungspegel verbraucht hat
  • usw…

Im Fall eines Sensors (oder Aktuators), dessen Werte sich sehr häufig ändern und nicht unbedingt binär sind (Temperatur, Verbrauch in Watt, Helligkeit in Lux usw.), wird der im Szenario für den Test verwendete « Referenzwert » mit allen aufgezeichneten Werten verglichen.

Wenn ich überprüfen möchte, ob meine Steckdose in den letzten 30 Minuten weniger als 15W verbraucht hat, wird der Test wie folgt geschrieben: « Meine Steckdose » < « 15W » in den « letzten 30 Minuten ».
Gladys wird dann in der Datenbank überprüfen, ob alle in den letzten 30 Minuten abgerufenen Werte nicht über 15W liegen.

Abruf der Testwerte

Wie beim Block « Letzten Wert abrufen » sollte der während der Tests verwendete Wert automatisch abgerufen werden (Aufzeichnungszeit des Werts + Wert).

Beispiel:

  • Ich führe einen Test am Gerät « mein-sensor » durch, um zu überprüfen, ob in den letzten 10 Minuten Bewegung stattgefunden hat, also zwischen 11:50 und 12:00 Uhr (Ausführungszeit der Szene).
  • Wenn Bewegung aufgezeichnet wurde, sagen wir um 11:56 Uhr, werden zwei Variablen in der Szene erstellt: « mein-sensor-test-1-wert » und « mein-sensor-test-1-zeit ».
  • Ich kann eine Nachricht mit diesen beiden Variablen senden, um mich zu warnen « Bewegung erkannt (value = 1) um 11:56 Uhr. »

Ich mag deine Vorschläge sehr und kann mir schon vorstellen, die Zeit zu nutzen, um zu sagen: „Okay, ich schalte das Licht im Raum aus.“

Was bedeutet für dich „la valeur d’il y a 10 minutes“?

Was passiert, wenn es mehrere Werte im Zeitraum gibt? Welchen nimmt Gladys?

Ich habe nicht den Eindruck, dass es das ist, was wir wollen. Ich sehe den Bedarf sehr wohl, aber in der Spezifikation scheint mir die Art und Weise, wie du auf den Bedarf antwortest, sehr seltsam und komisch :smiley:

@VonOx Ohne die obige Vorschlag zu lesen, damit du nicht beeinflusst wirst, wie würdest du die Umsetzung der Szene sehen, von der du mir erzählt hast, mit deinen Bewegungssensoren?

Ich habe noch ein paar Präzisierungen hinzugefügt, ist es jetzt verständlicher?

Falls nicht, zögere nicht, mir zu sagen, was fehlt, was unklar ist oder zu logischen Widersprüchen führen könnte. Ich werde die Überlegungen fortsetzen!

Nachricht aktualisiert @pierre-gilles, mit mehr Details zur erwarteten Funktionsweise auf Benutzerseite und der Verwaltung in Gladys.

Ich sehe noch keine weiteren Sonderfälle, die zu behandeln sind. Sehen wir mal, was jedem einfällt, um das alles zu verbessern :slight_smile:

Ok (aber zu spät, ich habe es schon gelesen :smiley: )

Trigger:

Bewegung erkannt

Bedingung: (Nur fortfahren, wenn )

Zeitbereich (ein Aktionsbereich wird definiert )
1. Direkte Auswahl über einen Doppelschieberegler
oder
2. In Abhängigkeit von Sonnenuntergang/Sonnenaufgang (mit einem Offset, da man normalerweise das Licht anschaltet, bevor die Sonne untergeht )
Bonus, wenn man auch auswählen kann, an welchen Wochentagen die Szene aktiv ist

Aktion:

=> Ein Zimmer oder bestimmte Lampen einschalten
Der kleine Zusatz, um das Leben zu erleichtern und zu viele Szenen zu vermeiden. Dem Benutzer die Möglichkeit geben (Checkbox?), Gladys zu wählen, ob diese Lampen nach einer bestimmten Zeit ohne erfasste Bewegung ausgeschaltet werden sollen (z. B. 2 Minuten )


Einige Screenshots von HA, es ist hässlich und man kann wirklich in Bezug auf die Benutzerfreundlichkeit besser machen

Bedingung ( Sonnenuntergang/Sonnenaufgang mit 10-Minuten-Offset )

Ausschalten nach 2 Minuten


Was hältst du von meinem (inzwischen modifizierten) Vorschlag weiter oben?
Was müsste man deiner Meinung nach ändern, hinzufügen, präzisieren?

@VonOx und @pierre-gilles, wie soll ich mit der Funktionalität auf Spezifikationsseite vorgehen?
Was sind eure (neuen) Rückmeldungen? :innocent:

Ich bin nicht ganz deiner Meinung, was deinen Vorschlag angeht. Meiner Meinung nach müssen wir wirklich mehr an den Endnutzer und alle Anwendungsfälle denken, die aus dieser Funktion entstehen werden.

Ich habe keine präzisen Antworten für dich, ohne selbst Vollzeit an dem Thema zu arbeiten. Ich denke, ich sollte ein paar Stunden daran arbeiten, bevor ich dir antworten kann :smiley: Das wird nicht vor Ende der Woche/nächster Woche sein, denke ich :slight_smile:

Hallo!

Ich habe den ganzen Tag an dem Thema gearbeitet und habe drei Vorschläge, um die verschiedenen Probleme zu lösen :slight_smile:

Ich antworte hier, weil es ein Thema ist, in dem über Szenen gesprochen wird, aber das hat nichts mit dem Titel des Themas zu tun. Sobald wir uns einig sind, können wir die Entwicklung umbenennen.

Das Problem

Ich bin von den verschiedenen Anforderungen ausgegangen, ohne an das Produkt zu denken, nur an den Endbedarf:

  • In der Lage sein, das Licht in einem Raum auszuschalten, wenn keine Bewegung für XX Minuten stattfindet
  • In der Lage sein, eine Warnung zu erhalten, wenn die Kühlschranktemperatur für mindestens 1 Stunde unter 10°C fällt.
  • In der Lage sein, in einer Szene Aktionen nur auszuführen, wenn die Sonne im Zustand Aufgang/Untergang/vor Aufgang minus 10 Minuten, nach Untergang plus 30 Minuten usw. ist.
  • In der Lage sein, eine Szene (oder einen Teil einer Szene) gemäß einer zeitlichen Bedingung auszuführen. Beispiel: wenn es vor 12 Uhr/nach 14 Uhr/zwischen 12 und 14 Uhr/am Dienstag, Mittwoch und Donnerstag zwischen 7 und 8 Uhr ist/und vieles mehr.

Aufgrund dieser Spezifikationen habe ich ein wenig recherchiert, wie wir das in Gladys umsetzen könnten.

Ich mochte, was Home Assistant zum Thema „Bedingung für XX Minuten aufrechterhalten“ gemacht hat, und bin für diesen Teil auf eine ähnliche Lösung wie ihre zurückgegriffen.

Danach stelle ich mir noch Fragen (im Dokument markiert), nicht alles ist funktional noch klar.

Die Mockups (mit Erklärungen) sind hier verfügbar: New scenes triggers/conditions/actions

Und auch als Bild-Export unten verfügbar:

Was haltet ihr davon?

@lmilcent Am Ende ist es sehr unterschiedlich zu deinem Vorschlag :stuck_out_tongue: Entschuldigung, um keine Zeit zu verlieren, bin ich auf das gegangen, was ich gesehen habe, und dann können wir tatsächlich sehen, was am besten zu den Problemen passt.

Hinweis: Wenn ihr Fälle habt, die durch meinen Vorschlag nicht gut abgedeckt sind, zögert nicht, darauf einzugehen :slight_smile: Ich spreche von praktischen und konkreten Fällen bei euch, wir sind wirklich in der Praxis, nicht in der Theorie.

Ich werde mir das alles ansehen, danke für die Zeit, die du investiert hast :slight_smile:
Gerade heute Morgen habe ich darüber nachgedacht, als mir ein neuer (zusammenhängender) Bedarf einfiel:

  • In der Lage sein, eine Szene basierend auf dem Durchschnitt der Sensorwerte über einen Zeitraum auszuführen
    Beispiel: Wenn die Kühlschranktemperatur im Durchschnitt 1°C in den letzten 2 Stunden betrug, eine Nachricht senden, um daran zu erinnern, den Thermostat zu ändern.

Ich werde deinen Vorschlag studieren und dir meine Anmerkungen so schnell wie möglich geben :slight_smile: