[gelöst] weiterhin Probleme mit configDB.pm - anderes Thema leider geschlossen

Begonnen von rubbertail, 05 Juli 2016, 10:40:01

Vorheriges Thema - Nächstes Thema

rubbertail

Salut betateilchen,

ich hab leider auch das Problem aus https://forum.fhem.de/index.php/topic,55275.0.html - deinen Workaround habe ich zunächst getestet, so dass meine configDB.conf jetzt so aussieht (vorher waren die Kommentare aus der commandref noch drin, es waren nur die u. a. Zeilen "unauskommentiert" - ich hab aber nun alle Kommentarzeilen rausgeworfen und finde auch keine Leerzeilen mehr):

%dbconfig= (
connection => "mysql:database=configDB;host=10.10.10.12;port=3306",
user => "fhemdb",
password => "xxxxxx",
);


Ich hab aus dem SVN die neue configDB.pm (und auch die 98_configDB.pm für das FHEM-Verzeichnis) runtergeladen und in die jeweiligen Verzeichnisse gepackt, auf Ownership etc. geachtet... mit allem Neu erhalte ich folgende Meldung beim Versuch, über

/etc/init.d/fhem start

FHEM zu starten:
2016.07.05 10:30:42 1: PERL WARNING: Use of uninitialized value in string eq at configDB.pm line 212.
2016.07.05 10:30:42 1: PERL WARNING: Use of uninitialized value $cfgDB_dbconn in pattern match (m//) at configDB.pm line 229.
2016.07.05 10:30:42 1: PERL WARNING: Use of uninitialized value $cfgDB_dbconn in pattern match (m//) at configDB.pm line 231.
2016.07.05 10:30:42 1: PERL WARNING: Use of uninitialized value $cfgDB_dbconn in pattern match (m//) at configDB.pm line 233.
2016.07.05 10:30:42 1: PERL WARNING: Use of uninitialized value $cfgDB_dbconn in concatenation (.) or string at configDB.pm line 676.
Can't connect to data source 'dbi:' because I can't work out what driver to use (it doesn't seem to contain a 'dbi:driver:' prefix and the DBI_DRIVER env var is not set) at configDB.pm line 676.


Vermutlich mach ich irgendwas falsch, aber leider reichen meine Fähigkeiten noch nicht dazu rauszukriegen, was das ist. Hättest du bitte einen Tipp für mich?

Vielen Dank.

Martin
FHEM auf Raspi, CUL433, CUL868, RFXTRX433e, CULCuBE
FRITZ: Fritzbox7590AX, 6xFritzDECT301, 10xFritzDECT200, FritzRepeater 6000
MAX!: Fensterkontakte
netatmo: Wetterstation & Thermostat
Milights, IT, Withings, HUE

reibuehl

Ich denke mal, dass der Fehler in diesem Teil sitzt:

## begin experimental
## support multiple hosts from one fhem installation
##
my $configs = join("",@config);
my @configs = split(/;/,$configs);
my $count   = @configs;

if ($count > 1) {
   my $fhemhost = hostname;
   foreach my $c (@configs) {
      next unless $c =~ m/^%dbconfig.*/;
      eval $c;
      last if ($dbconfig{fhemhost} eq $fhemhost);
   }
   eval $configs[0] unless (defined($dbconfig{fhemhost}) && length($dbconfig{fhemhost}))
} else {
   eval $configs[0];
}
##
## end experimental


Vermutlich tut der Code in der Zeile

my @configs = split(/;/,$configs);

nicht dass, was er eigentlich tun soll. Ich denke mal der soll nicht innerhalb einer %dbconfig() Definition am Semikolon trennen sondern wohl eher bei verschiedenen %dbconfig() Blöcken diese dann trennen oder sehe ich das falsch? Kann es sein, das der Code nur bei SQlite korrekt funktioniert, weil dort keine ";" innerhalb des "connection" strings vorkommen?
Reiner.

betateilchen

Zitat von: reibuehl am 05 Juli 2016, 13:18:39
Ich denke mal der soll nicht innerhalb einer %dbconfig() Definition am Semikolon trennen sondern wohl eher bei verschiedenen %dbconfig() Blöcken diese dann trennen oder sehe ich das falsch? Kann es sein, das der Code nur bei SQlite korrekt funktioniert, weil dort keine ";" innerhalb des "connection" strings vorkommen?

100 Punkte. Muss ich mir heute abend was anderes ausdenken.

@rubbertail: nimm einfach die ältere configDB.pm aus Deinem restore-Verzeichnis (vor dem vergangenen Wochenende)

Zitat(und auch die 98_configDB.pm für das FHEM-Verzeichnis)

Eine Datei mit diesem Namen gibt es nicht. Man achte auf Groß-/Kleinschreibung ;)
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rubbertail

FHEM auf Raspi, CUL433, CUL868, RFXTRX433e, CULCuBE
FRITZ: Fritzbox7590AX, 6xFritzDECT301, 10xFritzDECT200, FritzRepeater 6000
MAX!: Fensterkontakte
netatmo: Wetterstation & Thermostat
Milights, IT, Withings, HUE

reibuehl

Zitat von: betateilchen am 05 Juli 2016, 13:41:45
100 Punkte. Muss ich mir heute abend was anderes ausdenken.

Wie soll den das Config File aussehen, das Du gerne hättest? Ich hab nicht ganz verstanden, für welchen Fall man mehrere Configs brauchen könnte.
Reiner.

betateilchen

Zitat von: reibuehl am 05 Juli 2016, 14:12:19
Ich hab nicht ganz verstanden, für welchen Fall man mehrere Configs brauchen könnte.

Das kannst Du auch nicht verstanden haben, denn das habe ich noch nirgends erklärt  8)

Bei mir nutzen mehrere raspberry eine einzige fhem-Installation, die auf einem nfs-share liegt. Es gibt aber nur eine einzige configDB.conf, also muss ich in dieser Datei mehrere Konfigurationen haben, damit jeder raspberry "seine" Konfigurationsdatenbank verwendet. Die Unterscheidung erfolgt anhand des hostname der einzelnen Plattform, die in der .conf zusätzlich eingetragen wird.


%dbconfig= (
connection => "mysql:database=configDB;host=10.10.10.12;port=3306",
user => "fhemdb",
password => "xxxxxx",
fhemhost => raspberry1
);


Das feature ist noch "experimental". An die Fälle mysql und postgresql, die beide mit ; innerhalb der Konfiguration arbeiten, hatte ich schlichtweg nicht gedacht.

Den split werde ich wahrscheinlich anhand %dbconfig durchführen anstatt an Semikolon. Muss ich heute abend testen.

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

rubbertail

Bestens, mit der "alten" configDB.pm wills wieder. Hätt ich nun auch selber drauf kommen können... danke für die Brettvormkopfentfernhilfe. :)
FHEM auf Raspi, CUL433, CUL868, RFXTRX433e, CULCuBE
FRITZ: Fritzbox7590AX, 6xFritzDECT301, 10xFritzDECT200, FritzRepeater 6000
MAX!: Fensterkontakte
netatmo: Wetterstation & Thermostat
Milights, IT, Withings, HUE

reibuehl

Zitat von: betateilchen am 05 Juli 2016, 14:34:59
Bei mir nutzen mehrere raspberry eine einzige fhem-Installation, die auf einem nfs-share liegt. Es gibt aber nur eine einzige configDB.conf, also muss ich in dieser Datei mehrere Konfigurationen haben, damit jeder raspberry "seine" Konfigurationsdatenbank verwendet. Die Unterscheidung erfolgt anhand des hostname der einzelnen Plattform, die in der .conf zusätzlich eingetragen wird.

Wäre es nicht besser, den Pfad zu der systemspezifischen configDB.cfg als fhem.pl Kommandozeilen-Option anzugeben? Oder über einen Link aus dem NFS mount heraus auf ein lokales File oder ein Overlay mount oder... :-)
Reiner.

betateilchen

#8
Kann mal bitte einer der mysql-Anwender die angehängte Version testen
und dann Rückmeldung geben, ob fhem wieder funktioniert?

Aktuell habe ich keinen mysql Server greifbar, um es selbst auszuprobieren.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

cortmen

 :)leider nein.

PERL WARNING: Use of uninitialized value in string eq at configDB.pm line 212.
2016.07.05 19:47:11 1: PERL WARNING: Use of uninitialized value $cfgDB_dbconn in pattern match (m//) at configDB.pm line 229.
2016.07.05 19:47:11 1: PERL WARNING: Use of uninitialized value $cfgDB_dbconn in pattern match (m//) at configDB.pm line 231.
2016.07.05 19:47:11 1: PERL WARNING: Use of uninitialized value $cfgDB_dbconn in pattern match (m//) at configDB.pm line 233.
2016.07.05 19:47:11 1: PERL WARNING: Use of uninitialized value $cfgDB_dbconn in concatenation (.) or string at configDB.pm line 676.
Can't connect to data source 'dbi:' because I can't work out what driver to use (it doesn't seem to contain a 'dbi:driver:' prefix and the DBI_DRIVER env var is not set) a

betateilchen

ok... da ich nicht noch 100 Fragen stellen möchte (z.B. ob die Datei an die richtige Stelle kopiert wurde, ob ein restart durchgeführt wurde usw.) werde ich mir nun doch einen mysql Server aufsetzen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

betateilchen

#11
Bitte jetzt nochmal testen.
Die angehängte Version habe ich erfolgreich mit mysql und sqlite getestet.
Da der connection-String für postgresql auch ein ; enthält, gehe ich davon aus, dass es auch dort funktioniert.

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


betateilchen

Danke für die Unterstützung & Rückmeldung, die Version habe ich nun eingecheckt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rubbertail

Kam gestern nicht mehr dazu zu testen; Rückmeldung heute dennoch: Mit der neuen Version klappts auch bei mir. Danke betateilchen.
FHEM auf Raspi, CUL433, CUL868, RFXTRX433e, CULCuBE
FRITZ: Fritzbox7590AX, 6xFritzDECT301, 10xFritzDECT200, FritzRepeater 6000
MAX!: Fensterkontakte
netatmo: Wetterstation & Thermostat
Milights, IT, Withings, HUE