1. Möchtest Du unser Team im Android OS-Bereich unterstützen? Details dazu findest du hier!
  2. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

Cell Near (bzw. generell Profile) "entprellen"

Dieses Thema im Forum "Tasker" wurde erstellt von divB, 28.05.2012.

  1. divB, 28.05.2012 #1
    divB

    divB Threadstarter Erfahrener Benutzer

    Beiträge:
    231
    Erhaltene Danke:
    3
    Registriert seit:
    15.05.2012
    Phone:
    HTC Desire
    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
     
  2. Columbo_FS, 03.06.2012 #2
    Columbo_FS

    Columbo_FS Neuer Benutzer

    Beiträge:
    11
    Erhaltene Danke:
    1
    Registriert seit:
    01.10.2011
    im Exit-Task ein 'Task/Wait = 5 Sek' einfügen
     
  3. divB, 03.06.2012 #3
    divB

    divB Threadstarter Erfahrener Benutzer

    Beiträge:
    231
    Erhaltene Danke:
    3
    Registriert seit:
    15.05.2012
    Phone:
    HTC Desire
    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
     
  4. Gwadro, 04.06.2012 #4
    Gwadro

    Gwadro Android-Lexikon

    Beiträge:
    1,112
    Erhaltene Danke:
    275
    Registriert seit:
    17.09.2009
    Genau, als erste Aktion ein Wait 5 Sek.
    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.
     
    germanos bedankt sich.
  5. divB, 04.06.2012 #5
    divB

    divB Threadstarter Erfahrener Benutzer

    Beiträge:
    231
    Erhaltene Danke:
    3
    Registriert seit:
    15.05.2012
    Phone:
    HTC Desire
    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?
     
  6. t4z, 06.06.2012 #6
    t4z

    t4z Android-Hilfe.de Mitglied

    Beiträge:
    92
    Erhaltene Danke:
    32
    Registriert seit:
    04.03.2011
    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
     
    Green, divB, Gwadro und eine weitere Person haben sich bedankt.
  7. Gwadro, 06.06.2012 #7
    Gwadro

    Gwadro Android-Lexikon

    Beiträge:
    1,112
    Erhaltene Danke:
    275
    Registriert seit:
    17.09.2009
    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)
     
    Green, deadbabylon, jna und eine weitere Person haben sich bedankt.
  8. t4z, 06.06.2012 #8
    t4z

    t4z Android-Hilfe.de Mitglied

    Beiträge:
    92
    Erhaltene Danke:
    32
    Registriert seit:
    04.03.2011
    Siehe zunächst in der Tasker Hilfe zu Variablen

    ##### 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.

    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.

    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: 06.06.2012
    maatik bedankt sich.
  9. divB, 06.06.2012 #9
    divB

    divB Threadstarter Erfahrener Benutzer

    Beiträge:
    231
    Erhaltene Danke:
    3
    Registriert seit:
    15.05.2012
    Phone:
    HTC Desire
    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
     
  10. t4z

    t4z Android-Hilfe.de Mitglied

    Beiträge:
    92
    Erhaltene Danke:
    32
    Registriert seit:
    04.03.2011
    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 meinem Profil nutzen und nutzt sowohl @home als auch @office WLAN, dann ist %USE_WIFI != yes (!= bedeutet ungleich) mit @abroad gleichbedeutend
     
    Zuletzt bearbeitet: 07.06.2012
  11. Gwadro, 07.06.2012 #11
    Gwadro

    Gwadro Android-Lexikon

    Beiträge:
    1,112
    Erhaltene Danke:
    275
    Registriert seit:
    17.09.2009
    Na jetzt bin ich ja mal beeindruckt! Respekt die ausführliche Erläuterung zum Thema Variablen findet ihren Platz in dem FAQ Thread. :D
     
  12. Bohrmaschine, 26.01.2013 #12
    Bohrmaschine

    Bohrmaschine Neuer Benutzer

    Beiträge:
    1
    Erhaltene Danke:
    0
    Registriert seit:
    29.11.2012
    Das nachfolgende Rezept von t4z funktioniert bei mir leider nicht wie gewünscht.

    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: 26.01.2013
  13. Georgius, 26.01.2013 #13
    Georgius

    Georgius Android-Guru

    Beiträge:
    2,017
    Erhaltene Danke:
    219
    Registriert seit:
    09.09.2010
    Phone:
    Samsung Galaxy Note 4
    Tablet:
    Samsung Galaxy NotePro 12, Lenovo TAB 2 A10-70
    Klick mal lange den Profilnamen an, dann Einstellungen und dann bei "envorce task order" Hackerl weg. Das sollte helfen.
     

Diese Seite empfehlen