Moin,
da ich für andere Projekte NotifyMyAndroid auch schon nutze, habe ich mir mal ein wenig was zusammengeschrieben, um NMA auch in einer Multiuser-Umgebung zu nutzen.
Der Code greift direkt auf die API von NMA zu und benötigt keine sendmail.
Damit sind auch Umlaute kein Problem mehr.
fhem86: Soll deine App nicht untergraben! Ich wollte halt nicht noch mehr Apps auf meinem Phone...
99_myUtils.pmsub
NMA_send($$$$){
# 2013V0.1 #
############################################################
# Funktion, um NotifyMyAndroid leichter zu senden #
# #
#Aufruf: {NMA_send("Betreff","Nachricht",Priorität,"User")}#
############################################################
########### Variablen aus Funktionsaufruf bilden ###########
my $subject = $_[0];
my $message = $_[1];
my $priority = $_[2];
my $user = $_[3];
if ($priority == "") {$priority == 0}
###################### EINSTELLUNGEN #######################
# User und dazugehörige NotifyMyAndroid-ID erfassen, #
# soll die Funktion geloggt werden und FritzBox #
############################################################
my $FB = 1; # 0=keine FRITZ!Box, 1=fhem läuft auf FRITZ!Box
my $Log = 0; # 0=kein Eintrag im Logfile, 1=Eintrag im Logfile
my @usr_List =
( "Florian:1234567890abcdef1234567890abcdef1234567890abcdef"
);
# Listenformat:
#( "Name1:API-Key1",
# "Name2:API-Key2"
#);
# nach dem letzten Listeneintrag KEIN Komma! Sonst immer!
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
#!!!!!!!!!!!!!!!!! ES GEHEN NUR API-KEYS !!!!!!!!!!!!!!!!!!#
# Wenn kein API-Key vorhanden, #
# auf http://www.notifymyandroid.com einloggen und im Menü #
# "My Account" unter "Manage my API keys" einen #
# API-Key erstellen. #
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
## Prioritäten: ##
# -2 = Very Low #
# -1 = Moderate #
# 0 = Normal #
# 1 = High #
# 2 = Emergency #
##################
my $application = "FHEM";
## Benutzer suchen, Daten splitten, Ausgaben vorbereiten ###
my $usr_ListHash = {};
foreach(@usr_List)
{
my @usr_ListLine = split(/:/, $_);
$$usr_ListHash{$usr_ListLine[0]} = $usr_ListLine[1];
}
my $apikey = $$usr_ListHash{$user};
if (!defined $$usr_ListHash{$user})
{
Log 0, ("$user not found\n");
} else {
## Und ab dafür Richtung Cell-Phone und ggf. ins Logfile ###
my $url = "http://www.notifymyandroid.com/publicapi/notify";
my $put = "apikey=".$apikey."&application=".$application."&event=".$subject."&description=".$message."&priority=".$priority;
fhem (CustomGetFileFromURL(0,$url,4,$put,$FB));
if ($Log == 1) {Log 3, ("Der Benutzer ".$user." erhielt die Benachrichtigung: ".$subject."; ".$message)}
}
}
Geplante Codeänderungen:
- Auswertung der Rückgabewerte von notifymyandroid.com
- die aktuell obligatorischen Übergabewerte Priorität und User optional machen
- Absender derzeit immer FHEM. Geplant: Freie Eingabe in Übergabewert
(kann jetzt schon über die Variable my $application = "FHEM"; fest geändert werden
Ein{NMA_send("Watchdog","Watchdog Heizung Bad ausgelöst!",2,"Florian")}
erzeugt auf meinem Androiden:(!) FHEM 15:55
[] Watchdog
Watchdog Heizung Bad ausgelöst!
und im Log:2013.05.09 15:55:18 3: Der Benutzer Florian erhielt die Benachrichtigung: Watchdog; Watchdog Heizung Bad aussgelöst!
Hi, habe das Modul seit gestern laufen und es funktioniert wunderbar! Vielen Dank!
Zwei Anmerkungen:
1) Ich habe FHEM auf einem Raspberry Pi laufen (hinter einer Fritzbox) und hatte daher ursprünglich $FB auf 0 gesetzt. Das funktioniert aber nicht. Mit 1 klappt aber alles wunderbar.
2) Gibt es eine Möglichkeit die API über https zu nutzen?
Viele Grüße,
Marc
Hallo,
funktioniert prinzipiell gut, aber in dieser Zeile
if ($priority == "") {$priority == 0}
solltest Du nochmal die Syntax überprüfen. Im if() sollte es eq anstatt == heißen und warum in der Zuweisung der Null zwei = stehen, verstehe ich grade auch nicht.
Es gibt übrigens auch entsprechende Fehlermeldungen auf der Konsole.
Useless use of numeric eq (==) in void context at ./FHEM/99_myUtils.pm line 47.
Argument "" isn't numeric in numeric eq (==) at ./FHEM/99_myUtils.pm line 47.
Viele Grüße
Udo
interessanterweise erhalte ich eine Benachrichtigung mit diesem Tool immer doppelt auf mein Handy. Warum ist mir noch völlig unklar.
Die von Dir erwähnte Änderung der Applikation als Absender wäre doch relativ einfach durch einen (optionalen - aus Kompatibilitätsgründen) fünften Parameter beim Funktionsaufruf umsetzbar, oder habe ich da grade einen Denkfehler?
Hallo betateilchen,
erst mal bitte ich vielmals um Entschuldigung, dass ich mich erst heute melde. Ich war beruflich so stark eingespannt, dass ich fhem erst mal zurückstellen musste.
zu: Geht https?
Ich benutze die fhem-Funktion CustomGetFileFromURL. Hier entscheidet die Syntax der Adresse, ob https verwendet wird.
Wenn Du die Zeile my $url = "http://www.notifymyandroid.com/publicapi/notify";
durch my $url = "https://www.notifymyandroid.com/publicapi/notify";
ersetzt, sollte fhem die Verbindung über https aufbauen.
Allerdings kann ich das nicht testen, da auf meiner Fritz kein https verfügbar ist.
zu: Code-Anpassungen
Hier habe ich in dem gepostetem Code tatsächlich einen Fehler mit den == drin. Seit gestern habe ich endlich wieder Zeit für fhem und schreibe gerade die Anpassungen, die ich im ersten Post angedeutet habe. Sprich: Endlich werden die Übergaben optional und der Absender kann dann auch gewählt werden (lässt sich tatsächlich, wie Du schon vermutest, über einen Übergabewert steuern).
Ich werde den == Fehler dann auch mit korrigieren.
zu: Doppelte Benachrichtigungen
Kann ich mir gerade nicht erklären. Prüfe mal, ob Du den Code genauso eingebaut hast, wie er hier steht.
Bei meiner fhem-auf-FritzBox Installation läuft der Code ohne Probleme und auch nur einmal.
Bekommst Du nur die Benachrichtigungen doppelt? Wenn Du my $Log = 0; auf 1 setzt, tauchen dann auch zwei Logeinträge auf?
Bei Fragen stehe ich ab jetzt auch gern wieder zur Verfügung!
Zitat von: OiledAmoeba schrieb am Mo, 29 Juli 2013 13:18zu: Doppelte Benachrichtigungen
Kann ich mir gerade nicht erklären. Prüfe mal, ob Du den Code genauso eingebaut hast, wie er hier steht.
Hi,
der Fehler mit der doppelten Benachrichtung war ein Fehler in meinem notify, das hat auf zwei events getriggert, also kein Grund zur Sorge.
Und die Frage nach dem https war nicht von mir *g*
Wobei mir im https Zusammenhang spontan die Frage nach dem Zertifikatshandling einfallen würde.Viele Grüße
Udo
Hallo,
bin mehr oder weniger Copy and Paste fan.
Wenn ich deinen Code mit der eq anpassung oder auch mit == von oben in 99_myUtils kopiere bekomme ich im log
reload: Error:Modul 99_myUtils deactivated:
Meine 99_myUtils.pm
##########################################################
# NotifyMyAndroid
# Nachricht mittles NMA auf ein Android-Smartphone
package main;
use strict;
use warnings;
use POSIX;
sub
NMA_send($$$$){
# 2013V0.1 #
############################################################
# Funktion, um NotifyMyAndroid leichter zu senden #
# #
#Aufruf: {NMA_send("Betreff","Nachricht",Priorität,"User")}#
############################################################
########### Variablen aus Funktionsaufruf bilden ###########
my $subject = $_[0];
my $message = $_[1];
my $priority = $_[2];
my $user = $_[3];
if ($priority eq "") {$priority eq 0}
###################### EINSTELLUNGEN #######################
# User und dazugehörige NotifyMyAndroid-ID erfassen, #
# soll die Funktion geloggt werden und FritzBox #
############################################################
my $FB = 1; # 0=keine FRITZ!Box, 1=fhem läuft auf FRITZ!Box
my $Log = 0; # 0=kein Eintrag im Logfile, 1=Eintrag im Logfile
my @usr_List =
( "Robert: meine API KEY "
);
# Listenformat:
#( "Name1:API-Key1",
# "Name2:API-Key2"
#);
# nach dem letzten Listeneintrag KEIN Komma! Sonst immer!
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
#!!!!!!!!!!!!!!!!! ES GEHEN NUR API-KEYS !!!!!!!!!!!!!!!!!!#
# Wenn kein API-Key vorhanden, #
# auf http://www.notifymyandroid.com (//www.notifymyandroid.com) einloggen und im Menü #
# "My Account" unter "Manage my API keys" einen #
# API-Key erstellen. #
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
## Prioritäten: ##
# -2 = Very Low #
# -1 = Moderate #
# 0 = Normal #
# 1 = High #
# 2 = Emergency #
##################
my $application = "FHEM";
## Benutzer suchen, Daten splitten, Ausgaben vorbereiten ###
my $usr_ListHash = {};
foreach(@usr_List)
{
my @usr_ListLine = split(/:/, $_);
$$usr_ListHash{$usr_ListLine[0]} = $usr_ListLine[1];
}
my $apikey = $$usr_ListHash{$user};
if (!defined $$usr_ListHash{$user})
{
Log 0, ("$user not found\n");
} else {
## Und ab dafür Richtung Cell-Phone und ggf. ins Logfile ###
my $url = "http://www.notifymyandroid.com/publicapi/notify (//www.notifymyandroid.com/publicapi/notify)";
my $put = "apikey=".$apikey."&application=".$application."&event=".$subject."&description=".$message."&priority=".$priority;
fhem (CustomGetFileFromURL(0,$url,4,$put,$FB));
if ($Log == 1) {Log 3, ("Der Benutzer ".$user." erhielt die Benachrichtigung: ".$subject."; ".$message)}
}
}
Wenn ich aber in Fhem {NMA_send("Watchdog","Watchdog Heizung Bad ausgelöst!",2,"Robert")} auslöse bekomme ich eine Nachricht.
Hat die Fehlermeldung was zu bedeuten oder kann ich die einfach überlesen ?
wenn das alles ist, was in Deiner 99_myUtils steht, ist die Fehlermeldung logisch, weil es keine initialize-Methode gibt.
Schau mal in die commandref unter Utils - da findest Du eine Beschreibung, wie man eine 99_myUtils richtig anlegt.
Und ignorieren sollte man Fehlermeldungen eigentlich NIE.
-----
Hallo betateilchen,
also eine Fehlermeldung zu Ignorieren war auch eher Ironisch gemeint.
Ich habe am Anfang des Post geschrieben das ich mehr oder weniger Copy and Paste Fan bin.
Im commandref steht .
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
# IMPORTANT: do not insert your own functions inside
# the file 99_Utils.pm!
#
# This file will be overwritten during an FHEM update and all
# your own inserts will be lost.
# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
#
# To avoid this, we recommend following procedure:
#
# 1. Create your own file 99_myUtils.pm from the template below
# 2. Put this file inside the ./FHEM directory
# 3. Put your own functions into this new file
#
# start-of-template
package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
# start with your own functions below this line
# behind your last function, we need the following
1;
# end-of-template
also wenn du meinst das diese hier fehlt :
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
hättest du mir das auch schreiben können.
Ein Forum sollte aus meiner Sicht da sein um user direkt zu helfen und nicht auf irgendwas zu verweisen und die Kollegen im regen stehen zu lassen.
Es sind halt nicht alle auf dieser Welt Perl oder ähnlicher Sprachen firm.
Möchte hiermit keinen angreifen aber alle die hier angemeldetetn user sind doch nur aus einem Zweck hier um noch mehr zu erfahren und nicht auf die commandref verwiesen zu werden. Das nervt und jeder weis auch wo die commandref ist.
Nun zurück zu meinem Problem. Sorry wenn ich abgeschweift bin.
Versuche noch ein wenig zu Bastel danke für denn Hinweis.
Zitat von: Trebor5 schrieb am Fr, 09 August 2013 12:28Ich habe am Anfang des Post geschrieben das ich mehr oder weniger Copy and Paste Fan bin.
Das reicht aber oft nicht, man muss
a) einige Grundlagen wissen, BEVOR man sich auf copy&paste verläßt
b) man sollte wissen
und verstehen was man tut
Zitat von: Trebor5 schrieb am Fr, 09 August 2013 12:28also wenn du meinst das diese hier fehlt :
hättest du mir das auch schreiben können.
Ein Forum sollte aus meiner Sicht da sein um user direkt zu helfen und nicht auf irgendwas zu verweisen und die Kollegen im regen stehen zu lassen.
1. ich habe Dich nicht im Regen stehen lassen, sondern ich habe Dir den Weg zur Lösung direkt gezeigt
2. ich habe Dir nicht einfach den fehlenden Codeschnipsel gepostet, weil Du den auch nur wieder kopiert hättest, ohne zu wissen warum und wieso
Darüber hinaus habe ich Dir Deinen Fehler ganz präzise benannt:
weil es keine initialize-Methode gibt.
Zitat von: Trebor5 schrieb am Fr, 09 August 2013 12:28Möchte hiermit keinen angreifen
hast Du aber grade getan.
Zitat von: Trebor5 schrieb am Fr, 09 August 2013 12:28aber alle die hier angemeldetetn user sind doch nur aus einem Zweck hier um noch mehr zu erfahren
Du widersprichst Dir grade. Du willst nicht "mehr erfahren" (denn das tut man definitiv aus der commandref) sondern Du möchtest eine möglichst 1:1 kopierbare vorgekaute Lösung vorgesetzt bekommen. Und
dafür ist ein Forum meiner Meinung nach
nicht da.
Hallo betateilchen,
lassen wir denn Quatsch.
Jeder hat seine Meinung und andere Ansichten.
Ziel sollte immer sein das alle was dazulernen und das so einfach wie möglich, damit es immer mehr user mit Fhem gibt.
Also der zusätzliche Eintrag in 99_Utils.pm hat es gebracht.
sub
myUtils_Initialize($$)
{
my ($hash) = @_;
}
Wenn ich jetzt in der Fhem.cfg ein Notify zu der Haustür mache
define act_on_ALARM_on notify Haustuer.*:open { if (Value("ANLAGE_STATUS") eq "scharf")} { fhem ("{NMA_send("Watchdog","Watchdog ALARM WURDE AUSGELÖST!",2,"Robert")} ;; set Flurlicht on ;; define verzoegert_Flurlicht_ALARM at +00:00:10 set Flurlicht off")}}
kommt diese Meldung im log:
act_on_ALARM_on return value: Unrecognized character \xC3; marked by <-- HERE after RDE AUSGEL<-- HERE near column 102 at (eval 162) line 1.
Eigentlich war meine Meinung ja, dass ich Dir nach dem von Dir verzapften Schwachfug nicht mehr helfen wollte, aber das habe ich dann doch nicht übers Herz gebracht.
ZitatWenn ich jetzt in der Fhem.cfg ein Notify zu der Haustür mache
...
kommt diese Meldung im log:
Eigentlich logisch, denn NMA_send() ist keine fhem-Funktion, sondern eine Perl Funktion. Also mußt Du sie auch so verwenden und nicht in fhem() einpacken. Außerdem stimmen Deine Klammern nicht, vor allem die geschweiften.
Übrigens bleibe ich bei meiner Meinung:
Verstehen was man tut ist hundert Mal besser als copy&paste
Hallo Florian
Ich verwende jetzt auch dein Skript und es klappt ganz gut DANKE!
Hast du schon die überarbeitete Version Fertig? kann ich sie haben?
Danke
Gruß Markus
Hallo Markus,
sorry, dass ich dich so lange warten lasse. Die Version ist fertig. Bin gerade am testen. Werde es spätestens am Wochenende veröffentlichen.
Gruß
Florian
Gesendet von meinem GT-I9100 mit Tapatalk
Moin!
So, nachdem es mir den fhem-Stick zerlegt hat, durfte ich von vorne anfangen... >:( Natürlich hatte ich auf keinem meiner Rechner eine Kopie der Daten... (*heul* seit Anbeginn meiner fhem-Zeit geschriebene Logs sind auch weg...)
Jetzt bin ich schlauer geworden und habe den Codeschnipsel hier (https://code.google.com/p/nma-send/source/browse/) abgelegt. Ist noch ein wenig buggy und auch noch nicht ganz fertig. Netterweise bietet Google hier aber auch einen Bug-Tracker (siehe dazu Menüpunkt "Issues") an.
Kann also fleißig drauf los geladen und getestet werden.
Versionshistorie: 0.1 ist die Ursprungsversion. Vorm Datenverlust hatte ich 0.5 im Test (die ich auch versprochen hatte mit euch zu teilen...). Da ich neu anfangen musste und noch ein wenig Hoffnung habe, die defekten Daten retten zu können, habe ich die neue Version 0.6 genannt.
Mit dem oben genannten Direktlink auf das SVN sieht man die Warnung nicht. Daher hier der Hinweis:
WARNUNG! DER DATEINAME 99_MyUtils.pm IST NUR EIN HINWEIS AUF DIE DATEI IN DER DIESER CODE GESPEICHERT WERDEN SOLLTE. ÜBERSCHREIBEN SIE NIEMALS DIE ORIGINALE 99_MyUtils.pm VON FHEM MIT DIESER DATEI!
Edit: Was kann die neue Version eigentlich?
{NMA_send("Überschrift","Text",Prio,Benutzer,Absender,Log)}
- Überschrift: Pflichtwert
- Text (Freitext): Pflichtwert
- Prio (Freitext): Optional. Wird keine Prio angegeben, wird 0 ("Prio:normal") angenommen.
- Benutzer (Freitext): Optional. Wird kein Benutzer angegeben, wird der erste Benutzer aus der @usr_List genommen.
- Log (0, 1): Optional. Überschreibt den fest hinterlegten Log-Wert des Snippets (generelle Einstellung ob Log ja oder nein: $Log)
Hallo zusammen,
irgendwie hat das bei mir alles nicht funktioniert, daher hab ich mich mal selbst dran gemacht.
Ich habe vorherigen Code etwas korrigiert und nicht die CustomGetFileFromURL function verwendet, sondern mich an das Sample auf NotifyMyAndroid gehalten.
So funktioniert jetzt alles bei mir.
Anbei das fertige Modul, falls es jemand braucht.
Hi gemx,
ich (wir?!) werde(n) testen und dann feedback geben. (vll modulmässig erweitern, wie doku, fhem.cfg Aufruf usw.)
klasse, Gerhard
Ja gerne. Bin ja auch noch dabei mich einzuarbeiten.
Bin eigentlich eher in C++ und C# zu Hause und hatte mich nie wirklich mit Perl beschäftigt.
Zudem wäre es wohl sinnvoll aus dem Modul ein richtiges Devices zu machen, welches man dann mit
define MyNotifier notifymyandroid <apikeys>
definieren würde und mittels
set MyNotifier send ,,,,,
eine Nachricht schicken könnte.
Da bin ich aber grad erst selbst drauf gekommen.
Ich verstehe grad selbst erst so langsam die funktionsweise von FHEM.
Bin aber soweit recht begeistert :-)
o.k. gemx, wilkommen!
die Richtung ist genau richtig (später wiki?).
Gerhard
Moin gemx,
ich habe bewusst auf den Code von NMA verzichtet und die FHEM HttpUtils eingesetzt.
Welche Fehler hattest du denn, wenn du sagst, dass das alles irgendwie nicht geklappt hat?
Denn außer dass du den http-Bereich geändert hast, ist an meinem Code nix geändert.
(Deine Änderung wird bei nicht wenigen User auch zu Problemen führen)
Gesendet von meinem GT-I9100 mit Tapatalk
Alles klar.
Bin wie gesagt noch Anfänger in der Materie. :-[
Mit "irgendwie nicht geklappt" meine ich, dass der Notify nicht an meinem Handy an kam.
Das liegt unter anderem wohl an dem falschen Content-type den die Routinge aus den HttpUtils verwendet.
Es muss aber noch irgendwas anderes sein, warum das nicht ging.
Ansonsten hast du Recht.
Ich habe nur den "senden" Teil ersetzt und am Ende ein "1;" angefügt, wodurch es korrekt als Modul ladbar war und kein Fehler mehr angezeigt wurde.
Wie mir später auffiel braucht es ja auch gar kein Modul zu sein. Man kann es halt nur nicht via "reload ..." neu laden, sondern muss FHEM neu starten.
Das habe ich aber alles erst mit der Zeit entdeckt.
Also kurz gesagt:
Mit deiner Version wurde kein Notify ans Handy geschickt, was u.a. am falschen Content-Type lag.
Daher habe ich eine andere Funktion verwendet.
Das Hauptproblem an der HttpUtils Funktion ist aber glaube ich, dass er ein HTTP Post macht, was laut API Beschreibung korrekt ist.
Tatsächlich braucht es aber ein HTTP GET.
Alles sehr merkwürdig !? ???
Wie gesagt, ich bin Anfänger :-[
Ich hatte sogar eher Probleme mit Http GET. Neu laden kannst du, wenn es in der 99_MyUtils.pm steckt mit "reload 99_MyUtils". Dazu brauchts keine FHEM - Neustart.
Scheiben und ordentlich formatieren ist mit Tapatalk ein Krampf. Ich schreib gleich weiter, wenn ich daheim bin...
Gesendet von meinem GT-I9100 mit Tapatalk
So, da bin ich wieder ;)
Also, die HttpUtils habe ich bewusst eingesetzt, da Rudi hier Möglichkeiten geschaffen hat, wie auch die Fritz!Box ordentlich mit http-Verbindungen zusammenarbeiten kann. Deren Problem ist einerseits, dass sie werksseitig kein SSL unterstützen und zudem die Verbindung nach dem Absetzen der Anfrage die Verbindung sofort wieder schließen. Rückgabewerte empfangen ist damit nicht machbar.
Durch $fb=0/1 kann der User in meinem Code steuern, ob er eine Fritz!Box nutzt. Bei 1 wird HttpUtils angewiesen, die Verbindung offen zu lassen.
In den kommenden Versionen werde ich auch das Problem mit SSL "umschiffen", indem ich den User wählen lasse, ob er SSL will oder nicht.
Von den genannten Problemen habe ich auch auf einigen anderen Installationen gehört.
Ich habe übrigens meinen Code erfolgreich im Einsatz. Bei mir kommen Notifys auf dem Handy an ;)
Deine Idee finde mit dem Modul finde ich aber irgendwie Klasse -> Hast 'ne PM ;)
Das mit dem Device hört sich auch irgendwie gut an, aber könnte es nicht Problematisch werden, wenn mehrere User definiert werden müssten? (Oder... Ne... einfach mehrere Devices anlegen...)
So, noch was vergessen? Keine Ahnung... ;)
Edit:
Gesagt, getan.
Mit r12 lässt sich über $useSSL=0/1 wählen, ob SSL genutzt werden soll. So lässt sich das Problem des fehlenden IO::Socket::SSL umgehen. (Sollte zumindest. Da ich, dank AVM, nur ohne SSL testen kann...)
Das Modul von gemx befindet sich mittlerweile im SVN (http://code.google.com/p/nma-send/source/browse/#svn%2Ftrunk), ist aber noch auf dem Stand vom 27.11.13. Das Code-Snippet wird in absehbarer Zukunft in das Modul übertragen, vorher sollte aber noch geklärt werden, ob POST oder GET läuft und wo es weniger Probleme macht. Das Modul läuft auf GET, das Snippet auf POST.
Die Leute von NMA schreiben: "Requested Method: POST". Im Perl-Modul arbeiten sie mit GET (sicherlich nur, um sich das parsen der XML-Antwort zu sparen, weil GET gleich eine Variable füllen kann). Im Bash-Script dagegen arbeiten sie mit curl --data, was ja POST auslöst.
Ich würde sagen, es steht 2:1 für POST. Aber "User-Experience" ist alles. Und es soll ja auf möglichst vielen Systemen laufen.
(Ich denke sogar schon an eine Einstellungsmöglichkeit, mit der man im Bedarfsfall von POST auf GET wechseln kann...)
Hi,
ich habe heute die 99_NotifyMyAndroid.pm von bei code.google.com ausgecheckt, funktioniert auf Anhieb. Sehr einschränkend ist aber dass die Benachrichtigung nur aus zwei Worten bestehen kann, nämlich jeweils einen Wort für Event und einem für Message.
Ist das eine Einschränkung der NotifyMyAndroid API? Meine paar Brocken Perl würden wohl reichen um mir das zu ändern, allerdings wäre die Syntax für das send dann eher so: set <device> 'send Text Event' 'Text Message' 0
Soweit ich FHEM bisher durchdrungen habe, wäre das aber vollkommen quer zur üblichen Syntax. Allerdings bin ich mir auch nicht sicher ob die derzeitige Syntax für Send konform ist.
Ist an der Stelle eine Änderung angedacht? Falls nicht, mit welcher Syntax würde man das korrekt machen. Wenn ich mich da schon dran versuche will ich es schon richtig machen ;)
Gruß
Christian
Hallo Christian,
diese Einschränkung ist mir bei der eingecheckten Version auch schon aufgefallen. Sei gewiss, wir arbeiten dran
Moin,
ich habe heute Nacht die aktuellste Version des Moduls ins SVN hochgeladen.
Gesendet von meinem GT-I9100 mit Tapatalk
Hallo,
auch wenn das hier schon ein wenig älter ist, möchte ich nicht direkt ein neues Thema auf machen.
Kann mir vielleicht einer ein Beispiel für die fhem.cfg geben womit ich eine Push auslösen kann.
Ich bekomme es einfach nicht hin. Mit Pushover habe ich es geschafft aber da habe ich keinen Premium Account ;)
define NMA_Jan NotifyMyAndroid APIKey
define NMAnormal notify Dummy:on {NMA_send('FHEM PrioTest :-)','normal',0)}
Ich habe alles mögliche ausprobiert, mit Prio und ohne, mit Textrenner " oder ' oder ohne.
Immer bekomme ich irgendwelche Fehlermeldungen:
NMAnormal return value: No argument given to dummyDebug_Set
NMAnormal return value: Unknown command '0', choose one of send
Ich habe nur das Modul 99_NotifyMyAndroid.pm eingebunden.
Danke und Gruß
Jan
Ich verwende immer noch den code aus dem ersten post hoffe meine Anleitung ist noch kompatiebel ;-)
ausgelöst wird damit
{NMA_send("Netzspannung","Strom ist wieder zurück gekommen",3,"Markus")}
ein beispiel das Funktioniert würde so ausschauen:
define Stromausfall_nein notify Netzspannung:ja { \
if (Value("Netzspannung") eq "ja") \
{NMA_send("Netzspannung","Strom ist wieder zurück gekommen",3,"Markus")} \
}
vorausgesetzt du hast einen Aktor oder dummy der Netzspannung heist und ja/nein annimt ;-)
deinen apikey must du doch in der 99_NotifyMyAndroid.pm eintragen
Gruß Markus
Danke!
Ich hab jetzt den Code aus der 99_MyUtils aus dem SVN genommen. Der funktioniert wunderbar.
die 99_NotifyMyAndroid bekomme ich nicht ans laufen.
Falls es jemand gebrauchen kann, nochmal alles zusammen :D
sub
NMA_send($$@){
# 2013V0.73 #
###################################################################################
# Funktion, um NotifyMyAndroid leichter zu senden #
# #
#Aufruf: {NMA_send("Betreff","Nachricht"[,Priorität,"User","Absender","Logging"])}#
###################################################################################
###################### Variablen aus Funktionsaufruf bilden #######################
my ($subject, $message, $priority, $user, $application, $Log) = @_;
################################# EINSTELLUNGEN ###################################
$priority = 0 if(!$priority); # Welche Priorität soll genommen werden, wenn keine übergeben wird?
########### Prioritäten: ############
# -2 = Very Low (sehr niedrig) #
# -1 = Moderate (mittelmäßig) #
# 0 = Normal (Normal) #
# 1 = High (Hoch) #
# 2 = Emergency (Notfall) #
#####################################
$application = "FHEM" if(!$application); # Welcher Absender soll genommen werden, wenn Absender fehlt?
my $FB = 1; # 0=keine FRITZ!Box, 1=fhem läuft auf FRITZ!Box
my $useSSL = 0; # 0=ohne SSL, 1=mit SSL (einige Geräte unterstützen kein SSL)
$Log = 1 if(!$Log); # 0=kein Eintrag im Logfile, 1=Eintrag im Logfile (kann über Funktionsaufruf separat getriggert werden)
my @usr_List =
( "Name:1234567890abcdef1234567890abcdef1234567890abcdef"
);
# Listenformat:
#( "Name1:API-Key1",
# "Name2:API-Key2"
#);
# nach dem letzten Listeneintrag KEIN Komma! Sonst immer!
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
#!!!!!!!!!!!!!!!!!!!!!!!!!!!! ES GEHEN NUR API-KEYS !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
# Wenn kein API-Key vorhanden, auf http://www.notifymyandroid.com einloggen #
# und im Menü "My Account" unter "Manage my API keys" einen #
# "My Account" unter "Manage my API keys" einen API-Key erstellen. #
#!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!#
($user,my @dummy) = split(/:/, $usr_List[0]) if(!$user); # setzt den ersten User der Liste, wenn kein User übergeben wurde.
############# Benutzer suchen, Daten splitten, Ausgaben vorbereiten ###############
my $usr_ListHash = {};
foreach(@usr_List)
{
my @usr_ListLine = split(/:/, $_);
$$usr_ListHash{$usr_ListLine[0]} = $usr_ListLine[1];
}
my $apikey = $$usr_ListHash{$user};
if (!defined $$usr_ListHash{$user})
{
Log 0, ("NMA_send: User $user not found\n");
} else {
## Und ab dafür Richtung Cell-Phone und ggf. ins Logfile ###
my $protocol;
if ($useSSL == 0) {
$protocol = "http:";
} else {
$protocol = "https:";
}
my $url = "$protocol//www.notifymyandroid.com/publicapi/notify";
my $put = "apikey=$apikey&application=$application&event=$subject&description=$message&priority=$priority";
fhem (CustomGetFileFromURL(0,$url,4,$put,$FB));
if ($Log == 1) {Log 3, ("Der Benutzer ".$user." erhielt die Benachrichtigung: ".$subject."; ".$message)}
}
}
Aufruf
{NMA_send("Betreff","Nachricht"[,Priorität,"User","Absender","Logging"])}
Danke und Gruß
Jan