Homey Community Forum

Variablen berechnen

Ich habe mal langsam angefangen mich mit Variablen zu beschäftigen. Bisher hatte ich einfach keinen Bock dazu, möchte (muss) aber jetzt Flows einsparen, um überhaupt noch einen Überblick zu haben.
Die Logic Variablen Zahl und Ja/Nein sind klar. Aber was soll man mit der Variablen Text anfangen ?

Mein größeres Problem ist eine Variable zu berechnen. Ich war noch nie eine Leuchte in Mathe.
Ein Beispiel:
Ich simuliere im Aquarium einen Sonnenuntergang mit einem Shelly RGBW. Wenn ich alle einzelnen Flows zusammen rechne, sind das 48 Stück.
Die verteilen sich auf Lichtfarbe, Dimmlevel und Farbtemperatur.
Ich könnte die Flows vermutlich auf wesentlich weniger reduzieren, wenn ich folgende Variablen berechnen könnte:

Ausgangsleistung 100%/0%
Jede Minute den Wert um 10% verringern/erhöhen, bis Wet 0/100 erreicht ist.
Geht das ? Wenn ja, hat jemand mal ein Beispiel für mich, dass ich die Vorgehensweise kapiere ?

Ich nehme für soche Übergänge die Chronograph-App. Wäre das nicht einfacher als Variablen?

Das würde ich auch mit einer Transition der Chronograph App machen. Start 100, Ziel 0, Schritte: 10 und eine beliebige Zeit. Du brauchst dann 2 Flows:

  • einer wo du die Transition startest
  • einer wo du auf Transistion Änderungen reagierst, du bekommst dann einen Wert mit den du direkt verwenden kannst um beispielsweise die Helligkeit zu ändern

Yoo, das sollte machbar sein. Zwei Flows. Einer für 0 + 10 und einer für 100 - 10:

Runterzählen
WENN
Auslöser 1 Min
UND
MeineVariable ist nicht 0
DANN
Rechnen {{ MeineVariable - 10}}

Hochzählen
WENN
Auslöser 1 Min
UND
MeineVariable ist nicht 100
DANN
Rechnen {{ MeineVariable + 10}}

In dem Flow welcher dann was machen soll:

WENN
Variable MeineVariable sich ändert
DANN
Dimme z.B. Licht auf MeineVariable

Man muss schauen wie das z.B. Licht den Dimmwert möchte: 10 oder 0.10. Wenn zweiteres muss man die Formel zur Berechnung anpassen.

1 Like

Ich versuch das nachher mal ! :beers:

Hier ein Beispiel. Ich verwende das für einen Lichtwecker.

Transition starten:

Jeder Schritt führt diesen Flow aus:

Danke für eure Tipps !
In erster Linie ging es mir darum zu kapieren, wie in den Variablen Berechnungen funktionieren.
Auf die {{ }} wäre ich von alleine nie gekommen.
Ich hab gestern mal als Anfang einen Zähler für Kaffee pro Tag (:flushed:) und die tägliche Durchschittstempertur eingerichtet. Das funktioniert sehr gut und ich bin auf dem richtigen Weg für mehr !

…wobei ich den Kaffee Zähler sofort wieder lösche ! Man sollte seiner Frau nicht unbedingt eine Argumentationshilfe präsentieren, um den beeindruckenden Verbrauch von Kaffeebohnen zu erklären.:wink::shushing_face:

Bei einigen Berechnungen muss man runden, z.B, bei Tags auf eine oder zwei Nachkommastellen:

{{round(Berechnung,2)}}

Wenn es Abends dunkel wird, lasse ich meine Rollos erstmal nur auf Sichtschutz fahren. Da das so aussehen soll als würden die manuell betätigt werden (insbesondere im Urlaub wenn niemand zuhause ist), fährt jedes Rollo jeden Abend ein zufällige Position zwischen 50 und 30 % an.

1 Like

Schau mal hier:

Vermutlich kannst du alle JS-Math-Fuktionen verwenden.
https://mathjs.org/docs/reference/functions.html
https://mathjs.org/docs/expressions/syntax.html

…dann eine Herausforderung für euch.
Kann ich eine Variable definieren, die die aktuelle Uhrzeit z.B. 12.45, anzeigt und fortführt?
Ich habe was verrücktes vor und brauche dazu die exakte Uhrzeit als Variable.

Wie genau? Sekunden, Minuten? :slight_smile:
Sekundengenau bekomme ich hin…noch exakter leider nicht

Gute Frage.
Woher nimmst du die Uhrzeit?
Es gibt in Homey nur Text und Zahlen als Variablentyp.
Selbst wenn Homey das bei Zuweisung der Zahlenvariable in den Unix-Code (Sekunden ab…irgenwann einmal) umwandelt, müsstest du mit dieser Zahl rechnen. Eine Konvertierung zurück geht m.E. aber nicht.
Ich würde sagen: keine Chance.

Zeitprüfungen mache ich nur in HA, z.B. Prüfung, wie lange schon eine MQTT-Änderung aussteht.

Also Zeit stellt dir Homey selbst schon als interne Variable zur Verfügung.

Das ist schon richtig, nur kann ich diese Zeit nicht als tag verwenden, zumindest finde ich nichts, um die laufende Systemzeit in Flows zu integrieren.

Wo in den Tags? Bei UND sowie DANN ist der Zeit-Tag auswählbar.

Ich hatte einen Denkfehler, ich hab die Lösung.
Mein Fehler war die Variable als numerisch zu setzen. Da wird Zeit nicht als Tag angezeigt.
Wenn ich das Ganze als Text Variable mache ist alles gut. Ich lasse minütlich abfragen und habe jetzt meine Variable mit der genauen Uhrzeit.

:+1::+1::+1::+1::+1::+1::+1::+1:

Und für welchen Anwendungsfall benutzt Du das genau, wenn ich fragen darf?

Ah, du willst das nur ausgeben. Ich dachte, du willst damit rechnen.
Falls du doch mal mit Zeiten rechnen willst, dann könntest du dir HomeyScript anschshauen. Ich habe mal eine komplexe Bedingung in HomeyScript als JavaScript abgebildet. Den Rückgabewert kann man dann als Tag im Flow verwenden.
Wenn du dazu Infos brauchst, dann melde dich nochmal…

…ich bin gerade dabei (zumindest versuche ich es), dummen Thermostaten wie z.B. dem Danfoss LC 13, per Logic und Hardware Modifikationen, ein paar Eigenschaften des Spirits zu verpassen.
z.B. Boost, Ist-Temperatur oder externe Temperatur Messung.

Ich denke aber nicht, dass das was für die Allgemeinheit wird, weil die Erklärung jedes Schrittes schwierig ist und sich nicht jeder traut, ergänzende Sensoren in die filigrane Elektronik des Danfoss einzubauen.

1 Like