« Heizung, Lüftung, Klima  |

Nibe/KNV F1145 - Wettersteuerung nachbilden

   
Teilen: facebook    whatsapp    email
Zusammenfassung anzeigen
  •  riesi77
15.10.2025 - 20.2.2026
8 Antworten | 5 Autoren 8
2
10
Hallo,
ich habe eine F1145 - leider noch ohne Cloud Anbindung, dafür aber eine Modbus Anbindung und damit lokalen Zugriff auf die Register.
Ohne Cloudzugriff habe ich auch die Wettersteuerung nicht, die ich gerne in Home Assistant nachbilden würde.
Was habe ich?
  • Eine Wettervorhersage und damit den prognostizierten Wert in 4h (bzw. xh)
  • Die aktuelle Außentemperatur BT1
  • Die 24h gemittelte Außentemperatur (24h Filterzeit)
  • Den Offset (Standard) der Heizkurve (heat_offset_s1_47011)
Mein Plan wäre nun, den Offset jeweils mit dem Temperaturunterschied zwischen Vorhersage und aktueller Außentemperatur auf- bzw. abzuschlagen.
Hört sich das plausibel an? Würdet Ihr dazu den gemittelten oder den aktuellen BT1 nehmen? Evtl. auch die Vorhersagewerte auf 25h mitteln?
Gibt es noch andere Anregungen? Oder entdeckt Ihr Denkfehler?

Danke,
LG,
Riesi

  •  Johnny90
16.10.2025  (#1)
Hallo,

ich mache es bei mir wie folgt:
  • alles läuft auf Raspi mit NibePi
  • aktuellen AT AT [Außentemperatur] Wert und zukünftigen Wert von open-meteo holen
  • beide Werte mit aktuellem Wert von BT1 abgleichen --> wenn aktueller Wert von open-meteo 1K höher als BT1 --> Prognose Wert wird um 1K verringert
  • mit aktuellem Wert und Prognose Wert VL VL [Vorlauf] berechnen. Z.B habe ich für meine Kurve 3 und Offset 1 die VL VL [Vorlauf] Temp für 20,10,0,-10 und -20 Grad in Excel gepackt und eine Formel über Diagramm rechnen lassen. Diese dann ins Skript eingefügt.
  • Nun hast du die Differenz VL VL [Vorlauf] Temperatur
  • In NibePi kann man einen virtuellen RMU anlegen, den man per MQTT füttern kann
  • Sollraumtemperatur vorgeben (z.B. 22 Grad) und Faktor auf 1 setzen
  • Wenn es nun kälter wird und die Differenz der beiden VL VL [Vorlauf] Temperaturen 1K ist, schicke ich dem virtuellen RMU 22-1=21 Grad rüber --> VL steigt um 1K

Falls du den Innenraumfühler aktiv nutzt, kannst du diesen Wert auch noch in die Formel packen.
Mit dieser Methode verbiege ich zusätzlich auch noch die sehr grobe Heizkurvenoffset Einstellung und kann die Kurve feiner einstellen.

2
  •  lewurm
  •   Bronze-Award
20.10.2025  (#2)
Vielleicht als Ergänzung, macht die Nibe Wettersteuerung glaube ich nicht: Da unsere Sanierung relativ gesehen ein Vogelhaus ist (und auch noch am Rand einer Siedlung dem Wetter ausgesetzt), berücksichtige ich auch den Wind in meiner manuellen Steuerung.



Konkret sieht es so aus, der Returnwert ist der Aufschlag der auf die Basisheizkurvenoffset drauf kommt.

2025/20251020167325.jpg
Ich verwende übrigens Pyscript via Home Assistant für die Steuerung.

2
  •  Ulairi
  •   Bronze-Award
20.10.2025  (#3)
Darf ich fragen, wie oft werden da Werte an die WP WP [Wärmepumpe] übergeben? Also wieviel Schreibvorgänge habt ihr da?

1


  •  riesi77
20.10.2025  (#4)
@Johnny90 , Du verwendest also eine virtuelle Raumsteuerung, um zu adaptieren. Gute Idee.
Wie weit schaust Du in die Zukunft? 4h oder länger?
@­lewurm : Danke für den Hinweis mit dem Wind. Bei mir spielt es eher eine Rolle, ob es sonnig ist oder bedeckt - dazu überlege ich noch, Solcast als PV Prognose einzubetten um bei Sonne die Heizung zurückzufahren.
@­Ulairi : Ich würde das stündlich machen.


1
  •  Johnny90
20.10.2025  (#5)

zitat..
lewurm schrieb:

Vielleicht als Ergänzung, macht die Nibe Wettersteuerung glaube ich nicht: Da unsere Sanierung relativ gesehen ein Vogelhaus ist (und auch noch am Rand einer Siedlung dem Wetter ausgesetzt), berücksichtige ich auch den Wind in meiner manuellen Steuerung.

Konkret sieht es so aus, der Returnwert ist der Aufschlag der auf die Basisheizkurvenoffset drauf kommt.

Ich verwende übrigens Pyscript via Home Assistant für die Steuerung.

Ähnlich kann man dies mit "sonnig", "bewölkt",... auch machen.


zitat..
Ulairi schrieb:

Darf ich fragen, wie oft werden da Werte an die WP WP [Wärmepumpe] übergeben? Also wieviel Schreibvorgänge habt ihr da?

Bei mir 0, da alles über den virtuellen RT RT [Raumtemperatur] Fühler/RMU geregelt wird.
Falls dieser über HA nicht verfügbar ist, kann man auch über einen kleinen Raspberry Pico (oder größer) + bisschen Elektronikzeugs eine Spannung anlegen, die der gewünschten Temperatur entspricht und diesen als RT RT [Raumtemperatur] Fühler analog verwenden. Dieser wird dann per MQTT gefüttert.
Allerdings ist diese Lösung eher für Bastelbegeisterte, aber hat bei mir schon funktioniert.




1
  •  Johnny90
20.10.2025  (#6)

zitat..
riesi77 schrieb:

@Johnny90 , Du verwendest also eine virtuelle Raumsteuerung, um zu adaptieren. Gute Idee.
Wie weit schaust Du in die Zukunft? 4h oder länger?
@­lewurm : Danke für den Hinweis mit dem Wind. Bei mir spielt es eher eine Rolle, ob es sonnig ist oder bedeckt - dazu überlege ich noch, Solcast als PV Prognose einzubetten um bei Sonne die Heizung zurückzufahren.
@­Ulairi : Ich würde das stündlich machen.

Das ist denke ich vom Haus abhängig. Bei meiner leichten Holzständerbauweise mit wenig Speichermasse funktionieren 4h gut.
Wenn man mehr Speichermasse hat, kann man wahrscheinlich erhöhen.

Schau mal auf open-meteo nach. Da bekommst alles. Windgeschwindigkeit, Wettercode (Sonnig, bewölkt, Regen, Schnee,....), Sonnenstunden....

EDIT zu Beitrag oben:
Ich meinte den Widerstand vom NTC simulieren. So wars glaube ich emoji

1
  •  yunus64
19.2.2026  (#7)
Hi Zusammen,

ich plane ähnliches mit Loxone / Loxberry... ich denke ich muss mir die Beiträge nochmal genau durchlesen um eure Regelstrategie zu verstehen und eine eigene zu erarbeiten....

wass ich nun aber sehr spannend finde: Wie kannst du den Widerstand von einem NTC simulieren? Kannst du das detailiert beschreiben? 
Man müsste doch zumindest die gleiche Spannungsquelle haben, was aber schwierig ist wenn man mit einem externen Controler die Spannung erzeugt oder?

1
  •  Johnny90
20.2.2026  (#8)

zitat..
yunus64 schrieb:

Hi Zusammen,

ich plane ähnliches mit Loxone / Loxberry... ich denke ich muss mir die Beiträge nochmal genau durchlesen um eure Regelstrategie zu verstehen und eine eigene zu erarbeiten....

wass ich nun aber sehr spannend finde: Wie kannst du den Widerstand von einem NTC simulieren? Kannst du das detailiert beschreiben? 
Man müsste doch zumindest die gleiche Spannungsquelle haben, was aber schwierig ist wenn man mit einem externen Controler die Spannung erzeugt oder?



Hi,

an den Pi Pico habe ich einen DAC angeschlossen, der tatsächlich eine Spannung erzeugt hatte, die der Spannung entspricht, den die Nibe Steuerung für den NTC bei der entsprechenden Temperatur erwartet hätte.
Eigentlich legt die Nibe eine 3,3V Spannung an den NTC an...
Warum das funktioniert, das ich keinen Widerstand habe sondern, ebenfalls eine Spannung an die 2 Kabel anlege, weis ich nicht. Bin kein Elektroniker emoji 

Bei der F-Steuerung hat dies funktioniert.
Ich meine aber gelesen zu haben, das es auch Bauteile gibt, die eine variablen Widerstand erzeugen können.

Hier mal ein Ausschnitt aus dem micro Python Code. Die Temperatur-Spannungs-Tabelle kommt aus dem Handbuch der Nibe für die verwendeten Temperaturfühler. Mit der Kalibrierkonstante habe ich die angezeigte RT RT [Raumtemperatur] an der WP WP [Wärmepumpe] justiert:
 

# 📌 Kalibrierungskonstante
KALIBRIERUNG = 0.9935  # Kalibrierungsfaktor für Spannung
 

# 📌 I2C für MCP4725 DAC
i2c = machine.I2C(1, scl=machine.Pin(7), sda=machine.Pin(6), freq=50000)
MCP4725_ADDR = 0x60  # Standard I2C-Adresse des DAC


# 📌 Temperatur-Spannungs-Datenpunkte (Messwerte)
temp_spannung_tabelle = {
    10: 2.673,
    20: 2.399,
    30: 2.083,
    40: 1.752
}
 

def temperatur_in_spannung(temperatur):
    """Interpoliert die DAC-Spannung aus den gegebenen Temperatur-Messwerten."""
    temp_werte = sorted(temp_spannung_tabelle.keys())  # [10, 20, 30, 40]
   
    # Temperaturgrenzen setzen
    if temperatur <= temp_werte[0]:
        return temp_spannung_tabelle[temp_werte[0]]
    if temperatur >= temp_werte[-1]:
        return temp_spannung_tabelle[temp_werte[-1]]

    # Lineare Interpolation zwischen den nächstgelegenen Werten
    for i in range(len(temp_werte) - 1):
        t1, t2 = temp_werte, temp_werte[i + 1]
        if t1 <= temperatur <= t2:
            v1, v2 = temp_spannung_tabelle[t1], temp_spannung_tabelle[t2]
            return v1 + (v2 - v1) * ((temperatur - t1) / (t2 - t1))

def schreibe_dac(temperatur):
    """Berechnet die Spannung aus der Temperatur und schreibt den Wert an den MCP4725 DAC."""
    spannung = temperatur_in_spannung(temperatur)

    # Anwenden der Kalibrierung
    spannung_kalibriert = spannung * KALIBRIERUNG

    # Umwandlung in 12-Bit Wert (0–4095)
    dac_wert = int((spannung_kalibriert / 3.3) * 4095)

    # Senden an den MCP4725 DAC
    data = bytearray([dac_wert >> 4, (dac_wert & 0x0F) << 4])  # 12-Bit Wert umwandeln
    i2c.writeto(MCP4725_ADDR, b'\x40' + data)

    print(f"🔢 DAC-Wert: {dac_wert} (Kalibrierte Spannung: {spannung_kalibriert:.3f}V)")



1


Beitrag schreiben / Werbung ausblenden?
Einloggen

 Kostenlos registrieren [Mehr Infos]

Nächstes Thema: LED Spot Einbau in Dämmung