Cell Near (bzw. generell Profile) "entprellen"

  • 12 Antworten
  • Letztes Antwortdatum
D

divB

Fortgeschrittenes Mitglied
3
Hi,

Bei mir kommt es mitunter vor, dass sich eine Condition für kurze Zeit ändert. Ganz stark scheint das bei "Cell Near" vorzukommen wo Tasker für kurze Zeit keine Zelle findet, die Condition verlässt, sie aber in wenigen Sekunden wieder betritt. Zum einen: Wieso passiert das und wie kann man das verhindern?

Zum anderen: Wie kann ich solche Conditions "entprellen" oder "glätten"? Eine Condition soll z.B. erst verlassen werden, wenn die Exit-"Condition" für 5 Sekunden dauerhaft aufgetreten ist (d.h. wenn innerhalb von 5s keine Zelle gefunden wird).

Ich hab sowas wie eine "Cooldown" time gefunden, das ist aber nicht ganz das was ich suche.

Habt ihr diese Probleme auch und wie löst ihr diese?

LG
divB
 
divB schrieb:
Hi,

Zum anderen: Wie kann ich solche Conditions "entprellen" oder "glätten"? Eine Condition soll z.B. erst verlassen werden, wenn die Exit-"Condition" für 5 Sekunden dauerhaft aufgetreten ist (d.h. wenn innerhalb von 5s keine Zelle gefunden wird).
divB

im Exit-Task ein 'Task/Wait = 5 Sek' einfügen
 
Hi,

Danke; aber wenn ich bereits eine exit Aktion habe: Vermutlich als erste Aktion oder?

Und dadurch ist gewährleistet, dass falls während dieser Wartezeit der Zustand wieder auf "an" geht der exit-Task sofort abgebrochen wird und keine weiteren Aktionen ausgeführt werden?

LG
divB
 
divB schrieb:
Hi,

Danke; aber wenn ich bereits eine exit Aktion habe: Vermutlich als erste Aktion oder?
Genau, als erste Aktion ein Wait 5 Sek.
Und dadurch ist gewährleistet, dass falls während dieser Wartezeit der Zustand wieder auf "an" geht der exit-Task sofort abgebrochen wird und keine weiteren Aktionen ausgeführt werden?
Aber nur wenn:

1. Wait 5 Sek.
2. Stop If %Home matches YES (Stop findest du unter Task)
3. Das Eigentliche in dem Task

Du kannst in dem "Cell Near" Task eine Variable setzen: Variable Set %HOME to YES, wenn die Variable in dem Exit-Task dann gelöscht wird, funktioniert das dann auch oben.
 
  • Danke
Reaktionen: germanos
Hi

Kannst du das nochmal genauer erklären? Versteh ich nicht so ganz....
Jedenfalls muss ich eine Variable anlegen; out of the box geht das also nicht?

Wenn HOME diese Variable ist, versteh ich nicht ganz wie das funktionieren soll...

Wenn die Variable beim Eingang auf Yes gesetzt wird bricht der exit Task ja auch regulären ab oder?
 
ist doch ganz einfach

lege eine variabel %home an und setze sie auf "yes", dann ...

Eingangstask im Profil CellNear:
als erste Aktion > Variable > Variable Setzen > %home = yes

Ausgangstask im Profil CellNear einrichten:
als erste Aktion > Variable > Variable Setzen > %home = no
als zweite Aktion > Task > Warte > x sec
als dritte Aktion > Task > Stopp > wenn %home = yes (ist er also zwischenzeitlich wieder an nem passenden Mast eingewählt, so steht die Variable wieder auf yes und stoppt damit die exit actions)
erst jetzt folgen deine gewünschten Aktionen, die beim Verlassen der Home Area ausgeführt werden sollen
 
  • Danke
Reaktionen: Green, divB, Gwadro und eine weitere Person
t4z schrieb:
ist doch ganz einfach

lege eine variabel %home an und setze sie auf "yes", dann ...

aber deine Variable %home überlebt nur den aktuellen Task. Ist der Task abgearbeitet, wird sie gelöscht und der andere Task kann %home nicht richtig definieren. %home = yes ist also in dem anderen Task immer "nicht wahr" weil %home nicht vorhanden ist.

Du mußt %Home als Variable nutzen.

Tasker Variable %VARIABLE (global)
User Variable %variable (nur in diesen aktuellen Task existent)
User Variable %Variable (global gültig)
 
  • Danke
Reaktionen: Green, deadbabylon, jna und eine weitere Person
Siehe zunächst in der Tasker Hilfe zu Variablen

Gwadro schrieb:
Tasker Variable %VARIABLE (global)
User Variable %variable (nur in diesen aktuellen Task existent)
User Variable %Variable (global gültig)

##### Ist für Anfänger nicht wirklich eindeutig. Nach meiner Lektüre des obigen Links, hier die korrekte Definition: #####

Tasker Variablen sind in Tasker "eingebaute" / "mitgelieferte" und stets globale Variablen. Eine Liste dieser sogenannten "Built-In"-Variablen findet Ihr HIER.

Globale User Variablen sind Variablen deren Namen mindestens einen Großbuchstaben enthalten (Bsp: %meineVariable). Sie können entweder über den Tab "Variablen" manuell oder während der Laufzeit eines Tasks erstellt werden.

Globale Variablen können IMMER abgefragt, verwendet und geändert werden. Das gilt sowohl für Tasker selbst als auch die von Euch eingerichteten Aktionen. Tasker Variablen können somit auch von Euren eigenen Tasks verändert werden, allerdings werden sie beim nächsten Trigger von Tasker wieder neu zugewiesen. Ich würde daher jedoch immer nur selbst angelegte globale User Variablen ändern, da man nie genau weiss, wann bzw. wie oft Tasker diverse Bedingungen prüft, um seine eingebauten, also die Tasker Variablen im korrekten Zustand zu halten.

Globale Variablen können über einen Task NICHT gelöscht werden. Löschen hierbei im Sinne ihrer Existenz und nicht im Sinne ihres Zustandes. Sie überleben übrigens auch die Tasker Session oder einen Neustart des Smartphones. Wollt ihr eine globale User Variable löschen, so geht das nur, wenn ihr zuvor alle Tasks, die diese Variable verwenden, löscht oder entspr ändert und im Anschluß über den Tab "Variablen" die entsprechende Variable manuell löscht.

Lokale User Variablen sind während der Laufzeit von Tasks erstellte Variablen, deren Name nur aus Kleinbuchstaben besteht (Bsp: %meinevariable). Sie sind nur in der Task-Instanz bekannt, in der sie verwendet werden. Mehrere parallel laufende Instanzen des gleichen Tasks verwenden somit ihre eigene (lokale) "Version" dieser Variable. Somit können praktisch auch mehrere vom Namen her identische lokale User Variablen existieren. Ihr aktueller Zustand kann sich jedoch innerhalb der verschiedenen Instanzen des gleichen Tasks unterscheiden. Das ist quasi so ähnlich wie mit Schrödingers Katze :huh: bzw die (quantenmechanische) Theorie, dass ein und das selbe Teilchen mehrere Zustände gleichzeitig haben kann :confused: :smile: Die Lektüre dieses Wiki-Artikels ist aber nicht wichtig für dieses Thema hier ;)

##### ENDE DER DEFINITION #####

Frage:
Wie wirken sich alle Operationen (Aktionen) > Variable (setzen, löschen, ...) auf eine globale User Variable aus?
Antwort:
Globale User Variablen werden lediglich neu zugewiesen bzw deren Status / Zustand wird geändert. Deren Existenz (Deklaration = Speicherreservierung) bleibt jedoch unangetastet / gewährleistet.

Gwadro schrieb:
aber deine Variable %home überlebt nur den aktuellen Task. Ist der Task abgearbeitet, wird sie gelöscht und der andere Task kann %home nicht richtig definieren. %home = yes ist also in dem anderen Task immer "nicht wahr" weil %home nicht vorhanden ist.

Frage:
Überlebt die Variable %home auch dann nicht, wenn sie zuvor manuell in dem Tab "Variablen" angelegt wurde?
Antwort:
Meiner Interpretation der Hilfe nach zu urteilen ja, da komplett klein geschriebene Variablen immer lokale User Variablen sind. Fragt sich nur, welcher Bereich in diesem Fall lokal ist und wann die Variable gelöscht wird!?
Empfehlung:
Folgt einfach meiner Empfehlung am Ende dieses Posts.

Tasker Hilfe schrieb:
Note: multiple copies of the same task running at the same time each have their own separate copy of their local variables.

Frage:
Soweit sogut, was ist jedoch mit globalen User Variablen, die in einem Task angelegt, also zum Leben "erweckt" werden? Wie handled Tasker dies?
Antwort bzw. Empfehlung:
Überlegt Euch zuvor, ob ihr eine lokale User Variable oder eine globale User Variable benötigt.
Benötigt man globale User Variablen, so sollte man sie immer manuell im Tab "Variablen" anlegen.
Benötigt man lokale User Variablen, so sollte man sie am besten nur während der Laufzeit des bestimmten Tasks zum Leben "erwecken", in welchem ihr sie braucht. Gelöscht (Speicherfreigabe = Variable nicht mehr deklariert und somit nicht mehr existent) wird sie am Ende des Tasks automatisch, genauso wie beim Java Garbage Collector.
 
Zuletzt bearbeitet:
  • Danke
Reaktionen: maatik
Danke auch dir.

Werd' neugierig ob das mit dem "Smoothing" so funktioniert ... Verwende dafür jetzt %Smooth_xy im Gegensatz zu %AT_xy. %AT_ ist sozusagen die "geglättete" Variablen die dann in Abhängigen Profilen eingesetzt werden kann.

Nun ist mir aber aufgefallen dass Tasker nur 2 Conditions zulässt. Kann das wirklich sein?

Ich hätte gerne sowas wie "ChargeAbroad" wenn
Power: Both
%AT_home is not true
%AT_office is not true

Muss ich dazu wirklich mühevoll zwei Profile erstellen? Das erhöht die Komplexität ja umgemein ....

LG
divB
 
habe es derzeit zwar anders gelöst, aber ich hatte mal eine für dich passende Lösung

Lösung 1:

wenn nicht bereits so eingerichtet, stellst du alles zunächst einmal so um, dass die Variablen %AT_home & %AT_office in den enstprechenden Profilen @home & @office jeweils 0 oder 1 annehmen (jeweils im Ein- und Ausgangstask switchen)

erstelle unter dem Variablen Tab ne Variable %AT_abroad

erstelle unter dem Tasks Tab einen neuen Task mit Namen "setAbroad"
darin ein "Variable setzen" für %AT_abroad
darin hakst du "Mathematisch" ab
unter "zu" kommt dann
-1 * (%AT_home + %AT_office) + 1
vergiss dabei nicht die Leerzeichen, musst für die korrekte Funktion ein paar Dinge beachten, das musst du aber selbst erlesen, wenn meine Formel net funzt

in den Profilen @home & @office fügst sowohl im Ein- als auch im Ausgangstask nach dem switchen der jeweiligen Variablen %AT_home und %AT_office ein "Task ausführen" mit "setAbroad" ein, fertig

nun hat die Variable %AT_abroad folgende Zustände
enter @home ist %AT_abroad = -1 * (%AT_home + %AT_office) + 1 = -1 * (1+0) + 1 = 0
leave @home ist %AT_abroad = -1 * (%AT_home + %AT_office) + 1 = -1 * (0+0) + 1 = 1
enter @office ist %AT_abroad = -1 * (%AT_home + %AT_office) + 1 = -1 * (0+1) + 1 = 0
leave @office ist %AT_abroad = -1 * (%AT_home + %AT_office) + 1 = -1 * (0+0) + 1 = 1

Fertig ist Laube ^^

Lösung 2:

Solltest du das Pulsieren nach Gwadro oder [OFFURL="https://www.android-hilfe.de/tasker/246763-tasker-profil-schnittstellen-pulsieren-etc.html"]meinem Profil[/OFFURL] nutzen und nutzt sowohl @home als auch @office WLAN, dann ist %USE_WIFI != yes (!= bedeutet ungleich) mit @abroad gleichbedeutend
 
Zuletzt bearbeitet:
Na jetzt bin ich ja mal beeindruckt! Respekt die ausführliche Erläuterung zum Thema Variablen findet ihren Platz in dem FAQ Thread. :D
 
Das nachfolgende Rezept von t4z funktioniert bei mir leider nicht wie gewünscht.

t4z schrieb:
ist doch ganz einfach

lege eine variabel %HOME an und setze sie auf "yes", dann ...

Eingangstask im Profil CellNear:
als erste Aktion > Variable > Variable Setzen > %HOME = yes

Ausgangstask im Profil CellNear einrichten:
als erste Aktion > Variable > Variable Setzen > %HOME = no
als zweite Aktion > Task > Warte > x sec
als dritte Aktion > Task > Stopp > wenn %HOME = yes

In der Logdatei sieht man, dass das Setzen der Variable im Eingangstask solange verzögert wird, bis der Ausgangstask komplett abgearbeitet ist. Dann ist es natürlich zu spät.

20130123 21.18.08 P Inactive ID4 HOME
20130123 21.18.08 T Running ID3 HOME_aus
20130123 21.18.08 A OK ID3.1 HOME_aus.Variable Set
20130123 21.19.11 P Active ID4 HOME
20130123 21.19.11 T Running ID2:2 HOME_ein
20130123 21.19.11 A OK ID3.2 HOME_aus.Wait
20130123 21.20.08 A OK ID3.3 HOME_aus.Stop
20130123 21.20.08 A OK ID3.4 HOME_aus.WiFi
20130123 21.20.08 T ExitOK ID3 HOME_aus
20130123 21.20.08 A OK ID2:2.1 HOME_ein.Variable Set
20130123 21.20.08 A OK ID2:2.2 HOME_ein.WiFi
20130123 21.20.08 T ExitOK ID2:2 HOME_ein

Vielleicht hat einer eine Idee, was da Falsch läuft oder wie man es richtiger macht.

Grüße
Bohrmaschine

 
Zuletzt bearbeitet:
Klick mal lange den Profilnamen an, dann Einstellungen und dann bei "envorce task order" Hackerl weg. Das sollte helfen.
 

Ähnliche Themen

coolzero3389
Antworten
1
Aufrufe
158
coolzero3389
coolzero3389
-Sven-
Antworten
1
Aufrufe
498
note.apk
N
Viper73
Antworten
3
Aufrufe
503
Viper73
Viper73
Zurück
Oben Unten