Ankündigung

Einklappen
Keine Ankündigung bisher.

Status null

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    Status null

    Hallo!

    Ich habe im englischen Forum einen älteren Beitrag gefunden, ich wollte euch fragen, ob der so noch aktuell ist.

    Mir geht es darum, dass ich einige Rules über einen Switch steuere (Heizung, Sonne, usw.). Schalte ich den ein, läuft die Rule, schalte ich aus, dann nicht. Funktioniert auch ganz gut, nur bei einem Neustart ist der Status null, also weder on, noch off. Das möchte ich vermeiden, nach einem Neustart, aber auch nach einem Stromausfall, soll wieder der Status wie vorher gesetzt sein, wenn ich etwa den Neustart nicht mitbekomme, soll kein Nachteil entstehen (etwa beim Pool).

    Ich habe hier nun etwas gefunden, nämlich eine mapdb.persistence:

    Strategies {
    default = everyChange
    }

    Items {
    * : strategy = everyChange, restoreOnStartup
    }
    Funktioniert mir das unter OH 2.3 und KNX2?

    #2
    Ja, die Persistence funktioniert weiterhin (da OH1-Technik) exakt wie unter openHAB1. Du musst nur den Persistence Service installieren, gegebenenfalls konfigurieren und zusätzlich eine Datei <persistenceservicename>.persist unterhalb ./persistence/ mit dem passenden Inhalt anlegen.

    mapDB als Persistence service ist sehr schlank, hält aber immer nur den aktuellen Status. deshalb eignet dieser Service sich hervorragend, um beim Neustart den alten Status wiederherzustellen.
    Bitte bedenke aber, dass das Wiederherstellen des Status nicht für jedes Item sinnvoll ist. Speziell bei knx ist es wesentlich sinnvoller, den aktuellen Status auszulesen, wo immer das möglich ist. Denke an eine längere Downzeit des Systems, knx funktioniert aber weiter und verschiedene Aktoren ändern fröhlich ihren Zustand. Wenn Du nun openHAB startest, wäre es nicht schön, falsche Zustände gemeldet zu bekommen, und dass knx den Status dann nach einigen Sekunden gerade zieht, ist nur ein kleiner Trost. wenn Du im Hintergrund Rules einsetzt, welche auf Zustandsänderungen reagieren, können diese sogar zu seltsamem Verhalten beitragen.

    Kommentar


      #3
      Ok, danke für den Hinweis. Und wie sollte das dann aussehen, wenn ich nur den Zustand von ein paar Items speichern möchte?

      Jedes Item anführen, zB Heizung.state:strategy = everyChange, restoreOnStartup anstatt des * für alles?

      Kommentar


        #4
        Zitat von fred07 Beitrag anzeigen
        Und wie sollte das dann aussehen, wenn ich nur den Zustand von ein paar Items speichern möchte?
        Es gibt zwei Möglichkeiten. Die erste Möglichkeit ist, jedes Item einzeln aufzuzählen:
        Code:
        Strategies {
            default = everyChange
        }
        
        Items {
            Item1, Item2, Item3 : strategy = everyChange, restoreOnStartup
            Item4, Item5, Item6 : strategy = everyUpdate, restoreOnStartup
        }
        Die Liste vor : strategy darf dabei im Prinzip beliebig lang sein, oder man legt mehrere Zeilen an (wie im Beispiel oben). Mehrere Zeilen haben auch den Vorteil, dass man unterschiedliche Strategien verwenden kann (spielt bei mapDB nur eine untergeordnete Rolle, kann aber bei anderen Persistence Services wichtig sein.)

        Eine andere Variante ist, die Persistence über Gruppen zu steuern. Du ordnest alle Items, die Du wiederherstellen möchtest, einer Gruppe zu:
        Code:
        Group         MyRestoreGroup
        Switch        Item1 "Schalter" (MyRestoreGroup) ...
        Dimmer        Item2 "Dimmer"   (MyRestoreGroup) ...
        Rollershutter Item3 "Shutter"  (MyRestoreGroup) ...
        Jetzt kannst Du alle Member dieser Gruppe persistieren lassen:
        Code:
        Strategies {
            default = everyChange
        }
        
        Items {
            MyRestoreGroup* : strategy = everyChange, restoreOnStartup
        }
        ACHTUNG! Das * Sternchen am Ende des Gruppennamens bedeutet: "Dieses Item ist eine Gruppe. Persistiere ausschließlich deren Member, nicht die Gruppe selbst!" Das * ist also kein Platzhalter oder Joker! Wenn Du auch die Gruppe selbst persistieren möchtest, musst Du sie zusätzlich ohne * mit angeben (das ist natürlich nur bei Gruppen sinnvoll, deren Status auch eine Bedeutung hat, also z.B. über eine Funktion gebildet wird (MAX,MIN,SUM,AVG,AND,OR...)

        Kommentar

        Lädt...
        X