Dienstag, 3. Mai 2011

[Profil] Updatebenachrichtigung für ein CustomROM mit "HTTP Get"

Wer noch das original ROM auf seinem Androiden laufen hat, wird automatisch bei einer Aktualisierung des Betriebssystemes benachrichtigt. Für diejenigen welche sich für ein Custom ROM entschieden haben, entfällt dieser Luxus leider. Da die Entwickler der Custom ROMs jedoch recht hinterher sind, ihre ROMs weiter zu verbessern, haben diese auch einen recht kurzen Updatezyklus. Wer nicht immer selber regelmäßig nach einem ROM Update im jeweiligen Forum schauen möchte, kann dies automatisch von Tasker erledigen lassen.

In Tasker wurde die Funktion "HTTP Get" integriert. Diese speichert den Quelltext einer Webseite in der Variable %HTTPD. Der Quelltext kann dann auf Veränderungen hin analysiert werden.

Ich benutze das "RCMix HD" (Link zu Thread) ROM aus dem xda-developers Forum. Zum Zeitpunkt dieses Posts lautet der Thread Titel:

[ROM][May 02]RCMix HD v6.1.0.1 Evolutionary Sense! RUU 2.36.405.8|SENSE 3 SMS,WEATHER

Im Threadtitel finden sich also alle nötigen Informationen zur aktuellen Version. Während der Thread Titel mit jeder neuen Version angepasst wird, bleibt die Adresse zum Thread immer gleich. Diese lautet:

http://forum.xda-developers.com/showthread.php?t=984822

Nun muss also nur die Thread Adresse mit "HTTP Get" aufgerufen werden und der Threadtitel aus dem Quelltext extrahiert werden. Um den aktuellen Titel mit der Version seit dem letzten Aufruf vergleichen zu können, muss dieser in einer Variablen gespeichert werden.


Um den Titel aus dem Quelltext zu extrahieren, nutzen wir die Funktion "Variable Split". Ich habe als ersten Splitter "[ROM]" genutzt, da diese Zeichenkette nur im Titel vorkommt und gleich danach der für mich interessante Teil kommt.  Als zweiten Splitter habe ich "RUU" gewählt. Nun habe ich also den Quelltext der kompletten Seite auf folgende Zeichenkette gekürzt:

[May 02]RCMix HD v6.1.0.1 Evolutionary Sense!

In dieser Zeichenkette befinden sich nun alle wichtigen Informationen. Das Datum und die Versionsnummer, damit können wir sicher sein das diese Zeichenkette sich ändern wird wenn das eine neue Version verfürgbar ist.


Nun können wir also den Thread Titel extrahieren und mit der in einer Variablen abgelegten alten Version vergleichen. Um nun auch benachrichtigt zu werden, nutzen wir die Aktion "Alert -> Notify". Diese erstellt eine Benachrichtigung in der Benachrichtigungsleiste. Um die Updateroutine zu triggern nutzen wir den "Time" Kontext. Ich lasse die Routine zwischen 09:00 und 22:00 Uhr aller zwei Stunden laufen. Man kann diese natürlich auch nur einmal täglich laufen lassen.

Hier nun das komplette Profil:
  • Profil 1:  "ROM Update"
    • Trigger: "Time" From 09:00 every 2h Till 22:00
    • Tasks:
      1. HTTP Get
        • Server:Port:  http://forum.xda-developers.com/showthread.php?t=984822
        • Timeout: 30
        • Mime Type: text/html
      2. Variable Split
        • Name: %HTTPD
        • Splitter: [ROM]
      3. Variable Split
        • Name: %HTTPD2
        • Splitter: RUU
      4. Notify
        • Title: ROM Update verfügbar
        • Text: %HTTPD21
        • Icon: eins raussuchen
        • If %HTTPD21 !~ %ROM
      5. Variable Set
        • Name: %ROM
        • To: %HTTPD21 
Nun wollte ich noch, dass bei einem Klick auf die Benachrichtigung, der Thread geöffnet wird. Dies erreicht man mit dem Trigger "Event -> UI -> Notification Click". Mit der Aktion "Browse URL" wird der Standardbrowser geöffnet und die angegebene Webseite geöffnet.
  •  Profil 2: "ROM Browser"
    • Trigger: Notification Click
      • Owner Application: Tasker
      • Title: ROM Update verfügbar
    • Tasks:
      1. Browse URL
        • URL:  http://forum.xda-developers.com/showthread.php?t=984822
Das wars schon. :) Um nun die Update Routine auf ein anderes ROM anzupassen muss jediglich die URL in "HTTP Get" und die Funktionen "Variable Split" angepasst werden. Dies sollte aber ohne Probleme möglich sein :)

[Update]
Ich habe nun einen praktikablen Weg gefunden, wie das Updateskript sehr eifnach für jedes ROM angepasst werden kann. Ich habe nun zwei Splitter gefunden mit denen sich der Threadtitel jedes ROM-Threads universell extrahieren lässt. Die einzigen zwei Voraussetzungen sind, dass erstens ein Thread aus dem xda-developers Forum genutzt wird und zweitens dieser mit "[ROM]" beginnt. Anstelle der "123456" muss natürlich die Threadnummer. Diese kann einfach aus der Browseradressleiste abgelesen werden.
Hier das komplette Update Profil:
  • Profil 1:  "ROM Update"
    • Trigger: "Time" From 09:00 every 2h Till 22:00
    • Tasks:
      1. HTTP Get
        • Server:Port:  http://forum.xda-developers.com/showthread.php?t=123456
        • Timeout: 30
        • Mime Type: text/html
      2. Variable Split
        • Name: %HTTPD
        • Splitter: [ROM]
      3. Variable Split
        • Name: %HTTPD2
        • Splitter: ,
      4. Notify
        • Title: ROM Update verfügbar
        • Text: %HTTPD21
        • Icon: eins raussuchen
        • If %HTTPD21 !~ %ROM
      5. Variable Set
        • Name: %ROM
        • To: %HTTPD21
Viel Spaß damit :)

16 Kommentare:

  1. Wie sieht denn die Situation mit einem Variable split aus? z.B. beim GingerVillain-Rom.

    Steige leider nicht ganz mit dem "httpd21" durch.

    Danke schonmal

    AntwortenLöschen
  2. hi,
    hast du dir mein Tutorial zum "Variable Split" mal angesehen? Hab dort eigentlich ganz gut erklärt wie die Ziffern zustande kommen. Im Endeffekt sind das Indexe, wenn du die Variable %HTTPD teilst entstehen mehrere Teilvariablen, um auf jeden Teil zugreifen zu können haben alle einen Index. der erste Teil trägt den Index 1, also ist in %HTTPD1 alles was vor dem ersten Splitter steht. die Variable %HTTPD21 entstand durch das Teilen der Variablen %HTTPD2

    also hab jetzt das Ginger Vaillant ROM gefunden:
    http://forum.xda-developers.com/showthread.php?t=880465

    Wenn man im Quelltext schaut, findet man den Threadtitel das erste mal in der 8. Zeile, in dieser befindet sich die Zeichenkette:

    [ROM-GingerBread] Ginger Villain 2.2 (30-04),

    Da vorher keine eckige Klammer im Quelltext auftaucht, wird zuert mit "[" gesplittet. In %HTTPD1 steht nun alles vor "[", das brauchen wir aber nicht, uns interessieren die Zeichen danach, deswegen nehmen wir %HTTPD2 hier stehen alle zeichen zwischen der 1. und 2. "[" drin.
    Da wir aber nur den Titel brauchen, teilen wir die Zeichenkette %HTTPD2 noch und zwar mit "," als Splitter, da das "," de Threadtitel in der Zeile oben abschließt. Nun interessiert uns alles vor dem 1. "," also brauchen wir den Index 1, also %HTTPD21, in dieser Variable befindet sich nun folgende Zeichenkette:

    ROM-GingerBread] Ginger Villain 2.2 (30-04)

    und somit alles was wir brauchen...

    AntwortenLöschen
  3. Nochmal ich:

    Habe mich jetzt die ganze Nacht mit dem Thema http get und dem "variable split" beschäftigt.

    Generell bräuchte ich ja für den Thread Titel beim Ginger-Villain-Rom keinen Teiler. Dennoch muss aber der alte Threadtitel mit einem möglichen neuen abgeglichen werden.

    Irgendwie steh ich atm aufn Schlauch :(

    AntwortenLöschen
  4. Nachtrag: Habe deinen Post jetzt irgendwie noch nicht gesehen?! Danke schonmal für die Erklärung. Werde mich die nächste Zeit damit auseinandersetzen!

    AntwortenLöschen
  5. Und nochmal: konfus - die Uhrzeit beim Blog stimmt bei mir nicht. Dachte, du hast gegen Mitternacht geschrieben.
    Werde es jetzt mal so einstellen, wie du beschrieben hast - Vielen Dank

    AntwortenLöschen
  6. Joa das ist mir auch schon aufgefallen, mal schaun ob i das noch hinbekomme

    AntwortenLöschen
  7. Noch eine Verständnisfrage: Bei deinem ersten variable split steht "Splitter: %ROM". Müsste der Splitter dann nicht "[ROM" heißen?

    Wie müsste eigentlich die "set variable" bei dem Gingervillain-Rom aussehen?

    AntwortenLöschen
  8. ja das stimmt, ich habe es geändert, danke für den Hinweis.

    Das Set Variable bleibt gleich, da in %HTTPD21 ja die gesplittete Zeichenkette hinterlegt ist, in deinem Fall also der Titel des Vaillant ROMS, da du HTTPGet ja mit der Adresse zu deinem Thread ausführst. Und dann mit Variable Split den Threadtitel rauspickst und zum Schluss in der Variable %ROM speicherst.

    AntwortenLöschen
  9. Vielen Dank. Vom Verständnis habe ich fast alles begriffen: Wird also in deinem fünften Punkt eine neue Variable "%ROM" gesetzt, die dann mit der Variable "HTTPD21" gefüllt wird und dann beim nächsten mal im vierten Punkt deiner Ausführung mit der dann aktuellen Variable verglichen wird.

    Somit könnte ich das Profil (bzw. die Notification) mit dem integrierten Button nur testen, wenn ich den "if"-Wert mal manuell abändere in "=" z.B. ?!

    Aber mal unabhängig dieses Profiles möchte ich mich nochmals für die jetzt schon online gesetzten Profiles und Tutorials in deinem Blog bedanken und hoffe, dass noch weitere folgen!

    Wenn du einen Donate-Button hast, kannste dich mal melden! ;)

    AntwortenLöschen
  10. Jop genauso ist es :)

    du kannst das Profil auch testen indem du die Variable %ROM in einem anderen Task überschreibst, die Variablen sind in allen Tasks und Profilen bekannt. So hab ich das am Anfang gemacht.

    Es werden natürlich weitere Profile und auch Tutorials folgen, der Updatezyklus wird sich mir etwas verlängern, da ich jetzt alle schon ausgearbeiteten Profile gepostet habe, aber ich habe ständig neue Ideen die nun implementiert werden wollen :)

    Wenn du Ideen für Tutorials hast nur her damit :) Da ich ja nicht immer weiß wo es am Anfang hakt :)

    AntwortenLöschen
  11. Und nochmal was: Habe jetzt in meiner Notification bar (oben) beim runterscrollen zwar den Hinweis auf das neue Update, aber müsste da nicht noch der Inhalt der Variable "HTTPD21" stehen? Oder habe ich noch etwas übersehen?

    Bei mir steht dort nur HTTPD21.

    AntwortenLöschen
  12. es muss %HTTPD21 heißen, das % zeigt immer eine Variable an, ohne % ist es nur eine Zeichenkette. Ich habe den Fehler korrigiert. Danke

    AntwortenLöschen
  13. Dieser Kommentar wurde vom Autor entfernt.

    AntwortenLöschen
  14. Dieser Kommentar wurde vom Autor entfernt.

    AntwortenLöschen
  15. mal eine Frage, ich habe den Task (ursprüngliche) Variante mal abgetippt. Soweit klappt das auch, aber jedesmal wenn ich den Task manuell laufen lasse, kommt die Notification. Müsste nicht %ROM im fünften Punkt mit %HTTPD21 gleichgesetzt werden? Dann dürfte die Abfrage beim nächsten Mal doch keine Notification mehr auswerfen, weil %HTTPD21 und %ROM dann gleich sind. VG Robert

    AntwortenLöschen
  16. Hallo,
    ich schon wieder ;-)
    Ich habe leider immer noch das gleiche Problem.
    Vorgestern gab es bei "meinem" ROM ein Update, das wurde auch
    zuverlässig angezeigt, allerdings kommt jetzt jeden Tag zweimal (ich lasse alle 5 Stunden innerhalb eines bestimmten Zeitraums abfragen) die Meldung, dass ein Update vorhanden ist, obwohl sich am ROM seit Vorgestern nichts mehr verändert hat.
    Warum passiert das? Nach der Abfrage, wird doch %ROM mit %HTTPD21 gleichgesetzt.
    VG Robert

    AntwortenLöschen