Ankündigung

Einklappen
Keine Ankündigung bisher.

Heizperiode ermitteln

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

    Heizperiode ermitteln

    Hallo,

    auch wenn aktuell sicherlich keiner über das Heizen nachdenkt, wie ermittelt man mit openHAP Mitteln am einfachsten, wann Heizperiode ist. Der nächste Winter kommt bestimmt.
    Lt. Vermieterregeln gilt wohl folgende Methode:

    "Wie ist die Heizperiode definiert?

    Dieser für die Beheizung von Gebäuden zugrunde gelegter Zeitabschnitt, beginnt in Mitteleuropa im Herbst,
    wenn die Außentemperatur von 15 Grad Celsius für einen über 5 Tage gemittelten Zeitraum unterschritten wird,
    frühestens jedoch am 1. September. Analog dazu endet die Heizperiode im Frühjahr, wenn im Fünftagesmittel
    wieder eine Außentemperatur von 15 Grad Celsius erreicht oder überschritten wird. Als spätester Termin ist
    dabei der 31. Mai festgelegt worden. Entsprechend diesen Definitionen spricht man von einem Heiztag, wenn
    das Tagesmittel der Lufttemperatur unter 15 Grad Celsius liegt."


    Wie stelle ich diese Regel geschickt als openHAB Rule um? Wie ermittle ich eine mittlere Außentemperatur über einen definierten Zeitraum? Kann ich das vielleicht mit RRD schon ermitteln?
    Gibt's da vielleicht schon was? Ich bin leider kein Java-Entwickler :-(

    Viele Grüße

    #2
    Hier mal meine Umsetzung davon. Leider bräuchte ich noch Hilfe in Jodatime um das Zeitfenster berücksichtigen zu können.

    T_Outside - Außentemperatur
    Sommermodus - Switch für Sommer/Winter-Betrieb der Heizung (Kühlen/Heizen)

    Code:
    rule "Sommer-Winter-Modus"
    when
      Time cron "0 0 0/2 * * ?" or
      System started
    then
      var Number Avg
    
      // TODO: Sinnvollerweise sollte zunächst die Zeitfensterberücksichtigung erfolgen
    
      // Durchschnittstemperatur über die letzten 5 Tage ermitteln
      Avg = (T_Outside.averageSince(now.minusDays(5), "rrd4j") as DecimalType)
    
      // Durchschnitt-Temperatur höher als 15°C? Ja, Sommermodus
      if (Avg >= 15) {
        println("Sommer/Wintermodus Sommermodus ("+Avg+")")
        sendCommand(Sommermodus, ON)
      }
      else {
        println("Sommer/Wintermodus Wintermodus ("+Avg+")")
        sendCommand(Sommermodus, OFF)
      }
    end
    Auszug aus der Konsole:
    Code:
    Sommer/Wintermodus Sommermodus (18.800368428215303850947748287580907344818115234375)
    Ja, ich weiß, println ist nicht gern gesehen ;-)

    Grüße
    Sascha

    Kommentar


      #3
      Willst du die Heizperiode wirklich über so eine Formel steuern bzw. dich davon abhängig machen?
      Ich muss gestehen das ich beim ersten Drüberlesen gedacht habe das der Ansatz seinen Reiz hat. Allerdings möchte ich die Heizperiode schon an meinen eigenen Bedürfnissen ausrichten. Nur weil es 5 Tage am Stück unter 15 Grad hat, heisst das ja noch lange nicht das IM Haus so niedrige Temperaturen herrschen das ich mich unwohl fühle.
      Genau aus diesem Grund schalte ich die Heizperiode manuell über einen Schalter.

      Eventuell sollte man nicht nur die Aussentemperatur sondern auch die Innentemperatur berücksichtigen. Ich denke wenn man da genug Logik berücksichtigt, könnte das doch ganz sinnvoll werden :-)

      Kommentar


        #4
        Ich denke der Hinweis mit der Innentemperatur ist ganz gut. Der erste Ansatz entspringt einer Vermieterregelung, da in good cold germany ja alles geregelt sein muss.
        Schlußendlich soll es in der Wohnung behaglich sein, aber nicht umsonst geheizt werden.
        Vielleicht wäre eine ergänzende Regel wie:
        die Komfortemperatur soll im Mittel der letzten 5 Tage nicht 1 oder 2 Grad unterschritten werden?

        Bei mir wird im Übrigen über diesen Winter/Sommerbetrieb neben der Heizung auch die Abschattung. Im Winterbetrieb wird nicht abgeschattet.

        Viele Grüße
        Michael

        Kommentar


          #5
          Zitat von staehler Beitrag anzeigen
          Bei mir wird im Übrigen über diesen Winter/Sommerbetrieb neben der Heizung auch die Abschattung. Im Winterbetrieb wird nicht abgeschattet.
          Die Beschattung habe ich bei mir nicht per Sommer/Winter Umschaltung gesteuert, sondern mache das nur über die Temperaturen: Bei Unterschreitung von 10°C Außentemperatur wird die Beschattung deaktiviert. Als Sicherheitsfunktion (kann evtl. in den Übergangszeiten ein Thema werden), wird das bei >24°C Innentemperatur übersteuert.

          Gruss
          Jochen.

          Kommentar


            #6
            Zitat von kuschelganxta Beitrag anzeigen
            Hier mal meine Umsetzung davon. Leider bräuchte ich noch Hilfe in Jodatime um das Zeitfenster berücksichtigen zu können.
            Hi Sascha,

            danke für Dein Code-Schnipsel, das funktioniert :-)
            Leider bin ich kein Java Programmierer, daher habe ich nur eine Idee, wie mit Jodatime das Zeitfenster ermittelt werden könnte (hab ich aus http://www.joda.org/joda-time/quickstart.html kopiert):
            Code:
            import org.joda.time.*
            ...
            
            DateTime dt = new DateTime()
            int month = dt.getMonthOfYear()
            if (month>9 && month<6 ) {
              <Wintermodus berechnen und ggf. hier noch 
               die gemittelte Raumtemperatur berücksichtigen ...>
            }
            Viele Grüße
            Michael

            Nachtrag: hab's mal in den Designer eingeklopft und alles ist rot :-( (das passiert, wenn man nicht Java kann)
            Wie muss der Code richtig lauten?

            Kommentar


              #7
              Noch ne Frage:
              hab gestern die offizielle OH 1.5.0 installiert und damit keine rrd-Daten mehr. Damit ist der Durchschnitt der letzten 5 Tage "Müll", bzw wird der als Null interpretiert und somit habe ich jetzt schon Winter ;-)
              Wie kann das sinnvoll abgefangen/initialisiert werden? Es würde ja alle 2 Stunden neu berechnet und damit mein manuell gesetzter Sommer-/Winterbetrieb wieder überschrieben.

              Kommentar


                #8
                Hi,

                Zitat von staehler Beitrag anzeigen
                Noch ne Frage:
                hab gestern die offizielle OH 1.5.0 installiert und damit keine rrd-Daten mehr.
                Wieso hast du keine RRD-Daten mehr? Ist das ein Bug in 1.5.0 oder hast du sie einfach aus der alten Version nicht übernommen?

                Falls Bug, warte ich noch mit der Installation...

                Gruß,
                Thomas

                Kommentar


                  #9
                  Hi,

                  Zitat von staehler Beitrag anzeigen
                  hab gestern die offizielle OH 1.5.0 installiert und damit keine rrd-Daten mehr.
                  die Daten werden beim Update nicht automatisch kopiert. Hast Du den /etc/rrd4j Ordner denn in die neue Installation kopiert?

                  Gruß,

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

                  Kommentar


                    #10
                    Ich hab die Daten nicht kopiert.
                    Leider hat sich gezeigt, dass ich meine rrd-Daten ab und zu löschen muss :-(
                    Dem bin ich noch nicht weiter nachgegangen, aber es tauchen immer wieder folgende Meldungen im openhab.log auf:
                    Code:
                    22:24:02.128 INFO  o.o.m.c.i.ModelRepositoryImpl[:97]- Refreshing model 'gruppen.items'
                    22:24:08.002 ERROR o.o.m.c.i.f.FolderObserver[:105]- An unexpected exception has occured
                    java.lang.NumberFormatException: Infinite or NaN
                            at java.math.BigDecimal.<init>(BigDecimal.java:895)
                            at java.math.BigDecimal.<init>(BigDecimal.java:872)
                            at org.openhab.core.library.types.DecimalType.<init>(DecimalType.java:47)
                            at org.openhab.persistence.rrd4j.internal.RRD4jService.mapToState(RRD4jService.java:304)
                            at org.openhab.persistence.rrd4j.internal.RRD4jService.query(RRD4jService.java:180)
                            at org.openhab.core.persistence.internal.PersistenceManager.initialize(PersistenceManager.java:369)
                    22:24:18.037 INFO  o.o.m.c.i.ModelRepositoryImpl[:97]- Refreshing model 'gruppen.items'
                    22:24:20.625 ERROR o.o.m.c.i.f.FolderObserver[:105]- An unexpected exception has occured
                    java.lang.NumberFormatException: Infinite or NaN
                            at java.math.BigDecimal.<init>(BigDecimal.java:895)
                            at java.math.BigDecimal.<init>(BigDecimal.java:872)
                            at org.openhab.core.library.types.DecimalType.<init>(DecimalType.java:47)
                            at org.openhab.persistence.rrd4j.internal.RRD4jService.mapToState(RRD4jService.java:304)
                            at org.openhab.persistence.rrd4j.internal.RRD4jService.query(RRD4jService.java:180)
                            at org.openhab.core.persistence.internal.PersistenceManager.initialize(PersistenceManager.java:369)
                    22:24:31.022 INFO  o.o.m.c.i.ModelRepositoryImpl[:97]- Refreshing model 'gruppen.items'
                    22:24:33.661 ERROR o.o.m.c.i.f.FolderObserver[:105]- An unexpected exception has occured
                    java.lang.NumberFormatException: Infinite or NaN
                            at java.math.BigDecimal.<init>(BigDecimal.java:895)
                            at java.math.BigDecimal.<init>(BigDecimal.java:872)
                            at org.openhab.core.library.types.DecimalType.<init>(DecimalType.java:47)
                            at org.openhab.persistence.rrd4j.internal.RRD4jService.mapToState(RRD4jService.java:304)
                            at org.openhab.persistence.rrd4j.internal.RRD4jService.query(RRD4jService.java:180)
                            at org.openhab.core.persistence.internal.PersistenceManager.initialize(PersistenceManager.java:369)
                    22:24:43.696 INFO  o.o.m.c.i.ModelRepositoryImpl[:97]- Refreshing model 'gruppen.items'
                    22:24:46.478 ERROR o.o.m.c.i.f.FolderObserver[:105]- An unexpected exception has occured
                    java.lang.NumberFormatException: Infinite or NaN
                            at java.math.BigDecimal.<init>(BigDecimal.java:895)
                            at java.math.BigDecimal.<init>(BigDecimal.java:872)
                            at org.openhab.core.library.types.DecimalType.<init>(DecimalType.java:47)
                            at org.openhab.persistence.rrd4j.internal.RRD4jService.mapToState(RRD4jService.java:304)
                            at org.openhab.persistence.rrd4j.internal.RRD4jService.query(RRD4jService.java:180)
                            at org.openhab.core.persistence.internal.PersistenceManager.initialize(PersistenceManager.java:369)
                    Das passiert oft, wenn ich eine Konfigurationsdatei (hier die Datei gruppen.items) ändere und diese erneut eingelesen wird.
                    Für jeden Tipp wäre ich dankbar!

                    Kommentar


                      #11
                      Hi,

                      Infinite or NaN

                      => soweit ich mich erinnere ist das eine RRD-Fehlermeldung. NaN -> Not a Number

                      Entweder versuchst du einen unendlich großen Wert oder etwas, das keine Number ist, abzuspeichern.

                      Gruß,
                      Thomas

                      Kommentar


                        #12
                        Mit dieser Rule werde ich jetzt mal versuchen, die Heizperiode zu ermitteln:
                        Code:
                        import org.openhab.core.library.types.*
                        import org.joda.time.*
                        
                        rule "Sommer-Winter-Modus"
                        when
                          Time cron "0 0 0/12 * * ?" or
                          System started
                        then
                            var Number AvgOut
                            var Number AvgIn
                            var DateTime dt = new DateTime()
                            var int month = dt.getMonthOfYear()
                        // Heizperiode von Oktober bis Mai
                            if (month > 9 && month < 6) {
                                // Durchschnittstemperatur über die letzten 5 Tage ermitteln
                                AvgOut = (IPWETemp.averageSince(now.minusDays(5), "rrd4j") as DecimalType)
                                AvgIn = (IstwertWohnzimmer.averageSince(now.minusDays(5), "rrd4j") as DecimalType)
                            
                                // Durchschnitt-Temperatur höher als 15°C? Ja, Sommermodus
                                if (AvgOut < 15 && AvgIn < 20) {
                                    logInfo("IsWinter Rules", "Wintermodus, durchschnittliche Temperaturen der letzten 5 Tage: Out: " + AvgOut + " In: " + AvgIn)
                                    sendCommand(IsWinter, ON)
                                } else {
                                    logInfo("IsWinter Rules", "Sommermodus, durchschnittliche Temperaturen der letzten 5 Tage: Out: " + AvgOut + "In: " + AvgIn)
                                    sendCommand(IsWinter, OFF)
                                }
                            
                            } else {
                                sendCommand(IsWinter, OFF)    
                            }
                        end

                        Kommentar


                          #13

                          if (month > 9 || month < 6) { Sonst bleibt die Heizung kalt.

                          Kommentar

                          Lädt...
                          X