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
Ankündigung
Einklappen
Keine Ankündigung bisher.
Plugin zum Aufrufen einer URL je nach GA
Einklappen
Dieses Thema ist geschlossen.
X
X
-
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:
-
Ah jetzt ja! Danke für den Hinweis.
Wäre da nicht eine Meldung/Warning im Log sinvoll?
Gurß,
Hendrik
Einen Kommentar schreiben:
-
Umfassend muss die glaube ich noch jemand schreiben, das Heinzelmännchen haut aber einfach immer ab, wenns darum gehtZitat von henfri Beitrag anzeigenWo gibt's eigentlich eine Doku zu den Plugins?
Nö, nur die GA-config nicht gepflegt/importiert, wenn der wiregated nicht weiss was es für ein DPT *sein könnte* ists NULL..Sprich: "value" scheint leer zu sein.
Hab ich das falsch verstanden?
Makki
Einen Kommentar schreiben:
-
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:
Damit sollte ich doch auch den Wert auf der GA überprüfen können, oder?Code:if (($msg{'apci'} eq "A_GroupValue_Write") and ($msg{'dst'} eq ($curr_ga->{ga})) and ($msg{'value'}eq($curr_ga->{value}))) {
Funktioniert aber nicht.
Deshalb diese Log-Abfrage:
ergibtCode:plugin_log($plugname,'Grund des Aufruf: ' . $msg{'apci'}. ' '. $msg{'dst'}. ' '. $msg{'value'} );
Sprich: "value" scheint leer zu sein.2012-10-20 15:42:30.281,UVR_Senden,Grund des Aufruf: A_GroupValue_Write 3/3/1
Hab ich das falsch verstanden?
Gruß,
Hendrik
Einen Kommentar schreiben:
-
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:
-
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:
-
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:
-
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:
-
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:
Hier mein modifiziertes PluginCode:#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) );
Im Log steht nur, dass das Plugin startet -als wäre GAs leer.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); } } }
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:
-
Hallo Hendrik
Pass doch einmal Deine Config-Datei wie folgt an und schau was dann passiert:
In einer Config-Datei darf "my" nicht verwendet werden.Code:$uvr_ip = '192.168.1.5'; @GAs = ( { URL=> "580600.htm?blw91A12005=1", ga => "1/1/45", value => 1} # Kessel - Kesselstatus (Text) );
Passe dann die IF-Zeile wie folgt an:
In meinem Log steht Folgendes:Code:if (($msg{'apci'} eq "A_GroupValue_Write") and ($msg{'dst'} eq ($curr_ga->{ga}))) {
Vielleicht hilft es.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
Gruss
Diego
Einen Kommentar schreiben:
-
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.
Im Log stehtCode: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} ); } }
Wenn ich nix übersehe, sollte doch die if-Abfrage wahr sein.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
Dennoch geht er nicht in die nächste Zeile...
Wie kommt's?
Was übersehe ich?
Gruß,
Hendrik
Hier der ganze Code:
Die conf: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); } } }
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:
-
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):
Das Subskripieren erfolgt über folgende Schlaufe: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' } );
Vielleicht ist es Dir dienlich.Code:foreach my $element (@Rechte) { $plugin_subscribe{$element->{GA}}{$plugname} = 1; }
Beste Grüsse
Diego
Einen Kommentar schreiben:
-
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:
-
Hm, dass das ist ja beruhigend... Aber was empfiehlst du stattdessen?
Einen Kommentar schreiben:


Einen Kommentar schreiben: