Hallo Zusammen,
ich steh grad auf dem Schlauch, hat einer ein Screenshot was ich im HomeServer bei IP Telegramm senden eintragen muß?
Ankündigung
Einklappen
Keine Ankündigung bisher.
WireGate-Plugin: Per Prowl Nachrichten aufs iPhone vom KNX
Einklappen
Dieses Thema ist geschlossen.
X
X
-
So isses, einfach mit knx_read(<GA>,0,<DPT>) lokal aus dem Cache lesen..
Makki
Einen Kommentar schreiben:
-
Ich antworte mir mal selbst, eventuell sucht ja noch jemand danach; Das Thema ist hier schon ähnlich besprochen worden, der Weg führt also über die GA´s, auch wenn man noch kein KNX einsetzt. So habe ich es verstanden (aber noch nicht getestet).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?
Einen Kommentar schreiben:
-
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
Mein Ziel: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.
Einen Kommentar schreiben:
-
Ich hatte da auch mal gesucht... mein letzter Stand war, dass es zwar mittlerweile eine entsprechende API von Google gibt, aber keine Standard-App für das Smartphone.
Einen Kommentar schreiben:
-
Hallo zusammen,
Ich habe gerade mal gesucht ob es Prowl auch fürs Android gibt.
Bin aber nur auf "Leichen" gestossen.
Hat jemand anderes etwas gefunden?
Gruss
Lapheus
Einen Kommentar schreiben:
-
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.
Einen Kommentar schreiben:
-
ja das hatte ich mir auch schon überlegt, würde dann auch mit anderen Datentypen und man noch mehr Logik implemtieren (z.B. "<" und ">")...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...
Einen Kommentar schreiben:
-
Kann ich mangels eigener Nutzung nun kaum beurteilen, klingt aber sinnigZitat 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:
-> Wenn funktioniert bitte Feedback.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.
Das kann sehr gut sein, das wurde mal so zwischen Tagesschau &Wetterkarte gemacht nach dem lesen der einfachen API mit einem Anwender kurz am Telefon getestet und fertig, ich weiss nichtmal wie das am Endgerät aussiehtZitat 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..
Makki
Einen Kommentar schreiben:
-
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...
Einen Kommentar schreiben:
-
Ich habe das ganze für mich mal erweitert um Wertabhängig (0 oder 1) unterschiedliche Nachrichten zu verschicken, wenn Du deknst das macht Sinn so, kannst Du das ruhig einchecken:
(Davon mal abgesehen wimmelt es in den meisten Plugins wie auch diesem nur so von falschen Zeilenumrüchen (CRLF))Code:# Plugin um Nachrichten an Prowl zu senden # Version: 0.2 2011-12-03 # Benötigt einen Prowl-Account sowie API-Key # 0.2 - 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: Bitwert auf GA sendet fixes 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! # 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 if ($msg{'apci'} eq "A_GroupValue_Write" and $prowl_ga{$msg{'dst'}}) { if ($msg{'data'} eq "00") { return sendProwl($prowl_ga{$msg{'dst'}}[0]); } elsif ($msg{'data'} eq "01") { return sendProwl($prowl_ga{$msg{'dst'}}[1]); } } } 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;
Einen Kommentar schreiben:
-
Ähm, da gibt's nichts. Das einzige wo wissentlich DPT16 verwendet wird ist in dem Chumby-Plugin.Zitat von arosy Beitrag anzeigenKannst du mir bitte einen Link dazu geben? Ich hatte da nix gefunden und nur aus den Beispielem geraten.
Aber das ist auch sekundär, das ist nichts anderes als mit den 15 DPTs davor auch, viele Beispiele sind doch IMHO das beste
Makki
Einen Kommentar schreiben:
-
Ertappt, war in der ETS aber nicht im WG eingetragen. :-(Zitat von makki Beitrag anzeigenAlso entweder die GA mit entsprechendem DPT 16.001 in der Konfig (GA Editor) eintragen
Mit DPT 16 hatte ich gespielt, aber nicht mit 16.001.Zitat von makki Beitrag anzeigenOder explizit beim lesen DPT angeben:
Funktioniert jetzt mit beiden Möglichkeiten, hat nur noch diverse 00 am Ende.
Kannst du mir bitte einen Link dazu geben? Ich hatte da nix gefunden und nur aus den Beispielem geraten.Zitat von makki Beitrag anzeigen$msg{'data'} ist der Rohwert, $msg{'value'} ggfs. der dekodierte Klartext.
Einen Kommentar schreiben:
-
$msg{'data'} ist der Rohwert, $msg{'value'} ggfs. der dekodierte Klartext.
Also entweder die GA mit entsprechendem DPT 16.001 in der Konfig (GA Editor) eintragen und dann $msg{'value'} verwenden - sicherlich am einfachsten und saubersten.
Oder explizit beim lesen DPT angeben:
my $KlarText = knx_read("1/2/3", 3600, 16.001);
oder explizit mit angabe des DPT dekodieren
my $KlarText = decode_dpt(0,$msg{'data'},16.001);
Makki
Einen Kommentar schreiben:
-
Moin,
Ich bastel zwischendurch auch mal an der Var1 rum und irgendwo finde ich zur Zeit kein Beispiel/Anleitung für die Verwendung von 14byte Texten.
Wenn ich mir die $msg{'data'} ansehe dann ist das nur ein Hex-String. Muß das native im Plugin umgesetzt werden oder fehlt mir da etwas?
Cu
Andreas
Einen Kommentar schreiben:


Einen Kommentar schreiben: