Mal was anderes, kann es sein, dass Dir da bei der Übergabe in sendProwl $options{'description'} und $options{'notification'} durcheinandergekommen sind? description wird nirgendwo versendet, notification schon, aber das hat keinen Wert...
Ankündigung
Einklappen
Keine Ankündigung bisher.
WireGate-Plugin: Per Prowl Nachrichten aufs iPhone vom KNX
Einklappen
Dieses Thema ist geschlossen.
X
X
-
Zitat von ctr Beitrag anzeigenwenn Du deknst das macht Sinn so, kannst Du das ruhig einchecken:
Ich würde aber eine Sache dann gleich mit-ändern: sep. Meldungen für 0-255(bzw. auch mehr sofern der eingestellte DPT es hergibt)
Änderungen rot, völlig ungetestet:
Code:# Plugin um Nachrichten an Prowl zu senden # Version: 0.2[COLOR="Red"][COLOR="Red"]1[/COLOR][/COLOR] 2011-12-03 # Benötigt einen Prowl-Account sowie API-Key # 0.2[COLOR="Red"]1[/COLOR] - erweitert um Wertunterscheidung ################## ### DEFINITION ### ################## my $socknum = 8; # Eindeutige Nummer des Sockets # Eigenen Aufruf-Zyklus setzen (Initialisierung/zyklisches prüfen) $plugin_info{$plugname.'_cycle'} = 300; my %options = (); $options{'apikey'} = "xyzxyz"; # Zwei Möglichkeiten zur Nutzung: # VARIANTE 1: Wert auf GA sendet fixe Nachricht: my %prowl_ga; # Eintrag darf nicht auskommentiert werden, solange nachfolgend keine GA definiert erfolgt kein Versand! $prowl_ga{'14/5/208'}[0] = '0;Event-0;Description Hallo;Application'; # Priority,Event,Description,Application - ggfs. NUR DIESE Zeile auskommentieren! $prowl_ga{'14/5/208'}[1] = '0;Event-1;Description Hallo;Application'; # Priority,Event,Description,Application - ggfs. NUR DIESE Zeile auskommentieren![COLOR="Red"] # ... $prowl_ga{'14/5/208'}[5] = '0;Event-5;Description Hallo;Application'; # Priority,Event,Description,Application - Beispiel für Wert 5 auf der GA[/COLOR] #... # VARIANTE 2: Plugin horcht auf UDP-Port und empfängt Format PRIO;Event;Description;Application\n my $recv_ip = "0.0.0.0"; # Empfangs-IP my $recv_port = "50018"; # Empfangsport ####################### ### ENDE DEFINITION ### ####################### # Hauptverarbeitung if (!$socket[$socknum]) { # socket erstellen if (defined $socket[$socknum]) { #debug if ($socket[$socknum]->opened) { $socket[$socknum]->close(); } undef $socket[$socknum]; } #debug $socksel->remove($socket[$socknum]); $socket[$socknum] = IO::Socket::INET->new(LocalPort => $recv_port, Proto => "udp", LocalAddr => $recv_ip, ReuseAddr => 1 ) or return ("open of $recv_ip : $recv_port failed: $!"); $socksel->add($socket[$socknum]); # add socket to select $plugin_socket_subscribe{$socket[$socknum]} = $plugname; # subscribe plugin # subscribe GA's while( my ($k, $v) = each(%prowl_ga) ) { # Plugin an Gruppenadresse "anmelden" $plugin_subscribe{$k}{$plugname} = 1; } return "opened UDP-Socket $socknum"; } if (%msg) { # telegramm vom KNX [COLOR="Red"] if ($msg{'apci'} eq "A_GroupValue_Write" and $prowl_ga{$msg{'dst'}}[$msg{'data'}+0]) { return sendProwl($prowl_ga{$msg{'dst'}}[$msg{'data'}+0]); } [/COLOR]} elsif ($fh) { # UDP-Packet my $buf = <$fh>; chomp $buf; return sendProwl($buf); } else { # cyclic/init/change # subscribe GA's while( my ($k, $v) = each(%prowl_ga) ) { # Plugin an Gruppenadresse "anmelden" $plugin_subscribe{$k}{$plugname} = 1; } return; # ("return dunno"); } sub sendProwl { ($options{'priority'},$options{'event'},$options{'description'},$options{'application'}) = split ';',shift; use LWP::UserAgent; $options{'priority'} ||= 0; $options{'application'} ||= "WireGate KNX"; # Application fuer Telegramme # URL encode our arguments $options{'application'} =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; $options{'event'} =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; $options{'notification'} =~ s/([^A-Za-z0-9])/sprintf("%%%02X", ord($1))/seg; # Generate our HTTP request. my ($userAgent, $request, $response, $requestURL); $userAgent = LWP::UserAgent->new; $userAgent->agent("WireGatePlugin/1.0"); $requestURL = sprintf("https://prowl.weks.net/publicapi/add?apikey=%s&application=%s&event=%s&description=%s&priority=%d", $options{'apikey'}, $options{'application'}, $options{'event'}, $options{'notification'}, $options{'priority'}); $request = HTTP::Request->new(GET => $requestURL); #$request->timeout(5); $response = $userAgent->request($request); if ($response->is_success) { return "Notification successfully posted: $options{'priority'},$options{'event'},$options{'description'},$options{'application'}"; } elsif ($response->code == 401) { return "Notification not posted: incorrect API key."; } else { return "Notification not posted: " . $response->content; } } return;
(Davon mal abgesehen wimmelt es in den meisten Plugins wie auch diesem nur so von falschen Zeilenumrüchen (CRLF))
Ja, teils sogar hausgemacht, stört die Plugins ansich aber nicht.. Die gretchenfrage: Was ist Falsch/Richtig, Windows (also 90% der AW) findet CRLF ja "richtig"
Bevor darüber jetzt ein Krieg ausbricht (encoding ist noch spannener) kann man sich bis aufs optische hier auch ein Ei drauf pellen.
Zitat von ctr Beitrag anzeigenMal was anderes, kann es sein, dass Dir da bei der Übergabe in sendProwl $options{'description'} und $options{'notification'} durcheinandergekommen sind? description wird nirgendwo versendet, notification schon, aber das hat keinen Wert...
Für eine dritte Variante: Übergabe des Wertes in die Meldung gäbe es sicher auch noch Anwendungsfälle..
MakkiEIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
-> Bitte KEINE PNs!
Kommentar
-
Zitat von makki Beitrag anzeigenFür eine dritte Variante: Übergabe des Wertes in die Meldung gäbe es sicher auch noch Anwendungsfälle..
Makki
Bei mir gehts jetzt erstmal 'binär' wie in meinem Codeschnipsel (+vertauschen von description und notification)
Was ich auch gern noch implentieren würde, wäre Versand von Growl per GNTP (um die Nachrichten auch auf dem Rechner zu haben), dafür gibt es eine Perl-Lib...
Kommentar
-
Erstmal ist dies Plugin mal wieder eine Top-Gschicht, vielen Dank.
Wo ich mir zur Zeit noch nicht so ganz einig bin ist die Reihenfolge der Parameter und damit die Anzeige.
Zur Zeit habe ich das bei mir mal so laufen:
$sock->send("1;$meldung;aro-wg;Unwetterwarnung\n");
Das Orginal ist folgendes:
$sock->send("0;Unwetterwarnung;Unwetterwarnung;$meldung\ n");
Vielleicht können sich da ja mal die Prowl-Profis auslassen.
Kommentar
-
Hallo zusammen,
ich habe die aktuelle Version des Plugins (aus dem SVN) heute eingerichtet und der Versand der Prowl - Nachrichten funktioniert auch wenn ich testweise ein UDP - Paket an das Wiregate sende
Code:echo .'0;ausgeschaltet;Description Hallo;Buero Beleuchtung'. > /dev/udp/192.168.17/50018
Ich möchte für Wiregate - interne Sensoren (Temperatur, Feuchte) den Versand per Prowl nutzen. Ich weiß nicht so richtig wie ich die Werte und die Namen der Sensoren in das Prowl - Skript bekomme. Eventuell hat das schon jemand umgesetzt?
Vielen Dank.Viele Grüße
Dieter
Kommentar
-
Zitat von Astrafahrer Beitrag anzeigenMein Ziel:
Ich möchte für Wiregate - interne Sensoren (Temperatur, Feuchte) den Versand per Prowl nutzen. Ich weiß nicht so richtig wie ich die Werte und die Namen der Sensoren in das Prowl - Skript bekomme. Eventuell hat das schon jemand umgesetzt?Viele Grüße
Dieter
Kommentar
Kommentar