kostenlose Push-Benachrichtigung mit PushNotifier

Begonnen von xusader, 17 Juli 2014, 19:02:49

Vorheriges Thema - Nächstes Thema

mkress

Tolle Sache!!!

Was mich momentan noch stört.
Ich habe ein Notify definiert, das bein einem bestimmten Event eine Push-Message verschickt - funktioniert alles wunderbar und problemlos.
Was mich stört ist, dass die Nachricht immer im FHEM-Logfile auftaucht - das Attribute "verbose" wird wohl nicht berücksichtigt?!?

mfg
Markus

Scrat2006

Hallo,

herzlichen Dank für die Tipps. Funktioniert soweit schon wirklich gut.
Allerdings würde ich gerne PushNachrichten an mehrere Geräte senden und ich habe bisher
noch nicht gefunden wie ich mehrere IDs angeben soll.
Kann mir jemand helfen?

Schon mal im vorraus herzlichen Dank für eure Bemühungen.

pirmanji

Hallo Scrat2006,

diesen Wunsch hege ich auch :-) So wie ich Doku und Code verstehe, ist es aber bisher nicht möglich eine Nachricht mit einem Streich an mehrere Geräte zu senden.
Ich habe mir beholfen, indem ich für jedes Ziel-Gerät ein extra FHEM-Device angelegt habe, jeweils mit der entsprechenden Geräte-ID in der Definition. Die Devices heißen dann z.B. pushmsg1, pushmsg2 etc. So dass ich mit "set pushmsg.* message Text" den Text an alle Geräte senden kann.

Aber:

Es begab sich, wie ich heute früh feststellen musste, dass einige der Geräte inzwischen ein Android-Softwareupdate erhielten und danach von PushNotifier eine neue Geräte-ID erhielten. Somit konnten die Nachrichten gar nicht mehr ankommen, was zunächst auch nicht bemerkt wurde. Ich musste erst die entsprechend neuen Geräte IDs eintragen.

Da es teilweise relevant gewesen hätte sein können, dass die Nachrichten ankommen, wäre schon wünschenswert, wenn das Modul so funktionieren würde, dass man in der Definition

define pushmsg PushNotifier <apiToken> <appname> <user> <password> <deviceID>

für <deviceID> einen Platzhalter (z.B. *) oder regex eintragen könnte, so dass die Nachricht dann an alle (oder regex) Geräte gesendet würde.

Aber das nur als Anregung.

Viele Grüße!
Raspberry Pi 3 + COC SlowRF 868.30MHz (FS20 S8-3 + 2x DS18B20) + 1x SCC SlowRF 433.92MHz (3x TX17 + 1x TX3) + JeeLink (4x PCA301) + MaxCube

xusader

@mkress
Bei mir taucht mit verbose 3 in global nirgends eine Nachricht im log auf.

xusader

@pirmanji
Code Vorschläge nehme ich gern entgegen.

Scrat2006

danke für die Info. habe mir auch erstmal beholfen das ich für jedes Gerät eine Message los senden.
Funktioniert auch sehr gut.

Ich habe dies an die PRECENT funktion gekoppelt. D.h. wenn ich die Wohnung verlasse und noch Fenster offen sind, bekomme ich eine Meldung.
Leider bekomme ich immer zwei Meldungen. Es werden auch zwei Meldungen direkt hinter einander im Log aufgeführt.
Hat hier evt. jemand noch eine Idee was es sein könnte?


pirmanji

@xusader:

Und ich hatte gedacht, ich komm drum rum! ;-)

Ich dachte mir etwas wie sowas hier (70_PushNotifier.pm):

#####################################
sub
PushNotifier_Send_Message
{
  my $hash = shift;
  my $msg = join(" ", @_);
  $msg =~ s/\_/\n/g;

  my $result="";

  while ($hash->{devices} =~ /title:([^,.]+),id:(\d+),model:([^,^\].]+)/g) {
      my ($nd_title, $nd_id, $nd_model) = ("$1", "$2", "$3");

      # Log3 (undef, 3, "PushNotifier: Send Message $msg to device title: $nd_title, id: $nd_id, model: $nd_model");

      if ( $nd_id =~ m/$hash->{deviceID}/ || $nd_title =~ m/$hash->{deviceID}/ || $nd_model =~ m/$hash->{deviceID}/ ) {
        my $response = LWP::UserAgent->new()->post('http://a.pushnotifier.de/1/sendToDevice',
          ['apiToken' => $hash->{apiToken},
           'appToken' => $hash->{appToken},
           'app' => $hash->{app},
           'deviceID' => $nd_id,
           'type' => 'MESSAGE',
           'content' => "$msg"]);

        my $error_chk = $response->as_string;

        if($error_chk =~ m/"status":"ok"/) {
          $result.="OK! Message sent to $nd_title (id: $nd_id)\n\n$msg\n\n";
        }
        else
        {
          $result.="ERROR sending message to $nd_title (id: $nd_id)\n\nResponse:\n$error_chk\n\n";
        }
      }
    }
  return $result;
}
#####################################

Somit ist es möglich in der Definition statt der ID ein RegEx anzugeben. Mit .* wird jetzt an alle Geräte gesendet. In dieser Version werden auch der Device-Title und Device-Model mit dem RegEx verglichen, so dass man in der Definition z.B. "EMail" angeben könnte, und die Nachricht wird nur an alle E-Mail-Adressen gesendet, oder "Galaxy.*" und es wird nur an die Modelle eines gewissen Geräteherstellers abgesetzt, oder eine Aufzählung von IDs oder, oder, oder...aber das vergleicht natürlich sehr großzügig - ich weiß noch nicht, ob man es so lassen sollte oder doch besser auf die ID beschränken.

Würde mich freuen, wenn der Code so oder ähnlich aufgenommen würde.

Viele Grüße!!!

Raspberry Pi 3 + COC SlowRF 868.30MHz (FS20 S8-3 + 2x DS18B20) + 1x SCC SlowRF 433.92MHz (3x TX17 + 1x TX3) + JeeLink (4x PCA301) + MaxCube

xusader

@pirmanji

Super, danke! Teste gerade und werde dann wohl heute Abend einchecken. ;)

xusader

@pirmanji

Ist engecheckt, wird dann wohl ab morgen verfügbar sein. Ich muss dann nur noch das Wiki anpassen.

xusader

Eine neue Version des PushNotifier-Moduls ist eingecheckt.

Dank tatkräftiger Unterstützung von pirmanji ist es nun möglich ein Define für einzelne Geräte, Gerätegruppen oder für alle Geräte anzulegen.

Siehe: http://www.fhemwiki.de/wiki/PushNotifier

pirmanji

Raspberry Pi 3 + COC SlowRF 868.30MHz (FS20 S8-3 + 2x DS18B20) + 1x SCC SlowRF 433.92MHz (3x TX17 + 1x TX3) + JeeLink (4x PCA301) + MaxCube

eldrik

#146
Hi,

ich habe mir die Version aus dem SVN geladen, so ganz scheint es aber noch nicht wie gewünscht zu funktionieren.

Ich habe derzeit 4 Geräte gebe ich die Regex mit .* an werden 3 der 4 Geräte gewählt (wobei die ausgewählten 3 Devices nicht immer gleich sind) gebe ich das fehlende Device wie gehabt mit der ID als Regex an wird korrekt nur an dieses gesendet,

devices
title:iPhone3,1,id:175,model:iPhone3,1,title:iPhone 4,id:176,model:iPhone3,1,title:iPad 3,id:245,model:iPad3,1,title:iPad 3,id:1179,model:iPad3


Regex .*

OK! Message sent to iPhone 4 (id: 176)

test

OK! Message sent to iPad 3 (id: 245)

test

OK! Message sent to iPad 3 (id: 1179)

test



Edit: beim Regex * stürzt sogar Fhem direkt mit der Meldung im Log ab
ZitatQuantifier follows nothing in regex; marked by <-- HERE in m/* <-- HERE / at ./FHEM/70_PushNotifier.pm line 96.

Greetz
Eldrik

xusader

War bei mir auch so. Von drei Geräten liefen zwei sofort.
Ich habe das nicht funktionierende Gerät auf http://pushnotifier.de entfernt, neu angelegt, mit Namen,
und dann Fhem neu gestartet.
Nach ein, zwei Versuchen lief es dann (iOS9).

eldrik

Hi,

die Geräte funktionieren ja, es werden nur nicht alle durch den regex .* ausgewählt bzw. die Auswahl wechselt.

Des weiteren sollte man das Modul bzw. die Auswahl der regex schon dahingehend absichern, dass ein einfaches * fhem nicht zum Absturz bringt.

Greetz
Eldrik

xusader

@eldrik
Zwei Geräte mit dem selben Namen (iPad 3)?