Ankündigung

Einklappen
Keine Ankündigung bisher.

Openhab Zeitschaltuhr über UI einstellen - Cron mit Variablen

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

    Openhab Zeitschaltuhr über UI einstellen - Cron mit Variablen

    Hallo Leute,

    ich komme leider nicht weiter und habe in den Tiefen des Inet nichts dazu gefunden.

    Mein Ziel ist es, dass ich über des UI (Webinterface) meine Zeitschaltuhr einstellen und verändern kann, ohne jedes Mal in der Rules-Datei gehen zu müssen um da die Rule zu ändern.

    Derzeit habe ich Folgendes in meinen Dateien stehen:

    default.items:
    Code:
    Number Std_set "Stunde [%.0f]" <clock>
    Number Min_set "Minute [%.0f]" <clock>
    default.sitemap:
    Code:
    Setpoint item=Std_set step=1 minValue=0 maxValue=23
    Setpoint item=Min_set step=5 minValue=0 maxValue=59
    default.rules:
    Code:
    var Number Std
    var Number Min
    
    rule "StdMin"
    when
        Item Std_set changed or
        Item Min_set changed
    then  
            Std = Std_set.state as DecimalType
            Min = Min_set.state as DecimalType
            Std_set.postUpdate(Std)
            Min_set.postUpdate(Min)
    end
    
    rule "zeittest"
    when
        Time cron "0 Min Std ? * 0-6" // Min und Std sind die Variablen
    then
       pushover("Die Zeit ist variabel...") //Zum Testen soll eine Nachricht verschickt werden
    end
    Die Werte der Setpoints werden in der persist gespeichert und bei Neustart wieder geladen:
    rrdd4j.persist:
    Code:
    Items {
        Std_set,Min_set : strategy = everyChange, restoreOnStartup
    }
    Ich kann in der UI die Werte für Stunde und Minute ändern. Allerdings erhalte ich keine Nachricht über pushover.


    Kann man überhaupt bei cron mit variablen arbeiten?

    VG
    Thomas
    Zuletzt geändert von Tt49; 03.12.2016, 10:25.

    #2
    So wird das nicht funktionieren, denn Du kannst in einem Cron-Ausdruck keine Variablen verwenden. Sieh mal hier, da ist die korrekte Vorgehensweise ganz gut erläutert. Am Ende des Samples gibt es noch einen Link auf den Ursprungspost.
    Zuletzt geändert von udo1toni; 03.12.2016, 12:10.

    Kommentar


      #3
      Ahh okay, dachte ich mir schon, dass ich da was falsch mache. Ich schaue mir mal am WE die Anleitung genauer an. Ist dann doch ein umfangreicher Lesestoff für die Woche

      Vielen Dank für deine Antwort!

      VG
      Thoams

      Kommentar


        #4
        Hier gibt es im Wiki ein Beispiel für eine Alarmclock. Ich baue das auch gerade. Es gibt in der Sitemap zwei Setpoints, die Start und Ende zeit festlegen. die anzeige wird über eine Map realiisert. d.h. Du hast maximal 1440 Minuten seit Miternacht, an denen Du loslegen kannst, also startest Du einen Timer der X Minuten nach Mitternacht feuert und dann kannst Du die Dauer über einen weiteren Timer festlegen.

        Sobald ich meine Lösung fertig habe, werde ich sie Posten.

        Thomas

        Kommentar


          #5
          Moin zusammen,

          ich habe versucht ein ähnliches Problem zu lösen. Allerdings finde ich die Sache mit einem Timer zu arbeiten sehr unschön. Wenn man in kurzen Zeiträumen denkt mag das funktionieren, aber im Laufe von 24 Stunden und mehr kann das schonmal in die Binsen gehen, wenn z.B. ein reboot dazwischen kommt o.ä..
          Timer kann man außerdem nicht abfragen nach dem Motto, wie weit bist du eigentlich gerade?

          Ich hab mir also ein wenig was mit Skripten gebastelt, was auch nach einem reboot ausgeführt wird und die Timer neu setzen kann/setzt.
          Trotzdem ist auch diese Lösung etwas fehleranfällig, weshalb ich jetzt auf die Idee gekommen bin eine Lösung zu entwickeln die keine Timer erstellt, sondern einzelne .rules Dateien, welche dann einen(1) Cron Job enthalten.
          Diese werden dann je nach Bedarf erstellt und nachdem der Cron gelaufen ist wieder gelöscht.

          Hat jemand Bedenken was das angeht?
          Das einzige was mir gerade in den Sinn kommt ist, dass ich die .rules Datei lösche, während sie noch ausgeführt wird. Der remove Befehl wäre somit der letzte in der Cron rule. Nach meinem Empfinden kann es dann auch wieder passieren, dass er sich verhasspelt, wenn er die Datei zu schnell löscht, bevor die rule beendet ist.

          Ich hab OH2 noch nicht ausprobiert, aber bis jetzt finde ich die Lösung einer "Zeitschaltuhr" etwas dürftig umgesetzt. Bei mir muss alles in die DB geschrieben werden, damit ich das von da zu jeder Zeit wieder abrufen und verarbeiten kann. Timer fühlen sich immer ein wenig wie eine Seifenblase an, die auch schonmal unverhofft platzen kann.

          Munter bleiben
          Timo

          Kommentar


            #6
            Ich kann nur den Blick über den Tellerrand empfehlen, in Sachen Timer halt das caldav Binding. Wenn Du es bequem haben möchtest, richtest Du Dir einen Kalender z.B. bei Google ein und programmierst darüber Deine Schaltereignisse. Oder Du setzt Dir einen eigenen caldav Server auf, dann kannst Du es auch sicher haben. Die Programmierung geht dann bequem vom Handy oder PC aus (natürlich nicht über die openHAB-Oberfläche, aber es dürfte einfacher und zuverlässiger sein. Ansonsten steht so etwas wie ein Timer Widget oder auch eine Restzeitanzeige für laufende Timer durchaus auch auf meiner Wunschliste.

            Kommentar


              #7
              Stimmt, mit caldav hab ich mich noch garnicht beschäftigt. Das guck ich mir auch nochmal an.
              In meinem usecase frage ich allerdings einen TVHeadend Server ab, wann die nächste Aufnahmen stattfindet.
              Und wenn bis zu nächsten Aufnahmen ein gewisser Zeitraum besteht und nicht gerade jemand TV schaut, fährt das Ding runter und schaltet die Steckdose aus.
              Komfortabel wäre es natürlich, wenn ich die Aufnahmen in einem caldav Kalender schedulen könnte.... *grübel* :-)

              Kommentar


                #8
                Naja, das wäre vermutlich etwas aufwändiger, TVHeadend wird das ja nicht so ohne weiteres unterstützen. Aber wenn Du die nächste Aufnahmezeit aus dem Server ausgelesen hast, musst Du ja nur die Dauer bis dahin errechnen und hast alles, um Deine Schaltzeiten zu berechnen. Um das Problem eine möglichen Reboot zu lösen, müsstest Du halt ein paar items persistieren, die Dir per restoreOnStartup verraten, ob und wenn ja wann zuletzt ein Startvorgang geplant war (absoluter Zeitpunkt), dann kann openHAB beim Neustart den passenden Timer automatisch erstellen.

                Kommentar

                Lädt...
                X