Hallo Zusammen,
wer kann mir bei folgendem Problem eine Lösung mitteilen?
Folgende Ausgangssituation
im iCloud Binding wird die GPS Postition meines Handys alle 5 Minuten aktualisiert. Dieser Wert steht fest, (ALLE 5 MINUTEN EIN UPDATE)
Ich möchte jetzt mit einer Regel herausfinden, ob nach der 2. aktualisierung, die Position von meinem zu Hause "größer" oder "kleiner" geworden ist.
Das Berechnen der jeweiligen Distanzen ist kein Problem, jedoch werden bei jedem Update alle Variablen neu gesetzt.
Ich suche nach einer Möglichkeit, innerhlab einer Regel, eine Variable nicht gleich zu überschreiben sonder die Variable soll mit de rVariablen aus dem 2. Update verglichen werden.
Hat jemand eine Idee, wie man das löst?
Beispiel:
9:00 Uhr = GPS Position wird übermittelt und die Entfernung zwischen aktueller Position und meinem zu Hause wird berechnet.
Das Ergebnis wird in einer Variablen gespeichert. (Distanz_1)
9:05 Uhr = GPS Position wird erneut übermittelt und die Entfernung zwiechen aktueller Position und zu Hause wird berechnet.
Könnte in Distanz_2 gespeichert werden.
Theoretisch könnte ich jetzt die beiden Variablen vergleichen, jedoch wird bei jeder Positionsaktualisierung auch die Distan_1 neu berchnet, so dass Distantz_1 und Distanz_2 immer gleich sind.
Ist es möglich, mein Problem zu lösen?
Vermutlich ganz einfach, ich komme nur gerade nicht drauf.
Besten Dank schon mal
Regel 2 Variablen miteinander vergleichen Lösung gesucht
-
- Beiträge: 5
- Registriert: 31. Mär 2018 19:59
-
- Beiträge: 117
- Registriert: 16. Nov 2018 08:21
Re: Regel 2 Variablen miteinander vergleichen Lösung gesucht
Bin ziemlich sicher, das das mit PERSISTENCE gemacht werden kann.
Soe wie ich das verstanden habe kann man da Werte Speichern.
Leider weiß ich noch nicht wie das geht, weil ich an der Stelle noch nicht bin in meiner automatisierung
Aber vielleicht hilft dir das ja schon .....
Caddy
Soe wie ich das verstanden habe kann man da Werte Speichern.
Leider weiß ich noch nicht wie das geht, weil ich an der Stelle noch nicht bin in meiner automatisierung

Aber vielleicht hilft dir das ja schon .....
Caddy
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Regel 2 Variablen miteinander vergleichen Lösung gesucht
Die Entfernung musst Du nicht selbst berechnen, openHAB bietet den PointType, der kennt die Methode .distanceFrom().
Du brauchst ein Item vom Typ Location:
Persistence ist unnötig, da wir ja nur die letzte Position mit der aktuellen vergleichen wollen.
Die Rule triggert auf changed, damit gibt es eine Variable previousState, die wir abfragen können, um sie mit der aktuellen Position zu vergleichen.
Danach ist es easy
Eventuell kann man die Position des Hauses (HomeLoc) auch aus der Konfiguration auslesen, diese Information steht ja in PaperUI->Configuration->System->Regional Settings->Location schon drin.
Ich hab aber aktuell keine Idee dazu. Bis dahin muss es dann eine Konstante sein. Sie außerhalb der Rule zu definieren, ermöglicht es, den Wert auch in anderen Rules zu verwenden. Wenn diese die einzige Rule ist, kann die Konstante natürlich genausogut innerhalb der Rule definiert werden.
Du brauchst ein Item vom Typ Location:
Code: Alles auswählen
Location myHandy "Mein Handy"
Code: Alles auswählen
val PointType HomeLoc = new PointType(‘49.3456,9.4321’) // Heimatposition
rule "entfernung"
when
Item myHandy changed
then
val PointType HandyLoc = new PointType(myHandy.state.toString) // aktuelle Position
val PointType HandyLocOld = new PointType(previousState.toString) // alte Position
if(HandyLocOld.distanceFrom(HomeLoc) < HandyLoc.distanceFrom(HomeLoc)) {
// Handy entfernt sich
} else {
// Handy nähert sich
}
end
Danach ist es easy

Eventuell kann man die Position des Hauses (HomeLoc) auch aus der Konfiguration auslesen, diese Information steht ja in PaperUI->Configuration->System->Regional Settings->Location schon drin.
Ich hab aber aktuell keine Idee dazu. Bis dahin muss es dann eine Konstante sein. Sie außerhalb der Rule zu definieren, ermöglicht es, den Wert auch in anderen Rules zu verwenden. Wenn diese die einzige Rule ist, kann die Konstante natürlich genausogut innerhalb der Rule definiert werden.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet