Ankündigung

Einklappen
Keine Ankündigung bisher.

WireGate-Plugin: Per Prowl Nachrichten aufs iPhone vom KNX

Einklappen
Dieses Thema ist geschlossen.
X
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • kippi
    antwortet
    Hier mal ein Logauszug

    2011-08-06 09:18:13 120 112 0.3 opened UDP-Socket 8 0
    Log:
    2011-08-06 09:12:21.624,Prowl Versand,opened UDP-Socket 8,0.3s,
    2011-08-06 09:13:46.636,Prowl Versand,opened UDP-Socket 8,0.6s,
    2011-08-06 09:19:04.207,Thread,WARNING Thread exited TIMEOUT running PLUGIN Prowl Versand !
    2011-08-06 09:19:20.456,Prowl Versand,opened UDP-Socket 8,0.3s,

    Ich habe bei IP die des WG eingetragen, den API Key eingetragen. Portnummer und Socket habe ich nicht verändert.

    Wie verläuft der Versand aus dem WG muss ich evtl. in meinem Router noch Ports freischalten damit das Plugin raussenden kann oder läuft das über Port 80 ?

    Die Nachricht sah so aus welche ich mit dem UDP Sender geschickt habe
    0;Test;test;hallo\n


    Edit: Variante 1 funktioniert.... nun vielleicht bringen wir auch Variante 2 zum laufen

    Einen Kommentar schreiben:


  • chriss1980
    antwortet
    Gibt es mittlerweile etwas vergleichbares für Android? Also nicht das Plugin, sondern einen Dienst zum Nachrichten verschicken? Am liebsten ohne Fremd-Server dazwischen

    Schöne Grüße
    Christiah

    Einen Kommentar schreiben:


  • makki
    antwortet
    Variante 1 funktioniert definitiv, ohne detaillierte Fehlermeldung: Schwierig..

    Makki

    Einen Kommentar schreiben:


  • kippi
    antwortet
    hi,

    also ich hab das mal jetzt versucht einzurichten, bis jetzt scheinen aber keine Nachrichten gesendet zu werden.

    Die API, Plugin und libcrypt hab ich eingetragen, eingerichtet ich wollte Var.2 nutzen, hab dem Plugin also die IP Adresse des WG eingetragen und den Port bei 50018 gelassen.

    Dann habe ich mit einem UDP sender mal eine Nachricht hallo z.b. hingesendet.

    Kann mir jemand weiterhelfen ?

    Einen Kommentar schreiben:


  • Bodo
    antwortet
    Hoi Nino

    Nee alles klar, danke, ich hab bereits meine "eigene" prowl.pl integriert.
    http://blog.fupps.com/2009/11/12/pro...ith-an-iphone/

    Einen Kommentar schreiben:


  • progressive
    antwortet
    @bodo : willst du prowl- (aufs iphone) oder growl- (auf windows-pc)nachrichten verschicken?

    für misterhouse und growl habe ich ja mal eine anleitung geschrieben, siehe
    https://knx-user-forum.de/code-schni...rschicken.html

    Einen Kommentar schreiben:


  • Bodo
    antwortet
    Hoi Makki

    Hahaha, gute Idee, ich helfe gerne wenn ich kann.
    Allerdings hab' ich ja ausser dem eibd linknx und misterhouse sonst nix von Deinem Repository. (ausser unabsichtlich).
    Na vielleicht owfs noch, bin mir aber nicht sicher.

    Daher weiss ich gar nicht wie ich ein "Plugin" von Dir einsetzen kann, soll oder muss. Hehehe

    Einen Kommentar schreiben:


  • makki
    antwortet
    Tja, sowas passiert.. Bei mir aber fremdgetriggert.. Dann kann ich das Projekt ja gleich in Deine Hände übergeben, ich muss zum testen immer Helmut anrufen

    Makki

    Einen Kommentar schreiben:


  • Bodo
    antwortet
    Hoi Makki

    Lustig, ich hab' heut' das mit prowl und einem kleinen perl-script auch hinbekommen.

    Gleichzeitigkeit der Ereignisse.
    Und das mit dem libcrypt-ssleay-perl war ebenso.
    Wir haben wohl ähnliche Suchmuster im www.

    Tolles Plugin und (growl) prowl Notificationen sind echt hilfreich.
    Ich denke das wird's wohl bald auch für andere Plattformen geben.

    Liebe Grüsse

    Einen Kommentar schreiben:


  • WireGate-Plugin: Per Prowl Nachrichten aufs iPhone vom KNX

    Vorraussetzungen:
    - libcrypt-ssleay-perl muss installiert werden (Unter Updates -> siehe Anhang)
    - WireGate-Serverprozess unter Status -> restarten
    - Plugin
    - Prowl Account API-Key & APP
    - ein i*

    Funktion:
    - Bei empfang einer Gruppenadresse wird ein fixer Text versendet
    - Per UDP-Paket im Format "Prio;Event;Description;Application\n"
    (z.B. für Geräte die Schwierigkeiten mit ssl haben )

    Code:
    # Plugin um Nachrichten an Prowl zu senden
    # Version: 0.1 2010-10-14
    # Benötigt einen Prwol-Account sowie API-Key
    
    ##################
    ### 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'} = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"; # Prowl API-Key
    
    # 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;Event;Description;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'}}) {
            return sendProwl($prowl_ga{$msg{'dst'}});
      }
    } 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);
      
      $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;
    Makki

    P.S.: Nein, ich habe kein iPhone..
Lädt...
X