Closed docolli closed 3 years ago
Die Whitelist wird erst dauerhaft gespeichert, nachdem "Save config" ausgeführt wurde (Hinweis mit dem roten Fragezeichen fehlt noch, Fix ist in Arbeit). Neustarts von FHEM hatte ich auch. Mit Protokoll 110 habe ich eigentlich keinerlei Probleme festgestellt. Das Attribut "development" kannst du wieder löschen (bis zum nächsten neuen Protokoll :-) Es sollte aber eigentlich keinen weiteren Einfluss haben.
Alles klar, habe mich schon gewundert, dass dies anscheinend ohne "Save config" gehen soll.
Jetzt sollte es dauerhaft aus sein, ich berichte...
Nicht wirklich - @sidey79 liest du mit?
Jetzt schon. Ich hatte wärmebedingt die letzte Woche hitzefrei :)
Das Speicherleck habe ich auf meinem Ubuntu Server leider auch. :( Hatte allerdings nicht den Eindruck, dass es durch das Signalduino Modul verursacht wird.
Hallo @sidey79 !
@elektron-bbs hatte da den richtigen Riecher: seit das Protokoll aus ist (gestern ~13:20), läuft auch mein FHEM stabil:
Ich werde es jetzt wieder aktivieren. Schreibt einfach, wenn ich wieder was testen soll. Mach ich gerne!
Ich hatte start => [1,-2, 1,-1, 1,-2, 1,-2, 1,-2, 1,-2, 1,-2]
genommen, damit das Modul sauber nur auf die Nachrichten von diesem Sensor reagiert. So eine Art Fingerprint, das war zumindest mein Verständniss von start
. Daneben, gibt es auch noch sync
. Wo sind da die Unterschiede?
Wie schon hier https://github.com/RFD-FHEM/RFFHEM/issues/977#issuecomment-863331508 beschrieben, läuft es auch mit einer kürzeren Startsequenz sauber.
Ich bin mir nur nicht sicher, wo es klemmt... Vielleicht in der sub SIGNALduino_PatternExists???
Ich hatte mir gestern mal eine Logausgabe eingebaut, um zu sehen, was bei Protokoll 111 so abgeht (siehe Anhang) - ca. 100 Nachrichten in gut 3 Minuten. Schuld daran ist wahrscheinlich, das ein clockabs von 480 +-Toleranz relativ häufig vorkommt.
Vielleicht macht es ja auch Sinn, vorher schon mal die Länge der Nachrichten zu prüfen. In dem Log sind schätzungsweise 90 % der Nachrichten zu kurz für Protokoll 111.
Das mit der kürzeren Startsequenz werden ich testen.
Noch eine Info, die ich schon seit dem Einsatz meines "111er Sensors" beobachte: Es wurde damals neben dem 111er device auch ein device automatisch angelegt, welches mit Protokoll 31 läuft.
Im Log dazu finden sich exakt zu den Zeiten, wo der Sensor seine Nachrichten sendet, immer schön im 3min. Abstand Protokolleinträge: SIGNALduino_unknown_31-2021.log
Bei Protokoll 31 passen halt zufällig auch die Puls-/Pausezeiten. Kannst du ignorieren oder abschalten.
Ich bin mir nur nicht sicher, wo es klemmt... Vielleicht in der sub SIGNALduino_PatternExists???
Ja das vermute ich auch. Es sieht so aus als würden alle Protokolle mit einem Start mit 6 oder mehr Einträgen Probleme machen. Also auch die Ids 31 und 42.
Ich habs mal auf einem Testsystem auf einem BananaPi mit Perl 5.28.1 getestet. Bei mir werden nicht so viele MU Nachrichten empfangen. Bei den Sensoren mit den IDs 0 und 7 werden fast nur MS-Nachrichten empfangen, aber die MU-Nachrichten von der WH3080 mit der Id 9 haben für den Test gereicht. Ohne die ID 111 siehts mit dem RAM gut aus. Um kurz nach 14 Uhr hab ich die ID 111 aktiviert und einen fhem restart gemacht, danach ist dann das verwendete RAM gestiegen. Das gestiegene verwendete RAM wird erst wieder nach einem fhem restart freigegeben. Hab zum Testen um 16 Uhr ein fhem restart gemacht.
Um 18 Uhr hab ich die Protokolle mit einem Start mit mehr als 3 Einträgen (u.a. 111, 42, 31..) deaktiviert, danach ist das verwendete RAM staibil unter 100 geblieben, nachdem ich die Ids nach 21 Uhr wieder aktiviert hatte ist das verwendete RAM wieder gestiegen.
Ich hab schon eine Idee für einen Wordaround, falls sich das Speicherleck nicht finden lässt.
Ich habe schon mittels Devel::Leak::Object nach Speicherlecks gesucht. Vielleicht findet ihr damit ja was. Ich hatte bislang wenig Erfolg.
Kurze Zwischenmeldung:
Seit ich den start gekürzt auf start => [1,-2, 1,-2, 1,-2, 1,-2, 1,-2], # Sync 1.1111 - Test wegen RAM Problemen
gestellt habe (20.06.21 - 12:16h) läuft FHEM stabil mit geringem Speicherverbrauch
Die Anzahl der erfolgreich empfangenen Pakete pro Tag (max. 480 erwartet) hat sich seitdem nicht signifikant geändert:
Datum | Pakete |
---|---|
2021-06-22 | 336 |
2021-06-21 | 321 |
2021-06-20 | 150 |
2021-06-19 | 104 |
2021-06-18 | 223 |
2021-06-17 | 188 |
2021-06-16 | 215 |
2021-06-15 | 218 |
2021-06-14 | 221 |
2021-06-13 | 344 |
2021-06-12 | 261 |
2021-06-11 | 377 |
2021-06-10 | 73 |
Bei mir normalisiert sich die RAM-Belegung erst mit einer Länge des Starts von 4 Bit:
Sync 1.1111
Sync 1111
Ich habe seit gestern Abend start => [1,-1, 1,-2, 1,-2, 1,-2, 1,-2, 1,-2], # Sync 01.1111
gesetzt:
ca. 6h später gab es eine einmalige, deutliche Reduktion des freien Speichers. Seitdem nicht mehr. FHEM wurde (noch) nicht automatisch neu gestartet (war vorher ja der Fall). Ich lasse es so jetzt noch eine Weile laufen.
Mag sein, das das bei dir mit dieser Einstellung halbwegs funktioniert, bei mir jedenfalls nicht.
Wir könnten versuchen, start => [1,-1, 1,-2, 1,-2, 1,-2], # Sync 0111
zu verwenden. Erst mit nur 4 Bit läuft FHEM bei mir ohne Auffälligkeiten. Dazu müsste ich aber das Modul ändern.
Ich habe bei meiner 00_SIGNALduino.pm Version in der Routine "SIGNALduino_Parse_MU" die Erzeugung des Start Strings optimiert. Damit gibt es bei meinen Tests auch bei einem langen start Eintrag keinen hohen Speicherverbrauch.
Dazu habe ich in der Protokollliste einen neuen Eintrag "starti" zugefügt. In das starti Array werden die Bits 0 oder 1 eingetragen.
z.B.
aus
start => [1,-1, 1,-2, 1,-2, 1,-2, 1,-2, 1,-2], # Sync 01 1111
wird dann
starti => [0,1, 1,1,1,1],
Es muss dann nur noch einmal die PatternExists für one und zero aufgerufen werden
$pstrAr[1]=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{one}},\%patternList,\$rawData)
$pstrAr[0]=SIGNALduino_PatternExists($hash,\@{$ProtocolListSIGNALduino{$id}{zero}},\%patternList,\$rawData)
dann kann damit in einer einfachen Schleife der Start String zusammengebaut werden
foreach my $startStrIdx (@{$ProtocolListSIGNALduino{$id}{starti}}) {
$startStr .= $pstrAr[$startStrIdx];
}
Ich habe es in meiner Variante der 00_SIGNALduino.pm dev Version eingebaut
update all https://raw.githubusercontent.com/Ralf9/RFFHEM/dev/controls_dev_ralf9_signalduino.txt
https://forum.fhem.de/index.php/topic,111653.msg1058900.html#msg1058900
Was nimmst Du an, wo sich das Speicherleck befindet?
In SIGNALduino_PatternExists würde ich annehmen. Das ganze könnte ich in einem Test genauer unter die Lupe nehmen, allerdings glaube ich noch nicht daran, etwas zu finden.
ich denke das index kann man als Ursache wahrscheinlich ausschließen
$message_start = index($rawData, $startStr);
Ich vermute auch das SIGNALduino_PatternExists
Das regex kann man wahrscheinlich als ein Teil der Ursache auch nicht ganz ausschliessen
my $regex="(?:$startStr)($signalRegex)";
while ( $rawData =~ m/$regex/g) {
@Ralf9
An der Regex hast Du doch nichts verändert oder?
nein an der Regex habe ich nichts verändert
Ich habe ein Testprogramm geschrieben, aber das findet nichts. Vermutlich muss es mit der rmsg etwas zu tun haben
#!/usr/bin/env perl
use strict;
use warnings;
use lib::SD_Protocols;
# Track every object including where they're created
use Devel::Leak::Object qw{ GLOBAL_bless };
$Devel::Leak::Object::TRACKSOURCELINES = 1;
use Devel::Gladiator qw(walk_arena arena_ref_counts arena_table);
our %defs;
sub Debug
{
print $_[0];
}
sub AttrVal {
return 0;
}
sub
round($$)
{
my($v,$n) = @_;
return sprintf("%.${n}f",$v);
}
############################# package main
#=item SIGNALduino_PatternExists()
# This functons, needs reference to $hash, @array of values to search and %patternList where to find the matches.
#
# Will return -1 if pattern is not found or a string, containing the indexes which are in tolerance and have the smallest gap to what we searched
# =cut
# 01232323242423 while ($message =~ /$pstr/g) { $count++ }
sub SIGNALduino_PatternExists {
my ($hash,$search,$patternList,$data) = @_;
#my %patternList=$arg3;
#Debug 'plist: '.Dumper($patternList) if($debug);
#Debug 'searchlist: '.Dumper($search) if($debug);
my $valid=1;
my @pstr;
my $debug = AttrVal($hash->{NAME},'debug',0);
my $i=0;
my $maxcol=0;
foreach my $searchpattern (@{$search}) # z.B. [1, -4]
{
#my $patt_id;
# Calculate tolernace for search
#my $tol=abs(abs($searchpattern)>=2 ?$searchpattern*0.3:$searchpattern*1.5);
my $tol=abs(abs($searchpattern)>3 ? abs($searchpattern)>16 ? $searchpattern*0.18 : $searchpattern*0.3 : 1); #tol is minimum 1 or higer, depending on our searched pulselengh
Debug "tol: looking for ($searchpattern +- $tol)" if($debug);
my %pattern_gap ; #= {};
# Find and store the gap of every pattern, which is in tolerance
%pattern_gap = map { $_ => abs($patternList->{$_}-$searchpattern) } grep { abs($patternList->{$_}-$searchpattern) <= $tol} (keys %$patternList);
if (scalar keys %pattern_gap > 0)
{
Debug "index => gap in tol (+- $tol) of pulse ($searchpattern) : ".Dumper(\%pattern_gap) if($debug);
# Extract fist pattern, which is nearst to our searched value
my @closestidx = (sort {$pattern_gap{$a} <=> $pattern_gap{$b}} keys %pattern_gap);
my $idxstr='';
my $r=0;
while (my ($item) = splice(@closestidx, 0, 1))
{
$pstr[$i][$r]=$item;
$r++;
Debug "closest pattern has index: $item" if($debug);
}
$valid=1;
} else {
# search is not found, return -1
return -1;
last;
}
$i++;
#return ($valid ? $pstr : -1); # return $pstr if $valid or -1
#foreach $patt_id (keys %$patternList) {
#Debug "$patt_id. chk ->intol $patternList->{$patt_id} $searchpattern $tol";
#$valid = SIGNALduino_inTol($patternList->{$patt_id}, $searchpattern, $tol);
#if ( $valid) #one pulse found in tolerance, search next one
#{
# $pstr="$pstr$patt_id";
# # provide this index for further lookup table -> {$patt_id = $searchpattern}
# Debug 'pulse found';
# last ; ## Exit foreach loop if searched pattern matches pattern in list
#}
#}
#last if (!$valid); ## Exit loop if a complete iteration has not found anything
}
my @results = ('');
foreach my $subarray (@pstr)
{
@results = map {my $res = $_; map $res.$_, @$subarray } @results;
}
foreach my $search (@results)
{
Debug "looking for substr $search" if($debug);
return $search if (index( ${$data}, $search) >= 0);
}
return -1;
#return ($valid ? @results : -1); # return @pstr if $valid or -1
}
sub SIGNALduino_splitMsg {
my $txt = shift;
my $delim = shift;
my @msg_parts = split(/$delim/,$txt);
return @msg_parts;
}
############################# package main
sub SIGNALduino_Split_Message {
my $rmsg = shift;
my $name = shift;
my %patternList;
my $clockidx;
my $syncidx;
my $rawData;
my $clockabs;
my $mcbitnum;
my $rssi;
my @msg_parts = SIGNALduino_splitMsg($rmsg,';'); ## Split message parts by ';'
my %ret;
my $debug = AttrVal($name,'debug',0);
foreach (@msg_parts)
{
#Debug "$name: checking msg part:( $_ )" if ($debug);
#if ($_ =~ m/^MS/ or $_ =~ m/^MC/ or $_ =~ m/^Mc/ or $_ =~ m/^MU/) #### Synced Message start
if ($_ =~ m/^M./)
{
$ret{messagetype} = $_;
}
elsif ($_ =~ m/^P\d=-?\d{2,}/ or $_ =~ m/^[SL][LH]=-?\d{2,}/) #### Extract Pattern List from array
{
$_ =~ s/^P+//;
$_ =~ s/^P\d//;
my @pattern = split(/=/,$_);
$patternList{$pattern[0]} = $pattern[1];
Debug "$name: extracted pattern @pattern \n" if ($debug);
}
elsif($_ =~ m/D=\d+/ or $_ =~ m/^D=[A-F0-9]+/) #### Message from array
{
$_ =~ s/D=//;
$rawData = $_ ;
Debug "$name: extracted data $rawData\n" if ($debug);
$ret{rawData} = $rawData;
}
elsif($_ =~ m/^SP=([0-9])$/) #### Sync Pulse Index
{
Debug "$name: extracted syncidx $1\n" if ($debug);
#return undef if (!defined($patternList{$syncidx}));
$ret{syncidx} = $1;
}
elsif($_ =~ m/^CP=([0-9])$/) #### Clock Pulse Index
{
Debug "$name: extracted clockidx $1\n" if ($debug);;
$ret{clockidx} = $1;
}
elsif($_ =~ m/^L=\d/) #### MC bit length
{
(undef, $mcbitnum) = split(/=/,$_);
Debug "$name: extracted number of $mcbitnum bits\n" if ($debug);;
$ret{mcbitnum} = $mcbitnum;
}
elsif($_ =~ m/^C=\d+/) #### Message from array
{
$_ =~ s/C=//;
$clockabs = $_ ;
Debug "$name: extracted absolute clock $clockabs \n" if ($debug);
$ret{clockabs} = $clockabs;
}
elsif($_ =~ m/^R=\d+/) #### RSSI
{
$_ =~ s/R=//;
$rssi = $_ ;
Debug "$name: extracted RSSI $rssi \n" if ($debug);
$ret{rssi} = $rssi;
} else {
Debug "$name: unknown Message part $_" if ($debug);;
}
#print "$_\n";
}
$ret{pattern} = {%patternList};
return %ret;
}
my %dump1 = map { ("$_" => $_) } @{walk_arena()};
my $className = 'lib::SD_Protocols';
my $hash->{protocolObject}= new $className( filename => './FHEM/lib/SD_ProtocolData.pm' );
$hash->{NAME} = "dummy";
my %patternListRaw;
my $rawData = "MU;P0=-2076;P1=479;P2=-963;P3=-492;P4=-22652;D=01213121213121212131313121313131312121313131313121212121313131212131313131313131313121313121313131313131313131312131212121313121412131212121212131213121213121212131313121313131312121313131313121212121313131212131313131313131313121313121313131313131313131;CP=1;R=26;O;";
my $id=111;
my $message_start;
for (my $id=1; $id <112;$id++)
{
if ( !defined $hash->{protocolObject}->getProperty($id,'clockabs') ) { next };
if ( !defined $hash->{protocolObject}->getProperty($id,'start') ) { next };
my %msg_parts = SIGNALduino_Split_Message($rawData, $hash->{NAME});
my $clockabs= $hash->{protocolObject}->getProperty($id,'clockabs');
$patternListRaw{$_} = $msg_parts{pattern}{$_} for keys %{$msg_parts{pattern}};
my %patternList = map { $_ => round($patternListRaw{$_}/$clockabs,1) } keys %patternListRaw;
my $startStr=SIGNALduino_PatternExists($hash,\@{$hash->{protocolObject}->getProperty($id,'start')},\%patternList,\$rawData );
print qq[$startStr\n];
$message_start = index($rawData, $startStr);
if ( $message_start == -1)
{
next;
} else {
$rawData = substr($rawData, $message_start);
}
}
my %dump2 = map { $dump1{$_} ? () : ("$_" => $_) } @{walk_arena()};
use Devel::Peek; Dump \%dump2;
arena_table();
1;
@sidey79 @Ralf9, was nehmt ihr als Kriterium das vermutlich kein Fehler an der Position ist. Es gibt Fälle oder Systeme wo das „Leck“ langsam wächst bzw. auftritt oder sprunghaft nach Zeit x. Somit muss es ggf mit von einer Zusätzlichen Komponente / Faktor abhängig sein. Sollte der Fehler an der Sub sein, so sollte es ja stetig auftreten. … oder denke ich falsch???
So ist ein „fester Test“ nur die halbe Wahrheit denke ich.
Ich habe verdächtige Routinen in ein eigenes Programm kopiert und am Ende geprüft ob noch Variablen initialisiert sind, welche es nicht sein sollten.
Da wurden keine gefunden. Das war für mich der Indikator. Allerdings wird das ganze nur mit einer rmsg aufgerufen. Vielleicht tritt der Fehler nur mit einer bestimmten rmsg auf.
Ich habe Devel::Gladiator in fhem bei mir eingebaut.
Läuft jetzt ca 10h. 4 Millionen Scalar Werte 700000 Referenzen zu scalar 900000 Array Referenzen 860000 Arrays 15000 Coderefs
Wenn ich das richtig interpretiere sind das die Elemente die im Speicher liegen. An welcher Stelle die jeweils entstehen weiss ich nicht, liegt ja fast alles im global namespace.
Leider reichen meine Perl Kenntnisse nicht aus, euch hier konkret helfen zu können! Aber ich kann testen. Ich bin noch auf der ursprünglichen 00_SIGNALduino.pm version.
Ich habe eben die start Definition noch um 4Bit verlängert, um das Problem zu verschärfen. preamble und legth musste ich dann anpassen:
start => [1,-2, 1,-1, 1,-2, 1,-2, 1,-2, 1,-2, 1,-2, 1,-2, 1,-1, 1,-1, 1,-1], # Sync 101.1111.1000 (Test)
preamble => 'W111#5F1', # add sync 0101.1111
length_min => '60',
length_max => '60',
Wenn ich fhem neu starte und dann der Sensor seine Daten schickt [hier 12:31:46] (ich sehe das ja auf dem Display des Sensors), genau dann geht die CPU Last des perl Prozesses auf 100% (für ca. 1min) und der Speicherverbrauch steigt. Nach kurzer Zeit geht die CPU Last wieder ins normale und der Speicher ist voll:
top - 12:32:42 up 36 days, 15:02, 1 user, load average: 0,61, 0,35, 0,29
Tasks: 1 total, 0 running, 1 sleeping, 0 stopped, 0 zombie
%Cpu(s): 0,1 us, 1,1 sy, 0,0 ni, 98,7 id, 0,0 wa, 0,0 hi, 0,1 si, 0,0 st
MiB Mem : 924,2 total, 107,4 free, 604,5 used, 212,4 buff/cache
MiB Swap: 100,0 total, 61,4 free, 38,6 used. 261,2 avail Mem
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
11928 fhem 20 0 601996 584828 7176 S 2,7 61,8 1:12.32 perl
Es muss also mit der (erstmaligen?) Verarbeitung der konkreten 111er Nachricht vom Sensor zu tun haben. Je länger start
, desto mehr Speicher wird verschwendet.
Ich beobacht auch danach noch ein paar Phasen mit 100% CPU last für ~1min. Der Speicherverbrauch steigt dann aber nicht mehr so deutlich an.
Um 12:46 zeigt des Gerät (endlich) empfange Darten als readings an! Dabei hatte auch wieder 100% CPU Last und mir ist die FHEM instanz neu gestartet.
Ich mir nach eine FHEM restart die Ausgabe von top in eine Datei geschrieben (alle 3s 1 Wert) und per grep gefiltert.
top -bc > signalduino_111_test.log
danach
grep perl signalduino_111_test.log > signalduino_111_test_perl.log
Die anfängliche hohe CPU Last kommt noch vom FHEM restart.
12618 fhem 20 0 52272 36824 6468 R 94,7 3,9 0:04.91 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 52932 37348 6468 S 15,5 3,9 0:05.38 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 52932 37348 6468 S 3,3 3,9 0:05.48 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 57988 42404 6484 R 26,2 4,5 0:06.28 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 67608 51908 6492 R 66,0 5,5 0:08.30 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 84400 68864 6604 S 94,1 7,3 0:11.16 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 85860 70340 7096 R 62,6 7,4 0:13.07 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 88780 73232 7116 S 16,9 7,7 0:13.59 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 88780 73232 7116 S 5,9 7,7 0:13.77 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 88780 73244 7116 S 3,9 7,7 0:13.89 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 88780 73264 7116 S 10,2 7,7 0:14.20 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 88780 73268 7116 S 11,1 7,7 0:14.54 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 88780 73276 7116 S 0,7 7,7 0:14.56 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 88780 73276 7116 S 1,0 7,7 0:14.59 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 88780 73276 7116 S 2,3 7,7 0:14.66 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 88780 73276 7116 S 0,3 7,7 0:14.67 /usr/bin/perl fhem.pl fhem.cfg
12646 fhem 30 10 96740 81076 7888 S 48,9 8,6 0:01.49 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 88780 73304 7116 S 5,2 7,7 0:14.83 /usr/bin/perl fhem.pl fhem.cfg
12646 fhem 30 10 96740 81076 7888 S 17,4 8,6 0:02.02 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 88780 73304 7116 S 1,6 7,7 0:14.88 /usr/bin/perl fhem.pl fhem.cfg
12646 fhem 30 10 96888 81204 7888 S 24,6 8,6 0:02.77 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 88780 73304 7116 S 0,3 7,7 0:14.89 /usr/bin/perl fhem.pl fhem.cfg
12646 fhem 30 10 96888 81204 7888 S 15,8 8,6 0:03.25 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 88780 73304 7116 S 0,3 7,7 0:14.90 /usr/bin/perl fhem.pl fhem.cfg
12646 fhem 30 10 96268 80668 7888 S 22,0 8,5 0:03.92 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 88780 73304 7116 S 0,7 7,7 0:14.92 /usr/bin/perl fhem.pl fhem.cfg
12646 fhem 30 10 96268 80668 7888 S 19,3 8,5 0:04.51 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 88780 73304 7116 S 3,3 7,7 0:15.02 /usr/bin/perl fhem.pl fhem.cfg
12646 fhem 30 10 96748 80992 7888 S 17,5 8,6 0:05.04 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 89044 73520 7116 S 7,6 7,8 0:15.25 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 89176 73688 7116 S 13,5 7,8 0:15.66 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 89176 73688 7116 S 3,9 7,8 0:15.78 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 89176 73688 7116 S 6,2 7,8 0:15.97 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 89176 73688 7116 S 8,9 7,8 0:16.24 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 89176 73688 7116 S 0,3 7,8 0:16.25 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 89176 73688 7116 S 2,3 7,8 0:16.32 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 89176 73688 7116 S 1,3 7,8 0:16.36 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 89176 73688 7116 S 0,7 7,8 0:16.38 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 115820 100160 7116 R 96,7 10,6 0:19.33 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 151108 135232 7116 R 99,3 14,3 0:22.35 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 180544 164536 7116 R 99,7 17,4 0:25.38 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 221564 205104 7116 R 99,0 21,7 0:28.38 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 228032 211704 7116 R 100,0 22,4 0:31.42 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 266840 250512 7116 R 100,0 26,5 0:34.46 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 305780 289320 7116 R 99,7 30,6 0:37.49 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 345320 328856 7116 R 100,0 34,7 0:40.54 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 354424 337112 7116 R 99,3 35,6 0:43.57 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 364192 346880 7116 R 100,0 36,7 0:46.61 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 403528 386216 7116 R 99,7 40,8 0:49.64 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 442864 425552 7116 R 100,0 45,0 0:52.68 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 482200 464888 7116 R 100,0 49,1 0:55.72 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 521536 503960 7116 R 99,3 53,3 0:58.74 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 560740 543296 7116 R 100,0 57,4 1:01.78 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584352 7116 R 100,0 61,7 1:04.86 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584352 7116 R 99,0 61,7 1:07.92 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 80,4 61,8 1:10.38 /usr/bin/perl fhem.pl fhem.cfg
12706 fhem 20 0 601804 580424 3040 R 12,1 61,3 0:00.37 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 4,2 61,8 1:10.51 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 3,9 61,8 1:10.63 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:10.65 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:10.67 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,3 61,8 1:10.71 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,0 61,8 1:10.71 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:10.74 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 3,9 61,8 1:10.86 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 2,6 61,8 1:10.94 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 6,2 61,8 1:11.13 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 8,6 61,8 1:11.39 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:11.40 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:11.42 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:11.44 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:11.47 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:11.49 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:11.51 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:11.53 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:11.56 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 11,8 61,8 1:11.92 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,0 61,8 1:11.92 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 5,6 61,8 1:12.09 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:12.12 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:12.13 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:12.14 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:12.16 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:12.19 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:12.21 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,0 61,8 1:12.21 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 2,6 61,8 1:12.29 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,6 61,8 1:12.34 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:12.35 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:12.38 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:12.40 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,0 61,8 1:12.40 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:12.43 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 5,9 61,8 1:12.61 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,0 61,8 1:12.61 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 9,2 61,8 1:12.89 /usr/bin/perl fhem.pl fhem.cfg
12756 fhem 20 0 601804 580140 2756 R 8,9 61,3 0:00.27 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 5,5 61,8 1:13.06 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 4,6 61,8 1:13.20 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 3,6 61,8 1:13.31 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:13.32 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:13.34 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:13.37 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:13.38 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,3 61,8 1:13.42 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,6 61,8 1:13.47 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:13.48 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,3 61,8 1:13.52 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:13.53 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 5,9 61,8 1:13.71 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:13.74 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 2,0 61,8 1:13.80 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:13.82 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:13.83 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,0 61,8 1:13.83 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,3 61,8 1:13.87 /usr/bin/perl fhem.pl fhem.cfg
12781 fhem 20 0 601804 580456 3072 S 22,1 61,3 0:00.67 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 11,6 61,8 1:14.22 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:14.25 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,3 61,8 1:14.29 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:14.32 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 5,6 61,8 1:14.49 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:14.50 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:14.52 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:14.55 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 6,2 61,8 1:14.74 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:14.76 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 5,9 61,8 1:14.94 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:14.97 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:14.99 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 4,3 61,8 1:15.12 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 3,3 61,8 1:15.22 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 3,9 61,8 1:15.34 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:15.35 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:15.38 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:15.40 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:15.43 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 13,8 61,8 1:15.85 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:15.88 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 R 9,8 61,8 1:16.18 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 13,8 61,8 1:16.60 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,0 61,8 1:16.60 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:16.62 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 3,3 61,8 1:16.72 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:16.74 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,0 61,8 1:16.74 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:16.76 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 5,6 61,8 1:16.93 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:16.94 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:16.97 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:16.98 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:17.00 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,0 61,8 1:17.00 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 2,6 61,8 1:17.08 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 24,5 61,8 1:17.83 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:17.84 /usr/bin/perl fhem.pl fhem.cfg
12847 fhem 20 0 601804 580140 2756 S 7,8 61,3 0:00.24 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 4,2 61,8 1:17.97 /usr/bin/perl fhem.pl fhem.cfg
12853 fhem 20 0 4 4 0 R 1,3 0,0 0:00.04 [perl]
12618 fhem 20 0 601804 584500 7116 S 4,6 61,8 1:18.11 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,3 61,8 1:18.15 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 3,6 61,8 1:18.26 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,0 61,8 1:18.26 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 3,3 61,8 1:18.36 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,0 61,8 1:18.36 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:18.37 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 2,3 61,8 1:18.44 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:18.47 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:18.49 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,3 61,8 1:18.53 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:18.55 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 4,3 61,8 1:18.68 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,3 61,8 1:18.72 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:18.74 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:18.75 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:18.78 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:18.81 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 2,0 61,8 1:18.87 /usr/bin/perl fhem.pl fhem.cfg
12878 fhem 20 0 601804 580456 3072 S 23,3 61,3 0:00.71 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 12,1 61,8 1:19.24 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 3,3 61,8 1:19.34 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:19.36 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,0 61,8 1:19.36 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 22,3 61,8 1:20.04 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:20.05 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:20.07 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,0 61,8 1:20.07 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 3,6 61,8 1:20.18 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:20.20 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 R 78,8 61,8 1:22.61 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 62,6 61,8 1:24.52 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,3 61,8 1:24.56 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:24.58 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,7 61,8 1:24.60 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,0 61,8 1:24.60 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,0 61,8 1:24.60 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 1,0 61,8 1:24.63 /usr/bin/perl fhem.pl fhem.cfg
12618 fhem 20 0 601804 584500 7116 S 0,3 61,8 1:24.64 /usr/bin/perl fhem.pl fhem.cfg
mit der Optimierung der Start String erzeugung, die ich in meiner 00_SIGNALduino.pm Variante eingebaut habe, hat sich für mich das Problem erledigt. Ich habe damit keine Sprünge nach oben im Speicherverbrauch mehr.
und du bist dir sicher, dass es an der Optimierung liegt und nicht daran, dass dein Array jetzt starti
heißt? 😉 Nicht dass es daran liegt, dass der Variablenname start
noch irgendwo anders benutzt wird.
Sorry, aber für mich kommt das Problem zu sporadisch, als dass es in einer bei jeder Nachricht regelmäßig aufgerufenen Routine sitzt. Wenn ich FHEM neu starte, wie oft muss Signalduino eine Nachricht korrekt erkennen, bevor es ein device anlegt bzw. readings anzeigt? Ich beobachte, dass es einfach etwas dauert, bis die readings aktuelle Werte haben.
Kann ich in meiner 00_SIGNALduino.pm den Namen des Array "start" ändern, um das mal zu testen? Wo müsste ich das überall machen?
Ich habe das Problem gerade durch das sehr lange start nochmals provoziert. Ich habe im Signalduino verbose=5 gesetzt und die Ausgabe des fhem.log per tail beobachtet.
2021.06.26 18:05:46 5: SignalDuino: Parse_MU, 0. try, regex ((?:4)((?:01|25){65,}(?:0|2)?)) did not match
2021.06.26 18:05:46 5: SignalDuino: Parse_MU, start pattern for MU protocol id 111 -> TS-FT002 not found, aborting
2021.06.26 18:05:47 4: SignalDuino: Read, msg: MU;P0=-156;P1=136;P2=-1052;P3=1241;P4=486;P5=-30148;P6=360;P7=-10688;D=0123232324242424232424242324232424232324232424242324232424232423567;CP=4;R=2;
2021.06.26 18:05:47 4: SignalDuino: Parse_MU, Fingerprint for MU protocol id 8 -> TX3 Protocol matches, trying to demodulate
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, 0. try, regex ((?:)((?:42|32){43,})) did not match
2021.06.26 18:05:47 4: SignalDuino: Parse_MU, Fingerprint for MU protocol id 9 -> weather matches, trying to demodulate
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, 0. try, regex ((?:)((?:42|32){60,}(?:4|3)?)) did not match
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 13.1 -> FLAMINGO FA22RF / FA21RF / LM-101LD not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 21 -> Einhell Garagedoor not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 24 -> Visivo remote not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 26 -> xavax not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 27 -> EFTH-800 not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 28 -> IC Ledspot not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 29 -> HT12e not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 30 -> diverse not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 32 -> wireless doorbell not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 36 -> remote not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 37 -> Bresser 7009994 not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 38 -> NC-3911 not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, for MU protocol id 39, applying filterfunc SIGNALduino_compPattern
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 39 -> X10 Protocol not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 40 -> Romotec not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 42 -> wireless doorbell not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 44 -> BresserTemeo not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 44.1 -> BresserTemeo not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 45 -> Revolt not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 46 -> SKXxxx, GF0x0x not found, aborting
2021.06.26 18:05:47 4: SignalDuino: Parse_MU, Fingerprint for MU protocol id 48 -> TFA Dostmann matches, trying to demodulate
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, 0. try, regex ((?:24)((?:23|24){47,})) did not match
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 49.1 -> GT-9000 not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 49.2 -> GT-9000 not found, aborting
2021.06.26 18:05:47 4: SignalDuino: Parse_MU, Fingerprint for MU protocol id 50 -> Opus_XT300 matches, trying to demodulate
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, 0. try, regex ((?:)((?:42|32){47,}(?:4|3)?)) did not match
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 54 -> TFA 30.3233.01 not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 56 -> AC114-xxB not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 59 -> AK-HD-4 not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 62 -> Clarus_Switch not found, aborting
2021.06.26 18:05:47 4: SignalDuino: Parse_MU, Fingerprint for MU protocol id 64 -> WH2 matches, trying to demodulate
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, 0. try, regex ((?:)((?:42|32){48,})) did not match
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 66 -> WS7035 not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 69 -> Hoermann not found, aborting
2021.06.26 18:05:47 4: SignalDuino: Parse_MU, Fingerprint for MU protocol id 71 -> PEARL matches, trying to demodulate
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, 0. try, regex ((?:)((?:42|32){48,})) did not match
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 72 -> Siro shutter not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 76 -> LED XM21 not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 79 -> wireless doorbell not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 81 -> SA-434-1 not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 83 -> RH787T not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 84 -> IAN 283582 / TV-4848 not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 85 -> TFA 30.3222.02 not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 86 -> BOSCH | CAME | Novy | Neff | Refsta Topdraft not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 89 -> TFA 30.3221.02 not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 91 -> Atlantic security not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 92 -> KRINNER Lumix not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 94 -> Atech not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 97 -> Momento not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 98 -> GEA-028DB not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 99 -> Navaris 44344.04 not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 104 -> TR60C-1 not found, aborting
2021.06.26 18:05:47 5: SignalDuino: Parse_MU, start pattern for MU protocol id 110 -> ADE_WS_1907 not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 111 -> TS-FT002 not found, aborting
2021.06.26 18:05:51 4: SignalDuino: Read, msg: MU;P0=-110;P1=112;P2=156;P3=-1384;P4=1249;P5=-1034;P6=503;D=01010234545456565656545656565456545656545456545656565456545656545654;CP=6;R=2;
2021.06.26 18:05:51 4: SignalDuino: Parse_MU, Fingerprint for MU protocol id 8 -> TX3 Protocol matches, trying to demodulate
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, 0. try, regex ((?:)((?:65|45){43,})) did not match
2021.06.26 18:05:51 4: SignalDuino: Parse_MU, Fingerprint for MU protocol id 9 -> weather matches, trying to demodulate
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, 0. try, regex ((?:)((?:65|45){60,}(?:4|6)?)) did not match
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 13.1 -> FLAMINGO FA22RF / FA21RF / LM-101LD not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 21 -> Einhell Garagedoor not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 24 -> Visivo remote not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 26 -> xavax not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 27 -> EFTH-800 not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 28 -> IC Ledspot not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 29 -> HT12e not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 30 -> diverse not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 32 -> wireless doorbell not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 36 -> remote not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 37 -> Bresser 7009994 not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 38 -> NC-3911 not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, for MU protocol id 39, applying filterfunc SIGNALduino_compPattern
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 39 -> X10 Protocol not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 40 -> Romotec not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 42 -> wireless doorbell not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 44 -> BresserTemeo not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 44.1 -> BresserTemeo not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 45 -> Revolt not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 46 -> SKXxxx, GF0x0x not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 48 -> TFA Dostmann not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 49.1 -> GT-9000 not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 49.2 -> GT-9000 not found, aborting
2021.06.26 18:05:51 4: SignalDuino: Parse_MU, Fingerprint for MU protocol id 50 -> Opus_XT300 matches, trying to demodulate
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, 0. try, regex ((?:)((?:65|45){47,}(?:6|4)?)) did not match
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 54 -> TFA 30.3233.01 not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 56 -> AC114-xxB not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 59 -> AK-HD-4 not found, aborting
2021.06.26 18:05:51 4: SignalDuino: Parse_MU, Fingerprint for MU protocol id 61 -> FS10 matches, trying to demodulate
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, 0. try, regex ((?:)((?:65|10){30,})) did not match
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 62 -> Clarus_Switch not found, aborting
2021.06.26 18:05:51 4: SignalDuino: Parse_MU, Fingerprint for MU protocol id 64 -> WH2 matches, trying to demodulate
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, 0. try, regex ((?:)((?:65|45){48,})) did not match
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 66 -> WS7035 not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 69 -> Hoermann not found, aborting
2021.06.26 18:05:51 4: SignalDuino: Parse_MU, Fingerprint for MU protocol id 71 -> PEARL matches, trying to demodulate
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, 0. try, regex ((?:)((?:65|45){48,})) did not match
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 72 -> Siro shutter not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 76 -> LED XM21 not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 79 -> wireless doorbell not found, aborting
2021.06.26 18:05:51 4: SignalDuino: Parse_MU, Fingerprint for MU protocol id 80 -> EM1000WZ matches, trying to demodulate
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, 0. try, regex ((?:)((?:65|10){104,})) did not match
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 81 -> SA-434-1 not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 83 -> RH787T not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 84 -> IAN 283582 / TV-4848 not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 85 -> TFA 30.3222.02 not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 86 -> BOSCH | CAME | Novy | Neff | Refsta Topdraft not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 89 -> TFA 30.3221.02 not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 91 -> Atlantic security not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 92 -> KRINNER Lumix not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 94 -> Atech not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 97 -> Momento not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 98 -> GEA-028DB not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 99 -> Navaris 44344.04 not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 104 -> TR60C-1 not found, aborting
2021.06.26 18:05:51 5: SignalDuino: Parse_MU, start pattern for MU protocol id 110 -> ADE_WS_1907 not found, aborting
2021.06.26 18:07:38 1: Including fhem.cfg
2021.06.26 18:07:40 1: FHEM::Meta::__GetUpdatedata: ERROR: FHEM/00_SIGNALduino.pm belongs to source repository "fhem". Ignoring identical file name from source repository signalduino
2021.06.26 18:07:40 1: FHEM::Meta::__GetUpdatedata: ERROR: FHEM/14_SD_UT.pm belongs to source repository "fhem". Ignoring identical file name from source repository signalduino
Um 18:05:51 ging CPU Last auf 100% und RAM Belegung so nach und nach auf >80%. Die Log Ausgabe stockte bei id 110 (!). Nach kurzer Zeit kam es zum FHEM Neustart.
Ich habe dann zum Testen in 00_SIGNALduino.pm in den Zeilen 2566,2568 und 2570 das start
gegen starti
ausgetauscht und auch bei Protokoll 111 in der SD_ProtocolData.pm. Kein Erfolg, das Speicherleck war nach kurzer Zeit genauso wieder da.
Hast du eventlogging aktiv und ggf. andere Definitionen die auf Events reagieren?
Viel weiter gekommen bin ich mit dem Problem nicht, aber ich weiß jetzt zumindest, warum es bei mir so schnell zum Blockieren von FHEM führt. Ich empfange zu viele Sensoren, die zu der Protokolldefinition passen. Sobald ich Protokoll 111 aktiviere, geht es los:
2021.06.26 20:18:06 3: sduinoACM: FW_saveWhitelist, 0.1,0.2,0.4,1,2,3,3.1,4,6,7,8,9,10,11,12,13,13.1,13.2,14,15,16,17,17.1,18,20,21,23,24,26,27,32,33,33.1,33.2,35,36,37,38,39,41,43,44,44.1,45,46,47,48,49,49.1,49.2,50,51,53,54,54.1,55,56,57,58,59,60,61,62,64,65,66,67,68,70,71,72,72.1,73,74,74.1,76,77,78,79,80,81,83,84,85,86,87,88,89,90,91,91.1,93,94,95,96,97,98,99,103,104,105,109,110,111,112
2021.06.26 20:18:06 3: sduinoACM: getAttrDevelopment, IdList ### Attribute development is in this version ignored ###
2021.06.26 20:18:06 3: sduinoACM: IdList, attr whitelist: 0.1,0.2,0.4,1,2,3,3.1,4,6,7,8,9,10,11,12,13,13.1,13.2,14,15,16,17,17.1,18,20,21,23,24,26,27,32,33,33.1,33.2,35,36,37,38,39,41,43,44,44.1,45,46,47,48,49,49.1,49.2,50,51,53,54,54.1,55,56,57,58,59,60,61,62,64,65,66,67,68,70,71,72,72.1,73,74,74.1,76,77,78,79,80,81,83,84,85,86,87,88,89,90,91,91.1,93,94,95,96,97,98,99,103,104,105,109,110,111,112
2021.06.26 20:18:06 3: sduinoACM: IdList, MS 0.1 0.2 0.4 1 2 3 3.1 4 6 7 13 13.2 14 15 17 20 23 33 33.1 33.2 35 41 49 51 53 54.1 55 65 68 72.1 74.1 87 88 90 91.1 93
2021.06.26 20:18:06 3: sduinoACM: IdList, MU 8 9 13.1 16 17.1 21 24 26 27 32 36 37 38 39 44 44.1 45 46 48 49.1 49.2 50 54 56 59 60 61 62 64 66 67 70 71 72 73 74 76 77 78 79 80 81 83 84 85 86 89 91 94 95 97 98 99 104 105 110 111
2021.06.26 20:18:06 3: sduinoACM: IdList, MC 10 11 12 18 43 47 57 58 96
2021.06.26 20:18:06 3: sduinoACM: IdList, MN 103 109 112
2021.06.26 20:18:33 3: sduinoACM: Parse_MU, timeStart=1624731513.71548, id=111, regex=(?:67456767676767)((?:67|45){64,})
2021.06.26 20:18:33 3: sduinoACM: Parse_MU, MU;P0=-17960;P1=368;P2=-824;P3=878;P4=634;P5=-213;P6=281;P7=-573;D=0123232324545454545454567676745674567674567676767676767674545454545454545676767456767456;CP=6;R=223;
2021.06.26 20:18:33 3: sduinoACM: Parse_MU, timeEnd=1624731513.99584, dauer=0.280359029769897
2021.06.26 20:18:37 3: sduinoACM: Parse_MU, timeStart=1624731517.04936, id=111, regex=(?:17451717171717)((?:17|45){64,})
2021.06.26 20:18:37 3: sduinoACM: Parse_MU, MU;P0=-23216;P1=281;P2=-816;P3=894;P4=652;P5=-211;P7=-557;D=0123232324545454545454517171745174517174517171717171717174545454545454545171717451717451;CP=1;R=224;
2021.06.26 20:18:37 3: sduinoACM: Parse_MU, timeEnd=1624731517.09633, dauer=0.0469679832458496
2021.06.26 20:18:40 3: sduinoACM: Parse_MU, timeStart=1624731520.1637, id=111, regex=(?:17451717171717)((?:17|45){64,})
2021.06.26 20:18:40 3: sduinoACM: Parse_MU, MU;P0=-28344;P1=274;P2=-800;P3=912;P4=656;P5=-206;P7=-563;D=0123232324545454545454517171745174517174517171717171717174545454545454545171717451717451;CP=1;R=223;
2021.06.26 20:18:40 3: sduinoACM: Parse_MU, timeEnd=1624731520.21069, dauer=0.0469839572906494
2021.06.26 20:18:43 3: sduinoACM: Parse_MU, timeStart=1624731523.83451, id=111, regex=(?:16451616161616)((?:16|45){64,})
2021.06.26 20:18:43 3: sduinoACM: Parse_MU, MU;P0=-29184;P1=277;P2=-806;P3=898;P4=653;P5=-208;P6=-569;D=0123232324545454545454516161645164516164516161616161616164545454545454545161616451616451;CP=1;R=223;
2021.06.26 20:18:43 3: sduinoACM: Parse_MU, timeEnd=1624731523.88121, dauer=0.0467009544372559
2021.06.26 20:18:46 3: sduinoACM: Parse_MU, timeStart=1624731526.92883, id=111, regex=(?:16451616161616)((?:16|45){64,})
2021.06.26 20:18:46 3: sduinoACM: Parse_MU, MU;P0=-29152;P1=281;P2=-809;P3=892;P4=655;P5=-206;P6=-563;D=0123232324545454545454516161645164516164516161616161616164545454545454545161616451616451;CP=1;R=225;
2021.06.26 20:18:46 3: sduinoACM: Parse_MU, timeEnd=1624731526.9758, dauer=0.0469701290130615
2021.06.26 20:18:51 3: sduinoACM: Parse_MU, timeStart=1624731531.0346, id=111, regex=(?:07450707070707)((?:07|45){64,})
2021.06.26 20:18:51 3: sduinoACM: Parse_MU, MU;P0=294;P2=-792;P3=918;P4=645;P5=-210;P6=-160;P7=-572;D=023232324545454545454607070745074507074507070707070707074545454545454545070707450707450;CP=0;R=225;
2021.06.26 20:18:51 3: sduinoACM: Parse_MU, timeEnd=1624731531.09527, dauer=0.0606689453125
2021.06.26 20:18:54 3: sduinoACM: Parse_MU, timeStart=1624731534.46399, id=111, regex=(?:16451616161616)((?:16|45){64,})
2021.06.26 20:18:54 3: sduinoACM: Parse_MU, MU;P0=-29160;P1=288;P2=-815;P3=890;P4=651;P5=-205;P6=-564;D=0123232324545454545454516161645164516164516161616161616164545454545454545161616451616451;CP=1;R=223;
2021.06.26 20:18:54 3: sduinoACM: Parse_MU, timeEnd=1624731534.51049, dauer=0.0464920997619629
2021.06.26 20:19:26 3: sduinoACM: Parse_MU, timeStart=1624731566.97082, id=111, regex=(?:67456767676767)((?:67|45){64,})
2021.06.26 20:19:27 3: sduinoACM: Parse_MU, MU;P0=-29160;P1=368;P2=-827;P3=878;P4=643;P5=-214;P6=286;P7=-562;D=0123232324545454545454567676745674567674567676767676767674545454545454545676767456767456;CP=6;R=226;
2021.06.26 20:19:27 3: sduinoACM: Parse_MU, timeEnd=1624731567.31006, dauer=0.339236974716187
2021.06.26 20:19:30 3: sduinoACM: Parse_MU, timeStart=1624731570.30677, id=111, regex=(?:17401717171717)((?:17|40){64,})
2021.06.26 20:19:30 3: sduinoACM: Parse_MU, MU;P0=-192;P1=274;P2=-822;P3=876;P4=640;P7=-567;D=123232324040404040404017171740174017174017171717171717174040404040404040171717401717401;CP=1;R=226;
2021.06.26 20:19:30 3: sduinoACM: Parse_MU, timeEnd=1624731570.35103, dauer=0.0442550182342529
2021.06.26 20:19:31 3: Timer: time difference too large! interval=29, Sekunde=31
2021.06.26 20:19:39 3: sduinoACM: Parse_MU, timeStart=1624731579.02895, id=111, regex=(?:17451717171717)((?:17|45){64,})
2021.06.26 20:19:40 3: sduinoACM: Parse_MU, MU;P0=-9016;P1=283;P2=-811;P3=892;P4=638;P5=-207;P7=-584;D=1232323245454545454545171717451745171745171717171717171745454545454545451717174517174510;CP=1;R=220;
2021.06.26 20:19:40 3: sduinoACM: Parse_MU, timeEnd=1624731580.63256, dauer=1.60360503196716
2021.06.26 20:19:50 1: Timeout for SYSMON_blockingCall reached, terminated process 25294
2021.06.26 20:19:51 3: sduinoACM: Parse_MU, timeStart=1624731591.99757, id=111, regex=(?:12121212121212)((?:12|12){64,})
2021.06.26 20:19:51 3: sduinoACM: Parse_MU, MU;P0=-5160;P1=491;P2=-979;P3=1464;D=01212121212121232123232123212121232121232323232121212123232323232321232123232323212323212121212321212323232123;CP=1;R=212;
2021.06.26 20:19:51 3: sduinoACM: Parse_MU, timeEnd=1624731591.99847, dauer=0.000901937484741211
2021.06.26 20:20:13 3: sduinoACM: Parse_MU, timeStart=1624731613.16228, id=111, regex=(?:67456767676767)((?:67|45){64,})
2021.06.26 20:20:13 3: sduinoACM: Parse_MU, MU;P0=-7528;P1=368;P2=-810;P3=898;P4=648;P5=-211;P6=278;P7=-571;D=0123232324545454545454567676745674567674567676767676767674545454545454545676767456767456;CP=6;R=224;
2021.06.26 20:20:13 3: sduinoACM: Parse_MU, timeEnd=1624731613.42969, dauer=0.267414093017578
2021.06.26 20:20:34 3: sduinoACM: Parse_MU, timeStart=1624731634.26989, id=111, regex=(?:67456767676767)((?:67|45){64,})
2021.06.26 20:20:34 3: sduinoACM: Parse_MU, MU;P0=-29152;P1=376;P2=-814;P3=896;P4=648;P5=-205;P6=289;P7=-579;D=0123232324545454545454567676745674567674567676767676767674545454545454545676767456767456;CP=6;R=225;
2021.06.26 20:20:34 3: sduinoACM: Parse_MU, timeEnd=1624731634.53987, dauer=0.269988059997559
2021.06.26 20:20:55 3: sduinoACM: Parse_MU, timeStart=1624731655.35138, id=111, regex=(?:67456767676767)((?:67|45){64,})
2021.06.26 20:20:55 3: sduinoACM: Parse_MU, MU;P0=-29144;P1=376;P2=-819;P3=886;P4=640;P5=-201;P6=290;P7=-575;D=0123232324545454545454567676745674567674567676767676767674545454545454545676767456767456;CP=6;R=224;
2021.06.26 20:20:55 3: sduinoACM: Parse_MU, timeEnd=1624731655.62457, dauer=0.273194074630737
2021.06.26 20:20:55 3: Timer: time difference too large! interval=5, Sekunde=55
Auffällig ist, das schon der erste Eintrag FHEM für 0.28 Sekunden blockiert. Die zusätzlichen Logausgaben erfolgen direkt vor
while ( $rawData =~ m/$regex/g) {
und dann direkt nach der Schleife.
@sidey79
Meinst du in FHEM generell, oder nur im tank level device?
Hier die Attribute des device:
Andere devices loggen natürlich auch per event ins DbLog.
Kann ich in meiner 00_SIGNALduino.pm den Namen des Array "start" ändern, um das mal zu testen? Wo müsste ich das überall machen?
Nein, ich habe nicht nur start nach starti umbenannt, wenn es in der Protokollliste ein starti gibt, dann wird bei meiner optimierung der StartString so mit hilfe des starti erzeugt, daß die CPU last geringer wird.
z.B. bei dieser raw Nachricht
MU;P0=-21110;P1=484;P2=-971;P3=-488;D=012131212121212131213121213121212131313121313131312121313131313121212121313...
wird mit
start => [1,-1, 1,-2, 1,-2, 1,-2, 1,-2, 1,-2],
in der sub SIGNALduino_PatternExists in einer Schleife für jeden der 12 Werte unter Berücksichtigung der Toleranzen der entsprechende Patternwert ermittelt.
Dies ergibt dann den StartString "131212121212"
Bei meiner Optimierung wird nur zweimal die SIGNALduino_PatternExists mit jeweils nur 2 Werten aufgerufen.
Aus one => [1,-2],
wird $pstrAr[1] = "12"
Aus zero => [1,-1],
wird $pstrAr[0] = "13"
Damit lässt sich dann einfach mit einer Schleife mit den Indexwerten in starti [0,1, 1,1,1,1] der StartString erzeugen.
Du hast nun mehrere Möglichkeiten: Du kannst warten bis Sidey es gefixt hat. Du kannst die Anzahl der Werte in Start reduzieren. Du kannst in einem Testsystem die dev Version meiner Variante des 00_SIGNALduino.pm installieren.
Ich habe das Debugging für SignalDuino aktiviert und das einmal aufgezeichnet für verkürzten start => [1,-1, 1,-2, 1,-2, 1,-2, 1,-2, 1,-2], # Sync 01.1111
und einmal für normalen #start => [1,-2, 1,-1, 1,-2, 1,-2, 1,-2, 1,-2, 1,-2], # Sync 101.1111
. Bei letzterem kommt es nach erstmaliger erfolgreicher Verarbeitung des 111er Protokolls in NACHFOLGENDEN empfangenen Nachrichten zur hohen CPU/MEM Belastung, vermutlich durch die foreach Schleife über das Array $search bzw. results:
my @results = ('');
foreach my $subarray (@pstr)
{
@results = map {my $res = $_; map $res.$_, @$subarray } @results;
}
foreach my $search (@results)
{
Debug "looking for substr $search" if($debug);
return $search if (index( ${$data}, $search) >= 0);
}
Hängt die Anzahl der Element der Arrays (und damit der Schleifendurchläufe) exponentiell von der Länge von start ab?
Hier die Debug-Ausgabe für die Verarbeitung von start = 01.1111: Debug_start-01.1111_27.06.2021.txt
Dann mit start = 101.1111: Debug_start-101.1111_27.06.2021.txt
Und hier noch die sofort anschließende Verarbeitung anderer Nachrichten, wobei es dort ab Zeile 4943 bis 191566 zur hohen CPU/MEM Last kommt.
Die Nachricht, die das Problem ausgelöst hat, steht in Zeile 2481.
2021.06.27 11:58:52 1: DEBUG>SignalDuino: incoming message: (MU;P0=-2189;P1=391;P2=-4045;P3=-612;P4=-8688;P5=648;P6=-1216;P7=-840;D=012121010121010121013141012121010121212101012101010101012121012101012121210101210101056101710;CP=1;R=230;)
Debug_start-101.1111_Probleme_27.06.2021.txt
Oha, wenn ich das richtig deute, heißt das, das in dem Array @results 186.623 Strings a mindestens 7 Byte liegen - macht 1.306.361 Byte. Keine Ahnung, wie Perl das im Speicher ablegt, kann also auch deutlich mehr sein. Die Suche dauert danach eine gute Minute.
Ja, längere start
Sequenzen sind wohl der Todestoß für diesen Algorithmus. Aufgrund der Kombinatorik, die angewendet wird, um die zu suchenden Sequenzen für substr zu erzeugen, explodiert der Speicherbedarf und die CPU Leistung für die Suche förmlich bei jedem "Bit", das man hinzufügt.
@elektron-bbs Wie kommst Du darauf, dass derart viele Werte in dem Array liegen?
@sidey79 Es stimmt wohl, dass es soviele Werte sein können 😉
Ich habe eben folgendes DEBUG ergänzt und dann nochmals laufen lassen:
my @results = ('');
foreach my $subarray (@pstr)
{
@results = map {my $res = $_; map $res.$_, @$subarray } @results;
}
my $numelem = scalar(@results);
Debug "elements in results array: $numelem" if($debug);
foreach my $search (@results)
{
Debug "looking for substr $search" if($debug);
return $search if (index( ${$data}, $search) >= 0);
}
return -1;
Ausgabe (gekürzt) vor einer seeeehr langen Ausgabe von "looking for substr":
2021.06.27 21:11:04 1: DEBUG>SignalDuino: incoming message: (MU;P0=740;P1=-2076;P2=381;P3=-4022;P4=-604;P5=152;P6=-1280;P7=-8692;D=012123232321245621212121232123232427212323212123232326;CP=2;R=228;)
...
2021.06.27 21:11:05 1: DEBUG>Testing against protocol id 111 -> TS-FT002
2021.06.27 21:11:05 1: DEBUG>Searching in patternList: $VAR1 = {
'4' => '-1.3',
'7' => '-18.1',
'6' => '-2.7',
'1' => '-4.3',
'3' => '-8.4',
'5' => '0.3',
'2' => '0.8',
'0' => '1.5'
};
2021.06.27 21:11:05 1: DEBUG>msgStartLst: $VAR1 = [
1,
-2,
1,
-1,
1,
-2,
1,
-2,
1,
-2,
1,
-2,
1,
-2
];
...
2021.06.27 21:11:06 1: DEBUG>elements in results array: 139968
2021.06.27 21:11:06 1: DEBUG>looking for substr 24242424242424
2021.06.27 21:11:06 1: DEBUG>looking for substr 24242424242426
2021.06.27 21:11:06 1: DEBUG>looking for substr 24242424242404
2021.06.27 21:11:06 1: DEBUG>looking for substr 24242424242406
etc. (139968 Zeilen!)
Wenn ich den Code richtig deute:
foreach my $search (@results)
{
Debug "looking for substr $search" if($debug);
return $search if (index( ${$data}, $search) >= 0);
}
wird nach $search in dem Array @results gesucht.
Gegenfrage: Wieso überhaupt eine Suche nach verschiedenen Startsequenzen? Es gibt doch genau nur eine.
@elektron-bbs
Die Suche ist nötig um die richtige Kombination zu finden, da die Toleranz da auch Werte zulässt, welche nicht existieren. Um das zu finden, wird die Kombination gesucht.
@docolli Danke für das Debuggen. Jetzt bin ich echt baff.
EDIT: Ich habe da einen Ansatz, wie man die Vielzahl an Kombinationen umgehen könnte. Ich muss das aber erst noch genauer durchdenken, wie ich das möglichst effizient umsetze.
@docolli
Hi, ich habe den Fix nun fertig. Wenn Du möchtest kannst Du ihn aus #988 ausprobieren. Den Sensor hier ist da im Moment noch mit eingebaut.
@sidey79
Hi, vielen Dank für deine Mühe! Ich habe den Code aus 00_SignalDuino.pm aus deinem branch kopiert und die Protokolldefinition wieder auf die ursprüngliche start-Länge angepasst.
name => 'TS-FT002',
comment => 'Water tank level monitor with temperature',
id => '111',
knownFreqs => '433.92',
one => [1,-2], # 480,-960
zero => [1,-1], # 480,-480
#start => [1,-2, 1,-1, 1,-2, 1,-2, 1,-2, 1,-2, 1,-2, 1,-2, 1,-1, 1,-1, 1,-1], # Sync 101.1111.1000 (Test)
start => [1,-2, 1,-1, 1,-2, 1,-2, 1,-2, 1,-2, 1,-2], # Sync 101.1111 (Real)
#start => [1,-1, 1,-2, 1,-2, 1,-2, 1,-2, 1,-2], # Sync 01.1111
#start => [1,-2, 1,-2, 1,-2, 1,-2, 1,-2], # Sync 1.1111 - Test wegen RAM Problemen
clockabs => 480,
format => 'twostate',
clientmodule => 'SD_WS',
modulematch => '^W111#',
preamble => 'W111#5F', # add sync 0101.1111
length_min => '64',
length_max => '64',
Kurz danach konnte ich schon den Empfang der ersten Nachricht beobachten. Für 10-15s ging die CPU Last des perl Prozesses auf 100%, Speicherverbrauch blieb gering. Sieht so schon mal sehr gut aus. Ich lasse es jetzt mal bis heute Abend laufen und berichte dann wieder.
Bislang keine Probleme, ich empfange Nachrichten von Protokoll 111 und 110. CPU und RAM Bedarf sind unauffällig.
Hier noch die Sysmon Daten von dieser und letzter Woche. Seit heute morgen 8h ist der Patch drauf:
Noch was wegen den Temperatur-Peaks, die @elektron-bbs mal ganz am Anfang verdächtig gefunden hat ("da kommen fehlerhafte Werte durch" -> https://github.com/RFD-FHEM/RFFHEM/issues/977#issuecomment-860027187). Eben hatte ich im Grafen einen längen Peak, bei dem die Temp von 19 auf 20°C sprunghaft angestiegen ist.
Lustigerweise hatte ich auch auf dem mitgelieferten Display eine Anzeige von 20.0°C, jetzt wieder 19.0°C. Ich vermutet mal das ist ein Bug im Sensor und kein SignalDuino Problem.
Dann müssen wir uns ja wegen der Peaks keine Gedanken weiter machen :-) In dem Diagramm sieht es so aus, als ob es jeweils genau ein Grad wäre.
Es läuft bei mir immer noch problemlos! Änderung am 06.07. um 08:00h eingepflegt.
Auch die Anzahl der erfolgreich empfangenen Werte hat sich nicht geändert:
Datum | Anzahl |
---|---|
2021-07-07 | 372 |
2021-07-06 | 403 |
2021-07-05 | 325 |
2021-07-04 | 406 |
2021-07-03 | 346 |
2021-07-02 | 313 |
2021-07-01 | 327 |
2021-06-30 | 243 |
Ich habe mir noch weitere TS-FT002 angeschafft. Diese sollte ich ja auch problemlos empfangen können (Ja! Jetzt kommt der Härtetest 😁). Da hätte ich aber noch eine Frage zur korrekten Definition in FHEM.
Der jetzige Sensor wurde automatisch erkannt und so angelegt:
define SD_WS_111_TL SD_WS SD_WS_111_TL
Wenn ich jetzt dann 2 Sensoren habe, dann kommt die Seriennummer, die bei jeden Batteriewechsel neu vergeben wird, ins Spiel. Die Definition lautet ja so:
define <name> SD_WS <code>
<code> is the channel or individual identifier used to identify the sensor.
Meine MSG sieht folgendermaßen aus: W111#5F168840A1A0C40044
, d.h. für mich ist die ID die 0x16, somit müsste ich die Definition ändern in
define SD_WS_111_TL SD_WS 0x16
Ist das korrekt? Dann muss ich herausfinden, welche ID der andere Sensor bekommt und diesen auch manuell anlegen? Klar, bei einem Batteriewechel muss ich die ID wieder neu herausfinden.
Das Define müsste wahrscheinlich so erfolgen:
define SD_WS_111_TL_16 SD_WS SD_WS_111_TL_16
aber besser ist es, wenn du bei deinem SIGNALduino in das Attribut "longids" den Device-Typ "SD_WS_111_TL" einträgst. Dann sollten die Sensoren automatisch mit der ID angelegt werden.
Danke, der zweite Sensor (Heizöltank) läuft! (Der drittte ist leider defekt und zeigt immer als distance "3822" an, den habe ich reklamiert).
Lustigerweise hat der auch die Temperatur-Peaks. Die sind immer so um x.1°C rum, da hüpft er dann manchmal auf die nächst höhere x.0°C Temperatur.
2021-07-08 21:28:50 | SD_WS_111_TL | SD_WS | temperature: 17 | temperature | 17 | °C |
2021-07-08 21:25:50 | SD_WS_111_TL | SD_WS | temperature: 18 | temperature | 18 | °C |
2021-07-08 21:16:50 | SD_WS_111_TL | SD_WS | temperature: 17.1 | temperature | 17.1 | °C |
2021-07-08 02:30:20 | SD_WS_111_TL | SD_WS | temperature: 17 | temperature | 17 | °C |
2021-07-08 02:24:20 | SD_WS_111_TL | SD_WS | temperature: 17 | temperature | 17 | °C |
2021-07-08 02:21:20 | SD_WS_111_TL | SD_WS | temperature: 18 | temperature | 18 | °C |
2021-07-08 02:15:21 | SD_WS_111_TL | SD_WS | temperature: 18 | temperature | 18 | °C |
2021-07-08 02:03:20 | SD_WS_111_TL | SD_WS | temperature: 17.1 | temperature | 17.1 | °C |
2021-07-08 02:00:20 | SD_WS_111_TL | SD_WS | temperature: 17.1 | temperature | 17.1 | °C |
2021-07-06 15:36:20 | SD_WS_111_TL | SD_WS | temperature: 19.1 | temperature | 19.1 | °C |
2021-07-06 15:30:20 | SD_WS_111_TL | SD_WS | temperature: 20 | temperature | 20 | °C |
2021-07-06 15:27:20 | SD_WS_111_TL | SD_WS | temperature: 19 | temperature | 19 | °C |
2021-07-06 03:39:19 | SD_WS_111_TL | SD_WS | temperature: 16 | temperature | 16 | °C |
2021-07-06 03:36:19 | SD_WS_111_TL | SD_WS | temperature: 16 | temperature | 16 | °C |
2021-07-06 03:33:20 | SD_WS_111_TL | SD_WS | temperature: 17 | temperature | 17 | °C |
2021-07-06 03:30:19 | SD_WS_111_TL | SD_WS | temperature: 16.1 | temperature | 16.1 | °C |
2021-07-06 03:27:19 | SD_WS_111_TL | SD_WS | temperature: 16.1 | temperature | 16.1 | °C |
Lädst du mal bitte jeweils ein DMSG vorher, während und nach dem Peak hoch. Vielleicht entdecken wir ja doch noch einen Fehler im Code.
2021-07-09_18:53:37 SD_WS_111_TL_D2 T: 19.1 D: 110
2021-07-09_18:53:37 SD_WS_111_TL_D2 temperature: 19.1
2021-07-09_18:53:37 SD_WS_111_TL_D2 RAWMSG: MU;P0=470;P1=-981;P3=-500;P4=-22532;P6=1252;P7=-3576;D=67010301010101010101030103030103010303030103030303010103030303030301010103030303010101010303030303030103030103030303030303030303010103030303030104010301010101010101030103030103010303030103030303010103030303030301010103030303010101010303030303030103030103;CP=0;R=33;O;
2021-07-09_18:53:37 SD_WS_111_TL_D2 DMSG: W111#5FD2886070F02400C1
2021-07-09_18:56:37 SD_WS_111_TL_D2 T: 20 D: 110
2021-07-09_18:56:37 SD_WS_111_TL_D2 temperature: 20
2021-07-09_18:56:37 SD_WS_111_TL_D2 DMSG: W111#5FD288607010A400A1
2021-07-09_18:56:37 SD_WS_111_TL_D2 RAWMSG: MU;P0=-21598;P1=480;P2=-973;P4=-492;D=01214121212121212121412141412141214141412141414141212141414141414121212141414141414141214141414121412141412141414141414141414141214121414141412101214121212121212121412141412141214141412141414141212141414141414121212141414141414141214141414121412141412141;CP=1;R=33;O;
2021-07-09_19:02:37 SD_WS_111_TL_D2 T: 19.1 D: 110
2021-07-09_19:02:37 SD_WS_111_TL_D2 temperature: 19.1
2021-07-09_19:02:37 SD_WS_111_TL_D2 DMSG: W111#5FD2886070F02400C1
2021-07-09_19:02:37 SD_WS_111_TL_D2 RAWMSG: MU;P0=-22814;P1=1152;P2=-16064;P3=482;P4=-971;P5=-474;D=01234353434343434343435343535343534353535343535353534343535353535353434343535353534343434353535353535343535343535353535353535353534343535353535343034353434343434343435343535343534353535343535353534343535353535353434343535353534343434353535353535343535343;CP=3;R=29;O;
Specifications for new sensor / switch / or other device ...
Specifications
I've already identified messages with the help of this project -> https://github.com/theovassiliou/WTLMReceiver They come exactly every 180s and are in sync with the receive signal indicator on the base LCD.
Signal 0 = +480/-480ms Signal 1 = +480/-960ms
I've already included into my local SD_Protocol.Data.pm the following defintion and activated protocoll 120:
However, a new device with protocol 120 has not been added, but a device "SIGNALduino_unknown_31" using protocol ID 31. What have I done wrong in my definition?
Additionally taken from the other github project the protocol seems to be:
Temperature (of water tank)*10: Nibble 13 (High) - 12 (Middle) - 10 (Low) [in °C; -40, if invalid] Depth: Nibble 7 (High) - 6 (Middle) - 8 (Low) [in cm] Device ID: Nibble 4 (High) - 5 (Low) Serial: Nibble 3 (High) - 3 (Low) Battery: Nibble 9 TransmitInterval: Nibble 11
Check also WTLMReceiver.cpp for details.