Hauptmenü

Heizstab über FHEM Regeln

Begonnen von crispyduck, 29 Juni 2017, 16:31:03

Vorheriges Thema - Nächstes Thema

crispyduck

Der war bei der Anlage dabei. Hoffe er hält auch eine Weile. Hatte auf das damals nicht geachtet und beim Hausbau hatten wir ganz andere Sorgen,...

Hab jetztens noch meien Phasenschnittleistungssteller mal mit 10K Drehpoti und einem Quarzstrahler im Wohnzimmer getestet. Störungen konnte ich erst mal keien beibachten, und zumindest der SDM630 zeigt mir korrekt ziemlich linear die Watt bei Stellung 0-100% an.

Heute hab ich dann endlich mal ein bisschen an der Geschichte gebastelt. Erst mal ein altes IDE Kabel genommen und gleich mal alle 40 (wer weiß was noch dazu kommt) Adern auf eine Lochrasterplatine gelötet.
Dann den MCP42010 digital Potentiometer mit den SPI Pins verbunden und zusätzlich noch ein +flankengesteuertes retriggerbares Monoflop zwischen CS und dem Shutdown Pin des MCP42010 gehängt.
Kann nun mit einem kleinem Poti einstellen nach wie vielen Sekunden Inaktivität am CS der digital Potentiometer in Shutdown geht.

Erst mal ohne Raspi getestet, und nachdem zumindest nichts abgeraucht ist und auch mein Monoflop richtig funktionierte auch an die Raspi angeschlossen.

Jetzt dann erst mal auf der Raspi SPI aktiviert und wiringPi über GIT installiert. Dann noch RPi::DigiPot::MCP4XXXX via CPAN installiert und den fhem user in diw gruppe gpio und spi hinzugefügt (sonst gibts permission denied Fehler).

Mit meinen eigentlich nicht vorhandenen Programmierkenntnissen habe ich mich jetzt mal daran gemacht ein 84_MCPXXXX.pm Modul zu basteln.
Und Juhu, ich schaffe es zumindest mal ein Device zu definieren und kann auch schon die Werte des Potis setzen.  :)

Werde jetzt mal schauen das ich ein halbwegs sauberes Modul daraus mache und dann das ganze über ein Notify durch das Reading vom SDM630 setzen.

Lg
Crispyduck

Prof. Dr. Peter Henning

Modul OWVAR bedient ein digitales Potentiometer DS2890

LG

pah

crispyduck

#47
Hallo,

hab das Gaze jetzt endlich mal fertig gemacht und auch schon eine Weile in Betrieb.

Steuere den Heizstab nun über einen Thyristorsteller welcher über eine 5V Steuerspannung geregelt wird.

Für die Steuerspannung habe ich nun einen MCP42010 Digital Potentiometer genommen welcher von der Raspi über SPI angesteuert wird.

Als kleine Sicherheit das der Heizstab nicht vielleicht mal versehentlich an bleibt hängt parallel zum CS Eingang des Potis zusätzlich noch der Eingang eines flankengesteuerten Monoflops am CS Pin der Raspi, dessen Ausgang auf dem Shutdown Pin des MCP42010 hängt. Kommt somit ein paar Sekunden lang kein Signal von der Raspi wird der Poti auf Shutdown gesetzt und der Heizstab ist aus.

Da ich mir schon ein Breakout Board gebastelt habe kam gleich noch ein Sensor für den Wasserzähler sowie ein Reedkontakt für das Garagentor und ein paar Relais dazu welche über das GPIO Modul gelesen und gesteuert werden.  :)

Für das Digitalpotentiometer habe ich mir ein Modul geschrieben welches es erlaubt den Potentiometerwert in Prozent zu setzen: 84_MCP4XXXX https://forum.fhem.de/index.php?topic=80710.0

Geregelt wird das Ganze über ein DOIF:
define di_heizstab_regelung DOIF ([{sunrise('REAL')}-{sunset('REAL',-1000)}] and [+2] and ((fhem ("get StromGesamt Power_Sum__W"))-[HeizstabPower:state])<20) (IF (([StromGesamt:Power_Sum__W]-[HeizstabPower:state])<=-1870)(set Poti pot1 100, set HeizstabPower 1850) ELSE (set Poti pot1 {(([StromGesamt:Power_Sum__W]-[HeizstabPower:state]-20)/-18.5)}, set HeizstabPower {(-([StromGesamt:Power_Sum__W]-[HeizstabPower:state])-20)}) ) DOELSEIF([Poti:pot1] != 0)(set Poti pot1 0, set HeizstabPower 0)

Es wird also unter Tags alle 2 Sekunden (eine Sekunde ging sich nicht aus, dazu ist anscheinend der SDM630 Stromzähler zu träge) der SDM630 Modbus Stromzähler abgefragt und der Poti/Heizstab entweder auf 100% gesetzt, wenn mehr Überschuss als Gesamtleistung des Heizstabes, auf 0% wenn kein Überschuss oder eben auf so viel Prozent das die Leistung in etwa dem Überschuss weniger 20 Watt entspricht. Da der SDM630 auch den Heizstab mit zählt wird dieser immer noch vom Überschuss subtrahiert.

Das Ganze funktioniert jetzt sehr gut. Und ich merke jetzt auch keine Performance Einbußen durch das get/set im 2 Sekundentakt.

Hier noch ein Auszug aus dem Event Monitor und anbei ein paar Fotos:

2017-12-17 12:25:50 ModbusCFG StromGesamt Power_Sum__W: 0.0
2017-12-17 12:25:50 MCP4XXXX Poti pot1: 44.7405405405405
2017-12-17 12:25:50 dummy HeizstabPower 827.7
2017-12-17 12:25:50 DOIF di_heizstab_regelung cmd_nr: 1
2017-12-17 12:25:50 DOIF di_heizstab_regelung cmd: 1
2017-12-17 12:25:50 DOIF di_heizstab_regelung cmd_event: timer_3
2017-12-17 12:25:50 DOIF di_heizstab_regelung cmd_1
2017-12-17 12:25:52 ModbusCFG StromGesamt Power_Sum__W: -12.5
2017-12-17 12:25:52 MCP4XXXX Poti pot1: 45.4162162162162
2017-12-17 12:25:52 dummy HeizstabPower 840.2
2017-12-17 12:25:52 DOIF di_heizstab_regelung cmd_nr: 1
2017-12-17 12:25:52 DOIF di_heizstab_regelung cmd: 1
2017-12-17 12:25:52 DOIF di_heizstab_regelung cmd_event: timer_3
2017-12-17 12:25:52 DOIF di_heizstab_regelung cmd_1
2017-12-17 12:25:54 ModbusCFG StromGesamt Power_Sum__W: 0.0
2017-12-17 12:25:54 MCP4XXXX Poti pot1: 45.4162162162162
2017-12-17 12:25:54 dummy HeizstabPower 840.2
2017-12-17 12:25:54 DOIF di_heizstab_regelung cmd_nr: 1
2017-12-17 12:25:54 DOIF di_heizstab_regelung cmd: 1
2017-12-17 12:25:54 DOIF di_heizstab_regelung cmd_event: timer_3
2017-12-17 12:25:54 DOIF di_heizstab_regelung cmd_1
2017-12-17 12:25:56 ModbusCFG StromGesamt Power_Sum__W: 11.4
2017-12-17 12:25:56 MCP4XXXX Poti pot1: 44.8
2017-12-17 12:25:56 dummy HeizstabPower 828.8
2017-12-17 12:25:56 DOIF di_heizstab_regelung cmd_nr: 1
2017-12-17 12:25:56 DOIF di_heizstab_regelung cmd: 1
2017-12-17 12:25:56 DOIF di_heizstab_regelung cmd_event: timer_3
2017-12-17 12:25:56 DOIF di_heizstab_regelung cmd_1
2017-12-17 12:25:58 ModbusCFG StromGesamt Power_Sum__W: 0.0
2017-12-17 12:25:58 MCP4XXXX Poti pot1: 44.8
2017-12-17 12:25:58 dummy HeizstabPower 828.8
2017-12-17 12:25:58 DOIF di_heizstab_regelung cmd_nr: 1
2017-12-17 12:25:58 DOIF di_heizstab_regelung cmd: 1
2017-12-17 12:25:58 DOIF di_heizstab_regelung cmd_event: timer_3
2017-12-17 12:25:58 DOIF di_heizstab_regelung cmd_1
2017-12-17 12:26:00 ModbusCFG StromGesamt Power_Sum__W: 0.0
2017-12-17 12:26:00 MCP4XXXX Poti pot1: 44.8
2017-12-17 12:26:00 dummy HeizstabPower 828.8
2017-12-17 12:26:00 DOIF di_heizstab_regelung cmd_nr: 1
2017-12-17 12:26:00 DOIF di_heizstab_regelung cmd: 1
2017-12-17 12:26:00 DOIF di_heizstab_regelung cmd_event: timer_3
2017-12-17 12:26:00 DOIF di_heizstab_regelung cmd_1
2017-12-17 12:26:02 ModbusCFG StromGesamt Power_Sum__W: 0.0
2017-12-17 12:26:02 MCP4XXXX Poti pot1: 44.8
2017-12-17 12:26:02 dummy HeizstabPower 828.8
2017-12-17 12:26:02 DOIF di_heizstab_regelung cmd_nr: 1
2017-12-17 12:26:02 DOIF di_heizstab_regelung cmd: 1
2017-12-17 12:26:02 DOIF di_heizstab_regelung cmd_event: timer_3
2017-12-17 12:26:02 DOIF di_heizstab_regelung cmd_1
2017-12-17 12:26:04 ModbusCFG StromGesamt Power_Sum__W: -10.0
2017-12-17 12:26:04 MCP4XXXX Poti pot1: 45.3405405405405
2017-12-17 12:26:04 dummy HeizstabPower 838.8
2017-12-17 12:26:04 DOIF di_heizstab_regelung cmd_nr: 1
2017-12-17 12:26:04 DOIF di_heizstab_regelung cmd: 1
2017-12-17 12:26:04 DOIF di_heizstab_regelung cmd_event: timer_3
2017-12-17 12:26:04 DOIF di_heizstab_regelung cmd_1


tpoetschan


crispyduck

Danke.  :)

Habe mittlerweile noch ein bisschen am DOIF gefeilt:

define di_heizstab_regelung DOIF ([{sunrise('REAL')}-{sunset('REAL',-1000)}] and [+2] and looks_like_number(fhem("get StromGesamt Power_Sum__W")) and ([StromGesamt:Power_Sum__W]-[Heizstab:Power__W]) < -20)
(IF (([StromGesamt:Power_Sum__W]-[Heizstab:Power__W]) >-1870)
(IF ([StromGesamt:Power_Sum__W] >= -500 and [StromGesamt:Power_Sum__W] <= -10 and [Heizstab:Power__W] >= 10/5)
(set Heizstab pot1 {(([Heizstab:Power__W]-([StromGesamt:Power_Sum__W]+20)/5)/18.5)})
ELSE
(set Heizstab pot1 {(([StromGesamt:Power_Sum__W]-[Heizstab:Power__W]+20)/-18.5)}))
ELSE (set Heizstab pot1 100))
DOELSEIF ([Heizstab:Power__W] != 0) (set Heizstab pot1 0)

attr di_heizstab_regelung do always
attr di_heizstab_regelung event-on-update-reading 1


define Heizstab MCP4XXXX 2 8 0

attr Heizstab event-on-update-reading Power__W
attr Heizstab minCorrectionPot1 18
attr Heizstab stateFormat {sprintf "Power: %.2f W",ReadingsVal($name,"Power__W",0)}
attr Heizstab userReadings Power__W {ReadingsVal("Heizstab","pot1",0)*18.5;;;;}


DOIF wird nur wahr wenn der get befehl auch eine nummer zurück liefert und aktueller Überschuss ([StromGesamt:Power_Sum__W] weniger aktuelle Heizstab Leistung ([Heizstab:Power__W]) kleiner als -20 ist.
Geregelt wird also auf -20W, wobei im Bereich StromGesamt -500 bis -10 die Leistung immer um 1/5 der Abweichung von -20 korrigiert wird und darunter oder darüber wird der Heizstab einfach in % von der Heizstab Maximalleistung (1850) gesetzt. Springt so weniger und regelt mehr, wenn aber der überschuss kleiner als 10W wird, wird trotzdem schnell die Leistung des Heizstabes reduziert.

Läuft jetzt schon eine Weile recht gut so. Habe zwar nur 2100Wp aber auch jetzt im Winter an halbwegs schönen Tagen kann die Wärmepumpe zur WW Erzeugung aus bleiben.
"Schenke" dem EVU nur noch ein minimum an Strom, produziere unser WW mit dem eigenen Strom und schone ausserdem die Wärmepumpe.

Lg,
crispyduck

MadMax

Hallo crispyduck,

Sehr cool, ich weiß das Thema ist schon etwas älter...

Wie wird die Leistung geregelt? Läft Der lsa-h3p25yb mit PWM?

Es gibt ja fertige Heizstäbe für PV überschuss die Arbeiten mit 20khz PWM.

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

crispyduck

Hallo Max,

nein, das Ganze funktioniert über Phasen An, bzw. Abschnitt.
Bei den meisten EVUs eigentlich nur bis ca. 200W erlaubt da es dadurch zu Oberwellen am Netz kommen kann.
Naja, hab das Ganze jetzt seit Jahren ohne  irgendwelche Probleme in Betrieb. Keinerlei Störungen oder sonst was bis jetzt gehabt. Bis auf sehr trübe Tage im Winter mache ich das WW nun fast ausschießlich mit dem Überschuss meiner 8kW PV und speise gleichzeitig immer noch 6k im Jahr ein.

Lg crispyduck

MadMax

Hallo crispyduck,

Danke für die Info, das werden die smartmeter leider erkennen...

Gruß Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

crispyduck

Was soll da der Smart Meter erkennen? Wenn du 10 schlechte Dimmer im Haus betreibst ist das 10 mal schlimmer und das ist kein Problem.

Aber ja, Schwingungspaketsteuerung wäre natürlich schöner, aber 1. keine ahnung wie träge die Zähler sind und 2. habe ich da damals nichts fertiges gefunden.

Und nein, kein problem mit Smart Meter.

Lg
crispyduck

MadMax

Hallo,

Das Problem wird hier beschrieben.
https://www.ta.co.at/news/es-ist-nicht-egal-welchen-pv-heizstab-sie-verwenden/

Bei Phasenanschnitt erkennt der am Anfang der Halbwelle das eingespeist wird.
Nach dem "einschalten" reicht der PV überschuss nicht aus und es wird Strom bezogen den man dann bezahlen muss.

Gruß Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

crispyduck

Sicher nicht schlecht fürs Marketing, aber das pauschal für alle Smart Meter zu sagen ist ein Blödsinn.

Dies mag auf Zähler mit Rogowskispule Zutreffen, aber auf die meisten anderen nicht.

Wenn dem so wäre, wäre das bei mir ja schon lange aufgefallen.  ;)

Das Ding macht übrigens Phasen Abschnitt. Aber ja, gibt sicher bessere Lösungen.

Lg, crispyduck

MadMax

Ich werde es mal bei mir testen wenn es soweit ist und dann berichten.

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

crispyduck

Lass mich/uns dann bitte wissen wie deine Lösung aussieht und wie deine Erfahrungen damit sind.

Lg
Crisoyduck

MadMax

Ja mache ich, die PV Anlage baue ich diesen Monat noch und dann kommt warscheinlich bald ein smartmeter da die ja jetzt Pflicht werden.

Gruß
Max
Lenovo M910Q Tiny Debian 12, FHEM 6.3, 2x Siemens Logo 0BA7, Homematic CCU3, Philips HUE, 5x SMA Wechselrichter, BYD HVM, SMA EVCharger, Daikin Wärmepumpe über CAN

Contrib: https://svn.fhem.de/trac/browser/trunk/fhem/contrib/MadMax

Aurel_B

Ein sehr interessanter Thread für mich da ich bei unserer geplanten PV Anlage + WP vor der gleichen Fragestellung stehe: "wie kann ich den PV-Überschuss möglichst genau verheizen?" Ich erlaube mir, das bisher gesagt kurz zusammenzufassen: technisch ist die Lösung relativ "einfach": ich schalte einen Heizstab (1000W) periodisch ein und wieder (50:50) aus um den gewünschten Mittelwert (500W, entspricht hier meinem Überschuss) zu erhalten, wegen der Trägheit des Heizstabes und des Mediums Wasser kann die Schaltperiode auch sehr lange sein. Der Heizstab taktet also und zieht während der An-Phase 1000W und während der Ab-Phase 0W, im Mittel lande ich dann bei 500W. Von der Verrechnungsseite her wird es aufwändig: ich muss die Schaltperiode genügend kurz wählen damit der Zähler in der Summe auf 0W kommt. Das hängt von der Zählerart ab:


  • Bei alten Ferrarizählern ohne Einspeisevergütung kann ich den Heizstab 1 Minute laufen und 1 Minute abschalten lassen. In der ersten Minute beziehe ich dann 500W vom Netz (=Heizstab 1000W + 500W Überschuss macht 500W Differenz die aus dem Netz kommen muss), in der zweiten Minute speise ich die 500W Überschuss in's Netz zurück, in der Summe habe ich 0W bezogen. Diese sehr einfach zu realisierende Ansteuerung wie sie "der-sigi" vorgeschlagen hat ist heutzutage leider obsolet da der Bezug von 500W in der ersten Minute und die Rückeinspeisung in der zweiten Minute beide unterdessen erfasst und separat verrechnet werden, in der Summe habe ich zwar 0W, zahle aber drauf weil ich für den bezogenen Strom mehr zahlen muss als ich für den eingespeisten erhalte.

  • Die zweite Methode ist mit einem Thyristorsteller der innerhalb einer Phase an- und abschaltet wie das "crispyduck" vorgeschlagen hat. Technisch auch noch relativ einfach umzusetzen. Hier ist die Taktperiode wesentlich kürzer (1/100s). Die Frage die "MadMax" aufgeworden hat ist, ob die modernen Smart-Meter den Mehrbezug am Anfang (oder Ende) der Phase sowie die Rückeinspeisung während der restlichen Phasendauer erkennen und - wegen der oben beschriebenen Problematik - entsprechend verrechnen sodass ich in der Summe draufzahle obwohl ich netto 0W beziehe? Wenn ich mir die Doku von dem bei uns verwendeten Smart-Meter anschaue (https://www.metrima.com/images/pdf/GEN4_MTR1000_DATASHEET1.pdf) scheint er nur die Summe pro Phase zu berücksichtigen und nicht die tatsächlichen Stromflüsse während einer Phase -> damit ist das Problem scheinbar gelöst.

  • Am Elegantesten wäre meiner Meinung nach aber ein PWM Ansatz mit entsprechend hoher Taktung (weit oberhalb von 50Hz): durch entsprechende Auflösung und Glättung habe ich (annähernd) wieder eine Sinusspannung am Ausgang die das Netz nicht stört und bei der Verrechnung keine Probleme machen sollte. Der erwähnte "Aton Heizstab" oder auch - wenn ich das richtig sehe - z.B. der Ohmpilot von Fronius arbeiten so.


Der Ohmpilot lässt sich glaub ich mit Modbus - und damit FHEM - ansteuern, ist aber mit 740€ relativ teuer in der Anschaffung. Meine Frage nun: hat irgend jemand so etwas im Eigenbau realisiert?