Montag, 8. August 2011

[Profil] Wecker mit Zeitansage und Auto Snooze

Nachdem ich schon vor einer Weile meinen Wecker mit Standort-, Wochentags-, Kalenderfunktion und Snooze vorgestellt habe, folgt nun ein weiterer Wecker mit Zeitansage und Auto Snooze. 

Mir ist aufgefallen, dass ich die Snooze Funktion immer auf die selbe Art nutze. Ich lasse den Wecker eine halbe Stunde bevor ich aufstehen muss das erste mal klingeln und drücke die Snooze Taste dann die folgenden 30 Minuten bei jedem erneuten klingeln.  Also habe ich mir im ersten Schritt einen Wecker programmiert, der 30 Minuten lang, aller 10 Minuten, also insgesamt 4 mal kurz klingelt. Jetzt bestand aber das Problem das ich nicht wusste ob die halbe Stunde nun schon um war. Deshalb habe ich mit Hilfe der Text-to-Speech (TTS) Funktion von Android eine Zeitansage eingebaut. Anstelle eines klingelns wird mir nun regelmäßig die Zeit angesagt.



Die Auto Snooze Funktion lässt sich recht einfach mit dem Kontext "Time" realisieren. Ich möchte zum Beispiel 8 Uhr geweckt werden, da ich 8:30 aufstehen will. Dazu trage ich nun im "Time" Kontext bei "From:" 8:00 Uhr ein und bei "To:" 8:30 Uhr. Bei "Repeat:" muss nun die Pause zwischen jedem Wecken eingetragen werden, bei mir sind das 10 Minuten. Nun wird der Task also von 8:00 Uhr bis 8:30 Uhr aller 10 Minuten ausgeführt.


Für die Zeitansage habe ich "Misc -> Say" genutzt. Hier kann man einen anzusagenden Text einfach eingeben. Bei "Engine:Voice" muss die zu verwendende TTS-Engine angegeben werden. Mit einem Klick auf die Lupe werden alle installierten TTS Stimmen angezeigt. Sollte hier nichts erscheinen muss im Market eine TTS App installiert werden. Bei "Stream" wird das Audio-Modul gewählt über welches die Ansage ausgegeben werden soll, ich würde ich die Standardeinstellung "Media" nutzen. Mit "Pitch" lässt sich Stimmenhöhe und mit "Speed" die Geschwindigkeit der Ansage anpassen, die Standardeinstellung erzielt da bei mir ganz gute Ergebnisse.


Nun brauchen wir aber noch die aktuelle Uhrzeit für unsere Ansage, diese befindet sich in der Variable %TIME im Format "HH.MM". Da die Sprachengine nun den Punkt mit Ansagt müssen wir die Variable noch etwas bearbeiten. Dazu teilen wir %TIME mit "Variable Split" und "." als Splitter in Stunden und Minuten. Die Stunden befinden sich dann in %TIME1 und die Minuten in %TIME2. Übergeben wir nun der Sprachausgabe "%TIME1 Uhr %TIME2" wird die aktuelle Uhrzeit verständlich ausgegeben.


Um sicherzustellen das wir die Ansage auch hören, muss vorher die Medienlautstärke auf Maximum gesetzt werden. Die Medienlautstärke bestimmt allerdings auch die Wiedergabelautstärke des Musik Players. Damit uns beim nächsten Musikgenuss nicht die Ohren abfallen soll die Lautstärke nach dem Weckvorgang wieder auf ihren alten Wert zurückgesetzt werden. Dazu speichern wir diesen in %VOLM hinterlegten Wert, bevor wir die Lautstärke erhöhen, in der Variable %VOLMOLD ab. Nach dem Wecken soll die Lautstärke auf den gespeicherten Wert zurückgesetzt werden, um bei "Media Volume" anstelle des Schiebereglers ein Eingabefeld zu bekommen, muss einfach auf das Symbol mit den zwei blauen Pfeilen gedrückt werden. Um nicht unnötigen Speicher zu verbrauchen, löschen wir mit "Variable Clear" die angelegte Variable %VOLMOLD im letzten Schritt.


Hier nun das komplette Profil:
  • Profil: "Wecker mit Ansage"
    • Trigger:
      1. Time 
        • From: 8:00 Uhr
        • Repeat: every 10 Minutes
        • To: 8:30 Uhr 
    • Tasks: 
      1. Variable -> Variable Set
        • Name: %VOLMOLD
        • To: %VOLM 
      2. Audio -> Media Volume
        •  Level: 15
      3. Variable -> Variable Split
        • Name: %TIME
        • Splitter: .
      4. Misc -> Say
        • Text: Aufwachen! Es ist %TIME1 Uhr %TIME2.
        • Engine:Voice: [die entspr. Stimme auswählen] 
      5. Audio -> Media Volume
        • Level: %VOLMOLD
      6. Variable -> Variable Clear
        • %VOLMOLD 
Im Tasker sollte das dann folgendermaßen ausschauen:

Die in meinem "alten" Wecker beschriebenen Kalender, Standort und Wochentagsfunktionen können natürlich auch hier wieder hinzugefügt werden. Dazu einfach auf den schon angelegten "Time" Kontext und dann auf "Add" klicken.

Viel Spaß :)

    Kommentare:

    1. Sehr cool!
      Das wird morgen früh direkt mal ausprobiert. Und bei gelingen beizeiten mal um die Kalenderfunktion erweitert. :D
      (Am bestern wäre ja, wenns nicht klappt: "Sorry Chef, aber ich hab meinen Wecker nicht verstanden, die Stimme war zu leise.")
      Vielen Dank! :)

      AntwortenLöschen
    2. :) die zeitansage an sich funktioniert bei mir immer gut :)

      AntwortenLöschen
    3. Hmm, ich habe ihn jetzt mit der Kalenderfunktion kombiniert, aber das funktioniert dann ja mit dem Time-Task nicht mehr, da ich dort ja nur statische Werte einstellen kann. Wenn ich bei den Uhrzeiten die Haken rausnehme, und nur auf "Repeat every 10 Minutes" stelle, erscheint oben "From: Midnight Until: Midnight" was mir auch falsch erscheint, oder klappt das trotzdem?
      Die andere Variante wäre, die ganze Ansagefunktion in eine while-Schleife zu packen, am Ende ein "Wait 10 Minutes" zu setzen und eine Zählvariable zu erhöhen, was ich aber wenig elegant finde.
      Da ich allerdings noch gerne ein Popup hätte, mit dem ich das Snoozen abbrechen kann, wäre es vielleicht gar nicht schlecht. (Ein Button im Popup könnte die Variable auf 4 setzen, und die Schleife wäre beendet.)

      AntwortenLöschen
    4. Hab mal ein bisschen rumgedreht, statt einer Schleife habe ich eine GoTo-Anweisung nach dem Wait, die an ein If gebunden ist. Der erste Schritt deklariert die Variable und initialisiert sie mit 0, das GoTo springt zum zweiten Befehl, der dann so aussieht wie oben beschrieben. Die Popupfunktion läuft aber noch nicht, da nur "Variable Query" eine Rückgabewert annimmt. Wenn ich aber keinen eintippe, läuft das Programm auch nicht weiter.
      Klappt das mit Zoom, oder kann ich mir das Geld vorerst noch sparen?

      AntwortenLöschen
    5. So bin nun endlich mal zum lesen deiner Nachrichten gekommen.

      From:Midnight To:Midnight mit einem Repeat:10min heißt dass er aller 10 Minuten den Task ausführt, den ganzen Tag lang.

      Um den Snooze abzubrechen musst du einfach eine Variable über Variable State mit als Kontext definieren. Über ein Popup mit 2 Schaltflächen ("Snooze abbrechen" & "Popup Schließen") setzt du diese dann auf einen Wert der nicht dem in Variable State entspricht (wenn man "SNooze abbrechen" drückt), somit wird der Task automatisch beendet. Musst nur dafür sorgen dass sie irgendwann wieder auf den passenden Wert gesetzt wird. Zoom wirst du dafür nicht benötigen.

      Ich hoffe meine Antwort kommt nicht zu spät, ist ja echt schon eine Weile her deine Frage.

      AntwortenLöschen
    6. Für ein Gutes Programm ist es nie zu spät. ;)

      Das mit dem Popup hat jetzt grad nicht so gut geklappt: Text stand drin, aber es fehlten die Buttons und auch Header/Footer (Diese Grauen Streifen, die Tasker seit einiger Zeit hat). Die Tasks hatte ich natürlich vorher erstellt. ;)
      Hab mir jetzt ein zweites Profil gebastelt, das die gleiche Eingangsbedingung wie der Wecker hat (selbstgebastelte Variablen gehen als Eingangsbedingung leider nicht) und habe dann dort einen "Variable abfragen"-Befehl drin. Morgen mal testen. Ansonsten versuch ich mich noch mal an deiner Version. :)

      Aber wenn ich den Time-Task "den ganzen Tag im 10 Minuten Takt" über den Kalendereintrag filtere, könnts doch wieder was werden... Das wird dann übermorgen getestet. Dann hab ich aber wieder das Problem, das ich eine meiner eigenen Variablen abfragen muss. :(

      AntwortenLöschen
    7. wieso gehen eigene Variablen nicht?
      Bei Variable Value kannste doch jede beliebige Variable eintragen, oder was meinst du?

      AntwortenLöschen
    8. Hallo,

      erstmal vielen Dank für deine sehr gute Homepage. Ich hätte an dich jedoch noch ein paar Frage, welche nicht ganz zum Thema gehören. Vielleicht kannst du mir dabei aber trotzdem helfen. Im Wesentlichen bräuchte ich Hilfe beim erstellen eines Profils mit der Kombi "Widgetlocker - Tasker - Minimalistic text".

      Ich möchte auf meinen selbst erstellen Sperrbildschirm (Widgetlocker) in einem von "minimalistic text" erzeugten Widget über die Locale Variable die Weckzeit vom Wecker "Alarmdroid" im Stil: "nächster ALarm: xxxxx" anzeigen lassen. Wichtig dabei ist, dass der Alarm nur angezeigt wird, wenn er auch wirklich eingestellt ist (Alarm off = keine Anzeige).

      Wie gehe ich dieses Projekt am besten an (bin was Tasker angeht wirklich Neueinsteiger) bzw. ist es überhaupt realisierbar? Ich habe zwar schon recht viel gelesen, aber so richtig schlau bin ich daraus noch nicht geworden.

      Noch ne kleine Zusatzfrage:
      Ist es möglich den Akkustatus (lädt, vollständig geladen) ebenfals in "Minimalistic text" einzublenden. Ich weiß, das "Minimalistic text" das von Haus schon mitbringt (momentan habe ich das so auch realisiert) aber leider ist der Text immer sichtbar. Ich meine damit, dass im normalen Betrieb immer "entlädt" hinter der noch vorherrschenden Akkuleistung (z.B. 30%) steht und bei voller Aufladung keine Meldung im Sinne von "Akku vollständig geladen" oder sonstiges erscheint sondern immer nur da steht "lädt". In meinem Fall erkennt man das der Akku voll geladen ist nur daran, dass die jeweilig vorherrschenden Akkuleistung mit 100% angezeigt wird.

      Vielen Dank für deine Hilfe...

      AntwortenLöschen
      Antworten
      1. Hi hab deinen Post schon auf Android-Hilfe gesehn ;)

        Da ich aber weder widget locker noch minimalistic text und alarm droid nutze kann ich dir da leider nicht weiter helfen

        Löschen
      2. Hi hab deinen Post schon auf Android-Hilfe gesehn ;)

        Da ich aber weder widget locker noch minimalistic text und alarm droid nutze kann ich dir da leider nicht weiter helfen

        Löschen
      3. Hmmm, schade....vielleicht kannst du mir aber prinzipiell sagen wie man das zu mindestens in Tasker realisieren könnte....???? Widgetlocker spielt nur eine untergeordnete Rolle und minimalistic text ist im grunde das gleiche wie Zoom. Im grunde genommen, müsste ich nur in Erfahrung bringen, wie man eine belibige Variabel mit einem Wert von einer App füllt. Tasker bietet für minimalistic text von Haus aus ja ein Plugin für minimalistic text an.

        Trotzdem schon mal vielen Dank für deine Antwort.

        Löschen
    9. Hallo,
      ich habe das Problem, dass ich zusätzlich zur Ansage eine Ton abspiele (Twirl Away) doch leider läuft dieser auch nach der Ansage in einer Endlosschleife immer weiter. Habe auch schon Alarme, Silent gesetzt am Ende.
      Aber der "Twirl.." läuft immer weiter. Wie kann man den denn stoppen?

      AntwortenLöschen
      Antworten
      1. Welche Aktion hast du zur Wiedergabe genutzt? Bei "Music Play" sollte das nicht passieren. Solange du "Loop" nicht gesetzt hast, dafür gibt es dann "Music Stop".

        Löschen
    10. Hallo Gemeinde besteht die Möglichkeit in den Wecker noch eine Ansage einzubringen wie das Wetter ist ?
      Und wenn ja wie bin Totaler NEULING
      Danke im voraus

      AntwortenLöschen
      Antworten
      1. über yahoo wetter kannst du dir den html code mit der Aktion httpget holen. Yahoo nutzt in ihren Links Codes für jede Stadt, also einfach deine stadt öffnen und den link kopieren, mit httpget den html code holen und dann mit der Atkion Split den teil extrahieren den du vorgelesen haben willst. Wird recht aufwendig, so was ähnliches wurde aber schon ein paar mal gemacht.
        guck mal hier: http://tasker.wikidot.com/step-throughs

        Löschen
    11. Ok Danke! Bekomme es leider nicht hin aber Danke für deine Hilfe und Antwort !

      AntwortenLöschen
    12. Wenn Du keine Lust auf die Stimme hast, hier alternative Vorschläge:
      - vor Abspielen des Alarm-Samples die aktuelle Wiederholung per Morsecode ausgeben.
      - Alarm normal abspielen, die Anzahl der aktuellen Wiederholung in Vibrationsstössen darstellen. Vorallem wenn das Handy auf einer harten Oberfläche liegt, dürfte man gut die Anzahl der Vibrationen heraushören können
      - einfach die Anzahl der Wiederholung vor dem Alarm per Voice ausgeben... dann kann man aber auch gleich die Uhrzeit ansagen.

      Zusätzlicher Vorschlag:
      - Hinzufügen einer absoluten Endzeit, nach dessen verrinnen ein richig übler Alarm abgespielt wird und MUTE nicht möglich ist. Auch ein Stoppen nur über irgendeine Sicherheitsfunktion.

      LG Alex

      AntwortenLöschen
    13. Bei mir sagt die stimme %Time1 erst ab 10.00 uhr an, alles andere und %TIME2 sagt sie korrekt.
      Warscheinlichkommt sie mit der einstelligen zahl nicht klar.

      AntwortenLöschen
    14. ich glaube ich hab die kösung
      variable set %TIME1 To %TIME1 und den haken bei mathematisch
      mal sehen was sie morgen früh sagt

      AntwortenLöschen
    15. ja mit %TIME2 muss man das auch machen sonst sagt sie von 8.01 bis 8.09 immer
      es ist acht uhr

      AntwortenLöschen
    16. und dann gibt es noch ein problem
      8.01 Uhr sagt sie "es ist acht uhr ein"

      AntwortenLöschen
    17. aber das ist mir jetzt egal ich lass mich nie um 8.01 Uhr wecken
      und ich will endlich mein nächstes projekt beginnen ;)

      AntwortenLöschen