Hauptmenü

Datenbank Problem

Begonnen von david_ffm, 19 September 2015, 14:43:22

Vorheriges Thema - Nächstes Thema

david_ffm

Ich habe hier leider keine Ideen wo das Problem liegen könnte und was ich untersuchen kann - ich versuche es einfach so genau zu erklären wie möglich und hoffe jemanden hat eine Idee.
Ich hatte eine alte fhem Installation auf einer ältere SuSe Linux die Jahre lange problemlos gelaufen ist.
Diese habe ich nun umgezogen auf neue Hardware (Asus Beebox Celeron N3000) und Linux (SuSe Desktop 13.2).
Ich habe darauf die neueste FHEM Installiert (5.6).
Die alte Installation hatte eine MySQL Datenbank wo alles protokoliert wurde.
In der fhem.cfg gab es die Zeilen:
define logdb DbLog /etc/fhem/db.conf .*:.*
und in /etc/fhem/db.conf so etwas:
%dbconfig= (
        connection => "mysql:database=www_test;host=localhost;port=3306",
        user => "user_test",
        password => "notarealpassword",
);


Das hat alles prima funktioniert und ich habe es so gemacht auf der neue Installation auch.
Ich habe die Datenbank auf dem neuen Server auch umgezogen, aber jetzt schreibt fhem nichts mehr darin und gibt auch keine Fehlermeldung aus.
Die Datenbankverbindung klappt scheinbar, zumindest im Log steht:
2015.09.19 14:09:06 3: Connecting to database mysql:database=www_test;host=localhost;port=3306 with user user_test
und ich sehe da keine Fehlermeldungen.

Beim starten von fhem werden einige solche Zeilen an der Console (stderr?) geschrieben, keine Ahnung ob das eine Rolle spielt:
beebox:~ # given is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1101, <$fh> line 190.
when is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1103, <$fh> line 190.
when is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1111, <$fh> line 190.
when is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1121, <$fh> line 190.
when is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1129, <$fh> line 190.
given is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1134, <$fh> line 190.
when is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1135, <$fh> line 190.
when is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1136, <$fh> line 190.
when is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1137, <$fh> line 190.
when is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1150, <$fh> line 190.


Ich habe von der MySQL Console unter dem fhem Benutzerkennung eine test-INSERT gemacht was auch funktioniert, so kann ich ein rechte-Problem o.ä. auf der Datenbank ausschliessen.
Ich habe auch versucht ähnliche Postings zu finden aber nichts wirklich hilfreich gefunden.
Hat jemanden sonst eine Idee?
Bin für alle Hinweise enorm dankbar!


david_ffm

Ich habe ein weiteres Experiment gefunden und ausprobiert.
Wenn ich fhem starte und dann einen Befehl ausführe was einen Datenbankzugriff zufolge hätte
bekomme ich Fehlermeldungen in der Console wo ich fhem gestartet habe, und fhem beendet sich anschliessend.
Evtl. sagen die Fehlermeldungen etwas über die Ursache?

Gebe ich z.B. untere Befehle in blau bekomme ich die Fehlermeldungen in rot:

/opt/fhem/fhem.pl 7072 "get logdb current ALL - - %:temperature"
Can't call method "prepare" on an undefined value at /opt/fhem/FHEM/93_DbLog.pm line 891.

/opt/fhem/fhem.pl 7072 "set logdb rereadcfg"
Can't call method "commit" on unblessed reference at /opt/fhem/FHEM/93_DbLog.pm line 1113.

Kann es sein, dass ich vielleicht die falsche Version von 93_DbLog.pm habe?
Ich habe die Code angeschaut um die Zeilen herum aber ich stecke momentan nicht wirklich tief genug drin
um die Ursache zu ermitteln. Die erste sieht z.B. so aus:

    Log3 $hash->{NAME}, 4, "Processing Statement: $stm";

    my $sth= $dbh->prepare($stm) ||
      return "Cannot prepare statement $stm: $DBI::errstr";

$stm erscheint im Log und sieht gut aus, kann ich auch auf der Datenbank ausführen, aber die Methode bzw. Funktion prepare
liefert scheinbar false zurück

MySQL [www_test]> SELECT
    ->               DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H:%i:%s'),
    ->               DEVICE,
    ->               READING,
    ->               VALUE
    ->               ,TYPE,EVENT,UNIT FROM current WHERE 1=1 AND READING = 'temp
    ->              AND TIMESTAMP < STR_TO_DATE('2099-01-01 00:00:00', '%Y-%m-%d
    ->              ORDER BY TIMESTAMP;
+---------------------------------------------+--------+-------------+-------+--
| DATE_FORMAT(TIMESTAMP, '%Y-%m-%d %H:%i:%s') | DEVICE | READING     | VALUE | T
+---------------------------------------------+--------+-------------+-------+--
| 2015-04-21 22:42:25                         | hms2   | temperature | 17.4  | H
| 2015-04-21 22:45:43                         | ks1    | temperature | 15.4  | K
| 2015-04-21 22:46:38                         | hms1   | temperature | 18.9  | H
+---------------------------------------------+--------+-------------+-------+--
3 rows in set (0.00 sec)


dev0

Die benötigten Perl Module hast du installiert?

david_ffm

Ich habe nochmal nachgeschaut, und ich glaube gelöst jetzt, vielen Dank!

Ich hatte nur die in der Doku erwähnten Perl DBI und DBD::mysql Modulen installiert, daraufhin
habe ich mit yast2 einfach nach weitere Kandidaten gesucht und einige weitere installiert z.B.:

libdbi-drivers-dbd-mysql
libmysqlclient18
libmysqlcppconn6


Ausserdem habe ich in der Umgebung gesetzt:
export  MYSQL_UNIX_PORT=/opt/lampp/var/mysql/mysql.sock

Damit scheint das Schreiben in der Datenbank jetzt zu klappen  :)
Ich habe ein kleines Perl Hilfsprogram auch nutzlich gefunden zum testen.

Allerdings bleiben die Warnungen beim starten:

when is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1103, <$fh> line 190.
when is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1111, <$fh> line 190.
when is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1121, <$fh> line 190.
when is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1129, <$fh> line 190.


aber die sind hoffentlich unkritisch

stromer-12

Zitat von: david_ffm am 19 September 2015, 23:40:18
Allerdings bleiben die Warnungen beim starten:

when is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1103, <$fh> line 190.
when is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1111, <$fh> line 190.
when is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1121, <$fh> line 190.
when is experimental at /opt/fhem/FHEM/93_DbLog.pm line 1129, <$fh> line 190.


aber die sind hoffentlich unkritisch

Das hängt mit der verwendeten Perl-Version zusammen.
Da kannst diese Meldung unterdrücken, wenn du am Anfang der 93_DbLog.pm
bei den use Anweisungen diese Zeile
no warnings 'experimental::smartmatch';
einfügst.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL