Schreiben von Daten in FritzRepeater via 99_myUtils.pm erzeugt freezes

Begonnen von dadoc, 26 Januar 2016, 15:41:17

Vorheriges Thema - Nächstes Thema

dadoc

Hallo,
ich lasse die Wetterdaten eines KS300
a) auf das Display eines FritzRepeaters N/G (wo sie dann als großer Lauftext durchlaufen) und
b) in eine Textdatei für einen RSS Feed zur Anzeige auf dem Display eines Musicpal Webradios
schreiben.
Das entsprechende notify ruft dazu die Routine repgui aus meiner 99_myUtils.pm auf, die so definiert ist:
########################## Daten auf Fritz Repeater anzeigen
sub repgui($$$$)
{
use HTTP::Request::Common qw(POST);
use LWP::UserAgent;
use LWP::Simple;

my ($Text1,$Text2,$Text3,$Text4) = @_; # Inhalt, der als Lauftext angezeigt und ins RSS geschrieben werden soll

if ($Text4 eq "no") {
  $Text4="\*\*\*";
} else {
my $Text4="Regen";
}

chomp($Text1);
chomp($Text2);
chomp($Text3);
chomp($Text4);

my $userag = LWP::UserAgent->new;

my $write_text = POST 'http://192.168.50.29/cgi-bin/webcm', # IP des Repeater
  [
'login:command/password' => 'meinPasswort',
'errorpage' => '../html/de/menus/menu2.html',
'getpage' => '../html/de/menus/menu2.html',
'nlr:settings/TDS_Timeout' => 300,
'nlr:settings/TDS_ShowMask' => 4095, 
'nlr:settings/TDS_Config' => 3,
'nlr:settings/TDS_Orientation' => '0',
'nlr:settings/TDS_ScrollText' => $Text1.' oC   '.$Text2.' km/h   '.$Text3.'%  '.$Text4.'   ',
'time:settings/time' => '1258493499,-60',
'var:errorpagename' => 'infoled',
'var:menu' => 'system',
'var:pagemaster' => '',
'var:pagename' => 'infoled',
'var:pagetitle' => '',
'var:settings/time' => ''
  ];
$userag->request($write_text);

###### ab hier wird die RSS Datei geschrieben
my $rssfile = '/opt/fhem/docs/test.xml'; # Pfad und Name der zu erzeugenden XML-Datei
open (FILE, "> $rssfile") || die "$rssfile konnte nicht angelegt oder bearbeitet werden\n";
print FILE "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n\n";
print FILE "<rss version=\"2.0\">\n\n";
print FILE " <channel>\n";
print FILE " <description>Lokales Wetter</description>\n\n";
print FILE " <item>\n";
print FILE " <title>$Text4 · Temperatur: $Text1°C · Feuchtigkeit: $Text3% · Wind $Text2 km/h · </title>\n";
print FILE " </item>\n\n";
print FILE " </channel>\n\n";
print FILE "</rss>\n";
close(FILE);
return;
}

Das funktioniert auch schon lange prima. Nur weiß ich seit dem Einsatz von perfmon, dass das Schreiben in den Repeater oft mehr oder weniger kurze (< 2s) Freezes verursacht:

2016.01.26 14:38:24 1: Perfmon: possible freeze starting at 14:38:23, delay is 1.368
2016.01.26 14:53:39 1: Perfmon: possible freeze starting at 14:53:38, delay is 1.589
2016.01.26 15:21:37 1: Perfmon: possible freeze starting at 15:21:36, delay is 1.025
2016.01.26 15:26:42 1: Perfmon: possible freeze starting at 15:26:41, delay is 1.087

Kann bzw. sollte man eine solche Subroutine auch irgendwie non-blocking gestalten - oder sollte ich einfach mit den Freezes leben können?
Danke & Grüße
Martin
Standort 1: FS20 mit CUL und FHEM auf Raspi. HM-Komponenten (Heizung, Rollladen, Schalter). HM IP über Raspimatic (testweise)
Standort 2: Homematic (Wired) über CCU2 und PocketHome HD
3 x Raspi3 mit piCorePlayer/Kodi für Multiroom Audio (+ Tablets/iPeng/iPods