Lautsprecher aktiv als Auslöser im Tasker Profil

D

dermannvommond

Ambitioniertes Mitglied
2
Ich arbeite mit Locus Map und möchte bei der Navigation bei einer Navigations-Anweisung einen bestimmten Zoom aktivieren und danach wieder zurück. Den Task habe ich und er funktioniert auch.
Aber im Profil habe ich keinen Auslöser. Es kommt zwar eine Benachrichtigung bei der Anweisung aber es kommt auch immer gleich die nächste (in 5km rechts). Somit funktioniert es nur bei der ersten. Aber die Ansage per Sprache kommt erst 50m vorher. Daher würde ich gerne erfassen wenn der Lautsprecher aktiv ist.
Geht das ?
Somit könnte ich sagen wenn die Benachrichtigung Navigations-Anweisung vorhanden ist und Lautsprecher aktiv ist, dann löse den Task aus.
 
dermannvommond schrieb:
Aber im Profil habe ich keinen Auslöser. Es kommt zwar eine Benachrichtigung bei der Anweisung aber es kommt auch immer gleich die nächste (in 5km rechts). Somit funktioniert es nur bei der ersten. Aber die Ansage per Sprache kommt erst 50m vorher. Daher würde ich gerne erfassen wenn der Lautsprecher aktiv ist.
Es ist nicht ganz klar, wie viele Sprachanweisungen kommen und welche fehlen ?

Ich vermute, dass die 1. Sprachanweisung kam (als Doppelanweisung : Abbiegen und dann in 5 Km rechts) und dann erst wieder 50 m vor einem Abzweig. Dann kämen nämlich 2 Anweisungen. Oder kommt die 1. Anweisungen nicht als Sprachausgabe ?
Hast Du das über mehrere Abbiege Anweisungen geprüft ohne die Navigation zu beenden ?
Am Anfang einer Navigation bin ich mir nämlich auch nicht immer sicher, ob die Sprachanweisungen funktionieren. Bei den folge Anweisungen ist aber alles ok.

Wenn es also grundsätzlich funktioniert, dann ändere doch in Locus die Häufigkeit der Anweisungen.
Einstellungen -> Navigation -> erweiterte Einstellungen -> Häufigkeit der Anweisungen und evtl. Zwei Befehle zusammenfassen.

Ich kenne Dein Plugin nicht. Daher weiß ich auch nicht, ob man dort einstellen kann, dass der Zoom nur bei bestimmten Anweisungen erfolgen soll.
 
Zuletzt bearbeitet:
Logcat Entry könnte dir eventuell den gewünschten Auslöser bringen. Aber da steckt wohl viel try&error drin um es herauszufinden.
 
@ rtwl: Ich bräuchte da mehr Infos bei einer Lösung. Kenne mich mit Tasker nicht so gut aus. Am besten eine fertige Lösung...grins.
@ Ferdinand77: Ich verwende gerade als Auslöser die Benachrichtigung "Navigation". Es ist so damit diese beim Start noch nicht da ist. Wenn sie dann kommt zoomt Locus auch gleich rein. Aber diese Benachrichtigung ist dauerhaft vorhanden, sie ändert nur den Inhalt. Die Sprachanweisungen kommen alle. Ich habe es so eingestellt damit nur eine kommt und das kurz vorher. Somit wäre das der beste Auslöser.
Ich müsste halt irgendwie erfassen wenn Locus an Android bzw. das Telefon eine Sprachdatei sendet.
 
Habe dir 3 Möglichkeiten als Auslöser zusammengestellt.

Projekt importieren

1) Logcat
Wie von @rtwl vorgeschlagen über den Logcat Eintrag.
Damit Tasker die Einträge auslesen kann, muss die Entsprechende Berechtigung per ADB am PC erteilt werden. Am einfachsten geht es mit dem Programm vom Tasker-Entwickler (GitHub - joaomgcd/Tasker-Permissions: Utility to easily grant Tasker permissions)

2) Entfernung in der Benachrichtigung
In der Variable %evtprm3 wird der Text der Benachrichtigung über das Event "Benachrichtigung" gespeichert. Mit Variable Aufteilen und Variable Suchen Ersetzen kann die Entfernung bis zum nächsten Richtungswechsel ausgelesen werden.
In der IF-Bedinnung (A3) kannst du den Wert einstellen ab wann der Task ausgeführt werden soll.

3) Java Funktion
Wie von dir schon herausgefunden, lässt sich über die Java-Funktion der Status der Medienwiedergabe auslesen.
Damit aber Tasker auf die Wiedergabe dauerhaft reagieren kann, muss der Task mit der Goto Aktion in einer Dauerschleife laufen. In der Variable %playing wird dann der aktuelle Status gespeichert (true/false). Dieser kann dann mit einer IF-Bedingung abgefragt werden. Gestartet und gestoppt wird der Task über die Benachrichtigung.


Bei allen drei Varianten musst du bei der Aufgabe "Task Ausführen" den Namen von deinem Task für das Zoomen eintragen.
 
  • Danke
Reaktionen: munny
Wow...vielen Dank !!!!
Und gleich 3 Möglichkeiten. Werde ich natürlich alle 3 testen. Wird aber ein paar Tage dauern bis ich Zeit finde. Gebe auf jeden Fall eine Rückmeldung.
Benutzt du auch Locus ? Du hast bei Entfernung Infos eingebaut die man sonst ja nicht hat.

Auf jeden Fall hätte ich das nicht so einfach hinbekommen. Beim Logcat hatte ich schon probiert. Aber da kamen so viele Logs mit Audio im Text. Da wusste ich nicht was das richtige ist. Da habe ich jetzt auch etwas gelernt. Die anderen 2 sind mir einfach zu viel "Bahnhof". grins
Auf jeden Fall noch mal Danke
 
Nein, benutzte Locus selbst nicht.

Die Infos sind alle in der Benachrichtigung. Das schwierige dabei ist nur die benötigte Info zu isolieren.

Beim Logcat habe ich nicht nach Audio gesucht, sondern nach Locus.
Bei Filter habe ich dann nicht den kompletten Text ausgewählt sondern nur "callingPack=menion.android.locus". Damit löst der Task auch aus wenn sich eine der Nummern im Text verändert.
 
Sorry damit ich mich erst jetzt melde. War im Urlaub. Und meinem Phone war es zu Heiß und wollte Baden gehen. Leider konnte es nicht schwimmen. :1f622:
Aber jetzt geht es wieder, hat aber 4 weiße Längsstreifen auf dem Bildschirm. :1f615:
Beiträge automatisch zusammengeführt:

Das mit dem LogCat habe ich schon probiert und es funktioniert wunderbar. Habe auch noch ein eigenes gemacht mit Filter state started. Aber das ist langsamer. Wahrscheinlich weil es im Log weiter hinten aufgelistet ist.

Die beiden anderen werde ich jetzt testen
 
Zuletzt bearbeitet:
So nun habe ich weitere Tests gemacht. Das Profile Lautsprecher hat keine Reaktion gezeigt. Da ist ja Java drin und das versehe ich gar nicht. Deshalb lassen wir es einfach gut sein.
Beiträge automatisch zusammengeführt:

Beim 3. Profile Distanz kommt zwar eine Reaktion aber nicht richtig. Hier habe ich viel gelernt und auch versucht meinen Task entsprechend anzupassen.
Erstmal zum Anfang Punkt 1. (variable aufteilen) den ich hoffentlich richtig verstehe. Variable aufteilen. So wie ich verstehe wird in Benachrichtigung von Tasker schon verschiedene Variablen aufgeteilt.
%evtprm1: Sollte die Besitz Applikation sein
2 dann der Titel und 3 der Text.

Mit %evtprm3 wird dann der Text mit dem Teiler: , aufgeteilt.
Es sind 2 Komma drin somit der der Text dann in 3 Teile aufgesplittet.
%evtprm31
%evtprm32
%evtprm33

Bei Punkt 2. (Variable ersetzen) wird dann im Text (%evtprm32) zB. 40m nach m gesucht. Und unten ist dann ausgewählt: Übereinstimmungen ersetzen. Bei ersetzen durch ist nichts angegeben.
Somit wird das m durch nichts ersetzt und es bleibt nur noch 40 übrig ?

Punkt 3. (IF) %evtprm32 < 40 Hier wird geschaut bist die Zahl (jetzt ohne m) unter die 40 kommt.

Nun Punkt 4. Task ausführen. Hier gebe ich meinen Task an (Inhalt siehe unten). Was nun alles kommt verstehe ich nicht ?? Da ist dann unten noch angegeben
Priorität ?
Structure Output ?
If: %evtprm31 !~ %Richtung ?

Nun Punkt 6. (Variable setzen) Name: %Richtung zu %evtprm31 und am Schluss noch einmal Structure Output
7. (End If)

Ab dem If in Punkt 4 komme ich nicht mehr mit für was das gut ist.

Momentan ist es so damit er ab 40m kurz reinzoomt und gleich wieder zurück. Vielleicht eine halbe Sekunde.

Mein Task:
1. mit einem Locus Tasker Plugin hole ich mir den Aktuellen Zoom Level und speichere ihn in einer Variablen.
2. (Execute Aktion Task) hier zoome ich dann in Level 20.
3. (IF) %evtprm31 < 5
4. (Execute Aktion Task) hiermit zoome ich dann wieder zurück zum alten Zoom Level (in Variable gespeichert)
5. (End If)

Wenn ich Logcat benutze verwende ich den gleichen Task aber der Punkt 3. wird durch eine Zeit Wait ersetzt.
 
Zuletzt bearbeitet:
Soweit hast du alles Richtig verstanden.

Zu deinen Unklarheiten
Priorität:
Mit der Priorität gibts du an in welcher Reihenfolge die Task abgehandelt werden. Tasks mit einer höheren Priorität werden zuerst ausgeführt. Ist die Priorität gleich oder höher wie vom ursprünglichen Task, wird der neue Task zuerst ausgeführt. Ist sie kleiner wird zuerst der ursprüngliche Task ausgeführt und erst danach der vom "Task Ausführen". Die Variable %priorität enthält den Prioritätenwert des urspünglichen Task und ist standardmässig bei "Task Ausführen" schon eingetragen. Bei Priorität kann man auch mit Plus oder Minus rechnen. Zum Beispiel %prioriät-1, wenn zuerst der ursprüngliche Task ausgeführt werden soll.

Structure Output:
Diese Option ist bei allen Aufgaben, die Variablen ausgeben, standardmässig aktiviert und kann in den allermeisten Fällen auch aktiviert bleiben.

%evtprm31 !~ %Richtung und Variable setzen %Richtung:
Mit dieser IF-Bedingung wird kontrolliert ob %evtprm31 nicht mit der Variable %Richtung übereinstimmt.
Das habe ich eingefügt damit der Task nur einmal ausgeführt wird.
In der Variable %evtprm31 ist die aktuelle Richtungsangabe von Locus gespeichert, die Variable %Richtung enthält die letzte Richtungsangabe von Locus. Wenn die Distanz das erste Mal unter 40 fällt, wird der Task ausgeführt da noch die letzte Richtungsangabe in %Richtung gespeichert ist. Nach dem Ausführen des Task wird die aktuelle Richtungsangabe (%evtprm31) mit "Variable setzen" in %Richtung gespeichert. Da jetzt %evtprm31 und %Richtung den gleichen Wert haben, wird der Task das nächste Mal nicht nochmals ausgeführt.

Mit deiner Lösung fürs herauszoomen ist aber diese Bedingung kontraproduktiv und kann gelöscht werden. Auch Variable setzen %Richtung wird daher nicht benötigt.

Aktuell zoomt er dir gleich wieder hinaus, weil der Task nicht auf die Variable %evtprm32 (nicht 31) zugreifen kann und diese somit leer ist. Für Tasker ist eine leere Variable kleiner als 5 und die Aufgabe wird also gleich ausgeführt.
Damit dein Task fürs Zoomen auf die Variable zugreifen kann, muss noch in der Aufgabe 4 "Task Ausführen" die Option "Local Variable Passthrough" aktiviert werden.

Anstelle von Aufgabe 4 "Task Ausführen" kannst du aber auch direkt deine Aufgaben fürs Zoomen einfügen.
 
Zuletzt bearbeitet:
Habe deine Lösung mit dem Zoomen nochmals angeschaut und diese wird so für das 3. Profil "Distanz" nicht funktionieren.
Wird der Task wiederholt ausgeführt, überschreibt er dein zuvor gespeichertes Zoom-Level mit dem nun aktuellem Zoom-Level 20 und kann daher nicht wieder hinauszoomen.
Damit der gespeicherte Zoom-Level nicht überschrieben wird, muss wie zuvor mit der Überprüfung der Variable %Richtung gearbeitet werden.
Zum hinauszoomen würde ich nicht mit der IF-Bedinung %evtprm32 < 5 arbeiten. Falls aufgrund der GPS-Genauigkeit der Wert nicht unter 5 fällt und direkt der neue, grössere Wert kommt, wird auch nicht hinausgezoomt. Auch hier würde ich mit %Richtung arbeiten.

Das ganze könnte dan so aussehen
Profil importieren
Code:
    A1: Variable Aufteilen [
         Name: %evtprm3
         Teiler: , ]
    
    A2: Variable Suchen Ersetzen [
         Variable: %evtprm32
         Suche:  m
         Übereinstimmungen Ersetzen: An ]
    
    A3: If [ %evtprm32 < 40 & %evtprm31 !~ %Richtung ]
    
        A4: Aktuelles Zoom Level speichern
    
        A5: Zoom Level 20
    
        A6: Variable Setzen [
             Name: %Richtung
             Zu: %evtprm31
             Max Rounding Digits: 3
             Structure Output (JSON, etc): An ]
    
    A7: End If
    
    A8: If [ %evtprm31 !~ %Richtung & %Richtung ist gesetzt ]
    
        A9: Zoom Level "alt">
    
        A10: Variable Lösche [
              Name: %Richtung ]
    
    A11: End If

Zusätzlich benötigtst du noch ein Profil mit dem Ereignis "Notification Removed" mit der Aufgabe "Variable Lösche" %Richtung. Ansonsten wird dir Tasker beim nächsten Start der Naviagtion auf das letzte Level zoomen.
 
Ich denke ein weiteres Problem ist wenn 2 mal hintereinander "biege rechts ab kommt" dann ist es gleich dem in %Richtung gespeicherten und der Task wird nicht ausgelöst.
Ich habe mal gebastelt und eine Lösung gefunden. Hat auch bereits gut funktioniert. Aber du kannst als Experte da gern deine Bedenken nennen falls es welche gibt.
Damit der Task nur einmal ausgelöst wird und nicht ständig, habe ich folgendes getan.
Bei Task auslösen habe ich ein If reingemacht %zoomtaskrun = 0 (bei Null läuft der Task noch nicht, bei 1 läuft der Task)
Im Task setzte ich am Anfang %zoomtaskrun = 1
und ganz am Ende %zoomtaskrun = 0

Das If %evtprm31 < 5 habe ich entfernt und mein Wait 10s wieder reingemacht.

Noch eine Frage: kann ich bei einem Task oder Task auslösen ein If reinmachen (nur wenn Bildschirm an ist) oder muss ich da den Umweg gehen mit Variable und diese vorher setzen ?
 
Falls es den kompletten Task des Profils betrifft, würde ich eine zusätzlichen Auslöser zum Profil hinzufügen (lange auf den bestehenden Auslöser drücken). Ansonsten kann das Abfragen ob der Bildschirm an ist direkt mit einer IF-Abfrage %SCREEN ~ on umgesetzt werden.
Die Variable %SCREEN ist eine Built-IN Variable und wird von Tasker automatisch verwaltet.Mehr Infos dazu findest du hier (auf Englisch).

Stimmt, an zwei gleiche Anweisungen hintereinander habe ich nicht gedacht.
Deine Idee mit der Variable für den laufenden Task funktioniert, jedoch muss deine Variable noch mindestens einen gross Buchstaben haben (Globale Variable), ansonsten kann die Variable nicht von anderen Tasks gelesen werden.

Die Idee mit der Variable %zoomtaskrun hat mich noch auf eine weitere Möglichkeit als Auslöser für das hinauszoomen gebracht. Der Auslöser ist wieder die Distanz, jedoch nicht "kleiner als" wie vorher sondern "grösser als". Das hat zusätzlich noch den Vorteil, dass nicht direkt, bei kurz aufeinanderfolgenden Anweisungen, hinaus- und wieder hineingezoomt wird.
Das ganze sieht dann so aus
Profil importieren
Code:
    A1: Variable Aufteilen [
         Name: %evtprm3
         Teiler: , ]
   
    A2: Variable Suchen Ersetzen [
         Variable: %evtprm32
         Suche:  m
         Übereinstimmungen Ersetzen: An ]
   
    A3: If [ %evtprm32 < 40 & %ZoomTaskRun !~ 1 ]
   
        A4: Aktuelles Zoom Level speichern
   
        A5: Zoom Level 20
   
        A6: Variable Setzen [
             Name: %ZoomTaskRun
             Zu: 1
             Max Rounding Digits: 3
             Structure Output (JSON, etc): An ]
   
    A7: End If
   
    A8: If [ %evtprm32 > 60 & %ZoomTaskRun ~ 1 ]
   
        A9: Zoom Level "alt"
   
        A10: Variable Lösche [
              Name: %ZoomTaskRun ]
   
    A11: End If
 

Ähnliche Themen

Viper73
Antworten
3
Aufrufe
211
Viper73
Viper73
N
Antworten
14
Aufrufe
574
senior-ipaq
S
-Sven-
Antworten
1
Aufrufe
250
note.apk
N
Zurück
Oben Unten