NEWS
History überarbeitet
-
Hi Bluefox,
muss da noch ein
iobroker upload sql
hin, oder geht das auch so (da der Adapter schon da ist)?
Gruß,
Eric
-
So, update ist durch.
Direkt nach dem Start kamen nochmal einige Meldungen :
` > sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of hm-rega.0.41482
sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of hm-rpc.0.xxxxxxxxxx.1.POWER
[…]
sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of hm-rpc.0.xxxxxxxxxx.1.TEMPERATURE
sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of hm-rpc.0.xxxxxxxxxx.1.HUMIDITY
sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of system.host.cubietruck.load
sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of system.host.cubietruck.mem
sql.0 2015-12-06 18:39:08 info sql.0 Connected to sqlite
sql.0 2015-12-06 18:39:07 info sql.0 starting. Version 0.0.2 in /opt/iobroker/node_modules/iobroker.sql
host-cubietruck 2015-12-06 18:38:59 info instance system.adapter.sql.0 started with pid 5980
host-cubietruck 2015-12-06 18:38:56 info instance system.adapter.sql.0 terminated with code 0 (OK)
sql-0 2015-12-06 18:38:56 info terminating
host-cubietruck 2015-12-06 18:38:56 info stopInstance system.adapter.sql.0 killing pid 5965
host-cubietruck 2015-12-06 18:38:56 info stopInstance system.adapter.sql.0
host-cubietruck 2015-12-06 18:38:56 info object change system.adapter.sql.0
sql-0 2015-12-06 18:38:45 error Cannot delete DELETE FROM ts_number WHERE id=21 AND ts < 1449337080;: Error: SQLITE_BUSY: database is locked
sql-0 2015-12-06 18:38:40 error Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES(1, 1449423508000, 20, 1, 1, 0);: Error: SQLITE_BUSY: database is locked
sql-0 2015-12-06 18:38:20 warn Cannot get index of 'hm-rpc.0.IEQ0150728.1.TEMPERATURE': Error: SQLITE_BUSY: database is locked
sql-0 2015-12-06 18:38:20 error Cannot select SELECT id, type FROM datapoints WHERE name='hm-rpc.0.IEQ0150728.1.TEMPERATURE';: Error: SQLITE_BUSY: database is locked
host-cubietruck 2015-12-06 18:38:17 info Update repository 'default' under 'conf/sources-dist.json'
sql-0 2015-12-06 18:38:00 info Connected to sqlite
sql-0 2015-12-06 18:38:00 info enabled logging of hm-rega.0.41482
sql-0 2015-12-06 18:38:00 info enabled logging of hm-rpc.0.xxxxxxxxxx.1.POWER
[…]
sql-0 2015-12-06 18:38:00 info enabled logging of system.host.cubietruck.load
sql-0 2015-12-06 18:38:00 info enabled logging of system.host.cubietruck.mem
sql-0 2015-12-06 18:38:00 info starting. Version 0.0.2 in /opt/iobroker/node_modules/iobroker.sql
host-cubietruck 2015-12-06 18:37:51 info instance system.adapter.sql.0 started with pid 5965
host-cubietruck 2015-12-06 18:37:51 info 'system.adapter.sql.0' enabled
host-cubietruck 2015-12-06 18:37:51 info object change system.adapter.sql.0 `
und kurz darauf wieder diese Meldungen:
` > sql.0 2015-12-06 18:44:41 warn sql.0 Cannot get index of 'hm-rpc.0.xxxxxxxxxx.3.TEMPERATURE': Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 18:44:41 error sql.0 Cannot select SELECT id, type FROM datapoints WHERE name='hm-rpc.0.LEQ0773872.3.TEMPERATURE';: Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 18:42:49 error sql.0 Cannot delete DELETE FROM ts_number WHERE id=11 AND ts < 1449337320;: Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 18:42:48 error sql.0 Cannot delete DELETE FROM ts_number WHERE id=8 AND ts < 1449337320;: Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 18:42:34 warn sql.0 Cannot get index of 'hm-rpc.0.xxxxxxxxxx.3.TEMPERATURE': Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 18:42:34 error sql.0 Cannot select SELECT id, type FROM datapoints WHERE name='hm-rpc.0.LEQ0773872.3.TEMPERATURE';: Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 18:41:40 error sql.0 Cannot delete DELETE FROM ts_number WHERE id=17 AND ts < 1449337261;: Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 18:40:43 error sql.0 Cannot delete DELETE FROM ts_number WHERE id=14 AND ts < 1449337200;: Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 18:40:42 error sql.0 Cannot delete DELETE FROM ts_number WHERE id=6 AND ts < 1449337201;: Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 18:40:41 error sql.0 Cannot delete DELETE FROM ts_number WHERE id=23 AND ts < 1449337201;: Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 18:40:25 error sql.0 Cannot delete DELETE FROM ts_number WHERE id=33 AND ts < 1449337201;: Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 18:40:13 warn sql.0 Cannot get index of 'hm-rpc.0.xxxxxxxxxx.3.TEMPERATURE': Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 18:40:13 error sql.0 Cannot select SELECT id, type FROM datapoints WHERE name='hm-rpc.0.xxxxxxxxxx.3.TEMPERATURE';: Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of hm-rega.0.41482
sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of hm-rpc.0.xxxxxxxxxx.1.POWER
sql.0 2015-12-06 18:39:08 info sql.0 enabled logging of hm-rpc.0.xxxxxxxxxx.1.TEMPERATURE `
Irgendwas klemmt da noch.
Es läuft auch sonst nichts mit SQL auf dem Cubietruck - der macht nichts anderes als ioBroker.
Gruß,
Eric
PS:
Wenn ich versuche, Flot zu installieren, meckert die Installation am Ende, das die Version des History-Adapters >= 0.2.0 sein soll (error 30).
Ich habe die Version 0.1.3 drauf.
Hab ich irgendwas überlesen?
-
Kannst du mit andren Clients dadrauf zugegriffen?
Ich habe so verstanden, dass MySQL auf dem anderen Rechner läuft. Kannst du vom ioBroker Rechner auf MySQL mit normalem Client zugreifen? `
ja, kann ich (mit mysql -u xxxx -h 192.168.0.61 -p) , allerdings habe ich jetzt auf dem iobroker testserver ein eigener mysql-server eingerichtet, über localhost müsste es eigentlich problemlos laufen. -
Hallo,
Habe das Update durchgeführt.
` > sql.0 Cannot delete DELETE FROM ts_number WHERE id=172 AND ts < 1417897381;: Error: SQLITE_BUSY: database is lockedsql.0 2015-12-06 21:23:23 error sql.0 Cannot insert INSERT INTO ts_bool (id, ts, val, ack, _from, q) VALUES(112, 1449433400000, 0, 1, 4, 0);: Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 21:23:23 error sql.0 Cannot delete DELETE FROM ts_bool WHERE id=111 AND ts < 1417897380;: Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 21:23:23 error sql.0 Cannot delete DELETE FROM ts_bool WHERE id=110 AND ts < 1417897380;: Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 21:23:21 error sql.0 Cannot select SELECT id, type FROM datapoints WHERE name='ping.0.raspberrypi.192_168_1_11';: Error: SQLITE_BUSY: database is locked `
-
Hallo,
ich hatte jetzt auch einmal den Zugriffsfehler:
` > sql.0 2015-12-06 21:23:05 error sql.0 Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES(10, 1449433373000, 271.35, 1, 1, 0);: Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 21:23:04 debug sql.0 INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES(1, 1449433373000, 28, 1, 1, 0); `
Und ich denke, man sieht hier im Vergleich mit dem unmittelbar zuvor (erfolgreich) ausgeführten Statement dass der Grund dafür ist, dass der zweite Datensatz hier mit einem bereits existierenden Timestamp eingefügt werden soll. Die Fehlermeldung "Database locked" ist da natürlich ziemlich irreführend
@Bluefox: Ich hab's mir zwar im Code mal angeschaut wie Du den Timestamp generierst, aber da sind meine JS-Kenntnisse noch zu rudimentär um herauszufinden warum der doppelt generiert wird :oops:
-
Kannst du den .timeout auf 11000 setzen?
Der Pi kann scheinbar nur Sekunden Sleeps und könnte damit ein Problem haben.
-
Hallo,
ich hatte jetzt auch einmal den Zugriffsfehler:
` > sql.0 2015-12-06 21:23:05 error sql.0 Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES(10, 1449433373000, 271.35, 1, 1, 0);: Error: SQLITE_BUSY: database is locked
sql.0 2015-12-06 21:23:04 debug sql.0 INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES(1, 1449433373000, 28, 1, 1, 0); `
Und ich denke, man sieht hier im Vergleich mit dem unmittelbar zuvor (erfolgreich) ausgeführten Statement dass der Grund dafür ist, dass der zweite Datensatz hier mit einem bereits existierenden Timestamp eingefügt werden soll. Die Fehlermeldung "Database locked" ist da natürlich ziemlich irreführend
@Bluefox: Ich hab's mir zwar im Code mal angeschaut wie Du den Timestamp generierst, aber da sind meine JS-Kenntnisse noch zu rudimentär um herauszufinden warum der doppelt generiert wird :oops: `
Kann es daran liegen, dass der Pi keine Millisekunden liefert?
-
Kann es daran liegen, dass der Pi keine Millisekunden liefert? `
Bei mir läuft ioBroker nicht auf einem Raspberry Pi, sondern auf einem Cubietruck.Oder meinst Du grundsätzlich die ARM-Plattform?
Gruß,
Eric
-
Kannst du den .timeout auf 11000 setzen? `
Hab den Wert beim SQL-Adapter geändert - Meldungen ("cannot delete" und "cannot insert") kommen weiterhin.Oder meintest Du am jeweiligen Objekt selber?
Gruß,
Eric
-
Ja, es liegt offensichtlich an den fehlenden Millisekunden. Aber nicht nur auf dem Pi - ich arbeite mit Windows.
Ich habe mich aber jetzt noch mal in den Code reingekniet und empfehle Dir folgendes zu testen - wenn Du Dir's zutraust.
Und zwar musst Du in der Datei "..\iobroker\node_modules\iobroker.sql\main.js" die Zeile 552:
state.ts = parseInt(state.ts, 10) * 1000 + (parseInt(state.ms, 10) || 0);
durch die folgende ersetzen:
state.ts = parseInt(Date.now());
Dann die Datei speichern und den SQL-Adapter neustarten. Dann dürfte es keine doppelten Timestamps mehr geben (und ich hoffe dass ich damit nichts anderes durcheinanderbringe - aber wir sind ja hier noch in der Beta
)
Gruß Thilo
-
Probiere ich morgen früh aus.
Gruß,
Eric
Edit:
Nee, bin neugierig - mache es jetzt
-
Verbindung an MySQL klappt bei mir nur so:
-
Fehler mit mysql:
` > sql.0 2015-12-06 22:57:27 error sql.0 Cannot insert INSERT INTO iobroker.ts_string (id, ts, val, ack, _from, q) VALUES(53, 1449439045000, VD-12, 1, 3, 0);: Error: ER_BAD_FIELD_ERROR: Unknown column 'VD' in 'field list'
sql.0 2015-12-06 22:57:27 error sql.0 Cannot insert INSERT INTO iobroker.ts_string (id, ts, val, ack, _from, q) VALUES(50, 1449439045000, W, 1, 3, 0);: Error: ER_BAD_FIELD_ERROR: Unknown column 'W' in 'field list'
sql.0 2015-12-06 22:57:27 error sql.0 Cannot insert INSERT INTO iobroker.ts_string (id, ts, val, ack, _from, q) VALUES(48, 1449439045000, Windstille, 1, 3, 0);: Error: ER_BAD_FIELD_ERROR: Unknown column 'Windstille' in 'field list' `
-
Hat Fehler ausgeworfen:
` > sql.0 2015-12-06 22:59:12 debug inMem message * hm-rega.0.37329
sql.0 2015-12-06 22:59:11 debug inMem message * hm-rega.0.37325
sql.0 2015-12-06 22:59:11 debug inMem message * hm-rega.0.37324
sql.0 2015-12-06 22:59:11 debug inMem message * hm-rega.0.37153
sql.0 2015-12-06 22:59:11 debug inMem message * hm-rega.0.36778
[…]
sql.0 2015-12-06 22:59:11 info sql.0 enabled logging of system.host.cubietruck.load
sql.0 2015-12-06 22:59:11 info sql.0 enabled logging of system.host.cubietruck.mem
sql.0 2015-12-06 22:59:10 info sql.0 Connected to sqlite
sql.0 2015-12-06 22:59:10 debug sql.0 Response: {'errno':1,'code':'SQLITE_ERROR'}
sql.0 2015-12-06 22:59:10 debug sql.0 CREATE TABLE ts_bool (id INTEGER, ts INTEGER, val BOOLEAN, ack BOOLEAN, _from INTEGER, q INTEGER, PRIMARY KEY(id, ts));
sql.0 2015-12-06 22:59:10 debug sql.0 Response: {'errno':1,'code':'SQLITE_ERROR'}
sql.0 2015-12-06 22:59:10 debug sql.0 CREATE TABLE ts_string (id INTEGER, ts INTEGER, val TEXT, ack BOOLEAN, _from INTEGER, q INTEGER, PRIMARY KEY(id, ts));
sql.0 2015-12-06 22:59:10 debug sql.0 Response: {'errno':1,'code':'SQLITE_ERROR'}
sql.0 2015-12-06 22:59:10 debug sql.0 CREATE TABLE ts_number (id INTEGER, ts INTEGER, val REAL, ack BOOLEAN, _from INTEGER, q INTEGER, PRIMARY KEY(id, ts));
sql.0 2015-12-06 22:59:10 debug sql.0 Response: {'errno':1,'code':'SQLITE_ERROR'}
sql.0 2015-12-06 22:59:10 debug sql.0 CREATE TABLE datapoints (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,name TEXT,type INTEGER);
sql.0 2015-12-06 22:59:10 debug sql.0 Response: {'errno':1,'code':'SQLITE_ERROR'}
sql.0 2015-12-06 22:59:10 debug sql.0 CREATE TABLE sources (id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, name TEXT);
sql.0 2015-12-06 22:59:10 info sql.0 starting. Version 0.0.2 in /opt/iobroker/node_modules/iobroker.sql
cubietruck 2015-12-06 22:59:01 info host.cubietruck instance system.adapter.sql.0 started with pid 7364
cubietruck 2015-12-06 22:59:01 info host.cubietruck 'system.adapter.sql.0' enabled
cubietruck 2015-12-06 22:59:01 info host.cubietruck object change system.adapter.sql.0 `
Bin wieder auf Original zurück.
Gruß,
Eric
-
@sissiwup: Das ist der gleiche Fehler wie bei uns - bei Dir sogar dreimal der gleiche Timestamp.
@eric: Ja, jetzt wo DU's sagst - die hat er bei mir auch geworfen. Sind aber IMO nicht weiter schlimm. Sagt ja bloß aus dass er die bereits existierenden Tabellen in der Db nicht nochmal anlegen kann. Kommen ja auch nur beim Starten des Adapters. Ich lass die Änderung bei mir drin und teste ob der andere Fehler wieder auftaucht. Vielleicht schau ich auch morgen nochmal ob ich dahinterkomme warum jetzt dieser Fehler auftaucht. Wahrscheinlich ist aber bis dahin Bluefox sowieso schneller
-
Eh, bin gerade etwas verwirrt …
Seit dem Test habe ich keine Fehler mehr im Log .... alle INSERTs usw. gehen durch .... wie gesagt, bin wieder auf die Original-Version der main.js zurückgegangen (und hab auch den Adapter neu gestartet) ....
Gruß,
Eric
-
Hallo,
` > hm-rpc.1 2015-12-07 01:24:54 info hm-rpc.1 xmlrpc -> listDevices 0
sql.0 2015-12-07 01:20:54 error sql.0 Cannot insert INSERT INTO iobroker.ts_string (id, ts, val, ack, _from, q) VALUES(53, 1449447653333, VD-12, 1, 3, 0);: Error: ER_BAD_FIELD_ERROR: Unknown column 'VD' in 'field list'
sql.0 2015-12-07 01:20:53 error sql.0 Cannot insert INSERT INTO iobroker.ts_string (id, ts, val, ack, _from, q) VALUES(52, 1449447652908, 01:00:01 07.12.2015, 1, 3, 0);: Error: ER_PARSE_ERROR: You have an error in your SQL syntax; c
sql.0 2015-12-07 01:20:53 error sql.0 Cannot insert INSERT INTO iobroker.ts_string (id, ts, val, ack, _from, q) VALUES(50, 1449447652664, SW, 1, 3, 0);: Error: ER_BAD_FIELD_ERROR: Unknown column 'SW' in 'field list'
sql.0 2015-12-07 01:20:53 error sql.0 Cannot insert INSERT INTO iobroker.ts_string (id, ts, val, ack, _from, q) VALUES(48, 1449447652486, Windstille, 1, 3, 0);: Error: ER_BAD_FIELD_ERROR: Unknown column 'Windstille' in 'field list'
sql.0 2015-12-07 01:20:38 info sql.0 enabled logging of hm-rpc.0.MEQ0288793.1.STATE `
Hier scheint der String nicht korrekt gequotet zu werden ' fehlen.
-
MySQL:
MySQL auf ioBroker
apt-get install mysql-server mysql-client
mysql -uroot -p
CREATE USER 'iobroker‘@’%’ IDENTIFIED BY 'iobroker';
GRANT ALL PRIVILEGES ON * . * TO 'iobroker'@'%';
FLUSH PRIVILEGES;
In /etc/mysql
my.cnf: bind auf ip-Adresse umstellen (dann klappt es auch mit den Nachbarn)
Achtung: iobroker ist so ein "admin". Bei Bedarf weniger Rechte einrichten.
-
lib/mysql.js anpassen:
exports.insert = function (index, state, from, db) { if (db === 'ts_string') state.val = "'" + state.val + "'"; return "INSERT INTO iobroker." + db + " (id, ts, val, ack, _from, q) VALUES(" + index + ", " + state.ts + ", " + state.val + ", " + (state.ack ? 1 : 0) + ", " + (from || 0) + ", " + state.q + ");"; };
Neu ist die Zeile mit dem "if"
-
Hmmm, mySQL installieren …
Ich denke, ich warte erst mal auf Bluefox - vielleicht hat er ja eine einfache Idee / Lösung.
Gruß,
Eric