From af29eebd3220e7b4b888cdd11f11c7bb51fcacdf Mon Sep 17 00:00:00 2001 From: betateilchen Date: Sat, 19 Mar 2016 22:06:00 +0000 Subject: [PATCH] :#51049 git-svn-id: svn://svn.code.sf.net/p/fhem/code/trunk@11091 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/contrib/92_rsyslog.pm | 83 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 83 insertions(+) create mode 100644 fhem/contrib/92_rsyslog.pm diff --git a/fhem/contrib/92_rsyslog.pm b/fhem/contrib/92_rsyslog.pm new file mode 100644 index 000000000..d4ca4fd8b --- /dev/null +++ b/fhem/contrib/92_rsyslog.pm @@ -0,0 +1,83 @@ +############################################## +# $Id$ + +package main; + +use strict; +use warnings; +use Sys::Syslog; # apt-get install libsys-syslog-perl + +##################################### +sub rsyslog_Initialize($) { + my ($hash) = @_; + + $hash->{DefFn} = "rsyslog_Define"; + $hash->{UndefFn} = "rsyslog_Undef"; + $hash->{DeleteFn} = "rsyslog_Undef"; + $hash->{NotifyFn} = "rsyslog_Log"; + + no warnings 'qw'; + my @attrList = qw( + disable:0,1 + disabledForIntervals + ); + use warnings 'qw'; + $hash->{AttrList} = join(" ", @attrList); + +} + +##################################### +sub rsyslog_Define($@) { + my ($hash, $def) = @_; + my @a = split("[ \t][ \t]*", $def); + return "wrong syntax: define rsyslog " + if(int(@a) != 6); + + return "Bad regexp: starting with *" if($a[5] =~ m/^\*/); + eval { "Hallo" =~ m/^$a[5]$/ }; + return "Bad regexp: $@" if($@); + + openlog($a[2],$a[3],$a[4]); + +# $hash->{ident} = $a[2]; +# $hash->{logopt} = $a[3]; +# $hash->{facility} = $a[4]; + $hash->{REGEXP} = $a[5]; + $hash->{STATE} = "active"; + notifyRegexpChanged($hash, $a[5]); + + return undef; +} + +sub rsyslog_Log($$) { + my ($log, $dev) = @_; + + my $ln = $log->{NAME}; + return if(IsDisabled($ln)); + my $events = deviceEvents($dev, AttrVal($ln, "addStateEvent", 0)); + return if(!$events); + + my $n = $dev->{NAME}; + my $re = $log->{REGEXP}; + my $max = int(@{$events}); + my $tn = $dev->{NTFY_TRIGGERTIME}; + my $ct = $dev->{CHANGETIME}; + + for (my $i = 0; $i < $max; $i++) { + my $s = $events->[$i]; + $s = "" if(!defined($s)); + my $t = (($ct && $ct->[$i]) ? $ct->[$i] : $tn); + if($n =~ m/^$re$/ || "$n:$s" =~ m/^$re$/ || "$t:$n:$s" =~ m/^$re$/) { + $t =~ s/ /_/; + syslog("info","$n: $s") if defined &syslog; + } + } + return ""; +} + +sub rsyslog_Undef($$) { + closelog(); + return undef; +} + +1;