Android App Notify

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

Vorheriges Thema - Nächstes Thema

m.zielinski

Hi,

Die Idee finde ich gut.

Gruß,
Michael

hfecht

Guten Abend Zusammen,
ich versuche mich auch daran, diese Funktion bei mir (Rapsberry) zum Laufen zu bekommen.

JSON habe ich übrigens so installiert:
   sudo apt-get install libjson-any-perl

Die o.g. Fehlermeldung erhalte ich auch - ich have versucht, $back wegzulassen, erhalte aber keine Notify Nachrichtungen.

"Global symbol "$back" requires explicit package name at /usr/share/fhem/FHEM/99_Utils.pm"

Viele Grüße
Holger

fhem86

benutzt du dieses -> Link <- Modul ?

Hast du das jeweilige Notify Icon in der App aktiviert?

Hast du die regID 100% richtig eingetragen?

Wenn ja mach mal aus https http -> wenn das geht hast du noch ein ssl problem

Matscher

Hi,

ist es möglich die Systemeinstellungen nur für die App kurzzeitig zu ändern, wenn ein Ereignis eintrifft? Habe das Problem, das wenn an der Lautstärker "gespielt" wird, meist das Tablet auf komplett stumm gestellt wird. Somit auch kein Vibra etc. ...

Danke und Grüße,
Matscher
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

tmak

Hallo,

ich teste gerade die App und den Service und habe auch das Gefühl alles richtig konfiguiert zu haben.

Das Problem bei mir ist jedoch das die App wenn eine Notification ankommen sollte einfach abstürzt (wurde unerwartet beendet). Die Nachrichten setze ich zur Zeit über das PHP Skript auf meinem Webspace ab. Spielt der Inhalt der Nachrichten eine Rolle?

Ich teste die App auf einem Nexus 4 mit Stock ROM (gerootet), hat jemand auf diesem Gerät schon positive oder negative Erfahrungen gemacht? Kann ich irgendwie beim debuggen helfen?

LG tmak

fhem86

Zitat von: tmak schrieb am Fr, 26 April 2013 09:51Hallo,

ich teste gerade die App und den Service und habe auch das Gefühl alles richtig konfiguiert zu haben.

Das Problem bei mir ist jedoch das die App wenn eine Notification ankommen sollte einfach abstürzt (wurde unerwartet beendet). Die Nachrichten setze ich zur Zeit über das PHP Skript auf meinem Webspace ab. Spielt der Inhalt der Nachrichten eine Rolle?

Ich teste die App auf einem Nexus 4 mit Stock ROM (gerootet), hat jemand auf diesem Gerät schon positive oder negative Erfahrungen gemacht? Kann ich irgendwie beim debuggen helfen?

LG tmak


das php script ist veraltet.

Wenn du es trotzdem nutzen willst, musst du alle diese Attribute übergeben:

data             => {
message => $param[0],
tickerText => $param[1],
contentTitle => $param[2],
contentText => $param[3],
timestamp => $unix_timestamp,
icon => $param[4]
}


tmak

Zitat von: fhem86 schrieb am Fr, 26 April 2013 20:13das php script ist veraltet.

Ok jetzt hab ichs, das PHP Skript wollte ich nur für einen ersten kurzen Test verwenden. Mit dem FHEM Plugin funktioniert es nun.

Nur zum Verständnis: Wenn ein Notify am Mobilgerät angekommen ist und ich es öffne, kann ich nicht in die Settings der App zurückspringen. Ich schiesse dann immer die App manuell ab um wieder in die Settings zu kommen. Ist das so gedacht?

Ich würde die App gerne einsetzen um mein Tablet über FHEM aufwachen zu lassen und teste dies gerade. Hierfür wäre eine Integration als Tasker Plugin extrem hilfreich. Man könnte dann über Tasker beliebige Aktionen ablaufen lassen wenn eine Notification eintrifft. Wäre es möglich dies zu integrieren?

fhem86

Zitat von: tmak schrieb am Sa, 27 April 2013 17:54Nur zum Verständnis: Wenn ein Notify am Mobilgerät angekommen ist und ich es öffne, kann ich nicht in die Settings der App zurückspringen. Ich schiesse dann immer die App manuell ab um wieder in die Settings zu kommen. Ist das so gedacht?

Ich würde die App gerne einsetzen um mein Tablet über FHEM aufwachen zu lassen und teste dies gerade. Hierfür wäre eine Integration als Tasker Plugin extrem hilfreich. Man könnte dann über Tasker beliebige Aktionen ablaufen lassen wenn eine Notification eintrifft. Wäre es möglich dies zu integrieren?

Warum willst du von der Notify in die Settings(Von der Notify App)?

Und warum musst du dafür die App abschiessen?

Im Grunde läuft meine App garnicht im Hintergrund.

Es gibt quasi nur ein add-on für den Google Push Dienst (GCM)

Wenn ein Push von GCM kommt, wird das Android Device geweckt und das hinterlegte Add-on ausgeführt.

Dieses erzeugt Android System Notifys. Wenn du nun eine Notify auswählst, wird eine Activity von meiner App gestartet (Das Notify Fenster :))


Das Notify Fenster ist ein Webbrowser in dem du z.B. auch die FHEM Weboberfläche laden könntest.


Beschreibe dein Problem/Wunsch mal bitte genauer. Bisher habe ich das noch nicht verstanden.


tmak

Zitat von: fhem86 schrieb am Sa, 27 April 2013 19:57Warum willst du von der Notify in die Settings(Von der Notify App)?

Und warum musst du dafür die App abschiessen?

Im Grunde läuft meine App garnicht im Hintergrund.

Es gibt quasi nur ein add-on für den Google Push Dienst (GCM)

Wenn ein Push von GCM kommt, wird das Android Device geweckt und das hinterlegte Add-on ausgeführt.

Dieses erzeugt Android System Notifys. Wenn du nun eine Notify auswählst, wird eine Activity von meiner App gestartet (Das Notify Fenster :))

Das Notify Fenster ist ein Webbrowser in dem du z.B. auch die FHEM Weboberfläche laden könntest.

Beschreibe dein Problem/Wunsch mal bitte genauer. Bisher habe ich das noch nicht verstanden.


Im Moment passiert folgendes:
1. Ich schicke eine Notify an das Gerät
2. Notify kommt an (Display geht leider nicht an, dies wäre mein Ziel)
3. Ich öffne die Notify
4. Dann will ich ggf. Änderungen an den Settings machen, ich komme aber wenn ich die Notify Setup App starte nicht mehr an den Screen ran an dem die IDs und die Buttons angezeigt werden. Nicht mit dem Back Button und mit keiner Aktion auf dem Screen.

Was ich erreichen will ist das das Display beim Eintreffen einer Notify angeht. In meinem Anwendungsfall müsste noch nicht einmal eine Nachricht in der Notification Bar des Geräts erscheinen. Idealerweise würde ein Notify eine Aktion in Tasker triggern.

Zur Zeit komme ich mit der App aber wie beschrieben noch nicht so richtig klar ;)

LG tmak

fhem86

Neu:
  • wake Befehl (Display an)
  • sleep Befehl (Display aus)

Modul 99_andnotify.pm:

package main;

use JSON;
use HTTP::Request;
use LWP::UserAgent;
use IO::Socket::SSL;

my @gets = ('dummy');

sub
andnotify_Initialize($)
{
my ($hash) = @_;
 $hash->{DefFn}    = "andnotify_Define";
 $hash->{StateFn}  = "andnotify_SetState";
 $hash->{SetFn}    = "andnotify_Set";
 $hash->{AttrList} = "loglevel:0,1,2,3,4,5";

}

sub
andnotify_SetState($$$$)
{
  my ($hash, $tim, $vt, $val) = @_;

  $val = $1 if($val =~ m/^(.*) \d+$/);
  return "Undefined value $val" if(!defined($it_c2b{$val}));
  return undef;
}


sub
andnotify_Define($$)
{
 my ($hash, $def) = @_;

 my @args = split("[ \t]+", $def);

 if (int(@args) < 1)
 {
  return "energy_Define: too much arguments. Usage:\n" .
         "define <name> andnotify <apikey>";
 }

 $hash->{APIKEY} = $args[2];
 $hash->{STATE} = 'Initialized';

 Log 3, "$hash->{NAME} APIKEY: $hash->{APIKEY}";

 return undef;
}

sub andnotify_Set($@)
{
  my ($hash, @a) = @_;
  my $name = $hash->{NAME};
  my $apikey = $hash->{APIKEY};
  my $count = @a;

  my $arg    = lc($a[1]);      
  my $cont1  = ucfirst($arg);  
  my $cont2 = "";
  my $cont3 = "";
  my $cont4 = "";
  my $cont5 = "";
  my $cont6 = "";
  my $cont7 = "";
  my $cont8 = "";
  my $cont9 = "";

  if (defined $a[2]) { $cont2 = $a[2]}
  if (defined $a[3]) { $cont3 = $a[3]}
  if (defined $a[4]) { $cont4 = $a[4]}
  if (defined $a[5]) { $cont5 = $a[5]}
  if (defined $a[6]) { $cont6 = $a[6]}
  if (defined $a[7]) { $cont7 = $a[7]}
  if (defined $a[8]) { $cont8 = $a[8]}
  if (defined $a[9]) { $cont9 = $a[9]}

  my $fullcmd="$a[2]";
 
  for (my $i=3;$i<$count;$i+=1){ $fullcmd="$fullcmd $a[$i]";}
 
  my @param = split(/\|/, $fullcmd);

if ( $arg eq "regids" )
{
$hash->{REGIDS}=$fullcmd;
Log 3, "AndNotify $hash->{NAME} SET REGIDS: $hash->{REGIDS}";
}

if ( $arg eq "send" )
{
my $client = LWP::UserAgent->new();
my @registration_ids = split(/\|/, $hash->{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 => $param[0],
tickerText => $param[1],
contentTitle => $param[2],
contentText => $param[3],
timestamp => $unix_timestamp,
icon => $param[4]
}
};
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";
}

if ( $arg eq "wake" )
{
my $client = LWP::UserAgent->new();
my @registration_ids = split(/\|/, $hash->{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             => {
wake => 1
}
};
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 wake gesendet";
}

if ( $arg eq "sleep" )
{
my $client = LWP::UserAgent->new();
my @registration_ids = split(/\|/, $hash->{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             => {
sleep => 1
}
};
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 sleep gesendet";
}

}



Display an:

set my_andnotify wake


Display aus (Funktioniert nur, wenn keine anderen Apps/oder der Benutzer die Kontrolle übernehmen):

set my_andnotify sleep

tmak

Vielen Dank für die schnelle Reaktion und die Erweiterung, funktioniert wunderbar!

Falls noch Erweiterungswünsche erlaubt sind ;) :

- Ausgabe einer (optionalen) Sprachnachricht beim Wake up (TTS)
- Einbindung in Tasker als Plugin

Ich plane derzeit ein Tablet als Wandlösung für die zentrale FHEM Steuerung und Deine App ist bislang der geeignetste Ansatz hierfür. Ich möchte nicht so gerne auf NMA setzen.

Super Arbeit, vielen Dank nochmal!

fhem86

Zitat von: tmak schrieb am So, 28 April 2013 18:44Vielen Dank für die schnelle Reaktion und die Erweiterung, funktioniert wunderbar!

Falls noch Erweiterungswünsche erlaubt sind ;) :

- Ausgabe einer (optionalen) Sprachnachricht beim Wake up (TTS)
- Einbindung in Tasker als Plugin

Ich plane derzeit ein Tablet als Wandlösung für die zentrale FHEM Steuerung und Deine App ist bislang der geeignetste Ansatz hierfür. Ich möchte nicht so gerne auf NMA setzen.

Super Arbeit, vielen Dank nochmal!

Was soll dieser Tasker sein?

Für TTS kannst du doch einfach eine Notify senden.

tmak

Tasker ist ein Makrotool für Android, mit dem man sehr flexibel auf Events reagieren und Makros ablaufen lassen kann. Das Tool kann eben auch Plugins einbinden, die dann entsprechend Makros triggern können. Damit könnte man dann so ziemlich alles anstellen was mit Android geht.

Homepage: Tasker

fhem86

Zitat von: tmak schrieb am So, 28 April 2013 19:15Tasker ist ein Makrotool für Android, mit dem man sehr flexibel auf Events reagieren und Makros ablaufen lassen kann. Das Tool kann eben auch Plugins einbinden, die dann entsprechend Makros triggern können. Damit könnte man dann so ziemlich alles anstellen was mit Android geht.

Homepage: Tasker

Beschreibe mal ein Beispiel:

Notify FHEM Befehl -> Notify App -> Tasker App Aktion


tmak

Zitat von: fhem86 schrieb am So, 28 April 2013 19:32Beschreibe mal ein Beispiel:

Notify FHEM Befehl -> Notify App -> Tasker App Aktion


Ich beschreibe das einmal an einem einfachen Beispiel:

Bewegungsmelder löst aus
-> FHEM schickt ein Notify mit einer Kennung (send, wake, sleep etc.) an das Android Device
-> Die Notify App (als Plugin für Tasker) sendet ein Event an Tasker mit der Kennung
-> in Tasker ist dann eine Makroabfolge definiert die auf dieses Event getriggert wird (beispielsweise: Mache das Display für XX Sekunden an, Wechsel den Hintergrund des Launchers und spiele ein MP3 ab)

Das ist jetzt nur ein einfaches Beispiel, dieses Makro könnte man evtl. als eine Art Türklingel verwenden (dann natürlich mit einem Taster als Trigger für FHEM).

Tasker ist ein extrem mächtiges Tool, man kann so ziemlich alles Skripten was mit dem Telefon möglich ist.

Wenn die Implementierung nicht allzu viel Aufwand ist würden sich hiermit ganz neue Möglichkeiten ergeben, auf ein Notify zu reagieren.