Ankündigung

Einklappen
Keine Ankündigung bisher.

Plugin zum Aufrufen einer URL je nach GA

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

  • henfri
    antwortet
    Das verstehe ich nicht...

    Ich sprach davon, dass wenn ein Plugin versucht, einen DPT zu dekodieren und dies fehlschlägt.

    Wenn dann bei 90% eine Warnung im Log ist, dann ist das doch hilfreich, denn das Plugin wird vermutlich nicht funktionieren, oder?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • makki
    antwortet
    Nun dann wäre in >90% der Installationen für fast jedes Telegramm eine Warnung im Log.. Ist vermutlich nicht zielführend..

    Makki

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Ah jetzt ja! Danke für den Hinweis.

    Wäre da nicht eine Meldung/Warning im Log sinvoll?

    Gurß,
    Hendrik

    Einen Kommentar schreiben:


  • makki
    antwortet
    Zitat von henfri Beitrag anzeigen
    Wo gibt's eigentlich eine Doku zu den Plugins?
    Umfassend muss die glaube ich noch jemand schreiben, das Heinzelmännchen haut aber einfach immer ab, wenns darum geht

    Sprich: "value" scheint leer zu sein.

    Hab ich das falsch verstanden?
    Nö, nur die GA-config nicht gepflegt/importiert, wenn der wiregated nicht weiss was es für ein DPT *sein könnte* ists NULL..

    Makki

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    jetzt muss nich nochmal stören.

    Wo gibt's eigentlich eine Doku zu den Plugins? Ich will eure Nerven ja nicht zu sehr strapazieren und mit dem Lesen von Code alleine komme ich nicht so recht weiter.

    Konkret:
    Code:
        if (($msg{'apci'} eq "A_GroupValue_Write") and ($msg{'dst'} eq ($curr_ga->{ga})) and ($msg{'value'}eq($curr_ga->{value}))) {
    Damit sollte ich doch auch den Wert auf der GA überprüfen können, oder?

    Funktioniert aber nicht.

    Deshalb diese Log-Abfrage:
    Code:
         plugin_log($plugname,'Grund des Aufruf: ' . $msg{'apci'}. '  '. $msg{'dst'}. '  '. $msg{'value'} );
    ergibt
    2012-10-20 15:42:30.281,UVR_Senden,Grund des Aufruf: A_GroupValue_Write 3/3/1
    Sprich: "value" scheint leer zu sein.

    Hab ich das falsch verstanden?

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    da warst du zu schnell. Ich hab die Frage schon rauseditiert. Da fehlte ein Komma.

    Die push-Variante finde ich auch übersichtlicher.

    Danke!

    Einen Kommentar schreiben:


  • JuMi2006
    antwortet
    Mit config oder ohne ?

    Mit der config einfach für jeden Befehl ein push ... einfügen. Finde ich am übersichtlichsten. Da kannst Du fürs Log z.B. ein name=>"Befehlsname" mit einfügen und im script auswerten. Sollte aber auch ohne separate config so funktionieren.

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hi,

    na, um die Uhrzeit hatte ich mir schon sowas gedacht.
    Da es aber ja bei dir -das Log hatte ich ja gesehen- lief, hab ich schon an mir gezweifelt...

    Jetzt klappt's!!


    Gruß&Danke euch allen,
    Hendrik

    Einen Kommentar schreiben:


  • Fechter65
    antwortet
    Hendrik

    Ich entschuldige mich für meine Flüchtigkeitsfehler: Ich habe Dein Plugin nicht mit der config-Datei ausprobiert (ich war zu faul zwei Dateien zu öffnen, sondern habe die Variablen direkt im Plugin "abgefüllt"). Im Plugin muss "my" stehen; in der Config-Datei nicht, weil die Deklaration der Variablen bereits im Plugin erfolgt.

    Leider habe ich es in der Eile des Gefechtes (man sollte nie nach der Rückkehr von einer Party noch ein fremdes Plugin debugen) beim Kopieren des Codes in die Forumsantwort vergessen, die "my"-Befehle zu löschen, obwohl ich es mir ganz fest vorgenommen habe.... Sorry.

    Wie Du in meinen Log-Einträgen siehst, ist das Plugin bei mir gelaufen.

    Gruss Diego

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hi Diego,

    vielen Dank für die Nachtschicht!
    Leider klappt's nicht. Ich bin auch etwas verwirrt. Du sagst "my" darf in der Konfig-Datei nicht verwendet werden, nutzte es aber doch selbst:
    Code:
    #my $uvr_ip = '192.168.1.5';
    #push @GAs, { URL=> "580600.htm?blw91A12005=1", ga => "3/3/1", value => 1}; # Kessel - Kesselstatus (Text)
    
    my $uvr_ip = '192.168.1.5';
    my @GAs = 
        ( 
          { URL=> "580600.htm?blw91A12005=1", ga => "3/3/1", value => 1} # Kessel - Kesselstatus (Text)
         );
    Hier mein modifiziertes Plugin
    Code:
    #!/usr/bin/perl
    use strict;
    use LWP::Simple;
    # ******************************************************************************
    # Das Plugin schaltet Ausgänge der UVR1611
    # Finden der URL über
    # http://IP-Der-1611/580600.htm
    # ******************************************************************************
    
    ####################
    ###Einstellungen:###
    ####################
    
    my $uvr_ip;# = '192.168.1.5';
    my @GAs;
    &readConf;
    
    ######################
    ##ENDE Einstellungen##
    ######################
    
    plugin_log($plugname,'Startet ');
    $plugin_info{$plugname.'_cycle'} = 86400; 
    
    foreach my $curr_ga (@GAs) 
    {
         $plugin_subscribe{$curr_ga->{ga}}{$plugname} = 1; #An Gruppenadresse anmelden 
         plugin_log($plugname,'Subscribe: ' . $curr_ga->{ga} );
         plugin_log($plugname,'Grund des Aufruf: ' . $msg{'apci'}. $msg{'dst'} );
        if (($msg{'apci'} eq "A_GroupValue_Write") and ($msg{'dst'} eq ($curr_ga->{ga}))) {    
            get( "http://".$uvr_ip."/".$curr_ga->{URL});
        plugin_log($plugname,'Call: ' .  "http://".$uvr_ip."/".$curr_ga->{ga} );
         }
    
    }
    
    return;
    
    ### READ CONF ###
    sub readConf
    {
     my $confFile = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
     if (! -f $confFile) {
      plugin_log($plugname, "no conf file [$confFile] found."); 
     } else {
      #plugin_log($plugname, "reading conf file [$confFile]."); 
      open(CONF, $confFile);
      my @lines = <CONF>;
      close($confFile);
      my $result = eval("@lines");
      #($result) and plugin_log($plugname, "conf file [$confFile] returned result[$result]");
      if ($@) {
       plugin_log($plugname, "ERR: conf file [$confFile] returned:");
       my @parts = split(/\n/, $@);
       plugin_log($plugname, "--> $_") foreach (@parts);
      }
     }
    }
    Im Log steht nur, dass das Plugin startet -als wäre GAs leer.
    Ich bin verwirrt, denn das einlesen der Konfigurationsdatei schien ja vorher zu funktionieren. Sowohl, was die IPs anging, als auch was den Hash anging.

    Gruß,
    Hendrik

    Einen Kommentar schreiben:


  • Fechter65
    antwortet
    Hallo Hendrik

    Pass doch einmal Deine Config-Datei wie folgt an und schau was dann passiert:
    Code:
    $uvr_ip = '192.168.1.5';
      @GAs = 
        ( 
          { URL=> "580600.htm?blw91A12005=1", ga => "1/1/45", value => 1} # Kessel - Kesselstatus (Text)
         );
    In einer Config-Datei darf "my" nicht verwendet werden.
    Passe dann die IF-Zeile wie folgt an:
    Code:
         if (($msg{'apci'} eq "A_GroupValue_Write") and ($msg{'dst'} eq ($curr_ga->{ga}))) {
    In meinem Log steht Folgendes:
    Code:
    2012-10-20 01:32:27.629,TestHenfry,Subscribe: 1/1/45 
    2012-10-20 01:32:27.629,TestHenfry,Grund des Aufruf: A_GroupValue_Write1/1/45 
    2012-10-20 01:33:27.695,TestHenfry,Call: http://192.168.1.5/1/1/45
    Vielleicht hilft es.
    Gruss
    Diego

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hallo,

    Danke für eure Hilfe.
    Ich bin eine ganze Ecke weiter (v.a. im Verständnis).

    Aber an einer Stelle hängt es jetzt.

    Code:
    foreach my $curr_ga (@GAs) 
    {
         $plugin_subscribe{$curr_ga->{ga}}{$plugname} = 1; #An Gruppenadresse anmelden 
         plugin_log($plugname,'Subscribe: ' . $curr_ga->{ga} );
         plugin_log($plugname,'Grund des Aufruf: ' . $msg{'apci'}. $msg{'dst'} );
         if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq {$curr_ga->{ga}}) {    
             get( "http://".$uvr_ip."/".$curr_ga->{URL});
             plugin_log($plugname,'Call: ' .  "http://".$uvr_ip."/".$curr_ga->{ga} );
         }
    }
    Im Log steht
    2012-10-19 21:33:04.621,UVR_Senden,Subscribe: 3/3/1 2012-10-19 21:33:04.621,UVR_Senden,WerteA_GroupValue_Write3/3/1
    Wenn ich nix übersehe, sollte doch die if-Abfrage wahr sein.
    Dennoch geht er nicht in die nächste Zeile...

    Wie kommt's?
    Was übersehe ich?

    Gruß,
    Hendrik


    Hier der ganze Code:
    Code:
    #!/usr/bin/perl
    use strict;
    use LWP::Simple;
    # ******************************************************************************
    # Das Plugin schaltet Ausgänge der UVR1611
    # Finden der URL über
    # http://IP-Der-1611/580600.htm
    # ******************************************************************************
    
    ####################
    ###Einstellungen:###
    ####################
    
    my $uvr_ip;# = '192.168.1.5';
    my @GAs;
    &readConf;
    
    ######################
    ##ENDE Einstellungen##
    ######################
    
    
    $plugin_info{$plugname.'_cycle'} = 86400; 
    
    foreach my $curr_ga (@GAs) 
    {
         $plugin_subscribe{$curr_ga->{ga}}{$plugname} = 1; #An Gruppenadresse anmelden 
         plugin_log($plugname,'Subscribe: ' . $curr_ga->{ga} );
         plugin_log($plugname,'Grund des Aufruf: ' . $msg{'apci'}. $msg{'dst'} );
         if ($msg{'apci'} eq "A_GroupValue_Write" and $msg{'dst'} eq {$curr_ga->{ga}}) {    
             get( "http://".$uvr_ip."/".$curr_ga->{URL});
             plugin_log($plugname,'Call: ' .  "http://".$uvr_ip."/".$curr_ga->{ga} );
         }
    
    }
    
    return;
    
    ### READ CONF ###
    sub readConf
    {
     my $confFile = '/etc/wiregate/plugin/generic/conf.d/'.basename($plugname,'.pl').'.conf';
     if (! -f $confFile) {
      plugin_log($plugname, "no conf file [$confFile] found."); 
     } else {
      #plugin_log($plugname, "reading conf file [$confFile]."); 
      open(CONF, $confFile);
      my @lines = <CONF>;
      close($confFile);
      my $result = eval("@lines");
      #($result) and plugin_log($plugname, "conf file [$confFile] returned result[$result]");
      if ($@) {
       plugin_log($plugname, "ERR: conf file [$confFile] returned:");
       my @parts = split(/\n/, $@);
       plugin_log($plugname, "--> $_") foreach (@parts);
      }
     }
    }
    Die conf:
    Code:
    my $uvr_ip = '192.168.1.5';
    push @GAs, { URL=> "580600.htm?blw91A12005=1", ga => "3/3/1", value => 1}; # Kessel - Kesselstatus (Text)

    Einen Kommentar schreiben:


  • Fechter65
    antwortet
    Vielleicht habe ich als Perl-DAU wieder einmal das Problem nicht verstanden; falls es aber darum gehen würde, viele GAs an einem Plugin anzumelden (subscrib), habe ich eine Lösung, die bei mir arbeitet. Ich habe ca. 100 GA (repräsentieren jeweils eine Person an einer Tür), die als Auslöser für die Türöffnung in Frage kommen. Dazu habe ich eine Variable "@Rechte" erstellt, die u.a. auch die auslösende GA (hier durch XX/XX/XX maskiert) enthält (nachfolgend ein Ausschnitt):

    Code:
    @Rechte = 
        ( 
          { Name=>'DiegoHaupteingang', Aktion=>$Haupt_ga,    GA=>'X/X/X',     Aktiv=>'1', Wert=>'1', Std=>undef, Min=> undef,  MTag=>undef, Mon=>undef, WTag=>undef, DPT=>'1', Log=>'1'  },
          { Name=>'DiegoVeloraum', Aktion=>$Velo_ga,    GA=>'X/X/X',     Aktiv=>'1', Wert=>'1', Std=>undef, Min=> undef,  MTag=>undef, Mon=>undef, WTag=>undef, DPT=>'1', Log=>'1'  },
          { Name=>'DiegoKeller', Aktion=>$Keller_ga,    GA=>'X/X/X',     Aktiv=>'1', Wert=>'1', Std=>undef, Min=> undef,  MTag=>undef, Mon=>undef, WTag=>undef, DPT=>'1', Log=>'1'  }
         );
    Das Subskripieren erfolgt über folgende Schlaufe:
    Code:
    foreach my $element (@Rechte) {
        $plugin_subscribe{$element->{GA}}{$plugname} = 1;    
    }
    Vielleicht ist es Dir dienlich.
    Beste Grüsse
    Diego

    Einen Kommentar schreiben:


  • makki
    antwortet
    Ganz einfach: Man macht sich einen Hash (die sind ja nicht böse sondern praktisch - definieren mit %hash.. , aufruf mit $hash{.. - siehe andere Plugins)
    für GA und Wert, probiert das ggfs. vorher Standalone in einem Perl-Script auf einer beliebigen Plattform einfach aus (also z.B. dem eigenen Win/Mac/Linux -PC) und macht dann das Plugin draus..

    Im Prinzip ist das easy und entspricht am ehesten den Dreambox* Plugins, das in zweifacher Ausfertigung im SVN liegt..

    Makki

    Einen Kommentar schreiben:


  • henfri
    antwortet
    Hm, dass das ist ja beruhigend... Aber was empfiehlst du stattdessen?

    Einen Kommentar schreiben:

Lädt...
X