Android App Notify

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

Vorheriges Thema - Nächstes Thema

Martin Thomas Schrott

Hi,

sorry hab ganz vergessen zurückzuschreiben.

@geodaten
Ich stelle mir soetwas vor wie: fhem sendet geo request an das gerät und das gerät gibt den aktuellen Standort zurück berechnet aus gps wenn verfügbar oder sonst eine andere Methode die gerade verfügbar ist: umts/gsm/wlan etc.
Würde soetwas gehen?
lG
Martin

fhem86

Zitat von: Martin Thomas Schrott schrieb am Fr, 12 April 2013 12:38Hi,

sorry hab ganz vergessen zurückzuschreiben.

@geodaten
Ich stelle mir soetwas vor wie: fhem sendet geo request an das gerät und das gerät gibt den aktuellen Standort zurück berechnet aus gps wenn verfügbar oder sonst eine andere Methode die gerade verfügbar ist: umts/gsm/wlan etc.
Würde soetwas gehen?
lG
Martin

Die App empfängt nur über den GCM Service von Google

Wenn so eine Funktion von mehr als einem gewünscht wird, kann ich eine eigene kleine APP dafür bauen.

Es gibt nur ein Problem:
Wie sollen die Daten an FHEM übermittelt werden, wenn du nicht in deinem WLAN bist. Dafür müsste es z.B. einen webserver geben der über das Internet erreichbar ist. Wenn du so etwas hast ist es kein Problem.

Vielleicht hast du ja eine andere Umsetzungs Idee für die Kommunikation Handy -> FHEM




Matscher

Zitat von: fhem86 schrieb am Do, 11 April 2013 20:26Neu:
  • 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

Gefällt mir. Danke für die schnelle Änderung. :)

Gruß,
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

fhem86

Neu:
  • Text To Speech


edit: kleiner Bugfix bitte nochmal laden :)

Martin Thomas Schrott

hallo

@geo ja fhem ist aus dem netz via fixer ip erreichbar. Du könntest in der app eine optionale rückgabe erlauben wenn eine ip od. Host für fehm hinterlegt ist. Anmeldung vgl. Gndfhem ? Wieso migriert ihr eigentlich nicht? Od. Mit dirk? Eure apps würden sich gut ergänzen.

@tts super danke. Aber wie funktioniert es? Hab noch nicht upgedated. Wie übergibt man den text für tts?

Ah noch was... Kannst du eine optionale übergabe eines wertes für die lautstärke erlauben? Falls ein alarm laut sein soll und dars gerät stumm ist.
Lg m

fhem86

@TTS du kannst es für jedes Icon auswählen

TTS aus,Parameter 1, 2, 3 oder 4

Für meine Rauchmelder steht jetzt in Parameter 1 (message) "Feueralarm Feueralarm Feueralarm Feueralarm Feueralarm Feueralarm Feueralarm Feueralarm Feueralarm Feueralarm Feueralarm"

Da spare ich mir die Feuer Sound Datei :)

fhem86

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";

}

}



Define in der Config:

define my_andnotify andnotify der_api_key

set my_andnotify regids regID_des_Smartphones
oder
set my_andnotify regids regID_des_Smartphones_1|regID_des_Smartphones_2|usw


Notify senden:

set my_andnotify send message|tickerText|contentTitle|contentText|icon

Beispiel:
set my_andnotify send hallo eins|hallo zwei|hallo drei|hallo vier|1


Vorteil:
  • Ein Device pro Smartphone
  • Oder ein Device für Smartphone1 und ein Device für Smartphone1 + Smartphone2

fhem86

Neu:
  • Notifys werden im Log gespeichert und können bis zur Löschung immer wieder aufgerufen werden.

fhem86

Bugfix:
  • Nach einiger Zeit (Stunden/am nächsten Tag) keine Notifys mehr (nach einem Reboot gings wieder) <- wahrscheinlich wegen tts (test läuft :))



fhem86

Neu:
  • Audio Lautstärke kann pro icon angepasst werden oder wie bisher die systemlautstärke

fhem86

Bugfix:
  • Aufblinken des Displays entfernt.
  • Hat nur kurz vibriert, wenn keine Topmeldung aktiviert war.

fhem86

Gibt es noch Verbesserungsvorschläge?

m.zielinski

Ich hätt da noch was... Notifys nachträglich ändern oder zumindist löschen wenn um z.b. eine Fenster offen warnung nur stehen zu lassen, wenn das fenster immernoch offen ist...
Das das schwierig wird ist mir klar...ist auch nur ne Idee.

Martin Thomas Schrott

Hallo zusammen,

ich denke das nachträgliche löschen wird eher nicht gehen außer der Google Dienst unterstützt das... hm... Obwohl wenn Android das entfernen von Messages via api zulässt könnte man eine removal message durch den Google dienst senden. Bin gespannt was der app-chef meint. :-)

Ich frag mich ob der Google dienst Messages eigentlich auch nachträglich zustellt wenn das Handy ausgeschalten war als fhem benachrichtigt hat. Mir kommt vor die Nachrichten gehen dann verloren. Könnte man das aktivieren oder anpassen oder gibt es da keine Mölichkeit Nachrichten auch zuzustellen wenn das Gerät wieder verfügbar ist?
Aus dem standby wacht es ja ohne Probleme auf, aber wenn es komplett abgeschalten war hatte ich bisher noch keine Benachrichtigungen gefunden auch wenn in der Zwischenzeit sicher etwas kommen hätte müssen.:-(
lG
Martin

fhem86

@Martin Thomas Schrott
Ich habe mein Handy ausgeschaltet
Zwei Notify gesendet
5min gewartet
Handy angeschaltet
Beide Notify sind angekommen

Kannst du das bitte so mal testen?

Hier steht -> http://developer.android.com/google/gcm/adv.html <-  "The default timeout is 4 weeks, unless the time_to_live flag is set." Also sollten die Nachrichten bis zu 4 Wochen ankommen.


@m.zielinski
Ich denke ich baue einen optionalen Parameter ein. In diesem kann man eine ID Frei vergeben.
Beispiel:


set mynotify send test|test|test|test|0|123456

set mynotify cancel 123456


damit würde die letzte notify mit der id 123456 gelöscht.

Wie findest du diese Idee?