Ankündigung

Einklappen
Keine Ankündigung bisher.

openhab und die Zahlenformate bei NUMBER

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

    openhab und die Zahlenformate bei NUMBER

    Hallo,

    ich habe ein Problem mit den Zahlenformaten bei openHab bei Items, Sitemaps und rules.

    Als item hab ich folgendes definiert:
    Code:
    Number OG_Nacht_Stunde "OG Nachtbetrieb Ein Stunde [%d]"
    Number OG_Nacht_Minute "OG Nachtbetrieb Ein Minute [%d]"
    Zur Einstellen über die UI hab ich in der sitemap folgendes definiert:
    Code:
    Setpoint item=OG_Nacht_Stunde step=1 minValue=0.0 maxValue=23
    Meine rule wird minütlich aktualisiert und vergleicht die aktuelle Zeit mit der eingestellten Zeit.
    Code:
    when
    Time cron "0 0/1 * * * ?" // every minute
    then
    var int StundeInt
    StundeInt = now.getHourOfDay
    var int MinuteInt
    MinuteInt = now.getMinuteOfHour
    var int TagInt
    TagInt = now.getDayOfWeek
    Stunde_Jetzt.postUpdate(StundeInt)
    Minute_Jetzt.postUpdate(MinuteInt)
    Tag_Jetzt.postUpdate(TagInt)
    // OG Nachtbetrieb zeitgesteuert
    if ((Stunde_Jetzt.state == OG_Nacht_Stunde.state) && (Minute_Jetzt.state == OG_Nacht_Minute.state))
    {
    vSchalter_Tag_OG.postUpdate(OFF)
    vSchalter_Nacht_OG.postUpdate(ON)
    logInfo("Heizung","OG Nachtbetrieb zeitgesteuert")
    }
    end
    Das ganze gemacht, Zeit über die sitemap eingestellt und es funktioniert!
    Das Problem beginnt aber nach einem Neustart. Als persistence-Dienst hab ich influxdb eingerichtet. Bei Neustart werden die Werte wiederhergestellt. Jetzt ist der Wert von "OG_Nacht_Minute" aber nicht mehr als "21" angezeigt, sonder als "21.0" (für 21 Uhr abends). Und damit funktioniert die rule nicht mehr...

    Wo setze ich am besten an? Die Darstellung der Uhrzeit in der Sitemap mit Kommastelle wäre eine Lösung und die rule entsprechen anpassen. Aber mal ehrlich, eine Anzeige von 21,0 Uhr ist nicht gerade schön für die Stundenanzeige...

    Freue mich über Eure Hilfe und vielen Dank!

    #2
    Ich könnte jetzt gemein sein... ... bin ich aber nicht, also...

    Möglichkeit 1: Verwende für das restoreOnStartup die mapdb Persistence, die sollte den Zahlenwert exakt wie angegeben eintragen.
    Möglichkeit 2: Vergleiche den Wert, nicht den Status.

    Code:
    rule "zyklischer Vergleich"
    when
        Time cron "0 * * * * ?" // every minute
    then
        var int StundeInt = now.getHourOfDay
        var int MinuteInt = now.getMinuteOfHour
        var int TagInt    = now.getDayOfWeek
        Stunde_Jetzt.postUpdate(StundeInt)
        Minute_Jetzt.postUpdate(MinuteInt)
        Tag_Jetzt.postUpdate(TagInt)
        // OG Nachtbetrieb zeitgesteuert
        if (StundeInt == (OG_Nacht_Stunde.state as Number).intValue && MinuteInt == (OG_Nacht_Minute.state as Number).intValue) {
            vSchalter_Tag_OG.postUpdate(OFF)
            vSchalter_Nacht_OG.postUpdate(ON)
            logInfo("Heizung","OG Nachtbetrieb zeitgesteuert")
        }
    end
    Wichtig ist auch, hier nicht den Vergleich mit einem Item vorzunehmen, welches unmittelbar davor gesetzt wurde (Minute_Jetzt und Stunde_Jetzt). openHAB arbeitet asynchron. Das heißt, es gibt keinerlei Garantie, dass der Status der Items bereits den neuen Wert hat, wenn der Vergleich ausgeführt wird. Das das bis jetzt funktioniert hat, ist reiner Zufall.

    Kommentar


      #3
      Vielen Dank für die schnelle Hilfe! Sitze heute schon den ganzen Tag am openhab und cometvisu, musste eh dauernd neu starten und muss sagen das es wunderbar funktioniert! Ich nutze Variante 2, ein weiterer persistence-Dienst wollte ich heute nicht auch noch anfangen. Hab genug Probleme mit der cometvisu (siehe https://knx-user-forum.de/forum/supp...menge-probleme )

      Zur asynchronen Arbeitsweise muss ich fairerweise sagen, das ich die obige Regel nur verwende, um die Zeit auszulesen. In einer weiteren Regel werden dann die Befehle ausgeführt. Und die Regel reagiert erst auf die Updates.
      Falls es jemand interessiert:

      Code:
      rule "Änderung Zeit"
      when
         Item Minute_Jetzt received update
         or Item Stunde_Jetzt received update
      then
         [hier stehen dann die Anweisungen, die ausgeführt werden sollen]
      then
      Und bezüglich
      Ich könnte jetzt gemein sein...
      Du meinst bestimmt, das Zeitschaltuhren nicht mehr zeitgemäß sind. Das hab ich in anderen Beiträge von Dir gelesen. Dem muss ich (teilweise) widersprechen.
      Während z.B. mein Licht natürlich nur geschaltet wird, wenn beim Bewegungsmelder eine gewisse Helligkeit unterschritten ist, gibt es immer noch Anwendungen, wo ich eine "feste" Zeit brauche. Die Simpsons kommen immer Mo-Fr um 18:10 Uhr, so wie der Tatort am Sonntag um 20:15 Uhr. Also schalte ich meinen TV zur entsprechenden Zeit auf das richtige Programm. Natürlich nur, wenn ich auch daheim bin.

      Insofern brauche ich doch meine statische Zeitschaltuhr. Und wenn CometVisu dann mal ordentlich läuft will ich die "festen" Zeiten auch über die Visu steuern können.

      Darum nochmals vielen Dank für Deine Hilfe!

      Kommentar


        #4
        Zitat von firejuggler Beitrag anzeigen
        Du meinst bestimmt, das Zeitschaltuhren nicht mehr zeitgemäß sind. Das hab ich in anderen Beiträge von Dir gelesen. Dem muss ich (teilweise) widersprechen.
        Darauf wollte ich eigentlich gar nicht hinaus Die Anwendung, das Programm zu wechseln übernimmt bei mir im Zweifel der Receiver (der könnte auch beliebige Aktionen auslösen, da PC basiert. Der Vorteil ist natürlich, dass ich keine Zeitschaltuhr benötige, denn ich programmiere im vdr keine Zeiten sondern Sendungstitel

        Nein, was ich an dieser Stelle äußern wollte, ist die Herangehensweise als solche. Wieviele "Timer" dieser Art stellst Du zur Verfügung? Wie sieht die UI dazu aus? Mein Ansatz zur Bedienung wäre ein (1) Item, in dem die Zeit in Minuten gespeichert wird. Dazu gäbe es dann für die Steuerung ein weiteres Item, über welches das 1. Item gestellt werden kann, mit verschiedenen Schrittweiten (60 Minuten, 10 Minuten, eine Minute).
        Wenn es mehrere Timer gibt, kommt noch ein 3. Item dazu, über das gesteuert wird, welcher Timer gerade bedient werden soll.

        Gespeichert wird aber die Minute am Tag, nicht Stunde und Minute. Solange es nicht um die Anzeige geht, ist der Vergleich viel einfacher.

        Kommentar


          #5
          Ich bin im Moment noch im Aufbau des ganzen... Für die openhab-UI hatte ich mal so eine Sitemap erstellt:
          Code:
          Setpoint item=XXX_Zeit_1_Ein_Std step=1 minValue=0 maxValue=24
          Setpoint item=XXX_Zeit_1_Ein_Min step=1 minValue=0 maxValue=59
          Setpoint item=XXX_Zeit_1_Aus_Std step=1 minValue=0 maxValue=24
          Setpoint item=XXX_Zeit_1_Aus_Min step=1 minValue=0 maxValue=59
          Setpoint item=XXX_Zeit_1_TempEin step=0.5 minValue=0 maxValue=26
          Setpoint item=XXX_Zeit_1_TempAus step=0.5 minValue=0 maxValue=26
          Switch item=XXX_Zeit_1_aktiv
          Switch item=XXX_Zeit_1_anwesend
          Switch item=XXX_Zeit_1_zyklisch
          Switch item=XXX_Zeit_1_Status
          Switch item=XXX_Zeit_1_MO
          Switch item=XXX_Zeit_1_DI
          Switch item=XXX_Zeit_1_MI
          Switch item=XXX_Zeit_1_DO
          Switch item=XXX_Zeit_1_FR
          Switch item=XXX_Zeit_1_SA
          Switch item=XXX_Zeit_1_SO
          Spectacle.n28629.png
          Ist halt noch in der Entwicklung, später wollte ich das über Array definieren...

          Wie würde denn Deine Config entsprechend aussehen? Ich verstehe nicht ganz, wie der 2. Item den 1. stellt mit unterschiedlichen Schrittweiten. Und der 3. zur Auswahl der Timer wäre dann sozusagen mein Index von dem Array. Bin für Tipps immer offen, da ich mich in das ganze halt Stück für Stück einarbeite

          Kommentar


            #6
            Ich versuche das nachher mal auf meinem Testsystem zu konfigurieren, wie ich mir das vorstelle...

            Kommentar

            Lädt...
            X