Neu: Die KI-Firewall überwacht die gesamte Plattform und erklärt jeden Vorfall in einfachen Worten. So funktioniert es

Behält Hermetry meine QoS-1-Nachrichten, wenn das Gateway offline geht, oder brauche ich einen eigenen Puffer?

Behält Hermetry meine QoS-1-Nachrichten, wenn das Gateway offline geht, oder brauche ich einen eigenen Puffer?

Gelöst 7 6

Von English mit KI übersetzt ·

Wir betreiben einen Go-Dienst auf einem Edge-Box an einem Solarstandort, der Wechselrichterausliest und über MQTT mit QoS 1 an Hermetry veröffentlicht. Die Verbindung läuft über einen 4G-Router, der mehrmals täglich abbricht, meist für 30 s bis einige Minuten.Mein Denkmodell stammt von unserem eigenen Mosquitto vor einigen Jahren: Der Broker speichert QoS-1-Nachrichten auf der Festplatte, der Client verbindet sich mit clean session = false neu, und alles in der Warteschlange wird zugestellt. Deshalb habe ich CleanSession beim Client auf false gesetzt und angenommen, dass Hermetry die Daten in beide Richtungen für uns vorhält.Wenn ich nach einem Abbruch den Verlauf ansehe, finde ich Lücken genau in der Länge des Ausfalls. Speichert der Hermetry-Broker nicht persistent? Muss ich eine Einstellung aktivieren, oder ist die Pufferung meine Aufgabe?Was ich bisher geprüft habe: Der Log-Tab des Geräts zeigt die Trennung mit keepalive_timeout und einen Wiederverbindungsversuch einige Minuten später, wie erwartet. Unsere Client-Logs zeigen, dass die Veröffentlichungen während des Ausfalls ohne Fehler zurückkamen, weshalb ich dachte, der Broker habe sie erhalten. Die Wechselrichterwerte werden alle 30 s gesendet, mit einem ts aus der eigenen Uhr des Wechselrichters (NTP-synchronisiert), im Format {„ts“: …, „values“: {…}}. Wir brauchen den Verlauf vollständig, weil der Anlagenbetreiber monatlich darauf abrechnet; jede Minute, die täglich fehlt, kostet also tatsächlich Geld.

♥ 0

Von English mit KI übersetzt ·

Lücken genau in der Länge des Ausfalls deuten eher darauf hin, dass während des Ausfalls gar nichts veröffentlicht wurde, und nicht darauf, dass der Broker sie verloren hat. Stellt Ihr Client während der Trennung überhaupt Nachrichten in eine Warteschlange?

If it isn't logged, it didn't happen.
♥ 0

Von English mit KI übersetzt ·

Guter Punkt. Paho Go nutzt den standardmäßigen In-Memory-Store. Ich hatte angenommen, dass er die Nachrichten während der Offline-Phase in eine Warteschlange stellt.

♥ 1

Von English mit KI übersetzt ·

Von der Managementseite: Unser Integrator hat uns dasselbe zu den Datenlücken gesagt, am Ende haben sie auf dem Gerät zusätzlichen Speicher eingebaut. Die Details kann ich leider nicht nennen, sorry.

♥ 0

Von English mit KI übersetzt ·

Clean session false hilft auf Hermetry ohnehin nicht. Ich bin ziemlich sicher, dass in der Dokumentation steht, dass es als Clean Session bereitgestellt wird.

♥ 1

Von English mit KI übersetzt ·

Kevin hat recht, und das ist nur die halbe Antwort. Wir hatten dasselbe Problem auf einer Windkraftanlage.Hermetry verwendet MQTT 3.1.1, und ein CONNECT mit clean session false wird wie clean behandelt. Während ein Gerät offline ist, wird nichts für es in eine Warteschlange gestellt, außer Befehlen, die als persistent gesendet wurden. Es gibt also keinen Sitzungszustand, der fortgesetzt werden könnte, und zwar für Telemetrie in keiner Richtung.Was Hermetry in Eingangsrichtung zusagt, ist Folgendes: Das PUBACK wird erst gesendet, nachdem die Nachricht auf deren Seite sicher in die Warteschlange gestellt wurde. Kann sie nicht eingereiht werden, bekommst du kein PUBACK, die Sitzung wird geschlossen, und der Client soll nach dem Wiederverbinden erneut senden. Duplikate mit demselben Gerät, Schlüssel und Zeitstempel werden nur einmal gespeichert, daher ist erneutes Senden sicher.Der Puffer liegt also bei dir, und das Muster sieht so aus:

  1. Jeden Messwert in einen lokalen Speicher schreiben (wir nutzen eine SQLite-Datei) mit seinem eigenen ts in ms.
  2. Aus dem Speicher veröffentlichen und eine Zeile erst löschen, wenn ihr PUBACK eintrifft.
  3. Nach dem Wiederverbinden: abonnieren, gemeinsame Attribute abfragen und dann den Rückstau vor den Live-Daten senden.

Sende den Rückstau als Arrays von {ts, values}, damit die Werte zu den richtigen Zeiten ankommen. Das Profil hat ein separates Limit für Wiedergabenachrichten pro Sekunde für Nachrichten, deren Datensätze alle älter als eine Minute sind, daher leert sich ein langer Rückstau über einen gewissen Zeitraum. Keine Panik, wenn nicht alles auf einmal erscheint.Die MQTT-Seite enthält den Abschnitt zur Bestätigung, einmal lesenswert.

If it isn't logged, it didn't happen.
Akzeptierte Lösung♥ 2

Von English mit KI übersetzt ·

Ja. Der Paho-Speicher hat bei einer Trennung alles verworfen, Marias Vermutung war also ebenfalls genau richtig. Ich habe eine bbolt-Datei vor den Publisher gesetzt, die bei PUBACK löscht, und als Test 5 Minuten lang die 4G-Antenne abgezogen: Der Rückstau erschien etwa 20 s nach dem Wiederverbinden mit den richtigen Zeitstempeln im Verlauf. Die Zeile CleanSession=false habe ich ebenfalls entfernt, da sie nichts bewirkt hat.

♥ 1

Von English mit KI übersetzt ·

Eine Sache noch: Begrenze den lokalen Speicher. Wir hatten einmal einen Standort 9 days lang offline, und die Festplatte lief voll. Messwerte, die älter als deine Aufbewahrungsdauer sind, werden ohnehin abgelehnt.

♥ 1
Ansicht von 8 Beiträgen – 1 bis 8 (von insgesamt 8)
  • Du musst angemeldet sein, um auf dieses Thema antworten zu können.

Mitdiskutieren

Melde dich an, um Fragen zu stellen und zu beantworten, hilfreiche Beiträge mit „Gefällt mir“ zu markieren und die Antwort zu kennzeichnen, die dein Problem gelöst hat. Jeder Beitrag bringt Punkte und Stufen.

Teilen