Android App Notify

Begonnen von fhem86, 18 Januar 2013, 19:40:26

Vorheriges Thema - Nächstes Thema

fhem86

Hallo Zusammen,

Ich habe eine Android App erstellt, womit ihr euch in RealTime Notifications auf euer Handy senden könnt.

Dies funktioniert über den Google Dienst GCM (http://developer.android.com/google/gcm/index.html).

Ihr seid nur von Google und eurer Internetverbindung abhängig.

Und es gibt kein Tages Limit, wie in der kostenlosen Version von Notify My Android.

Anleitung:

Google Api Konto:
http://developer.android.com/google/gcm/gs.html aufrufen
  • Achtung: Ein neues Google Konto anlegen.
  • Von "Creating a Google API project"
  • Bis "Obtaining an API Key"
  • Alles durchführen.
  • Anstatt "Create new Server key" -> " Create new Brower key" auswählen.[/list]

    Notify Android App
    • Notify.apk auf dem Android Gerät installieren.
    • App starten
    • Die Project ID von Google eintragen.
    • Solange "OK" klicken, bis das Feld RegistrationId einen String enthält.
    • In der PHP Datei diesen String in die Zeile $registrationId = 'String' einfügen
    • In der gleichen PHP Datei in der Zeile $apiKey = "apiKey"; den Browser apiKey einfügen.


    PHP Voraussetzung:
    • PHP5 mit curl support.
    • Webserver oder console. Beides funktioniert.
    • Unter Linix mit "apt-get install php5 php5-curl" oder sonstigen Paket Managern installieren.

    Beispiel Console:
    • php5 /var/www/gcm/notify.php?message=msg&tickerText=ticker&contentTitle=Titel&contentText=Text

    Diesen Link müsst ihr nur in fhem einbauen :)

    Wenn jemand ein Perl Modul für fhem bauen will, kann er/sie dies machen.

    Der PHP Code sollte einfach übertragbar sein.

    mfg



    korbinian

    Hi,

    genialer Weg.
    GCM kommt mir gerade recht, löst gleich mehrere Probleme auf einmal... ;)

    Danke fürs sharen.

    Habs nicht getestet, aber ich würde den SSL Verify in der php aktivieren.

    Voraussetzung für die notify.apk ist Android >2.2 wegen GCM.
    Die apk sieht soweit auch gut aus, tool.notify ist sauber.

    Notify.apk md5: dee5b7b5fc33af7a24d9e333ec5a541e

    Danke
    Grüße



    fhem86

    Ich habe es auch noch hinbekommen eine Perl Funktion für FHEM zu basteln:



    sub sendNotify($$$$) {

      my ($message, $tickerText, $contentTitle, $contentText) = @_;

      use JSON;
      use HTTP::Request;
      use LWP::UserAgent;
     
      use IO::Socket::SSL;
     
     
      my $client = LWP::UserAgent->new();

      my $apikey = '';
      my $registration_ids = '';

      my $url = '';

      my $data = {
          registration_ids => [ $registration_ids ],
          data             => {
            message => $message,
    tickerText => $tickerText,
    contentTitle => $contentTitle,
    contentText => $contentText
          }
      };
     
      my $req = HTTP::Request->new(POST => "https://android.googleapis.com/gcm/send");
        $req->header(Authorization  => 'key='.$apikey);
        $req->header('Content-Type' => 'application/json; charset=UTF-8');
        $req->content(encode_json $data);
     
     
      my $r = $client->request($req);

    }


    In der fhem.cfg:

    "{sendNotify ('message','ticker','Title','Content')}


    ChrisW

    Danke für den Perl Code aber was muss ich dort anpassen.
    habe es in die 99_Utils.pm gepackt.
      my $apikey = 'AMYAPIKEYug';  << Ist klar
      my $registration_ids = ''; << Wo finde ich die

      my $url = ''; << Wozu URL ?



    ?? Und welcher Service genau muss man Aktivieren ??
    Raspberry PI3 mit allem möglichen.

    ChrisW

    In der App wird auch "RegistrationID abgefragt ?? Ist da smeine gmail Adresse ?

    Und ProjektID lässt nur Zahlen zu. Meine ProjektID Heißt aber push387523932
    Raspberry PI3 mit allem möglichen.

    ChrisW

    AHHHH Die App Generiert die Ids die ich dann unter der API einfüge.
    Es Klappt bekomme eine Push. Jedoch kein Sound usw. Wäre mir gar nicht aufgefallen :P
    Raspberry PI3 mit allem möglichen.

    ChrisW

    So 4 dinge sind mir aufgefallen.
    -Eine Nachricht per FHEM wird immer DOPPELT VERSCHICKT
    fhem (sendNotify ('Das Gerät Einer ist ONLINE gegangen','Chris ON','Chris ON','Handy Christian ist Zuhause Online'));
    -Es ist nicht möglich Gerätenamen und Status einzubauen @ oder %
    - Fehlermeldungen im Log:
    2013.01.20 15:01:11 3: HTTP::Response=HASH(0x4ad7a80) : Unknown command http::response=hash(0x4ad7a80), try help
    - Android App keine Einstellungen Vibration / Sound ( Irgendwann mal "StilleZeit" über Nacht z.b 20-8 Uhr" und Prioritäten die trotz StillerZeit Benachrichtigen )

    Und nochmal DANKE für diese Alternative
    Raspberry PI3 mit allem möglichen.

    fhem86

    Die Meldung bekomme ich auch, aber in meinem An/Abwesenheits script wird die Nachricht nur einmal pro Statusänderung verschickt:



    define Anwesenheit_Daniel dummy
    attr Anwesenheit_Daniel room Anwesenheit
    attr Anwesenheit_Daniel setList on off


    define Job_AnwesendDaniel at +*00:01:00 { \
    use Net::Ping;; \
    my $ip = "192.168.1.100";; \
    my $p = Net::Ping->new("icmp", 9, 64);; \
    my $pingtest = $p->ping($ip);; \
    if ($pingtest && ($value{Anwesenheit_Daniel} eq "off")) { \
        fhem("set Anwesenheit_Daniel on");; \
        fhem(sendNotify('ON','ON','ON','ON'));; \
    } \
    elsif (!($pingtest) && $value{Anwesenheit_Daniel} eq "on") { \
        fhem("set Anwesenheit_Daniel off");; \
        fhem(sendNotify('OFF','OFF','OFF','OFF'));; \
    } \
    }



    Die Fehlermeldung ist übrigens keine :)

    Für Sound und Vibration, werden die Systemeinstellungen genommen. Das kann aber auch noch geändert werden.
    Die App ist ziemlich Basic, daher auch sparsam beim Stromverbrauch. Der Google Service nimmt die Nachrichten an.

    ChrisW

    Ich teste es nochmal in meinem anderen Code vielleicht ist da nur ein Fehler drin.
    Strom sparen ist super :) Aber sollte ja kaum was ausmachen die mini änderungen ;)

    Lässt sich sowas später auch mal als Popup anzeigen also wie bei IOS ?

    Systemeinstellungen wo kann ich die dafür einstellen ? habe 90% Vibrations Profil SMS usw. Vibrieren alle aber die Push nicht :P Zu mindest die Vibration Funktion wäre spitze :P
    Mit dem Log Einträgen kann ich auch leben :P
    Raspberry PI3 mit allem möglichen.

    fhem86

    Zitat von: Chris schrieb am So, 20 Januar 2013 16:34Ich teste es nochmal in meinem anderen Code vielleicht ist da nur ein Fehler drin.
    Strom sparen ist super :) Aber sollte ja kaum was ausmachen die mini änderungen ;)

    Lässt sich sowas später auch mal als Popup anzeigen also wie bei IOS ?

    Systemeinstellungen wo kann ich die dafür einstellen ? habe 90% Vibrations Profil SMS usw. Vibrieren alle aber die Push nicht :P Zu mindest die Vibration Funktion wäre spitze :P
    Mit dem Log Einträgen kann ich auch leben :P

    Die Fehlermeldung hat was mit dem Perl script zutun.

    ToDo:
    • Fehlermeldung im Log beheben.
    • @ und % für Geräte zulassen (habs noch nicht probiert -> gibt es da ein Beispiel script?).
    • Setup für Sound, Vibration anpassen.
    • Eventuell Verschiedene Icons (Achtung, Status usw)

     
    Wo ist eigentlich der Edit Button hier im Forum?

    fhem86

    Ich denke ein Popup wäre auch möglich.

    z.B. für eine ganz wichtige Nachricht.

    Jetzt wäre ein Edit button wieder gut :)

    ChrisW

    Hallo,
    Edit Button wurde deaktiviert weil man von jedem die alten googleGroups anpassen konnte. Wird wohl noch was dauern.

    Hier ein script wo das mit @ und % gehen sollte.

    ##########################################################
    # NotifyMyAndroid
    # Nachricht mittles NMA auf ein Android-Smartphone

    sub NotifyMyAndroid($$) {

      my ($event, $description) = @_;

      use LWP::UserAgent;
      my $browser = LWP::UserAgent->new();

      # APIKey individuell eintragen
      my $apikey = 'fc6af6439dxxxxxxxxxxxxxxxxxxxxx98';

      my $url = 'https://www.notifymyandroid.com/publicapi/notify';
      my $application = 'FHEM';
      my $priority = '0';

      my $seite = $browser->post($url,
        [ apikey => $apikey,
          application => $application,
          event => $event,
          description => $description,
          priority => $priority,
        ]);

    }
    Raspberry PI3 mit allem möglichen.

    fhem86

    Was sollte bei meiner Funktion für @ und % den erscheinen?



    define Job_AnwesendDaniel at +*00:01:00 { \
    use Net::Ping;; \
    my $ip = "192.168.1.100";; \
    my $p = Net::Ping->new("icmp", 9, 64);; \
    my $pingtest = $p->ping($ip);; \
    if ($pingtest && ($value{Anwesenheit_Daniel} eq "off")) { \
        fhem("set Anwesenheit_Daniel on");; \
        fhem(sendNotify('Daniel ist Anwesend  % @','Geraete Status geaendert','Geraete Status geaendert','Daniel ist Anwesend'));; \
    } \
    elsif (!($pingtest) && $value{Anwesenheit_Daniel} eq "on") { \
        fhem("set Anwesenheit_Daniel off");; \
        fhem(sendNotify('Daniel ist Abwesend % @','Geraete Status geaendert','Geraete Status geaendert','Daniel ist Abwesend'));; \
    } \
    }



    ChrisW

    @ der Gerätename
    % Der Status des Gerätes. On / Off oder was geändert wird. Das ist was internes von Fhem. In der Mail Funktion ist dies auch vorhanden.


    Raspberry PI3 mit allem möglichen.

    korbinian