Heizungssteuerung -Vorstellung-

Begonnen von Mitch, 20 Mai 2014, 09:27:15

Vorheriges Thema - Nächstes Thema

Mitch

#30
So, heute früh konnte ich testen.
Tatsächlich wird nach einem enable der alte Wert eingestellt, was natürlich nicht gewollt ist.

Als Workaround werde ich einen Update nach enable schicken (dein Code hat einen Fehler, die Routine muss in geschweifte Klammern):

{Heating_Control_SetAllTemps()}

Als Lösung werde ich einen Script für die myUtils schreiben bzw. {Heating_Control_SetAllTemps()} umschreiben, dass nur die eine Heizung upgrdated wird.
Vielleicht schreib ich auch konplett dafür eine Routine.
FHEM im Proxmox Container

Ascos

Hey Mitch,

du schreibst "eckige Klammern", in deinem Code sind es aber geschweifte. Hab es mit geschweiften probiert und nun geht es einwandfrei.
Vielen Dank!

VG
AScos
1x RaspberryPi 3, HMUART, HMLAN
4x HM-CC-RT-DN, 4x HM-Sec-SCo, 4x HM-TC-IT-WM-W-EU, 1 Jeelink, 4 Lacrosse Fühler, 2 LD382A
1x ZBox mit Kodibuntu, mehrere schaltbare Steckdosen

Mitch

Ja, war natürlich falsch, ich meinte geschweifte Klammern ;D
FHEM im Proxmox Container

Mitch

So, wollte heute mal das HCS modifizieren und habe im Code einen neuen Punkt window gefunden. Darauf hin im commandref nachgesehen und siehe da, das Thema sit schon implementiert.

Somit braucht man keinen DOIF oder ähnliches aufs Fenster machen und HCS aus disable setzten.

Toll, Danke!
FHEM im Proxmox Container

richberry22

Hi Mitch,

kannst Du bitte erklären warum jetzt kein disable auf das Thermostat mehr sein muss? Bei mir funktioniert es bisher nur mit einem DOIF und disable.

Ascos

Zitat von: richberry22 am 02 Oktober 2015, 21:35:36
Hi Mitch,

kannst Du bitte erklären warum jetzt kein disable auf das Thermostat mehr sein muss? Bei mir funktioniert es bisher nur mit einem DOIF und disable.

Hey,

Es gibt in dem Modul ein Attribut das nennt sich WindowSensor. Da trägst du deinen Fensterkontakt ein. Sobald dein Fester geöffnet wird, schaltet dein Heizungsmodul nicht mehr, sondern wartet, bis das Fenster wieder geschlossen wurden.

VG
Tino
1x RaspberryPi 3, HMUART, HMLAN
4x HM-CC-RT-DN, 4x HM-Sec-SCo, 4x HM-TC-IT-WM-W-EU, 1 Jeelink, 4 Lacrosse Fühler, 2 LD382A
1x ZBox mit Kodibuntu, mehrere schaltbare Steckdosen

Mitch

Genau so ist es.

Ich habe das Modul dann noch modifiziert, dass ich einen Dummy als Fenster einsetzten kann. Somit kann ich nochmal Einfluß auf die Heizung nehmen.
Bei mir ist das die ECO Schaltung, die einen Dummy auf den state "open" setzt und dieser wiederum die HCs auf Window open.
FHEM im Proxmox Container

richberry22

Hi Mitch & Ascos,

vielen Dank für die Aufklärung.

Schönen Abend.

VG

AnonymousHolger

Hallo Mitch,

nachdem meine FHTs ja schon lange mit deinem HeatControl super laufen, habe ich immer das "Problem", wenn ich mal wieder an der Config Bastle und "rereadcfgs" machen, dass die Sollwerte dann wild gesetzt werden.

Gibt es dafür auch eine "set all temps" Möglichkeit ?
Ich steig aus den Infos aus diesem Threat irgendwie nicht durch ... :-( ... als Zusatz in der Wiki würd ich es ggf. besser verstehen.

Habe jetzt auch meine ersten HM-TC-IT-WM und HM-CC-RT-DN mit in mein System eingebunden, mit temporärer ganz gutem Erfolg auch mit Heizungs Control , aber nun meldet sich das System immer wieder ab.

Stellst du deine FHTs anders dar wie deine HM Regler ? Würde das ganze für ein Frauenakzeptables Interface gerne so aufsetzen, dass der FHEM User garnicht erkennt ob FHT oder HM Regler.

Gerne auch dein cfg zur Kopie (PN) dann kann ich damit ggf versuchen, den Syntax zu knacken ... ist für mich immer etwas schwierig, da ich nur zu Winterzeiten dazu komme, die Heizung mal wieder zu optimieren.

Danke

Gruss

Holger

Mitch

Hi Holger

Zitat von: AnonymousHolger am 02 November 2015, 21:27:38nachdem meine FHTs ja schon lange mit deinem HeatControl super laufen, habe ich immer das "Problem", wenn ich mal wieder an der Config Bastle und "rereadcfgs" machen, dass die Sollwerte dann wild gesetzt werden.

Das sollte man auch nicht machen. Warum machst du einen rereadcfg? Du kannst doch alles über im Frontend editieren und verändern, dann hast Du auch keine Probleme mehr  ;)

Zitat von: AnonymousHolger am 02 November 2015, 21:27:38Gibt es dafür auch eine "set all temps" Möglichkeit ?
Ich steig aus den Infos aus diesem Threat irgendwie nicht durch ... :-( ... als Zusatz in der Wiki würd ich es ggf. besser verstehen.

Entweder du nutzt dafür einen Structur, oder einen Script.
ich habe beides, eine Structur (diese aber über alle Ventile, FHT & HM) und zum schalten der FHTs den Script FHTnominal (siehe unten).
Um alle Ventile auf die Sollwerte zu stellen, die ich in den einzelnen Heating_Control Instanzen definiert habe, verwende ich {Heating_Control_SetAllTemps()}.

Zitat von: AnonymousHolger am 02 November 2015, 21:27:38Habe jetzt auch meine ersten HM-TC-IT-WM und HM-CC-RT-DN mit in mein System eingebunden, mit temporärer ganz gutem Erfolg auch mit Heizungs Control , aber nun meldet sich das System immer wieder ab.

Was meinst Du mit abmelden?

Zitat von: AnonymousHolger am 02 November 2015, 21:27:38Stellst du deine FHTs anders dar wie deine HM Regler ? Würde das ganze für ein Frauenakzeptables Interface gerne so aufsetzen, dass der FHEM User garnicht erkennt ob FHT oder HM Regler.

Also es ist eigentlich egal, was im Hintergrund läuft, HM, FHT; Max, etc. im Frontend ist bei mir immer alles gleich.
Habe auch noch eine ReadingGroup über alle Ventile, auch da merkt man keinen Unterschied.

Zitat von: AnonymousHolger am 02 November 2015, 21:27:38Gerne auch dein cfg zur Kopie (PN) dann kann ich damit ggf versuchen, den Syntax zu knacken ... ist für mich immer etwas schwierig, da ich nur zu Winterzeiten dazu komme, die Heizung mal wieder zu optimieren.

Hier mal ein paar Codezeilen von FHTnominal als Idee:

FHTnominal in der 99_myUtils.pm
sub FHTnominal($) {
# Solltemperatur (auto) eines FHT zur aktuellen Uhrzeit ermitteln
  my($fht) = @_;
  my $jetzt = strftime("%R", localtime(time));
  my @wdays = qw(sun mon tue wed thu fri sat);
  my $tag = $wdays[strftime("%w", localtime(time))];
  my $f1 = ReadingsVal($fht,$tag . "-from1","00:00");
  my $f2 = ReadingsVal($fht,$tag . "-from2","00:00");
  my $t1 = ReadingsVal($fht,$tag . "-to1","24:00");
  my $t2 = ReadingsVal($fht,$tag . "-to2","24:00");

  if(($jetzt ge $f1 && $jetzt le $t1) || ($jetzt ge $f2 && $jetzt le $t2)){
     if (ReadingsVal("d_ECOMode_counter", "state", "0") eq "1") {
       fhem("set $fht desired-temp " .
ReadingsVal($fht,"day-temp","21.0")-2)
  } else {
  fhem("set $fht desired-temp " .
ReadingsVal($fht,"day-temp","21.0"))
  }} else {
    fhem("set $fht desired-temp " .
ReadingsVal($fht,"night-temp","14.0"))
  }
}




Danke

Gruss

Holger
[/quote]
FHEM im Proxmox Container

AnonymousHolger

Hallo Mitch,
super danke für die schnelle Antwort.
Dein {Heating_Control_SetAllTemps()} hab ich in der cfg eingebaut und scheint zu funktionieren.

Meine "manuelle" Anpassung der cfg kommt daher, dass ich meine ganze Config umgebaut hab (alle Regler umbenannt, etc). Ja .. das geht auch via Interface, war mir aber "zu aufwändig" und zu "riskant".

Jetzt werde ich aber mal in den "sauren Apfel" beissen und es endlich so machen wie alle empfehlen ;-).
Alle manuellen Einträge raus, Autocreate an, HM Devices anschliessend wie beschrieben einbinden und anschliessend mit SaveConfig alle Einträge speichern (und dann ggf. umsortieren in eine HomeMatic CFG für die Übersichtlichkeit)
Wenn man aber alle Einträge von Hand mit Group/Room etc umzieht dauert das etwas ;-)

Sobald ich das stabil habe melde ich mich noch mal. Deine "Structur" interessiert mich brennend ;-) ....

Wird noch ein langer Abend ;-) ....

Mitch

Gerne Hoger  ;)

ABER, es ist nich mein {Heating_Control_SetAllTemps()}, sondern ein Teil des Heating_Control & WeekdayTimer Modul von Dietmar63 => http://forum.fhem.de/index.php?action=profile;u=405
Und es ist auch nicht meine structure, sondern ein Helper Modul von fhem => http://fhem.de/commandref.html#structure

Nicht das hier falsche Dinge aufkommen, will mich ja nicht mit fremden Feder schmücken  ;)

Ich habe hier nur meine Heizungssteuerung auf Basis von einigen Modulen vorgestellt.
FHEM im Proxmox Container

Mitch

#42
Nachdem ich mittlerweile noch etwas umgebaut habe und einen Mischbetrieb mit FHT und HM habe, hier ein Update:

Nach wie vor benutze ich die Module Heating_Control und HCS, sowie den Script FHTnominal und ein paar selbst geschriebene Scripte.

Mit Heating_Control habe ich jeden Raum definiert
Beispiel eines FHT:
define HCWK Heating_Control FHT_Waschkeller 1234|12:30|18 57|09:00|18 19:00|14 (ReadingsVal("HCAutomatik", "state", "off") eq "on")
attr HCWK alias Waschkeller
attr HCWK group Heizplan
attr HCWK room Heizung
attr HCWK verbose 3
attr HCWK windowSensor CUL_FHTTK_Waschkeller  d_ECOMode

und eines HM:
define HCO Heating_Control HZ_Buero_Clima 1234|12:00|21.5 5|08:00|21.5 7|09:00|21.5 19:00|16 (ReadingsVal("HCAutomatik", "state", "off") eq "on")
attr HCO alias Büro
attr HCO comment (ReadingsVal("HCAutomatik", "state", "") eq "on")
attr HCO group Heizplan
attr HCO room Heizung
attr HCO verbose 3
attr HCO windowSensor Fenster_Buero  d_ECOMode


Den Heizplan schalte ich nach wie vor mit einem Dummy:
define HCAutomatik dummy
attr HCAutomatik alias Heizungsautomatik
attr HCAutomatik devStateIcon on:general_an off:general_aus
attr HCAutomatik group Automatik
attr HCAutomatik icon sani_heating_automatic
attr HCAutomatik room Heizung
attr HCAutomatik sortby 1
attr HCAutomatik webCmd on:off


Den notify auf die Automatik habe ich mittlerweile auf einen DOIF umgebaut:
define HeatingControl.Aktivator DOIF ([HCAutomatik] eq "on") (set HCS_System on,{Heating_Control_SetAllTemps()})\
DOELSE (set FHT_.* desired-temp 8.0,set Heizungsventile desired-temp 8.0,set HCS_System off,set Pushover msg 'FHEM' 'Heizplan ausgeschalten')
attr HeatingControl.Aktivator cmdState on|off
attr HeatingControl.Aktivator devStateIcon on:keines off:keines


Bei Deaktivierung werden alle Thermostate (FHT und HM - diese über eine structure) auf 8 Grad eingestellt. Das ist auch die "Fenster offen" Temperatur, damit bei Fenster auf und zu nicht immer das Ventil "geschalten" wird.
Ansonsten schicken ich mir immer noch eine Pushover, allerdings nun mit dem Pushover Modul.

Das HCS Modul ist noch genauso:
define HCS_System HCS Vaillant
attr HCS_System alias Vaillant Steuerung
attr HCS_System devStateIcon demand:sani_heating_temp idle:sani_heating_manual off:general_aus
attr HCS_System deviceCmdOff off
attr HCS_System deviceCmdOn on
attr HCS_System event-on-change-reading state,devicestate,eco,overdrive
attr HCS_System icon sani_heating_manual
attr HCS_System idleperiod 5
attr HCS_System interval 5
attr HCS_System mode valve
attr HCS_System room Heizung
attr HCS_System thermostatThresholdOff 0.1
attr HCS_System thermostatThresholdOn 0.2
attr HCS_System valveThresholdOff 40
attr HCS_System valveThresholdOn 35
attr HCS_System verbose 2


Die Ansteuerung meiner Heizung ist nun auch ein HM Empfänger:
define Vaillant CUL_HM 39212B
attr Vaillant IODev HMLan
attr Vaillant IOgrp VCCU
attr Vaillant alias Vaillant Therme
attr Vaillant autoReadReg 4_reqStatus
attr Vaillant devStateIcon on:ios-on-green off:ios-off
attr Vaillant event-on-change-reading state
attr Vaillant expert 2_full
attr Vaillant firmware 1.6
attr Vaillant group HCS
attr Vaillant icon sani_boiler_temp
attr Vaillant model HM-LC-SW1-BA-PCB
attr Vaillant msgRepeat 1
attr Vaillant peerIDs 00000000,
attr Vaillant room Heizung
attr Vaillant subType switch
attr Vaillant webCmd on:off


Meine ECO Script habe ich auch um einige Parameter ergänzt und auf DOIF umgebaut:
define ECOMode DOIF ([Anwesenheit] eq "Unterwegs" and [HCAutomatik] eq "on") (set HZ.Absenkung unterwegs,{ecomode})\
DOELSEIF ([Mitch.Homestatus.whereis] eq "faraway" and [Person.Homestatus.whereis] eq "faraway" and [HCAutomatik] eq "on") (set HZ.Absenkung unterwegs,{ecomode})\
DOELSEIF ([HZ.Absenkung] eq "on" and [HCAutomatik] eq "on") ({ecomode})\
DOELSEIF ([Sonnenindikator] eq "on" and [HCAutomatik] eq "on") (set HZ.Absenkung sonne,set d_ECOMode open,{ecomode})\
DOELSEIF ([Anwesenheit] eq "Zuhause" and [Sonnenindikator] eq "off" and [HCAutomatik] eq "on") (set HZ.Absenkung nein,set d_ECOMode closed,set d_ECOMode_counter 0,{Heating_Control_SetAllTemps()})\
DOELSEIF ([Mitch.Homestatus.whereis] eq "coming_home" and [HCAutomatik] eq "on") (set HCKurztrip off,set HZ.Absenkung nein,set d_ECOMode closed,set d_ECOMode_counter 0,{Heating_Control_SetAllTemps()})\
DOELSEIF ([Person.Homestatus.whereis] eq "coming_home" and [HCAutomatik] eq "on") (set HCKurztrip off,set HZ.Absenkung nein,set d_ECOMode closed,set d_ECOMode_counter 0,{Heating_Control_SetAllTemps()})\
DOELSEIF ([HZ.Absenkung] eq "off" and [HCAutomatik] eq "on") (set d_ECOMode closed,set d_ECOMode_counter 0,{Heating_Control_SetAllTemps()})
attr ECOMode cmdState unterwegs|weitweitweg|on|sonne|zuhause|coming_home–mitch|coming_home_person|off
attr ECOMode devStateIcon on:keines off:keines
attr ECOMode do always
attr ECOMode wait 3600:1800:0:0:0:0:0:0


Das ganze ist ein Zusammenspiel aus Dummys, Außentemperatur, Innentemperatur und Geofancy Daten.
Im Prinzip ist die Funktion folgende:
Niemand Zuhause für 1 Stunde, Außen- und Innentemperatur über einen bestimmten Wert (Sonnenindikator) oder Kurztrip an, dann Heizung wird 2 Grad gesenkt.
Kommt jemand in einen Umkreis von 10km oder kleiner wird wieder auf Solltemperatur geschalten.

Damit Heating_Control dabei nicht einfach schaltet, wird über ein virtuelles Fenster "d_ECOMode" das WindowOpen an HC gemeldet und das ganze mit einem Dummy "d_ECOMode_counter" gegen gecheckt. (Damit dies funktioniert, muss das Modul 98_WeekdayTimer.pm gepachted werden!

Hier noch die ECOMode Dummys:
define d_ECOMode dummy
attr d_ECOMode setList open closed

define d_ECOMode_counter dummy


Zusätzlich diese Scripte in der 99_myUtils.pm:
sub ecomode {
    if (ReadingsVal("d_ECOMode_counter", "state", "0") eq "0") {
        {
        my @FHT=devspec2array("TYPE=FHT");
        foreach(@FHT) {
            my $tp = ReadingsVal("$_", "desired-temp", "")-2;
            if (ReadingsVal("$_", "desired-temp", "") > "16") {
                fhem("set $_ desired-temp ".$tp)
                }
            }
        }
        {
        my @HM_HT=devspec2array("HZ_.*._Clima");
        foreach(@HM_HT) {
            my $tpHM = ReadingsVal("$_", "desired-temp", "")-2;
            if (ReadingsVal("$_", "desired-temp", "") > "16") {
                fhem("set $_ desired-temp ".$tpHM)
                }
            }
        }
        {
        my @HM_WT=devspec2array("HZ_.*._WT_Climate");
        foreach(@HM_WT) {
            my $tpWT = ReadingsVal("$_", "desired-temp", "")-2;
            if (ReadingsVal("$_", "desired-temp", "") > "16") {
                fhem("set $_ desired-temp ".$tpWT)
                }
            }
        }
    }
    fhem("set d_ECOMode_counter 1")
}


Des weiteren habe ich ein paar virtuelle Türen und Fenster, die verschiedene Thermostate nach bestimmten Bedingungen auf WindowOpen schalten.
z.B. wenn die Haustür länger wie 5 Minuten auf ist.

Viel Spaß beim Nachbauen  ;)
FHEM im Proxmox Container

AnonymousHolger

Hallo Mitch ... automatischer gehts nicht mehr  :D :D

Also ich hab jetzt die HM eingebunden und sieht auch schon besser aus ;-).
In meiner Liste der HCS Profile sieht es auch schon gut aus ;-).
Allerdings bekomme ich in meinen Plot den Aktor nicht angezeigt (wie krieg ich den ? Der ist doch im Heizungsregler, muss ich noch einen Kanal pairen ? Oder den Logfile aus Raumregler und Heizungsregler basteln ?)

Hast du ein paar Screenshots wie es bei dir aussieht bzgl. der Mischung der HM und FHT Regler ?

Mitch

Klar, anbei ein paar Screenshots

1. HCS und Heating_Control
2. ReadingGroup aller Thermostate
3. HM Wandthermostat und Heizkörperthermostat
4. Der Plot dazu
5. FHT Thermostate
6. Der Plot dazu
FHEM im Proxmox Container