Raspberry HVAC

Hier mal ein kleines Update und Ausblick was dann in nächster Zeit kommen wird. Die Änderungen zum ersten Prototypen waren doch umfangreicher als gedacht und haben einen weiteren Prototypen erforderlich gemacht. Die Bilder zeigen die noch nicht fertig aufgebaute Version 1.0. Nach den Tests und Softwareanpassungen werde ich eine Projektseite mit Schaltplan, Software etc. online stellen.

raspberry-hvac-proto1 raspberry-hvac-proto2

Die wichtigen Eckdaten des Raspberry-HVAC 1.0 sind:

  • 16 Temperatureingänge (analog, NTC, 10kOhm oder 5kOhm)
  • 3 Ausgänge für Pumpen (Relais oder Halbleiter bestückbar)
  • 2 Ausgänge für Mischer (4 Relais)
  • 2 Relais (potentialfreie Kontakte)
  • 3 Relaistreiberausgänge (5V) für externe Relais
  • 2 I2C-Ports für z.B. SHT21 (Feuchtigkeitssensoren)
  • 1 One-Wire-Port
  • 1 UART-Port
  • Gehäuse oder Hutschienenmontage
  • Für Raspberry B+
  • Hardwarewatchdog
  • Batterie gepufferte Real-Time-Clock
  • Anschlüsse sind als hochwertige Cage-Clamps ausgeführt (Wago oder Würth)
  • Schaltplan und Software Open-Source

38 Kommentare zu “Raspberry HVAC

  1. Hallo,

    ich bin zufällig auf Deine Seite und Dein Projekt gestoßen.
    Die Platine sieht sehr interessant aus und ich hätte daran Interesse.
    Gibt es diese in irgendeiner Form käuflich zu erwerben ?

    Kurt

  2. Hallo,

    da meine Heizungssteuerung gerade etwas spinnt bin ich auf der Suche nach genau sowas.
    Gibts ein Ausblick, was das Kosten soll und wann es lieferbar sein wird?

    Mit freundlichen Grüßen aus dem Westerwald
    Markus
    (Wolf Ölheizung mit Brenner, Umwälzpumpe, Brauchwasserladepumpe) 1-Wire Temperatursensoren für Vor-, Rücklauf, Brauchwasser, Kessel- und Außentemperatur sind vorhanden.

  3. Als Energieberater habe ich viel mit dem Thema zu tun.
    Die Hardware ist ja ganz gut bestückt, was ich gut finde.
    Die Effizienz der Steuerung wird nachher von den Sensoren, der Software und den Einstellungen (Nutzer) abhängen. Ich sehe sehr oft Heizungsanlagen die im Sommer nicht nur Warmwasser produzieren sondern auch die Heizkörper oder Fußbodenheizung beschicken. Ideal wäre eine Software die z.B. den Nutzer fragt ob er Sommerbetrieb wünscht oder registriert das der Nutzer unterwegs ist (Handy hat den Wlan bereich verlassen) und erstellt daraus ein Nutzerprofi (fährt die Vorlauftemperatur runter). (Langes Thema)
    Kurz gesagt „Ich warte auf die fertige Steuerung.“

    Gruß Moritz

  4. Wird es ein GUI geben, evtl sogar mit Unterstützung für einen kleinen Touchscreen?
    Einfache sproradische Anpassungen wie Temperatur- oder Zeiten-Verstellung nur per Kommandozeile wird auf Dauer wohl nicht so praktikabel sein.

  5. GUI und Visualisierung wird ein zentrales Element sein. Wir stellen uns so was wie eine „Fritzbox“ für die Heizung vor. Die Beispiele (Kommandozeile) zeigen nur die grundlegende Verwendung der Hardware.

  6. Schade, für die neue Heizperiode wird es ja schon wieder ziemlich knapp.
    Verfolge die Seite und das Projekt inzwischen seit fast 2 Jahren, da es für mich eine vielversprechende Alternative sein kann und dementsprechend eigentlich mehr Beachtung und Zuwendung verdient hätte.
    Ich hoffe daher weiterhin, dass endlich mehr Bewegung in das Projekt kommt. Ein früherer Release und eine damit einhergehende (wachsende) Community hätten bestimmt gut getan & die Entwicklung beschleunigt.
    Werde notgedrungen weiter warten und bin auf erste Verfügbarkeit sowie Preise gespannt.

    PS: vielleicht wäre dies auch interessant als direkte UI Komponente:
    http://www.computerbase.de/2015-09/raspberry-pi-mini-rechner-erhaelt-offiziellen-7-zoll-touchscreen/

  7. Die Hardwareentwicklung ist abgeschlossen, jedoch kommen wir aufgrund der Vielzahl an laufenden Projekten nicht dazu die Anleitungen, Beispiele und den Democode entsprechend auf zu bereiten damit diese auch für Einsteiger verständlich sind.

    Wer bereits Erfahrung mit Raspberry und Python hat kann aber auch so schon los legen.

    Aktuelle Stand:
    http://emsystech.de/produkte/raspberry-heizungsregler/tutorial/

    Für Einsteiger in die Thematik fehlt einfach noch mehr an Dokumentation weshalb wir es noch nicht bewerben und im Shop anbieten.

  8. An meiner Wolf-Heizung sind NTCs vorhanden mit den Werten
    -20° 48,5kΩ
    0° 16,22kΩ
    20° 6,24kΩ
    40° 2,66kΩ
    60° 1,24kΩ
    80° 627Ω
    könnte der „Raspberry HVAC“ damit brauchbar umgehn?
    Wegen Kesselfühler und Speicherfühler wärs ja nicht dramatisch aber der Außenfühler…..
    Ich will unbedingt als „fall back“ die bestehende Steuerung belassen und mich nur per Relais
    in die Leitungen einklinken und auf Raspberry HVAC umleiten.

    Ist denn schon ein ungefährer Preis bekannt?

    Gruß
    Arno

  9. Hallo Arno,

    die angegebenen Werte sind „Standard“ 5kOhm NTCs und werden in der Software bereits unterstützt. Paradigma verwendet die gleichen Sensoren ebenfalls sehr häufig.

    Mit der folgenden Zeile Code wird aus Deinem Sensor an Eingang 3 ein Temperaturwert in 1/10 Grad

    fbh.tv = io.get_input(3, „NTC_5K“)

    Wir haben diese Woche die ersten Boards ausgeliefert. Das HVAC Board und Zubehör ist in den kommenden Tagen im Webshop verfügbar.

    Raspberry-HVAC (KIT), 135 € (incl. MwSt.)
    – Platine komplett bestückt mit allen SMD-Bauteilen
    – Teilesatz bestehend aus allen Stecker, Klemmen, Bauteile, Relais, 3x Halbleiterrelais, 1x Temperaturfühler, 1x Batterie

  10. Wie siehts mit der Visualisierung aus?
    Was ich im Code sehen konnte ist Ausgabe auf Konsole.
    Werden die Werte fest in hvac.py eingetragen oder gibts da noch mehr.
    Eigentlich müsste, sofern keine eigene Visualisierung vorhanden/geplant, dies doch mit
    FHEM realisierbar sein.
    Damit hab ich in meinem Reihenhaus einige FHTs im Griff.
    Das war bisher auch mein Ziel, das alles mit FHEM + Pi +WLAN zu steuern/visualisieren.
    Mir fehlte bisher nur die geeignete Hardware. Mit dem HVAC-Kit wäre ich dann auch fern jeder Bastellösung.

    Gruß
    Arno

  11. hvac.py erzeugt mehrere Charts mit unterschiedlichen Zeitbereichen (Stunde, Tag, Woche).

    z.B.: build_hour_graph() die Charts liegen dann in \www und können per Webserver angesehen werden.

    Beispiel: http://emsystech.de/wp-content/uploads/2015/03/hvac-buf2.png

    In /hvac/www liegt auch noch ein JSON Datensatz (param.json). Der Regler erkennt Änderungen an der Datei und verwendet die neuen Parameter. Diese Parameter können von einer HVAC eigenen Bedienoberfläche (ist in Arbeit) oder einem anderen System wie FHEM den Regler bedienen.

  12. Hallo,
    ist es auch möglich eine PT1000 Temperaturfühler an dieser Schaltung zu verwenden, da in meiner Öl-Heizungsanlage nur diese Fühler verwendet werden. Eine Anpassung des Python Programm für den PT1000 wäre für mich kein großes Problem.

    Gruß Schorsch

  13. Die Temperatureingänge sind für NTC Temperatursensoren ausgelegt. Man könnte theoretisch PT1000 verwenden. Aufgrund der sehr geringen Temperaturänderung pro Kelvin ist die Auflösung dann jedoch sehr grob. (~ 1,2 K)

  14. Ich habe mein Board auch zuletzt bekommen, danke dafür!
    Das Programmieren gestaltet sich doch schwerer wie gedacht.
    Im Prinzip soll mein Skript folgendes können: temp eingang1 > 60 schaltet o1 und temp eingang2 schaltet o2 wenn unter 35 grad bis 50 grad und dann erst wieder bei unter 35 grad. Der zweite Teil soll aber nur aktiv werden, wenn temp1 > 60 grad oder eben o1 geschaltet ist.
    Das Ganze soll dann in den Graphen ausgegeben werden.
    Im Prinzip ja eine ganz einfache Sache, nur bekomme ich es nicht gebacken.
    Vielleicht kann mir jemand helfen.
    mfg

  15. So sieht mein derzeitiges Skript aus, läuft und wird mittels rc.local beim booten gestartet.

    from lib.utils import *
    from lib.hvac_hal import HvacIO

    loop = Loop()
    timer_sec = IntervalTimer(1)
    io = HvacIO()

    print(„Raspberry-HVAC, DEMO1, (www.emsystech.de)“)
    while 1:
    if (timer_sec.is_event()): # 1x pro Sekunde
    io.read_all_inputs() # alle Eingänge erfassen
    temp = io.get_input(1, „NTC_10K“) # Temperatur
    switch = io.get_input(2, „SWITCH“) # Schalter

    if(temp > 61):
    io.o1 = True

    print(„Temperature:“,temp,“°C o1:“,io.o1,“)

  16. In der Software wird der Ausgang nur gesetzt un bleibt daher nach dem ersten Schaltvorgang immer True.

    if(temp > 61):
    io.o1 = True
    else:
    io.o1 = False

    In der Praxis würde man zusätzlich eine Hysterese einbauen damit der Ausgang am Schaltpunkt nicht ständig hin und her schaltet. (siehe compare() in demo2.py)

  17. Auf die schnelle habe ich kein Datenblatt (Temperaturkennlinie) gefunden. Anscheinend handelt es sich um 1kOhm Nickelsensoren. Die Temperaturänderung ist deshalb sehr gering und damit auch die Auflösung in der HVAC Eingangsbeschaltung. Das HVAC Board ist für 10kOhm (5kOhm) NTC vorgesehen.

  18. Ist doch bestimmt auch möglich einen Rauchgasmelder wie den MQ-2 zu integrieren oder? Müsste auch nicht mal genaue Werte ausgeben sondern nur false/true um zu gucken ob der Festbrennstoffkessel in Betrieb ist, damit dann der Ölbrenner nicht anspringt.

  19. Tolles Projekt!
    Bin gerade dabei, mich in Python einzuarbeiten und danach mit der HVAC-Hardware eine Steuerung bzw. Regelung meiner Heizung (zwei Heizkreise Heizkörper und Fußbodenheizung + Warmwasseraufbereitung mit Öl-Brenner) zu realisieren.
    Nur so aus Neugierde: Warum wurde die SPI-Kommunikation mit dem AD-Wandler MC3308 „per Hand“ kodiert und nicht die entspr. Python-Bibliothek spidev verwendet?

  20. Das HVAC Projekt steht unter der Prämisse einfach und robust zu sein. Auf jede extra Library die keinen wirklichen Vorteil bringt wird verzichtet. Vom Prinzip spricht nichts dagegen spidev zu verwenden aber wirkliche Vorteile bringt es nicht. Mit dem update auf Raspbian Jessie ist der GPIO Zugriff nun ja auch ohne sudo möglich.

  21. Hallo,

    danke für das Projekt.

    Ich habe noch etwas ältere 500Ohm,NTC und 20kOhm,NTC im Einsatz. Besteht die Möglichkeit diese anzuschließen oder ist „nur“ der Einsatz von 5k und 10k möglich?.

    Gibt es eigentlich auch ein Forum / Board, wo man gemeinsam Ideen austauschen und entwickeln kann?

    Danke und noch viel Spaß und Erfolg,
    Christian

    • In der Software sind die Kennlinien für 10k und 5k NTC bereits enthalten. In (hvac_hal.py) können diese ergänzt werden. Für die optimale Auswertung sollten die Pullups an den Eingängen ebenfalls angepasst werden.

  22. Hallo,

    ich habe mal etwas mit den PT100 / PT1000 probiert und folgendes versucht:

    In der Datei lib/hvac_hal.py das am Schluss eingefügt:

    def pt_100(adc):
    „““ Convert ADC to temperature for PT100/PT1000
    „““
    tab_adc = [88.22, 90.19, 92.16, 94.12, 96.06, 98.04, 100, 101.95, 103.90, 105.85, 107.79, 109.73, 111.67, 113.61, 115.54, 117.47, 119.40, 121.32, 123.24, 125.16, 127.07, 128.98, 130.89, 132.80, 134.70, 136.60, 138.50] # Hersteller Tabelle
    tab_temp = [-30, -25, -20, -15, -10, -5, 0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55, 60, 65, 70, 75, 80, 85, 90, 95, 100]

    i = 0;
    if (adc tab_adc[26]): return (-99.9)

    while (adc < tab_adc[i + 1]): # Intervall suchen
    i += 1
    dx = tab_adc[i] – tab_adc[i + 1] # delta x berechnen
    dy = tab_temp[i + 1] – tab_temp[i] # delta y berechnen
    x = tab_adc[i] – adc # offset fuer Intervall berechnen

    v = (dy * x)
    v = float(v) / float(dx)
    temp = v + tab_temp[i]

    temp = round(temp, 1)
    return (temp)

    Und dort angepasst:

    def get_input(self, ch, type):
    """ convert raw ADC Value to a usable type
    """
    adc = self.adc[ch – 1]
    …..
    if (type == "PT_100") : return (pt_100(adc))

    Mir ist aufgefallen, die Daten sind nicht gerade genau aber für einen Test reicht es erstmal. Nur habe ich einen PT1000 Fühler bekomme die Daten aber nicht in 1000 sondern in 100 wie die PT100.

    Wenn jemand das was hat würde ich mich freuen.

    Danke

  23. Hallo,

    warum eröffnen wir nicht mit der Software etwas auf GitHub, dann kann jeder dran weiter entwicklen und patchen und es gäbe ein Forum auch dazu.

  24. Moin,

    auch ich hab das Board erfolgreich am Laufen und einige Test damit vollzogen…. alles soweit prima… tolle Hardware! Allerdings habe ich inzwischen seit Jahren einen FHEM Server mit etlichen Sensoren und Aktoren in Betrieb. Nun würde ich gern auch das HVAC Board via FHEM steuern, da es dort bereits PID Regler oder auch Plots/Charts uvm gibt.

    Ich denke es wäre durchaus Absatz steigernd, wenn es ein FHEM Modul gäbe, mit dem jeder die HVAC schnell mit allen IOs in FHEM anlegen kann. Speziell die beiden AD Wandler via SPI wären interessant, denn dafür konnte ich aktuell im FHEM Forum nicht recht was finden.

    Mit der Konstellation ließen sich dann ohne Perl bzw. Python Programmierkenntnisse rein über die FHEM Weboberfläche verschiedenste Anwendungsszenarien zusammenklicken… in der Folge also von einem deutlich größeren Benutzerkreis.

    Jemand eine Idee, wie sich das verhochzeiten ließe?

    Gruß Maik

  25. Hallo Maik,

    man könnte auf dem PI einen JSON-RPC-Server machen der alles zurück gibt und den man einfach ansprechen kann… Dann ein Perl Modul für FHEM machen welches mit dem Server kommuniziert.

  26. Hallo
    wie errechne ich die adc- werte
    ich habe einen Solarkollektorfühler mit diesen Werten

    °C Ohm
    -20 1373
    -10 1499
    0 1633
    10 1774
    20 1923
    25 2000
    30 2079
    40 2243
    50 2414
    60 2592
    70 2778
    80 2972
    90 3173
    100 3380
    110 3591
    120 3800

    • Der Sensor bildet einen Spannungsteiler mit dem Pullup Widerstand.
      Bei Dir handelt es sich um einen 2kOhm Sensor. Durch setzen des Lötjumpers auf der Platine kann von 10kOhm auf 5kOhm Pullup umgestellet werden.
      Umrechnung:
      @20°C: (1923 / (1923 + 5000)) * 1024 -> ADC = 284
      @25°C: (2000 / (2000 + 5000)) * 1024 -> ADC = 293
      Das ganze lässt sich ein einer kleinen Exceltabelle schön umrechnen.
      Noch besser wird es wenn der Pullup ebenfalls 2kOhm beträgt.

  27. Hallo,
    wenn ich das Demo1.py ausführe bekomme ich immer folgendes zurück:

    pi@raspberrypi:~/Desktop/HVAC $ sudo python3 demo1.py
    Raspberry-HVAC, DEMO1, (www.emsystech.de)
    Temperature: -99.0 °C R1: True Switch: 0 R2: 0

    woran kann das liegen?
    Grüße Hannes

Kommentar verfassen