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

    #16
    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...

    Kommentar


      #17
      Zitat von ctr Beitrag anzeigen
      wenn Du deknst das macht Sinn so, kannst Du das ruhig einchecken:
      Kann ich mangels eigener Nutzung nun kaum beurteilen, klingt aber sinnig
      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;
      -> Wenn funktioniert bitte Feedback.

      (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 anzeigen
      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...
      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 aussieht

      Für eine dritte Variante: Übergabe des Wertes in die Meldung gäbe es sicher auch noch Anwendungsfälle..

      Makki
      EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
      -> Bitte KEINE PNs!

      Kommentar


        #18
        Zitat von makki Beitrag anzeigen
        Für eine dritte Variante: Übergabe des Wertes in die Meldung gäbe es sicher auch noch Anwendungsfälle..

        Makki
        ja das hatte ich mir auch schon überlegt, würde dann auch mit anderen Datentypen und man noch mehr Logik implemtieren (z.B. "<" und ">")...
        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


          #19
          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.
          cu
          Andreas


          Aus dem Norden? Schau mal rein, Stammtisch-Nord!

          Kommentar


            #20
            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
            Gruß
            Lapheus

            Kommentar


              #21
              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.

              Kommentar


                #22
                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
                Mein 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?

                Vielen Dank.
                Viele Grüße
                Dieter

                Kommentar


                  #23
                  Zitat von Astrafahrer Beitrag anzeigen
                  Mein 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?
                  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).
                  Viele Grüße
                  Dieter

                  Kommentar


                    #24
                    So isses, einfach mit knx_read(<GA>,0,<DPT>) lokal aus dem Cache lesen..

                    Makki
                    EIB/KNX & WireGate & HS3, Russound,mpd,vdr,DM8000, DALI, DMX
                    -> Bitte KEINE PNs!

                    Kommentar


                      #25
                      Hallo Zusammen,

                      ich steh grad auf dem Schlauch, hat einer ein Screenshot was ich im HomeServer bei IP Telegramm senden eintragen muß?

                      Kommentar

                      Lädt...
                      X