Daten Persistierung - Harveg/hiag GitHub Wiki

Persistence

openHAB kann Daten über die Zeit speichern; dies wird als Persistence bezeichnet. Die Daten können zu einem späteren Zeitpunkt abgerufen werden, z.B. um Ihr System nach dem Start wiederherzustellen oder um Diagramme für die Anzeige auf einer Benutzeroberfläche vorzubereiten.

openHAB persistiert Item-Zustände in einer Datenbank, und die meisten gängigen Datenbanken werden unterstützt. Sie können mehr als ein Persistenz-Add-On geladen haben, und jedes davon kann unabhängig konfiguriert werden.
Standartmässig ist die rrd4j Datenbank installiert welche alle Items mit Typ Number,Date-Time,Switch,Integer speichert jedoch keine Strings (texte).

Standard-Persistenzdienst

Es ist wichtig, einen Standard-Persistenzdienst auszuwählen. --> RRD4j

Um einen Standard-Persistenzdienst auszuwählen, wählen Sie im Openhab UI auf Settings und dann System im Seitenmenü. Wählen Sie folgenden Standard-Persistenzdienst aus der Dropdown-Liste:
RRD4j Persistence

Zusätzlicher Persistenzdienst (influxDB)

Für die Analyse und Langzeitbeobachtung wird ein zusätzlicher Dienst benötigt welcher alle Daten (inkl. Strings) in einer sogenannten timeseries Datenbnak aufzeichnet. Dieser wird verwendet um alle Daten mit einem Zeitstempel zu versehen und z.B. alle 20min zu speichern. Die Datenbank selbst läuft nicht auf Openhab sondern in einem seperaten Container.
InfluxDB (0.9 and newer) Persistence
Beachten Sie, dass Sie zuerst ein Persistenz-Add-on installieren müssen, bevor Sie diese Auswahl treffen können. Gehen Sie hierzu unter Addons zu InfluxDB persistance v0.9 and newer und klicken sie auf installieren. Stellen Sie sicher, dass Sie Ihre Wahl speichern, sobald Sie Ihren Standard-Dienst ausgewählt haben. Unter den Systemeinstellungen können Sie dann den den Dienst folgendermassen konfigurieren: (Die Fetten Werte sind nur eine Beispiel Konfiguration und können je nach Art des Projektes abweichen)

  • Database URL (Adresse des containers & port) influxdb:8086
  • Database Version (InfluxDB Version) InfluxDB 1
  • Database (Name der influxDB) openhab
  • Rentation Policy / Data Bucket (gibt die an wie lange die Werte verbleiben bis zur Löschung, Standart 1J) openhab
  • User (Benutzerzugang) admin
  • Token (Authentifizierungs Token erst ab v2 benötigt)
  • Typ Tag (ergänzt den Typ (Temp/ Humidity) true
  • Label Tag (ergänzt das Label LOTNR) true

Die oben genannten Einstellungen werden bei der Projektierung bereits vorkonfiguriert und im Konfig file abgelegt: ${USERDATA}/config/org/openhab/influxdb.config${USERDATA}/config/org/openhab/influxdb.config

Persistenz-Konfiguration

Anhand der folgenden Informationen können Sie feststellen, welche Zustände von Item persistent sind, wann sie persistent sind und wo sie gespeichert sind.

Persistenzstrategien werden in einer Datei namens influxdb.persist konfiguriert, die in $OH_CONF/persistence gespeichert ist. Diese Einstellungen werden bei der Projektierung bereits vorkonfiguriert.

Persistenz-Trigger

Die Persistenz des Zustands eines Items kann ausgelöst werden, wenn sich der Zustand des Items ändert oder wenn das Item aktualisiert wird (auch wenn sich sein Zustand nicht geändert hat). Persistenz kann auch durch ein zeitbezogenes Ereignis ausgelöst werden (siehe Cron Persistence Triggers weiter unten).

Strategien

Dieser Abschnitt erlaubt es Ihnen, eine oder mehrere Strategien zu benennen und zu definieren und eine Standardstrategie auszuwählen. Die Syntax lautet wie folgt:

Vordefinierte Strategien

Die folgenden Strategien sind intern definiert und können anstelle von StrategyName oben verwendet werden:

  • everyChange: Persistenz des Zustandes von item, wenn sich sein Zustand geändert hat.
  • everyUpdate: Persistenz des Status eines Items immer dann, wenn sein Status aktualisiert wurde, auch wenn er sich nicht geändert hat
  • RestoreOnStartup: Laden und Initialisieren des letzten persistenten Zustands des Items beim Start von openHAB (wenn der Zustand des Items undefiniert ist (UNDEF)).
Cron Persistence-Trigger

openHAB verwendet Quarz für zeitbezogene Cron-Ereignisse. Eine entsprechende Quarz Cron expression kann ganz einfach in Openhab unter Rules erstellt werden:

  1. Openhab UI: Setting Rules
  2. Neue Rule erstellen
  3. Bei einer WHEN Bedingung Feld Cron Expression auswählen und die gewünschten konfiguration im UI zusammenklicken
  4. Kopieren der erstellten cron expression

Items

Dieser Abschnitt definiert, welche Items mit welcher Strategie persistiert werden sollen. Die Syntax lautet wie folgt:

wobei <itemlist> eine durch Komma getrennte Liste ist, die aus einer oder mehreren der folgenden Optionen besteht:

  • `*" - diese Zeile sollte für alle item im System gelten
  • <itemName> ein einzelnes Item, das durch seinen Namen identifiziert wird. Dieses Item kann ein Gruppen-Item sein. Beachten Sie jedoch, dass nur der Gruppenwert persistiert wird. Der Wert der einzelnen Gruppenmitglieder wird bei dieser Option nicht persistent bleiben.
  • `*" - alle Mitglieder dieser Gruppe werden persistiert, aber nicht die Gruppe selbst. Wenn keine Strategien angegeben sind, werden die im ersten Abschnitt angegebenen Standardstrategien angewendet. Optional kann ein Alias angegeben werden, wenn der Persistenzdienst besondere Namen erfordert (z.B. eine Tabelle, die in einer Datenbank verwendet werden soll, eine Feed-ID für einen IoT-Dienst usw.). Beachten Sie, dass * in diesem Zusammenhang KEIN Platzhalterzeichen ist.

Der untenstehende Beispielabschnitt "Items" nutzt einen "Standard"-Eintrag im Abschnitt "Strategien" aus. Angenommen, der Abschnitt Strategien enthält die Zeile:

Unten finden Sie eine vollständige Beispielkonfigurationsdatei für Persistence:

// persistence strategies have a name and definition and are referred to in the "Items" section Strategies { everyHour : "0 0 * * * ?" everyDay : "0 0 0 * * ?"

    // if no strategy is specified for an Item entry below, the default list will be used
   default = everyChange

}

/*

  • Each line in this section defines for which Item(s) which strategy(ies) should be applied.

  • You can list single items, use "" for all items or "groupitem" for all members of a group

  • Item (excl. the group Item itself). */ Items { // persist the Item state of Heating_Mode and Notifications_Active on every change and restore them from the db at startup Heating_Mode, Notifications_Active: strategy = everyChange, restoreOnStartup

     // additionally, persist all temperature and weather values every hour
     Temperature*, Weather* : strategy = everyHour
    

}

Standart-Konfiguration: Folgende Konfiguration als Influxdb.persist im Verzeichnis Persistente ablegen

// persistence strategies have a name and definition and are referred to in the "Items" section

Strategies {

everyHour : "0 0 * * * ?"
everyDay  : "0 0 0 * * ?"
//restoreOnStartup = initialize last value at startup
// if no strategy is specified for an Item entry below, the default list will be used
default = everyChange

}

Items {

notifications_active* : strategy = everyChange, restoreOnStartup
lot_nr*               : strategy = everyChange, restoreOnStartup
lot_nr_timestamp*     : strategy = everyChange, restoreOnStartup

// default persist all shelly items every change

}

⚠️ **GitHub.com Fallback** ⚠️