From 964843f9e0fda42bbce136dc414d04e944ca99d1 Mon Sep 17 00:00:00 2001 From: fhemzap Date: Mon, 30 Nov 2015 18:04:53 +0000 Subject: [PATCH] HMCCU: Uses RPCQueue instead of File::Queue git-svn-id: https://svn.fhem.de/fhem/trunk@10060 2b470e98-0d58-463d-a4d8-8e2adae1ed80 --- fhem/contrib/HMCCU/ccurpcd.pl | 43 +++++++++++++++++++++++++++++------ 1 file changed, 36 insertions(+), 7 deletions(-) diff --git a/fhem/contrib/HMCCU/ccurpcd.pl b/fhem/contrib/HMCCU/ccurpcd.pl index 88e890ee9..d0f555be2 100755 --- a/fhem/contrib/HMCCU/ccurpcd.pl +++ b/fhem/contrib/HMCCU/ccurpcd.pl @@ -3,7 +3,7 @@ ######################################################### # ccurpcd.pl # -# Version 1.0 +# Version 1.2 # # RPC server for Homematic CCU. # @@ -24,12 +24,14 @@ use strict; use warnings; -use File::Queue; +# use File::Queue; use RPC::XML::Server; use RPC::XML::Client; -use XML::Simple qw(:strict); +# use XML::Simple qw(:strict); use IO::Socket::INET; - +use FindBin qw($Bin); +use lib "$Bin"; +use RPCQueue; # Global variables my $client; @@ -37,9 +39,25 @@ my $server; my $queue; my $logfile; my $shutdown = 0; -my %devnames; +my $eventcount = 0; +##################################### +# Get PID of running RPC server or 0 +##################################### + +sub CheckProcess +{ + my $pdump = `ps -ef | grep ccurpcd | grep -v grep`; + my @plist = split "\n", $pdump; + foreach my $proc (@plist) { + my @procattr = split /\s+/, $proc; + return $procattr[1] if ($procattr[1] != $$); + } + + return 0; +} + ##################################### # Write logfile entry ##################################### @@ -189,7 +207,6 @@ sub CCURPC_NewDevicesCB ($$$) Log "NewDevice: received ".scalar(@$a)." device specifications"; # for my $dev (@$a) { -# my $dn = (defined ($devnames{$dev->{ADDRESS}})) ? $devnames{$dev->{ADDRESS}} : "??"; # WriteQueue ("ND|".$dev->{ADDRESS}."|".$dev->{TYPE}); # } @@ -235,6 +252,12 @@ sub CCURPC_EventCB ($$$$$) WriteQueue ("EV|".$devid."|".$attr."|".$val); + $eventcount++; + if ($eventcount == 250) { + Log "Received $eventcount events from CCU since last check"; + $eventcount++; + } + # Never remove this statement! return; } @@ -264,9 +287,15 @@ my $ccuport = $ARGV[1]; my $queuefile = $ARGV[2]; $logfile = $ARGV[3]; +my $pid = CheckProcess (); +if ($pid > 0) { + Log "Error: ccurpcd.pl is already running (PID=$pid)"; + die "Error: ccurpcd.pl is already running (PID=$pid)\n"; +} + # Create or open queue Log "Creating file queue"; -$queue = new File::Queue (File => $queuefile, Mode => 0666); +$queue = new RPCQueue (File => $queuefile, Mode => 0666); if (!defined ($queue)) { Log "Error: Can't create queue"; die "Error: Can't create queue\n";