Android App Notify

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

Vorheriges Thema - Nächstes Thema

Steffen

Hallo!

Erstmal muss ich sagen jetzt wo es endlich läuft;-) ist dein Tool wirklich Super, genau sowas hatte ich noch gesucht!

Jetzt hätte noch eine frage, könnte man es auf andere Geräte(Android) mit dem gleichen Notify bekommen oder vielleicht auch an mehrere gleichzeitig???


Mfg Steffen

ChrisW

Hallo hab da was für 2 Geräte :
Musst halt in der APP des Gerätes bestimmen was für Meldungen benachrichtigt werden. Es wird überall 1:1 das selbe hingeschickt.


sub sendNotify($$$$$) {

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

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

  my $apikey = 'MEINAPIKEY';
  my $registration_id1 = 'GERÄTE REGISTRATIONID1';
  my $registration_id2 = 'GERÄTE REGISTRATIONID2';
  my $unix_timestamp = time*1000;
 
  my $data = {
      registration_ids => [ "$registration_id1", "$registration_id2" ],
      data             => {
        message => $message,
tickerText => $tickerText,
contentTitle => $contentTitle,
contentText => $contentText,
timestamp => $unix_timestamp,
icon => $icon
      }
  };
 
  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);
 

  $client->request($req,$back);

  Log 3, "Notify gesendet";

}

Raspberry PI3 mit allem möglichen.

fhem86

Neue Features:
  • Bis zu 24 verschiedene Icons/Meldungen gleichzeitig
  • Es gibt eine große Anzahl an auswählbaren Icons (Wenn jemand eine Icon vermisst, bitte an mich melden)


(siehe Anhang / see attachement)


(siehe Anhang / see attachement)


(siehe Anhang / see attachement)


dkrause

Hi,
vielen Dank für die App. Läuft mittlerweile super und die Notifications kommen prompt.

Habe die App in Kombination mit FHEM auf der Fritzbox 7360 laufen. Dazu mußte ich die Perl-Module für JSON (aus CPAN) händisch in das Perl-Verzeichnis kopieren. Außerdem mußte ich beim Absetzen des Requests den back-Parameter rausnehmen, da immer ein Kompilierungsfehler kam ("Global symbol "$back" requires explicit package name at ./FHEM/99_myUtils.pm"). Auf der Telnet-Konsole kommt jetzt zwar eine Meldung ("Use of uninitialized value $cmd in pattern match (m//) at fhem.pl line 630"), aber die Notifications gehen wie gesagt trotzdem raus.
Zwei weitere Punkte muss man scheinbar auf der Fritzbox noch beachten:
- FHEM muß unter root laufen, mit dem boxusr99 lief es gar nicht
- die Google-URL muß mit HTTP anstatt HTTPS angegeben werden

Was ich mir noch wünschen würde, wäre eine Option zum Aufwecken des Android-Geräts aus dem Sleep-Modus. So etwas scheint zu gehen. Unter "http://www.androidhive.info/2012/10/android-push-notifications-using-google-cloud-messaging-gcm-php-and-mysql/" ist das beschrieben (unter "Waking up device"). Ich bin leider nicht der Android-Entwickler und weiß nicht, ob das in dieser Konstellation hier funktioniert.

Gruß
Daniel

fhem86

Neu:
  • Vibrationsdauer kann angegeben werden

@dkrause
Für https fehlt dir wahrscheinlich das passende perl ssl Modul.

Die "Waking up device" Funktion ist schon ewig eingebaut. ChrisW hatte das Problem auch mit seinem Android 2.3.
Das war aber schon durch meine Änderung behoben.

Was für ein Gerät + Android Version hast du den?

Im Normalfall, müsste dein Display bei einer Notifikation kurz aufblinken oder bei einer Topmeldung angehen.

ChrisW

So läuft noch immer rund bei mir.
Paar Vorschläge
Import/Export der Einstellungen ( Da ich mehrer Geräte habe das würde schon Zeit Sparen )
Kopieren der RegID bzw direktes Verschicken ? Ist schon recht fummelig bei mir :D Oder man muss alles Abtippen.
Raspberry PI3 mit allem möglichen.

fhem86

Neu:
  • RegID in Zwischenablage kopieren Funktion

fhem86

Neu:
  • backup/recover Funktion

Martin Thomas Schrott

Hi zusammen,

danke für das tolle Modul und die App, werde es demnächst testen!

Völlig ungetestet hier eine Idee (weil nachgefragt) um eine Nachricht flexibel an mehrere (oder nuer ein) Geräte zu senden.
Die Idee dabei: Die Register ID des Gerätes wird direkt beim Aufruf angegeben und mehrere durch | getrennt, wenn gewünscht.
Falls jemand Lust hat einfach mal testen ob es so geht, sonst verwerfen. ;-)

lG
Martin




#sendNotify Modul für FHEM
# Einstellungen:
#API-Key:AIzaSyBofcqSTa0wWBusTJyvEeOsygowATW3Vok
#ProjectID:526869440043
#
#Aufruf:
#{sendNotify ("message", "tickerText", "contentTitle", "contentText", "icon", "register|id|s");}
sub sendNotify($$$$$$) {
my ($message, $tickerText, $contentTitle, $contentText, $icon, $regIds) = @_;
use JSON;
use HTTP::Request;
use LWP::UserAgent;
use IO::Socket::SSL;
my $client = LWP::UserAgent->new();
my $apikey = 'AIzaSyBofcqSTa0wWBusTJyvEeOsygowATW3Vok';
my @registration_ids = split($regIds, "|");
my $unix_timestamp = time*1000;
my $data = {
registration_ids => @registration_ids,
data             => {
message => $message,
tickerText => $tickerText,
contentTitle => $contentTitle,
contentText => $contentText,
timestamp => $unix_timestamp,
icon => $icon
}
};
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);
$client->request($req,$back);
Log 3, "Notify gesendet";
}


fhem86

Funktioniert nicht, weil perl und json arrays nicht so einfach zu verbinden sind :)

Meine Lösung:

Fhem Modul:


sub sendNotify($$$$$$$) {
my ($message, $tickerText, $contentTitle, $contentText, $icon, $apikey, $regIds) = @_;
use JSON;
use HTTP::Request;
use LWP::UserAgent;
use IO::Socket::SSL;
my $client = LWP::UserAgent->new();
my @registration_ids = split(/ /,$regIds);
my $unix_timestamp = time*1000;

my $data = {
registration_ids => [ "$registration_ids[0]", "$registration_ids[1]", "$registration_ids[2]", "$registration_ids[3]", "$registration_ids[4]", "$registration_ids[5]", "$registration_ids[6]", "$registration_ids[7]", "$registration_ids[8]", "$registration_ids[9]" ],
data             => {
message => $message,
tickerText => $tickerText,
contentTitle => $contentTitle,
contentText => $contentText,
timestamp => $unix_timestamp,
icon => $icon
}
};



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);
$client->request($req);

Log 3, "Notify gesendet";

}



Fhem Config Beispiel:

define apikey dummy
set apikey derlangeapikey
define regID1 dummy
set regID1 dersuperlangeregkey1
define regID2 dummy
set regID2 dersuperlangeregkey2

define test_notify_test dummy
attr test_notify_test room notify_test
attr test_notify_test setList on off
define test_notify_test_n notify test_notify_test {fhem(sendNotify("test","test","test","test",1,Value("apikey"),Value("regID1")." ".Value("regID2")))}



RegIDs werden durch ein Leerzeichen getrennt. Das "|" Zeichen funktioniert scheinbar nicht mit split.

Diese Lösung hat den Vorteil, dass die RegIDs und der apikey in der FHEM Konfig definiert werden können :)

Danke für deine Idee

dkrause

@fhem86: bei mir läuft das jetzt mit Notifications. Ich habe nochmal die letzte Version der App installiert und da gesehen, daß defaultmäßig Topmeldungen deaktiviert sind. Ich meine, das war anfangs immer aktiviert. Aber egal, funktioniert. Ich habe übrigens mehrere Android-Geräte (4.0, 4.1, 4.2). Auf dem 4.0er (Archos 101 G9 Tablet) und dem 4.1er (Samsung Galaxy S2) geht der Screen bei Topmeldungen an, das 4.2er habe ich noch nicht getestet. Allerdings dauert es manchmal bis zu 5 Minuten, bis die Notifications eintreffen. Ich habe da trotz intensivem Testen noch keine Systematik feststellen können.

Gruß
Daniel

Martin Thomas Schrott

Hi zusammen!

@fhem86 danke, ja musste ich auch feststellen. Hab bisher auch keine bessere Lösung gefunden als deine :-(


Das Benachrichtigen funktioniert super! Mein S2 mit Android 4.2 macht den Bildschirm auch ohne Topmeldung kurz an und wieder aus - warum auch immer, aber ich denke das hat Einstellungsgründe vom System her und hängt nicht von der app ab.

Könntest du noch eine Spielerei einbauen, die Dirk in seiner Fullscreen app eingebaut hat: Die Systemstimme den übergebenen Text oder Titel per tts vorlesen lassen? Das wäre super.

Und ... könnte man auch die geodaten aus fhem heraus für die geräte abfragen?

Danke für die tolle App!
Martin

fhem86

@dkrause
Topmeldung default "an" war ein Anzeigefehler im Konfigdialog. "aus" war schon immer default.

Bei mir kommen die Notifys im WLAN < 1 Sekunde an (sofort) und im E-Plus(Handynetz) ca. 1-2 Sekunden

Mein Smartphone -> Galaxy S2 Jelly Bean 4.1.2

@Martin Thomas Schrott

TTS hört sich gut an -> steht auf der ToDo Liste :)

Das mit den Geodaten verstehe ich nur noch nicht. Kannst du das mal genauer erklären?

Matscher

Super App, gerade installiert und ausprobiert. Genau das was ich brauche. :)

Notification kommen im WLAN, gefühlt, sofort an :)

Ich finde nur den Slider etwas klein und ist mir am Anfang gar nicht aufgefallen. Nur als der Back Button nicht funktionierte, dachte ich wieder and das "Feature" :)

Benutze die App mit Samsung Galaxy Tab 2 10.1

Viele Grüße.
Rasp 3
CUL V3 868Mhz + nanoCUL 868Mhz als RFR + nanoCUL 868Mhz für Homematic + SIGNALduino
Zigbee CC2531 - Aquara TempSensor
MySensors Ethernet Gateway, Water meter, Gas meter
Modul: 09_CUL_FHTTK.pm (assumed), culfw part HAS_FHT_TF

fhem86

Neu:
  • Schließen der Notify durch Swipe/Touch links -> rechts oder rechts -> links (Vorteil: Auch auf Tablets einfach :))
  • Music wird durch das schließen der Notify abgebrochen