Mittwoch, 8. Juni 2011

[Profil] Haushaltsbuch mit Widget und csv-Datei-Export

Es ist generell nicht schlecht zu wissen, wie die aktuellen Monatsausgaben im Verhätlniss zu den Einnahmen stehen. Dafür gibt es schon Haushaltsbuch-Apps wie Sand am Meer. Diese bieten dann eine Vielzahl an Funktionen die ich gar nicht brauche und sind deshalb recht "aufgeblasen". Mein Widget soll mir einfach nur den Monatssaldo anzeigen, sowie eine einfache Möglichkeit bieten einen neuen Eintrag hinzuzufügen. Die Einträge sollen automatisch in einer ".csv" Datei gespeichert werden, sodass ich sie später in Excel importieren kann.


Als erstes wird dafür ein neues Widget mit Zoom erstellt. Dieses benötigt mindestens drei Elemente. Ein Textfeld um den Saldo anzuzeigen. Sowie zwei Buttons einer um einen neuen Eintrag zu erstellen und einer um den Saldo neu zu berechnen.

Nun brauchen wir noch zwei Tasks. Task 1 erstellt einen neuen Eintrag und fragt dafür die benötigten Werte per Dialog ab. Die eingegebenen Werte werden gleich in einer Datei abgelegt. Damit wir immer den Monatssaldo angezeigt bekommen, soll für jeden Monat eine extra Datei angelegt werden. Dazu wird das eingegebene Datum aufgeteilt um Monat und Jahr einzeln zu haben. Ich empfehle auch bei der Werteabfrage immer einen Defaultwert einzutragen, einfach um zu verhindern das leere Einträge entstehen die später Fehler verursachen können.

Als "Input Type" für "Variable Query" würde ich immer "Normal Text" empfehlen, zwar bietet sich beim Betrag "Number / Decimal" an, aber leider lässt er dann kein "," zu sondern nur ".", da Excel standardmäßig ein "," erwartet ist es aber sinnvoll dieses auch zu nutzen. Ob es sich nun um eine Einnahme oder Ausgabe handelt soll über das Vorzeichen angegeben werden, also einfach bei einer Ausgabe ein "-" -ohne Leerzeichen- vor den Betrag setzen.
  • Task1: "Haushaltsbuch Neu"
    1. Variable -> Variable Query
      • Name: %DATUM
      • Label: Neuer Eintrag: Datum
      • Default: %DATE
    2. Variable -> Variable Query
      • Name: %KATEGORIE
      • Label: Neuer Eintrag: Kategorie
      • Default: sonstiges 
    3. Variable -> Variable Query
      • Name: %BETRAG
      • Label: Neuer Eintrag: Betrag
      • Default: 0 
    4. Variable -> Variable Split
      • Name: %DATUM
      • Splitter: .
    5. File -> Write File
      • File: My Documents/Haushalt_%DATUM2_%DATUM3.csv
      • Text: %DATUM;%KATEGORIE;%BETRAG
      • Append: Yes
    6. Tasker -> Perform Task
      • Name: Haushaltsbuch lesen
Als letztes wird nun schon der noch nicht vorhandene Task "Haushaltsbuch lesen" gestartet. Dieser soll die aktuelle csv Datei einlesen und die Salden zusammenrechnen um den Gesamtsaldo dann auf dem Widget anzuzeigen.
  • Task 2: "Haushaltsbuch lesen"
    1. Zoom -> Element Textcolour
      • Element: Haushaltsbuch_Widget / Saldo
      • Colour: [schwarz]
    2. Zoom -> Element Text
      • Element: Haushaltsbuch_Widget / Saldo
      • Text: Berechne Saldo ...
    3. Variable -> Variable Clear
      • Name: %SALDO
    4. Variable -> Variable Split
      • Name: %DATE
      • Splitter: .
    5. File -> Read Line
      • File: My Documents/Haushalt_%DATE2_%DATE3.csv
      • To Var: %READ
    6. Tasker -> If %READ ~ EOF
    7. Zoom -> Element Text
      • Element: Haushaltsbuch_Widget / Saldo
      • Text: %SALDO €
    8. Zoom -> Element Textcolour
      •  Element: Haushaltsbuch_Widget / Saldo
      • Colour: [was rotes]
      • If %SALDO < 0
    9. Zoom -> Element Textcolour
      •  Element: Haushaltsbuch_Widget / Saldo
      • Colour: [was grünes]
      • If %SALDO > 0
    10. Tasker -> Stop
    11. Tasker -> End If
    12. Variable -> Variable Split
      • Name: %READ
      • Splitter: ;
    13. Variable -> Variable Set 
      • Name: %SALDO
      • To: %SALDO + %READ3
      • Do Math: Yes
    14. Tasker -> Goto Action
      • Number: 4
Mit "Read Line" werden nun nacheinander alle Einträge in unserer .csv Datei ausgelesen und in die angegebene Variable geschrieben. Dabei springt "Read Line" automatisch mit jedem Aufruf eine Zeile weiter, ist die letzte Zeile erreicht wird "EOF" (End Of File) in unsere Variable geschrieben. Dieser Task ist nun so aufgebaut das er alle Zeilen nacheinander einliest, die jeweilige Zeile teilt und den Betrag zum Saldo hinzu addiert. Ist die letzte Zeile erreicht wird der Saldo ausgegeben und der Task beendet. Dazu wird nach dem Einlesen der Zeile überprüft ob "EOF" in unserer %READ Variablen steht. Ist dem so wurden alle Einträge eingelesen und das Ergebnis kann ausgegeben werden. Mit "Stop" wird der Task dann beendet. Ist das Ende der Datei noch nicht erreicht, in %READ steht als nicht "EOF" wird der If Zweig bis "End If" übersrpungen und mit Aktion 11 weiter gemacht. Nach dem Einlesen und verarbeiten der gerade aktuellen Zeile wird mit "Goto Action" zur 4. Aktion, also dem Einlesen der nächsten Zeile, gesprungen. Dadurch entsteht eine Schleife die genauso oft ausgeführt wird wie Zeilen in der Datei vorhanden sind.

Wenn man die App Zoom nicht installiert hat, kann man das Profil auch über ein Tasker Widget realisieren. Ein Tasker Widget ist im Endeffekt nur eine Verknüpfung mit einem Task. Es wird ein Symbol und ein Text darunter angezeigt. Beim Klicken auf das Widget wird der angegebene Task ausgeführt, in unserem Falle sollte das "Haushaltsbuch Neu" sein. Den Text kann man mit "Tasker -> Set Widget Label" bearbeiten und somit den aktuellen Saldo ausgeben.

Um die erstellte csv Datei in Excel zu importieren, genügt es diese auf den PC zu kopieren und mit einem Doppellklick zu öffnen. Daraufhin startet Excel mit einem neuen Tabellenblatt und fügt automatisch unsere Einträge in drei Spalten ein. Alternativ kann man die Werte auch manuell über "Daten -> Externe Daten Importieren" einfügen.

Viel Spaß damit :)

Kommentare:

  1. Hallo, vorweg danke für den tollen blog - bin tasker-mäßig ein newbie. hab zum haushaltsbúch folgende frage: ich hab alles so gemacht wie von dier beschrieben. leider bin ich nicht draufgekommen wie man das widget bekommt, dass du hast (foto) ich hab nur ein symbol ohne dem "finanzstatus" und ausserdem kommt nach einem eintrag folgenede meldung: Read Line: file not found: /mnt/sdcard/My Documents/Haushalt_06_11.csv. Was muss ich noch machen? Hab ich was falsch gemacht? Danke für deine Hilfe!!! Danke Thomas

    AntwortenLöschen
  2. Hallo,
    das Widget was ich habe ist mit der App "Zoom" gemacht. Du rbauchst also eine weitere App dafür, diese kostet aber leider auch nochmal ein bissche, wenn du sie also nicht auch anderweitig nutzen würdest (zBso für ein Notizwidget) lohnt sich der kauf nicht, da man die Funktionen für das Haushaltsbuch auch mit einem einfachen Taskerwidget, wie du es jetzt schon hast, realisieren kann.

    Zu deiner Fehlermeldung:
    Ich schätze der hat entweder die Datei nicht richtig erstellt (5. Aktion Task 1) oder du hast dich beim Dateinamen vertippt, sodass der die Datei nicht findet. Schau mal im Ordner nach ob die Datei vorhanden ist und guck nochmal ob die Namen stimmen. Der Pfad für das Write File in Task 1 und für das Read File in Task 2 muss identisch sein. Einziger Unterschied ist das einmal %DATUM genutzt wird und einemal %DATE

    AntwortenLöschen
  3. Also Zoom habe ich auch - wenn du mir da noch einen tipp geben könntest wie man das macht bin ich dir sehr dankbar. jetzt schau ich mir nochmals die aktionen an. danke und lg thomas

    AntwortenLöschen
  4. aso ok also:
    Starte Zoom, geh auf Templates, dann auf das grüne +.
    Im folgenden Fenster kannst du ein paar Einstellungen machen. Cell Width und Height sind die Abmessungen des Widgets bezogen auf das Bildschirmraster (Standard Raster is 4x4), ich habe 4x1 genommen.
    Mit der Menü Taste kannst du ein Element hinzufügen. Zum Beispiel ein Textfeld oder Bild. So erstellst du nacheinander das Widget. Jedes Element bekommt auch einen Klick-Trigger. EInfach im Eigenschaftsfeld des Elementes ganz nach unten scrollen, dort kannst du dann zBso einen Task auswählen. Wenn du fertig bist einfach mit dem grünen Haken beenden. Dann erstellst du auf deinem Homescreen ein neues Widget (ganz normal) und wählst Zoom 4x1 aus, im folgenden Fenster wählst du dann das eben erstellte Template aus.

    Ich werde demnächst mal ein Zoom Tutorial posten. Aber vielleicht hilft dir in der zwischenzeit auch die Homepage von Zoom weiter: zoom.dinglisch.net

    AntwortenLöschen
  5. erstmal ein großes dankeschön für den blog, hat mir schon so manche tipps gegeben ^^

    aber ich hab noch ein paar fehler entdeckt und zwar:

    ALT:
    7. Zoom -> Element Colour

    NEU:
    7. Zoom -> Element Textcolour

    ALT:
    8. Zoom -> Element Colour

    NEU:
    8. Zoom -> Element Textcolour

    ...da doch der Saldo als Text ausgegeben wird.


    Und bei

    12. Variable -> Variable Set

    muss noch "Mathematisch" angeklickt werden, damit es auch berechnet wird.

    Ganz sinnvoll ist es vielleicht auch auch als aller erstes vor Punkt 1 noch "Zoom -> Element Textcolour" anzugeben, damit hätte "Berechne Saldo" seine eigene Farbe und wird nicht jeweils rot oder grün ausgegeben.

    AntwortenLöschen
  6. Könntest Du evtl. zu Deinem Zoom-Widget für das Haushaltsbuch ein kurzes HowTo geben?

    Ich habe mir Zoom gekauft und damit schon 'ne Weile rumgespielt, komme aber nicht so recht klar. Das sieht am Ende alles anders aus, als es soll und ich verstehe nicht, warum...

    AntwortenLöschen
  7. werd mal gucken, enn ich Zeit habe mach ich mal was. Ist ja aber eigentlich selbsterklärend :D

    Kleiner Tipp: Hast du die Calibration Widgets mal auf einen Homescreen hinzugefügt? Die dienen dazu um die einzelnen Elemente dann auch in der richtigen Größe etc anzuzeigen...

    AntwortenLöschen