Seite 1 von 2

Frage zur Persistence

Verfasst: 29. Okt 2020 17:09
von PeterA
Wenn ich alle Mitglieder einer Gruppe persistiere, werden diese dann auch über die Gruppe bei einem Neustart mit dem
persistierten Wert gesetzt ?

Hier gehts um den den Eintrag:

Code: Alles auswählen

gShellys*                              : strategy = everyChange, restoreOnStartup
mapdb.persist

Code: Alles auswählen

Strategies {
default = everyChange
}
Items {
// Lüftungsanlage
    Lueftungstandby_off_last               : strategy = everyChange, restoreOnStartup
    Lueftungstandby_on_last                : strategy = everyChange, restoreOnStartup
    Filterwechsel_last                     : strategy = everyChange, restoreOnStartup
    Luefterstufe_0_last                    : strategy = everyChange, restoreOnStartup
    Luefterstufe_1_last                    : strategy = everyChange, restoreOnStartup
    Luefterstufe_2_last                    : strategy = everyChange, restoreOnStartup
    Luefterstufe_3_last                    : strategy = everyChange, restoreOnStartup
    LuefterStufe                           : strategy = everyChange, restoreOnStartup
    WAC350_Durchschnitt_Feuchte_Haus       : strategy = everyChange, restoreOnStartup
    WAC350_Durchschnitt_Feuchte_Haus_Zwang : strategy = everyChange, restoreOnStartup
    Lueftung_min_max_Temp                  : strategy = everyChange, restoreOnStartup
    Lueftung_Temperatur2                   : strategy = everyChange, restoreOnStartup
    Lueftung_Temperatur                    : strategy = everyChange, restoreOnStartup
    Lueftung_Feuchte                       : strategy = everyChange, restoreOnStartup
    Lueftung_Zeit                          : strategy = everyChange, restoreOnStartup
    Lueftung_Bad                           : strategy = everyChange, restoreOnStartup
    FanStandby_Switch                      : strategy = everyChange, restoreOnStartup
// Rolladen
    // Rolladen Westseite
    Rolloautomatik                         : strategy = everyChange, restoreOnStartup
    Rolloautomatik_oeffnen                 : strategy = everyChange, restoreOnStartup
    Rolloautomatik_azimuth_start           : strategy = everyChange, restoreOnStartup
    Rolloautomatik_elevation_ende          : strategy = everyChange, restoreOnStartup
    Rolloautomatik_temp_min                : strategy = everyChange, restoreOnStartup
    Rolloautomatik_wolken_max              : strategy = everyChange, restoreOnStartup
    Rolloautomatik_zielwert                : strategy = everyChange, restoreOnStartup
    Rolloautomatik_ende_last               : strategy = everyChange, restoreOnStartup
    Rolloautomatik_start_last              : strategy = everyChange, restoreOnStartup
    // Rolladen Suedseite
    Rolloautomatik_Sued                    : strategy = everyChange, restoreOnStartup
    Rolloautomatik_Sued_oeffnen            : strategy = everyChange, restoreOnStartup
    Rolloautomatik_Sued_azimuth_start      : strategy = everyChange, restoreOnStartup
    Rolloautomatik_Sued_elevation_ende     : strategy = everyChange, restoreOnStartup
    Rolloautomatik_Sued_temp_min           : strategy = everyChange, restoreOnStartup
    Rolloautomatik_Sued_wolken_max         : strategy = everyChange, restoreOnStartup
    Rolloautomatik_Sued_zielwert           : strategy = everyChange, restoreOnStartup
    Rolloautomatik_Sued_ende_last          : strategy = everyChange, restoreOnStartup
    Rolloautomatik_Sued_start_last         : strategy = everyChange, restoreOnStartup
// Astro
    DayTime                                : strategy = everyChange, restoreOnStartup
    NightTime                              : strategy = everyChange, restoreOnStartup
// WifiRGB
    WifiRGB408867Power                     : strategy = everyChange, restoreOnStartup
    WifiRGB408867brightness                : strategy = everyChange, restoreOnStartup
    WifiRGB408867Color                     : strategy = everyChange, restoreOnStartup
    WifiRGBDDC4B2Power                     : strategy = everyChange, restoreOnStartup
    WifiRGBDDC4B2brightness                : strategy = everyChange, restoreOnStartup
    WifiRGBDDC4B2Color                     : strategy = everyChange, restoreOnStartup
// Heimkino
    DenonInputAuto_to_IRP                  : strategy = everyChange, restoreOnStartup
// Charts
    gAllCharts*                            : strategy = everyChange, restoreOnStartup
    gALLChartsProxy                        : strategy = everyChange, restoreOnStartup
//System
    LogsetINFOLastexecution                : strategy = everyChange, restoreOnStartup
    LogsetWARNLastexecution                : strategy = everyChange, restoreOnStartup
//Shellys
    gShellys*                              : strategy = everyChange, restoreOnStartup
}

Re: Frage zur Persistence

Verfasst: 29. Okt 2020 20:46
von peter-pan
Ich würde sagen, ja ;)

Re: Frage zur Persistence

Verfasst: 29. Okt 2020 20:55
von PeterA
Prima.
Merci!

Re: Frage zur Persistence

Verfasst: 29. Okt 2020 21:56
von PeterA
Noch eine weitere Frage:

In dieser Gruppe "gShellys*" dürfen da nur Items vom selben Typ sein oder auch gemischt ?

Re: Frage zur Persistence

Verfasst: 29. Okt 2020 22:16
von peter-pan
Ich würde mal sagen, da darf alles drin sein. Du musst dann halt aufpassen, dass du diese Gruppe nicht zu anderen Zwecken (z.B. in Rules) verwendest, wo es evtl. auf Gleichheit der Gruppenmitglieder ankommt.
Übrigens, wenn du das Gruppen-Item auch persistieren wolltest, was normalerweise keinen Sinn macht, wenn du die Gruppen-Mitglieder persistierst, es sei denn, du willst nur das Gruppen-Item persistieren, dann kannst du das machen und es anlegen wie ein Einzel-Item, also ohne "*"

Re: Frage zur Persistence

Verfasst: 29. Okt 2020 22:24
von PeterA
Ok, dann können da alle Item Typen rein.
Diese Gruppe ist nur fürs automatische Persistieren der Entsprechenden Items gedacht.
Somit muss ich nicht nochmal zusätzlich etwas in der persist Datei eintragen.
Natürlich darf ich dann nicht vergessen die Items in die Gruppe zu packen.

.... Jeden Tag etwas schlauer.

Re: Frage zur Persistence

Verfasst: 30. Okt 2020 04:43
von udo1toni
Genau. Gruppen sind ein äußerst mächtiges Werkzeug mit vielen Anwendungszwecken.
Von Programmiererseite musst Du Dir die Gruppe einfach als Auflistung von Items vorstellen. An jeder Stelle, wo Du ein Groupitem verwenden kannst, muss openHAB dann noch erkennen, wie es mit dem Groupitem verfahren soll, ob es das Item als Item oder als Liste von Items betrachten soll. Deshalb braucht es in der *.persist Datei den *, in der Sitemap braucht es das Group Widget und in der Rules DSL die Methoden .members und .allMembers.

Bei der Persistence muss man natürlich im Hinterkopf behalten, dass einige Persistence Services nur reale Zahlen speichern können. Entsprechend kann es dann schon Einschränkungen geben (z.B. kein String, kein Switch, kein Location), aber grundsätzlich wird die Persistence jedes Item der Gruppe persistieren, da die Gruppe ja nur eine Auflistung der zu persistierenden Items ist.

Re: Frage zur Persistence

Verfasst: 23. Dez 2020 00:38
von stue
Zusatzfrage:
Gibt es eine Möglichkeit die Werte von jedem Member der Gruppe in EINER Tabelle abzulegen?

Beispiel:
Group grpMeinSensor1
Number MeinSensor1_Strom "Strom [%.3f A]" (grpMeinSensor1,gPersiMariaMin) {channel="mqtt:topic:MeinBroker:MeinSensor1Topics:current"}
Number MeinSensor1_Spannung "Spannung [%.1f V]" (grpMeinSensor1,gPersiMariaMin) {channel="mqtt:topic:MeinBroker:MeinSensor1Topics:voltage"}
Number MeinSensor1_Leistung "Leistung [%.1f W]" (grpMeinSensor1,gPersiMariaMin) {channel="mqtt:topic:MeinBroker:MeinSensor1Topics:powerload"}
DateTime MeinSensor1_OwnTime "Systemzeit [%1$tT, %1$tY-%1$tm-%1$td]" (grpMeinSensor1,gPersiMariaMin) {channel="mqtt:topic:MeinBroker:MeinSensor1Topics:OwnTime"}

Bei diesem ähnlich von mir verwendetem Beispiel legt OH per Persistence für jedes der vier Items EINE Tabelle an.
Ergebnis:
Tabelle: MeinSensor1_Strom:
Spalte1: Zeitstempel des Datenbankzugriffes (time)
Spalte2: von OH übergebener Wert (value)

Tabelle: MeinSensor1_Spannung :
Spalte1: Zeitstempel des Datenbankzugriffes (time)
Spalte2: von OH übergebener Wert (value)

Tabelle: MeinSensor1_Leistung:
Spalte1: Zeitstempel des Datenbankzugriffes (time)
Spalte2: von OH übergebener Wert (value)

Tabelle: MeinSensor1_OwnTime :
Spalte1: Zeitstempel des Datenbankzugriffes (time)
Spalte2: von OH übergebener Wert (value)

eigentlich gewünschtes Ergebnis:
Tabelle: grpMeinSensor
Spalte1: MeinSensor1_Strom (value)
Spalte2: MeinSensor1_Spannung (value)
Spalte3: MeinSensor1_Leistung (value)
Spalte4: MeinSensor1_OwnTime (value)
Spalte5: Zeitstempel des Datenbankzugriffes

Re: Frage zur Persistence

Verfasst: 23. Dez 2020 01:10
von udo1toni
openHAB kennt keine Tabellen.
Beziehst Du Dich eventuell auf die jdbc Persistence?
So, wie Du Dir das vorstellst, funktioniert openHAB nicht.
Der Zeitstempel gibt ja an, wann der Wert geschrieben wurde.
Der Zeitstempel ist also für jeden der Werte unterschiedlich (wir reden hier von Millisekunden), es ist demnach sinnlos, die Werte gruppiert zu speichern.

Re: Frage zur Persistence

Verfasst: 23. Dez 2020 09:43
von stue
udo1toni hat geschrieben: 23. Dez 2020 01:10 openHAB kennt keine Tabellen.
... aber bringt (über die persistence) die jeweilige Datenbank dazu eine Tabelle für jedes (gewünschte) Item anzulegen und einen Wert zu hinterlegen.
udo1toni hat geschrieben: 23. Dez 2020 01:10 Der Zeitstempel gibt ja an, wann der Wert geschrieben wurde.
Der Zeitstempel ist also für jeden der Werte unterschiedlich (wir reden hier von Millisekunden), es ist demnach sinnlos, die Werte gruppiert zu speichern.
Das ist mein/openHABs Problem. Es wird kein Primärschlüssel übergeben bei der Übertragung der Daten an die Datenbank.
Gibt es eine persistence, die das kann?
Sinnlos ist es nach meinem empfinden nicht, da es die Wertigkeit/Übersichtlichkeit der Daten verbessern würde.
udo1toni hat geschrieben: 23. Dez 2020 01:10 So, wie Du Dir das vorstellst, funktioniert openHAB nicht.
Was ist die eleganteste Lösung openHAB(3) dazu zu bringen?
- andere persistence?
- binding?
- rule?
- Funktion/addon?
- ...?