Error messages while initializing FHEM: configDB: Could not read FritzBox phoneb

Begonnen von Invers, 04 Januar 2015, 17:02:33

Vorheriges Thema - Nächstes Thema

JoWiemann

Zitat von: betateilchen am 04 Januar 2015, 23:26:24

sub
Debug($) {
  my $msg= shift;
  Log 1, "DEBUG>" . $msg;
}


Dann lies doch mal bitte Rückwarts und zeig mit den Punkt, wo ich diese Zeile vorgeschlagen habe. Ich habe Invers nur gebeten diese, wo auch immer entstandene Zeile, durch einen Log3 Aufruf zu ersetzen.
Jörg Wiemann

Slave: RPi B+ mit 512 MB, COC (868 MHz), CUL V3 (433.92MHz SlowRF); FHEMduino, Aktuelles FHEM

Master: CubieTruck; Debian; Aktuelles FHEM

betateilchen

Zitat von: Invers am 04 Januar 2015, 23:30:11
Dass Filezilla mit dem Überschreiben von Dateien oft Probleme hat, habe ich schon länger bemerkt.

Filezilla hat keine Probleme mit dem Überschreiben von Dateien, solange Du nicht irgendwann in den FZ-Einstellungen festgelegt hast, wie sich Filezilla im Falle einer bereits vorhandenen Datei verhalten soll. Man kann nämlich durchaus einstellen, dass Filezilla NIE eine vorhandene Datei überschreibt und in diesem Fall auch keine Meldung ausgibt. Aber das Standardverhalten ist: Fragen was gemacht werden soll.

Überprüfe doch einfach mal, ob Du nicht diese Standardeinstellung verändert hast.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

Zitat von: JoWiemann am 04 Januar 2015, 23:34:28
Ich habe Invers nur gebeten diese, wo auch immer entstandene Zeile, durch einen Log3 Aufruf zu ersetzen.

Du hast doch überhaupt nicht kapiert, worum es geht. Ich hatte Invers gebeten, eine Debug Zeile einzubauen, um eine bestimmte Information für die Fehlersuche zu erzeugen und Du schlägst daraufhin vor, diese Zeile wieder auszubauen und durch etwas anderes zu ersetzen. (http://www.smiliesuche.de/smileys/vogel-zeigen/vogel-zeigen-smilies-0001.gif)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Invers

Ich habe ja Windows und Filezilla erst letzte Woche neu erstellt. Die Einstellungen sind unverändert und ich werde gefragt, ob überschrieben werden soll. Ich hatte ja aber sogar die Datei vorher gelöscht und dann kopiert.
Naja, ich werde das mal beobachten. Vielleicht kann ich das Verhalten ja nachvollziehen. Ich probier mal in einer ruhigen Minute.
um die Änderung habe ich per PN gebeten. Sollte also klappen.

Ich danke dir für deine Hilfe. Läuft ja jetzt, bis zum Update :-)
Pi3B+ mit SSD/ Bullseye | FB7590 AX | 12 x Dect200 | CUL433+868 | SDuino | HM-LAN | 3 x Heizung FHT + FKontakte | KeyMatic + 4 FB | HM Wandtaster 2-fach m. LED | 6 x Türkont. TFK-TI | HM-Bew.-Melder innen | 3 x Smoked. HM-SEC-SD-2

Markus Bloch

Hallo betateilchen,

vielen Dank für den Hinweis. Ich war die letzten Tage leider nicht sehr aktiv im Forum aufgrund anderer Sachen, daher habe ich das ganze nur am Rande wahrgenommen.

Der Unterschied zwischen if($err) und if(defined($err)) ist mir wohlbekannt. Die Frage die sich nun mir aber stellt ist, warum liefert das configDB Äquivalent zu FileRead ein $err = "" anstatt wie die originale FHEM Funktion FileRead ein $err = undef?

Ich kann es gerne in FB_CALLMONITOR ändern. Ich habe extra vorher die FileRead() Funktion durchgeschaut um $err richtig zu prüfen.

Ich werde es heute Abend einbauen, mich wundert nur, warum es in configDb anders ist.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

betateilchen

Hallo Markus,

das FileRead() liefert ein "" zurück, weil es irgendeine Stelle in der Entwicklung dieser generischen Funktion gab (ich weiss nicht mehr genau, wo) die mit einem undef als Rückgabewert nicht zurückkam.

Im Prinzip solteste Du wohl auf beides prüfen

if(defined($err) && $err)

denn ansonsten bekommst Du perl warnings, wenn Du einen Rückgabewert im Fall $err=undef auf einen Inhalt prüfst und die Variable gar nicht (mehr) vorhanden ist.

Was Du aber in FB_Callmonitor auf jeden Fall noch klären solltest: Wie kommt die xml Datei in die configDB, wenn der Anwender mit der Datenbank anstatt fhem.cfg arbeitet und die xml Datei neu gelesen wird?

Hierzu gibt es prinzipiell zwei Möglichkeiten:

1. Du importierst (genauer: verschiebst) die Datei aus dem Dateisystem in die Datenbank


fhem("configdb filemove <path_and_filename>") if configDBUsed();


2. Du schreibst die xml-Datei mit FileWrite() In diesem Fall brauchst Du Dich nicht darum kümmern, ob mit configDB oder fhem.cfg gearbeitet wird.

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

Markus Bloch

Hallo betateilchen,

Zitat von: betateilchen am 05 Januar 2015, 18:43:42
Was Du aber in FB_Callmonitor auf jeden Fall noch klären solltest: Wie kommt die xml Datei in die configDB, wenn der Anwender mit der Datenbank anstatt fhem.cfg arbeitet und die xml Datei neu gelesen wird?

Hierzu gibt es prinzipiell zwei Möglichkeiten:

1. Du importierst (genauer: verschiebst) die Datei aus dem Dateisystem in die Datenbank


fhem("configdb filemove <path_and_filename>") if configDBUsed();


2. Du schreibst die xml-Datei mit FileWrite() In diesem Fall brauchst Du Dich nicht darum kümmern, ob mit configDB oder fhem.cfg gearbeitet wird.

Ich bin da eigentlich der Meinung, das ein normale FHEM Gerätemodul sich nicht umbedingt um configDB-spezifische Sachen kümmern sollte. Wenn ein User ConfigDB verwendet, sollte er wissen, dass Dateien in die ConfigDB importiert werden müssen (dazu gibt es ja den Befehl "configdb fileimport <filename>"). Die phonebook.xml um die es ja hier geht wird durch den User bereitgestellt und nur lesend durch FB_CALLMONITOR verarbeitet.

Wenn der User also configDB nutzt, sollte er wissen, dass er das File in die DB importieren muss. Ich sehe nicht die Notwendigkeit, dies im Modul zu machen, da das Modul diese Datei auch nicht generiert, sondern sie ausschließlich durch den User bereitgestellt wird.

Bitte korrigier mich, falls ich hier falsch liege.

Viele Grüße

Markus
Developer für Module: YAMAHA_AVR, YAMAHA_BD, FB_CALLMONITOR, FB_CALLLIST, PRESENCE, Pushsafer, LGTV_IP12, version

aktives Mitglied des FHEM e.V. (Technik)

betateilchen

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