Nach nun rund 2,5 Monaten und einiger Bastelei möchte ich hier nun meinen vorerst Finalen Stand präsentieren.
Wie gesagt hat das alles dieses Video bei mir verursacht, wo einige ja der Meinung waren das es keinen Spaß macht sich Löterei anzuschauen ![]()
Kleiner Seitenhieb vorbei, los gehts:
In meiner bisherigen Lösung habe ich eine smarte Steckdose bei 35°C ein- und unter 30°C wieder ausgeschaltet. In der Steckdose befand sich ein einfaches 12V Netzteil, an dem die drei 24V Lüfter betrieben wurden -> Hoymiles HM-1500 wird heiß - einige Ideen zur Kühlung - #61 von lethuer - Anleitungen / Tutorials - Akkudoktor Forum
Dieses einfache An und Aus war mir aber etwas zu wenig intelligent und ich wollte die Kühlleistung (Drehzahl) in Abhängigkeit der rückgemeldeten DTU Temperatur steuern.
Der eigentliche Plan die bisherigen 3 80mm 24V 2Pin Lüftern über eine PWM mit 25kHz zu betreiben war leider gescheitert, da die Pulspause zu kurz war als das sich der Strom über den Freilauf hätte abbauen können und somit war die Spannung mit einer getakteten PWM Spannung am Lüfter nicht wirklich zu beeinflussen.
Damit war nun also praktisch keine Drehzahlsteuerung möglich und ich sie durch 2 120mm 12V 4Pin Lüfter ersetzt, sieht dann jetzt so aus:
Die entsprechenden Vorlagen aus Thingiverse:
Lüfter stl.zip (949 KB)
Fan Cover: Fan Cover
Fan Connector: Fan Connector
Schaltplan: EasyEDA
Prinzipiell sollte damit der Einsatz von handelsüblichen 5V, 12V oder 24V PWM Lüftern machbar sein !
Über die Versorgungsspannung der Lüfter wird auch der D1 Mini versorgt.
Schematic_Fansteuerung_2023-09-29.pdf (45 KB)
Einkaufsliste:
20230929 Einkaufsliste Fan Steuerung.docx (13.6 KB)
Code:
20231011 wr-lueftersteuerung 4pin - Forum.txt (7.57 KB)
Das eigene Gehäuse passend zu der verwendeten Lochraster Platine: onshape
Gehäuse stl.zip (134 KB)
Nun zur Funktion:
Frei wählbar ist ein Temperaturbereich in denen die Regelung aktiv sein soll, in meinem Falle 30°C-50°C.
In diesem Bereich wird der Duty Cycle also in Abhängigkeit von der rückgelesenen DTU Temp linear eingestellt.
Ebenfalls frei wählbar ist eine Einschalttemperatur, bei mir 35°C.
Unterhalb von 30°C schaltet der Lüfter dann wieder ab, oberhalb von 50°C wird mit dem ebenfalls frei wählbaren maximalen DutyCycle angesteuert (bei mir 50%).
Der maximale Duty Cycle ist von mir lediglich aus akustischen Gründen gewählt, ich höre den Lüfter bei 50% Duty Cycle kaum noch.
Sollte es mal zu der Situation kommen, dass trotz maximaler Kühlung die eingestellte maximal Temperatur dennoch für mehrere Sekunden überschritten wird, so wird ein Alarm ausgegeben. Wenn man mag könnte man sich den dann aufs Handy schicken lassen oder sonst was damit tun.
Den "Helper Temp Sensor" darf man ignorieren, war mein Debugging Schieberegler...
Bei Aktivierung des Schalters "manuelle Lüftersteuerung" jederzeit den Duty Cycle manuell so einstellen wie man ihn gerne hätte.
Zu guter Letzt werden dann noch die beiden Drehzahlen der Lüfter ausgewertet und angezeigt, man könnte hier sicher noch eine Meldung erzeugen sofern eine der beiden 0 ist trotz ausgegebenem Duty Cycle, dann wäre der Lüfter entweder kaputt oder das Kabel abgerutscht.
Der Yaml Code der Karte:
type: vertical-stack cards: - type: entities entities: - entity: switch.lufter_wechselrichter - entity: number.wr_lufter_balkonkraftwerk_media_centre_min_temperature - entity: number.wr_lufter_balkonkraftwerk_media_centre_max_temperature - entity: number.wr_lufter_balkonkraftwerk_media_centre_start_temp - entity: number.wr_lufter_balkonkraftwerk_media_centre_max_pwm - entity: binary_sensor.wr_lufter_balkonkraftwerk_media_centre_alarm - entity: input_number.helper_temp_sensor - entity: input_boolean.balkonkraftwerk_manuelle_luftersteuerung - entity: sensor.wr_lufter_balkonkraftwerk_lfterdrehzahl_fan1 - entity: sensor.wr_lufter_balkonkraftwerk_lfterdrehzahl_fan2 title: Lüftersteuerung state_color: true show_header_toggle: false - features: - type: fan-speed type: tile show_entity_picture: true vertical: false name: Lüftergeschwindigkeit entity: fan.wr_lufter_balkonkraftwerk_media_centre_fan
Heute sah das dann so aus:
Der rot hinterlegte Bereich veranschaulicht, wann die smarte Steckdose nun eingeschaltet ist und die Lüftersteuerung somit prinzipiell ihren Dienst verrichten könnte.
Die grüne DTU Temperatur steigt im Laufe des Vormittages an, bis bei Erreichen der eingestellten 35°C der Lüfter mit rund 14% Duty Cycle anspringt.
Folglich sinkt die Temperatur leicht ab (32°C), wodurch auch der Lüfter langsamer wird (7%).
Nun steigt aber die blaue Solarleistung und damit der Strom im WR weiter an, was die Temperatur wieder auf 35°C und den Duty Cycle zurück auf 14% bringt.
Nach dem Mittagspeak sinken Leistung und folglich die Temperatur wieder, wodurch der Duty Cycle bis auf 0% heruntergefahren wird.
Und auch hier wieder der Yaml Code der Karte:
type: custom:mini-graph-card entities: - sensor.solar_temperature - entity: input_number.balkonkraftwerk_helper_lufter_pwm name: Fan Duty Cycle y_axis: secondary color: '#ffc400' show_line: true show_points: false show_fill: true - entity: input_number.wr_lufter name: Lüfter y_axis: secondary color: red show_line: false show_points: false show_fill: true color_thresholds: - value: 25 color: '#90ee90' - value: 50 color: '#ff8800' - value: 70 color: '#ff0000' align_icon: left align_state: center show_points: false height: 100 hours_to_show: 12 points_per_hour: 24 hour24: true name: WR Temperatur show: graph: true name: true extrema: true labels: true labels_secondary: true lower_bound_secondary: 0 upper_bound_secondary: 50
Da der Duty Cycle in ESP Home nicht auf 0% gesetzt werden kann habe ich in einen Helper "input_number.balkonkraftwerk_helper_lufter_pwm" genutzt und diesen in einer kleinen Automation verbaut.
Nun werden auch 0% angezeigt wenn der Lüfter aus ist und andernfalls wird der aktuelle Duty Cycle übernommen.
alias: Balkonkraftwerk Helper Lüfterzustand PWM
description: ""
trigger:
- platform: state
entity_id:
- fan.wr_lufter_balkonkraftwerk_media_centre_fan
condition: []
action:
- service: input_number.set_value
data_template:
entity_id: input_number.balkonkraftwerk_helper_lufter_pwm
value: >-
{{ state_attr('fan.wr_lufter_balkonkraftwerk_media_centre_fan',
'percentage') }}
enabled: false
- if:
- condition: state
entity_id: fan.wr_lufter_balkonkraftwerk_media_centre_fan
state: "off"
then:
- service: input_number.set_value
data_template:
entity_id: input_number.balkonkraftwerk_helper_lufter_pwm
value: 0
- if:
- condition: state
entity_id: fan.wr_lufter_balkonkraftwerk_media_centre_fan
state: "on"
then:
- service: input_number.set_value
data_template:
entity_id: input_number.balkonkraftwerk_helper_lufter_pwm
value: >-
{{ state_attr('fan.wr_lufter_balkonkraftwerk_media_centre_fan',
'percentage') }}
mode: single
Auch wenn es für die Anwendung sicher Overkill war, mir hat's Spaß gemacht und man wird ja nicht dümmer dadurch.
Und wenn es dann vl. noch jemand gebrauchen kann umso besser
Was man noch machen könnte:
- bei Zeiten könnte man sicher mal eine Platine designen und dem Ganzen so einen schöneren Look verpassen. Den Link zum Schaltplan habe ich ja zur Verfügung gestellt. Feel free
- für den Hoymiles 1500 würde ich mir noch Halter aus PETG vorstellen können, ich habe mir meine Halter einfach aus einem Stück Stahlband / Blechstreifen zurecht gebogen da 3d Designs beim ersten mal ja doch nie passen^^










