[gelöst] Problem mit uniqueID

Begonnen von andies, 15 Februar 2020, 09:17:40

Vorheriges Thema - Nächstes Thema

andies

#30
Vielen Dank für die Hilfe! Dass HTTPMOD nicht die Ursache ist, hatte ich schon die ganze Zeit geahnt - ich hatte ja die entsprechenden setKeyValue-Stellen mit Log3 markiert, sie wurden aber gar nicht aufgerufen. Jetzt brauche ich da nicht weitersuchen.

Dass es keine Readings gibt liegt daran, dass der Bus nach 22 Uhr nicht mehr fährt.

Und die uniqueID-Datei hatte ich zwei Mal gelöscht (genauer: umbenannt, neu anlegen lassen und dann gelöscht). Daran kann es also auch nicht liegen.

Also meine Theorie ist derzeit die folgende. Wenn da mehrere uniqueID-Werte in die Datei geschrieben werden, scheint die Funktion getUniqueID() in FHEM nicht korrekt zu funktionieren. Der Code ist aber bei mir in Ordnung, ich habe ihn mir angeschaut. Also liegt irgendwo eine korrupte Datei bei mir im Verzeichnis, die beim Aufruf dieses BVG-devices ebenfalls angesprochen wird und irgendwie FHEM temporär zum Absturz bringt: FHEM kann dann die uniqueID nicht einlesen, sondern schreibt sie neu.  Komisch ist, dass da auch Leerzeilen geschrieben werden; vielleicht hilft mir das weiter.

<edit> Wenn ich die BVG Definition in ,,raw definition" speichere, taucht das Problem auch auf. Auch dann, wenn ich da (inhaltlich) nichts ändere.

<edit2> Wenn ich ein anderes HTTPMOD-device so neu speichere, passiert nichts.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

betateilchen

Zitat von: andies am 17 Februar 2020, 06:03:12
Wenn da mehrere uniqueID-Werte in die Datei geschrieben werden

die uniqueID heißt so, weil sie "unique" sein sollte.

Zitat von: andies am 17 Februar 2020, 06:03:12
scheint die Funktion getUniqueID() in FHEM nicht korrekt zu funktionieren.

Nun lass doch mal die zentralen FHEM-Funktionen in Ruhe. Irgendwas zerschießt Dir das Textfile, in dem die IDs gespeichert werden (da gehören keine Leerzeilen hin!).
Danach musst Du suchen. Und da das Problem nur bei Dir auftritt, solltest Du die Antwort auch in Deiner Installation finden.

-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

andies

Ich bin da ganz bei Dir. Ich will nur systematisch vorgehen und nicht wahllos neu- oder überinstallieren. Und bei der Detektivarbeit ist meine einzige Spur derzeit uniqueID, denn mit den ,,not useable" Dateien kann ich nichts anfangen.


Gesendet von iPad mit Tapatalk Pro
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

#33
Nun war der Tipp doch hilfreich. Ich habe mal nach "is not useable" gesucht. Taucht genau einmal auf, in FHEMWEB:
    if(open(FH, "$FW_icondir/$p")) {
      my $data;
      do {
        $data = <FH>;
        if(!defined($data)) {
          Log 1, "$FW_icondir/$p is not useable"; <=== an dieser Stelle
          return "";
        }
      } until( $data =~ m/^<svg/ );

Und das passt auch zu dem Problem mit uniqueID, denn in fhem.pl wird nur dann sinnloserweise in die Datei uniqueID geschrieben, wenn eben diese Datei nicht gefunden wird, also Zeile 5459
sub
getKeyValue($)
{
  my ($key) = @_;
  my $fName = AttrVal("global", "keyFileName", "uniqueID");
  $fName =~ s/\.\.//g;
  $fName = $attr{global}{modpath}."/FHEM/FhemUtils/$fName";
  my ($err, @l) = FileRead($fName); <=== wenn das einen Fehler zurückgibt, geschieht der uniqueID-Unsinn, den ich beobachte
  return ($err, undef) if($err);
  for my $l (@l) {
    return (undef, $1) if($l =~ m/^$key:(.*)/);
  }
  return (undef, undef);
}

wobei FileRead ebenfalls mit FileHandle arbeitet,
    if(open(FH, $fileName)) {
      @ret = <FH>;   <==== hier
      close(FH);
      chomp(@ret);
    } else {
      $err = "Can't open $fileName: $!";
    }


Da weiß ich nun nicht wirklich weiter, ich brauche anscheinend Hilfe "von oben". Wann wird in FHEM ein Filehandle <FH> gesperrt? Ich glaube nicht, dass das vom Betriebssystem aus gesperrt ist, denn ich kann ja zugreifen. Nur FHEM kann das nicht. Wie mache ich denn hier jetzt weiter? Wo ist die Gemeinsamkeit der Dateien in den Ordnern
Zitat/opt/fhem/FHEM/FhemUtils
/opt/fhem/FHEM/www/images/fhemSVG/
/opt/fhem/FHEM/www/images/openautomation/
denn Dateien in den Ordnern scheinen gesperrt zu werden.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

andies

Von wegen: FSVG.

Alles weitere in dem anderen Thread. Danke nochmal, das ich nicht gleich vor die Tür gesetzt werde. Problem gelöst.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

viegener

Kein Problem - das war ja ein interessantes Rätset.

Zur Vermeidung in Zukunft kann ich den Vorschlag aus https://www.perl.com/pub/2004/06/18/variables.html/ empfehlen:

{
    local $/ = "%%\n";

    while (<QUOTE>) {
      chomp;
      print;
    }
  }


Damt kann es gar kein vergessens rücksetzen geben.
Kein Support über PM - Anfragen gerne im Forum - Damit auch andere profitieren und helfen können