NEWS
[gelöst] Zigbee: Doubletten führen zu SQL-Fehler beim Insert
-
Ich nutze diverse Zigbee-Sensoren von Aqara, zumeist für Klimadaten (WSDCGQ11LM) oder Kontakte (WSDCGQ11LM).
Die Daten laufen über den Zigbee-Adapter (v1.10.3) im ioBroker ein und werden dort durch den History-Adapter (v3.0.1) in einer Postgres-DB persistiert.Das alles läuft schon seit über zwei Jahren stabil und ohne große Probleme.
Allerdings finde ich hin und wieder (AKA alle paar Tage) im Log Fehlermeldungen wie bspw.:
2024-11-11 11:22:02.848 - error: sql.0 (1493) Cannot insert INSERT INTO ts_bool (id, ts, val, ack, _from, q) VALUES (276, 1731320204149, false, true, 1, 0),(276, 1731320204150, true, true, 1, 0),(276, 1731320204149, true, true, 1, 0);: error: duplicate key value violates unique constraint "ts_bool_pkey" (id: zigbee.0.54ef441000295e34.contact)
Das referenzierte verletzte Primary-Key-Constraint besteht aus der ID und dem Timestamp.
Der History-Adapter versucht also, für ein Objekt einen Wert zweimal mit dem gleichen Timestamp zu persistieren, was dann fehlschlägt.Eigentlich ist der Timestamp sehr feingranular und die Sensoren schicken höchstens alle paar Sekunden einen Wert, sodass das Problem nicht auftreten sollte.
Was also könnte der Grund sein?Möglichkeit 1: Die Sensoren schicken gelegentlich Doubletten, z.B. wegen Problemen im Ablauf des Zigbee-Protokolls (über Repeater und Coordinator) oder eines Bugs.
Möglichkeit 2: Die Daten werden im Zigbee-Adapter dupliziert, z.B. wegen eines Bugs oder einer Racing-Condition.
Möglichkeit n: ...Der Fehler ist nicht kritisch, weil die Doubletten durch die Fehlerbedingung einfach unter den Tisch fallen und daher nicht weiter stören.
Doch nachdem sich der Fehler schon so lange hartnäckig hält, würde ich ihm gerne auf den Grund gehen.Hat jemand das gleiche Problem?
Oder gar eine Erklärung? -
@observer was ist das für ein sensor
-
@observer sagte in Zigbee: Doubletten führen zu Fehlern beim SQL-Insert:
Hat jemand das gleiche Problem?
Hatte ich mal.
Konnte ich beseitigen, indem ich die Entprell- und Blockzeit hochgesetzt habe. -
Es sind insgesamt 27 Klimasensoren WSDCGQ11LM und 1 Kontaktsensor WSDCGQ11LM (für das Auslesen des Gaszählers) von Aqara im Einsatz, die das Problem zeigen.
Ansonsten nutze ich von Aqara noch 7 Bewegungsmelder RTCGQ11LM, die bisher aber unauffällig blieben.
-
@codierknecht said in Zigbee: Doubletten führen zu Fehlern beim SQL-Insert:
@observer sagte in Zigbee: Doubletten führen zu Fehlern beim SQL-Insert:
Hat jemand das gleiche Problem?
Hatte ich mal.
Konnte ich beseitigen, indem ich die Entprell- und Blockzeit hochgesetzt habe.Wenn ich das richtig interpretiere, dann müsste hier konkret die Blockzeit greifen, auch wenn hier nur ein Wert von 1 ms konfiguriert wird, oder?
"Alle neuen Werte für X ms nach dem letzten protokollierten Wert ignorieren" -
@observer probier mit der entprellzeit.. vor allem der für das Auslesen des Gaszählers wird viele Daten senden
-
Ich habe mir jetzt mal die Logs des gesamten aktuellen Jahres angesehen:
Von den 27 Klimasensoren WSDCGQ11LM gab es 403 dieser Fehlermeldungen, die sich aber ausschliesslich auf den Wert von link_quality beziehen, also bspw.:
iobroker.2024-01-12.log:2024-01-12 22:20:30.495 - error: sql.0 (4193646) Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES (328, 1705094430432, 54, true, 1, 0);: error: duplicate key value violates unique constraint "ts_number_pkey" (id: zigbee.0.00158d0007e09f9a.link_quality)
Zu den restlichen persistierten Werten (temperature, pressure, ...) gibt es keine Fehlermeldungen.
Damit sieht es für mich so aus, als wäre die Ursache tatsächlich dass des Sensor selbt in bestimmten Situationen unmittelbar nacheinander einen Wert schicken.
Ob diese Doubletten auch den gleichen Wert enthalten, habe ich nicht geprüft, da dies dem Log nicht zu entnehmen ist und ich in der Datenbank wühlen müsste.
NB: Die protokollierten Werte von link_quality decken eine großen Bereich ab; es sind also nicht nur schlechte oder gute Werte.Der Kontaktsensor WSDCGQ11LM zeigt ebenfalls entsprechende Fehler.
Diese treten jedoch wesentlich seltener auf und immer in einem Cluster zu dem auch ein battery_low gehört, bspw. in diesen zweieinhalb Sekunden:iobroker.2024-04-17.log:2024-04-17 06:35:47.612 - error: sql.0 (1286) Cannot insert INSERT INTO ts_bool (id, ts, val, ack, _from, q) VALUES (274, 1713328547156, false, true, 1, 0),(274, 1713328547157, false, true, 1, 0),(274, 1713328547156, false, true, 1, 0),(274, 1713328547239, false, true, 1, 0),(274, 1713328547240, false, true, 1, 0),(274, 1713328547241, false, true, 1, 0),(274, 1713328547294, false, true, 1, 0),(274, 1713328547362, false, true, 1, 0),(274, 1713328547363, false, true, 1, 0),(274, 1713328547550, false, true, 1, 0),(274, 1713328547554, false, true, 1, 0);: error: duplicate key value violates unique constraint "ts_bool_pkey" (id: zigbee.0.54ef441000295e34.battery_low) iobroker.2024-04-17.log:2024-04-17 06:35:48.780 - error: sql.0 (1286) Cannot insert INSERT INTO ts_bool (id, ts, val, ack, _from, q) VALUES (274, 1713328548009, false, true, 1, 0),(274, 1713328548010, false, true, 1, 0),(274, 1713328548249, false, true, 1, 0),(274, 1713328548250, false, true, 1, 0),(274, 1713328548480, false, true, 1, 0),(274, 1713328548481, false, true, 1, 0),(274, 1713328548482, false, true, 1, 0),(274, 1713328548563, false, true, 1, 0),(274, 1713328548564, false, true, 1, 0),(274, 1713328548565, false, true, 1, 0),(274, 1713328548564, false, true, 1, 0);: error: duplicate key value violates unique constraint "ts_bool_pkey" (id: zigbee.0.54ef441000295e34.battery_low) iobroker.2024-04-17.log:2024-04-17 06:35:48.794 - error: sql.0 (1286) Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES (275, 1713328548564, 76, true, 1, 0);: error: duplicate key value violates unique constraint "ts_number_pkey" (id: zigbee.0.54ef441000295e34.link_quality) iobroker.2024-04-17.log:2024-04-17 06:35:49.211 - error: sql.0 (1286) Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES (275, 1713328549140, 69, true, 1, 0);: error: duplicate key value violates unique constraint "ts_number_pkey" (id: zigbee.0.54ef441000295e34.link_quality) iobroker.2024-04-17.log:2024-04-17 06:35:49.304 - error: sql.0 (1286) Cannot insert INSERT INTO ts_bool (id, ts, val, ack, _from, q) VALUES (276, 1713328548250, false, true, 1, 0),(276, 1713328548480, false, true, 1, 0),(276, 1713328548481, true, true, 1, 0),(276, 1713328548560, false, true, 1, 0),(276, 1713328548563, true, true, 1, 0),(276, 1713328548798, false, true, 1, 0),(276, 1713328549140, true, true, 1, 0),(276, 1713328549141, false, true, 1, 0),(276, 1713328549140, true, true, 1, 0),(276, 1713328549141, false, true, 1, 0),(276, 1713328549240, true, true, 1, 0);: error: duplicate key value violates unique constraint "ts_bool_pkey" (id: zigbee.0.54ef441000295e34.contact) iobroker.2024-04-17.log:2024-04-17 06:35:49.348 - error: sql.0 (1286) Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES (275, 1713328549241, 76, true, 1, 0);: error: duplicate key value violates unique constraint "ts_number_pkey" (id: zigbee.0.54ef441000295e34.link_quality) iobroker.2024-04-17.log:2024-04-17 06:35:49.352 - error: sql.0 (1286) Cannot insert INSERT INTO ts_bool (id, ts, val, ack, _from, q) VALUES (274, 1713328548576, false, true, 1, 0),(274, 1713328548797, false, true, 1, 0),(274, 1713328548798, false, true, 1, 0),(274, 1713328549140, false, true, 1, 0),(274, 1713328549141, false, true, 1, 0),(274, 1713328549140, false, true, 1, 0),(274, 1713328549141, false, true, 1, 0),(274, 1713328549240, false, true, 1, 0),(274, 1713328549241, false, true, 1, 0),(274, 1713328549242, false, true, 1, 0),(274, 1713328549241, false, true, 1, 0);: error: duplicate key value violates unique constraint "ts_bool_pkey" (id: zigbee.0.54ef441000295e34.battery_low) iobroker.2024-04-17.log:2024-04-17 06:35:49.374 - error: sql.0 (1286) Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES (275, 1713328549242, 76, true, 1, 0);: error: duplicate key value violates unique constraint "ts_number_pkey" (id: zigbee.0.54ef441000295e34.link_quality) iobroker.2024-04-17.log:2024-04-17 06:35:49.413 - error: sql.0 (1286) Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES (275, 1713328549244, 80, true, 1, 0);: error: duplicate key value violates unique constraint "ts_number_pkey" (id: zigbee.0.54ef441000295e34.link_quality) iobroker.2024-04-17.log:2024-04-17 06:35:49.440 - error: sql.0 (1286) Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES (275, 1713328549245, 76, true, 1, 0);: error: duplicate key value violates unique constraint "ts_number_pkey" (id: zigbee.0.54ef441000295e34.link_quality) iobroker.2024-04-17.log:2024-04-17 06:35:49.567 - error: sql.0 (1286) Cannot insert INSERT INTO ts_bool (id, ts, val, ack, _from, q) VALUES (274, 1713328549242, false, true, 1, 0),(274, 1713328549243, false, true, 1, 0),(274, 1713328549244, false, true, 1, 0),(274, 1713328549245, false, true, 1, 0),(274, 1713328549244, false, true, 1, 0),(274, 1713328549245, false, true, 1, 0),(274, 1713328549252, false, true, 1, 0),(274, 1713328549253, false, true, 1, 0),(274, 1713328549254, false, true, 1, 0),(274, 1713328549255, false, true, 1, 0),(274, 1713328549503, false, true, 1, 0);: error: duplicate key value violates unique constraint "ts_bool_pkey" (id: zigbee.0.54ef441000295e34.battery_low) iobroker.2024-04-17.log:2024-04-17 06:35:49.992 - error: sql.0 (1286) Cannot insert INSERT INTO ts_bool (id, ts, val, ack, _from, q) VALUES (276, 1713328549241, false, true, 1, 0),(276, 1713328549242, true, true, 1, 0),(276, 1713328549243, true, true, 1, 0),(276, 1713328549242, true, true, 1, 0),(276, 1713328549243, true, true, 1, 0),(276, 1713328549244, false, true, 1, 0),(276, 1713328549245, true, true, 1, 0),(276, 1713328549503, false, true, 1, 0),(276, 1713328549504, true, true, 1, 0),(276, 1713328549653, false, true, 1, 0),(276, 1713328549654, true, true, 1, 0);: error: duplicate key value violates unique constraint "ts_bool_pkey" (id: zigbee.0.54ef441000295e34.contact) iobroker.2024-04-17.log:2024-04-17 06:35:50.043 - error: sql.0 (1286) Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES (275, 1713328549665, 76, true, 1, 0);: error: duplicate key value violates unique constraint "ts_number_pkey" (id: zigbee.0.54ef441000295e34.link_quality) iobroker.2024-04-17.log:2024-04-17 06:35:50.046 - error: sql.0 (1286) Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES (275, 1713328549666, 76, true, 1, 0);: error: duplicate key value violates unique constraint "ts_number_pkey" (id: zigbee.0.54ef441000295e34.link_quality) iobroker.2024-04-17.log:2024-04-17 06:35:50.084 - error: sql.0 (1286) Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES (275, 1713328549668, 76, true, 1, 0);: error: duplicate key value violates unique constraint "ts_number_pkey" (id: zigbee.0.54ef441000295e34.link_quality) iobroker.2024-04-17.log:2024-04-17 06:35:50.092 - error: sql.0 (1286) Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES (275, 1713328549669, 76, true, 1, 0);: error: duplicate key value violates unique constraint "ts_number_pkey" (id: zigbee.0.54ef441000295e34.link_quality) iobroker.2024-04-17.log:2024-04-17 06:35:50.131 - error: sql.0 (1286) Cannot insert INSERT INTO ts_bool (id, ts, val, ack, _from, q) VALUES (276, 1713328549662, false, true, 1, 0),(276, 1713328549663, true, true, 1, 0),(276, 1713328549664, true, true, 1, 0),(276, 1713328549666, false, true, 1, 0),(276, 1713328549667, true, true, 1, 0),(276, 1713328549668, false, true, 1, 0),(276, 1713328549667, true, true, 1, 0),(276, 1713328549668, false, true, 1, 0),(276, 1713328549669, true, true, 1, 0),(276, 1713328549670, false, true, 1, 0),(276, 1713328549669, true, true, 1, 0);: error: duplicate key value violates unique constraint "ts_bool_pkey" (id: zigbee.0.54ef441000295e34.contact) iobroker.2024-04-17.log:2024-04-17 06:35:50.148 - error: sql.0 (1286) Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES (275, 1713328549669, 76, true, 1, 0);: error: duplicate key value violates unique constraint "ts_number_pkey" (id: zigbee.0.54ef441000295e34.link_quality) iobroker.2024-04-17.log:2024-04-17 06:35:50.169 - error: sql.0 (1286) Cannot insert INSERT INTO ts_bool (id, ts, val, ack, _from, q) VALUES (274, 1713328549665, false, true, 1, 0),(274, 1713328549666, false, true, 1, 0),(274, 1713328549667, false, true, 1, 0),(274, 1713328549666, false, true, 1, 0),(274, 1713328549667, false, true, 1, 0),(274, 1713328549668, false, true, 1, 0),(274, 1713328549669, false, true, 1, 0),(274, 1713328549668, false, true, 1, 0),(274, 1713328549669, false, true, 1, 0),(274, 1713328549670, false, true, 1, 0),(274, 1713328549669, false, true, 1, 0);: error: duplicate key value violates unique constraint "ts_bool_pkey" (id: zigbee.0.54ef441000295e34.battery_low) iobroker.2024-04-17.log:2024-04-17 06:35:50.177 - error: sql.0 (1286) Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES (275, 1713328549669, 76, true, 1, 0);: error: duplicate key value violates unique constraint "ts_number_pkey" (id: zigbee.0.54ef441000295e34.link_quality) iobroker.2024-04-17.log:2024-04-17 06:35:50.182 - error: sql.0 (1286) Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES (275, 1713328549670, 76, true, 1, 0);: error: duplicate key value violates unique constraint "ts_number_pkey" (id: zigbee.0.54ef441000295e34.link_quality)
Es könnte also sein, dass eine battery_low-Condition des Sensors einen solchen Burst von Meldungen bewirkt.
Soviel zu den Zigbee-Sensoren von Aqara.
Ansonsten tauchen bei mir noch sporadisch Meldungen meiner Wechselrichter von Hoymiles auf, die mittels AhoyDTU ausgelesen werden und über MQTT eingehen, bsp.:
iobroker.2024-06-25.log:2024-06-25 14:15:43.999 - error: sql.0 (1492) Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES (648, 1719317729464, 31, true, 10, 0);: error: duplicate key value violates unique constraint "ts_number_pkey" (id: mqtt.0.inverter.HM-800-01.ch2.U_DC)
Ebenfalls über MQTT (allerdings einen separaten Broker) gehen Werte von den Shelly Plus 1PM ein, die aber nur sehr selten zum Fehler führen, bspw.:
iobroker.2024-03-04.log:2024-03-04 01:00:00.840 - error: sql.0 (1286) Cannot insert INSERT INTO ts_number (id, ts, val, ack, _from, q) VALUES (397, 1709510400542, 5.4, true, 11, 0);: error: duplicate key value violates unique constraint "ts_number_pkey" (id: shelly.1.shellyplus1pm#3c610579a654#1.Relay0.Power)
Summa summarum scheint mir das Fehlerbild auf die 'Eigenheiten' der jeweiligen Datenquellen zurückzuführen sein und nicht auf einen Bug in einem der verwendeten Adapter.
Insofern setze ich den Status auf "gelöst".Danke für Eurer Feedback!
-
@observer sagte in Zigbee: Doubletten führen zu Fehlern beim SQL-Insert:
Insofern setze ich den Status auf "gelöst".
Dann bearbeite bitte Deinen Eingangspost und setze ein "[gelöst] - " vor den Titel.
-
@arteck said in Zigbee: Doubletten führen zu Fehlern beim SQL-Insert:
@observer probier mit der entprellzeit.. vor allem der für das Auslesen des Gaszählers wird viele Daten senden
Hmm, die Nutzung der Entprellzeit für dieses Problem verstehe ich nicht:
"Protokolliert den Wert nur, wenn er für X ms unverändert bleibt."
Wenn tatsächlich eine Doublette mit dem gleichen Wert in der gleichen Millisekunde eingeht, dann greift die Entprellzeit doch nicht, oder?
Ansonsten schickt der Gaszählerauslesekontaktsensor ja eher gemächlich Daten, einen Kontakt pro Zählerumdrehung alle paar Sekunden.
Das läuft seit rund zwei Jahren recht zuverlässig. -
@observer sagte in Zigbee: Doubletten führen zu Fehlern beim SQL-Insert:
einen Kontakt pro Zählerumdrehung alle paar Sekunden
Es sei denn, der Zähler bleibt ausgerechnet dort stehen wo sich der Geber (Magnet) befindet.
Dann prellt der Sensor fleißig hin und her. -
@codierknecht said in Zigbee: Doubletten führen zu Fehlern beim SQL-Insert:
@observer sagte in Zigbee: Doubletten führen zu Fehlern beim SQL-Insert:
einen Kontakt pro Zählerumdrehung alle paar Sekunden
Es sei denn, der Zähler bleibt ausgerechnet dort stehen wo sich der Geber (Magnet) befindet.
Dann prellt der Sensor fleißig hin und her.Ah, guter Punkt, zumal der Aqara-Sensor kein internes Debouncing zu haben scheint und ein Reed-Kontakt grundsätzlich prellen kann!
Im dazugehörenden Blockly-Skript habe ich das auch nicht explizit berücksichtigt.Also Glück gehabt, dass dies in zwei Jahren bisher nicht dennoch nicht aufgetreten ist!?
-
@observer sagte in [gelöst] Zigbee: Doubletten führen zu SQL-Fehler beim Insert:
Also Glück gehabt, dass dies in zwei Jahren bisher nicht dennoch nicht aufgetreten ist!?
In der DB siehst Du das ja nicht. Das verhindert an der Ecke ja der PK.
Und ins Log muss man schon reinschauen um das zu sehen.
Tritt ja auch nicht dauernd auf, sondern nur wenn die Bedingungen gerade mal passen.
Da kann wochenlang Ruhe herrschen und dann steht der Geber mal wieder an einer ungünstigen Stelle. -
@observer sagte in [gelöst] Zigbee: Doubletten führen zu SQL-Fehler beim Insert:
Also Glück gehabt, dass dies in zwei Jahren bisher nicht dennoch nicht aufgetreten ist!?
Benutze den Aqara auch zum Auslesen des Gaszählers. Ein Prellen hat in den letzten (auch) zwei Jahren einfach nicht stattgefunden. Wenn mal Fehler entstehen, dann fehlen ein paar Impulse (z.B. durch Neustart des ioBrokers oder der MQTT2Zigbee-Instanz).
Allerdings habe ich einen externen Reed-Kontakt angelötet. Der ist entweder sehr gut, oder der Aqara macht doch ein internes Entprellen.