Ankündigung

Einklappen
Keine Ankündigung bisher.

Startwerte speichern und zuverlässig lesen

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

    Startwerte speichern und zuverlässig lesen

    Hallo zusammen,

    ich frage mich wie ich Initialisierungswerte speichern bzw zuverlässig beim Systemstart lesen kann und werde noch von der Vielzahl an Persistenzmöglichkeiten erschlagen.

    Am liebsten wäre mir ein Datei bestehend aus nur beispielsweise 2 Zeilen welche sich in der Größe nicht ändert (also nicht einfach n Logfile, welches den letzten Wert bei Änderung unter die anderen schreibt), sondern nur den entsprechenden Eintrag bei Änderung.

    startwerte.irgendwas:
    Nasepopeln=OFF
    Wassertemperatur_Soll=6.5

    Zu allem Überfluss soll eine Änderung, welche beispielsweise mit einem Setpoint-Objekt vorgenommen wird nicht jedesmal speichern wenn ich einen Step gemacht habe, sondern erst nach beispielsweise 5 Sekunden (also nachdem der gewünschte Wert eingestellt ist - eventuell mit nem Timer n exec?).

    Diese Werte sollen dann beim Systemstart eingelesen werden. An diesem Punkt schließt eine weitere Frage an (soll ich einen anderes Topic machen? - Nein das ist nicht die Frage )

    Da die Regeln und die Persitenzen wohl gleichzeitig beim Systemstart geladen werden (wie ich herausgelesen habe) und es dabei dazu kommen kann, daß Werte undefiniert sein können wenn die Persitenz hinterherhinkt gibt es wohl Möglichkeiten eben diese erst abzuwarten. Ungern aber möchte ich ein Flag setzen und es an allen möglichen Stellen erst abfragen.
    (zB:
    rule "Init virtual Items"
    when
    System started
    then
    if (Wassertemperatur_Setpoint.state == Uninitialized) {
    Wassertemperatur_Setpoint.postUpdate(0.0)
    //----------------- hier vielleicht eine Wartezeit irgendwie einbauen?
    //----------------- oder mit exec einen Wert durch ein Script einlesen?
    //----------------- hat REST was damit zu tun? (noch keine Ahnung wie das das geht und wofür genau das gut ist)
    }
    end

    und dann überall if(Wassertemperatur_Setpoint>0) abfragen
    )

    Wenn ich einen Persistenzdienst verwenden soll (ich nehme an dann mir restoreOnStartup), welcher wäre dafür am besten geeignet? Wie gesagt, die Vielzahl verwirrt mich noch, da ich erst seit 3 Tagen dabei bin und kein IT-Profi. Bitte um Nachsicht

    Beste Grüße
    Heiko

    #2
    Herzlich willkommen!

    Natürlich ist die Persistenz "überdimensioniert", wenn Du nur beim Start den letzten gültigen Wert setzen möchtest, aber letztlich ist das ja auch ein Abfallprodukt. Trotzdem ist das der einfachste Weg, Werte beim Start gezielt zu setzen, Du musst Dich dabei um nichts kümmern, geht alles automatisch.

    Welchen Service Du konkret einsetzt, kommt auch auf Dein Umfeld an. Ich habe z.B. sowieso einen SQL-Server am Laufen, der persistiert halt automatisch mit, was beim Start wiederhergestellt werden muss.

    In der aktuellen Nightly-Version (https://openhab.ci.cloudbees.com/job/openHAB/lastBuild/) funktioniert das Wiederherstellen von Werten - zumindest bei mir - zuverlässig. Die Nightly Version ist eigentlich genauso stabil, wie die offizielle Stable-Version, es kann aber z.B. zu Änderungen in der Syntax kommen, ab und zu geht auch mal was schief, das ist aber selten. Dafür gibt es immer die neuesten Features, und wenn man tatsächlich über ein Fehlverhalten stolpert, das gute Gewissen, auch ohne Programmierkenntnisse einen wichtigen Beitrag leisten zu können ;-)

    Wichtig ist noch, dass nicht jeder Persistence-Service alle Funktionen unterstützt, jeder Service hat seine Stärken und Schwächen, z.B. das Logging kann die letzten Werte nicht wiederherstellen, dafür kommt eine Klartextdatei raus, rrd4j ist für Verlaufsanzeigen super und hat einen konstanten Platzbedarf für die Daten, kann aber nicht beliebig genau aufgelöst Werte zurückliefern (Welche Außentemperatur herrschte am 27. März 2012 um 9 Uhr 13), InfluxDB ist wichtig als Grundlage für schönere Verlaufsanzeigen usw.

    Eventuell wäre es ja wünschenswert, einen Persistence-Service nur für den letzten Wert zu haben, der also keine Historie bietet, dafür aber eine einfache Textdatei für den letzten gültigen Wert unterstützt :-) das könntest Du als Wunsch/Verbesserungsvorschlag unter https://github.com/openhab/openhab/issues anlegen.

    Kommentar


      #3
      Hallo udo1toni,
      vielen Dank für Deine Antwort und das Willkommen

      Ich habe auf meinem Raspi auch, da man mir sagte, das brauche ich, mySQL und nen Indianer installiert, auch wenn ich noch nicht die geringste Ahnung von Datenbanken habe. Werde mich mal da weiter einlesen. Danke für den Hinweis.

      Da "hinten dran" aber ein Arduino sitzt und auf Anweisungen lauert, werde ich ihm vorerst wohl damit beauftragen sich die Werte gefälligst selber zu merken und diese dann beim Startup von ihm ausqutschen.

      Ist aber natürlich nur ne Notlösung und auch nicht für jeden praktikabel wenn er oder sie keine Arduinos benutzt. Im Augenblick (oder besser die ganze letzte Nacht) grüble ich über ein aufrufbares Script nach, welches mir die Werte aus einer Textdatei holt und hoffentlich auch erwartungsgmäß ausspuckt. Wenn dann sollen auch alle was von haben.

      Da ich aber auch erst seit einer Woche Linux und Co lerne, kann das noch 3 Minuten dauern . Bitte also noch um Geduld oder einen Wink mit nem Zaunpfahl in die richtige Richtung von Wissenden.

      Für ein Issu ist es noch ein wenig zu früh. Gebe der Inteligenz der Vielen (also Euch) noch Gelegenheit zum Kopfzerbrechen ebenso wie mir. Behalte diese Option aber im Hinterkopf, falls dem kein Licht aufgehen sollte.

      Beste Grüße
      Heiko

      Kommentar


        #4
        Hi,

        Zitat von udo1toni Beitrag anzeigen
        Eventuell wäre es ja wünschenswert, einen Persistence-Service nur für den letzten Wert zu haben
        da ist der RRD4J Service eigentlich am nächsten dran. Die entsprechenden Dateien belegen konstanten Speicherplatz und sind damit für die Wiederherstellung der Item-States sehr gut geeignet.

        Ich würde Dir den RRD4J Persistence Service empfehlen. Der MySQL-Service erfordert wesentlich höheren Einarbeitungsaufwand.

        Gruß,

        Thomas E.-E.
        Visualisierung, Rule/Logic-Engine, Integrationsplattform mit openhab (Supportforum)

        Kommentar


          #5
          Ich wollte eigentlich komplett auf InfluxDB setzen, habe aber letztlich die RRD4J noch beibehalten, da InfluxDB anscheinend beim Neustart von OpenHAB etwas länger braucht und dann Init-Werte nicht zur Verfügung stehen.

          Wenn du beim Startup *feste* Werte setzen willst, kannst du das doch ganz einfach mit einer Rule lösen? Die xxx.rules-Datei ist doch eine Textdatei.

          Grafana mit InfluxDB produziert wirklich sehr nette Grafiken, hier z.B. von unserer Heizungsanlage:

          Angehängte Dateien

          Kommentar


            #6
            Hi Bremer,

            danke für den Tip, vom Prinzip her habe ich das auch so noch.

            Aber nur als Notlösung in Ermangelung einer Besseren. (Bei Persitenzen bin ich noch nicht angelangt in meinem Lernprozess. Steht aber als nächstes auf der ToDo-Liste. Werde jedoch deinem Rat folgen und als erstes mit der r2d2 Persi anfangen.)

            Es sollen mit einem Setpoint-Objekt die Werte geändern werden können, welche dann bei einem Neustart, ob gewollt oder ungewollt, übernommen werden. Als Tüpfelchen auf dem i sollen diese aktualisierten Werte aber erst dann gespeichert werden, wenn die Einstellung abgeschlossen ist und nicht bei jedem Click auf den Up, bzw Down Button (is aber nur Luxus und nicht zwingend erforderlich). Wollte vermeiden, daß endlose Listen von unnützen Werten in einer Datenbank stehen, sondern ausschließlich nur die Relevanten, so daß Änderungen auch außerhalb von openHab in einer übersichtlichen kleinen Datei vorgenommen werden können.

            Das Ganze muss nämlich für die Freunde für die ich das bastel und die von nix irgendeine Ahnung haben (Lehrer - Ahnungslosigkeit ist in diesem Berufszweig ja Einstellungsvoraussetzung) handhabbar sein. Die sind froh, daß sie ein Handy bedienen können ohne sich wegen Überforderung und Überlastung gleich krankschreiben lassen zu müssen. (sry, konnt grad nich anders )

            Übrigens schöne Grafiken, dat willick och haben

            Cheers

            Kommentar

            Lädt...
            X