Hauptmenü

Heat Contol Max

Begonnen von Marvin, 14 Februar 2013, 22:10:49

Vorheriges Thema - Nächstes Thema

Marvin

Hallo zusammen,

erst einmal ein riesen Lob an alle die so fleißig an der Weiterentwicklung des MAX Moduls arbeiten.Bitte macht weiter so.

Ich habe ein Programm für die Heizungssteuerung angepasst, so das man es mit den MAX Komponenten nutzen kann. Es setzt hauptsächlich auf die Steuerung aus dem Artikel "Heizungskontrolle Einfach mit HomeMatic" aus dem fhemwiki auf.

Da ich bis vor ein paar Tagen noch absolut keine Ahnung von Perl hatte, hoffe ihr verzeiht mir meinen Schlampigen Programmier Stiel und vielleicht kann ja jemand das Programm noch verbessern.
Wenn es jemand nutzen möchte, müssen natürlich die Namen der HeizungsThermostate (Regler) angepasst werden. Sie werden leider nicht Automatisch gesucht, wie es in dem Ursprungsprogramm der Fall ist.
Genauso können die Hysterese Werte nach belieben angepasst werden.
Ich schalte Über ein HomeMatic 4fach Relaismodul den Fernverriegelungseingang meiner Heizung kurz, so das sie aus geht.

Ich habe das Programm im die 99_MyUtils.pm eingebunden und es wird alle 10 min durch ein at ausgeführt.
define prog_HeizungMAX at +*00:10:00 {heatContolMAX}

Folgender Code muss in der 99_MyUtils.pm eingefühgt werden
# Erzeugt die Funktion heatContolMAX()
#
sub
heatContolMAX()
 {
# Start des Heizungssteuerung
# Initialisierung der Variablen
 my $Badezimmer_Regler = "Badezimmer_Regler";
 my $Kinderzimmer_Regler = "Kinderzimmer_Regler";
 my $Wohnzimmer_Regler_Rechts = "Wohnzimmer_Regler_Rechts";
 my $Wohnzimmer_Regler_links = "Wohnzimmer_Regler_links";
 my $Schlafzimmer_Regler = "Schlafzimmer_Regler";
 my $brauche_waerme=2;


   # Ermittel der Ventielstände, für jedes Ventiel wir ein Eintrag im Log mit der aktuellen Ventielstellung generiert
   my $ventil_Badezimmer_Regler=ReadingsVal($Badezimmer_Regler, "valveposition", "100");
   Log 1, "ventil_Badezimmer_Regler : $ventil_Badezimmer_Regler";
   my $ventil_Kinderzimmer_Regler=ReadingsVal($Kinderzimmer_Regler, "valveposition", "100");
   Log 1, "ventil_Kinderzimmer_Regler : $ventil_Kinderzimmer_Regler";
   my $ventil_Wohnzimmer_Regler_Rechts=ReadingsVal($Wohnzimmer_Regler_Rechts, "valveposition", "100");
   Log 1, "ventil_Wohnzimmer_Regler_Rechts : $ventil_Wohnzimmer_Regler_Rechts";
   my $ventil_Wohnzimmer_Regler_links=ReadingsVal($Wohnzimmer_Regler_links, "valveposition", "100");
   Log 1, "ventil_Wohnzimmer_Regler_links : $ventil_Wohnzimmer_Regler_links";
   my $ventil_Schlafzimmer_Regler=ReadingsVal($Schlafzimmer_Regler, "valveposition", "100");
   Log 1, "ventil_Schlafzimmer_Regler : $ventil_Schlafzimmer_Regler";
 
   # Entscheidung ob Wärme benötigt wird (Ja, wenn mindestens ein Ventil mehr als 40% geöffnet ist)
   if ($ventil_Badezimmer_Regler > 40 || $ventil_Schlafzimmer_Regler > 40 || $ventil_Kinderzimmer_Regler > 40 || $ventil_Wohnzimmer_Regler_Rechts > 40 || $ventil_Wohnzimmer_Regler_Rechts > 40) {
     $brauche_waerme=1
   }
   # Hysterese zur Abschaltung der Heizung (Heizung aus, wenn alle Ventile weniger als 35% geöffnet sind)
   if ($ventil_Badezimmer_Regler < 35 && $ventil_Schlafzimmer_Regler < 35 && $ventil_Kinderzimmer_Regler < 35 && $ventil_Wohnzimmer_Regler_Rechts < 35 && $ventil_Wohnzimmer_Regler_Rechts < 35) {
     $brauche_waerme=0
   }
   
# Steuerbefehl für Heizung an wenn ein Ventil über 45%.
if ($brauche_waerme==1) {
   Log 3,"Waerme benoetigt!";
   # Schalte Ausgang "A1_A1_Sw_01" auf off / es ist ein HM-LC-SW4-PCB der den Fernverriegelungseingang meiner Heizung wieder freigibt
   fhem("set A1_A1_Sw_01 off");
   # Generiert einen LogFile Eintrag für das dummy Device "Waermebedarf"
   fhem("set Waermebedarf on");
 }
   # Heizung abschalten, wenn alle Ventile unter 35%.
if ($brauche_waerme==0) {
     Log 3,"Keine Waerme (mehr) benoetigt.";
     # Schalte Ausgang "A1_A1_Sw_01" auf on / es ist ein HM-LC-SW4-PCB der den Fernverriegelungseingang meiner Heizung wieder verriegelt
     fhem("set A1_A1_Sw_01 on");
     # Generiert einen LogFile Eintrag für das dummy Device "Waermebedarf"
     fhem("set Waermebedarf off");
     }

# Mit dieser Abfrage werden die Werte zwischen 35% und 40 % abgefangen.
if (Value("Waermebedarf") eq "on") {
       fhem("set Waermebedarf on")}
     else {
       fhem("set Waermebedarf off")}

}


Zusätzlich zur Anzeige wird noch der Dummey "Waermebedarf" benötigt.
define Waermebedarf dummy

Hoffe es kann jemand was damit anfangen, bei Funktioniert es soweit ganz gut.

Marvin

Icebear

Hallo,

ich kann zwar damit nix anfangen, aber ich würde nicht die brennersperre zweckentfremden :) habe ich auch gemacht (allerdings mit dem HCS Modul) und festgestellt das die Pumpenregelung der Heizung umgangen wird. Will heissen bei der Junkers Heizung die ich hier habe laeuft die Pumpe durch, weil vom Thermostat (was natürlich auf dauerein steht damits überhaupt geht) ein ein kommt und die heizungsregelung von der brennersperre nicht wirklich was mitbekommt. Besser ist es, der Heizung eine Anforderung eines Thermostats vorzugaukeln damit die restliche Regelung der Heizung noch greift. Falls du ne Junkers hast meld dich einfach.

Nebenbei. der Progger das MAX Moduls hätte 2 monate vorher was sagen sollen :) hatte erst die Max Thermostate hier aber die waren nicht per FHem steuerbar ... (zu der Zeit) und danach prompt die FHTs (7 Stück mit fenstermelder usw) gekauft.... Könnt ich mich heut noch drüber aufregen .... Im September gekauft mitte November die ersten anmerkungen das MAX kommt .. noch mit dem MAXCube und nen monat später oder so scho per CUL (den ich natürlich auch habe) ...
aber egal :)
und wech
Raspberry PI mod B (Wheezy), Fhem 5.4, CUL868, CUL433 , RfxTrx, HM-USB-CFG2, Wlan, HomeEasy, IT, FS20, TFA, HomeMatic, Oregon Scientific, HMLand auf Fritzbox
Raspberry PI mod B (RaspBMC)

Marvin

Ich habe auch eine Junkers, aber ich benutze den Fernverriegelungseingang des Bus Thermostates, der ist extra dafür gedacht um die Heizung, damals noch über ein Telefonrelais zu deaktivieren.
Meinen Beobachtungen nach wird dabei auch die Pumpe deaktiviert.
Oder meinst du das ich dort lieber einen widerstand einbringen sollte das der Heizung eine niedrige Temperatur vorgaukelt?
An dem Eingang kann ich auch einen abgesetzten Temperaturfūhler anschließen.

Wie hast du es bei deiner Heizung gelößt?

Marvin

adjust

Thanks for the example. I modified it to make it easier to configure the temperatures and device names. Code is escaped for inclusion in fhem.cfg. The boiler is controlled by RaspberryPi GPIO.


# dummy device for boiler control
define BoilerState dummy
set BoilerState off
attr BoilerState webCmd on:off
# notify rule to set GPIO for boiler relay operation
# remember to set pin options in init script
define n_BoilerState notify BoilerState {\
  if ("%"eq"on") {`echo "1" > /sys/class/gpio/gpio29/value`}\
  elsif ("%"eq"off") {`echo "0" > /sys/class/gpio/gpio29/value`}\
}

define a_BoilerInterlock at +*00:10:00 trigger BoilerInterlock

define BoilerInterlock notify BoilerInterlock {\
  Log 3, "BoilerInterlock triggered";;\
  my $onDemand = 40;;\
  my $offDemand = 35;;\
  my $boilerDevice = "BoilerState";;\
  my @@valves = ("TRV_BR","TRV_LR","TRV_OF");;\
  my $gtOnDemand = 0;;\
  my $gtOffDemand = 0;;\
  for my $valve (@@valves) { \
    my $demand = ReadingsVal($valve,"valveposition","100");;\
    Log 3, "$valve valveposition $demand";;\
    if ($demand > $onDemand) {$gtOnDemand++;;} \
    if ($demand > $offDemand) {$gtOffDemand++;;} \
  } \
  if ($gtOnDemand > 0) { \
    Log 3, "$gtOnDemand valves > $onDemand so setting boiler on";;\
    fhem("set $boilerDevice on");;\
  } \
  if ($gtOffDemand == 0) { \
    Log 3, "$gtOffDemand valves > $offDemand so setting boiler off";;\
    fhem("set $boilerDevice off");;\
  }\
}

Icebear

also ich habe den 1-2-4 bus und den leichten vorteil das ein fehlen eines Themostats die Heizung einschaltet.

ALso habe ich ein Relais genommen und die Steuerleitung des Thermostats unterbrochen wenn ich den Brenner anhaben will. Vorteil 1 die Heizung meint sie bekommt ne anforderung und heizt. Vorteil 2 ich habe das Original Thermostat auf eine Sinnvolle Temperatur bei Nachtbetrieb eingestellt so das (sollte das Relais tatsaechlich mal spinnen) das Thermostat greifen wuerde (bei 1 Grad unter dem was ich normal habe) und zumindest eine Minimaltemperatur aufrecht erhält...

Raspberry PI mod B (Wheezy), Fhem 5.4, CUL868, CUL433 , RfxTrx, HM-USB-CFG2, Wlan, HomeEasy, IT, FS20, TFA, HomeMatic, Oregon Scientific, HMLand auf Fritzbox
Raspberry PI mod B (RaspBMC)

Marvin

Das wäre auch eine Möglichkeit,
aber da mein Original BUS Thermostat nicht nur die Temperatur regelt, sondern auch die Steuerung der Außentemperaturabhängigen Vorlauftemperatur, halte ich die Möglichkeit des Fernverriegelungseingangs in meine Fall für die Bessere.Der ist halt dafür da.
Wenn ich das Thermostat abklemme Schaltet sich meine Heizung ins Notprogramm und bollert mit 100% Leistung durch.

Aber bei einem einfachen Thermostat macht dein Anwendungsbeispiel Sinn.

Marvin

Tobias

Die Frage am Rande.... was macht das Programm anders als das Modul HCS?
Maintainer: Text2Speech, TrashCal, MediaList

Meine Projekte: https://github.com/tobiasfaust
* PumpControl v2: allround Bewässerungssteuerung mit ESP und FHEM
* Ein Modbus RS485 zu MQTT Gateway für SolarWechselrichter

Maxel

Zitat von: Marvin am 20 Februar 2013, 22:11:35
Das wäre auch eine Möglichkeit,
aber da mein Original BUS Thermostat nicht nur die Temperatur regelt, sondern auch die Steuerung der Außentemperaturabhängigen Vorlauftemperatur, halte ich die Möglichkeit des Fernverriegelungseingangs in meine Fall für die Bessere.Der ist halt dafür da.
Wenn ich das Thermostat abklemme Schaltet sich meine Heizung ins Notprogramm und bollert mit 100% Leistung durch.

Aber bei einem einfachen Thermostat macht dein Anwendungsbeispiel Sinn.

Marvin
FHEM auf Banana Pi
CUL V3 (FS20), Homematic, MAX, 1-Wire, Lacrosse (LaCrosseGateway)

der-Reisende

Zur Zeit versuche ich Heating Control MAX von adjust einzusetzen.

Und nachdem ich @@valves zu @valves geändert habe läuft das Programm zumindest auch fehlerfrei durch

Eine Sache jedoch will mir nicht gelingen, in dem Skript wird der Brenner mit Relais geschaltet.
define n_BoilerState notify BoilerState {\
  if ("%"eq"on") {`echo "1" > /sys/class/gpio/gpio29/value`}\
  elsif ("%"eq"off") {`echo "0" > /sys/class/gpio/gpio29/value`}\
}


Nun versuche ich seit einiger Zeit meinen MAX Funkschalter dort einzubauen bzw. ersetzen.
Also set MAX_Schalter desiredTemperature on bzw. off

Als Notlösung habe ich bisher einfach ein weiteres Notify angelegt der die Schaltung übernimmt jedoch würde ich sehr gerne diese Relaisgeschichte ersetzen und vielleicht sogar verstehen.

pc1246

Zitat von: der-Reisende am 17 Oktober 2018, 15:36:01
Zur Zeit versuche ich Heating Control MAX von adjust einzusetzen.

Und nachdem ich @@valves zu @valves geändert habe läuft das Programm zumindest auch fehlerfrei durch

Eine Sache jedoch will mir nicht gelingen, in dem Skript wird der Brenner mit Relais geschaltet.
define n_BoilerState notify BoilerState {\
  if ("%"eq"on") {`echo "1" > /sys/class/gpio/gpio29/value`}\
  elsif ("%"eq"off") {`echo "0" > /sys/class/gpio/gpio29/value`}\
}


Nun versuche ich seit einiger Zeit meinen MAX Funkschalter dort einzubauen bzw. ersetzen.
Also set MAX_Schalter desiredTemperature on bzw. off

Als Notlösung habe ich bisher einfach ein weiteres Notify angelegt der die Schaltung übernimmt jedoch würde ich sehr gerne diese Relaisgeschichte ersetzen und vielleicht sogar verstehen.
Moin
Und ein herzliches Willkommen im Forum.
Ich antworte Dir mal, allerdings ungetestet.
define n_BoilerState notify BoilerState {\
  if ("%"eq"on") {fhem("set MAX_Schalter desiredTemperature on")}\
  elsif ("%"eq"off") {fhem("set MAX_Schalter desiredTemperature off")}\
}

Da der Ursprungspost allerdings 5 1/2 Jahre alt ist, und sich inzwischen doch einiges getan hat, solltest Du Dir vielleicht mal MSwitch (https://wiki.fhem.de/wiki/MSwitch) oder DOIF (https://wiki.fhem.de/wiki/DOIF) ansehen!
Gruss Christoph
HP T610
Onkyo_AVR;3 Enigma2; SB_Server ; SB_Player; HM-USB mit 15 HM-CC-RT-DN, 3 HM_WDS10_TH_O, 6 HM-Sec-SCo, 4 HM-Sec-MDIR-2, 1 HM-Sen-MDIR-O-2, 8 Ferion 5000 OW ; PhilipsTV; 4 harmony hub; Jeelink mit 9 PCA301; Somfy; S7-300; 3 LGW; HUE; HM-IP auf Charly