Fussbodenheizung mit PWM steuern

Begonnen von jamesgo, 24 September 2015, 08:28:49

Vorheriges Thema - Nächstes Thema

sash.sc

Zitat von: Rolfg am 13 Oktober 2019, 12:29:07
Hallo,
ich bräuchte doch nochmal Hilfestellung. Ich bekomme den Aktor State nicht richtig im SVG Plot. Ich habe schon alles mögliche gesucht und auch gefunden. Bekomme es aber einfach nicht hin.
hier mal ein Auszug aus dem Log:

2019-10-13_10:06:25 PW_Wohnzimmer actorState: off
2019-10-13_10:07:25 PW_Wohnzimmer desired-temp-used: 21.0
2019-10-13_10:07:25 PW_Wohnzimmer temperature: 22.5
2019-10-13_10:07:25 PW_Wohnzimmer actorState: off
2019-10-13_10:08:25 PW_Wohnzimmer desired-temp-used: 27.0
2019-10-13_10:08:25 PW_Wohnzimmer temperature: 22.5
2019-10-13_10:08:25 PW_Wohnzimmer actorState: on
2019-10-13_10:09:25 PW_Wohnzimmer desired-temp-used: 27.0
2019-10-13_10:09:25 PW_Wohnzimmer temperature: 22.5
2019-10-13_10:10:25 PW_Wohnzimmer desired-temp-used: 21.0
2019-10-13_10:10:25 PW_Wohnzimmer temperature: 22.5
2019-10-13_10:11:25 PW_Wohnzimmer desired-temp-used: 21.0
2019-10-13_10:11:25 PW_Wohnzimmer temperature: 22.5
2019-10-13_10:11:25 PW_Wohnzimmer actorState: off
2019-10-13_10:12:25 PW_Wohnzimmer desired-temp-used: 21.0
2019-10-13_10:12:25 PW_Wohnzimmer temperature: 22.5



Und hier mein Plot:

# Created by FHEM/98_SVG.pm, 2019-10-13 12:24:29
set terminal png transparent size <SIZE> crop
set output '<OUT>.png'
set xdata time
set timefmt "%Y-%m-%d_%H:%M:%S"
set xlabel " "
set title 'Wohnzimmer Heizung'
set ytics
set y2tics ("on" 1,"off" 0)
set grid ytics
set ylabel "Soll"
set y2label "Ist"
set yrange [18:28]
set y2range [-1:3]

#Log.Hz.Schalter.Wohnzimmer 4:PW_Wohnzimmer.desired-temp-used\x3a::
#Log.Hz.Schalter.Wohnzimmer 4:PW_Wohnzimmer.temperature\x3a::
#Log.Hz.Schalter.Wohnzimmer "0":PW_Wohnzimmer.actorState\x3a::

plot "<IN>" using 1:2 axes x1y1 title 'Soll' ls l0 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y1 title 'Ist' ls l1 lw 1 with lines,\
     "<IN>" using 1:2 axes x1y2 title 'Schalter' ls l3 lw 1 with steps


Ich weiß nicht was ich im Editor für Actor.State machen soll. Vielleicht ist ja einer von euch so nett und zeigt mir einen Scrennshot von seinen Einstellungen im SVG Editor.

Danke und Gruß Rolf
Ist es das es du suchst?

(https://uploads.tapatalk-cdn.com/20191114/e13805a4e1108359481fa807a5d9a4a2.jpg)

Gesendet von meinem MI 9 mit Tapatalk

Raspi 4B+ Bullseye ;LaCrosse; HomeMatic; MapleCUL; ZigBee; Signalduino ESP32 ; Shellys; MQTT2; Grafana mit Influxdb

jamesgo

Hallo Rolf,

im GUI hab ich noch unter funktion "$fld[3]=~"on"?1:0". Das sehe ich im svg auf den ersten Blick nicht.
Hast du das?

Grüße Andy

jamesgo

Hallo,
ich würde vermuten, dass du auch ein Event für 18.6 bekommst.
Bau doch mal ein log ein.
Grüße
Andy

gadget

#738
Zitat von: Frank-Synology-DS215J am 13 November 2019, 22:37:34
Auch so hat es leider nicht funktioniert, auch hier wurden die Werte wieder auf den Ursprungswert gesetzt

Attribute zur Laufzeit zu ändern ist IMHO ganz allgemein schlechter Stil.
Um die Solltemperatur mehrerer Heizkreise zu ändern, würde ich eine structure verwenden und die Zeitprofile bei PWMR ignorieren (state -> Manual).
Ich habe bei mir


defmod HK_WZ structure structHKWZ PWMR_HK05 PWMR_HK06 PWMR_HK07
attr HK_WZ alias SollTemperatur WZ
attr HK_WZ clientstate_behavior absolute
attr HK_WZ evaluateSetResult 1
attr HK_WZ group Heizung
attr HK_WZ icon hm-tc-it-wm-w-eu
attr HK_WZ propagateAttr ^$
attr HK_WZ Wohnzimmer
attr HK_WZ webCmd desired-temp



um die solltemperatur von  PWMR_HK05  PWMR_HK06 und  PWMR_HK07 gleichzeitig zu setzen.


diese haben dann jeweils noch


attr PWMR_HK05 userattr structHKWZ structHKWZ_map structexclude
attr PWMR_HK05 structHKWZ_map desired-temp
attr PWMR_HK05 webCmd desired-temp
attr PWMR_HK05 stateFormat state\
actorState\
<br>\
P: PID_PVal I: PID_IVal D: PID_DVal Pulse: PID_PWMPulse \
<br>\
Ist: temperature °C Soll: desired-temp-used °C
attr PWMR_HK05 devStateIcon FrostProtect:secur_frost_protection:frostProtect+off Manual:time_manual_mode Calculating:robot on:sani_floor_heating@red off:sani_floor_heating_off@blue



Wenn Du die Solltemperatur dann zu verschiedenen Zeiten anders haben will würde ich dann per DOIF die ganze structure umschalten.

Grüße,

gadget

wowogiengen

#739
Hallo gadget, du hast geschrieben:

Zitat von: gadget am 14 November 2019, 09:40:05

defmod HK_WZ structure structHKWZ PWMR_HK05 PWMR_HK06 PWMR_HK07
...
attr HK_WZ propagateAttr ^$
...


Das Attribut propagateAttr nimmt er bei mir nicht an, wenn ich dein defmod 1:1 übernehme...

Viele Grüße
Wolfgang



Edith sagt, dass ich ein FHEM-Update machen sollte... :-)

MrBoe

Hi!

Vor einigen Tagen habe ich damit angefangen und mehrere Dummys angelegt (Temperatursensoren + Relais) womit ich einfach das Schaltverhalten des PWM/PWMR Moduls überwachen wollte. Das alles sah auf den ersten Blick ganz gut aus. Die Dummy-Relais haben wie erwartet geschaltet, wenn ich an den Dummy-Temperatursensoren rumgespielt habe.
Ich habe die Feiertage genutzt und mit einem Pi Zero + Relais und MQTT einen Testaufbau auf meinem Schreibtisch ans laufen gebracht. Manuelles schalten funktioniert wie erwartet fehlerlos und ich bin meinem Ziel, die Fußbodenheizung über FHEM zu steuern gefühlt relativ nah. :) Auf dem ersten Blick sah das auch ganz gut aus - ich habe an den Dummy-Temperatursensoren eine niedrige Temperatur eingestellt und die entsprechenden Relais haben geschaltet. Doch sobald die Zieltemperatur erreicht oder sogar überschritten wird, schalten die Relais nicht mehr aus. Das PWM Modul meldet zwar, (mittels roomsOn / roomsOff) dass alle Räume ausgeschaltet sind, jedoch scheint es ein Problem bei der Übergabe vom PWMR Modul an das richtige Relais zu geben. Zu Testzwecken habe ich alles wieder auf Dummys umgestellt, welche korrekt geschaltet haben.
Lange Geschichte, gar kein Sinn: mit Dummys funktioniert alles, doch mit richtigen Relais leider nicht. Ich vermute also, dass irgendeine Konfiguration an den Relais nicht korrekt ist, obwohl ich diese mittels 'set relaisName on' und 'set relaisName off' in FHEM einwandfrei schalten kann.
Meine Konfiguration sieht derzeit sehr simpel aus. Ich nutze die PWM bzw PWMR Beispiele aus der Commandref:
define fh PWM 60 900 120 1 99,99 0,0,0
define roomKitchen PWMR fh 1,0.11 tempKitchen relaisKitchen
Beides funktioniert mit Dummys. Sobald ich aber einen Dummy durch mein MQTT Relais ersetze, schalten diese nicht mehr aus. Hier die Konfiguration eines Relais:
defmod FloorHeating_Kitchen MQTT2_DEVICE
attr FloorHeating_Kitchen IODev FhemMqttBroker
attr FloorHeating_Kitchen devStateIcon ON:sani_floor_heating@lightblue\
OFF:sani_floor_heating_off@lightblue
attr FloorHeating_Kitchen getList Temperature Temperature Server/Radiator/get
attr FloorHeating_Kitchen icon sani_floor_heating_neutral@lightblue
attr FloorHeating_Kitchen readingList Server/Radiator/flow/temperature:.* Flow\
Server/Radiator/return/temperature:.* Return\
Server/Radiator/state:.* Availability\
Kitchen/Radiator/state:.* state
attr FloorHeating_Kitchen room Küche,Server
attr FloorHeating_Kitchen setList on Kitchen/Radiator/set ON\
off Kitchen/Radiator/set OFF
attr FloorHeating_Kitchen userReadings FlowDegrees {int(100 * ReadingsVal("FloorHeating_Kitchen","Flow",0) + 0.5) / 100 ." °C"},\
ReturnDegrees {int(100 * ReadingsVal("FloorHeating_Kitchen","Return",0) + 0.5) / 100 ." °C"},\
AmbientTemperature {ReadingsVal("TempSensor_Kueche01","temperature",30.0)}

Die setList enthält, wie auch der Dummy, on und off. Leider komme ich an dieser Stelle nicht wirklich weiter. Was mache ich falsch? Sachdienliche Hinweise werden gerne entgegengenommen :)

Viele Grüße
Jan

stromer-12

Hallo,
Kann es sein, das deine Relais den Status als "ON" / "OFF" melden und nicht "on" / "off".Wenn der Status groß geschrieben ist, musst du am der Definition für den Actor noch anpassen.
FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

MrBoe

Klasse, ich glaub das war's! :) Habe nicht gedacht, dass die Groß- und Kleinschreibung einen Einfluss darauf hat, aber das werd ich mir für die Zukunft merken. Danke!

stromer-12

Hallo,

habe die Funktion in Betrieb nehmen wollen, aber deine Änderung vom 5.3. haut nicht richtig hin.

In Zeile 904 ReadingsVal($hash, "maxOffTimeCalculation", "off")muss $hash  durch $name ersetzt werden.

Zitat von: jamesgo am 18 Februar 2019, 14:24:52habe gerade eine neue Version der beiden Module hochgeladen.

93_PWMR unterstützt nun das Attribut "maxOffTime". Das Attribut verhindert, dass der Boden zu stark auskühlt.
94_PWM unterstützt den Befehl "set FB maxOffTimeCalculation on|off" um die Berechnung bei den Räumen generell zu aktivieren/deaktivieren. Z.B. abhängig von der Jahreszeit, Aussentemperatur o.Ä.

Guten Rutsch wünscht
stromer

FHEM (SVN) auf RPi1B mit HMser | ESPLink
FHEM (SVN) virtuell mit HMLAN | HMUSB | CUL

jamesgo

Hallo Stromer,
danke für den Hinweis. Ich werde es mir anschauen.

Grüße Andy

Gesendet von meinem BTV-DL09 mit Tapatalk


jamesgo


Skusi

Hallo, und ein gesundes Neues Jahr.

Auch ich habe mit der maxOffTime Funktion experimentiert, und mich gewundert das es nicht tut was ich erwartet hätte. Daruf das es an einem Fehler im Modul liegt, wäre ich nicht gekommen.
Umso Besser das es nun nach dem Update funktioniert.
Danke jamesgo !

Ein Frage habe ich aber noch:

Wann beginnt das Zeitfenster für die Taktung der Ventile. Wenn ich also alle 2 Stunden einen 20 min Takt einstelle, wann beginnen die 2 Std ?
Hintergrund: ich möchte vermeiden das die Heizkreise alle zur selben Zeit Ihren "Warmhalte Takt" fahren und es dadurch unnötige Leistungsspitzen für den Heizkessel gibt.
RPI3B, SIGNALduino, NanoCul868 (a-culfw), JeeLink Clone (LaCrosse), Firmata  für FB Heizung,Wasser+Gas+Klingel+Lux, Somfy Rolladen, Pollin Steckd.,TX29DTH,ESPEasy an S0 Stromz., MAX Fensterkontakte, IButton, SonOff Tasmota, ESP LED Controler

killah78

Hi, ich verwende auch zum Test mal diese PWM Steuerung für meine Fussbodenheizung.
Ich bin da noch etwas verwirrt, weil ich in die Errechnung der Pulswerter noch nicht so durchsteige.
Bräuchte da mal etwas Hilfe.
Wie wird dieser errechnet?
Habe auf den ersten Seiten dieses Beispiel gefunden:
(pulse = 900 * ( (delta-temp * factor) ** 2) + offset)
(324 = 900 * ((0.5 * 1) **2 + 0.11))

Also Pulslänge 324 Sekunden von 900 Sekunden. Ist dieses doppelte Malzeichen irgendwas mathematisch Spezielles? Warum wird es als geteilt gerechnet?
Ich habe mit dieser Vorlage jetzt versucht meinen Puls zu errechnen:
Solltemp: 21,5
Ist-Temp: 20,6
Delta-Temp also 0,9
(((0,9 * 1,2) ** 2) + 0.11) = 0,65
Ich habe allerdings einen PWMPulse = 100. Warum?
Oder ist diese doppelte Multiplikation doch irgendwas anderes?

Danke und Gruss
killah78

jamesgo

Zitat von: Skusi am 01 Januar 2020, 11:54:50

Ein Frage habe ich aber noch:

Wann beginnt das Zeitfenster für die Taktung der Ventile. Wenn ich also alle 2 Stunden einen 20 min Takt einstelle, wann beginnen die 2 Std ?
Hintergrund: ich möchte vermeiden das die Heizkreise alle zur selben Zeit Ihren "Warmhalte Takt" fahren und es dadurch unnötige Leistungsspitzen für den Heizkessel gibt.

Hallo Skusi,
ebenfalls ein gutes neues Jahr.

Ich habe das so implementiert dass ein Raum der die volle Wartezeit (also 2:00) hinter sich hat, einen Raum der die halbe Wartezeit (also 1:00) überschritten hat "mitzieht". Z.B. der erste Raum war 2:00 Stunden aus, der zweite 1:50,  der dritte 1:01, der vierte 0:30 führt dazu dass Raum eins, zwei und drei eingeschalten werden. Vier aber nicht.

Diese Implementierung hab bei mir zufriedenstellend funktioniert.

Grüße
Andy

jamesgo

Zitat von: killah78 am 02 Januar 2020, 13:39:07

Also Pulslänge 324 Sekunden von 900 Sekunden. Ist dieses doppelte Malzeichen irgendwas mathematisch Spezielles? Warum wird es als geteilt gerechnet?
Ich habe mit dieser Vorlage jetzt versucht meinen Puls zu errechnen:
Solltemp: 21,5
Ist-Temp: 20,6
Delta-Temp also 0,9
(((0,9 * 1,2) ** 2) + 0.11) = 0,65
Ich habe allerdings einen PWMPulse = 100. Warum?
Oder ist diese doppelte Multiplikation doch irgendwas anderes?

Hallo Killah78,

das "**" wird as "hoch 2" ausgewertet nicht als division.

(((0,9 * 1,2) ** 2) + 0.11) = (1.08 ** 2) +0.11 = (1.08 * 1.08) + 0.11 = 1.1664 + 0.11 = 1.2764 ... ist größer als 1 also 100%

Ich kann dir aber nur empfehlen den PID Regler zu verwenden und nicht den einfachen P-Regler.

Grüße
Andy